From 97d819aaaf7f01dc9cd5654bced8af0032f49df4 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 31 Oct 2026 14:43:37 +0000 Subject: [PATCH 1/4] =?UTF-8?q?Gro=C3=9F-=20und=20Kleinschreibung=20in=20L?= =?UTF-8?q?4,=20=C3=9Cbungen=20=E2=80=9EWarum=20l=C3=A4uft=20das=20nicht?= =?UTF-8?q?=3F=E2=80=9C=20in=20L4=E2=80=93L19?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Ugz28WeJgSK78Eaojuz8vh --- web/lessons/de/04-variablen-und-datentypen.md | 51 +++++++++++++++++++ web/lessons/de/05-sequenz.md | 15 ++++++ web/lessons/de/06-eingabe-und-ausgabe.md | 16 ++++++ .../de/07-simulation-und-schreibtischtest.md | 15 ++++++ web/lessons/de/08-verzweigung.md | 15 ++++++ web/lessons/de/09-bedingungen-verknuepfen.md | 15 ++++++ web/lessons/de/10-fallauswahl.md | 15 ++++++ web/lessons/de/11-while-schleife.md | 15 ++++++ web/lessons/de/12-do-while-schleife.md | 15 ++++++ web/lessons/de/13-for-schleife.md | 15 ++++++ web/lessons/de/14-verschachteln.md | 15 ++++++ web/lessons/de/15-arrays.md | 15 ++++++ web/lessons/de/16-zweidimensionale-arrays.md | 15 ++++++ web/lessons/de/17-zeichenketten.md | 15 ++++++ web/lessons/de/19-suchen-und-sortieren.md | 15 ++++++ .../en/l04-gross-klein-loesung.visustruct | 15 ++++++ .../en/l04-gross-klein-start.visustruct | 15 ++++++ .../l04-java-laeuft-nicht-loesung.visustruct | 12 +++++ .../en/l04-java-laeuft-nicht-start.visustruct | 12 +++++ .../l05-java-laeuft-nicht-loesung.visustruct | 15 ++++++ .../en/l05-java-laeuft-nicht-start.visustruct | 15 ++++++ .../l06-java-laeuft-nicht-loesung.visustruct | 9 ++++ .../en/l06-java-laeuft-nicht-start.visustruct | 9 ++++ .../l07-java-laeuft-nicht-loesung.visustruct | 15 ++++++ .../en/l07-java-laeuft-nicht-start.visustruct | 15 ++++++ .../l08-java-laeuft-nicht-loesung.visustruct | 19 +++++++ .../en/l08-java-laeuft-nicht-start.visustruct | 19 +++++++ .../l09-java-laeuft-nicht-loesung.visustruct | 19 +++++++ .../en/l09-java-laeuft-nicht-start.visustruct | 19 +++++++ .../l10-java-laeuft-nicht-loesung.visustruct | 24 +++++++++ .../en/l10-java-laeuft-nicht-start.visustruct | 24 +++++++++ .../l11-java-laeuft-nicht-loesung.visustruct | 20 ++++++++ .../en/l11-java-laeuft-nicht-start.visustruct | 20 ++++++++ .../l12-java-laeuft-nicht-loesung.visustruct | 20 ++++++++ .../en/l12-java-laeuft-nicht-start.visustruct | 20 ++++++++ .../l13-java-laeuft-nicht-loesung.visustruct | 19 +++++++ .../en/l13-java-laeuft-nicht-start.visustruct | 16 ++++++ .../l14-java-laeuft-nicht-loesung.visustruct | 23 +++++++++ .../en/l14-java-laeuft-nicht-start.visustruct | 23 +++++++++ .../l15-java-laeuft-nicht-loesung.visustruct | 22 ++++++++ .../en/l15-java-laeuft-nicht-start.visustruct | 22 ++++++++ .../l16-java-laeuft-nicht-loesung.visustruct | 9 ++++ .../en/l16-java-laeuft-nicht-start.visustruct | 9 ++++ .../l17-java-laeuft-nicht-loesung.visustruct | 9 ++++ .../en/l17-java-laeuft-nicht-start.visustruct | 9 ++++ .../l19-java-laeuft-nicht-loesung.visustruct | 35 +++++++++++++ .../en/l19-java-laeuft-nicht-start.visustruct | 35 +++++++++++++ .../l04-gross-klein-loesung.visustruct | 15 ++++++ .../l04-gross-klein-start.visustruct | 15 ++++++ .../l04-java-laeuft-nicht-loesung.visustruct | 12 +++++ .../l04-java-laeuft-nicht-start.visustruct | 12 +++++ .../l05-java-laeuft-nicht-loesung.visustruct | 15 ++++++ .../l05-java-laeuft-nicht-start.visustruct | 15 ++++++ .../l06-java-laeuft-nicht-loesung.visustruct | 9 ++++ .../l06-java-laeuft-nicht-start.visustruct | 9 ++++ .../l07-java-laeuft-nicht-loesung.visustruct | 15 ++++++ .../l07-java-laeuft-nicht-start.visustruct | 15 ++++++ .../l08-java-laeuft-nicht-loesung.visustruct | 19 +++++++ .../l08-java-laeuft-nicht-start.visustruct | 19 +++++++ .../l09-java-laeuft-nicht-loesung.visustruct | 19 +++++++ .../l09-java-laeuft-nicht-start.visustruct | 19 +++++++ .../l10-java-laeuft-nicht-loesung.visustruct | 24 +++++++++ .../l10-java-laeuft-nicht-start.visustruct | 24 +++++++++ .../l11-java-laeuft-nicht-loesung.visustruct | 20 ++++++++ .../l11-java-laeuft-nicht-start.visustruct | 20 ++++++++ .../l12-java-laeuft-nicht-loesung.visustruct | 20 ++++++++ .../l12-java-laeuft-nicht-start.visustruct | 20 ++++++++ .../l13-java-laeuft-nicht-loesung.visustruct | 19 +++++++ .../l13-java-laeuft-nicht-start.visustruct | 16 ++++++ .../l14-java-laeuft-nicht-loesung.visustruct | 23 +++++++++ .../l14-java-laeuft-nicht-start.visustruct | 23 +++++++++ .../l15-java-laeuft-nicht-loesung.visustruct | 22 ++++++++ .../l15-java-laeuft-nicht-start.visustruct | 22 ++++++++ .../l16-java-laeuft-nicht-loesung.visustruct | 9 ++++ .../l16-java-laeuft-nicht-start.visustruct | 9 ++++ .../l17-java-laeuft-nicht-loesung.visustruct | 9 ++++ .../l17-java-laeuft-nicht-start.visustruct | 9 ++++ .../l19-java-laeuft-nicht-loesung.visustruct | 35 +++++++++++++ .../l19-java-laeuft-nicht-start.visustruct | 35 +++++++++++++ .../pt/l04-gross-klein-loesung.visustruct | 15 ++++++ .../pt/l04-gross-klein-start.visustruct | 15 ++++++ .../l04-java-laeuft-nicht-loesung.visustruct | 12 +++++ .../pt/l04-java-laeuft-nicht-start.visustruct | 12 +++++ .../l05-java-laeuft-nicht-loesung.visustruct | 15 ++++++ .../pt/l05-java-laeuft-nicht-start.visustruct | 15 ++++++ .../l06-java-laeuft-nicht-loesung.visustruct | 9 ++++ .../pt/l06-java-laeuft-nicht-start.visustruct | 9 ++++ .../l07-java-laeuft-nicht-loesung.visustruct | 15 ++++++ .../pt/l07-java-laeuft-nicht-start.visustruct | 15 ++++++ .../l08-java-laeuft-nicht-loesung.visustruct | 19 +++++++ .../pt/l08-java-laeuft-nicht-start.visustruct | 19 +++++++ .../l09-java-laeuft-nicht-loesung.visustruct | 19 +++++++ .../pt/l09-java-laeuft-nicht-start.visustruct | 19 +++++++ .../l10-java-laeuft-nicht-loesung.visustruct | 24 +++++++++ .../pt/l10-java-laeuft-nicht-start.visustruct | 24 +++++++++ .../l11-java-laeuft-nicht-loesung.visustruct | 20 ++++++++ .../pt/l11-java-laeuft-nicht-start.visustruct | 20 ++++++++ .../l12-java-laeuft-nicht-loesung.visustruct | 20 ++++++++ .../pt/l12-java-laeuft-nicht-start.visustruct | 20 ++++++++ .../l13-java-laeuft-nicht-loesung.visustruct | 19 +++++++ .../pt/l13-java-laeuft-nicht-start.visustruct | 16 ++++++ .../l14-java-laeuft-nicht-loesung.visustruct | 23 +++++++++ .../pt/l14-java-laeuft-nicht-start.visustruct | 23 +++++++++ .../l15-java-laeuft-nicht-loesung.visustruct | 22 ++++++++ .../pt/l15-java-laeuft-nicht-start.visustruct | 22 ++++++++ .../l16-java-laeuft-nicht-loesung.visustruct | 9 ++++ .../pt/l16-java-laeuft-nicht-start.visustruct | 9 ++++ .../l17-java-laeuft-nicht-loesung.visustruct | 9 ++++ .../pt/l17-java-laeuft-nicht-start.visustruct | 9 ++++ .../l19-java-laeuft-nicht-loesung.visustruct | 35 +++++++++++++ .../pt/l19-java-laeuft-nicht-start.visustruct | 35 +++++++++++++ web/lessons/en/04-variablen-und-datentypen.md | 51 +++++++++++++++++++ web/lessons/en/05-sequenz.md | 15 ++++++ web/lessons/en/06-eingabe-und-ausgabe.md | 16 ++++++ .../en/07-simulation-und-schreibtischtest.md | 15 ++++++ web/lessons/en/08-verzweigung.md | 15 ++++++ web/lessons/en/09-bedingungen-verknuepfen.md | 15 ++++++ web/lessons/en/10-fallauswahl.md | 15 ++++++ web/lessons/en/11-while-schleife.md | 15 ++++++ web/lessons/en/12-do-while-schleife.md | 15 ++++++ web/lessons/en/13-for-schleife.md | 15 ++++++ web/lessons/en/14-verschachteln.md | 15 ++++++ web/lessons/en/15-arrays.md | 15 ++++++ web/lessons/en/16-zweidimensionale-arrays.md | 15 ++++++ web/lessons/en/17-zeichenketten.md | 15 ++++++ web/lessons/en/19-suchen-und-sortieren.md | 15 ++++++ web/lessons/pt/04-variablen-und-datentypen.md | 51 +++++++++++++++++++ web/lessons/pt/05-sequenz.md | 15 ++++++ web/lessons/pt/06-eingabe-und-ausgabe.md | 16 ++++++ .../pt/07-simulation-und-schreibtischtest.md | 15 ++++++ web/lessons/pt/08-verzweigung.md | 15 ++++++ web/lessons/pt/09-bedingungen-verknuepfen.md | 15 ++++++ web/lessons/pt/10-fallauswahl.md | 15 ++++++ web/lessons/pt/11-while-schleife.md | 15 ++++++ web/lessons/pt/12-do-while-schleife.md | 15 ++++++ web/lessons/pt/13-for-schleife.md | 15 ++++++ web/lessons/pt/14-verschachteln.md | 15 ++++++ web/lessons/pt/15-arrays.md | 15 ++++++ web/lessons/pt/16-zweidimensionale-arrays.md | 15 ++++++ web/lessons/pt/17-zeichenketten.md | 15 ++++++ web/lessons/pt/19-suchen-und-sortieren.md | 15 ++++++ web/src/core/javaParser.ts | 32 ++++++++++++ web/src/core/simulation.ts | 25 +++++---- web/src/i18n/ar.strings | 2 + web/src/i18n/da.strings | 2 + web/src/i18n/de.strings | 2 + web/src/i18n/el.strings | 2 + web/src/i18n/en.strings | 2 + web/src/i18n/es.strings | 2 + web/src/i18n/fr.strings | 2 + web/src/i18n/he.strings | 2 + web/src/i18n/it.strings | 2 + web/src/i18n/ja.strings | 2 + web/src/i18n/ko.strings | 2 + web/src/i18n/nb.strings | 2 + web/src/i18n/nl.strings | 2 + web/src/i18n/pl.strings | 2 + web/src/i18n/pt-PT.strings | 2 + web/src/i18n/ru.strings | 2 + web/src/i18n/sv.strings | 2 + web/src/i18n/tr.strings | 2 + web/src/i18n/uk.strings | 2 + web/src/i18n/zh-Hans.strings | 2 + web/src/i18n/zh-Hant.strings | 2 + web/src/ui/simulationPanel.ts | 2 +- web/test/javaParser.test.ts | 25 ++++++++- web/test/lessons.test.ts | 15 ++++++ 167 files changed, 2616 insertions(+), 12 deletions(-) create mode 100644 web/lessons/diagramme/en/l04-gross-klein-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l04-gross-klein-start.visustruct create mode 100644 web/lessons/diagramme/en/l04-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l04-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l05-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l05-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l06-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l06-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l07-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l07-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l08-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l08-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l09-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l09-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l10-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l10-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l11-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l11-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l12-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l12-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l13-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l13-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l14-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l14-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l15-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l15-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l16-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l16-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l17-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l17-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/en/l19-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/en/l19-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l04-gross-klein-loesung.visustruct create mode 100644 web/lessons/diagramme/l04-gross-klein-start.visustruct create mode 100644 web/lessons/diagramme/l04-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l04-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l05-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l05-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l06-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l06-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l07-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l07-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l08-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l08-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l09-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l09-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l10-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l10-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l11-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l11-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l12-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l12-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l13-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l13-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l14-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l14-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l15-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l15-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l16-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l16-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l17-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l17-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/l19-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/l19-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l04-gross-klein-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l04-gross-klein-start.visustruct create mode 100644 web/lessons/diagramme/pt/l04-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l04-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l05-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l05-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l06-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l06-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l07-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l07-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l08-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l08-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l09-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l09-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l10-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l10-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l11-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l11-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l12-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l12-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l13-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l13-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l14-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l14-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l15-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l15-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l16-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l16-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l17-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l17-java-laeuft-nicht-start.visustruct create mode 100644 web/lessons/diagramme/pt/l19-java-laeuft-nicht-loesung.visustruct create mode 100644 web/lessons/diagramme/pt/l19-java-laeuft-nicht-start.visustruct diff --git a/web/lessons/de/04-variablen-und-datentypen.md b/web/lessons/de/04-variablen-und-datentypen.md index 43f4589c..5d78552c 100644 --- a/web/lessons/de/04-variablen-und-datentypen.md +++ b/web/lessons/de/04-variablen-und-datentypen.md @@ -8,6 +8,7 @@ kurz: Werte speichern, die Datentypen int, double, String und boolean kennen und ::: kompetenzen - eine Variable mit Datentyp, Namen und Wert anlegen +- erklären, dass Java Groß- und Kleinschreibung unterscheidet (`zahl` ist nicht `Zahl`) - die Datentypen int, double, String und boolean unterscheiden - erklären, dass = eine Zuweisung ist und kein Vergleich - mit + - * / % rechnen und die ganzzahlige Division anwenden @@ -44,6 +45,33 @@ CamelCase heißt so, weil die Großbuchstaben in der Mitte wie die Höcker eines Die Großbuchstaben M und S ragen heraus wie die zwei Höcker des Kamels. ::: +## Groß- und Kleinschreibung + +Java unterscheidet **Groß- und Kleinschreibung**. Auf Englisch heißt das **case-sensitive**. Für Java sind `zahl`, `Zahl` und `ZAHL` drei verschiedene Namen, also drei verschiedene Kisten: + +``` +int zahl = 4 +int Zahl = 6 +``` + +Hier gibt es zwei Variablen. Schreibst du später `ZAHL`, findet Java keine Variable mit diesem Namen. Das Programm läuft nicht, und du bekommst eine Fehlermeldung. + +> Das gilt auch für Java-Wörter: `String` und `System` schreibt man groß, `int` und `double` klein. Lege in deinen eigenen Programmen nie zwei Variablen an, die sich nur in der Groß- und Kleinschreibung unterscheiden. Das verwirrt dich und alle, die deinen Code lesen. + +## Übung: Drei Namen + +::: übung l04-gross-klein +titel: Drei Namen +auftrag: Ludwig hat zwei Variablen angelegt: `zahl` mit dem Wert 4 und `Zahl` mit dem Wert 6. Das Struktogramm soll beide malnehmen und **Ergebnis: 24** ausgeben. Es läuft aber nicht. + Öffne die Übung, klicke auf Prüfen und lies die Fehlermeldung. Repariere die Anweisung und klicke noch einmal auf Prüfen. +start: l04-gross-klein-start.visustruct +test: - -> Ergebnis: 24 +braucht: anweisung +tipp: Wie viele verschiedene Namen stehen im Struktogramm? `zahl`, `Zahl` und `ZAHL` sind für den Computer drei verschiedene Namen. +tipp: `ZAHL` gibt es nicht. Für 24 brauchst du 4 mal 6, also `zahl` mal `Zahl`: `int ergebnis = zahl * Zahl`. Mit `zahl * zahl` kommt 16 heraus. +lösung: l04-gross-klein-loesung.visustruct +::: + ## Die vier Datentypen Der Datentyp legt fest, welche Art von Wert in der Variablen stehen darf. @@ -243,6 +271,21 @@ tipp: Die beiden Zeichen sind vertauscht: `int minuten = sekunden / 60;` und `in lösung: l04-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l04-java-laeuft-nicht +titel: Steckbrief reparieren +code: java +auftrag: Das Programm soll **Ludwig ist 7 Jahre alt.** ausgeben. Es läuft aber nicht, denn zwei Wörter sind falsch geschrieben. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l04-java-laeuft-nicht-start.visustruct +test: - -> Ludwig ist 7 Jahre alt. +braucht: anweisung +tipp: Java unterscheidet Groß- und Kleinschreibung. Vergleiche jedes Wort in der Ausgabe genau mit dem, was oben angelegt ist. +tipp: `System` schreibt man mit großem S. Die Variable heißt `alter` mit kleinem a: `System.out.println(name + " ist " + alter + " Jahre alt.");` +lösung: l04-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Welcher Datentyp? ::: spiel frage @@ -297,6 +340,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ ::: checkliste - Ich kann eine Variable mit Datentyp, Namen und Wert anlegen. → Was ist eine Variable? +- Ich kann erklären, dass Java Groß- und Kleinschreibung unterscheidet (`zahl` ist nicht `Zahl`). → Groß- und Kleinschreibung - Ich kann die Datentypen int, double, String und boolean unterscheiden. → Die vier Datentypen - Ich kann erklären, dass = eine Zuweisung ist und kein Vergleich. → Zuweisung mit = - Ich kann mit + - * / % rechnen und die ganzzahlige Division anwenden. → Rechnen @@ -314,6 +358,13 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] boolean > Kommazahlen haben den Typ double. In VisuStruct schreibst du sie mit Punkt. +? Wie viele Variablen legen `int zahl = 1`, `int Zahl = 2` und `int ZAHL = 3` an? +→ Groß- und Kleinschreibung +- [ ] eine +- [ ] zwei +- [x] drei +> Java unterscheidet Groß- und Kleinschreibung. Die drei Namen sind verschieden, also gibt es drei Variablen. + ? Welchen Wert hat x nach `int x = 17 / 5`? → Rechnen - [ ] 3.4 diff --git a/web/lessons/de/05-sequenz.md b/web/lessons/de/05-sequenz.md index 41cf49fa..5ff7fc74 100644 --- a/web/lessons/de/05-sequenz.md +++ b/web/lessons/de/05-sequenz.md @@ -145,6 +145,21 @@ tipp: Tausche die letzten beiden Zeilen: erst `guthaben = guthaben - preis;`, da lösung: l05-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l05-java-laeuft-nicht +titel: Pizza teilen +code: java +auftrag: Eine Pizza hat 8 Stücke, 4 Freunde teilen sie. Das Programm soll **Jeder bekommt 2 Stücke.** ausgeben. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l05-java-laeuft-nicht-start.visustruct +test: - -> Jeder bekommt 2 Stücke. +braucht: anweisung +tipp: Vergleiche den Namen in der Ausgabe Buchstabe für Buchstabe mit dem Namen, der in der dritten Zeile angelegt wird. +tipp: Die Variable heißt `proPerson` mit großem P (CamelCase). Schreibe sie in der Ausgabe genauso. +lösung: l05-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Kästen sortieren ::: spiel reihenfolge diff --git a/web/lessons/de/06-eingabe-und-ausgabe.md b/web/lessons/de/06-eingabe-und-ausgabe.md index 75be2d45..9858d258 100644 --- a/web/lessons/de/06-eingabe-und-ausgabe.md +++ b/web/lessons/de/06-eingabe-und-ausgabe.md @@ -273,6 +273,22 @@ tipp: Setze Klammern, damit Java zuerst rechnet: `System.out.println("Summe: " + lösung: l06-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l06-java-laeuft-nicht +titel: Alter im nächsten Jahr +code: java +auftrag: Das Programm fragt nach deinem Alter und soll sagen, wie alt du nächstes Jahr bist. Bei 14 also **Nächstes Jahr bist du 15**. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l06-java-laeuft-nicht-start.visustruct +test: 14 -> Nächstes Jahr bist du 15 +test: 9 -> Nächstes Jahr bist du 10 +braucht: anweisung +tipp: Die Eingabe landet in einer Variablen. Wie genau heißt sie, und wie heißt sie in der Ausgabe? +tipp: Die Variable heißt `alter` mit kleinem a: `System.out.println("Nächstes Jahr bist du " + (alter + 1));` +lösung: l06-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Was wird ausgegeben? ::: spiel frage diff --git a/web/lessons/de/07-simulation-und-schreibtischtest.md b/web/lessons/de/07-simulation-und-schreibtischtest.md index 99f01265..df5ea0cb 100644 --- a/web/lessons/de/07-simulation-und-schreibtischtest.md +++ b/web/lessons/de/07-simulation-und-schreibtischtest.md @@ -209,6 +209,21 @@ tipp: Ludwig verliert 3 Punkte, also wird vom alten Wert abgezogen: `punkte = pu lösung: l07-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l07-java-laeuft-nicht +titel: Bonus reparieren +code: java +auftrag: Ludwig hat 10 Punkte und bekommt 5 Bonuspunkte. Am Ende soll **Punkte: 15** erscheinen. Der Code läuft aber nicht. Gehe ihn auch mit dem Einzelschritt durch: In welcher Zeile bleibt er stehen? + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l07-java-laeuft-nicht-start.visustruct +test: - -> Punkte: 15 +braucht: anweisung +tipp: Java arbeitet den Code von oben nach unten ab. Gibt es `bonus` schon, wenn damit gerechnet wird? +tipp: Lege `bonus` vor der Rechnung an: erst `int bonus = 5;`, dann `punkte = punkte + bonus;` +lösung: l07-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Bombe entschärfen ::: spiel bombe diff --git a/web/lessons/de/08-verzweigung.md b/web/lessons/de/08-verzweigung.md index 66b1fea1..094d8f14 100644 --- a/web/lessons/de/08-verzweigung.md +++ b/web/lessons/de/08-verzweigung.md @@ -197,6 +197,21 @@ tipp: „Unter 6“ heißt `alter < 6`. `<=` bedeutet „kleiner oder gleich“. lösung: l08-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l08-java-laeuft-nicht +titel: Film ab 16 +code: java +auftrag: Der Film ist ab 16. Ludwig ist 15, also soll das Programm **Kein Einlass** ausgeben. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l08-java-laeuft-nicht-start.visustruct +test: - -> Kein Einlass +braucht: verzweigung +tipp: Schau dir die Bedingung in der Klammer nach `if` genau an. Gibt es diese Variable? +tipp: Die Variable heißt `alter` mit kleinem a: `if (alter >= 16) {` +lösung: l08-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Welcher Weg? ::: spiel frage diff --git a/web/lessons/de/09-bedingungen-verknuepfen.md b/web/lessons/de/09-bedingungen-verknuepfen.md index 0610ca53..d6f10467 100644 --- a/web/lessons/de/09-bedingungen-verknuepfen.md +++ b/web/lessons/de/09-bedingungen-verknuepfen.md @@ -259,6 +259,21 @@ tipp: Es reicht, wenn eine der beiden Bedingungen stimmt: `tag == 6 || tag == 7` lösung: l09-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l09-java-laeuft-nicht +titel: Wochenende reparieren +code: java +auftrag: Tag 6 ist Samstag, Tag 7 ist Sonntag. Heute ist Tag 7, also soll **schulfrei** erscheinen. Das Programm läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l09-java-laeuft-nicht-start.visustruct +test: - -> schulfrei +braucht: verzweigung +tipp: Die Bedingung besteht aus zwei Teilen. Vergleiche in beiden Teilen den Namen der Variablen. +tipp: Auch im zweiten Teil heißt die Variable `tag` mit kleinem t: `if (tag == 6 || tag == 7) {` +lösung: l09-java-laeuft-nicht-loesung.visustruct +::: + ## Checkliste Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. diff --git a/web/lessons/de/10-fallauswahl.md b/web/lessons/de/10-fallauswahl.md index d000dfd8..953a939e 100644 --- a/web/lessons/de/10-fallauswahl.md +++ b/web/lessons/de/10-fallauswahl.md @@ -184,6 +184,21 @@ tipp: Beim Minus zählt die Reihenfolge: `a - b` statt `b - a`. lösung: l10-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l10-java-laeuft-nicht +titel: Note reparieren +code: java +auftrag: Ludwig hat die Note 2 geschrieben. Das Programm soll **gut** ausgeben. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l10-java-laeuft-nicht-start.visustruct +test: - -> gut +braucht: fallauswahl +tipp: Welche Variable prüft die Fallauswahl? Steht sie genauso oben? +tipp: In der Klammer nach `switch` muss `note` mit kleinem n stehen: `switch (note) {` +lösung: l10-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Welcher Fall? ::: spiel frage diff --git a/web/lessons/de/11-while-schleife.md b/web/lessons/de/11-while-schleife.md index fc2148ee..409538ba 100644 --- a/web/lessons/de/11-while-schleife.md +++ b/web/lessons/de/11-while-schleife.md @@ -208,6 +208,21 @@ tipp: Gespart wird nur, solange das Ziel noch **nicht erreicht** ist: `while (ge lösung: l11-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l11-java-laeuft-nicht +titel: Countdown reparieren +code: java +auftrag: Der Countdown soll **3**, **2**, **1** und dann **Start!** ausgeben. Er läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l11-java-laeuft-nicht-start.visustruct +test: - -> 3 | 2 | 1 | Start! +braucht: whileSchleife +tipp: Der Fehler steckt in der Schleife. Welche Variable soll ausgegeben werden, und wie heißt sie wirklich? +tipp: Gib `zahl` mit kleinem z aus: `System.out.println(zahl);` +lösung: l11-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Wie oft? ::: spiel frage diff --git a/web/lessons/de/12-do-while-schleife.md b/web/lessons/de/12-do-while-schleife.md index 6b6d33a5..ea7b5553 100644 --- a/web/lessons/de/12-do-while-schleife.md +++ b/web/lessons/de/12-do-while-schleife.md @@ -144,6 +144,21 @@ tipp: Die Schleife soll weiterlaufen, solange die Zahl größer als 0 ist: `whil lösung: l12-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l12-java-laeuft-nicht +titel: Verdoppeln reparieren +code: java +auftrag: Das Programm soll ab 1 immer verdoppeln, solange die Zahl kleiner als 20 ist: **1**, **2**, **4**, **8**, **16**. Es gibt nur die 1 aus und bleibt dann stehen. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l12-java-laeuft-nicht-start.visustruct +test: - -> 1 | 2 | 4 | 8 | 16 +braucht: doUntilSchleife +tipp: Die erste Runde läuft noch. Der Fehler kommt erst, wenn die Bedingung unten zum ersten Mal geprüft wird. +tipp: In der Bedingung muss `grenze` mit kleinem g stehen: `} while (zahl < grenze);` +lösung: l12-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Mindestens einmal? ::: spiel frage diff --git a/web/lessons/de/13-for-schleife.md b/web/lessons/de/13-for-schleife.md index 5105f8c0..82a3957f 100644 --- a/web/lessons/de/13-for-schleife.md +++ b/web/lessons/de/13-for-schleife.md @@ -179,6 +179,21 @@ tipp: `i` soll auch den Wert 10 annehmen: `i <= 10` statt `i < 10`. lösung: l13-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l13-java-laeuft-nicht +titel: Treppe reparieren +code: java +auftrag: Ludwig klettert 5 Stufen hoch, jede ist 20 cm hoch. Das Programm soll **Höhe: 100 cm** ausgeben. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l13-java-laeuft-nicht-start.visustruct +test: - -> Höhe: 100 cm +braucht: forSchleife +tipp: Mit `hoehe` wird gerechnet, aber wo wird die Variable angelegt? Und mit welchem Wert startet Ludwig? +tipp: Lege `hoehe` vor der Schleife an: `int hoehe = 0;` +lösung: l13-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Bombe entschärfen ::: spiel bombe diff --git a/web/lessons/de/14-verschachteln.md b/web/lessons/de/14-verschachteln.md index 44d1b4dd..247f999d 100644 --- a/web/lessons/de/14-verschachteln.md +++ b/web/lessons/de/14-verschachteln.md @@ -155,6 +155,21 @@ tipp: Verschiebe die Zeile `System.out.println("Anzahl: " + anzahl);` hinter die lösung: l14-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l14-java-laeuft-nicht +titel: Gerade Zahlen reparieren +code: java +auftrag: Das Programm soll die geraden Zahlen von 1 bis 10 ausgeben: **2**, **4**, **6**, **8**, **10**. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l14-java-laeuft-nicht-start.visustruct +test: - -> 2 | 4 | 6 | 8 | 10 +braucht: forSchleife, verzweigung +tipp: Der Fehler steckt ganz innen, in der Ausgabe. Wie heißt die Zählvariable der Schleife? +tipp: Die Zählvariable heißt `i` mit kleinem i: `System.out.println(i);` +lösung: l14-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Innen und außen ::: spiel frage diff --git a/web/lessons/de/15-arrays.md b/web/lessons/de/15-arrays.md index 60f8aa9a..031c65dc 100644 --- a/web/lessons/de/15-arrays.md +++ b/web/lessons/de/15-arrays.md @@ -210,6 +210,21 @@ tipp: `max` muss mit einem Wert aus dem Array beginnen: `int max = temperaturen[ lösung: l15-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l15-java-laeuft-nicht +titel: Punkte zusammenzählen +code: java +auftrag: Im Array `punkte` stehen 4, 7, 2 und 5. Das Programm soll alle zusammenzählen und **Summe: 18** ausgeben. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l15-java-laeuft-nicht-start.visustruct +test: - -> Summe: 18 +braucht: forSchleife +tipp: Der Code-Bereich unterstreicht das falsche Wort rot. Wie schreibt man die Länge eines Arrays? +tipp: `length` schreibt man ganz klein: `i < punkte.length` +lösung: l15-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Bombe entschärfen ::: spiel bombe diff --git a/web/lessons/de/16-zweidimensionale-arrays.md b/web/lessons/de/16-zweidimensionale-arrays.md index a8d4068b..8e919c66 100644 --- a/web/lessons/de/16-zweidimensionale-arrays.md +++ b/web/lessons/de/16-zweidimensionale-arrays.md @@ -178,6 +178,21 @@ tipp: Die Indizes sind vertauscht: `punkte[1][j]` statt `punkte[j][1]`. lösung: l16-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l16-java-laeuft-nicht +titel: Spielstand ablesen +code: java +auftrag: In der Tabelle `punkte` steht jede Reihe für einen Spieler, jede Spalte für eine Runde. Das Programm soll die Punkte von Spieler 2 in Runde 1 ausgeben, also **Spieler 2, Runde 1: 4**. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l16-java-laeuft-nicht-start.visustruct +test: - -> Spieler 2, Runde 1: 4 +braucht: anweisung +tipp: Die Fächer `[1][0]` stimmen. Schau dir den Namen der Tabelle an. +tipp: Die Tabelle heißt `punkte` mit kleinem p: `punkte[1][0]` +lösung: l16-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Welcher Platz? ::: spiel frage diff --git a/web/lessons/de/17-zeichenketten.md b/web/lessons/de/17-zeichenketten.md index 02228240..067fb45f 100644 --- a/web/lessons/de/17-zeichenketten.md +++ b/web/lessons/de/17-zeichenketten.md @@ -233,6 +233,21 @@ tipp: Das erste Zeichen hat den Index 0: `vorname.charAt(0)` und `nachname.charA lösung: l17-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l17-java-laeuft-nicht +titel: Buchstaben zählen +code: java +auftrag: Das Programm soll den ersten Buchstaben und die Länge von **Ludwig** ausgeben, also **L hat 6 Buchstaben**. Es läuft aber nicht, denn zwei Methoden sind falsch geschrieben. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l17-java-laeuft-nicht-start.visustruct +test: - -> L hat 6 Buchstaben +braucht: anweisung +tipp: Methodennamen sind auch CamelCase: Sie beginnen klein, jedes weitere Wort beginnt groß. +tipp: Richtig sind `name.charAt(0)` mit großem A und `name.length()` ganz klein. +lösung: l17-java-laeuft-nicht-loesung.visustruct +::: + ## Noch mehr Methoden Ein String kann noch viel mehr. Diese Methoden brauchst du auch oft: diff --git a/web/lessons/de/19-suchen-und-sortieren.md b/web/lessons/de/19-suchen-und-sortieren.md index 485235a1..ffb329af 100644 --- a/web/lessons/de/19-suchen-und-sortieren.md +++ b/web/lessons/de/19-suchen-und-sortieren.md @@ -201,6 +201,21 @@ tipp: Die Schleife soll aufhören, sobald etwas gefunden ist: `while (position = lösung: l19-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l19-java-laeuft-nicht +titel: Karte suchen +code: java +auftrag: Die Karten {8, 4, 11, 4, 6} liegen in einem Array. Das Programm sucht die 11 und soll **Position: 2** ausgeben. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l19-java-laeuft-nicht-start.visustruct +test: - -> Position: 2 +braucht: forSchleife, verzweigung +tipp: Vergleiche die Namen in der Bedingung mit den Namen, die oben angelegt werden. +tipp: Die gesuchte Karte steht in `gesucht` mit kleinem g: `if (karten[i] == gesucht) {` +lösung: l19-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Suchprofi ::: spiel frage diff --git a/web/lessons/diagramme/en/l04-gross-klein-loesung.visustruct b/web/lessons/diagramme/en/l04-gross-klein-loesung.visustruct new file mode 100644 index 00000000..30fa15a4 --- /dev/null +++ b/web/lessons/diagramme/en/l04-gross-klein-loesung.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;110;117;109;98;101;114;32;61;32;52; + + + 105;110;116;32;78;117;109;98;101;114;32;61;32;54; + + + 105;110;116;32;114;101;115;117;108;116;32;61;32;110;117;109;98;101;114;32;42;32;78;117;109;98;101;114; + + + 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;58;32;34;32;43;32;114;101;115;117;108;116; + + diff --git a/web/lessons/diagramme/en/l04-gross-klein-start.visustruct b/web/lessons/diagramme/en/l04-gross-klein-start.visustruct new file mode 100644 index 00000000..8dca0580 --- /dev/null +++ b/web/lessons/diagramme/en/l04-gross-klein-start.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;110;117;109;98;101;114;32;61;32;52; + + + 105;110;116;32;78;117;109;98;101;114;32;61;32;54; + + + 105;110;116;32;114;101;115;117;108;116;32;61;32;110;117;109;98;101;114;32;42;32;78;85;77;66;69;82; + + + 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;58;32;34;32;43;32;114;101;115;117;108;116; + + diff --git a/web/lessons/diagramme/en/l04-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l04-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..7c5a77ad --- /dev/null +++ b/web/lessons/diagramme/en/l04-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,12 @@ + + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 105;110;116;32;97;103;101;32;61;32;55; + + + 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;105;115;32;34;32;43;32;97;103;101;32;43;32;34;32;121;101;97;114;115;32;111;108;100;46;34; + + diff --git a/web/lessons/diagramme/en/l04-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l04-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..452fedd5 --- /dev/null +++ b/web/lessons/diagramme/en/l04-java-laeuft-nicht-start.visustruct @@ -0,0 +1,12 @@ + + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 105;110;116;32;97;103;101;32;61;32;55; + + + 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;97;109;101;32;43;32;34;32;105;115;32;34;32;43;32;65;103;101;32;43;32;34;32;121;101;97;114;115;32;111;108;100;46;34;41; + + diff --git a/web/lessons/diagramme/en/l05-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l05-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..10d41a69 --- /dev/null +++ b/web/lessons/diagramme/en/l05-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;115;108;105;99;101;115;32;61;32;56; + + + 105;110;116;32;112;101;111;112;108;101;32;61;32;52; + + + 105;110;116;32;112;101;114;80;101;114;115;111;110;32;61;32;115;108;105;99;101;115;32;47;32;112;101;111;112;108;101; + + + 111;117;116;112;117;116;58;32;34;69;118;101;114;121;111;110;101;32;103;101;116;115;32;34;32;43;32;112;101;114;80;101;114;115;111;110;32;43;32;34;32;115;108;105;99;101;115;46;34; + + diff --git a/web/lessons/diagramme/en/l05-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l05-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..85a73dc7 --- /dev/null +++ b/web/lessons/diagramme/en/l05-java-laeuft-nicht-start.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;115;108;105;99;101;115;32;61;32;56; + + + 105;110;116;32;112;101;111;112;108;101;32;61;32;52; + + + 105;110;116;32;112;101;114;80;101;114;115;111;110;32;61;32;115;108;105;99;101;115;32;47;32;112;101;111;112;108;101; + + + 111;117;116;112;117;116;58;32;34;69;118;101;114;121;111;110;101;32;103;101;116;115;32;34;32;43;32;112;101;114;112;101;114;115;111;110;32;43;32;34;32;115;108;105;99;101;115;46;34; + + diff --git a/web/lessons/diagramme/en/l06-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l06-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..b5f1eb55 --- /dev/null +++ b/web/lessons/diagramme/en/l06-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,9 @@ + + + + 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; + + + 111;117;116;112;117;116;58;32;34;78;101;120;116;32;121;101;97;114;32;121;111;117;32;119;105;108;108;32;98;101;32;34;32;43;32;40;97;103;101;32;43;32;49;41; + + diff --git a/web/lessons/diagramme/en/l06-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l06-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..6d6dbef3 --- /dev/null +++ b/web/lessons/diagramme/en/l06-java-laeuft-nicht-start.visustruct @@ -0,0 +1,9 @@ + + + + 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; + + + 111;117;116;112;117;116;58;32;34;78;101;120;116;32;121;101;97;114;32;121;111;117;32;119;105;108;108;32;98;101;32;34;32;43;32;40;65;103;101;32;43;32;49;41; + + diff --git a/web/lessons/diagramme/en/l07-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l07-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..d24a1154 --- /dev/null +++ b/web/lessons/diagramme/en/l07-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;112;111;105;110;116;115;32;61;32;49;48; + + + 105;110;116;32;98;111;110;117;115;32;61;32;53; + + + 112;111;105;110;116;115;32;61;32;112;111;105;110;116;115;32;43;32;98;111;110;117;115; + + + 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; + + diff --git a/web/lessons/diagramme/en/l07-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l07-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..83da3485 --- /dev/null +++ b/web/lessons/diagramme/en/l07-java-laeuft-nicht-start.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;112;111;105;110;116;115;32;61;32;49;48; + + + 112;111;105;110;116;115;32;61;32;112;111;105;110;116;115;32;43;32;98;111;110;117;115; + + + 105;110;116;32;98;111;110;117;115;32;61;32;53; + + + 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; + + diff --git a/web/lessons/diagramme/en/l08-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l08-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..c9c94139 --- /dev/null +++ b/web/lessons/diagramme/en/l08-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;97;103;101;32;61;32;49;53; + + + 97;103;101;32;62;61;32;49;54; + + + 111;117;116;112;117;116;58;32;34;69;110;116;114;121;34; + + + + + 111;117;116;112;117;116;58;32;34;78;111;32;101;110;116;114;121;34; + + + + diff --git a/web/lessons/diagramme/en/l08-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l08-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..93d3ebc2 --- /dev/null +++ b/web/lessons/diagramme/en/l08-java-laeuft-nicht-start.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;97;103;101;32;61;32;49;53; + + + 65;103;101;32;62;61;32;49;54; + + + 111;117;116;112;117;116;58;32;34;69;110;116;114;121;34; + + + + + 111;117;116;112;117;116;58;32;34;78;111;32;101;110;116;114;121;34; + + + + diff --git a/web/lessons/diagramme/en/l09-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l09-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..4b1a2f88 --- /dev/null +++ b/web/lessons/diagramme/en/l09-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;100;97;121;32;61;32;55; + + + 100;97;121;32;61;61;32;54;32;124;124;32;100;97;121;32;61;61;32;55; + + + 111;117;116;112;117;116;58;32;34;110;111;32;115;99;104;111;111;108;34; + + + + + 111;117;116;112;117;116;58;32;34;115;99;104;111;111;108;34; + + + + diff --git a/web/lessons/diagramme/en/l09-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l09-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..83a4aaab --- /dev/null +++ b/web/lessons/diagramme/en/l09-java-laeuft-nicht-start.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;100;97;121;32;61;32;55; + + + 100;97;121;32;61;61;32;54;32;124;124;32;68;97;121;32;61;61;32;55; + + + 111;117;116;112;117;116;58;32;34;110;111;32;115;99;104;111;111;108;34; + + + + + 111;117;116;112;117;116;58;32;34;115;99;104;111;111;108;34; + + + + diff --git a/web/lessons/diagramme/en/l10-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l10-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..e4ac0ac4 --- /dev/null +++ b/web/lessons/diagramme/en/l10-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,24 @@ + + + + 105;110;116;32;103;114;97;100;101;32;61;32;50; + + + 103;114;97;100;101; + + + 111;117;116;112;117;116;58;32;34;118;101;114;121;32;103;111;111;100;34; + + + + + 111;117;116;112;117;116;58;32;34;103;111;111;100;34; + + + + + 111;117;116;112;117;116;58;32;34;107;101;101;112;32;112;114;97;99;116;105;115;105;110;103;34; + + + + diff --git a/web/lessons/diagramme/en/l10-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l10-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..4e9df662 --- /dev/null +++ b/web/lessons/diagramme/en/l10-java-laeuft-nicht-start.visustruct @@ -0,0 +1,24 @@ + + + + 105;110;116;32;103;114;97;100;101;32;61;32;50; + + + 71;114;97;100;101; + + + 111;117;116;112;117;116;58;32;34;118;101;114;121;32;103;111;111;100;34; + + + + + 111;117;116;112;117;116;58;32;34;103;111;111;100;34; + + + + + 111;117;116;112;117;116;58;32;34;107;101;101;112;32;112;114;97;99;116;105;115;105;110;103;34; + + + + diff --git a/web/lessons/diagramme/en/l11-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l11-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..36b01ec6 --- /dev/null +++ b/web/lessons/diagramme/en/l11-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;110;117;109;98;101;114;32;61;32;51; + + + 110;117;109;98;101;114;32;62;32;48; + + + 111;117;116;112;117;116;58;32;110;117;109;98;101;114; + + + 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;45;32;49; + + + + + 111;117;116;112;117;116;58;32;34;71;111;33;34; + + diff --git a/web/lessons/diagramme/en/l11-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l11-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..4e2756c2 --- /dev/null +++ b/web/lessons/diagramme/en/l11-java-laeuft-nicht-start.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;110;117;109;98;101;114;32;61;32;51; + + + 110;117;109;98;101;114;32;62;32;48; + + + 111;117;116;112;117;116;58;32;78;117;109;98;101;114; + + + 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;45;32;49; + + + + + 111;117;116;112;117;116;58;32;34;71;111;33;34; + + diff --git a/web/lessons/diagramme/en/l12-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l12-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..572b6780 --- /dev/null +++ b/web/lessons/diagramme/en/l12-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;110;117;109;98;101;114;32;61;32;49; + + + 105;110;116;32;108;105;109;105;116;32;61;32;50;48; + + + 110;117;109;98;101;114;32;60;32;108;105;109;105;116; + + + 111;117;116;112;117;116;58;32;110;117;109;98;101;114; + + + 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;42;32;50; + + + + diff --git a/web/lessons/diagramme/en/l12-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l12-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..d232f1da --- /dev/null +++ b/web/lessons/diagramme/en/l12-java-laeuft-nicht-start.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;110;117;109;98;101;114;32;61;32;49; + + + 105;110;116;32;108;105;109;105;116;32;61;32;50;48; + + + 110;117;109;98;101;114;32;60;32;76;105;109;105;116; + + + 111;117;116;112;117;116;58;32;110;117;109;98;101;114; + + + 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;42;32;50; + + + + diff --git a/web/lessons/diagramme/en/l13-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l13-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..228ddea0 --- /dev/null +++ b/web/lessons/diagramme/en/l13-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;104;101;105;103;104;116;32;61;32;48; + + + 105;110;116;32;115;116;101;112;32;61;32;49; + 115;116;101;112;32;60;61;32;53; + 115;116;101;112;43;43; + + + 104;101;105;103;104;116;32;61;32;104;101;105;103;104;116;32;43;32;50;48; + + + + + 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;99;109;34; + + diff --git a/web/lessons/diagramme/en/l13-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l13-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..2a399b98 --- /dev/null +++ b/web/lessons/diagramme/en/l13-java-laeuft-nicht-start.visustruct @@ -0,0 +1,16 @@ + + + + 105;110;116;32;115;116;101;112;32;61;32;49; + 115;116;101;112;32;60;61;32;53; + 115;116;101;112;43;43; + + + 104;101;105;103;104;116;32;61;32;104;101;105;103;104;116;32;43;32;50;48; + + + + + 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;99;109;34; + + diff --git a/web/lessons/diagramme/en/l14-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l14-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..39f22d7f --- /dev/null +++ b/web/lessons/diagramme/en/l14-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,23 @@ + + + + 105;110;116;32;105;32;61;32;49; + 105;32;60;61;32;49;48; + 105;43;43; + + + 105;32;37;32;50;32;61;61;32;48; + + + 111;117;116;112;117;116;58;32;105; + + + + + 248; + + + + + + diff --git a/web/lessons/diagramme/en/l14-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l14-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..549a55f6 --- /dev/null +++ b/web/lessons/diagramme/en/l14-java-laeuft-nicht-start.visustruct @@ -0,0 +1,23 @@ + + + + 105;110;116;32;105;32;61;32;49; + 105;32;60;61;32;49;48; + 105;43;43; + + + 105;32;37;32;50;32;61;61;32;48; + + + 111;117;116;112;117;116;58;32;73; + + + + + 248; + + + + + + diff --git a/web/lessons/diagramme/en/l15-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l15-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..b3d70e69 --- /dev/null +++ b/web/lessons/diagramme/en/l15-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,22 @@ + + + + 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; + + + 105;110;116;32;115;117;109;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;112;111;105;110;116;115;46;108;101;110;103;116;104; + 105;43;43; + + + 115;117;109;32;61;32;115;117;109;32;43;32;112;111;105;110;116;115;91;105;93; + + + + + 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; + + diff --git a/web/lessons/diagramme/en/l15-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l15-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..03818a5c --- /dev/null +++ b/web/lessons/diagramme/en/l15-java-laeuft-nicht-start.visustruct @@ -0,0 +1,22 @@ + + + + 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; + + + 105;110;116;32;115;117;109;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;112;111;105;110;116;115;46;76;101;110;103;116;104; + 105;43;43; + + + 115;117;109;32;61;32;115;117;109;32;43;32;112;111;105;110;116;115;91;105;93; + + + + + 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; + + diff --git a/web/lessons/diagramme/en/l16-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l16-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..e5ae3c20 --- /dev/null +++ b/web/lessons/diagramme/en/l16-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,9 @@ + + + + 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; + + + 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;44;32;114;111;117;110;100;32;49;58;32;34;32;43;32;112;111;105;110;116;115;91;49;93;91;48;93; + + diff --git a/web/lessons/diagramme/en/l16-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l16-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..71267d5a --- /dev/null +++ b/web/lessons/diagramme/en/l16-java-laeuft-nicht-start.visustruct @@ -0,0 +1,9 @@ + + + + 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; + + + 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;44;32;114;111;117;110;100;32;49;58;32;34;32;43;32;80;111;105;110;116;115;91;49;93;91;48;93; + + diff --git a/web/lessons/diagramme/en/l17-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l17-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..dadd5b88 --- /dev/null +++ b/web/lessons/diagramme/en/l17-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,9 @@ + + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;104;97;115;32;34;32;43;32;110;97;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;116;101;114;115;34; + + diff --git a/web/lessons/diagramme/en/l17-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l17-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..f5a73be8 --- /dev/null +++ b/web/lessons/diagramme/en/l17-java-laeuft-nicht-start.visustruct @@ -0,0 +1,9 @@ + + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;104;97;115;32;34;32;43;32;110;97;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;116;101;114;115;34; + + diff --git a/web/lessons/diagramme/en/l19-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/en/l19-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..091030c3 --- /dev/null +++ b/web/lessons/diagramme/en/l19-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,35 @@ + + + + 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; + + + 105;110;116;32;119;97;110;116;101;100;32;61;32;49;49; + + + 105;110;116;32;112;111;115;105;116;105;111;110;32;61;32;45;49; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;99;97;114;100;115;46;108;101;110;103;116;104; + 105;43;43; + + + 99;97;114;100;115;91;105;93;32;61;61;32;119;97;110;116;101;100; + + + 112;111;115;105;116;105;111;110;32;61;32;105; + + + + + 248; + + + + + + + 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; + + diff --git a/web/lessons/diagramme/en/l19-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/en/l19-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..82c8278c --- /dev/null +++ b/web/lessons/diagramme/en/l19-java-laeuft-nicht-start.visustruct @@ -0,0 +1,35 @@ + + + + 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; + + + 105;110;116;32;119;97;110;116;101;100;32;61;32;49;49; + + + 105;110;116;32;112;111;115;105;116;105;111;110;32;61;32;45;49; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;99;97;114;100;115;46;108;101;110;103;116;104; + 105;43;43; + + + 99;97;114;100;115;91;105;93;32;61;61;32;87;97;110;116;101;100; + + + 112;111;115;105;116;105;111;110;32;61;32;105; + + + + + 248; + + + + + + + 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; + + diff --git a/web/lessons/diagramme/l04-gross-klein-loesung.visustruct b/web/lessons/diagramme/l04-gross-klein-loesung.visustruct new file mode 100644 index 00000000..e2f906ab --- /dev/null +++ b/web/lessons/diagramme/l04-gross-klein-loesung.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;122;97;104;108;32;61;32;52; + + + 105;110;116;32;90;97;104;108;32;61;32;54; + + + 105;110;116;32;101;114;103;101;98;110;105;115;32;61;32;122;97;104;108;32;42;32;90;97;104;108; + + + 111;117;116;112;117;116;58;32;34;69;114;103;101;98;110;105;115;58;32;34;32;43;32;101;114;103;101;98;110;105;115; + + diff --git a/web/lessons/diagramme/l04-gross-klein-start.visustruct b/web/lessons/diagramme/l04-gross-klein-start.visustruct new file mode 100644 index 00000000..6888d8ea --- /dev/null +++ b/web/lessons/diagramme/l04-gross-klein-start.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;122;97;104;108;32;61;32;52; + + + 105;110;116;32;90;97;104;108;32;61;32;54; + + + 105;110;116;32;101;114;103;101;98;110;105;115;32;61;32;122;97;104;108;32;42;32;90;65;72;76; + + + 111;117;116;112;117;116;58;32;34;69;114;103;101;98;110;105;115;58;32;34;32;43;32;101;114;103;101;98;110;105;115; + + diff --git a/web/lessons/diagramme/l04-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l04-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..28528731 --- /dev/null +++ b/web/lessons/diagramme/l04-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,12 @@ + + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 105;110;116;32;97;108;116;101;114;32;61;32;55; + + + 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;105;115;116;32;34;32;43;32;97;108;116;101;114;32;43;32;34;32;74;97;104;114;101;32;97;108;116;46;34; + + diff --git a/web/lessons/diagramme/l04-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l04-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..0b0c5f6a --- /dev/null +++ b/web/lessons/diagramme/l04-java-laeuft-nicht-start.visustruct @@ -0,0 +1,12 @@ + + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 105;110;116;32;97;108;116;101;114;32;61;32;55; + + + 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;97;109;101;32;43;32;34;32;105;115;116;32;34;32;43;32;65;108;116;101;114;32;43;32;34;32;74;97;104;114;101;32;97;108;116;46;34;41; + + diff --git a/web/lessons/diagramme/l05-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l05-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..1e053fec --- /dev/null +++ b/web/lessons/diagramme/l05-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;115;116;117;101;99;107;101;32;61;32;56; + + + 105;110;116;32;112;101;114;115;111;110;101;110;32;61;32;52; + + + 105;110;116;32;112;114;111;80;101;114;115;111;110;32;61;32;115;116;117;101;99;107;101;32;47;32;112;101;114;115;111;110;101;110; + + + 111;117;116;112;117;116;58;32;34;74;101;100;101;114;32;98;101;107;111;109;109;116;32;34;32;43;32;112;114;111;80;101;114;115;111;110;32;43;32;34;32;83;116;252;99;107;101;46;34; + + diff --git a/web/lessons/diagramme/l05-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l05-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..4a751c92 --- /dev/null +++ b/web/lessons/diagramme/l05-java-laeuft-nicht-start.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;115;116;117;101;99;107;101;32;61;32;56; + + + 105;110;116;32;112;101;114;115;111;110;101;110;32;61;32;52; + + + 105;110;116;32;112;114;111;80;101;114;115;111;110;32;61;32;115;116;117;101;99;107;101;32;47;32;112;101;114;115;111;110;101;110; + + + 111;117;116;112;117;116;58;32;34;74;101;100;101;114;32;98;101;107;111;109;109;116;32;34;32;43;32;112;114;111;112;101;114;115;111;110;32;43;32;34;32;83;116;252;99;107;101;46;34; + + diff --git a/web/lessons/diagramme/l06-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l06-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..060902e2 --- /dev/null +++ b/web/lessons/diagramme/l06-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,9 @@ + + + + 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; + + + 111;117;116;112;117;116;58;32;34;78;228;99;104;115;116;101;115;32;74;97;104;114;32;98;105;115;116;32;100;117;32;34;32;43;32;40;97;108;116;101;114;32;43;32;49;41; + + diff --git a/web/lessons/diagramme/l06-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l06-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..03658422 --- /dev/null +++ b/web/lessons/diagramme/l06-java-laeuft-nicht-start.visustruct @@ -0,0 +1,9 @@ + + + + 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; + + + 111;117;116;112;117;116;58;32;34;78;228;99;104;115;116;101;115;32;74;97;104;114;32;98;105;115;116;32;100;117;32;34;32;43;32;40;65;108;116;101;114;32;43;32;49;41; + + diff --git a/web/lessons/diagramme/l07-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l07-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..0ec83a9a --- /dev/null +++ b/web/lessons/diagramme/l07-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;112;117;110;107;116;101;32;61;32;49;48; + + + 105;110;116;32;98;111;110;117;115;32;61;32;53; + + + 112;117;110;107;116;101;32;61;32;112;117;110;107;116;101;32;43;32;98;111;110;117;115; + + + 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; + + diff --git a/web/lessons/diagramme/l07-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l07-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..436bf3d4 --- /dev/null +++ b/web/lessons/diagramme/l07-java-laeuft-nicht-start.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;112;117;110;107;116;101;32;61;32;49;48; + + + 112;117;110;107;116;101;32;61;32;112;117;110;107;116;101;32;43;32;98;111;110;117;115; + + + 105;110;116;32;98;111;110;117;115;32;61;32;53; + + + 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; + + diff --git a/web/lessons/diagramme/l08-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l08-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..698dac33 --- /dev/null +++ b/web/lessons/diagramme/l08-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;97;108;116;101;114;32;61;32;49;53; + + + 97;108;116;101;114;32;62;61;32;49;54; + + + 111;117;116;112;117;116;58;32;34;69;105;110;108;97;115;115;34; + + + + + 111;117;116;112;117;116;58;32;34;75;101;105;110;32;69;105;110;108;97;115;115;34; + + + + diff --git a/web/lessons/diagramme/l08-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l08-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..f94df1e8 --- /dev/null +++ b/web/lessons/diagramme/l08-java-laeuft-nicht-start.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;97;108;116;101;114;32;61;32;49;53; + + + 65;108;116;101;114;32;62;61;32;49;54; + + + 111;117;116;112;117;116;58;32;34;69;105;110;108;97;115;115;34; + + + + + 111;117;116;112;117;116;58;32;34;75;101;105;110;32;69;105;110;108;97;115;115;34; + + + + diff --git a/web/lessons/diagramme/l09-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l09-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..9ed82396 --- /dev/null +++ b/web/lessons/diagramme/l09-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;116;97;103;32;61;32;55; + + + 116;97;103;32;61;61;32;54;32;124;124;32;116;97;103;32;61;61;32;55; + + + 111;117;116;112;117;116;58;32;34;115;99;104;117;108;102;114;101;105;34; + + + + + 111;117;116;112;117;116;58;32;34;83;99;104;117;108;101;34; + + + + diff --git a/web/lessons/diagramme/l09-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l09-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..986f59b3 --- /dev/null +++ b/web/lessons/diagramme/l09-java-laeuft-nicht-start.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;116;97;103;32;61;32;55; + + + 116;97;103;32;61;61;32;54;32;124;124;32;84;97;103;32;61;61;32;55; + + + 111;117;116;112;117;116;58;32;34;115;99;104;117;108;102;114;101;105;34; + + + + + 111;117;116;112;117;116;58;32;34;83;99;104;117;108;101;34; + + + + diff --git a/web/lessons/diagramme/l10-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l10-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..a7c9ac48 --- /dev/null +++ b/web/lessons/diagramme/l10-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,24 @@ + + + + 105;110;116;32;110;111;116;101;32;61;32;50; + + + 110;111;116;101; + + + 111;117;116;112;117;116;58;32;34;115;101;104;114;32;103;117;116;34; + + + + + 111;117;116;112;117;116;58;32;34;103;117;116;34; + + + + + 111;117;116;112;117;116;58;32;34;119;101;105;116;101;114;32;252;98;101;110;34; + + + + diff --git a/web/lessons/diagramme/l10-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l10-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..37aadd29 --- /dev/null +++ b/web/lessons/diagramme/l10-java-laeuft-nicht-start.visustruct @@ -0,0 +1,24 @@ + + + + 105;110;116;32;110;111;116;101;32;61;32;50; + + + 78;111;116;101; + + + 111;117;116;112;117;116;58;32;34;115;101;104;114;32;103;117;116;34; + + + + + 111;117;116;112;117;116;58;32;34;103;117;116;34; + + + + + 111;117;116;112;117;116;58;32;34;119;101;105;116;101;114;32;252;98;101;110;34; + + + + diff --git a/web/lessons/diagramme/l11-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l11-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..baed185c --- /dev/null +++ b/web/lessons/diagramme/l11-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;122;97;104;108;32;61;32;51; + + + 122;97;104;108;32;62;32;48; + + + 111;117;116;112;117;116;58;32;122;97;104;108; + + + 122;97;104;108;32;61;32;122;97;104;108;32;45;32;49; + + + + + 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; + + diff --git a/web/lessons/diagramme/l11-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l11-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..f6132fea --- /dev/null +++ b/web/lessons/diagramme/l11-java-laeuft-nicht-start.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;122;97;104;108;32;61;32;51; + + + 122;97;104;108;32;62;32;48; + + + 111;117;116;112;117;116;58;32;90;97;104;108; + + + 122;97;104;108;32;61;32;122;97;104;108;32;45;32;49; + + + + + 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; + + diff --git a/web/lessons/diagramme/l12-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l12-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..415e2068 --- /dev/null +++ b/web/lessons/diagramme/l12-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;122;97;104;108;32;61;32;49; + + + 105;110;116;32;103;114;101;110;122;101;32;61;32;50;48; + + + 122;97;104;108;32;60;32;103;114;101;110;122;101; + + + 111;117;116;112;117;116;58;32;122;97;104;108; + + + 122;97;104;108;32;61;32;122;97;104;108;32;42;32;50; + + + + diff --git a/web/lessons/diagramme/l12-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l12-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..2ce71b70 --- /dev/null +++ b/web/lessons/diagramme/l12-java-laeuft-nicht-start.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;122;97;104;108;32;61;32;49; + + + 105;110;116;32;103;114;101;110;122;101;32;61;32;50;48; + + + 122;97;104;108;32;60;32;71;114;101;110;122;101; + + + 111;117;116;112;117;116;58;32;122;97;104;108; + + + 122;97;104;108;32;61;32;122;97;104;108;32;42;32;50; + + + + diff --git a/web/lessons/diagramme/l13-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l13-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..b9832516 --- /dev/null +++ b/web/lessons/diagramme/l13-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;104;111;101;104;101;32;61;32;48; + + + 105;110;116;32;115;116;117;102;101;32;61;32;49; + 115;116;117;102;101;32;60;61;32;53; + 115;116;117;102;101;43;43; + + + 104;111;101;104;101;32;61;32;104;111;101;104;101;32;43;32;50;48; + + + + + 111;117;116;112;117;116;58;32;34;72;246;104;101;58;32;34;32;43;32;104;111;101;104;101;32;43;32;34;32;99;109;34; + + diff --git a/web/lessons/diagramme/l13-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l13-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..8fb62110 --- /dev/null +++ b/web/lessons/diagramme/l13-java-laeuft-nicht-start.visustruct @@ -0,0 +1,16 @@ + + + + 105;110;116;32;115;116;117;102;101;32;61;32;49; + 115;116;117;102;101;32;60;61;32;53; + 115;116;117;102;101;43;43; + + + 104;111;101;104;101;32;61;32;104;111;101;104;101;32;43;32;50;48; + + + + + 111;117;116;112;117;116;58;32;34;72;246;104;101;58;32;34;32;43;32;104;111;101;104;101;32;43;32;34;32;99;109;34; + + diff --git a/web/lessons/diagramme/l14-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l14-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..74d801ff --- /dev/null +++ b/web/lessons/diagramme/l14-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,23 @@ + + + + 105;110;116;32;105;32;61;32;49; + 105;32;60;61;32;49;48; + 105;43;43; + + + 105;32;37;32;50;32;61;61;32;48; + + + 111;117;116;112;117;116;58;32;105; + + + + + 248; + + + + + + diff --git a/web/lessons/diagramme/l14-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l14-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..3bab3941 --- /dev/null +++ b/web/lessons/diagramme/l14-java-laeuft-nicht-start.visustruct @@ -0,0 +1,23 @@ + + + + 105;110;116;32;105;32;61;32;49; + 105;32;60;61;32;49;48; + 105;43;43; + + + 105;32;37;32;50;32;61;61;32;48; + + + 111;117;116;112;117;116;58;32;73; + + + + + 248; + + + + + + diff --git a/web/lessons/diagramme/l15-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l15-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..f27992de --- /dev/null +++ b/web/lessons/diagramme/l15-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,22 @@ + + + + 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; + + + 105;110;116;32;115;117;109;109;101;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;112;117;110;107;116;101;46;108;101;110;103;116;104; + 105;43;43; + + + 115;117;109;109;101;32;61;32;115;117;109;109;101;32;43;32;112;117;110;107;116;101;91;105;93; + + + + + 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; + + diff --git a/web/lessons/diagramme/l15-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l15-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..18654a09 --- /dev/null +++ b/web/lessons/diagramme/l15-java-laeuft-nicht-start.visustruct @@ -0,0 +1,22 @@ + + + + 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; + + + 105;110;116;32;115;117;109;109;101;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;112;117;110;107;116;101;46;76;101;110;103;116;104; + 105;43;43; + + + 115;117;109;109;101;32;61;32;115;117;109;109;101;32;43;32;112;117;110;107;116;101;91;105;93; + + + + + 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; + + diff --git a/web/lessons/diagramme/l16-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l16-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..01d3fff6 --- /dev/null +++ b/web/lessons/diagramme/l16-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,9 @@ + + + + 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; + + + 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;44;32;82;117;110;100;101;32;49;58;32;34;32;43;32;112;117;110;107;116;101;91;49;93;91;48;93; + + diff --git a/web/lessons/diagramme/l16-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l16-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..1cb5a556 --- /dev/null +++ b/web/lessons/diagramme/l16-java-laeuft-nicht-start.visustruct @@ -0,0 +1,9 @@ + + + + 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; + + + 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;44;32;82;117;110;100;101;32;49;58;32;34;32;43;32;80;117;110;107;116;101;91;49;93;91;48;93; + + diff --git a/web/lessons/diagramme/l17-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l17-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..5081c927 --- /dev/null +++ b/web/lessons/diagramme/l17-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,9 @@ + + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;104;97;116;32;34;32;43;32;110;97;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;66;117;99;104;115;116;97;98;101;110;34; + + diff --git a/web/lessons/diagramme/l17-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l17-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..00940be2 --- /dev/null +++ b/web/lessons/diagramme/l17-java-laeuft-nicht-start.visustruct @@ -0,0 +1,9 @@ + + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;104;97;116;32;34;32;43;32;110;97;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;66;117;99;104;115;116;97;98;101;110;34; + + diff --git a/web/lessons/diagramme/l19-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/l19-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..c3ad8012 --- /dev/null +++ b/web/lessons/diagramme/l19-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,35 @@ + + + + 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; + + + 105;110;116;32;103;101;115;117;99;104;116;32;61;32;49;49; + + + 105;110;116;32;112;111;115;105;116;105;111;110;32;61;32;45;49; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;107;97;114;116;101;110;46;108;101;110;103;116;104; + 105;43;43; + + + 107;97;114;116;101;110;91;105;93;32;61;61;32;103;101;115;117;99;104;116; + + + 112;111;115;105;116;105;111;110;32;61;32;105; + + + + + 248; + + + + + + + 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; + + diff --git a/web/lessons/diagramme/l19-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/l19-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..e0b9623b --- /dev/null +++ b/web/lessons/diagramme/l19-java-laeuft-nicht-start.visustruct @@ -0,0 +1,35 @@ + + + + 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; + + + 105;110;116;32;103;101;115;117;99;104;116;32;61;32;49;49; + + + 105;110;116;32;112;111;115;105;116;105;111;110;32;61;32;45;49; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;107;97;114;116;101;110;46;108;101;110;103;116;104; + 105;43;43; + + + 107;97;114;116;101;110;91;105;93;32;61;61;32;71;101;115;117;99;104;116; + + + 112;111;115;105;116;105;111;110;32;61;32;105; + + + + + 248; + + + + + + + 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; + + diff --git a/web/lessons/diagramme/pt/l04-gross-klein-loesung.visustruct b/web/lessons/diagramme/pt/l04-gross-klein-loesung.visustruct new file mode 100644 index 00000000..94febc4d --- /dev/null +++ b/web/lessons/diagramme/pt/l04-gross-klein-loesung.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;110;117;109;101;114;111;32;61;32;52; + + + 105;110;116;32;78;117;109;101;114;111;32;61;32;54; + + + 105;110;116;32;114;101;115;117;108;116;97;100;111;32;61;32;110;117;109;101;114;111;32;42;32;78;117;109;101;114;111; + + + 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;97;100;111;58;32;34;32;43;32;114;101;115;117;108;116;97;100;111; + + diff --git a/web/lessons/diagramme/pt/l04-gross-klein-start.visustruct b/web/lessons/diagramme/pt/l04-gross-klein-start.visustruct new file mode 100644 index 00000000..070d436d --- /dev/null +++ b/web/lessons/diagramme/pt/l04-gross-klein-start.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;110;117;109;101;114;111;32;61;32;52; + + + 105;110;116;32;78;117;109;101;114;111;32;61;32;54; + + + 105;110;116;32;114;101;115;117;108;116;97;100;111;32;61;32;110;117;109;101;114;111;32;42;32;78;85;77;69;82;79; + + + 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;97;100;111;58;32;34;32;43;32;114;101;115;117;108;116;97;100;111; + + diff --git a/web/lessons/diagramme/pt/l04-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l04-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..486512b0 --- /dev/null +++ b/web/lessons/diagramme/pt/l04-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,12 @@ + + + + 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 105;110;116;32;105;100;97;100;101;32;61;32;55; + + + 111;117;116;112;117;116;58;32;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;105;100;97;100;101;32;43;32;34;32;97;110;111;115;46;34; + + diff --git a/web/lessons/diagramme/pt/l04-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l04-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..f836ebf2 --- /dev/null +++ b/web/lessons/diagramme/pt/l04-java-laeuft-nicht-start.visustruct @@ -0,0 +1,12 @@ + + + + 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 105;110;116;32;105;100;97;100;101;32;61;32;55; + + + 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;73;100;97;100;101;32;43;32;34;32;97;110;111;115;46;34;41; + + diff --git a/web/lessons/diagramme/pt/l05-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l05-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..3dcbf271 --- /dev/null +++ b/web/lessons/diagramme/pt/l05-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;102;97;116;105;97;115;32;61;32;56; + + + 105;110;116;32;112;101;115;115;111;97;115;32;61;32;52; + + + 105;110;116;32;112;111;114;80;101;115;115;111;97;32;61;32;102;97;116;105;97;115;32;47;32;112;101;115;115;111;97;115; + + + 111;117;116;112;117;116;58;32;34;67;97;100;97;32;117;109;32;114;101;99;101;98;101;32;34;32;43;32;112;111;114;80;101;115;115;111;97;32;43;32;34;32;102;97;116;105;97;115;46;34; + + diff --git a/web/lessons/diagramme/pt/l05-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l05-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..c43a4807 --- /dev/null +++ b/web/lessons/diagramme/pt/l05-java-laeuft-nicht-start.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;102;97;116;105;97;115;32;61;32;56; + + + 105;110;116;32;112;101;115;115;111;97;115;32;61;32;52; + + + 105;110;116;32;112;111;114;80;101;115;115;111;97;32;61;32;102;97;116;105;97;115;32;47;32;112;101;115;115;111;97;115; + + + 111;117;116;112;117;116;58;32;34;67;97;100;97;32;117;109;32;114;101;99;101;98;101;32;34;32;43;32;112;111;114;112;101;115;115;111;97;32;43;32;34;32;102;97;116;105;97;115;46;34; + + diff --git a/web/lessons/diagramme/pt/l06-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l06-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..90dc1170 --- /dev/null +++ b/web/lessons/diagramme/pt/l06-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,9 @@ + + + + 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; + + + 111;117;116;112;117;116;58;32;34;78;111;32;112;114;243;120;105;109;111;32;97;110;111;32;116;101;110;115;32;34;32;43;32;40;105;100;97;100;101;32;43;32;49;41; + + diff --git a/web/lessons/diagramme/pt/l06-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l06-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..9b16b8f4 --- /dev/null +++ b/web/lessons/diagramme/pt/l06-java-laeuft-nicht-start.visustruct @@ -0,0 +1,9 @@ + + + + 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; + + + 111;117;116;112;117;116;58;32;34;78;111;32;112;114;243;120;105;109;111;32;97;110;111;32;116;101;110;115;32;34;32;43;32;40;73;100;97;100;101;32;43;32;49;41; + + diff --git a/web/lessons/diagramme/pt/l07-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l07-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..817d1131 --- /dev/null +++ b/web/lessons/diagramme/pt/l07-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;112;111;110;116;111;115;32;61;32;49;48; + + + 105;110;116;32;98;111;110;117;115;32;61;32;53; + + + 112;111;110;116;111;115;32;61;32;112;111;110;116;111;115;32;43;32;98;111;110;117;115; + + + 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; + + diff --git a/web/lessons/diagramme/pt/l07-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l07-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..666440a0 --- /dev/null +++ b/web/lessons/diagramme/pt/l07-java-laeuft-nicht-start.visustruct @@ -0,0 +1,15 @@ + + + + 105;110;116;32;112;111;110;116;111;115;32;61;32;49;48; + + + 112;111;110;116;111;115;32;61;32;112;111;110;116;111;115;32;43;32;98;111;110;117;115; + + + 105;110;116;32;98;111;110;117;115;32;61;32;53; + + + 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; + + diff --git a/web/lessons/diagramme/pt/l08-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l08-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..e67f03cf --- /dev/null +++ b/web/lessons/diagramme/pt/l08-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;105;100;97;100;101;32;61;32;49;53; + + + 105;100;97;100;101;32;62;61;32;49;54; + + + 111;117;116;112;117;116;58;32;34;80;111;100;101;32;101;110;116;114;97;114;34; + + + + + 111;117;116;112;117;116;58;32;34;78;227;111;32;112;111;100;101;32;101;110;116;114;97;114;34; + + + + diff --git a/web/lessons/diagramme/pt/l08-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l08-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..81e5beaa --- /dev/null +++ b/web/lessons/diagramme/pt/l08-java-laeuft-nicht-start.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;105;100;97;100;101;32;61;32;49;53; + + + 73;100;97;100;101;32;62;61;32;49;54; + + + 111;117;116;112;117;116;58;32;34;80;111;100;101;32;101;110;116;114;97;114;34; + + + + + 111;117;116;112;117;116;58;32;34;78;227;111;32;112;111;100;101;32;101;110;116;114;97;114;34; + + + + diff --git a/web/lessons/diagramme/pt/l09-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l09-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..8b4ae283 --- /dev/null +++ b/web/lessons/diagramme/pt/l09-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;100;105;97;32;61;32;55; + + + 100;105;97;32;61;61;32;54;32;124;124;32;100;105;97;32;61;61;32;55; + + + 111;117;116;112;117;116;58;32;34;115;101;109;32;101;115;99;111;108;97;34; + + + + + 111;117;116;112;117;116;58;32;34;101;115;99;111;108;97;34; + + + + diff --git a/web/lessons/diagramme/pt/l09-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l09-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..a374f5c3 --- /dev/null +++ b/web/lessons/diagramme/pt/l09-java-laeuft-nicht-start.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;100;105;97;32;61;32;55; + + + 100;105;97;32;61;61;32;54;32;124;124;32;68;105;97;32;61;61;32;55; + + + 111;117;116;112;117;116;58;32;34;115;101;109;32;101;115;99;111;108;97;34; + + + + + 111;117;116;112;117;116;58;32;34;101;115;99;111;108;97;34; + + + + diff --git a/web/lessons/diagramme/pt/l10-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l10-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..ae44f8ff --- /dev/null +++ b/web/lessons/diagramme/pt/l10-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,24 @@ + + + + 105;110;116;32;110;111;116;97;32;61;32;50; + + + 110;111;116;97; + + + 111;117;116;112;117;116;58;32;34;109;117;105;116;111;32;98;111;109;34; + + + + + 111;117;116;112;117;116;58;32;34;98;111;109;34; + + + + + 111;117;116;112;117;116;58;32;34;99;111;110;116;105;110;117;97;32;97;32;112;114;97;116;105;99;97;114;34; + + + + diff --git a/web/lessons/diagramme/pt/l10-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l10-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..70376ff5 --- /dev/null +++ b/web/lessons/diagramme/pt/l10-java-laeuft-nicht-start.visustruct @@ -0,0 +1,24 @@ + + + + 105;110;116;32;110;111;116;97;32;61;32;50; + + + 78;111;116;97; + + + 111;117;116;112;117;116;58;32;34;109;117;105;116;111;32;98;111;109;34; + + + + + 111;117;116;112;117;116;58;32;34;98;111;109;34; + + + + + 111;117;116;112;117;116;58;32;34;99;111;110;116;105;110;117;97;32;97;32;112;114;97;116;105;99;97;114;34; + + + + diff --git a/web/lessons/diagramme/pt/l11-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l11-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..6940e6b8 --- /dev/null +++ b/web/lessons/diagramme/pt/l11-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;110;117;109;101;114;111;32;61;32;51; + + + 110;117;109;101;114;111;32;62;32;48; + + + 111;117;116;112;117;116;58;32;110;117;109;101;114;111; + + + 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;45;32;49; + + + + + 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; + + diff --git a/web/lessons/diagramme/pt/l11-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l11-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..b68d74fe --- /dev/null +++ b/web/lessons/diagramme/pt/l11-java-laeuft-nicht-start.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;110;117;109;101;114;111;32;61;32;51; + + + 110;117;109;101;114;111;32;62;32;48; + + + 111;117;116;112;117;116;58;32;78;117;109;101;114;111; + + + 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;45;32;49; + + + + + 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; + + diff --git a/web/lessons/diagramme/pt/l12-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l12-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..cb93db74 --- /dev/null +++ b/web/lessons/diagramme/pt/l12-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;110;117;109;101;114;111;32;61;32;49; + + + 105;110;116;32;108;105;109;105;116;101;32;61;32;50;48; + + + 110;117;109;101;114;111;32;60;32;108;105;109;105;116;101; + + + 111;117;116;112;117;116;58;32;110;117;109;101;114;111; + + + 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;42;32;50; + + + + diff --git a/web/lessons/diagramme/pt/l12-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l12-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..999008ed --- /dev/null +++ b/web/lessons/diagramme/pt/l12-java-laeuft-nicht-start.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;110;117;109;101;114;111;32;61;32;49; + + + 105;110;116;32;108;105;109;105;116;101;32;61;32;50;48; + + + 110;117;109;101;114;111;32;60;32;76;105;109;105;116;101; + + + 111;117;116;112;117;116;58;32;110;117;109;101;114;111; + + + 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;42;32;50; + + + + diff --git a/web/lessons/diagramme/pt/l13-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l13-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..4405cc20 --- /dev/null +++ b/web/lessons/diagramme/pt/l13-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,19 @@ + + + + 105;110;116;32;97;108;116;117;114;97;32;61;32;48; + + + 105;110;116;32;100;101;103;114;97;117;32;61;32;49; + 100;101;103;114;97;117;32;60;61;32;53; + 100;101;103;114;97;117;43;43; + + + 97;108;116;117;114;97;32;61;32;97;108;116;117;114;97;32;43;32;50;48; + + + + + 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;99;109;34; + + diff --git a/web/lessons/diagramme/pt/l13-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l13-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..4704c0ef --- /dev/null +++ b/web/lessons/diagramme/pt/l13-java-laeuft-nicht-start.visustruct @@ -0,0 +1,16 @@ + + + + 105;110;116;32;100;101;103;114;97;117;32;61;32;49; + 100;101;103;114;97;117;32;60;61;32;53; + 100;101;103;114;97;117;43;43; + + + 97;108;116;117;114;97;32;61;32;97;108;116;117;114;97;32;43;32;50;48; + + + + + 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;99;109;34; + + diff --git a/web/lessons/diagramme/pt/l14-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l14-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..c0e3899f --- /dev/null +++ b/web/lessons/diagramme/pt/l14-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,23 @@ + + + + 105;110;116;32;105;32;61;32;49; + 105;32;60;61;32;49;48; + 105;43;43; + + + 105;32;37;32;50;32;61;61;32;48; + + + 111;117;116;112;117;116;58;32;105; + + + + + 248; + + + + + + diff --git a/web/lessons/diagramme/pt/l14-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l14-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..c3a6d24f --- /dev/null +++ b/web/lessons/diagramme/pt/l14-java-laeuft-nicht-start.visustruct @@ -0,0 +1,23 @@ + + + + 105;110;116;32;105;32;61;32;49; + 105;32;60;61;32;49;48; + 105;43;43; + + + 105;32;37;32;50;32;61;61;32;48; + + + 111;117;116;112;117;116;58;32;73; + + + + + 248; + + + + + + diff --git a/web/lessons/diagramme/pt/l15-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l15-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..6509da2a --- /dev/null +++ b/web/lessons/diagramme/pt/l15-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,22 @@ + + + + 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; + + + 105;110;116;32;115;111;109;97;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;112;111;110;116;111;115;46;108;101;110;103;116;104; + 105;43;43; + + + 115;111;109;97;32;61;32;115;111;109;97;32;43;32;112;111;110;116;111;115;91;105;93; + + + + + 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; + + diff --git a/web/lessons/diagramme/pt/l15-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l15-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..8d70b22e --- /dev/null +++ b/web/lessons/diagramme/pt/l15-java-laeuft-nicht-start.visustruct @@ -0,0 +1,22 @@ + + + + 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; + + + 105;110;116;32;115;111;109;97;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;112;111;110;116;111;115;46;76;101;110;103;116;104; + 105;43;43; + + + 115;111;109;97;32;61;32;115;111;109;97;32;43;32;112;111;110;116;111;115;91;105;93; + + + + + 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; + + diff --git a/web/lessons/diagramme/pt/l16-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l16-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..6482c7ed --- /dev/null +++ b/web/lessons/diagramme/pt/l16-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,9 @@ + + + + 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; + + + 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;44;32;114;111;110;100;97;32;49;58;32;34;32;43;32;112;111;110;116;111;115;91;49;93;91;48;93; + + diff --git a/web/lessons/diagramme/pt/l16-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l16-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..c871b3e2 --- /dev/null +++ b/web/lessons/diagramme/pt/l16-java-laeuft-nicht-start.visustruct @@ -0,0 +1,9 @@ + + + + 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; + + + 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;44;32;114;111;110;100;97;32;49;58;32;34;32;43;32;80;111;110;116;111;115;91;49;93;91;48;93; + + diff --git a/web/lessons/diagramme/pt/l17-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l17-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..606502e3 --- /dev/null +++ b/web/lessons/diagramme/pt/l17-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,9 @@ + + + + 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;116;101;109;32;34;32;43;32;110;111;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;114;97;115;34; + + diff --git a/web/lessons/diagramme/pt/l17-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l17-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..70fdf064 --- /dev/null +++ b/web/lessons/diagramme/pt/l17-java-laeuft-nicht-start.visustruct @@ -0,0 +1,9 @@ + + + + 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;116;101;109;32;34;32;43;32;110;111;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;114;97;115;34; + + diff --git a/web/lessons/diagramme/pt/l19-java-laeuft-nicht-loesung.visustruct b/web/lessons/diagramme/pt/l19-java-laeuft-nicht-loesung.visustruct new file mode 100644 index 00000000..9203c8e1 --- /dev/null +++ b/web/lessons/diagramme/pt/l19-java-laeuft-nicht-loesung.visustruct @@ -0,0 +1,35 @@ + + + + 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; + + + 105;110;116;32;112;114;111;99;117;114;97;100;97;32;61;32;49;49; + + + 105;110;116;32;112;111;115;105;99;97;111;32;61;32;45;49; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;99;97;114;116;97;115;46;108;101;110;103;116;104; + 105;43;43; + + + 99;97;114;116;97;115;91;105;93;32;61;61;32;112;114;111;99;117;114;97;100;97; + + + 112;111;115;105;99;97;111;32;61;32;105; + + + + + 248; + + + + + + + 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; + + diff --git a/web/lessons/diagramme/pt/l19-java-laeuft-nicht-start.visustruct b/web/lessons/diagramme/pt/l19-java-laeuft-nicht-start.visustruct new file mode 100644 index 00000000..bd4d1442 --- /dev/null +++ b/web/lessons/diagramme/pt/l19-java-laeuft-nicht-start.visustruct @@ -0,0 +1,35 @@ + + + + 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; + + + 105;110;116;32;112;114;111;99;117;114;97;100;97;32;61;32;49;49; + + + 105;110;116;32;112;111;115;105;99;97;111;32;61;32;45;49; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;99;97;114;116;97;115;46;108;101;110;103;116;104; + 105;43;43; + + + 99;97;114;116;97;115;91;105;93;32;61;61;32;80;114;111;99;117;114;97;100;97; + + + 112;111;115;105;99;97;111;32;61;32;105; + + + + + 248; + + + + + + + 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; + + diff --git a/web/lessons/en/04-variablen-und-datentypen.md b/web/lessons/en/04-variablen-und-datentypen.md index 6fd9b4a4..3fe12928 100644 --- a/web/lessons/en/04-variablen-und-datentypen.md +++ b/web/lessons/en/04-variablen-und-datentypen.md @@ -8,6 +8,7 @@ kurz: Store values, get to know the data types int, double, String and boolean, ::: kompetenzen - create a variable with a data type, a name and a value +- explain that Java is case-sensitive (`number` is not `Number`) - tell the data types int, double, String and boolean apart - explain that = is an assignment and not a comparison - calculate with + - * / % and use whole-number division @@ -44,6 +45,33 @@ camelCase got its name because the capital letters in the middle stick out of th The capitals W and T stick out like the camel's two humps. ::: +## Upper and lower case + +Java tells **upper and lower case** apart. The English word for this is **case-sensitive**. For Java, `number`, `Number` and `NUMBER` are three different names, so three different boxes: + +``` +int number = 4 +int Number = 6 +``` + +There are two variables here. If you later write `NUMBER`, Java finds no variable with that name. The program doesn’t run and you get an error message. + +> This also applies to Java words: `String` and `System` start with a capital, `int` and `double` are small. In your own programs, never create two variables that differ only in upper and lower case. It confuses you and everyone who reads your code. + +## Exercise: Three names + +::: übung l04-gross-klein +titel: Three names +auftrag: Ludwig created two variables: `number` with the value 4 and `Number` with the value 6. The structure chart should multiply them and output **Result: 24**. But it doesn’t run. + Open the exercise, click Check and read the error message. Fix the statement and click Check again. +start: l04-gross-klein-start.visustruct +test: - -> Result: 24 +braucht: anweisung +tipp: How many different names are in the structure chart? `number`, `Number` and `NUMBER` are three different names for the computer. +tipp: `NUMBER` doesn’t exist. For 24 you need 4 times 6, so `number` times `Number`: `int result = number * Number`. `number * number` gives 16. +lösung: l04-gross-klein-loesung.visustruct +::: + ## The four data types The data type says what kind of value may be stored in the variable. @@ -243,6 +271,21 @@ tipp: The two operators are swapped: `int minutes = seconds / 60;` and `int rest lösung: l04-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l04-java-laeuft-nicht +titel: Fix the profile +code: java +auftrag: The program should output **Ludwig is 7 years old.** But it doesn’t run, because two words are spelled wrong. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l04-java-laeuft-nicht-start.visustruct +test: - -> Ludwig is 7 years old. +braucht: anweisung +tipp: Java is case-sensitive. Compare every word in the output carefully with what was created above. +tipp: `System` is written with a capital S. The variable is called `age` with a small a: `System.out.println(name + " is " + age + " years old.");` +lösung: l04-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Which data type? ::: spiel frage @@ -297,6 +340,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can ::: checkliste - I can create a variable with a data type, a name and a value. → What is a variable? +- I can explain that Java is case-sensitive (`number` is not `Number`). → Upper and lower case - I can tell the data types int, double, String and boolean apart. → The four data types - I can explain that = is an assignment and not a comparison. → Assignment with = - I can calculate with + - * / % and use whole-number division. → Calculating @@ -314,6 +358,13 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] boolean > Decimal numbers have the type double. In VisuStruct you write them with a point. +? How many variables do `int number = 1`, `int Number = 2` and `int NUMBER = 3` create? +→ Upper and lower case +- [ ] one +- [ ] two +- [x] three +> Java is case-sensitive. The three names are different, so there are three variables. + ? What value does x have after `int x = 17 / 5`? → Calculating - [ ] 3.4 diff --git a/web/lessons/en/05-sequenz.md b/web/lessons/en/05-sequenz.md index 15ea02c8..1c9ca231 100644 --- a/web/lessons/en/05-sequenz.md +++ b/web/lessons/en/05-sequenz.md @@ -145,6 +145,21 @@ tipp: Swap the last two lines: first `credit = credit - price;`, then the output lösung: l05-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l05-java-laeuft-nicht +titel: Share a pizza +code: java +auftrag: A pizza has 8 slices and 4 friends share it. The program should output **Everyone gets 2 slices.** But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l05-java-laeuft-nicht-start.visustruct +test: - -> Everyone gets 2 slices. +braucht: anweisung +tipp: Compare the name in the output letter by letter with the name created in the third line. +tipp: The variable is called `perPerson` with a capital P (camelCase). Write it exactly like that in the output. +lösung: l05-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Sort the boxes ::: spiel reihenfolge diff --git a/web/lessons/en/06-eingabe-und-ausgabe.md b/web/lessons/en/06-eingabe-und-ausgabe.md index 81b5a715..50056621 100644 --- a/web/lessons/en/06-eingabe-und-ausgabe.md +++ b/web/lessons/en/06-eingabe-und-ausgabe.md @@ -273,6 +273,22 @@ tipp: Add brackets so that Java calculates first: `System.out.println("Sum: " + lösung: l06-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l06-java-laeuft-nicht +titel: Age next year +code: java +auftrag: The program asks for your age and should say how old you will be next year. For 14 that is **Next year you will be 15**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l06-java-laeuft-nicht-start.visustruct +test: 14 -> Next year you will be 15 +test: 9 -> Next year you will be 10 +braucht: anweisung +tipp: The input ends up in a variable. What exactly is it called, and what is it called in the output? +tipp: The variable is called `age` with a small a: `System.out.println("Next year you will be " + (age + 1));` +lösung: l06-java-laeuft-nicht-loesung.visustruct +::: + ## Game: What is output? ::: spiel frage diff --git a/web/lessons/en/07-simulation-und-schreibtischtest.md b/web/lessons/en/07-simulation-und-schreibtischtest.md index fc9d86bf..b7ffc9e2 100644 --- a/web/lessons/en/07-simulation-und-schreibtischtest.md +++ b/web/lessons/en/07-simulation-und-schreibtischtest.md @@ -209,6 +209,21 @@ tipp: Ludwig loses 3 points, so 3 is subtracted from the old value: `points = po lösung: l07-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l07-java-laeuft-nicht +titel: Fix the bonus +code: java +auftrag: Ludwig has 10 points and gets 5 bonus points. At the end **Points: 15** should appear. But the code doesn’t run. Also step through it with Single step: in which line does it stop? + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l07-java-laeuft-nicht-start.visustruct +test: - -> Points: 15 +braucht: anweisung +tipp: Java runs the code from top to bottom. Does `bonus` already exist when it is used in the calculation? +tipp: Create `bonus` before the calculation: first `int bonus = 5;`, then `points = points + bonus;` +lösung: l07-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Defuse the bomb ::: spiel bombe diff --git a/web/lessons/en/08-verzweigung.md b/web/lessons/en/08-verzweigung.md index fbd79b2f..2e92d4b7 100644 --- a/web/lessons/en/08-verzweigung.md +++ b/web/lessons/en/08-verzweigung.md @@ -197,6 +197,21 @@ tipp: “Under 6” means `age < 6`. `<=` means “less than or equal to”. lösung: l08-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l08-java-laeuft-nicht +titel: Rated 16 +code: java +auftrag: The film is rated 16. Ludwig is 15, so the program should output **No entry**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l08-java-laeuft-nicht-start.visustruct +test: - -> No entry +braucht: verzweigung +tipp: Look closely at the condition in the brackets after `if`. Does this variable exist? +tipp: The variable is called `age` with a small a: `if (age >= 16) {` +lösung: l08-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Which way? ::: spiel frage diff --git a/web/lessons/en/09-bedingungen-verknuepfen.md b/web/lessons/en/09-bedingungen-verknuepfen.md index ffc94d90..af23925c 100644 --- a/web/lessons/en/09-bedingungen-verknuepfen.md +++ b/web/lessons/en/09-bedingungen-verknuepfen.md @@ -259,6 +259,21 @@ tipp: It is enough if one of the two conditions is true: `day == 6 || day == 7`. lösung: l09-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l09-java-laeuft-nicht +titel: Fix the weekend +code: java +auftrag: Day 6 is Saturday, day 7 is Sunday. Today is day 7, so **no school** should appear. But the program doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l09-java-laeuft-nicht-start.visustruct +test: - -> no school +braucht: verzweigung +tipp: The condition has two parts. Compare the variable name in both parts. +tipp: In the second part the variable is also called `day` with a small d: `if (day == 6 || day == 7) {` +lösung: l09-java-laeuft-nicht-loesung.visustruct +::: + ## Checklist Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. diff --git a/web/lessons/en/10-fallauswahl.md b/web/lessons/en/10-fallauswahl.md index 9b72647d..461c5b89 100644 --- a/web/lessons/en/10-fallauswahl.md +++ b/web/lessons/en/10-fallauswahl.md @@ -184,6 +184,21 @@ tipp: With minus the order matters: `a - b` instead of `b - a`. lösung: l10-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l10-java-laeuft-nicht +titel: Fix the grade +code: java +auftrag: Ludwig got grade 2. The program should output **good**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l10-java-laeuft-nicht-start.visustruct +test: - -> good +braucht: fallauswahl +tipp: Which variable does the case selection check? Is it written the same way above? +tipp: The brackets after `switch` need `grade` with a small g: `switch (grade) {` +lösung: l10-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Which case? ::: spiel frage diff --git a/web/lessons/en/11-while-schleife.md b/web/lessons/en/11-while-schleife.md index 82e92c16..6e494266 100644 --- a/web/lessons/en/11-while-schleife.md +++ b/web/lessons/en/11-while-schleife.md @@ -208,6 +208,21 @@ tipp: He only saves as long as the goal has **not been reached** yet: `while (mo lösung: l11-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l11-java-laeuft-nicht +titel: Fix the countdown +code: java +auftrag: The countdown should output **3**, **2**, **1** and then **Go!** But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l11-java-laeuft-nicht-start.visustruct +test: - -> 3 | 2 | 1 | Go! +braucht: whileSchleife +tipp: The bug is inside the loop. Which variable should be output, and what is it really called? +tipp: Output `number` with a small n: `System.out.println(number);` +lösung: l11-java-laeuft-nicht-loesung.visustruct +::: + ## Game: How often? ::: spiel frage diff --git a/web/lessons/en/12-do-while-schleife.md b/web/lessons/en/12-do-while-schleife.md index 1bb6987a..e5de46e2 100644 --- a/web/lessons/en/12-do-while-schleife.md +++ b/web/lessons/en/12-do-while-schleife.md @@ -144,6 +144,21 @@ tipp: The loop should keep going as long as the number is greater than 0: `while lösung: l12-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l12-java-laeuft-nicht +titel: Fix the doubling +code: java +auftrag: Starting at 1, the program should keep doubling as long as the number is less than 20: **1**, **2**, **4**, **8**, **16**. It outputs only the 1 and then stops. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l12-java-laeuft-nicht-start.visustruct +test: - -> 1 | 2 | 4 | 8 | 16 +braucht: doUntilSchleife +tipp: The first round still runs. The bug appears when the condition at the bottom is checked for the first time. +tipp: The condition needs `limit` with a small l: `} while (number < limit);` +lösung: l12-java-laeuft-nicht-loesung.visustruct +::: + ## Game: At least once? ::: spiel frage diff --git a/web/lessons/en/13-for-schleife.md b/web/lessons/en/13-for-schleife.md index 4402e39c..c666dde8 100644 --- a/web/lessons/en/13-for-schleife.md +++ b/web/lessons/en/13-for-schleife.md @@ -179,6 +179,21 @@ tipp: `i` should also take the value 10: `i <= 10` instead of `i < 10`. lösung: l13-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l13-java-laeuft-nicht +titel: Fix the stairs +code: java +auftrag: Ludwig climbs 5 steps, each 20 cm high. The program should output **Height: 100 cm**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l13-java-laeuft-nicht-start.visustruct +test: - -> Height: 100 cm +braucht: forSchleife +tipp: `height` is used in a calculation, but where is the variable created? And at what height does Ludwig start? +tipp: Create `height` before the loop: `int height = 0;` +lösung: l13-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Defuse the bomb ::: spiel bombe diff --git a/web/lessons/en/14-verschachteln.md b/web/lessons/en/14-verschachteln.md index 6911e7fe..6b6fc16a 100644 --- a/web/lessons/en/14-verschachteln.md +++ b/web/lessons/en/14-verschachteln.md @@ -155,6 +155,21 @@ tipp: Move the line `System.out.println("Count: " + count);` after the closing b lösung: l14-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l14-java-laeuft-nicht +titel: Fix the even numbers +code: java +auftrag: The program should output the even numbers from 1 to 10: **2**, **4**, **6**, **8**, **10**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l14-java-laeuft-nicht-start.visustruct +test: - -> 2 | 4 | 6 | 8 | 10 +braucht: forSchleife, verzweigung +tipp: The bug is right inside, in the output. What is the loop’s counter variable called? +tipp: The counter variable is `i` with a small i: `System.out.println(i);` +lösung: l14-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Inside and outside ::: spiel frage diff --git a/web/lessons/en/15-arrays.md b/web/lessons/en/15-arrays.md index 7da62f79..13c2df5c 100644 --- a/web/lessons/en/15-arrays.md +++ b/web/lessons/en/15-arrays.md @@ -210,6 +210,21 @@ tipp: `max` has to start with a value from the array: `int max = temperatures[0] lösung: l15-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l15-java-laeuft-nicht +titel: Add up the points +code: java +auftrag: The array `points` holds 4, 7, 2 and 5. The program should add them all up and output **Sum: 18**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l15-java-laeuft-nicht-start.visustruct +test: - -> Sum: 18 +braucht: forSchleife +tipp: The Code area underlines the wrong word in red. How do you write the length of an array? +tipp: `length` is written all in small letters: `i < points.length` +lösung: l15-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Defuse the bomb ::: spiel bombe diff --git a/web/lessons/en/16-zweidimensionale-arrays.md b/web/lessons/en/16-zweidimensionale-arrays.md index 7d9faa59..11264a18 100644 --- a/web/lessons/en/16-zweidimensionale-arrays.md +++ b/web/lessons/en/16-zweidimensionale-arrays.md @@ -178,6 +178,21 @@ tipp: The indices are swapped: `points[1][j]` instead of `points[j][1]`. lösung: l16-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l16-java-laeuft-nicht +titel: Read the score +code: java +auftrag: In the table `points` each row is a player and each column a round. The program should output player 2’s points in round 1, so **Player 2, round 1: 4**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l16-java-laeuft-nicht-start.visustruct +test: - -> Player 2, round 1: 4 +braucht: anweisung +tipp: The cells `[1][0]` are right. Look at the name of the table. +tipp: The table is called `points` with a small p: `points[1][0]` +lösung: l16-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Which seat? ::: spiel frage diff --git a/web/lessons/en/17-zeichenketten.md b/web/lessons/en/17-zeichenketten.md index 76064edf..c6a86780 100644 --- a/web/lessons/en/17-zeichenketten.md +++ b/web/lessons/en/17-zeichenketten.md @@ -233,6 +233,21 @@ tipp: The first character has the index 0: `first.charAt(0)` and `last.charAt(0) lösung: l17-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l17-java-laeuft-nicht +titel: Count the letters +code: java +auftrag: The program should output the first letter and the length of **Ludwig**, so **L has 6 letters**. But it doesn’t run, because two methods are spelled wrong. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l17-java-laeuft-nicht-start.visustruct +test: - -> L has 6 letters +braucht: anweisung +tipp: Method names are camelCase too: they start small, and every further word starts with a capital. +tipp: Correct are `name.charAt(0)` with a capital A and `name.length()` all small. +lösung: l17-java-laeuft-nicht-loesung.visustruct +::: + ## Even more methods A String can do much more. You will often need these methods too: diff --git a/web/lessons/en/19-suchen-und-sortieren.md b/web/lessons/en/19-suchen-und-sortieren.md index df22d9be..d70e77e9 100644 --- a/web/lessons/en/19-suchen-und-sortieren.md +++ b/web/lessons/en/19-suchen-und-sortieren.md @@ -201,6 +201,21 @@ tipp: The loop should stop as soon as something has been found: `while (position lösung: l19-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l19-java-laeuft-nicht +titel: Find a card +code: java +auftrag: The cards {8, 4, 11, 4, 6} are in an array. The program searches for the 11 and should output **Position: 2**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l19-java-laeuft-nicht-start.visustruct +test: - -> Position: 2 +braucht: forSchleife, verzweigung +tipp: Compare the names in the condition with the names created above. +tipp: The card you are looking for is in `wanted` with a small w: `if (cards[i] == wanted) {` +lösung: l19-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Search pro ::: spiel frage diff --git a/web/lessons/pt/04-variablen-und-datentypen.md b/web/lessons/pt/04-variablen-und-datentypen.md index 7a9957d7..c687cf90 100644 --- a/web/lessons/pt/04-variablen-und-datentypen.md +++ b/web/lessons/pt/04-variablen-und-datentypen.md @@ -8,6 +8,7 @@ kurz: Guardar valores, conhecer os tipos de dados int, double, String e boolean, ::: kompetenzen - criar uma variável com tipo de dados, nome e valor +- explicar que o Java distingue maiúsculas de minúsculas (`numero` não é `Numero`) - distinguir os tipos de dados int, double, String e boolean - explicar que = é uma atribuição e não uma comparação - fazer contas com + - * / % e usar a divisão inteira @@ -44,6 +45,33 @@ O camelCase tem este nome porque as maiúsculas no meio saem da palavra como as As maiúsculas C e I sobressaem como as duas bossas do camelo. ::: +## Maiúsculas e minúsculas + +O Java distingue **maiúsculas de minúsculas**. Em inglês diz-se **case-sensitive**. Para o Java, `numero`, `Numero` e `NUMERO` são três nomes diferentes, ou seja, três caixas diferentes: + +``` +int numero = 4 +int Numero = 6 +``` + +Aqui há duas variáveis. Se mais tarde escreveres `NUMERO`, o Java não encontra nenhuma variável com esse nome. O programa não corre e aparece uma mensagem de erro. + +> Isto também vale para as palavras do Java: `String` e `System` escrevem-se com maiúscula, `int` e `double` com minúscula. Nos teus programas, nunca cries duas variáveis que só se distinguem por maiúsculas e minúsculas. Isso confunde-te a ti e a quem lê o teu código. + +## Exercício: Três nomes + +::: übung l04-gross-klein +titel: Três nomes +auftrag: O Ludwig criou duas variáveis: `numero` com o valor 4 e `Numero` com o valor 6. O estrutograma deve multiplicá-las e mostrar **Resultado: 24**. Mas não corre. + Abre o exercício, carrega em Verificar e lê a mensagem de erro. Corrige a instrução e carrega outra vez em Verificar. +start: l04-gross-klein-start.visustruct +test: - -> Resultado: 24 +braucht: anweisung +tipp: Quantos nomes diferentes há no estrutograma? `numero`, `Numero` e `NUMERO` são três nomes diferentes para o computador. +tipp: `NUMERO` não existe. Para 24 precisas de 4 vezes 6, ou seja, `numero` vezes `Numero`: `int resultado = numero * Numero`. Com `numero * numero` dá 16. +lösung: l04-gross-klein-loesung.visustruct +::: + ## Os quatro tipos de dados O tipo de dados diz que tipo de valor pode ser guardado na variável. @@ -243,6 +271,21 @@ tipp: Os dois operadores estão trocados: `int minutos = segundos / 60;` e `int lösung: l04-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l04-java-laeuft-nicht +titel: Corrigir a ficha +code: java +auftrag: O programa deve mostrar **Ludwig tem 7 anos.** Mas não corre, porque há duas palavras mal escritas. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l04-java-laeuft-nicht-start.visustruct +test: - -> Ludwig tem 7 anos. +braucht: anweisung +tipp: O Java distingue maiúsculas de minúsculas. Compara cada palavra da saída com o que foi criado em cima. +tipp: `System` escreve-se com S maiúsculo. A variável chama-se `idade` com i minúsculo: `System.out.println(nome + " tem " + idade + " anos.");` +lösung: l04-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Que tipo de dados? ::: spiel frage @@ -297,6 +340,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ ::: checkliste - Consigo criar uma variável com tipo de dados, nome e valor. → O que é uma variável? +- Consigo explicar que o Java distingue maiúsculas de minúsculas (`numero` não é `Numero`). → Maiúsculas e minúsculas - Consigo distinguir os tipos de dados int, double, String e boolean. → Os quatro tipos de dados - Consigo explicar que = é uma atribuição e não uma comparação. → Atribuição com = - Consigo fazer contas com + - * / % e usar a divisão inteira. → Fazer contas @@ -314,6 +358,13 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] boolean > Os números decimais são do tipo double. No VisuStruct escrevem-se com ponto. +? Quantas variáveis criam `int numero = 1`, `int Numero = 2` e `int NUMERO = 3`? +→ Maiúsculas e minúsculas +- [ ] uma +- [ ] duas +- [x] três +> O Java distingue maiúsculas de minúsculas. Os três nomes são diferentes, por isso há três variáveis. + ? Que valor tem x depois de `int x = 17 / 5`? → Fazer contas - [ ] 3.4 diff --git a/web/lessons/pt/05-sequenz.md b/web/lessons/pt/05-sequenz.md index 5f2d3f0d..af107c44 100644 --- a/web/lessons/pt/05-sequenz.md +++ b/web/lessons/pt/05-sequenz.md @@ -145,6 +145,21 @@ tipp: Troca as duas últimas linhas: primeiro `saldo = saldo - preco;`, depois a lösung: l05-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l05-java-laeuft-nicht +titel: Dividir uma piza +code: java +auftrag: Uma piza tem 8 fatias e 4 amigos dividem-na. O programa deve mostrar **Cada um recebe 2 fatias.** Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l05-java-laeuft-nicht-start.visustruct +test: - -> Cada um recebe 2 fatias. +braucht: anweisung +tipp: Compara o nome na saída, letra a letra, com o nome criado na terceira linha. +tipp: A variável chama-se `porPessoa` com P maiúsculo (camelCase). Escreve-a exatamente assim na saída. +lösung: l05-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Ordenar os blocos ::: spiel reihenfolge diff --git a/web/lessons/pt/06-eingabe-und-ausgabe.md b/web/lessons/pt/06-eingabe-und-ausgabe.md index 39e4f4ee..ec59d96c 100644 --- a/web/lessons/pt/06-eingabe-und-ausgabe.md +++ b/web/lessons/pt/06-eingabe-und-ausgabe.md @@ -273,6 +273,22 @@ tipp: Põe parênteses para o Java calcular primeiro: `System.out.println("Soma: lösung: l06-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l06-java-laeuft-nicht +titel: Idade no próximo ano +code: java +auftrag: O programa pergunta a tua idade e deve dizer quantos anos terás no próximo ano. Com 14, **No próximo ano tens 15**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l06-java-laeuft-nicht-start.visustruct +test: 14 -> No próximo ano tens 15 +test: 9 -> No próximo ano tens 10 +braucht: anweisung +tipp: A entrada fica guardada numa variável. Como se chama exatamente, e como se chama na saída? +tipp: A variável chama-se `idade` com i minúsculo: `System.out.println("No próximo ano tens " + (idade + 1));` +lösung: l06-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: O que aparece? ::: spiel frage diff --git a/web/lessons/pt/07-simulation-und-schreibtischtest.md b/web/lessons/pt/07-simulation-und-schreibtischtest.md index bf186fe6..e6aced26 100644 --- a/web/lessons/pt/07-simulation-und-schreibtischtest.md +++ b/web/lessons/pt/07-simulation-und-schreibtischtest.md @@ -209,6 +209,21 @@ tipp: O Ludwig perde 3 pontos, por isso tira-se 3 ao valor antigo: `pontos = pon lösung: l07-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l07-java-laeuft-nicht +titel: Corrigir o bónus +code: java +auftrag: O Ludwig tem 10 pontos e recebe 5 pontos de bónus. No fim deve aparecer **Pontos: 15**. Mas o código não corre. Percorre-o também com o passo a passo: em que linha para? + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l07-java-laeuft-nicht-start.visustruct +test: - -> Pontos: 15 +braucht: anweisung +tipp: O Java executa o código de cima para baixo. A variável `bonus` já existe quando é usada no cálculo? +tipp: Cria `bonus` antes do cálculo: primeiro `int bonus = 5;`, depois `pontos = pontos + bonus;` +lösung: l07-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Desativar a bomba ::: spiel bombe diff --git a/web/lessons/pt/08-verzweigung.md b/web/lessons/pt/08-verzweigung.md index 5df1bc7a..26ffe253 100644 --- a/web/lessons/pt/08-verzweigung.md +++ b/web/lessons/pt/08-verzweigung.md @@ -197,6 +197,21 @@ tipp: “Menos de 6” é `idade < 6`. `<=` significa “menor ou igual”. lösung: l08-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l08-java-laeuft-nicht +titel: Filme para maiores de 16 +code: java +auftrag: O filme é para maiores de 16. O Ludwig tem 15, por isso o programa deve mostrar **Não pode entrar**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l08-java-laeuft-nicht-start.visustruct +test: - -> Não pode entrar +braucht: verzweigung +tipp: Olha com atenção para a condição entre parênteses depois de `if`. Esta variável existe? +tipp: A variável chama-se `idade` com i minúsculo: `if (idade >= 16) {` +lösung: l08-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Que caminho? ::: spiel frage diff --git a/web/lessons/pt/09-bedingungen-verknuepfen.md b/web/lessons/pt/09-bedingungen-verknuepfen.md index 0e892007..43bf5175 100644 --- a/web/lessons/pt/09-bedingungen-verknuepfen.md +++ b/web/lessons/pt/09-bedingungen-verknuepfen.md @@ -259,6 +259,21 @@ tipp: Basta que uma das duas condições seja verdadeira: `dia == 6 || dia == 7` lösung: l09-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l09-java-laeuft-nicht +titel: Corrigir o fim de semana +code: java +auftrag: O dia 6 é sábado, o dia 7 é domingo. Hoje é o dia 7, por isso deve aparecer **sem escola**. Mas o programa não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l09-java-laeuft-nicht-start.visustruct +test: - -> sem escola +braucht: verzweigung +tipp: A condição tem duas partes. Compara o nome da variável nas duas partes. +tipp: Também na segunda parte a variável chama-se `dia` com d minúsculo: `if (dia == 6 || dia == 7) {` +lösung: l09-java-laeuft-nicht-loesung.visustruct +::: + ## Lista de verificação Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ consigo com segurança. Com ⛅ e ☂️, **Rever** ajuda-te. Depois vem o teste de conhecimentos. Mostra-te se a tua autoavaliação está certa. diff --git a/web/lessons/pt/10-fallauswahl.md b/web/lessons/pt/10-fallauswahl.md index fb835746..e3d92e45 100644 --- a/web/lessons/pt/10-fallauswahl.md +++ b/web/lessons/pt/10-fallauswahl.md @@ -184,6 +184,21 @@ tipp: No menos, a ordem conta: `a - b` em vez de `b - a`. lösung: l10-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l10-java-laeuft-nicht +titel: Corrigir a nota +code: java +auftrag: O Ludwig teve nota 2. O programa deve mostrar **bom**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l10-java-laeuft-nicht-start.visustruct +test: - -> bom +braucht: fallauswahl +tipp: Que variável verifica a seleção múltipla? Está escrita da mesma forma em cima? +tipp: Entre parênteses depois de `switch` tem de estar `nota` com n minúsculo: `switch (nota) {` +lösung: l10-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Que caso? ::: spiel frage diff --git a/web/lessons/pt/11-while-schleife.md b/web/lessons/pt/11-while-schleife.md index 59cb0f3b..e97e1b64 100644 --- a/web/lessons/pt/11-while-schleife.md +++ b/web/lessons/pt/11-while-schleife.md @@ -208,6 +208,21 @@ tipp: Só se poupa enquanto o objetivo **ainda não foi atingido**: `while (dinh lösung: l11-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l11-java-laeuft-nicht +titel: Corrigir a contagem +code: java +auftrag: A contagem decrescente deve mostrar **3**, **2**, **1** e depois **Partida!** Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l11-java-laeuft-nicht-start.visustruct +test: - -> 3 | 2 | 1 | Partida! +braucht: whileSchleife +tipp: O erro está dentro do ciclo. Que variável deve ser mostrada e como se chama de facto? +tipp: Mostra `numero` com n minúsculo: `System.out.println(numero);` +lösung: l11-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Quantas vezes? ::: spiel frage diff --git a/web/lessons/pt/12-do-while-schleife.md b/web/lessons/pt/12-do-while-schleife.md index a8d541c3..ef4d5e93 100644 --- a/web/lessons/pt/12-do-while-schleife.md +++ b/web/lessons/pt/12-do-while-schleife.md @@ -144,6 +144,21 @@ tipp: O ciclo deve continuar enquanto o número for maior do que 0: `while (nume lösung: l12-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l12-java-laeuft-nicht +titel: Corrigir a duplicação +code: java +auftrag: A partir de 1, o programa deve duplicar enquanto o número for menor do que 20: **1**, **2**, **4**, **8**, **16**. Só mostra o 1 e depois para. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l12-java-laeuft-nicht-start.visustruct +test: - -> 1 | 2 | 4 | 8 | 16 +braucht: doUntilSchleife +tipp: A primeira volta ainda corre. O erro aparece quando a condição em baixo é verificada pela primeira vez. +tipp: Na condição tem de estar `limite` com l minúsculo: `} while (numero < limite);` +lösung: l12-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Pelo menos uma vez? ::: spiel frage diff --git a/web/lessons/pt/13-for-schleife.md b/web/lessons/pt/13-for-schleife.md index 8babbf2f..41c0b6db 100644 --- a/web/lessons/pt/13-for-schleife.md +++ b/web/lessons/pt/13-for-schleife.md @@ -179,6 +179,21 @@ tipp: `i` também deve tomar o valor 10: `i <= 10` em vez de `i < 10`. lösung: l13-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l13-java-laeuft-nicht +titel: Corrigir a escada +code: java +auftrag: O Ludwig sobe 5 degraus, cada um com 20 cm. O programa deve mostrar **Altura: 100 cm**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l13-java-laeuft-nicht-start.visustruct +test: - -> Altura: 100 cm +braucht: forSchleife +tipp: A variável `altura` é usada num cálculo, mas onde é criada? E com que altura começa o Ludwig? +tipp: Cria `altura` antes do ciclo: `int altura = 0;` +lösung: l13-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Desativar a bomba ::: spiel bombe diff --git a/web/lessons/pt/14-verschachteln.md b/web/lessons/pt/14-verschachteln.md index 7ef3a6df..7d74cf91 100644 --- a/web/lessons/pt/14-verschachteln.md +++ b/web/lessons/pt/14-verschachteln.md @@ -155,6 +155,21 @@ tipp: Passa a linha `System.out.println("Quantidade: " + quantidade);` para depo lösung: l14-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l14-java-laeuft-nicht +titel: Corrigir os números pares +code: java +auftrag: O programa deve mostrar os números pares de 1 a 10: **2**, **4**, **6**, **8**, **10**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l14-java-laeuft-nicht-start.visustruct +test: - -> 2 | 4 | 6 | 8 | 10 +braucht: forSchleife, verzweigung +tipp: O erro está lá dentro, na saída. Como se chama a variável contadora do ciclo? +tipp: A variável contadora é `i` com i minúsculo: `System.out.println(i);` +lösung: l14-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Dentro e fora ::: spiel frage diff --git a/web/lessons/pt/15-arrays.md b/web/lessons/pt/15-arrays.md index 60d6f176..636369dc 100644 --- a/web/lessons/pt/15-arrays.md +++ b/web/lessons/pt/15-arrays.md @@ -210,6 +210,21 @@ tipp: `max` tem de começar com um valor do array: `int max = temperaturas[0];` lösung: l15-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l15-java-laeuft-nicht +titel: Somar os pontos +code: java +auftrag: O array `pontos` contém 4, 7, 2 e 5. O programa deve somá-los todos e mostrar **Soma: 18**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l15-java-laeuft-nicht-start.visustruct +test: - -> Soma: 18 +braucht: forSchleife +tipp: A área Código sublinha a palavra errada a vermelho. Como se escreve o comprimento de um array? +tipp: `length` escreve-se todo em minúsculas: `i < pontos.length` +lösung: l15-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Desativar a bomba ::: spiel bombe diff --git a/web/lessons/pt/16-zweidimensionale-arrays.md b/web/lessons/pt/16-zweidimensionale-arrays.md index 7688023a..ba7a73a2 100644 --- a/web/lessons/pt/16-zweidimensionale-arrays.md +++ b/web/lessons/pt/16-zweidimensionale-arrays.md @@ -178,6 +178,21 @@ tipp: Os índices estão trocados: `pontos[1][j]` em vez de `pontos[j][1]`. lösung: l16-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l16-java-laeuft-nicht +titel: Ler a pontuação +code: java +auftrag: Na tabela `pontos` cada linha é um jogador e cada coluna uma ronda. O programa deve mostrar os pontos do jogador 2 na ronda 1, ou seja, **Jogador 2, ronda 1: 4**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l16-java-laeuft-nicht-start.visustruct +test: - -> Jogador 2, ronda 1: 4 +braucht: anweisung +tipp: As posições `[1][0]` estão certas. Olha para o nome da tabela. +tipp: A tabela chama-se `pontos` com p minúsculo: `pontos[1][0]` +lösung: l16-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Que lugar? ::: spiel frage diff --git a/web/lessons/pt/17-zeichenketten.md b/web/lessons/pt/17-zeichenketten.md index 3763fcef..32742d39 100644 --- a/web/lessons/pt/17-zeichenketten.md +++ b/web/lessons/pt/17-zeichenketten.md @@ -233,6 +233,21 @@ tipp: O primeiro caráter tem o índice 0: `nome.charAt(0)` e `apelido.charAt(0) lösung: l17-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l17-java-laeuft-nicht +titel: Contar as letras +code: java +auftrag: O programa deve mostrar a primeira letra e o comprimento de **Ludwig**, ou seja, **L tem 6 letras**. Mas não corre, porque há dois métodos mal escritos. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l17-java-laeuft-nicht-start.visustruct +test: - -> L tem 6 letras +braucht: anweisung +tipp: Os nomes dos métodos também são camelCase: começam com minúscula e cada palavra seguinte começa com maiúscula. +tipp: O correto é `nome.charAt(0)` com A maiúsculo e `nome.length()` todo em minúsculas. +lösung: l17-java-laeuft-nicht-loesung.visustruct +::: + ## Ainda mais métodos Uma String sabe fazer muito mais. Também vais precisar muitas vezes destes métodos: diff --git a/web/lessons/pt/19-suchen-und-sortieren.md b/web/lessons/pt/19-suchen-und-sortieren.md index aefd4739..c735dcdd 100644 --- a/web/lessons/pt/19-suchen-und-sortieren.md +++ b/web/lessons/pt/19-suchen-und-sortieren.md @@ -201,6 +201,21 @@ tipp: O ciclo deve parar assim que encontrar algo: `while (posicao == -1 && i < lösung: l19-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l19-java-laeuft-nicht +titel: Procurar uma carta +code: java +auftrag: As cartas {8, 4, 11, 4, 6} estão num array. O programa procura o 11 e deve mostrar **Posição: 2**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l19-java-laeuft-nicht-start.visustruct +test: - -> Posição: 2 +braucht: forSchleife, verzweigung +tipp: Compara os nomes na condição com os nomes criados em cima. +tipp: A carta procurada está em `procurada` com p minúsculo: `if (cartas[i] == procurada) {` +lösung: l19-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Profissional da pesquisa ::: spiel frage diff --git a/web/src/core/javaParser.ts b/web/src/core/javaParser.ts index 9d384a60..1698a27e 100644 --- a/web/src/core/javaParser.ts +++ b/web/src/core/javaParser.ts @@ -32,6 +32,7 @@ export type JavaProblemKey = | 'web_parse_missing_import' | 'web_parse_missing_scanner' | 'web_parse_unknown_type' + | 'web_parse_wrong_case' export interface ParsedJava { /** Kopfzeile eines Unterprogramms, z. B. `int quadrat(int x)`; `undefined` = Hauptprogramm. */ @@ -282,6 +283,36 @@ class Parser { } } + /** + * Wie javac: Java unterscheidet Groß- und Kleinschreibung. `system.out.println`, `System.Out.println`, `math.sqrt` oder + * `System.out.Println` sind Fehler, ebenso `text.Length()` oder `name.charat(0)`; gemeldet wird das erste falsch + * geschriebene Wort mit der richtigen Schreibweise. + */ + checkCase() { + const classes = ['System', 'Math', 'Integer', 'Double', 'String'] + // Eine eigene Variable `string` oder `math` ist erlaubt: angelegt heißt, vor dem Namen steht ein Typ. + const declared = (name: string) => this.toks.some((t, k) => t.text === name && this.toks[k - 1]?.kind === 'id' && !statementKeywords.has(this.toks[k - 1].text)) + const prints = ['println', 'print', 'printf'] + const members = ['length', 'charAt', 'substring', 'indexOf', 'equals', 'equalsIgnoreCase', 'compareTo', 'contains', 'startsWith', 'endsWith', + 'toUpperCase', 'toLowerCase', 'trim', 'isEmpty', 'split', 'replace', 'sqrt', 'pow', 'abs', 'max', 'min', 'random', 'round', + 'parseInt', 'parseDouble', 'nextInt', 'nextDouble', 'nextLine', 'next', 'hasNext', 'hasNextInt', 'hasNextLine'] + const fix = (word: string, list: string[]) => list.find((w) => w !== word && w.toLowerCase() === word.toLowerCase()) + for (let k = 0; k < this.toks.length; k++) { + const t = this.toks[k] + if (t.kind !== 'id') continue + const before = this.toks[k - 1]?.text + const after = this.toks[k + 1]?.text + let right: string | undefined + if (after === '.' && before !== '.' && !declared(t.text)) right = fix(t.text, classes) + else if (before === '.' && after === '.' && this.toks[k - 2]?.text.toLowerCase() === 'system') right = fix(t.text, ['out', 'err']) + else if (before === '.' && after === '(' && ['out', 'err'].includes(this.toks[k - 2]?.text.toLowerCase() ?? '')) right = fix(t.text, prints) + else if (before === '.') right = fix(t.text, members) + if (!right) continue + this.problem('web_parse_wrong_case', t, right) + return + } + } + parseProgram(): { caption?: string; elements: VSElement[] } { const elements: Built[] = [] let caption: string | undefined @@ -856,6 +887,7 @@ export function parseLiveJava(source: string, labels: LiveLabels, opts: JavaPars p.checkImports() p.checkScanners() p.checkTypes() + p.checkCase() const spans = p.spansFor(elements) const problems = p.problems.sort((a, b) => a.from - b.from) return { caption, className: p.className, elements, spans, placeholders: p.placeholders.sort((a, b) => a.from - b.from), problems } diff --git a/web/src/core/simulation.ts b/web/src/core/simulation.ts index 80a44398..5c2e7177 100644 --- a/web/src/core/simulation.ts +++ b/web/src/core/simulation.ts @@ -75,7 +75,8 @@ export type SimNotice = | { kind: 'infiniteLoopWithoutBody' } | { kind: 'unsupportedStatement'; text: string } | { kind: 'invalidExpression'; text: string } - | { kind: 'unknownVariable'; text: string } + /** `similar`: gleicher Name in anderer Groß- und Kleinschreibung (`Zahl` statt `zahl`). */ + | { kind: 'unknownVariable'; text: string; similar?: string } | { kind: 'divisionByZero' } | { kind: 'wholeNumberExpected' } | { kind: 'numberExpected' } @@ -120,7 +121,7 @@ export function noticeEnglish(n: SimNotice): string { case 'infiniteLoopWithoutBody': return 'Infinite loop has no body.' case 'unsupportedStatement': return `Unsupported statement: ${n.text}` case 'invalidExpression': return `Invalid expression: ${n.text}` - case 'unknownVariable': return `Unknown variable: ${n.text}` + case 'unknownVariable': return n.similar ? `Unknown variable: ${n.text}. Java is case-sensitive: did you mean ${n.similar}?` : `Unknown variable: ${n.text}` case 'divisionByZero': return 'Division by zero.' case 'wholeNumberExpected': return 'Please enter a whole number.' case 'numberExpected': return 'Please enter a number.' @@ -142,7 +143,7 @@ export function noticeGerman(n: SimNotice): string { case 'infiniteLoopWithoutBody': return 'Die Endlosschleife hat keinen Rumpf.' case 'unsupportedStatement': return `Nicht unterstützte Anweisung: ${n.text}` case 'invalidExpression': return `Ungültiger Ausdruck: ${n.text}` - case 'unknownVariable': return `Unbekannte Variable: ${n.text}` + case 'unknownVariable': return n.similar ? `Unbekannte Variable: ${n.text}. Java unterscheidet Groß- und Kleinschreibung: Meintest du ${n.similar}?` : `Unbekannte Variable: ${n.text}` case 'divisionByZero': return 'Division durch null.' case 'wholeNumberExpected': return 'Bitte eine ganze Zahl eingeben.' case 'numberExpected': return 'Bitte eine Zahl eingeben.' @@ -166,7 +167,11 @@ class SimulationError extends Error { const unsupported = (text: string) => new SimulationError({ kind: 'unsupportedStatement', text }) const invalid = (text: string) => new SimulationError({ kind: 'invalidExpression', text }) -const unknownVar = (text: string) => new SimulationError({ kind: 'unknownVariable', text }) +/** Unbekannte Variable; gibt es sie in anderer Groß- und Kleinschreibung, nennt der Hinweis sie. */ +const unknownVar = (text: string, variables?: Map) => { + const similar = variables && [...variables.keys()].find((k) => k !== text && k.toLowerCase() === text.toLowerCase()) + return new SimulationError(similar ? { kind: 'unknownVariable', text, similar } : { kind: 'unknownVariable', text }) +} const divByZero = () => new SimulationError({ kind: 'divisionByZero' }) /** Textdateien, die Java mit `Files.readString(Path.of("name"))` liest, z. B. aus einer Lektion. */ @@ -680,7 +685,7 @@ class NumericParser { return { v: Math.random(), int: false } } const value = this.variables.get(name) - if (!value) throw unknownVar(name) + if (!value) throw unknownVar(name, this.variables) if (this.kind() === '.') { this.index += 1 if (!this.isIdent('length')) throw invalid(name) @@ -1291,7 +1296,7 @@ export class SimulationEngine { } const value = this.state.variables.get(arg) if (!value) { - if (/^[A-Za-z_]\w*$/u.test(arg)) throw new SimulationError({ kind: 'unknownVariable', text: arg }) + if (/^[A-Za-z_]\w*$/u.test(arg)) throw unknownVar(arg, this.state.variables) throw invalid(arg) } const matches = @@ -2011,7 +2016,7 @@ export class SimulationEngine { private valueInArray(name: string, indices: number[]): SimValue { const value = this.state.variables.get(name) - if (!value) throw unknownVar(name) + if (!value) throw unknownVar(name, this.state.variables) const at = `${name}[${indices.join('][')}]` if (value.kind === 'grid') { if (indices.length !== 2) throw invalid(at) @@ -2039,7 +2044,7 @@ export class SimulationEngine { const access = parseArrayElementAccess(trimmed) if (access) { const value = this.state.variables.get(access.arrayName) - if (!value) throw unknownVar(access.arrayName) + if (!value) throw unknownVar(access.arrayName, this.state.variables) if (value.kind === 'intArray') return 'int' if (value.kind === 'doubleArray') return 'double' if (value.kind === 'stringArray') return 'string' @@ -2059,7 +2064,7 @@ export class SimulationEngine { } const indices = access.indexExpressions.map((e) => this.arrayIndex(e)) const old = this.state.variables.get(access.arrayName) - if (!old) throw unknownVar(access.arrayName) + if (!old) throw unknownVar(access.arrayName, this.state.variables) if (old.kind === 'grid') { if (indices.length !== 2 || indices[0] >= old.value.length || indices[1] >= old.value[indices[0]].length) throw invalid(trimmed) const raw = old.elementType === 'double' && value.kind === 'int' ? value.value : value.kind === old.elementType ? value.value : undefined @@ -2285,7 +2290,7 @@ export class SimulationEngine { if (token.t === 'number') return token.literal if (token.t === 'identifier') { const value = this.state.variables.get(token.name) - if (!value) throw unknownVar(token.name) + if (!value) throw unknownVar(token.name, this.state.variables) return describeValue(value) } return token.t diff --git a/web/src/i18n/ar.strings b/web/src/i18n/ar.strings index 37ab8096..aaf0bb6b 100644 --- a/web/src/i18n/ar.strings +++ b/web/src/i18n/ar.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "لا يوجد ملف باسم %@."; "web_sim_end_of_file_fmt" = "لا يوجد سطر آخر في الملف %@."; "web_sim_null_value_fmt" = "القيمة في %@ هي null."; +"web_sim_unknown_variable_case_fmt" = "متغير غير معروف: %1$@. تميّز Java بين الأحرف الكبيرة والصغيرة: هل تقصد %2$@؟"; "web_sim_written_file_fmt" = "%@ (محفوظ)"; "web_site_home" = "الصفحة الرئيسية"; "web_site_imprint" = "بيانات الناشر"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "لا تعرف Java نوع البيانات هذا. هل تقصد %@؟"; "web_quickfix_insert_fmt" = "اقتراح: إدراج %@"; "web_quickfix_replace_fmt" = "اقتراح: %1$@ بدلاً من %2$@"; +"web_parse_wrong_case" = "تميّز Java بين الأحرف الكبيرة والصغيرة. الصحيح هو %@."; "web_editor_title" = "المخطط"; "web_editor_show" = "إظهار المخطط"; "web_editor_hide" = "إخفاء المخطط"; diff --git a/web/src/i18n/da.strings b/web/src/i18n/da.strings index 47eeea3b..7965d62f 100644 --- a/web/src/i18n/da.strings +++ b/web/src/i18n/da.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "Der findes ingen fil med navnet %@."; "web_sim_end_of_file_fmt" = "Filen %@ har ikke flere linjer."; "web_sim_null_value_fmt" = "%@ er null."; +"web_sim_unknown_variable_case_fmt" = "Ukendt variabel: %1$@. Java skelner mellem store og små bogstaver: mente du %2$@?"; "web_sim_written_file_fmt" = "%@ (gemt)"; "web_site_home" = "Forside"; "web_site_imprint" = "Kolofon"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java kender ikke denne datatype. Mente du %@?"; "web_quickfix_insert_fmt" = "Forslag: indsæt %@"; "web_quickfix_replace_fmt" = "Forslag: %1$@ i stedet for %2$@"; +"web_parse_wrong_case" = "Java skelner mellem store og små bogstaver. Det rigtige er %@."; "web_editor_title" = "Strukturdiagram"; "web_editor_show" = "Vis strukturdiagram"; "web_editor_hide" = "Skjul strukturdiagram"; diff --git a/web/src/i18n/de.strings b/web/src/i18n/de.strings index 0d564a80..2503f375 100644 --- a/web/src/i18n/de.strings +++ b/web/src/i18n/de.strings @@ -136,6 +136,7 @@ "web_sim_file_not_found_fmt" = "Es gibt keine Datei %@."; "web_sim_end_of_file_fmt" = "Die Datei %@ hat keine Zeile mehr."; "web_sim_null_value_fmt" = "%@ ist null."; +"web_sim_unknown_variable_case_fmt" = "Unbekannte Variable: %1$@. Java unterscheidet Groß- und Kleinschreibung: Meintest du %2$@?"; "web_sim_written_file_fmt" = "%@ (gespeichert)"; "web_site_home" = "Startseite"; "web_site_imprint" = "Impressum"; @@ -183,6 +184,7 @@ "web_parse_unknown_type" = "Diesen Datentyp kennt Java nicht. Meintest du %@?"; "web_quickfix_insert_fmt" = "Vorschlag: %@ einfügen"; "web_quickfix_replace_fmt" = "Vorschlag: %1$@ statt %2$@"; +"web_parse_wrong_case" = "Java unterscheidet Groß- und Kleinschreibung. Richtig ist %@."; "web_editor_title" = "Struktogramm"; "web_editor_show" = "Struktogramm aufklappen"; "web_editor_hide" = "Struktogramm einklappen"; diff --git a/web/src/i18n/el.strings b/web/src/i18n/el.strings index afb7d0cf..59252792 100644 --- a/web/src/i18n/el.strings +++ b/web/src/i18n/el.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "Δεν υπάρχει αρχείο με όνομα %@."; "web_sim_end_of_file_fmt" = "Το αρχείο %@ δεν έχει άλλες γραμμές."; "web_sim_null_value_fmt" = "Το %@ είναι null."; +"web_sim_unknown_variable_case_fmt" = "Άγνωστη μεταβλητή: %1$@. Η Java ξεχωρίζει κεφαλαία και πεζά: μήπως εννοούσες %2$@;"; "web_sim_written_file_fmt" = "%@ (αποθηκεύτηκε)"; "web_site_home" = "Αρχική σελίδα"; "web_site_imprint" = "Στοιχεία εκδότη"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Η Java δεν γνωρίζει αυτόν τον τύπο δεδομένων. Μήπως εννοείς %@;"; "web_quickfix_insert_fmt" = "Πρόταση: εισαγωγή %@"; "web_quickfix_replace_fmt" = "Πρόταση: %1$@ αντί για %2$@"; +"web_parse_wrong_case" = "Η Java ξεχωρίζει κεφαλαία και πεζά. Το σωστό είναι %@."; "web_editor_title" = "Διάγραμμα"; "web_editor_show" = "Εμφάνιση διαγράμματος"; "web_editor_hide" = "Απόκρυψη διαγράμματος"; diff --git a/web/src/i18n/en.strings b/web/src/i18n/en.strings index a1f93efa..6aceef45 100644 --- a/web/src/i18n/en.strings +++ b/web/src/i18n/en.strings @@ -136,6 +136,7 @@ "web_sim_file_not_found_fmt" = "There is no file called %@."; "web_sim_end_of_file_fmt" = "The file %@ has no more lines."; "web_sim_null_value_fmt" = "%@ is null."; +"web_sim_unknown_variable_case_fmt" = "Unknown variable: %1$@. Java is case-sensitive: did you mean %2$@?"; "web_sim_written_file_fmt" = "%@ (saved)"; "web_site_home" = "Home page"; "web_site_imprint" = "Imprint"; @@ -183,6 +184,7 @@ "web_parse_unknown_type" = "Java doesn’t know this data type. Did you mean %@?"; "web_quickfix_insert_fmt" = "Suggestion: insert %@"; "web_quickfix_replace_fmt" = "Suggestion: %1$@ instead of %2$@"; +"web_parse_wrong_case" = "Java is case-sensitive. The right spelling is %@."; "web_editor_title" = "Diagram"; "web_editor_show" = "Show diagram"; "web_editor_hide" = "Hide diagram"; diff --git a/web/src/i18n/es.strings b/web/src/i18n/es.strings index b11834fd..0cb933a2 100644 --- a/web/src/i18n/es.strings +++ b/web/src/i18n/es.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "No existe ningún archivo llamado %@."; "web_sim_end_of_file_fmt" = "El archivo %@ no tiene más líneas."; "web_sim_null_value_fmt" = "%@ es null."; +"web_sim_unknown_variable_case_fmt" = "Variable desconocida: %1$@. Java distingue entre mayúsculas y minúsculas: ¿querías decir %2$@?"; "web_sim_written_file_fmt" = "%@ (guardado)"; "web_site_home" = "Página de inicio"; "web_site_imprint" = "Aviso legal"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java no conoce este tipo de datos. ¿Querías decir %@?"; "web_quickfix_insert_fmt" = "Sugerencia: insertar %@"; "web_quickfix_replace_fmt" = "Sugerencia: %1$@ en lugar de %2$@"; +"web_parse_wrong_case" = "Java distingue entre mayúsculas y minúsculas. Lo correcto es %@."; "web_editor_title" = "Diagrama"; "web_editor_show" = "Mostrar diagrama"; "web_editor_hide" = "Ocultar diagrama"; diff --git a/web/src/i18n/fr.strings b/web/src/i18n/fr.strings index 3316c69f..1899a87d 100644 --- a/web/src/i18n/fr.strings +++ b/web/src/i18n/fr.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "Il n’existe aucun fichier nommé %@."; "web_sim_end_of_file_fmt" = "Le fichier %@ n’a plus de ligne."; "web_sim_null_value_fmt" = "%@ vaut null."; +"web_sim_unknown_variable_case_fmt" = "Variable inconnue : %1$@. Java distingue majuscules et minuscules : vouliez-vous dire %2$@ ?"; "web_sim_written_file_fmt" = "%@ (enregistré)"; "web_site_home" = "Accueil"; "web_site_imprint" = "Mentions légales"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java ne connaît pas ce type de données. Vouliez-vous dire %@ ?"; "web_quickfix_insert_fmt" = "Suggestion : insérer %@"; "web_quickfix_replace_fmt" = "Suggestion : %1$@ au lieu de %2$@"; +"web_parse_wrong_case" = "Java distingue majuscules et minuscules. La bonne écriture est %@."; "web_editor_title" = "Diagramme"; "web_editor_show" = "Afficher le diagramme"; "web_editor_hide" = "Masquer le diagramme"; diff --git a/web/src/i18n/he.strings b/web/src/i18n/he.strings index 05b9f6e3..061a6fff 100644 --- a/web/src/i18n/he.strings +++ b/web/src/i18n/he.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "אין קובץ בשם %@."; "web_sim_end_of_file_fmt" = "בקובץ %@ אין עוד שורות."; "web_sim_null_value_fmt" = "%@ הוא null."; +"web_sim_unknown_variable_case_fmt" = "משתנה לא מוכר: %1$@. Java מבחינה בין אותיות גדולות לקטנות: האם התכוונת ל־%2$@?"; "web_sim_written_file_fmt" = "%@ (נשמר)"; "web_site_home" = "דף הבית"; "web_site_imprint" = "פרטי המפרסם"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java לא מכירה את סוג הנתונים הזה. האם התכוונת ל-%@?"; "web_quickfix_insert_fmt" = "הצעה: להוסיף %@"; "web_quickfix_replace_fmt" = "הצעה: %1$@ במקום %2$@"; +"web_parse_wrong_case" = "Java מבחינה בין אותיות גדולות לקטנות. הנכון הוא %@."; "web_editor_title" = "תרשים"; "web_editor_show" = "הצגת התרשים"; "web_editor_hide" = "הסתרת התרשים"; diff --git a/web/src/i18n/it.strings b/web/src/i18n/it.strings index 92898e5a..570b6d94 100644 --- a/web/src/i18n/it.strings +++ b/web/src/i18n/it.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "Non esiste nessun file chiamato %@."; "web_sim_end_of_file_fmt" = "Il file %@ non ha più righe."; "web_sim_null_value_fmt" = "%@ è null."; +"web_sim_unknown_variable_case_fmt" = "Variabile sconosciuta: %1$@. Java distingue tra maiuscole e minuscole: intendevi %2$@?"; "web_sim_written_file_fmt" = "%@ (salvato)"; "web_site_home" = "Pagina iniziale"; "web_site_imprint" = "Note legali"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java non conosce questo tipo di dato. Intendevi %@?"; "web_quickfix_insert_fmt" = "Suggerimento: inserisci %@"; "web_quickfix_replace_fmt" = "Suggerimento: %1$@ invece di %2$@"; +"web_parse_wrong_case" = "Java distingue tra maiuscole e minuscole. La forma corretta è %@."; "web_editor_title" = "Diagramma"; "web_editor_show" = "Mostra diagramma"; "web_editor_hide" = "Nascondi diagramma"; diff --git a/web/src/i18n/ja.strings b/web/src/i18n/ja.strings index 3acaf503..a29a9eab 100644 --- a/web/src/i18n/ja.strings +++ b/web/src/i18n/ja.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "%@ という名前のファイルはありません。"; "web_sim_end_of_file_fmt" = "ファイル %@ にはもう行がありません。"; "web_sim_null_value_fmt" = "%@ は null です。"; +"web_sim_unknown_variable_case_fmt" = "不明な変数: %1$@。Java は大文字と小文字を区別します。%2$@ のことですか?"; "web_sim_written_file_fmt" = "%@(保存済み)"; "web_site_home" = "ホームページ"; "web_site_imprint" = "運営者情報"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java はこのデータ型を知りません。%@ のことですか?"; "web_quickfix_insert_fmt" = "提案: %@ を挿入"; "web_quickfix_replace_fmt" = "提案: %2$@ の代わりに %1$@"; +"web_parse_wrong_case" = "Java は大文字と小文字を区別します。正しくは %@ です。"; "web_editor_title" = "構造図"; "web_editor_show" = "構造図を表示"; "web_editor_hide" = "構造図を隠す"; diff --git a/web/src/i18n/ko.strings b/web/src/i18n/ko.strings index 4523250c..4903c6cb 100644 --- a/web/src/i18n/ko.strings +++ b/web/src/i18n/ko.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "%@(이)라는 파일이 없습니다."; "web_sim_end_of_file_fmt" = "파일 %@에 더 이상 줄이 없습니다."; "web_sim_null_value_fmt" = "%@은(는) null입니다."; +"web_sim_unknown_variable_case_fmt" = "알 수 없는 변수: %1$@. Java는 대문자와 소문자를 구분합니다. %2$@을(를) 뜻했나요?"; "web_sim_written_file_fmt" = "%@ (저장됨)"; "web_site_home" = "홈페이지"; "web_site_imprint" = "사이트 정보"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java는 이 데이터 형식을 알지 못합니다. %@을(를) 의미했나요?"; "web_quickfix_insert_fmt" = "제안: %@ 삽입"; "web_quickfix_replace_fmt" = "제안: %2$@ 대신 %1$@"; +"web_parse_wrong_case" = "Java는 대문자와 소문자를 구분합니다. 올바른 표기는 %@입니다."; "web_editor_title" = "구조도"; "web_editor_show" = "구조도 표시"; "web_editor_hide" = "구조도 숨기기"; diff --git a/web/src/i18n/nb.strings b/web/src/i18n/nb.strings index d2eb267a..bb9d7682 100644 --- a/web/src/i18n/nb.strings +++ b/web/src/i18n/nb.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "Det finnes ingen fil som heter %@."; "web_sim_end_of_file_fmt" = "Filen %@ har ikke flere linjer."; "web_sim_null_value_fmt" = "%@ er null."; +"web_sim_unknown_variable_case_fmt" = "Ukjent variabel: %1$@. Java skiller mellom store og små bokstaver: mente du %2$@?"; "web_sim_written_file_fmt" = "%@ (lagret)"; "web_site_home" = "Forside"; "web_site_imprint" = "Kolofon"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java kjenner ikke denne datatypen. Mente du %@?"; "web_quickfix_insert_fmt" = "Forslag: sett inn %@"; "web_quickfix_replace_fmt" = "Forslag: %1$@ i stedet for %2$@"; +"web_parse_wrong_case" = "Java skiller mellom store og små bokstaver. Riktig er %@."; "web_editor_title" = "Strukturdiagram"; "web_editor_show" = "Vis strukturdiagram"; "web_editor_hide" = "Skjul strukturdiagram"; diff --git a/web/src/i18n/nl.strings b/web/src/i18n/nl.strings index f33d5aed..d2461be9 100644 --- a/web/src/i18n/nl.strings +++ b/web/src/i18n/nl.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "Er is geen bestand met de naam %@."; "web_sim_end_of_file_fmt" = "Het bestand %@ heeft geen regels meer."; "web_sim_null_value_fmt" = "%@ is null."; +"web_sim_unknown_variable_case_fmt" = "Onbekende variabele: %1$@. Java is hoofdlettergevoelig: bedoelde je %2$@?"; "web_sim_written_file_fmt" = "%@ (opgeslagen)"; "web_site_home" = "Startpagina"; "web_site_imprint" = "Colofon"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java kent dit gegevenstype niet. Bedoelde je %@?"; "web_quickfix_insert_fmt" = "Suggestie: %@ invoegen"; "web_quickfix_replace_fmt" = "Suggestie: %1$@ in plaats van %2$@"; +"web_parse_wrong_case" = "Java is hoofdlettergevoelig. Juist is %@."; "web_editor_title" = "Diagram"; "web_editor_show" = "Diagram tonen"; "web_editor_hide" = "Diagram verbergen"; diff --git a/web/src/i18n/pl.strings b/web/src/i18n/pl.strings index 3a9bfba6..53a09fa0 100644 --- a/web/src/i18n/pl.strings +++ b/web/src/i18n/pl.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "Nie ma pliku o nazwie %@."; "web_sim_end_of_file_fmt" = "Plik %@ nie ma już więcej wierszy."; "web_sim_null_value_fmt" = "%@ ma wartość null."; +"web_sim_unknown_variable_case_fmt" = "Nieznana zmienna: %1$@. Java rozróżnia wielkość liter: czy chodziło o %2$@?"; "web_sim_written_file_fmt" = "%@ (zapisano)"; "web_site_home" = "Strona główna"; "web_site_imprint" = "Nota prawna"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java nie zna tego typu danych. Czy chodziło ci o %@?"; "web_quickfix_insert_fmt" = "Propozycja: wstaw %@"; "web_quickfix_replace_fmt" = "Propozycja: %1$@ zamiast %2$@"; +"web_parse_wrong_case" = "Java rozróżnia wielkość liter. Poprawnie: %@."; "web_editor_title" = "Diagram"; "web_editor_show" = "Pokaż diagram"; "web_editor_hide" = "Ukryj diagram"; diff --git a/web/src/i18n/pt-PT.strings b/web/src/i18n/pt-PT.strings index 9408c91d..c9b1e063 100644 --- a/web/src/i18n/pt-PT.strings +++ b/web/src/i18n/pt-PT.strings @@ -134,6 +134,7 @@ "web_sim_file_not_found_fmt" = "Não existe nenhum ficheiro chamado %@."; "web_sim_end_of_file_fmt" = "O ficheiro %@ não tem mais linhas."; "web_sim_null_value_fmt" = "%@ é null."; +"web_sim_unknown_variable_case_fmt" = "Variável desconhecida: %1$@. O Java distingue maiúsculas de minúsculas: querias dizer %2$@?"; "web_sim_written_file_fmt" = "%@ (guardado)"; "web_site_home" = "Página inicial"; "web_site_imprint" = "Contacto"; @@ -181,6 +182,7 @@ "web_parse_unknown_type" = "O Java não conhece este tipo de dados. Querias dizer %@?"; "web_quickfix_insert_fmt" = "Sugestão: inserir %@"; "web_quickfix_replace_fmt" = "Sugestão: %1$@ em vez de %2$@"; +"web_parse_wrong_case" = "O Java distingue maiúsculas de minúsculas. O correto é %@."; "web_editor_title" = "Diagrama"; "web_editor_show" = "Mostrar diagrama"; "web_editor_hide" = "Ocultar diagrama"; diff --git a/web/src/i18n/ru.strings b/web/src/i18n/ru.strings index 2fbb4a90..bccea8eb 100644 --- a/web/src/i18n/ru.strings +++ b/web/src/i18n/ru.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "Файла с именем %@ нет."; "web_sim_end_of_file_fmt" = "В файле %@ больше нет строк."; "web_sim_null_value_fmt" = "%@ равно null."; +"web_sim_unknown_variable_case_fmt" = "Неизвестная переменная: %1$@. Java различает заглавные и строчные буквы: может быть, %2$@?"; "web_sim_written_file_fmt" = "%@ (сохранён)"; "web_site_home" = "Главная страница"; "web_site_imprint" = "Выходные данные"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java не знает такого типа данных. Может быть, %@?"; "web_quickfix_insert_fmt" = "Предложение: вставить %@"; "web_quickfix_replace_fmt" = "Предложение: %1$@ вместо %2$@"; +"web_parse_wrong_case" = "Java различает заглавные и строчные буквы. Правильно: %@."; "web_editor_title" = "Диаграмма"; "web_editor_show" = "Показать диаграмму"; "web_editor_hide" = "Скрыть диаграмму"; diff --git a/web/src/i18n/sv.strings b/web/src/i18n/sv.strings index 70c61aed..953b3399 100644 --- a/web/src/i18n/sv.strings +++ b/web/src/i18n/sv.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "Det finns ingen fil som heter %@."; "web_sim_end_of_file_fmt" = "Filen %@ har inga fler rader."; "web_sim_null_value_fmt" = "%@ är null."; +"web_sim_unknown_variable_case_fmt" = "Okänd variabel: %1$@. Java skiljer på stora och små bokstäver: menade du %2$@?"; "web_sim_written_file_fmt" = "%@ (sparad)"; "web_site_home" = "Startsida"; "web_site_imprint" = "Kontaktuppgifter"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java känner inte till den här datatypen. Menade du %@?"; "web_quickfix_insert_fmt" = "Förslag: infoga %@"; "web_quickfix_replace_fmt" = "Förslag: %1$@ i stället för %2$@"; +"web_parse_wrong_case" = "Java skiljer på stora och små bokstäver. Rätt är %@."; "web_editor_title" = "Strukturdiagram"; "web_editor_show" = "Visa strukturdiagram"; "web_editor_hide" = "Dölj strukturdiagram"; diff --git a/web/src/i18n/tr.strings b/web/src/i18n/tr.strings index 90d9573c..95fba28d 100644 --- a/web/src/i18n/tr.strings +++ b/web/src/i18n/tr.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "%@ adında bir dosya yok."; "web_sim_end_of_file_fmt" = "%@ dosyasında başka satır yok."; "web_sim_null_value_fmt" = "%@ null."; +"web_sim_unknown_variable_case_fmt" = "Bilinmeyen değişken: %1$@. Java büyük ve küçük harfleri ayırt eder: %2$@ mı demek istedin?"; "web_sim_written_file_fmt" = "%@ (kaydedildi)"; "web_site_home" = "Ana sayfa"; "web_site_imprint" = "Künye"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java bu veri türünü tanımıyor. %@ mı demek istedin?"; "web_quickfix_insert_fmt" = "Öneri: %@ ekle"; "web_quickfix_replace_fmt" = "Öneri: %2$@ yerine %1$@"; +"web_parse_wrong_case" = "Java büyük ve küçük harfleri ayırt eder. Doğrusu %@."; "web_editor_title" = "Diyagram"; "web_editor_show" = "Diyagramı göster"; "web_editor_hide" = "Diyagramı gizle"; diff --git a/web/src/i18n/uk.strings b/web/src/i18n/uk.strings index 3bf04f09..6ecc7efc 100644 --- a/web/src/i18n/uk.strings +++ b/web/src/i18n/uk.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "Файлу з назвою %@ немає."; "web_sim_end_of_file_fmt" = "У файлі %@ більше немає рядків."; "web_sim_null_value_fmt" = "%@ дорівнює null."; +"web_sim_unknown_variable_case_fmt" = "Невідома змінна: %1$@. Java розрізняє великі й малі літери: можливо, %2$@?"; "web_sim_written_file_fmt" = "%@ (збережено)"; "web_site_home" = "Головна сторінка"; "web_site_imprint" = "Вихідні дані"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java не знає такого типу даних. Можливо, %@?"; "web_quickfix_insert_fmt" = "Пропозиція: вставити %@"; "web_quickfix_replace_fmt" = "Пропозиція: %1$@ замість %2$@"; +"web_parse_wrong_case" = "Java розрізняє великі й малі літери. Правильно: %@."; "web_editor_title" = "Діаграма"; "web_editor_show" = "Показати діаграму"; "web_editor_hide" = "Сховати діаграму"; diff --git a/web/src/i18n/zh-Hans.strings b/web/src/i18n/zh-Hans.strings index ca828143..faa403b7 100644 --- a/web/src/i18n/zh-Hans.strings +++ b/web/src/i18n/zh-Hans.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "没有名为 %@ 的文件。"; "web_sim_end_of_file_fmt" = "文件 %@ 没有更多行了。"; "web_sim_null_value_fmt" = "%@ 是 null。"; +"web_sim_unknown_variable_case_fmt" = "未知变量:%1$@。Java 区分大小写:你是指 %2$@ 吗?"; "web_sim_written_file_fmt" = "%@(已保存)"; "web_site_home" = "主页"; "web_site_imprint" = "版权信息"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java 不认识这个数据类型。你是想写 %@ 吗?"; "web_quickfix_insert_fmt" = "建议:插入 %@"; "web_quickfix_replace_fmt" = "建议:用 %1$@ 代替 %2$@"; +"web_parse_wrong_case" = "Java 区分大小写。正确写法是 %@。"; "web_editor_title" = "结构图"; "web_editor_show" = "显示结构图"; "web_editor_hide" = "隐藏结构图"; diff --git a/web/src/i18n/zh-Hant.strings b/web/src/i18n/zh-Hant.strings index 56946b63..3dacbcfa 100644 --- a/web/src/i18n/zh-Hant.strings +++ b/web/src/i18n/zh-Hant.strings @@ -49,6 +49,7 @@ "web_sim_file_not_found_fmt" = "沒有名為 %@ 的檔案。"; "web_sim_end_of_file_fmt" = "檔案 %@ 沒有更多行了。"; "web_sim_null_value_fmt" = "%@ 是 null。"; +"web_sim_unknown_variable_case_fmt" = "未知變數:%1$@。Java 區分大小寫:你是指 %2$@ 嗎?"; "web_sim_written_file_fmt" = "%@(已儲存)"; "web_site_home" = "首頁"; "web_site_imprint" = "版權資訊"; @@ -96,6 +97,7 @@ "web_parse_unknown_type" = "Java 不認識這個資料型別。你是想寫 %@ 嗎?"; "web_quickfix_insert_fmt" = "建議:插入 %@"; "web_quickfix_replace_fmt" = "建議:用 %1$@ 代替 %2$@"; +"web_parse_wrong_case" = "Java 區分大小寫。正確寫法是 %@。"; "web_editor_title" = "結構圖"; "web_editor_show" = "顯示結構圖"; "web_editor_hide" = "隱藏結構圖"; diff --git a/web/src/ui/simulationPanel.ts b/web/src/ui/simulationPanel.ts index c8b40f80..5a490f20 100644 --- a/web/src/ui/simulationPanel.ts +++ b/web/src/ui/simulationPanel.ts @@ -21,7 +21,7 @@ export function noticeText(n: SimNotice): string { case 'infiniteLoopWithoutBody': return t('sim_notice_infinite_loop_empty') case 'unsupportedStatement': return t('sim_notice_unsupported_statement_fmt', n.text) case 'invalidExpression': return t('sim_notice_invalid_expression_fmt', n.text) - case 'unknownVariable': return t('sim_notice_unknown_variable_fmt', n.text) + case 'unknownVariable': return n.similar ? t('web_sim_unknown_variable_case_fmt', n.text, n.similar) : t('sim_notice_unknown_variable_fmt', n.text) case 'divisionByZero': return t('sim_notice_division_by_zero') case 'wholeNumberExpected': return t('sim_notice_whole_number_expected') case 'numberExpected': return t('sim_notice_number_expected') diff --git a/web/test/javaParser.test.ts b/web/test/javaParser.test.ts index 32c42f32..19ed5334 100644 --- a/web/test/javaParser.test.ts +++ b/web/test/javaParser.test.ts @@ -58,7 +58,8 @@ describe('Java tippen → Struktogramm', () => { const code = plainLiveJava(original, labels) const parsed = parse(code) // Fehlendes `;` erzeugt der Generator selbst bei Pseudocode wie „Switch on the kettle“. - expect(parsed.problems.filter((p) => p.arg !== ';'), file).toEqual([]) + // Übungen „Warum läuft das nicht?“ starten absichtlich mit falscher Schreibweise (`system.out`, `.Length`). + if (!file.endsWith('-laeuft-nicht-start.visustruct')) expect(parsed.problems.filter((p) => p.arg !== ';'), file).toEqual([]) } }) @@ -351,3 +352,25 @@ describe('boolean und vertippte Datentypen', () => { expect(engine.state.outputLines).toEqual(['false', 'ja true', 'false', 'true', 'klein: false', '0']) }) }) + +describe('Groß- und Kleinschreibung', () => { + const wrongCase = (src: string) => parse(src).problems.find((p) => p.key === 'web_parse_wrong_case')?.arg + it('meldet falsch geschriebene Java-Wörter mit der richtigen Schreibweise', () => { + expect(wrongCase('system.out.println(1);')).toBe('System') + expect(wrongCase('System.Out.println(1);')).toBe('out') + expect(wrongCase('System.out.Println(1);')).toBe('println') + expect(wrongCase('double w = math.sqrt(4);')).toBe('Math') + expect(wrongCase('int[] a = {1};\nint n = a.Length;')).toBe('length') + expect(wrongCase('String s = "a";\nchar c = s.charat(0);')).toBe('charAt') + }) + it('lässt richtige Schreibweise und eigene Variablen in Ruhe', () => { + for (const src of ['System.out.println(1);', 'String string = "a";\nint n = string.length();', 'int zahl = 1;\nint Zahl = 2;\nSystem.out.println(zahl + Zahl);']) + expect(wrongCase(src)).toBeUndefined() + }) + it('die Simulation nennt bei einer unbekannten Variable den Namen in anderer Schreibweise', () => { + const engine = new SimulationEngine(doc('int zahl = 4;\nSystem.out.println(Zahl);')) + let steps = 0 + while (engine.canStep && steps++ < 100) engine.step() + expect(engine.state.notice).toEqual({ kind: 'unknownVariable', text: 'Zahl', similar: 'zahl' }) + }) +}) diff --git a/web/test/lessons.test.ts b/web/test/lessons.test.ts index 503a5848..56ad8efd 100644 --- a/web/test/lessons.test.ts +++ b/web/test/lessons.test.ts @@ -1,4 +1,7 @@ +import { readdirSync, readFileSync } from 'node:fs' +import { join } from 'node:path' import { beforeAll, describe, expect, it } from 'vitest' +import { decodeDocument } from '../src/core/xmlCodec' import { checkExercise, runWithInputs, usedElementTypes } from '../src/core/exerciseCheck' import type { LiveLabels } from '../src/core/codeGenerator' import { parseLiveJava } from '../src/core/javaParser' @@ -479,3 +482,15 @@ describe('Kompetenzen und Selbsteinschätzung', () => { } }) }) + +describe('Übungen „Warum läuft das nicht?“', () => { + it('der Start läuft wirklich nicht', () => { + const dir = join(__dirname, '..', 'lessons', 'diagramme') + const files = [dir, join(dir, 'en'), join(dir, 'pt')].flatMap((d) => readdirSync(d).filter((f) => f.endsWith('-laeuft-nicht-start.visustruct') || f === 'l04-gross-klein-start.visustruct').map((f) => join(d, f))) + expect(files.length).toBe(48) + for (const file of files) { + const doc = decodeDocument(readFileSync(file, 'utf8')) + expect(runWithInputs(doc, ['14']).error, file).toBeDefined() + } + }) +}) From dfce164a43f88477b19e7ae0007fd37103086823 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 31 Oct 2026 14:46:04 +0000 Subject: [PATCH 2/4] =?UTF-8?q?Web=200.14.16:=20Gro=C3=9F-=20und=20Kleinsc?= =?UTF-8?q?hreibung,=20=C3=9Cbungen=20=E2=80=9EWarum=20l=C3=A4uft=20das=20?= =?UTF-8?q?nicht=3F=E2=80=9C,=20Gl=C3=BChbirne=20f=C3=BCr=20Schreibweise?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Ugz28WeJgSK78Eaojuz8vh --- CHANGELOG.md | 1 + web/lessons/de/begriffe.md | 4 + web/lessons/en/begriffe.md | 3 + web/lessons/pt/begriffe.md | 3 + web/src/ui/liveCodePanel.ts | 7 +- .../assets/{ar-D1A1RHrf.js => ar-uZ_mV_Na.js} | 2 + .../assets/{da-Dbh1SeTf.js => da-C8aaC9z5.js} | 2 + .../assets/{de-CKhRUlNq.js => de-GyoXwgNF.js} | 2 + .../assets/{el-ClnwkgcA.js => el-BlQcOTEr.js} | 2 + .../assets/{en-629h-A53.js => en-MC-jnz4k.js} | 2 + .../assets/{es-DEyVstEX.js => es-DA9G5_P_.js} | 2 + website/app/assets/flowApp-Bk5kkiRs.js | 4 + website/app/assets/flowApp-BpcNHg1o.js | 54 + .../assets/{fr-CaaqCPCw.js => fr-yaOEtLAD.js} | 2 + .../assets/{he-B33U6L6O.js => he-DhhDsw0I.js} | 2 + website/app/assets/index-BzOyQMjP.js | 4920 +- website/app/assets/index-D-WVwkMk.js | 67809 ++++++++++++++++ .../assets/{it-DtwtMU0f.js => it-C4u42T79.js} | 2 + .../assets/{ja-BwrnO7Oa.js => ja-WE8XI1hF.js} | 2 + .../assets/{ko-Bxgot45y.js => ko-BmWPgd-B.js} | 2 + .../assets/{nb-F7OeqC8H.js => nb-C5ktjao7.js} | 2 + .../assets/{nl-wUwZEWkA.js => nl-D84YMRy6.js} | 2 + website/app/assets/objectApp-TJgLvZYD.js | 9 + website/app/assets/objectApp-jas1rTip.js | 430 + .../assets/{pl-DSyPX336.js => pl-DWX5XtXe.js} | 2 + website/app/assets/projectZip-Bn3gHgeA.js | 4 + website/app/assets/projectZip-u1eWaiDZ.js | 5 + .../{pt-PT-Dt8PZkRv.js => pt-PT-CreSj1vz.js} | 2 + website/app/assets/robot3d-DVT67rC6.js | 4 + website/app/assets/robot3d-DurEjQ1B.js | 3959 + .../assets/{ru-BiWIklxb.js => ru-oTax2zks.js} | 2 + .../assets/{sv-CEBUMk9v.js => sv-DEFroOFk.js} | 2 + .../assets/{tr-DZ884N2u.js => tr-Cmdsrvdm.js} | 2 + .../assets/{uk-D7iE_cDo.js => uk-CRlpTSkg.js} | 2 + ...h-Hans-CfpA1NVl.js => zh-Hans-D9vdrX4y.js} | 2 + ...h-Hant-6rrSGbAQ.js => zh-Hant-CetLy6Gl.js} | 2 + website/app/index.html | 4 + 37 files changed, 76063 insertions(+), 1199 deletions(-) rename website/app/assets/{ar-D1A1RHrf.js => ar-uZ_mV_Na.js} (97%) rename website/app/assets/{da-Dbh1SeTf.js => da-C8aaC9z5.js} (98%) rename website/app/assets/{de-CKhRUlNq.js => de-GyoXwgNF.js} (99%) rename website/app/assets/{el-ClnwkgcA.js => el-BlQcOTEr.js} (98%) rename website/app/assets/{en-629h-A53.js => en-MC-jnz4k.js} (99%) rename website/app/assets/{es-DEyVstEX.js => es-DA9G5_P_.js} (97%) create mode 100644 website/app/assets/flowApp-BpcNHg1o.js rename website/app/assets/{fr-CaaqCPCw.js => fr-yaOEtLAD.js} (98%) rename website/app/assets/{he-B33U6L6O.js => he-DhhDsw0I.js} (97%) create mode 100644 website/app/assets/index-D-WVwkMk.js rename website/app/assets/{it-DtwtMU0f.js => it-C4u42T79.js} (98%) rename website/app/assets/{ja-BwrnO7Oa.js => ja-WE8XI1hF.js} (98%) rename website/app/assets/{ko-Bxgot45y.js => ko-BmWPgd-B.js} (97%) rename website/app/assets/{nb-F7OeqC8H.js => nb-C5ktjao7.js} (98%) rename website/app/assets/{nl-wUwZEWkA.js => nl-D84YMRy6.js} (98%) create mode 100644 website/app/assets/objectApp-jas1rTip.js rename website/app/assets/{pl-DSyPX336.js => pl-DWX5XtXe.js} (98%) create mode 100644 website/app/assets/projectZip-u1eWaiDZ.js rename website/app/assets/{pt-PT-Dt8PZkRv.js => pt-PT-CreSj1vz.js} (99%) create mode 100644 website/app/assets/robot3d-DurEjQ1B.js rename website/app/assets/{ru-BiWIklxb.js => ru-oTax2zks.js} (97%) rename website/app/assets/{sv-CEBUMk9v.js => sv-DEFroOFk.js} (98%) rename website/app/assets/{tr-DZ884N2u.js => tr-Cmdsrvdm.js} (98%) rename website/app/assets/{uk-D7iE_cDo.js => uk-CRlpTSkg.js} (98%) rename website/app/assets/{zh-Hans-CfpA1NVl.js => zh-Hans-D9vdrX4y.js} (98%) rename website/app/assets/{zh-Hant-6rrSGbAQ.js => zh-Hant-CetLy6Gl.js} (98%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 079f51d3..d76b40d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is loosely inspired by Keep a Changelog. ### Changed +- **Web 0.14.17, upper and lower case, exercises „Warum läuft das nicht?“:** lesson 4 gets the new step „Groß- und Kleinschreibung“ (case-sensitive: `zahl`, `Zahl` and `ZAHL` are three names) with a structure chart exercise (`zahl` and `Zahl` both declared, `ZAHL` used), a Kompetenz item and a quiz question; glossary entry case-sensitive. Lessons 4–17 and 19 each get a Java exercise „Warum läuft das nicht?“: the start code doesn't run (misspelled variable such as `Alter`/`Grenze`/`properson`, variable used before it is created or never created, `system.out`, `.Length`, `charat`), the student reads the error message, fixes it and clicks Check (de/en/pt). The Code area now reports wrong case in Java words (`system.out.println`, `System.Out`, `Println`, `math.sqrt`, `text.Length()`, `name.charat(0)`) with the right spelling, blocks Run like javac and offers the 💡 fix; the simulation says „Unbekannte Variable: Zahl. Java unterscheidet Groß- und Kleinschreibung: Meintest du zahl?“ when the name exists in another case (all 21 languages). - **Web 0.14.16, „Im Editor öffnen“ under the Java examples in lessons 4–19:** every runnable Java example in the lesson text of lessons 4–19 now has the button „Im Editor öffnen“ (like the Mia example in lesson 4), so students can run and change it in Programmieren. Not in lesson 18, whose examples are a method and its call on their own, and not in cloze texts or games (de/en/pt). - **Web 0.14.15, three kinds of errors, red line numbers and a light bulb with suggestions:** lesson 7 gets the new step „Drei Arten von Fehlern“ (syntax error, runtime error, logic error, with the app's own messages), a Kompetenz item and two quiz questions; lesson 20 explains the red line number and the light bulb and calls the debugger the tool for logic errors (plus Kompetenz and quiz question); lesson 22 calls an exception a runtime error; glossary entries Syntaxfehler, Laufzeitfehler, Logikfehler (de/en/pt). In the Code area the line number of an error turns red (syntax problems and the line where the run stopped), the console names the line of a runtime error (e.g. „Zeile 3: Division durch null.“), and a 💡 at the end of the line offers a fix when VisuStruct knows it (missing `import`, missing `Scanner … = new Scanner(System.in);`, missing `;` or `)`, misspelled data type such as `Strng` → `String`); hover shows it, a click applies it. The round red dot stays the breakpoint. - **Web 0.13.37, no coffee cup and a better camel in lesson 4:** the coffee cup drawing in step „Jetzt in Java“ is removed again (Holger's decision). The camel for camelCase is redrawn to look more like a camel: long legs with knees and broad feet, U-shaped neck, longer snout, tail with tuft. diff --git a/web/lessons/de/begriffe.md b/web/lessons/de/begriffe.md index 2ae1ddc6..9c183ece 100644 --- a/web/lessons/de/begriffe.md +++ b/web/lessons/de/begriffe.md @@ -65,6 +65,10 @@ Eine beschriftete Kiste für einen Wert. Sie hat einen Namen, einen Datentyp und auch: camelCase Schreibweise für Namen aus mehreren Wörtern: zusammengeschrieben, jedes weitere Wort beginnt groß, z. B. `preisMitSteuer`. +### case-sensitive +auch: Groß- und Kleinschreibung +Java unterscheidet Groß- und Kleinbuchstaben: `zahl`, `Zahl` und `ZAHL` sind drei verschiedene Namen. `system` statt `System` ist ein Fehler. + ### Konstante auch: Konstanten Eine Variable, deren Wert nach dem Festlegen gleich bleibt. Man schreibt `const` davor, z. B. `const double MWST = 0.19`. diff --git a/web/lessons/en/begriffe.md b/web/lessons/en/begriffe.md index 8db29106..7ea70fb9 100644 --- a/web/lessons/en/begriffe.md +++ b/web/lessons/en/begriffe.md @@ -69,6 +69,9 @@ A labelled box for a value. It has a name, a data type and a value. also: CamelCase A way of writing names made of several words: written together, every further word starts with a capital, e.g. `priceWithTax`. +### case-sensitive +Java tells upper and lower case apart: `number`, `Number` and `NUMBER` are three different names. `system` instead of `System` is an error. + ### Constant also: constant, constants, Constants A variable whose value stays the same once it is set. You write `const` in front of it, e.g. `const double VAT = 0.19`. diff --git a/web/lessons/pt/begriffe.md b/web/lessons/pt/begriffe.md index 31016e4a..58d6b4ac 100644 --- a/web/lessons/pt/begriffe.md +++ b/web/lessons/pt/begriffe.md @@ -69,6 +69,9 @@ Uma caixa com etiqueta para um valor. Tem um nome, um tipo de dados e um valor. auch: CamelCase Forma de escrever nomes com várias palavras: escritas juntas, cada palavra seguinte começa com maiúscula, p. ex. `precoComIva`. +### case-sensitive +O Java distingue maiúsculas de minúsculas: `numero`, `Numero` e `NUMERO` são três nomes diferentes. `system` em vez de `System` é um erro. + ### Constante auch: constante, constantes, Constantes Uma variável cujo valor não muda depois de definido. Escreve-se `const` à frente, p. ex. `const double IVA = 0.23`. diff --git a/web/src/ui/liveCodePanel.ts b/web/src/ui/liveCodePanel.ts index 52a0ee11..454b9949 100644 --- a/web/src/ui/liveCodePanel.ts +++ b/web/src/ui/liveCodePanel.ts @@ -449,8 +449,9 @@ export class LiveCodePanel { // VisuBot: Programme mit mBot2-Befehlen laufen in der Simulation (3D-Welt, echter mBot2, Markierung) if (this.onRobotRun?.(stepping)) return this.runErrorLine = undefined - // Wie javac: Ohne Import, ohne angelegten Scanner oder mit vertipptem Datentyp startet das Programm nicht. - const blocking = ['web_parse_missing_import', 'web_parse_missing_scanner', 'web_parse_unknown_type'] + // Wie javac: Ohne Import, ohne angelegten Scanner, mit vertipptem Datentyp oder falscher Groß- und Kleinschreibung + // (`system.out`) startet das Programm nicht. + const blocking = ['web_parse_missing_import', 'web_parse_missing_scanner', 'web_parse_unknown_type', 'web_parse_wrong_case'] const missing = this.target === 'java' ? this.javaProblems.find((p) => blocking.includes(p.key)) : undefined if (missing) { this.stopRun(false) @@ -912,7 +913,7 @@ export class LiveCodePanel { } else if (p.key === 'web_parse_missing_scanner') { const indent = /^[ \t]*/.exec(text.slice(lineStart))![0] insert(lineStart, `${indent}${arg}\n`) - } else if (p.key === 'web_parse_unknown_type' && arg) { + } else if ((p.key === 'web_parse_unknown_type' || p.key === 'web_parse_wrong_case') && arg) { fixes.push({ at: lineEnd, title: t('web_quickfix_replace_fmt', arg, text.slice(p.from, p.to)), from: p.from, to: p.to, insert: arg }) } else if (p.key === 'web_parse_missing' && (arg === ';' || arg === ')')) { insert(p.to, arg) diff --git a/website/app/assets/ar-D1A1RHrf.js b/website/app/assets/ar-uZ_mV_Na.js similarity index 97% rename from website/app/assets/ar-D1A1RHrf.js rename to website/app/assets/ar-uZ_mV_Na.js index b2c1bee5..37894796 100644 --- a/website/app/assets/ar-D1A1RHrf.js +++ b/website/app/assets/ar-uZ_mV_Na.js @@ -49,6 +49,7 @@ const e=`/* نصوص موجودة في نسخة الويب فقط. أما بقي "web_sim_file_not_found_fmt" = "لا يوجد ملف باسم %@."; "web_sim_end_of_file_fmt" = "لا يوجد سطر آخر في الملف %@."; "web_sim_null_value_fmt" = "القيمة في %@ هي null."; +"web_sim_unknown_variable_case_fmt" = "متغير غير معروف: %1$@. تميّز Java بين الأحرف الكبيرة والصغيرة: هل تقصد %2$@؟"; "web_sim_written_file_fmt" = "%@ (محفوظ)"; "web_site_home" = "الصفحة الرئيسية"; "web_site_imprint" = "بيانات الناشر"; @@ -96,6 +97,7 @@ const e=`/* نصوص موجودة في نسخة الويب فقط. أما بقي "web_parse_unknown_type" = "لا تعرف Java نوع البيانات هذا. هل تقصد %@؟"; "web_quickfix_insert_fmt" = "اقتراح: إدراج %@"; "web_quickfix_replace_fmt" = "اقتراح: %1$@ بدلاً من %2$@"; +"web_parse_wrong_case" = "تميّز Java بين الأحرف الكبيرة والصغيرة. الصحيح هو %@."; "web_editor_title" = "المخطط"; "web_editor_show" = "إظهار المخطط"; "web_editor_hide" = "إخفاء المخطط"; diff --git a/website/app/assets/da-Dbh1SeTf.js b/website/app/assets/da-C8aaC9z5.js similarity index 98% rename from website/app/assets/da-Dbh1SeTf.js rename to website/app/assets/da-C8aaC9z5.js index 80f42c2c..9683bab6 100644 --- a/website/app/assets/da-Dbh1SeTf.js +++ b/website/app/assets/da-C8aaC9z5.js @@ -49,6 +49,7 @@ const e=`/* Tekster, der kun findes i webversionen. Alt andet kommer fra appens "web_sim_file_not_found_fmt" = "Der findes ingen fil med navnet %@."; "web_sim_end_of_file_fmt" = "Filen %@ har ikke flere linjer."; "web_sim_null_value_fmt" = "%@ er null."; +"web_sim_unknown_variable_case_fmt" = "Ukendt variabel: %1$@. Java skelner mellem store og små bogstaver: mente du %2$@?"; "web_sim_written_file_fmt" = "%@ (gemt)"; "web_site_home" = "Forside"; "web_site_imprint" = "Kolofon"; @@ -96,6 +97,7 @@ const e=`/* Tekster, der kun findes i webversionen. Alt andet kommer fra appens "web_parse_unknown_type" = "Java kender ikke denne datatype. Mente du %@?"; "web_quickfix_insert_fmt" = "Forslag: indsæt %@"; "web_quickfix_replace_fmt" = "Forslag: %1$@ i stedet for %2$@"; +"web_parse_wrong_case" = "Java skelner mellem store og små bogstaver. Det rigtige er %@."; "web_editor_title" = "Strukturdiagram"; "web_editor_show" = "Vis strukturdiagram"; "web_editor_hide" = "Skjul strukturdiagram"; diff --git a/website/app/assets/de-CKhRUlNq.js b/website/app/assets/de-GyoXwgNF.js similarity index 99% rename from website/app/assets/de-CKhRUlNq.js rename to website/app/assets/de-GyoXwgNF.js index 80456a53..68297168 100644 --- a/website/app/assets/de-CKhRUlNq.js +++ b/website/app/assets/de-GyoXwgNF.js @@ -136,6 +136,7 @@ const e=`/* Texte, die es nur in der Web-Version gibt. Alle anderen kommen aus d "web_sim_file_not_found_fmt" = "Es gibt keine Datei %@."; "web_sim_end_of_file_fmt" = "Die Datei %@ hat keine Zeile mehr."; "web_sim_null_value_fmt" = "%@ ist null."; +"web_sim_unknown_variable_case_fmt" = "Unbekannte Variable: %1$@. Java unterscheidet Groß- und Kleinschreibung: Meintest du %2$@?"; "web_sim_written_file_fmt" = "%@ (gespeichert)"; "web_site_home" = "Startseite"; "web_site_imprint" = "Impressum"; @@ -183,6 +184,7 @@ const e=`/* Texte, die es nur in der Web-Version gibt. Alle anderen kommen aus d "web_parse_unknown_type" = "Diesen Datentyp kennt Java nicht. Meintest du %@?"; "web_quickfix_insert_fmt" = "Vorschlag: %@ einfügen"; "web_quickfix_replace_fmt" = "Vorschlag: %1$@ statt %2$@"; +"web_parse_wrong_case" = "Java unterscheidet Groß- und Kleinschreibung. Richtig ist %@."; "web_editor_title" = "Struktogramm"; "web_editor_show" = "Struktogramm aufklappen"; "web_editor_hide" = "Struktogramm einklappen"; diff --git a/website/app/assets/el-ClnwkgcA.js b/website/app/assets/el-BlQcOTEr.js similarity index 98% rename from website/app/assets/el-ClnwkgcA.js rename to website/app/assets/el-BlQcOTEr.js index 0bfad7a3..a3c18947 100644 --- a/website/app/assets/el-ClnwkgcA.js +++ b/website/app/assets/el-BlQcOTEr.js @@ -49,6 +49,7 @@ const e=`/* Κείμενα που υπάρχουν μόνο στην έκδοσ "web_sim_file_not_found_fmt" = "Δεν υπάρχει αρχείο με όνομα %@."; "web_sim_end_of_file_fmt" = "Το αρχείο %@ δεν έχει άλλες γραμμές."; "web_sim_null_value_fmt" = "Το %@ είναι null."; +"web_sim_unknown_variable_case_fmt" = "Άγνωστη μεταβλητή: %1$@. Η Java ξεχωρίζει κεφαλαία και πεζά: μήπως εννοούσες %2$@;"; "web_sim_written_file_fmt" = "%@ (αποθηκεύτηκε)"; "web_site_home" = "Αρχική σελίδα"; "web_site_imprint" = "Στοιχεία εκδότη"; @@ -96,6 +97,7 @@ const e=`/* Κείμενα που υπάρχουν μόνο στην έκδοσ "web_parse_unknown_type" = "Η Java δεν γνωρίζει αυτόν τον τύπο δεδομένων. Μήπως εννοείς %@;"; "web_quickfix_insert_fmt" = "Πρόταση: εισαγωγή %@"; "web_quickfix_replace_fmt" = "Πρόταση: %1$@ αντί για %2$@"; +"web_parse_wrong_case" = "Η Java ξεχωρίζει κεφαλαία και πεζά. Το σωστό είναι %@."; "web_editor_title" = "Διάγραμμα"; "web_editor_show" = "Εμφάνιση διαγράμματος"; "web_editor_hide" = "Απόκρυψη διαγράμματος"; diff --git a/website/app/assets/en-629h-A53.js b/website/app/assets/en-MC-jnz4k.js similarity index 99% rename from website/app/assets/en-629h-A53.js rename to website/app/assets/en-MC-jnz4k.js index 7fe644cd..6a03bc36 100644 --- a/website/app/assets/en-629h-A53.js +++ b/website/app/assets/en-MC-jnz4k.js @@ -136,6 +136,7 @@ const e=`/* Texts that exist only in the web version. Everything else comes from "web_sim_file_not_found_fmt" = "There is no file called %@."; "web_sim_end_of_file_fmt" = "The file %@ has no more lines."; "web_sim_null_value_fmt" = "%@ is null."; +"web_sim_unknown_variable_case_fmt" = "Unknown variable: %1$@. Java is case-sensitive: did you mean %2$@?"; "web_sim_written_file_fmt" = "%@ (saved)"; "web_site_home" = "Home page"; "web_site_imprint" = "Imprint"; @@ -183,6 +184,7 @@ const e=`/* Texts that exist only in the web version. Everything else comes from "web_parse_unknown_type" = "Java doesn’t know this data type. Did you mean %@?"; "web_quickfix_insert_fmt" = "Suggestion: insert %@"; "web_quickfix_replace_fmt" = "Suggestion: %1$@ instead of %2$@"; +"web_parse_wrong_case" = "Java is case-sensitive. The right spelling is %@."; "web_editor_title" = "Diagram"; "web_editor_show" = "Show diagram"; "web_editor_hide" = "Hide diagram"; diff --git a/website/app/assets/es-DEyVstEX.js b/website/app/assets/es-DA9G5_P_.js similarity index 97% rename from website/app/assets/es-DEyVstEX.js rename to website/app/assets/es-DA9G5_P_.js index 3ebb73dc..4c49a1aa 100644 --- a/website/app/assets/es-DEyVstEX.js +++ b/website/app/assets/es-DA9G5_P_.js @@ -49,6 +49,7 @@ const e=`/* Textos que solo existen en la versión web. Todo lo demás procede d "web_sim_file_not_found_fmt" = "No existe ningún archivo llamado %@."; "web_sim_end_of_file_fmt" = "El archivo %@ no tiene más líneas."; "web_sim_null_value_fmt" = "%@ es null."; +"web_sim_unknown_variable_case_fmt" = "Variable desconocida: %1$@. Java distingue entre mayúsculas y minúsculas: ¿querías decir %2$@?"; "web_sim_written_file_fmt" = "%@ (guardado)"; "web_site_home" = "Página de inicio"; "web_site_imprint" = "Aviso legal"; @@ -96,6 +97,7 @@ const e=`/* Textos que solo existen en la versión web. Todo lo demás procede d "web_parse_unknown_type" = "Java no conoce este tipo de datos. ¿Querías decir %@?"; "web_quickfix_insert_fmt" = "Sugerencia: insertar %@"; "web_quickfix_replace_fmt" = "Sugerencia: %1$@ en lugar de %2$@"; +"web_parse_wrong_case" = "Java distingue entre mayúsculas y minúsculas. Lo correcto es %@."; "web_editor_title" = "Diagrama"; "web_editor_show" = "Mostrar diagrama"; "web_editor_hide" = "Ocultar diagrama"; diff --git a/website/app/assets/flowApp-Bk5kkiRs.js b/website/app/assets/flowApp-Bk5kkiRs.js index 12c316a2..1bc800ac 100644 --- a/website/app/assets/flowApp-Bk5kkiRs.js +++ b/website/app/assets/flowApp-Bk5kkiRs.js @@ -1,4 +1,8 @@ +<<<<<<<< HEAD:website/app/assets/flowApp-Bk5kkiRs.js var dt=Object.defineProperty;var lt=(n,t,e)=>t in n?dt(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var y=(n,t,e)=>lt(n,typeof t!="symbol"?t+"":t,e);import{t as h,g as ct,i as I,w as ht,n as ut,f as ft,o as G,q as pt,u as gt,v as wt,x as vt,y as mt,l as xt}from"./index-BzOyQMjP.js";const et=["start","anweisung","ein","verzweigung","unterprogramm","ende"],m=20,st={start:"#d1f2d9",ende:"#d1f2d9",anweisung:"#e5f0ff",ein:"#f2e6ff",verzweigung:"#fff4d6",unterprogramm:"#e5f0ff"},H=16,yt=170;function bt(n,t,e){const i=[];for(const s of n.split(` +======== +var dt=Object.defineProperty;var lt=(n,t,e)=>t in n?dt(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var y=(n,t,e)=>lt(n,typeof t!="symbol"?t+"":t,e);import{t as h,g as ct,i as I,w as ht,n as ut,f as ft,o as G,q as pt,u as gt,v as wt,x as vt,y as mt,l as xt}from"./index-D-WVwkMk.js";const et=["start","anweisung","ein","verzweigung","unterprogramm","ende"],m=20,st={start:"#d1f2d9",ende:"#d1f2d9",anweisung:"#e5f0ff",ein:"#f2e6ff",verzweigung:"#fff4d6",unterprogramm:"#e5f0ff"},H=16,yt=170;function bt(n,t,e){const i=[];for(const s of n.split(` +>>>>>>>> 0a47d98 (Web 0.14.16: Groß- und Kleinschreibung, Übungen „Warum läuft das nicht?“, Glühbirne für Schreibweise):website/app/assets/flowApp-BpcNHg1o.js `)){let o="";for(const r of s.split(/\s+/).filter(Boolean)){const a=o?`${o} ${r}`:r;o&&e(a)>t?(i.push(o),o=r):o=a}i.push(o)}return i.length?i:[""]}const q=n=>Math.round(n/m)*m;function C(n,t){const e=bt(n.text,yt,t),i=Math.max(0,...e.map(t)),s=e.length*H;let o,r;if(n.shape==="verzweigung")o=Math.max(140,i*1.7+30),r=Math.max(80,s*1.8+24);else{const a=n.shape==="ein"?44:n.shape==="unterprogramm"?40:n.shape==="anweisung"?24:36;o=Math.max(n.shape==="start"||n.shape==="ende"?100:120,i+a),r=Math.max(40,s+18)}return{x:n.x,y:n.y,w:Math.ceil(o/m)*m,h:Math.ceil(r/m)*m,lines:e}}function V(n){return n==="ende"?[]:n==="verzweigung"?["ja","nein"]:["out"]}const D=n=>n!=="start";function P(n,t,e){var s;if(e==="out")return"bottom";const i=((s=n.yesRight)==null?void 0:s.includes(t.id))??!1;return e==="ja"===i?"right":"bottom"}function F(n,t){return t==="bottom"?[n.x,n.y+n.h/2]:[n.x+n.w/2,n.y]}const _t=n=>[n.x,n.y-n.h/2];function $t(n,t,e,i=0){const[s,o]=F(n,t),[r,a]=_t(e),d=m,u=Math.max(n.x+n.w/2,e.x+e.w/2)+d*(1.5+i);if(t==="bottom"){if(a>=o+d){if(s===r)return[[s,o],[r,a]];const l=o+d;return[[s,o],[s,l],[r,l],[r,a]]}return[[s,o],[s,o+d],[u,o+d],[u,a-d],[r,a-d],[r,a]]}const p=e.x-e.w/2;if(p>=s+d&&Math.abs(e.y-o)=o+d){if(r>=s+d)return[[s,o],[r,o],[r,a]];const l=s+d;return[[s,o],[l,o],[l,a-d],[r,a-d],[r,a]]}const f=Math.max(s+d,u);return[[s,o],[f,o],[f,a-d],[r,a-d],[r,a]]}function nt(n=""){return{title:n,nodes:[],edges:[]}}function it(n,t){const e=new Set([...n.nodes.map(s=>s.id),...n.edges.map(s=>s.id)]);let i=1;for(;e.has(`${t}${i}`);)i++;return`${t}${i}`}function O(n,t,e,i,s){const o=it(n,"n");return{doc:{...n,nodes:[...n.nodes,{id:o,shape:t,x:q(e),y:q(i),text:s}]},id:o}}function J(n,t,e,i){return{...n,nodes:n.nodes.map(s=>s.id===t?{...s,x:Math.max(m*4,q(e)),y:Math.max(m*2,q(i))}:s)}}function Lt(n,t,e){return{...n,nodes:n.nodes.map(i=>i.id===t?{...i,text:e}:i)}}function _(n,t,e,i){const s=n.nodes.find(a=>a.id===t),o=n.nodes.find(a=>a.id===i);if(!s||!o||t===i||!V(s.shape).includes(e)||!D(o.shape))return n;const r=n.edges.filter(a=>!(a.from===t&&a.port===e));return{...n,edges:[...r,{id:it(n,"e"),from:t,port:e,to:i}]}}function Et(n,t){return V(t.shape).find(e=>!n.edges.some(i=>i.from===t.id&&i.port===e))}function kt(n,t){var e;return{...n,nodes:n.nodes.filter(i=>i.id!==t),edges:n.edges.filter(i=>i.from!==t&&i.to!==t),yesRight:(e=n.yesRight)==null?void 0:e.filter(i=>i!==t)}}function St(n,t){return{...n,edges:n.edges.filter(e=>e.id!==t)}}function ot(n,t){const e=new Set(n.yesRight??[]);return e.has(t)?e.delete(t):e.add(t),{...n,yesRight:[...e]}}function b(n){return JSON.stringify({format:"visuflow",version:1,...n},null,2)}function W(n){let t;try{t=JSON.parse(n)}catch{return}if(!t||typeof t!="object")return;const e=t;if(!Array.isArray(e.nodes)||!Array.isArray(e.edges))return;const i=[];for(const o of e.nodes)!o||typeof o.id!="string"||!et.includes(o.shape)||!Number.isFinite(o.x)||!Number.isFinite(o.y)||i.some(r=>r.id===o.id)||i.push({id:o.id,shape:o.shape,x:o.x,y:o.y,text:typeof o.text=="string"?o.text:""});let s={title:typeof e.title=="string"?e.title:"",nodes:i,edges:[]};for(const o of e.edges)!o||typeof o.from!="string"||typeof o.to!="string"||typeof o.port!="string"||(s=_(s,o.from,o.port,o.to));return Array.isArray(e.yesRight)&&(s.yesRight=e.yesRight.filter(o=>typeof o=="string"&&i.some(r=>r.id===o))),s}const z="http://www.w3.org/2000/svg",X="visuflow.doc",Mt=100,Y=14,rt=`${Y}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,T="#1c1c1e",w=n=>n.replace(/[&<>"]/g,t=>({"&":"&","<":"<",">":">",'"':"""})[t]);function At(n){try{return localStorage.getItem(n)}catch{return null}}function Z(n,t){try{localStorage.setItem(n,t)}catch{}}function It(){const n=xt(),t=n==="pt-PT"?"pt":n==="de"?"de":"en";return`${/\/app\/(index\.html)?$/.test(location.pathname)?"../":"https://visustruct.org/"}${t}/index.html`}function j(n,t,e){const i=URL.createObjectURL(new Blob([t],{type:e})),s=document.createElement("a");s.href=i,s.download=n,s.click(),setTimeout(()=>URL.revokeObjectURL(i),1e3)}function v(n,t={}){const e=document.createElementNS(z,n);for(const[i,s]of Object.entries(t))e.setAttribute(i,String(s));return e}let N;function R(n){return N===void 0&&(N=document.createElement("canvas").getContext("2d")),N?(N.font=rt,N.measureText(n).width):n.length*Y*.55}const Ct=n=>h(`web_visuflow_shape_${n}`),B=n=>h(`web_visuflow_text_${n}`);function at(n,t){const e=t.x-t.w/2,i=t.x+t.w/2,s=t.y-t.h/2,o=t.y+t.h/2;return n==="verzweigung"?v("path",{d:`M${t.x} ${s} L${i} ${t.y} L${t.x} ${o} L${e} ${t.y} Z`}):n==="ein"?v("path",{d:`M${e+14} ${s} L${i} ${s} L${i-14} ${o} L${e} ${o} Z`}):n==="unterprogramm"?v("path",{d:`M${e} ${s} H${i} V${o} H${e} Z M${e+10} ${s} V${o} M${i-10} ${s} V${o}`}):v("rect",{x:e,y:s,width:t.w,height:t.h,rx:n==="anweisung"?2:t.h/2})}function Rt(n){const t=v("text",{"text-anchor":"middle","font-size":Y,fill:T});return n.lines.forEach((e,i)=>{const s=v("tspan",{x:n.x,y:n.y+5+(i-(n.lines.length-1)/2)*H});s.textContent=e,t.append(s)}),t}function Q(n){const t=v("svg",{viewBox:"0 0 64 36",width:64,height:36,"aria-hidden":"true"}),e=at(n,{x:32,y:18,w:n==="verzweigung"?54:56,h:n==="verzweigung"?32:26});return e.setAttribute("fill",st[n]),e.setAttribute("stroke",T),e.setAttribute("stroke-width","1.5"),t.append(e),t.outerHTML}function tt(){let n=nt(h("web_visuflow_example_title"));const t=[],e=(p,f,l,c)=>{const g=O(n,p,f,l,c);n=g.doc,t.push(g.id)};e("start",240,60,B("start")),e("anweisung",240,160,h("web_visuflow_example_water")),e("anweisung",240,260,h("web_visuflow_example_bag")),e("verzweigung",240,380,h("web_visuflow_example_hot")),e("anweisung",480,380,h("web_visuflow_example_wait")),e("anweisung",240,500,h("web_visuflow_example_drink")),e("ende",240,600,B("ende"));const[i,s,o,r,a,d,u]=t;return n=_(n,i,"out",s),n=_(n,s,"out",o),n=_(n,o,"out",r),n=ot(n,r),n=_(n,r,"ja",a),n=_(n,a,"out",r),n=_(n,r,"nein",d),n=_(n,d,"out",u),n}function Tt(){return O(nt(),"start",240,60,B("start")).doc}class Pt{constructor(t){y(this,"shell");y(this,"svg");y(this,"scroller");y(this,"status");y(this,"titleInput");y(this,"doc");y(this,"selection");y(this,"history",[]);y(this,"future",[]);y(this,"editor");y(this,"dragLine");document.documentElement.classList.add("visuflow-theme"),history.replaceState(history.state,"",`${location.pathname}?visuflow${location.hash}`),this.doc=W(At(X)??"")??tt(),this.shell=document.createElement("div"),this.shell.className="shell visuflow",t.replaceWith(this.shell),this.build(),this.render(),window.addEventListener("keydown",e=>this.onKey(e))}build(){const t=(l,c,g,x=c)=>``,e=et.map(l=>``).join("");this.shell.innerHTML=`
VisuFlow ${w(h("web_visuflow_subtitle"))} diff --git a/website/app/assets/flowApp-BpcNHg1o.js b/website/app/assets/flowApp-BpcNHg1o.js new file mode 100644 index 00000000..1bc800ac --- /dev/null +++ b/website/app/assets/flowApp-BpcNHg1o.js @@ -0,0 +1,54 @@ +<<<<<<<< HEAD:website/app/assets/flowApp-Bk5kkiRs.js +var dt=Object.defineProperty;var lt=(n,t,e)=>t in n?dt(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var y=(n,t,e)=>lt(n,typeof t!="symbol"?t+"":t,e);import{t as h,g as ct,i as I,w as ht,n as ut,f as ft,o as G,q as pt,u as gt,v as wt,x as vt,y as mt,l as xt}from"./index-BzOyQMjP.js";const et=["start","anweisung","ein","verzweigung","unterprogramm","ende"],m=20,st={start:"#d1f2d9",ende:"#d1f2d9",anweisung:"#e5f0ff",ein:"#f2e6ff",verzweigung:"#fff4d6",unterprogramm:"#e5f0ff"},H=16,yt=170;function bt(n,t,e){const i=[];for(const s of n.split(` +======== +var dt=Object.defineProperty;var lt=(n,t,e)=>t in n?dt(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var y=(n,t,e)=>lt(n,typeof t!="symbol"?t+"":t,e);import{t as h,g as ct,i as I,w as ht,n as ut,f as ft,o as G,q as pt,u as gt,v as wt,x as vt,y as mt,l as xt}from"./index-D-WVwkMk.js";const et=["start","anweisung","ein","verzweigung","unterprogramm","ende"],m=20,st={start:"#d1f2d9",ende:"#d1f2d9",anweisung:"#e5f0ff",ein:"#f2e6ff",verzweigung:"#fff4d6",unterprogramm:"#e5f0ff"},H=16,yt=170;function bt(n,t,e){const i=[];for(const s of n.split(` +>>>>>>>> 0a47d98 (Web 0.14.16: Groß- und Kleinschreibung, Übungen „Warum läuft das nicht?“, Glühbirne für Schreibweise):website/app/assets/flowApp-BpcNHg1o.js +`)){let o="";for(const r of s.split(/\s+/).filter(Boolean)){const a=o?`${o} ${r}`:r;o&&e(a)>t?(i.push(o),o=r):o=a}i.push(o)}return i.length?i:[""]}const q=n=>Math.round(n/m)*m;function C(n,t){const e=bt(n.text,yt,t),i=Math.max(0,...e.map(t)),s=e.length*H;let o,r;if(n.shape==="verzweigung")o=Math.max(140,i*1.7+30),r=Math.max(80,s*1.8+24);else{const a=n.shape==="ein"?44:n.shape==="unterprogramm"?40:n.shape==="anweisung"?24:36;o=Math.max(n.shape==="start"||n.shape==="ende"?100:120,i+a),r=Math.max(40,s+18)}return{x:n.x,y:n.y,w:Math.ceil(o/m)*m,h:Math.ceil(r/m)*m,lines:e}}function V(n){return n==="ende"?[]:n==="verzweigung"?["ja","nein"]:["out"]}const D=n=>n!=="start";function P(n,t,e){var s;if(e==="out")return"bottom";const i=((s=n.yesRight)==null?void 0:s.includes(t.id))??!1;return e==="ja"===i?"right":"bottom"}function F(n,t){return t==="bottom"?[n.x,n.y+n.h/2]:[n.x+n.w/2,n.y]}const _t=n=>[n.x,n.y-n.h/2];function $t(n,t,e,i=0){const[s,o]=F(n,t),[r,a]=_t(e),d=m,u=Math.max(n.x+n.w/2,e.x+e.w/2)+d*(1.5+i);if(t==="bottom"){if(a>=o+d){if(s===r)return[[s,o],[r,a]];const l=o+d;return[[s,o],[s,l],[r,l],[r,a]]}return[[s,o],[s,o+d],[u,o+d],[u,a-d],[r,a-d],[r,a]]}const p=e.x-e.w/2;if(p>=s+d&&Math.abs(e.y-o)=o+d){if(r>=s+d)return[[s,o],[r,o],[r,a]];const l=s+d;return[[s,o],[l,o],[l,a-d],[r,a-d],[r,a]]}const f=Math.max(s+d,u);return[[s,o],[f,o],[f,a-d],[r,a-d],[r,a]]}function nt(n=""){return{title:n,nodes:[],edges:[]}}function it(n,t){const e=new Set([...n.nodes.map(s=>s.id),...n.edges.map(s=>s.id)]);let i=1;for(;e.has(`${t}${i}`);)i++;return`${t}${i}`}function O(n,t,e,i,s){const o=it(n,"n");return{doc:{...n,nodes:[...n.nodes,{id:o,shape:t,x:q(e),y:q(i),text:s}]},id:o}}function J(n,t,e,i){return{...n,nodes:n.nodes.map(s=>s.id===t?{...s,x:Math.max(m*4,q(e)),y:Math.max(m*2,q(i))}:s)}}function Lt(n,t,e){return{...n,nodes:n.nodes.map(i=>i.id===t?{...i,text:e}:i)}}function _(n,t,e,i){const s=n.nodes.find(a=>a.id===t),o=n.nodes.find(a=>a.id===i);if(!s||!o||t===i||!V(s.shape).includes(e)||!D(o.shape))return n;const r=n.edges.filter(a=>!(a.from===t&&a.port===e));return{...n,edges:[...r,{id:it(n,"e"),from:t,port:e,to:i}]}}function Et(n,t){return V(t.shape).find(e=>!n.edges.some(i=>i.from===t.id&&i.port===e))}function kt(n,t){var e;return{...n,nodes:n.nodes.filter(i=>i.id!==t),edges:n.edges.filter(i=>i.from!==t&&i.to!==t),yesRight:(e=n.yesRight)==null?void 0:e.filter(i=>i!==t)}}function St(n,t){return{...n,edges:n.edges.filter(e=>e.id!==t)}}function ot(n,t){const e=new Set(n.yesRight??[]);return e.has(t)?e.delete(t):e.add(t),{...n,yesRight:[...e]}}function b(n){return JSON.stringify({format:"visuflow",version:1,...n},null,2)}function W(n){let t;try{t=JSON.parse(n)}catch{return}if(!t||typeof t!="object")return;const e=t;if(!Array.isArray(e.nodes)||!Array.isArray(e.edges))return;const i=[];for(const o of e.nodes)!o||typeof o.id!="string"||!et.includes(o.shape)||!Number.isFinite(o.x)||!Number.isFinite(o.y)||i.some(r=>r.id===o.id)||i.push({id:o.id,shape:o.shape,x:o.x,y:o.y,text:typeof o.text=="string"?o.text:""});let s={title:typeof e.title=="string"?e.title:"",nodes:i,edges:[]};for(const o of e.edges)!o||typeof o.from!="string"||typeof o.to!="string"||typeof o.port!="string"||(s=_(s,o.from,o.port,o.to));return Array.isArray(e.yesRight)&&(s.yesRight=e.yesRight.filter(o=>typeof o=="string"&&i.some(r=>r.id===o))),s}const z="http://www.w3.org/2000/svg",X="visuflow.doc",Mt=100,Y=14,rt=`${Y}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,T="#1c1c1e",w=n=>n.replace(/[&<>"]/g,t=>({"&":"&","<":"<",">":">",'"':"""})[t]);function At(n){try{return localStorage.getItem(n)}catch{return null}}function Z(n,t){try{localStorage.setItem(n,t)}catch{}}function It(){const n=xt(),t=n==="pt-PT"?"pt":n==="de"?"de":"en";return`${/\/app\/(index\.html)?$/.test(location.pathname)?"../":"https://visustruct.org/"}${t}/index.html`}function j(n,t,e){const i=URL.createObjectURL(new Blob([t],{type:e})),s=document.createElement("a");s.href=i,s.download=n,s.click(),setTimeout(()=>URL.revokeObjectURL(i),1e3)}function v(n,t={}){const e=document.createElementNS(z,n);for(const[i,s]of Object.entries(t))e.setAttribute(i,String(s));return e}let N;function R(n){return N===void 0&&(N=document.createElement("canvas").getContext("2d")),N?(N.font=rt,N.measureText(n).width):n.length*Y*.55}const Ct=n=>h(`web_visuflow_shape_${n}`),B=n=>h(`web_visuflow_text_${n}`);function at(n,t){const e=t.x-t.w/2,i=t.x+t.w/2,s=t.y-t.h/2,o=t.y+t.h/2;return n==="verzweigung"?v("path",{d:`M${t.x} ${s} L${i} ${t.y} L${t.x} ${o} L${e} ${t.y} Z`}):n==="ein"?v("path",{d:`M${e+14} ${s} L${i} ${s} L${i-14} ${o} L${e} ${o} Z`}):n==="unterprogramm"?v("path",{d:`M${e} ${s} H${i} V${o} H${e} Z M${e+10} ${s} V${o} M${i-10} ${s} V${o}`}):v("rect",{x:e,y:s,width:t.w,height:t.h,rx:n==="anweisung"?2:t.h/2})}function Rt(n){const t=v("text",{"text-anchor":"middle","font-size":Y,fill:T});return n.lines.forEach((e,i)=>{const s=v("tspan",{x:n.x,y:n.y+5+(i-(n.lines.length-1)/2)*H});s.textContent=e,t.append(s)}),t}function Q(n){const t=v("svg",{viewBox:"0 0 64 36",width:64,height:36,"aria-hidden":"true"}),e=at(n,{x:32,y:18,w:n==="verzweigung"?54:56,h:n==="verzweigung"?32:26});return e.setAttribute("fill",st[n]),e.setAttribute("stroke",T),e.setAttribute("stroke-width","1.5"),t.append(e),t.outerHTML}function tt(){let n=nt(h("web_visuflow_example_title"));const t=[],e=(p,f,l,c)=>{const g=O(n,p,f,l,c);n=g.doc,t.push(g.id)};e("start",240,60,B("start")),e("anweisung",240,160,h("web_visuflow_example_water")),e("anweisung",240,260,h("web_visuflow_example_bag")),e("verzweigung",240,380,h("web_visuflow_example_hot")),e("anweisung",480,380,h("web_visuflow_example_wait")),e("anweisung",240,500,h("web_visuflow_example_drink")),e("ende",240,600,B("ende"));const[i,s,o,r,a,d,u]=t;return n=_(n,i,"out",s),n=_(n,s,"out",o),n=_(n,o,"out",r),n=ot(n,r),n=_(n,r,"ja",a),n=_(n,a,"out",r),n=_(n,r,"nein",d),n=_(n,d,"out",u),n}function Tt(){return O(nt(),"start",240,60,B("start")).doc}class Pt{constructor(t){y(this,"shell");y(this,"svg");y(this,"scroller");y(this,"status");y(this,"titleInput");y(this,"doc");y(this,"selection");y(this,"history",[]);y(this,"future",[]);y(this,"editor");y(this,"dragLine");document.documentElement.classList.add("visuflow-theme"),history.replaceState(history.state,"",`${location.pathname}?visuflow${location.hash}`),this.doc=W(At(X)??"")??tt(),this.shell=document.createElement("div"),this.shell.className="shell visuflow",t.replaceWith(this.shell),this.build(),this.render(),window.addEventListener("keydown",e=>this.onKey(e))}build(){const t=(l,c,g,x=c)=>``,e=et.map(l=>``).join("");this.shell.innerHTML=` +
+ VisuFlow ${w(h("web_visuflow_subtitle"))} +
+ ${t("new",h("toolbar_new"),I.newFile,h("web_visuflow_new_tip"))} + ${t("open",h("menu_open"),I.open,h("web_visuflow_open_tip"))} + ${t("save",h("menu_save"),I.save,h("web_visuflow_save_tip"))} + ${t("undo",h("toolbar_undo"),I.undo)} + ${t("redo",h("toolbar_redo"),I.redo)} + ${t("delete",h("web_visuflow_delete"),I.trash,h("web_visuflow_delete_tip"))} + + +
+
+ + +
+
+ + +
+
+
+ +
+
+
+ +
+

+
+
+ `;const i=l=>this.shell.querySelector(l);this.svg=i(".vf-canvas"),this.scroller=i(".vf-scroll"),this.status=i(".vf-status"),this.titleInput=i(".vf-title");const s=(l,c)=>i(`[data-action=${l}]`).addEventListener("click",c);s("new",()=>this.replace(Tt())),s("example",()=>this.replace(tt())),s("open",()=>i("input[type=file]").click()),s("save",()=>this.save()),s("undo",()=>this.undo(!1)),s("redo",()=>this.undo(!0)),s("delete",()=>this.deleteSelection()),s("swap",()=>{var l;((l=this.selection)==null?void 0:l.kind)==="node"&&this.change(ot(this.doc,this.selection.id))});const o=i("input[type=file]");o.addEventListener("change",async()=>{var g;const l=(g=o.files)==null?void 0:g[0];if(o.value="",!l)return;const c=W(await l.text());if(!c)return this.showStatus(h("web_visuflow_open_error"));c.title||(c.title=l.name.replace(/\.(visuflow|json)$/i,"")),this.replace(c)});let r;this.titleInput.addEventListener("focus",()=>r=b(this.doc)),this.titleInput.addEventListener("input",()=>{this.doc={...this.doc,title:this.titleInput.value},Z(X,b(this.doc))}),this.titleInput.addEventListener("change",()=>{r!==void 0&&r!==b(this.doc)&&this.pushUndo(r),r=b(this.doc)});const a=i("[data-action=export]"),d=i(".vf-menu"),u=l=>{d.hidden=!l,a.setAttribute("aria-expanded",String(l))};a.addEventListener("click",()=>u(d.hidden)),d.addEventListener("click",l=>{var g;const c=(g=l.target.closest("[data-export]"))==null?void 0:g.dataset.export;c&&(u(!1),this.export(c))});const p=i("[data-action=settings]"),f=i(".settings-menu");p.addEventListener("click",()=>{f.hidden=!f.hidden,p.setAttribute("aria-expanded",String(!f.hidden))}),document.addEventListener("pointerdown",l=>{const c=l.target;!f.hidden&&!c.closest(".settings")&&(f.hidden=!0),!d.hidden&&!c.closest(".vf-export")&&u(!1)});for(const l of f.querySelectorAll("[data-world]"))l.addEventListener("click",()=>this.chooseWorld(l.dataset.world));for(const l of this.shell.querySelectorAll(".vf-shape"))this.setupPaletteButton(l);this.svg.addEventListener("pointerdown",l=>this.onPointerDown(l)),this.svg.addEventListener("dblclick",l=>{var g;const c=(g=l.target.closest("[data-node]"))==null?void 0:g.dataset.node;c&&this.editText(c)})}chooseWorld(t){if(t!=="flow"){if(t==="object"){ut(),location.href=`${location.pathname}?visuobject${location.hash}`;return}ft(t),location.href=`${location.pathname}?${t==="on"?"visubot":"visustruct"}${location.hash}`}}pushUndo(t){this.history.push(t),this.history.length>Mt&&this.history.shift(),this.future=[]}change(t,e){t!==this.doc&&(this.pushUndo(b(this.doc)),this.doc=t,e!==void 0&&(this.selection=e??void 0),this.afterChange())}replace(t){this.change(t,null),this.scroller.scrollTo(0,0)}afterChange(){Z(X,b(this.doc)),this.selection&&!this.find(this.selection)&&(this.selection=void 0),this.render()}find(t){return t.kind==="node"?this.doc.nodes.find(e=>e.id===t.id):this.doc.edges.find(e=>e.id===t.id)}undo(t){this.closeEditor(!0);const e=t?this.future:this.history,i=t?this.history:this.future,s=e.pop();s!==void 0&&(i.push(b(this.doc)),this.doc=W(s)??this.doc,this.afterChange())}deleteSelection(){const t=this.selection;t&&this.change(t.kind==="node"?kt(this.doc,t.id):St(this.doc,t.id),null)}save(){const t=G(this.doc.title)||"PAP";j(`${t}.visuflow`,b(this.doc),"application/json"),this.showStatus(h("web_visuflow_saved",`${t}.visuflow`))}boxes(t=this.doc){return new Map(t.nodes.map(e=>[e.id,C(e,R)]))}drawInto(t,e){var f,l;const i=this.boxes(),s=h("web_learn_pap_yes"),o=h("web_learn_pap_no");t.innerHTML=``;const r=v("g",{class:"vf-edges"}),a=v("g",{class:"vf-labels","font-size":12,"font-weight":600}),d=v("g",{class:"vf-nodes"}),u=v("g",{class:"vf-ports"});let p=0;for(const c of this.doc.edges){const g=this.doc.nodes.find(M=>M.id===c.from),x=i.get(c.from),$=i.get(c.to),k=P(this.doc,g,c.port),L=$.y-$.h/2M.join(",")).join(" "),E=v("g",{"data-edge":c.id,class:`vf-edge${!e&&((f=this.selection)==null?void 0:f.kind)==="edge"&&this.selection.id===c.id?" selected":""}`});e||E.append(v("polyline",{points:S,class:"vf-edge-hit",fill:"none",stroke:"transparent","stroke-width":16})),E.append(v("polyline",{points:S,class:"vf-edge-line",fill:"none",stroke:T,"stroke-width":2,"marker-end":"url(#vf-arrow)"})),r.append(E)}for(const c of this.doc.nodes){const g=i.get(c.id),x=!e&&((l=this.selection)==null?void 0:l.kind)==="node"&&this.selection.id===c.id,$=v("g",{"data-node":c.id,class:`vf-node${x?" selected":""}`}),k=at(c.shape,g);k.setAttribute("fill",st[c.shape]),k.setAttribute("stroke",T),k.setAttribute("stroke-width","2"),$.append(k,Rt(g)),d.append($);for(const L of V(c.shape)){const U=P(this.doc,c,L),[S,E]=F(g,U),M=this.doc.edges.some(A=>A.from===c.id&&A.port===L);if(L!=="out"&&(M||!e)){const A=v("text",U==="bottom"?{x:S+7,y:E+15}:{x:S+6,y:E-7});A.setAttribute("fill",L==="ja"?"#248a3d":"#d70015"),A.textContent=L==="ja"?s:o,a.append(A)}if(e)continue;const K=v("g",{"data-port":L,"data-from":c.id,class:`vf-port${M?" used":""}`});K.append(v("circle",{cx:S,cy:E,r:16,fill:"transparent"}),v("circle",{cx:S,cy:E,r:6,class:"vf-port-dot"})),u.append(K)}}return t.append(r,d,a,u),i}render(){this.closeEditor(!0);const t=this.drawInto(this.svg,!1);let e=0,i=0;for(const d of t.values())e=Math.max(e,d.x+d.w/2),i=Math.max(i,d.y+d.h/2);const s=Math.max(this.scroller.clientWidth,e+300),o=Math.max(this.scroller.clientHeight,i+300);this.svg.setAttribute("width",String(s)),this.svg.setAttribute("height",String(o)),this.svg.setAttribute("viewBox",`0 0 ${s} ${o}`),document.activeElement!==this.titleInput&&(this.titleInput.value=this.doc.title);const r=this.selection,a=(r==null?void 0:r.kind)==="node"?this.doc.nodes.find(d=>d.id===r.id):void 0;this.shell.querySelector("[data-action=swap]").disabled=(a==null?void 0:a.shape)!=="verzweigung",this.shell.querySelector("[data-action=delete]").disabled=!r,this.shell.querySelector("[data-action=undo]").disabled=this.history.length===0,this.shell.querySelector("[data-action=redo]").disabled=this.future.length===0,this.showStatus(h(this.doc.nodes.length===0?"web_visuflow_status_empty":(r==null?void 0:r.kind)==="edge"?"web_visuflow_status_edge":r?"web_visuflow_status_node":"web_visuflow_status_idle"))}showStatus(t){this.status.textContent=t}setupPaletteButton(t){const e=t.dataset.shape;t.addEventListener("pointerdown",i=>{if(i.button!==0)return;i.preventDefault();const s={x:i.clientX,y:i.clientY};let o;const r=d=>{!o&&Math.hypot(d.clientX-s.x,d.clientY-s.y)<6||(o||(o=document.createElement("div"),o.className="vf-ghost",o.innerHTML=Q(e),document.body.append(o)),o.style.left=`${d.clientX}px`,o.style.top=`${d.clientY}px`)},a=d=>{if(window.removeEventListener("pointermove",r),window.removeEventListener("pointerup",a),window.removeEventListener("pointercancel",a),!o)return this.appendShape(e);if(o.remove(),d.type==="pointercancel")return;const u=this.scroller.getBoundingClientRect();if(d.clientXu.right||d.clientYu.bottom)return;const p=this.toCanvas(d),{doc:f,id:l}=O(this.doc,e,p.x,p.y,B(e));this.change(f,{kind:"node",id:l}),this.editText(l)};window.addEventListener("pointermove",r),window.addEventListener("pointerup",a),window.addEventListener("pointercancel",a)}),t.addEventListener("keydown",i=>{i.key!=="Enter"&&i.key!==" "||(i.preventDefault(),this.appendShape(e))})}appendShape(t){var f;const e=this.selection,i=(e==null?void 0:e.kind)==="node"?this.doc.nodes.find(l=>l.id===e.id):void 0,s=i&&D(t)?Et(this.doc,i):void 0,o=C({shape:t,x:0,y:0,text:B(t)},R);let r=240,a=60;if(i&&s){const l=C(i,R);P(this.doc,i,s)==="right"?(r=l.x+l.w/2+3*m+o.w/2,a=l.y):(r=l.x,a=l.y+l.h/2+3*m+o.h/2)}else if(this.doc.nodes.length){const c=[...this.boxes().values()].reduce((g,x)=>x.y+x.h/2>g.y+g.h/2?x:g);r=i?C(i,R).x:c.x,a=c.y+c.h/2+3*m+o.h/2}let{doc:d,id:u}=O(this.doc,t,r,a,B(t));i&&s&&(d=_(d,i.id,s,u)),this.change(d,{kind:"node",id:u});const p=this.svg.querySelector(`[data-node="${u}"]`);(f=p==null?void 0:p.scrollIntoView)==null||f.call(p,{block:"nearest",inline:"nearest"}),this.editText(u)}toCanvas(t){const e=this.svg.getBoundingClientRect();return{x:t.clientX-e.left,y:t.clientY-e.top}}nodeAt(t,e){const i=this.boxes();return[...this.doc.nodes].reverse().find(s=>{const o=i.get(s.id);return s.id!==e&&Math.abs(t.x-o.x)<=o.w/2+4&&Math.abs(t.y-o.y)<=o.h/2+4})}onPointerDown(t){var r,a;if(t.button!==0)return;const e=t.target,i=e.closest("[data-port]");if(i)return this.dragArrow(t,i.dataset.from,i.dataset.port);const s=(r=e.closest("[data-node]"))==null?void 0:r.dataset.node;if(s)return this.dragNode(t,s);const o=(a=e.closest("[data-edge]"))==null?void 0:a.dataset.edge;this.closeEditor(!0),this.selection=o?{kind:"edge",id:o}:void 0,this.render()}dragNode(t,e){var f;t.preventDefault();const i=((f=this.selection)==null?void 0:f.kind)==="node"&&this.selection.id===e;this.closeEditor(!0),this.selection={kind:"node",id:e},this.render();const s=this.doc.nodes.find(l=>l.id===e),o=this.toCanvas(t),r=b(this.doc),a={x:s.x,y:s.y};let d=!1;const u=l=>{const c=this.toCanvas(l);!d&&Math.hypot(c.x-o.x,c.y-o.y)<5||(d=!0,this.doc=J(this.doc,e,a.x+c.x-o.x,a.y+c.y-o.y),this.render())},p=()=>{window.removeEventListener("pointermove",u),window.removeEventListener("pointerup",p),window.removeEventListener("pointercancel",p),d?(b(this.doc)!==r&&this.pushUndo(r),this.afterChange()):i&&this.editText(e)};window.addEventListener("pointermove",u),window.addEventListener("pointerup",p),window.addEventListener("pointercancel",p)}dragArrow(t,e,i){t.preventDefault(),this.closeEditor(!0);const s=this.doc.nodes.find(p=>p.id===e),[o,r]=F(C(s,R),P(this.doc,s,i));this.dragLine=v("line",{x1:o,y1:r,x2:o,y2:r,class:"vf-drag-line","marker-end":"url(#vf-arrow)"}),this.svg.append(this.dragLine),this.showStatus(h("web_visuflow_status_connect"));let a=null;const d=p=>{const f=this.toCanvas(p);this.dragLine.setAttribute("x2",String(f.x)),this.dragLine.setAttribute("y2",String(f.y));const l=this.nodeAt(f,e);a==null||a.classList.remove("drop-target"),a=l&&D(l.shape)?this.svg.querySelector(`[data-node="${l.id}"]`):null,a==null||a.classList.add("drop-target")},u=p=>{var l;window.removeEventListener("pointermove",d),window.removeEventListener("pointerup",u),window.removeEventListener("pointercancel",u),(l=this.dragLine)==null||l.remove(),this.dragLine=void 0;const f=p.type==="pointercancel"?void 0:this.nodeAt(this.toCanvas(p),e);f&&D(f.shape)?this.change(_(this.doc,e,i,f.id),{kind:"node",id:f.id}):this.render()};window.addEventListener("pointermove",d),window.addEventListener("pointerup",u),window.addEventListener("pointercancel",u)}editText(t){this.closeEditor(!0);const e=this.doc.nodes.find(d=>d.id===t);if(!e)return;const i=C(e,R),s=document.createElement("textarea");s.className="vf-editor",s.value=e.text,s.setAttribute("aria-label",h("web_visuflow_edit_label"));const o=e.shape==="verzweigung"?.62:.92,r=Math.max(110,i.w*o);s.style.left=`${this.svg.getBoundingClientRect().left-this.scroller.getBoundingClientRect().left+this.scroller.scrollLeft+i.x-r/2}px`,s.style.top=`${this.svg.getBoundingClientRect().top-this.scroller.getBoundingClientRect().top+this.scroller.scrollTop+i.y-Math.max(28,i.lines.length*H+10)/2}px`,s.style.width=`${r}px`,s.style.height=`${Math.max(28,i.lines.length*H+10)}px`,s.dataset.node=t,this.scroller.append(s),this.editor=s,s.focus(),s.select();const a=()=>{s.style.height="auto",s.style.height=`${s.scrollHeight}px`};s.addEventListener("input",a),s.addEventListener("keydown",d=>{d.stopPropagation(),d.key==="Enter"&&!d.shiftKey?(d.preventDefault(),this.closeEditor(!0)):d.key==="Escape"&&(d.preventDefault(),this.closeEditor(!1))}),s.addEventListener("blur",()=>this.closeEditor(!0))}closeEditor(t){const e=this.editor;if(!e)return;this.editor=void 0,e.remove();const i=e.dataset.node,s=this.doc.nodes.find(r=>r.id===i),o=e.value.trim();t&&s&&o!==s.text&&this.change(Lt(this.doc,i,o))}onKey(t){var a,d;const e=(d=(a=t.target).closest)==null?void 0:d.call(a,"input, textarea, [contenteditable]"),i=t.ctrlKey||t.metaKey;if(i&&t.key.toLowerCase()==="s")return t.preventDefault(),this.save();if(e)return;if(i&&t.key.toLowerCase()==="z")return t.preventDefault(),this.undo(t.shiftKey);if(i&&t.key.toLowerCase()==="y")return t.preventDefault(),this.undo(!0);const s=this.selection;if(!s)return;if(t.key==="Delete"||t.key==="Backspace")return t.preventDefault(),this.deleteSelection();if(s.kind!=="node")return;if(t.key==="Enter"||t.key==="F2")return t.preventDefault(),this.editText(s.id);const o={ArrowLeft:[-1,0],ArrowRight:[1,0],ArrowUp:[0,-1],ArrowDown:[0,1]}[t.key];if(!o)return;t.preventDefault();const r=this.doc.nodes.find(u=>u.id===s.id);this.change(J(this.doc,s.id,r.x+o[0]*m,r.y+o[1]*m))}exportImage(){if(this.doc.nodes.length===0)return;const t=document.createElementNS(z,"svg"),e=this.drawInto(t,!0);let i=1/0,s=1/0,o=-1/0,r=-1/0;for(const c of e.values())i=Math.min(i,c.x-c.w/2),s=Math.min(s,c.y-c.h/2),o=Math.max(o,c.x+c.w/2),r=Math.max(r,c.y+c.h/2);for(const c of t.querySelectorAll("polyline"))for(const g of(c.getAttribute("points")??"").split(" ")){const[x,$]=g.split(",").map(Number);i=Math.min(i,x),o=Math.max(o,x+4),s=Math.min(s,$),r=Math.max(r,$)}o+=30;const a=20,d=this.doc.title.trim(),u=d?32:0,p=Math.ceil(o-i+2*a),f=Math.ceil(r-s+2*a+u);t.setAttribute("xmlns",z),t.setAttribute("width",String(p)),t.setAttribute("height",String(f)),t.setAttribute("viewBox",`${i-a} ${s-a-u} ${p} ${f}`),t.setAttribute("font-family",rt.replace(/^\d+px /,""));const l=v("rect",{x:i-a,y:s-a-u,width:p,height:f,fill:"#ffffff"});if(t.insertBefore(l,t.firstChild.nextSibling),d){const c=v("text",{x:i-a+12,y:s-a-u+26,"font-size":16,"font-weight":700,fill:T});c.textContent=d,t.append(c)}return{svg:t,width:p,height:f}}async export(t){const e=this.exportImage();if(!e)return this.showStatus(h("web_visuflow_status_empty"));const i=G(this.doc.title)||"PAP";if(t==="svg")return j(`${i}.svg`,pt(e),"image/svg+xml");const s=await gt(e,t==="png"?2:3);if(t==="png")return j(`${i}.png`,await wt(s),"image/png");const o=await vt(mt(s),s.width,s.height,e,this.doc.title.trim()||"PAP");j(`${i}.pdf`,o,"application/pdf")}}export{Pt as FlowApp}; diff --git a/website/app/assets/fr-CaaqCPCw.js b/website/app/assets/fr-yaOEtLAD.js similarity index 98% rename from website/app/assets/fr-CaaqCPCw.js rename to website/app/assets/fr-yaOEtLAD.js index 472bede5..8eb33466 100644 --- a/website/app/assets/fr-CaaqCPCw.js +++ b/website/app/assets/fr-yaOEtLAD.js @@ -49,6 +49,7 @@ const e=`/* Textes propres à la version web. Tout le reste provient des Localiz "web_sim_file_not_found_fmt" = "Il n’existe aucun fichier nommé %@."; "web_sim_end_of_file_fmt" = "Le fichier %@ n’a plus de ligne."; "web_sim_null_value_fmt" = "%@ vaut null."; +"web_sim_unknown_variable_case_fmt" = "Variable inconnue : %1$@. Java distingue majuscules et minuscules : vouliez-vous dire %2$@ ?"; "web_sim_written_file_fmt" = "%@ (enregistré)"; "web_site_home" = "Accueil"; "web_site_imprint" = "Mentions légales"; @@ -96,6 +97,7 @@ const e=`/* Textes propres à la version web. Tout le reste provient des Localiz "web_parse_unknown_type" = "Java ne connaît pas ce type de données. Vouliez-vous dire %@ ?"; "web_quickfix_insert_fmt" = "Suggestion : insérer %@"; "web_quickfix_replace_fmt" = "Suggestion : %1$@ au lieu de %2$@"; +"web_parse_wrong_case" = "Java distingue majuscules et minuscules. La bonne écriture est %@."; "web_editor_title" = "Diagramme"; "web_editor_show" = "Afficher le diagramme"; "web_editor_hide" = "Masquer le diagramme"; diff --git a/website/app/assets/he-B33U6L6O.js b/website/app/assets/he-DhhDsw0I.js similarity index 97% rename from website/app/assets/he-B33U6L6O.js rename to website/app/assets/he-DhhDsw0I.js index ec3bf8b1..4639da67 100644 --- a/website/app/assets/he-B33U6L6O.js +++ b/website/app/assets/he-DhhDsw0I.js @@ -49,6 +49,7 @@ const e=`/* טקסטים שקיימים רק בגרסת הרשת. כל השאר "web_sim_file_not_found_fmt" = "אין קובץ בשם %@."; "web_sim_end_of_file_fmt" = "בקובץ %@ אין עוד שורות."; "web_sim_null_value_fmt" = "%@ הוא null."; +"web_sim_unknown_variable_case_fmt" = "משתנה לא מוכר: %1$@. Java מבחינה בין אותיות גדולות לקטנות: האם התכוונת ל־%2$@?"; "web_sim_written_file_fmt" = "%@ (נשמר)"; "web_site_home" = "דף הבית"; "web_site_imprint" = "פרטי המפרסם"; @@ -96,6 +97,7 @@ const e=`/* טקסטים שקיימים רק בגרסת הרשת. כל השאר "web_parse_unknown_type" = "Java לא מכירה את סוג הנתונים הזה. האם התכוונת ל-%@?"; "web_quickfix_insert_fmt" = "הצעה: להוסיף %@"; "web_quickfix_replace_fmt" = "הצעה: %1$@ במקום %2$@"; +"web_parse_wrong_case" = "Java מבחינה בין אותיות גדולות לקטנות. הנכון הוא %@."; "web_editor_title" = "תרשים"; "web_editor_show" = "הצגת התרשים"; "web_editor_hide" = "הסתרת התרשים"; diff --git a/website/app/assets/index-BzOyQMjP.js b/website/app/assets/index-BzOyQMjP.js index 2ad6898b..e3af59fa 100644 --- a/website/app/assets/index-BzOyQMjP.js +++ b/website/app/assets/index-BzOyQMjP.js @@ -1,75 +1,75 @@ -var k2=Object.defineProperty;var S2=(i,e,t)=>e in i?k2(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var y=(i,e,t)=>S2(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=t(a);fetch(a.href,s)}})();const T2="modulepreload",_2=function(i,e){return new URL(i,e).href},nu={},K=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let r=function(m){return Promise.all(m.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=r(t.map(m=>{if(m=_2(m,n),m in nu)return;nu[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const b=o[f];if(b.href===m&&(!c||b.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":T2,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,b)=>{g.addEventListener("load",f),g.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${m}`)))})}))}function s(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return a.then(r=>{for(const o of r||[])o.status==="rejected"&&s(o.reason);return e().catch(s)})};var S=(i=>(i[i.anweisung=0]="anweisung",i[i.verzweigung=1]="verzweigung",i[i.fallauswahl=2]="fallauswahl",i[i.forSchleife=3]="forSchleife",i[i.whileSchleife=4]="whileSchleife",i[i.doUntilSchleife=5]="doUntilSchleife",i[i.endlosschleife=6]="endlosschleife",i[i.aussprung=7]="aussprung",i[i.aufruf=8]="aufruf",i[i.leerElement=9]="leerElement",i))(S||{});function C2(i){return i===3||i===4||i===5||i===6}function A2(i){return i===1||i===2}function Ce(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function j2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case S.forSchleife:return e.length<=1?e:[P2(e)];case S.verzweigung:return ea("if",e);case S.whileSchleife:return ea("while",e);case S.doUntilSchleife:return ea("while",O2(e));case S.fallauswahl:return ea("switch",e);default:return e}}function O2(i){if(i.length===0)return i;const e=i[0].trim(),t=e.toLowerCase(),n=[...i];if(t==="until")n[0]="";else if(t.startsWith("until "))n[0]=e.slice(6).trim();else if(t.startsWith("until("))n[0]=e.slice(5);else return i;return n}function iu(i){const e=new Set(["if","for","while","until","switch"]),t=["input:","output:","print:"],n=i.trim(),a=n.toLowerCase();for(const o of t){if(a===o)return{keyword:n,rest:""};if(a.startsWith(o+" "))return{keyword:n.slice(0,o.length),rest:n.slice(o.length).trim()}}const s=n.indexOf(" ");if(s<0)return;const r=n.slice(0,s);if(e.has(r.toLowerCase()))return{keyword:r,rest:n.slice(s+1).trim()}}function ea(i,e){if(e.length===0)return e;const t=e[0].trim(),n=t.toLowerCase();if(n===i||n.startsWith(i+" "))return e;const a=[...e];return a[0]=i+" "+t,a}function P2(i){let e=[...i];for(;e.length<3;)e.push("");e=e.slice(0,3);const t=a=>{let s=a.trim();for(;s.endsWith(";");)s=s.slice(0,-1).trim();return s},n=e.map(t).join("; ").trim();return n===""?"for":"for "+n}const Qd={[S.anweisung]:"Anweisung",[S.verzweigung]:"Bedingung",[S.fallauswahl]:"Fallauswahl",[S.forSchleife]:"for 0 < i < anzahl",[S.whileSchleife]:"while …",[S.doUntilSchleife]:"while …",[S.endlosschleife]:"endless",[S.aussprung]:"break",[S.aufruf]:"Aufruf()",[S.leerElement]:"ø"};function M2(i){Object.assign(Qd,i)}function Nl(i){return j2(i)??[Qd[i.type]]}class We extends Error{}const bn=i=>structuredClone(i);function nn(){return Ce(S.anweisung,{textLines:["ø"]})}function D2(){return{caption:"",elements:[nn()]}}function Jl(i){if(i.type===S.leerElement)return!0;if(i.type===S.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function kn(i,e){const t=vt(i,e);return t!==void 0&&Jl(t)}function Gi(i,e){if(e.length===0)throw new We("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new We("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new We("Invalid element path.");return Gi(Ud(i[t],a),s)}function Ud(i,e){if(C2(i.type)){if(e!==0||!i.loopBody)throw new We("Invalid element path.");return i.loopBody}if(A2(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new We("Invalid element path.");return i.cases[e].elements}throw new We("Invalid element path.")}function Mt(i,e){const{list:t,index:n}=Gi(i.elements,e);return t[n]}function vt(i,e){try{return Mt(i,e)}catch{return}}function Mn(i,e,t){const n=bn(i),{list:a,index:s}=Gi(n.elements,e);return a[s]=bn(t),n}function G1(i,e,t){const n=bn(Mt(i,e));return n.textLines=t.length===0?[""]:t,Mn(i,e,n)}function fr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!kn(i,e):vt(i,e)!==void 0}function ki(i,e){const t=bn(i),{list:n,index:a}=Gi(t.elements,e);if(e.length===1&&n.length===1){if(Jl(n[0]))throw new We("The last root element cannot be deleted.");return n[0]=nn(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(nn()),t}function li(i,e,t,n){const a=bn(i);let s;if(e.length===0)s=a.elements;else{const r=e.slice(0,-1),o=e[e.length-1],{list:l,index:u}=Gi(a.elements,r);s=Ud(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,bn(n)),a}function $d(i,e,t){if(t.length===0)throw new We("Invalid element path.");return li(i,t.slice(0,-1),t[t.length-1],e)}function fo(i,e,t){if(t.length===0)throw new We("Invalid element path.");return li(i,t.slice(0,-1),t[t.length-1]+1,e)}function Fl(i,e){return i.lengthe[n]===t)}function Rl(i,e){if(e.length===0)return i;const t=e[e.length-1],n=e.slice(0,-1);if(i.length<=n.length||!n.every((r,o)=>i[o]===r))return i;const a=n.length;if(i[a]<=t)return i;const s=[...i];return s[a]-=1,s}const Gl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function Z2(i,e,t){if(Gl(e,t))return i;if(Fl(e,t))throw new We("Invalid element path.");const n=Mt(i,e),a=ki(i,e);return $d(a,n,Rl(t,e))}function B2(i,e,t){if(Gl(e,t))return i;if(Fl(e,t))throw new We("Invalid element path.");const n=Mt(i,e),a=ki(i,e);return fo(a,n,Rl(t,e))}function L2(i,e,t){if(!kn(i,t))throw new We("Invalid element path.");if(Gl(e,t))return i;if(Fl(e,t))throw new We("Invalid element path.");const n=Mt(i,e),a=ki(i,e);return Mn(a,Rl(t,e),n)}function W2(i,e){const t=bn(Mt(i,e)),n=t.cases;if(t.type!==S.fallauswahl||!n||n.length===0)throw new We("Invalid element path.");const a=n[n.length-1].name.toLowerCase()==="default",s=a?n.length-1:n.length,r=String(a?n.length:n.length+1);return n.splice(s,0,{name:r,elements:[nn()]}),{doc:Mn(i,e,t),path:[...e,s,0]}}function E2(i,e,t){const n=bn(Mt(i,e)),a=n.cases;if(n.type!==S.fallauswahl||!a)throw new We("Invalid element path.");if(a.length<=2)throw new We("A switch needs at least two cases.");if(t<0||t>=a.length)throw new We("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Mn(i,e,n),path:[...e,s,0]}}function N2(i,e,t,n){const a=bn(Mt(i,e)),s=a.cases;if(a.type!==S.fallauswahl||!s)throw new We("Invalid element path.");if(t<0||t>=s.length)throw new We("Invalid element path.");const r=n.trim();if(r==="")throw new We("Invalid element path.");return s[t].name=r,Mn(i,e,a)}function J2(i,e){var t;if(!(!i||i.length===0))for(let n=i.length;n>=1;n--){const a=i.slice(0,n);if(((t=vt(e,a))==null?void 0:t.type)===S.fallauswahl)return a}}function F2(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function br(i,e){if(e.elements.length!==0)return!i||!vt(e,i)?[0]:i}const Yd=i=>i!==void 0&&/\s/.test(i);function es(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function R2(i){const e=i.trim(),t=e.toLowerCase();return t.startsWith("input:")?e.slice(6).trim():t.startsWith("output:")?e.slice(7).trim():t.startsWith("print:")?e.slice(6).trim():i}function au(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function G2(i,e){const t=R2(e);switch(i){case"statement":return t;case"input":return au("input:",t);case"output":return au("output:",t)}}const Ea=i=>Yd(i[0])?i.slice(1):i;function H2(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?Ea(e.slice(6)):t.startsWith("output:")?Ea(e.slice(7)):t.startsWith("print:")?Ea(e.slice(6)):i}function su(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||Yd(n[0])||n[0]==="("))return e;const a=Ea(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function ru(i,e){if(i==="input:"||i==="output:")return H2(e);const t=su(i,e);if(i==="while"&&t===e){const n=su("until",e);if(n!==e)return n}return t}function V2(i,e){return e===""?`${i} `:`${i} ${e}`}function Xd(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function ou(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function q2(i){let e=Xd(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const Hs='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function Q2(i,e){return`${e==="bold"?700:500} ${i}px ${Hs}`}const Kd=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function U2(){if(typeof document>"u"||!document.body)return;const i="http://www.w3.org/2000/svg",e=document.createElementNS(i,"svg");e.setAttribute("aria-hidden","true"),e.setAttribute("width","0"),e.setAttribute("height","0"),e.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;overflow:hidden";const t=document.createElementNS(i,"text");if(t.setAttribute("font-family",Hs),t.style.whiteSpace="pre",e.append(t),document.body.append(e),typeof t.getComputedTextLength!="function"||typeof t.getBBox!="function"){e.remove();return}if(t.textContent="Mg",t.setAttribute("font-size","20"),!(t.getComputedTextLength()>0)){e.remove();return}return t}let xr;function eh(){return xr===void 0&&(xr=U2()??null),xr??void 0}function th(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function lu(i,e){const t=`${i}|${e}`;let n=uu.get(t);if(!n){const a=eh();if(n={ascent:i*.95,descent:i*.24},a){th(a,i,e),a.setAttribute("y","0"),a.textContent="Mg";const s=a.getBBox();s.height>0&&(n={ascent:-s.y,descent:s.height+s.y})}uu.set(t,n)}return n}const uu=new Map;function $2(){const i=eh();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(th(i,s,r),i.textContent=a,l=a===""?0:i.getComputedTextLength(),n.size>2e3&&n.clear(),n.set(o,l)),l}}const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;if(!e)return Kd;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=Q2(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const nh={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function Y2(i){return{...nh,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const ta=i=>i===S.forSchleife||i===S.whileSchleife||i===S.doUntilSchleife||i===S.endlosschleife,na=i=>i===S.fallauswahl||i===S.verzweigung;function ia(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function it(i){return{...i,frame:{...i.frame}}}class ih{constructor(e=nh,t=Kd){this.metrics=e,this.measure=t}layout(e,t={left:28,top:28}){const a=this.layoutList(e.elements,t.left,t.top,[]).map(l=>this.stretchLoopBodiesVertically(l));let s=0,r=0;const o=l=>{s=Math.max(s,l.frame.x+l.frame.width),r=Math.max(r,l.frame.y+l.frame.height),l.children.forEach(o)};return a.forEach(o),{canvasSize:{width:s+t.left,height:r+t.top},elements:a}}lineWidth(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"medium"))}lineWidthBold(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"bold"))}layoutList(e,t,n,a){let s=[],r=n;e.forEach((l,u)=>{const m=this.layoutElement(l,t,r,[...a,u]);s.push(m),r+=m.frame.height});const o=Math.max(0,...s.map(l=>l.frame.width));return o>0&&(s=s.map(l=>this.stretchNodeTreeToWidth(l,o))),s}stretchMultiwayNodeToWidth(e,t){const n=it(e),a=n.frame.width;if(!(a>0)||n.caseColumnFrames.length===0)return n;const s=t/a;n.frame.width=t;let r=n.frame.x;const o=n.caseColumnFrames.map(l=>{const u=l.width*s,m={x:r,y:l.y,width:u,height:l.height};return r+=u,m});return n.caseColumnFrames=o,n.dividerX=o.length>0?o[o.length-1].x:n.frame.x+t,n.columns&&n.columns.length===o.length&&(n.columns=n.columns.map((l,u)=>{const m=o[u];return l.map(c=>{const d=it(c);return d.frame.x=m.x,d.frame.width=m.width,this.stretchDescendantsWidths(d,m.width)})}),n.children=n.columns.flat()),n}stretchLoopChildren(e,t){const n=this.effectiveLoopBodyLeading(e),a=Math.max(0,t-n);e.children=e.children.map(s=>{const r=it(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=it(e);return n.frame.width>0?na(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,ta(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=it(e);return na(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):ta(n.element.type)?(n.frame.width=t,this.stretchLoopChildren(n,t)):(n.frame.width=t,n.children=n.children.map(a=>this.stretchDescendantsWidths(a,t))),n}stretchLoopBodiesVertically(e){const t=it(e);if(t.columns&&t.columns.length>0)return t.columns=t.columns.map(s=>s.map(r=>this.stretchLoopBodiesVertically(r))),t.children=t.columns.flat(),t;t.children=t.children.map(s=>this.stretchLoopBodiesVertically(s));const n=s=>s===S.anweisung||s===S.leerElement||s===S.aufruf||s===S.aussprung||ta(s);let a;switch(t.element.type){case S.forSchleife:case S.whileSchleife:case S.endlosschleife:{const s=t.element.type===S.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case S.doUntilSchleife:a=t.frame.y+t.frame.height-t.headerBandHeight;break}if(a!==void 0&&t.children.length>0){const s=t.children.length-1;let r=it(t.children[s]);const o=a-(r.frame.y+r.frame.height);o>.5&&n(r.element.type)&&(r.frame.height+=o,r=this.stretchLoopBodiesVertically(r),t.children=[...t.children.slice(0,s),r])}return t}headerHeight(e){const t=this.metrics,n=Math.max(1,e.textLines.length);if(e.type===S.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case S.fallauswahl:a=40;break;case S.verzweigung:a=20;break;case S.forSchleife:case S.whileSchleife:case S.endlosschleife:a=t.baseHeaderExtra+4;break;default:a=14}return a+n*t.lineHeight+e.zoomY}doUntilBodyLeadingInset(){return Math.max(20,this.lineWidthBold("do")+12)}effectiveLoopBodyLeading(e){return e.element.type===S.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return na(e)?Math.max(100,this.metrics.minSidePadding*2.45):this.metrics.minSidePadding}minWidth(e){const t=e.textLines.length===0?0:Math.max(...e.textLines.map(s=>this.lineWidth(s)));let n=t+e.zoomX+this.horizontalPaddingInsideCell(e.type);if(e.type===S.aufruf){const s=Math.max(68,this.metrics.minSidePadding*1.7),r=Math.max(8,this.metrics.minSidePadding*.2);n=Math.max(n,t+e.zoomX+s+r)}const a=e.type===S.leerElement?76:e.type===S.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(na(e.type))return this.layoutMultiway(e,t,n,a);if(ta(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return ia(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=b=>b.reduce((x,v)=>x+v.frame.height,0),r=b=>Math.max(0,...b.map(x=>x.frame.width)),o=e.loopBody??[];if(e.type===S.doUntilSchleife){const b=this.doUntilBodyLeadingInset(),x=e.zoomY,v=this.headerHeight(e),w=this.layoutList(o,t+b,n+x,[...a,0]),z=Math.max(this.minWidth(e),r(w)+b),I=s(w)+v+x,k=Math.max(0,z-b),T=ia(a,e,{x:t,y:n,width:z,height:I},v);return T.topBandHeight=x,T.loopBodyLeadingInset=b,T.children=w.map(C=>{const M=it(C);return M.frame.x=t+b,M.frame.width=k,this.stretchDescendantsWidths(M,k)}),T}const l=20,u=this.headerHeight(e),m=e.type===S.endlosschleife?40:0,c=this.layoutList(o,t+l,n+u,[...a,0]),d=Math.max(this.minWidth(e),r(c)+l),h=u+m+s(c),g=Math.max(0,d-l),f=ia(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(b=>{const x=it(b);return x.frame.x=t+l,x.frame.width=g,this.stretchDescendantsWidths(x,g)}),f}layoutMultiway(e,t,n,a){const s=this.headerHeight(e),r=e.cases??[],o=Math.max(1,r.length),l=Math.max(this.minWidth(e)/o,132);let u=[],m=[],c=0,d=0;if(r.forEach((b,x)=>{const v=t+c,w=this.layoutList(b.elements,v,n+s,[...a,x]),z=Math.max(0,...w.map(T=>T.frame.width));let I;e.type===S.verzweigung&&o===2?I=Math.max(z,(x===0?"true":"false").length*this.metrics.charWidth+24):I=Math.max(l,z);const k=w.reduce((T,C)=>T+C.frame.height,0);d=Math.max(d,k),u.push({x:v,y:n+s,width:I,height:k}),m.push(w.map(T=>{const C=it(T);return C.frame.x=v,C.frame.width=I,this.stretchDescendantsWidths(C,I)})),c+=I}),e.type===S.verzweigung&&o===2&&u.length===2){const b=Math.max(u[0].width,u[1].width),x=t,v=t+b,w=v-u[1].x;u[0]={...u[0],x,width:b},u[1]={...u[1],x:v,width:b},c=b*2,m[0]=m[0].map(z=>{const I=it(z);return I.frame.x=x,I.frame.width=b,this.stretchDescendantsWidths(I,b)}),m[1]=m[1].map(z=>{const I=bo(z,w);return I.frame.width=b,this.stretchDescendantsWidths(I,b)})}if(m.length>0){const b=X2(m,n+s);m=b.columns.map(x=>x.map(v=>this.stretchLoopBodiesVertically(v)));for(let x=0;x0?Math.max(...b.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const b=h/c;let x=t;const v=[],w=[];u.forEach((z,I)=>{const k=z.width*b;w.push(m[I].map(T=>{const C=it(T);return C.frame.x=x,C.frame.width=k,this.stretchDescendantsWidths(C,k)})),v.push({x,y:z.y,width:k,height:z.height}),x+=k}),u=v,m=w,c=x-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=ia(a,e,{x:t,y:n,width:h,height:s+d},s);return f.caseColumnFrames=u,f.dividerX=u.length>0?u[u.length-1].x:t+c-g,f.dividerYInset=e.type===S.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function ah(i,e){if(Math.abs(e)<=1e-4)return i;const t=it(i),n=a=>{const s=it(a);return s.frame.y+=e,ah(s,e)};return t.columns?(t.columns=t.columns.map(a=>a.map(n)),t.children=t.columns.flat()):t.children=t.children.map(n),t}function bo(i,e){if(Math.abs(e)<=1e-4)return i;const t=it(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>bo(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>bo(n,e)),t}function X2(i,e){if(i.length<2)return{columns:i,columnHeights:i.map(u=>u.reduce((m,c)=>m+c.frame.height,0))};const t=.5,n=[e];for(const u of i)for(const m of u)n.push(m.frame.y+m.frame.height);const a=Math.max(...n);n.push(a),n.sort((u,m)=>u-m);let s=[];for(const u of n)s.length>0&&Math.abs(u-s[s.length-1])<=t||s.push(u);(s.length===0||Math.abs(s[0]-e)>t)&&s.unshift(e),s.length===0?s=[e,a]:s[s.length-1]{let c=Math.max(0,m);for(;c{let g=it(d);const f=s[c],b=d.frame.y+d.frame.height,x=h===u.length-1?s.length-1:r(b,c+1),v=s[x],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,v-f),g=ah(g,w),m.push(g),c=x}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const K2=[{item:"anweisung",label:"Anweisung"},{item:"verzweigung",label:"Verzweigung"},{item:"fallauswahl",label:"Fallauswahl"},{item:"forZaehlSchleife",label:"For-Schleife"},{item:"whileSchleife",label:"While-Schleife"},{item:"doUntilSchleife",label:"Do-while-Schleife"},{item:"endlosschleife",label:"Endlosschleife"},{item:"aufruf",label:"Aufruf"},{item:"aussprung",label:"Aussprung"}];function mu(i){const e=nn;switch(i){case"anweisung":return Ce(S.anweisung);case"verzweigung":return Ce(S.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return Ce(S.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return Ce(S.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return Ce(S.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return Ce(S.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return Ce(S.endlosschleife,{loopBody:[e()]});case"aussprung":return Ce(S.aussprung);case"aufruf":return Ce(S.aufruf)}}function ts(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function xo(i){const e=i.split(";").filter(n=>n!=="");if(e.length===1&&e[0]==="-1")return"";let t="";for(const n of e){if(!/^[+-]?\d+$/.test(n))continue;const a=Number(n);a!==-1&&(a<0||a>1114111||a>=55296&&a<=57343||(t+=String.fromCodePoint(a)))}return t}class cu extends Error{}function Hl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new cu("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new cu("Invalid XML: root element is not .");const n={caption:hu(t,"caption")??"",elements:yo(t)},a=hu(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=ui(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=ui(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function m1(i){const e=(n,a)=>a===void 0?"":` ${n}="${sh(a)}"`;let t=` -`;t+=" +var k2=Object.defineProperty;var S2=(i,e,t)=>e in i?k2(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var y=(i,e,t)=>S2(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=t(a);fetch(a.href,s)}})();const T2="modulepreload",_2=function(i,e){return new URL(i,e).href},nu={},K=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let r=function(m){return Promise.all(m.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=r(t.map(m=>{if(m=_2(m,n),m in nu)return;nu[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const x=o[f];if(x.href===m&&(!c||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":T2,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,x)=>{g.addEventListener("load",f),g.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${m}`)))})}))}function s(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return a.then(r=>{for(const o of r||[])o.status==="rejected"&&s(o.reason);return e().catch(s)})};var S=(i=>(i[i.anweisung=0]="anweisung",i[i.verzweigung=1]="verzweigung",i[i.fallauswahl=2]="fallauswahl",i[i.forSchleife=3]="forSchleife",i[i.whileSchleife=4]="whileSchleife",i[i.doUntilSchleife=5]="doUntilSchleife",i[i.endlosschleife=6]="endlosschleife",i[i.aussprung=7]="aussprung",i[i.aufruf=8]="aufruf",i[i.leerElement=9]="leerElement",i))(S||{});function j2(i){return i===3||i===4||i===5||i===6}function C2(i){return i===1||i===2}function je(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function A2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case S.forSchleife:return e.length<=1?e:[O2(e)];case S.verzweigung:return ea("if",e);case S.whileSchleife:return ea("while",e);case S.doUntilSchleife:return ea("while",P2(e));case S.fallauswahl:return ea("switch",e);default:return e}}function P2(i){if(i.length===0)return i;const e=i[0].trim(),t=e.toLowerCase(),n=[...i];if(t==="until")n[0]="";else if(t.startsWith("until "))n[0]=e.slice(6).trim();else if(t.startsWith("until("))n[0]=e.slice(5);else return i;return n}function iu(i){const e=new Set(["if","for","while","until","switch"]),t=["input:","output:","print:"],n=i.trim(),a=n.toLowerCase();for(const o of t){if(a===o)return{keyword:n,rest:""};if(a.startsWith(o+" "))return{keyword:n.slice(0,o.length),rest:n.slice(o.length).trim()}}const s=n.indexOf(" ");if(s<0)return;const r=n.slice(0,s);if(e.has(r.toLowerCase()))return{keyword:r,rest:n.slice(s+1).trim()}}function ea(i,e){if(e.length===0)return e;const t=e[0].trim(),n=t.toLowerCase();if(n===i||n.startsWith(i+" "))return e;const a=[...e];return a[0]=i+" "+t,a}function O2(i){let e=[...i];for(;e.length<3;)e.push("");e=e.slice(0,3);const t=a=>{let s=a.trim();for(;s.endsWith(";");)s=s.slice(0,-1).trim();return s},n=e.map(t).join("; ").trim();return n===""?"for":"for "+n}const Qd={[S.anweisung]:"Anweisung",[S.verzweigung]:"Bedingung",[S.fallauswahl]:"Fallauswahl",[S.forSchleife]:"for 0 < i < anzahl",[S.whileSchleife]:"while …",[S.doUntilSchleife]:"while …",[S.endlosschleife]:"endless",[S.aussprung]:"break",[S.aufruf]:"Aufruf()",[S.leerElement]:"ø"};function D2(i){Object.assign(Qd,i)}function Nl(i){return A2(i)??[Qd[i.type]]}class We extends Error{}const xn=i=>structuredClone(i);function nn(){return je(S.anweisung,{textLines:["ø"]})}function M2(){return{caption:"",elements:[nn()]}}function Fl(i){if(i.type===S.leerElement)return!0;if(i.type===S.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function kn(i,e){const t=vt(i,e);return t!==void 0&&Fl(t)}function Gi(i,e){if(e.length===0)throw new We("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new We("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new We("Invalid element path.");return Gi(Ud(i[t],a),s)}function Ud(i,e){if(j2(i.type)){if(e!==0||!i.loopBody)throw new We("Invalid element path.");return i.loopBody}if(C2(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new We("Invalid element path.");return i.cases[e].elements}throw new We("Invalid element path.")}function Dt(i,e){const{list:t,index:n}=Gi(i.elements,e);return t[n]}function vt(i,e){try{return Dt(i,e)}catch{return}}function Dn(i,e,t){const n=xn(i),{list:a,index:s}=Gi(n.elements,e);return a[s]=xn(t),n}function H1(i,e,t){const n=xn(Dt(i,e));return n.textLines=t.length===0?[""]:t,Dn(i,e,n)}function xr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!kn(i,e):vt(i,e)!==void 0}function ki(i,e){const t=xn(i),{list:n,index:a}=Gi(t.elements,e);if(e.length===1&&n.length===1){if(Fl(n[0]))throw new We("The last root element cannot be deleted.");return n[0]=nn(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(nn()),t}function li(i,e,t,n){const a=xn(i);let s;if(e.length===0)s=a.elements;else{const r=e.slice(0,-1),o=e[e.length-1],{list:l,index:u}=Gi(a.elements,r);s=Ud(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,xn(n)),a}function $d(i,e,t){if(t.length===0)throw new We("Invalid element path.");return li(i,t.slice(0,-1),t[t.length-1],e)}function fo(i,e,t){if(t.length===0)throw new We("Invalid element path.");return li(i,t.slice(0,-1),t[t.length-1]+1,e)}function Jl(i,e){return i.lengthe[n]===t)}function Rl(i,e){if(e.length===0)return i;const t=e[e.length-1],n=e.slice(0,-1);if(i.length<=n.length||!n.every((r,o)=>i[o]===r))return i;const a=n.length;if(i[a]<=t)return i;const s=[...i];return s[a]-=1,s}const Gl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function B2(i,e,t){if(Gl(e,t))return i;if(Jl(e,t))throw new We("Invalid element path.");const n=Dt(i,e),a=ki(i,e);return $d(a,n,Rl(t,e))}function Z2(i,e,t){if(Gl(e,t))return i;if(Jl(e,t))throw new We("Invalid element path.");const n=Dt(i,e),a=ki(i,e);return fo(a,n,Rl(t,e))}function L2(i,e,t){if(!kn(i,t))throw new We("Invalid element path.");if(Gl(e,t))return i;if(Jl(e,t))throw new We("Invalid element path.");const n=Dt(i,e),a=ki(i,e);return Dn(a,Rl(t,e),n)}function W2(i,e){const t=xn(Dt(i,e)),n=t.cases;if(t.type!==S.fallauswahl||!n||n.length===0)throw new We("Invalid element path.");const a=n[n.length-1].name.toLowerCase()==="default",s=a?n.length-1:n.length,r=String(a?n.length:n.length+1);return n.splice(s,0,{name:r,elements:[nn()]}),{doc:Dn(i,e,t),path:[...e,s,0]}}function E2(i,e,t){const n=xn(Dt(i,e)),a=n.cases;if(n.type!==S.fallauswahl||!a)throw new We("Invalid element path.");if(a.length<=2)throw new We("A switch needs at least two cases.");if(t<0||t>=a.length)throw new We("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Dn(i,e,n),path:[...e,s,0]}}function N2(i,e,t,n){const a=xn(Dt(i,e)),s=a.cases;if(a.type!==S.fallauswahl||!s)throw new We("Invalid element path.");if(t<0||t>=s.length)throw new We("Invalid element path.");const r=n.trim();if(r==="")throw new We("Invalid element path.");return s[t].name=r,Dn(i,e,a)}function F2(i,e){var t;if(!(!i||i.length===0))for(let n=i.length;n>=1;n--){const a=i.slice(0,n);if(((t=vt(e,a))==null?void 0:t.type)===S.fallauswahl)return a}}function J2(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function br(i,e){if(e.elements.length!==0)return!i||!vt(e,i)?[0]:i}const Yd=i=>i!==void 0&&/\s/.test(i);function ts(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function R2(i){const e=i.trim(),t=e.toLowerCase();return t.startsWith("input:")?e.slice(6).trim():t.startsWith("output:")?e.slice(7).trim():t.startsWith("print:")?e.slice(6).trim():i}function au(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function G2(i,e){const t=R2(e);switch(i){case"statement":return t;case"input":return au("input:",t);case"output":return au("output:",t)}}const Na=i=>Yd(i[0])?i.slice(1):i;function H2(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?Na(e.slice(6)):t.startsWith("output:")?Na(e.slice(7)):t.startsWith("print:")?Na(e.slice(6)):i}function su(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||Yd(n[0])||n[0]==="("))return e;const a=Na(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function ru(i,e){if(i==="input:"||i==="output:")return H2(e);const t=su(i,e);if(i==="while"&&t===e){const n=su("until",e);if(n!==e)return n}return t}function V2(i,e){return e===""?`${i} `:`${i} ${e}`}function Xd(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function ou(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function q2(i){let e=Xd(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const Vs='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function Q2(i,e){return`${e==="bold"?700:500} ${i}px ${Vs}`}const Kd=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function U2(){if(typeof document>"u"||!document.body)return;const i="http://www.w3.org/2000/svg",e=document.createElementNS(i,"svg");e.setAttribute("aria-hidden","true"),e.setAttribute("width","0"),e.setAttribute("height","0"),e.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;overflow:hidden";const t=document.createElementNS(i,"text");if(t.setAttribute("font-family",Vs),t.style.whiteSpace="pre",e.append(t),document.body.append(e),typeof t.getComputedTextLength!="function"||typeof t.getBBox!="function"){e.remove();return}if(t.textContent="Mg",t.setAttribute("font-size","20"),!(t.getComputedTextLength()>0)){e.remove();return}return t}let vr;function eh(){return vr===void 0&&(vr=U2()??null),vr??void 0}function th(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function lu(i,e){const t=`${i}|${e}`;let n=uu.get(t);if(!n){const a=eh();if(n={ascent:i*.95,descent:i*.24},a){th(a,i,e),a.setAttribute("y","0"),a.textContent="Mg";const s=a.getBBox();s.height>0&&(n={ascent:-s.y,descent:s.height+s.y})}uu.set(t,n)}return n}const uu=new Map;function $2(){const i=eh();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(th(i,s,r),i.textContent=a,l=a===""?0:i.getComputedTextLength(),n.size>2e3&&n.clear(),n.set(o,l)),l}}const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;if(!e)return Kd;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=Q2(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const nh={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function Y2(i){return{...nh,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const ta=i=>i===S.forSchleife||i===S.whileSchleife||i===S.doUntilSchleife||i===S.endlosschleife,na=i=>i===S.fallauswahl||i===S.verzweigung;function ia(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function it(i){return{...i,frame:{...i.frame}}}class ih{constructor(e=nh,t=Kd){this.metrics=e,this.measure=t}layout(e,t={left:28,top:28}){const a=this.layoutList(e.elements,t.left,t.top,[]).map(l=>this.stretchLoopBodiesVertically(l));let s=0,r=0;const o=l=>{s=Math.max(s,l.frame.x+l.frame.width),r=Math.max(r,l.frame.y+l.frame.height),l.children.forEach(o)};return a.forEach(o),{canvasSize:{width:s+t.left,height:r+t.top},elements:a}}lineWidth(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"medium"))}lineWidthBold(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"bold"))}layoutList(e,t,n,a){let s=[],r=n;e.forEach((l,u)=>{const m=this.layoutElement(l,t,r,[...a,u]);s.push(m),r+=m.frame.height});const o=Math.max(0,...s.map(l=>l.frame.width));return o>0&&(s=s.map(l=>this.stretchNodeTreeToWidth(l,o))),s}stretchMultiwayNodeToWidth(e,t){const n=it(e),a=n.frame.width;if(!(a>0)||n.caseColumnFrames.length===0)return n;const s=t/a;n.frame.width=t;let r=n.frame.x;const o=n.caseColumnFrames.map(l=>{const u=l.width*s,m={x:r,y:l.y,width:u,height:l.height};return r+=u,m});return n.caseColumnFrames=o,n.dividerX=o.length>0?o[o.length-1].x:n.frame.x+t,n.columns&&n.columns.length===o.length&&(n.columns=n.columns.map((l,u)=>{const m=o[u];return l.map(c=>{const d=it(c);return d.frame.x=m.x,d.frame.width=m.width,this.stretchDescendantsWidths(d,m.width)})}),n.children=n.columns.flat()),n}stretchLoopChildren(e,t){const n=this.effectiveLoopBodyLeading(e),a=Math.max(0,t-n);e.children=e.children.map(s=>{const r=it(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=it(e);return n.frame.width>0?na(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,ta(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=it(e);return na(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):ta(n.element.type)?(n.frame.width=t,this.stretchLoopChildren(n,t)):(n.frame.width=t,n.children=n.children.map(a=>this.stretchDescendantsWidths(a,t))),n}stretchLoopBodiesVertically(e){const t=it(e);if(t.columns&&t.columns.length>0)return t.columns=t.columns.map(s=>s.map(r=>this.stretchLoopBodiesVertically(r))),t.children=t.columns.flat(),t;t.children=t.children.map(s=>this.stretchLoopBodiesVertically(s));const n=s=>s===S.anweisung||s===S.leerElement||s===S.aufruf||s===S.aussprung||ta(s);let a;switch(t.element.type){case S.forSchleife:case S.whileSchleife:case S.endlosschleife:{const s=t.element.type===S.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case S.doUntilSchleife:a=t.frame.y+t.frame.height-t.headerBandHeight;break}if(a!==void 0&&t.children.length>0){const s=t.children.length-1;let r=it(t.children[s]);const o=a-(r.frame.y+r.frame.height);o>.5&&n(r.element.type)&&(r.frame.height+=o,r=this.stretchLoopBodiesVertically(r),t.children=[...t.children.slice(0,s),r])}return t}headerHeight(e){const t=this.metrics,n=Math.max(1,e.textLines.length);if(e.type===S.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case S.fallauswahl:a=40;break;case S.verzweigung:a=20;break;case S.forSchleife:case S.whileSchleife:case S.endlosschleife:a=t.baseHeaderExtra+4;break;default:a=14}return a+n*t.lineHeight+e.zoomY}doUntilBodyLeadingInset(){return Math.max(20,this.lineWidthBold("do")+12)}effectiveLoopBodyLeading(e){return e.element.type===S.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return na(e)?Math.max(100,this.metrics.minSidePadding*2.45):this.metrics.minSidePadding}minWidth(e){const t=e.textLines.length===0?0:Math.max(...e.textLines.map(s=>this.lineWidth(s)));let n=t+e.zoomX+this.horizontalPaddingInsideCell(e.type);if(e.type===S.aufruf){const s=Math.max(68,this.metrics.minSidePadding*1.7),r=Math.max(8,this.metrics.minSidePadding*.2);n=Math.max(n,t+e.zoomX+s+r)}const a=e.type===S.leerElement?76:e.type===S.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(na(e.type))return this.layoutMultiway(e,t,n,a);if(ta(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return ia(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=x=>x.reduce((b,v)=>b+v.frame.height,0),r=x=>Math.max(0,...x.map(b=>b.frame.width)),o=e.loopBody??[];if(e.type===S.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,v=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),z=Math.max(this.minWidth(e),r(w)+x),I=s(w)+v+b,k=Math.max(0,z-x),T=ia(a,e,{x:t,y:n,width:z,height:I},v);return T.topBandHeight=b,T.loopBodyLeadingInset=x,T.children=w.map(j=>{const D=it(j);return D.frame.x=t+x,D.frame.width=k,this.stretchDescendantsWidths(D,k)}),T}const l=20,u=this.headerHeight(e),m=e.type===S.endlosschleife?40:0,c=this.layoutList(o,t+l,n+u,[...a,0]),d=Math.max(this.minWidth(e),r(c)+l),h=u+m+s(c),g=Math.max(0,d-l),f=ia(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=it(x);return b.frame.x=t+l,b.frame.width=g,this.stretchDescendantsWidths(b,g)}),f}layoutMultiway(e,t,n,a){const s=this.headerHeight(e),r=e.cases??[],o=Math.max(1,r.length),l=Math.max(this.minWidth(e)/o,132);let u=[],m=[],c=0,d=0;if(r.forEach((x,b)=>{const v=t+c,w=this.layoutList(x.elements,v,n+s,[...a,b]),z=Math.max(0,...w.map(T=>T.frame.width));let I;e.type===S.verzweigung&&o===2?I=Math.max(z,(b===0?"true":"false").length*this.metrics.charWidth+24):I=Math.max(l,z);const k=w.reduce((T,j)=>T+j.frame.height,0);d=Math.max(d,k),u.push({x:v,y:n+s,width:I,height:k}),m.push(w.map(T=>{const j=it(T);return j.frame.x=v,j.frame.width=I,this.stretchDescendantsWidths(j,I)})),c+=I}),e.type===S.verzweigung&&o===2&&u.length===2){const x=Math.max(u[0].width,u[1].width),b=t,v=t+x,w=v-u[1].x;u[0]={...u[0],x:b,width:x},u[1]={...u[1],x:v,width:x},c=x*2,m[0]=m[0].map(z=>{const I=it(z);return I.frame.x=b,I.frame.width=x,this.stretchDescendantsWidths(I,x)}),m[1]=m[1].map(z=>{const I=xo(z,w);return I.frame.width=x,this.stretchDescendantsWidths(I,x)})}if(m.length>0){const x=X2(m,n+s);m=x.columns.map(b=>b.map(v=>this.stretchLoopBodiesVertically(v)));for(let b=0;b0?Math.max(...x.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const x=h/c;let b=t;const v=[],w=[];u.forEach((z,I)=>{const k=z.width*x;w.push(m[I].map(T=>{const j=it(T);return j.frame.x=b,j.frame.width=k,this.stretchDescendantsWidths(j,k)})),v.push({x:b,y:z.y,width:k,height:z.height}),b+=k}),u=v,m=w,c=b-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=ia(a,e,{x:t,y:n,width:h,height:s+d},s);return f.caseColumnFrames=u,f.dividerX=u.length>0?u[u.length-1].x:t+c-g,f.dividerYInset=e.type===S.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function ah(i,e){if(Math.abs(e)<=1e-4)return i;const t=it(i),n=a=>{const s=it(a);return s.frame.y+=e,ah(s,e)};return t.columns?(t.columns=t.columns.map(a=>a.map(n)),t.children=t.columns.flat()):t.children=t.children.map(n),t}function xo(i,e){if(Math.abs(e)<=1e-4)return i;const t=it(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>xo(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>xo(n,e)),t}function X2(i,e){if(i.length<2)return{columns:i,columnHeights:i.map(u=>u.reduce((m,c)=>m+c.frame.height,0))};const t=.5,n=[e];for(const u of i)for(const m of u)n.push(m.frame.y+m.frame.height);const a=Math.max(...n);n.push(a),n.sort((u,m)=>u-m);let s=[];for(const u of n)s.length>0&&Math.abs(u-s[s.length-1])<=t||s.push(u);(s.length===0||Math.abs(s[0]-e)>t)&&s.unshift(e),s.length===0?s=[e,a]:s[s.length-1]{let c=Math.max(0,m);for(;c{let g=it(d);const f=s[c],x=d.frame.y+d.frame.height,b=h===u.length-1?s.length-1:r(x,c+1),v=s[b],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,v-f),g=ah(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const K2=[{item:"anweisung",label:"Anweisung"},{item:"verzweigung",label:"Verzweigung"},{item:"fallauswahl",label:"Fallauswahl"},{item:"forZaehlSchleife",label:"For-Schleife"},{item:"whileSchleife",label:"While-Schleife"},{item:"doUntilSchleife",label:"Do-while-Schleife"},{item:"endlosschleife",label:"Endlosschleife"},{item:"aufruf",label:"Aufruf"},{item:"aussprung",label:"Aussprung"}];function mu(i){const e=nn;switch(i){case"anweisung":return je(S.anweisung);case"verzweigung":return je(S.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return je(S.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return je(S.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return je(S.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return je(S.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return je(S.endlosschleife,{loopBody:[e()]});case"aussprung":return je(S.aussprung);case"aufruf":return je(S.aufruf)}}function ns(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function bo(i){const e=i.split(";").filter(n=>n!=="");if(e.length===1&&e[0]==="-1")return"";let t="";for(const n of e){if(!/^[+-]?\d+$/.test(n))continue;const a=Number(n);a!==-1&&(a<0||a>1114111||a>=55296&&a<=57343||(t+=String.fromCodePoint(a)))}return t}class cu extends Error{}function Hl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new cu("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new cu("Invalid XML: root element is not .");const n={caption:hu(t,"caption")??"",elements:yo(t)},a=hu(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=ui(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=ui(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function m1(i){const e=(n,a)=>a===void 0?"":` ${n}="${sh(a)}"`;let t=` +`;t+=" `;for(const n of i.elements)t+=vo(n," ");return t+=` `,t}function vo(i,e){let t=`${e} -`;for(const n of i.textLines)t+=`${e} ${e3(ts(n))} +`;for(const n of i.textLines)t+=`${e} ${e3(ns(n))} `;if(i.loopBody){t+=`${e} `;for(const n of i.loopBody)t+=vo(n,e+" ");t+=`${e} -`}if(i.cases)for(const n of i.cases){t+=`${e} +`}if(i.cases)for(const n of i.cases){t+=`${e} `;for(const a of n.elements)t+=vo(a,e+" ");t+=`${e} `}return t+=`${e} -`,t}function sh(i){return i.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}function e3(i){return i.replace(/&/g,"&").replace(//g,">")}function du(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Na(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function yo(i){const e=[];for(const t of Na(i,"strelem")){const n=t3(t);n&&e.push(n)}return e}function t3(i){const e=ui(i,"typ");if(e===void 0||S[e]===void 0)return;const t={type:e,zoomX:ui(i,"zx")??0,zoomY:ui(i,"zy")??0,textLines:Na(i,"text").map(o=>xo((o.textContent??"").trim()))},n=gu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=gu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Na(i,"schleifeninhalt")[0];if(s){const o=yo(s);o.length>0&&(t.loopBody=o)}const r=Na(i,"fall").map(o=>({name:xo(o.getAttribute("fallname")??""),elements:yo(o)}));return r.length>0&&(t.cases=r),t}function hu(i,e){const t=i.getAttribute(e);return t===null?void 0:xo(t)}function ui(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function gu(i){if(i===null||!/^[+-]?\d+$/.test(i))return;const e=Number(i);if(e<-2147483648||e>2147483647)return;const t=e>>>0;return{a:t>>>24&255,r:t>>>16&255,g:t>>>8&255,b:t&255}}const n3="http://www.w3.org/2000/svg",Ee={diagramLineWidth:2,outerFrameLineWidth:2,selectionLineWidth:3.5,canvasOuterMargin:16,cellTextInsetX:18,cellTextInsetY:15,multiHeaderFirstLineY:14,branchLabelInsetX:10,fallauswahlCaseLabelBand:26,callSideBarInset:14,callTextInsetFromSideBar:20,loopBodyLeadingInset:20};function rh(i){switch(i){case S.forSchleife:case S.whileSchleife:case S.doUntilSchleife:case S.endlosschleife:return"loop";case S.verzweigung:case S.fallauswahl:return"if";default:return}}function Se(i,e={}){const t=document.createElementNS(n3,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class oh{constructor(e,t){y(this,"usesSimulationHighlight",!1);y(this,"fillsSelection",!1);this.metrics=e,this.measure=t}get lineHeight(){return this.metrics.lineHeight}get fontSize(){return this.metrics.fontSize}render(e,t,n,a=Ee.canvasOuterMargin){const s=Se("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":Hs,"font-size":this.fontSize,class:"diagram"});s.append(Se("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(Se("rect",{x:r,y:r,width:e.canvasSize.width-2*r-1,height:e.canvasSize.height-2*r-1,fill:"none",stroke:"black","stroke-width":Ee.outerFrameLineWidth}));const o=Se("g");for(const l of e.elements)this.drawNode(l,o,n,{},void 0,"method");return s.append(o),s}line(e,t){e.append(Se("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth,"stroke-linejoin":"miter"}))}strokeCellBorder(e,t,n){const a=t.x,s=t.y,r=t.x+t.width,o=t.y+t.height;if(!n.top&&!n.left&&!n.bottom&&!n.right){e.append(Se("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth}));return}n.top||this.line(e,[[a,s],[r,s]]),n.right||this.line(e,[[r,s],[r,o]]),n.bottom||this.line(e,[[r,o],[a,o]]),n.left||this.line(e,[[a,o],[a,s]])}textWidth(e){const t=iu(e);return t?this.measure(t.keyword,this.fontSize,"bold")+(t.rest===""?0:this.measure(" "+t.rest,this.fontSize,"medium")):this.measure(e,this.fontSize,"medium")}drawKeywordLine(e,t,n,a){const s=Se("text",{x:n,y:a+lu(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=iu(t);if(r){const o=Se("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=Se("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=lu(this.fontSize,s?"bold":"medium"),l=Se("text",{x:n,y:r==="top"?a+o.ascent:a-o.descent,"font-weight":s?700:500});l.style.whiteSpace="pre",l.textContent=t,e.append(l)}roofMetrics(e,t,n,a){const s=t.y+n,r=e.dividerYInset??0,o=12,l=Math.max(e.element.textLines.length,1)*this.lineHeight,u=t.y+Ee.multiHeaderFirstLineY;if(e.element.type===S.fallauswahl){const c=Math.max(Ee.fallauswahlCaseLabelBand,this.lineHeight+10),d=s-c,h=Math.min(s+r,d-8),g=Math.max(h,u+l+6);return{apex:{x:a,y:g},maxTextBottom:d-o,roofBottom:s}}const m={x:a,y:s+r};return{apex:m,maxTextBottom:m.y-o,roofBottom:s}}drawNode(e,t,n,a,s,r){var C;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===S.verzweigung||l.type===S.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&wo(e.idPath,n),g=Nl(l),f=Se("g",{"data-path":e.idPath.join(",")});t.append(f);const b=this.usesSimulationHighlight,x=l.backgroundColor,v=x&&x.a>0?`rgba(${x.r}, ${x.g}, ${x.b}, ${x.a/255})`:"white",w=h&&(b||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":v,z=rh(l.type)??(l.type===S.leerElement?r:"method"),I=Se("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&z&&I.setAttribute("class",`ns-scope ns-scope-${z}`),f.append(I),this.strokeCellBorder(f,o,a);const k=Ee.callSideBarInset;if(l.type===S.aufruf?(this.line(f,[[o.x+k,o.y],[o.x+k,m]]),this.line(f,[[u-k,o.y],[u-k,m]])):l.type===S.aussprung&&this.line(f,[[o.x+k,o.y],[o.x,o.y+o.height/2],[o.x+k,m]]),c&&e.dividerX!==void 0){const M=e.dividerX,P=this.roofMetrics(e,o,d,M),O=Math.max(g.length,1)*this.lineHeight,A=o.y+Ee.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[P.apex.x,P.apex.y],[u,o.y]]),l.type===S.fallauswahl&&this.line(f,[[o.x,P.roofBottom],[u,P.roofBottom]]);let B;A+O<=P.maxTextBottom?B=A:B=Math.max(o.y+2,P.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((E,U)=>{const ee=this.textWidth(E);let ge;if(l.type===S.verzweigung){const Ie=o.x+Ee.cellTextInsetX,fe=u-ee-Ee.cellTextInsetX;ge=Math.min(Math.max(M-ee/2,Ie),fe)}else ge=o.x+o.width/2-ee/2;this.drawKeywordLine(f,E,ge,B+U*this.lineHeight)})}else if(l.type!==S.doUntilSchleife)if(l.type===S.anweisung||l.type===S.aufruf||l.type===S.aussprung){const M=Ee.cellTextInsetX;let P=o.x+M,O=u-M;l.type===S.aufruf?(P=o.x+k+Ee.callTextInsetFromSideBar,O=u-k-Ee.callTextInsetFromSideBar):l.type===S.aussprung&&(P=o.x+k+M);const A=Math.max(0,O-P);let B=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const E of g)this.drawKeywordLine(f,E,P+(A-this.textWidth(E))/2,B),B+=this.lineHeight}else{const M=Math.max(1,g.length)*this.lineHeight;let P=s===S.doUntilSchleife?o.y+o.height/2-M/2:o.y+Ee.cellTextInsetY;for(const O of g)this.drawKeywordLine(f,O,o.x+Ee.cellTextInsetX,P),P+=this.lineHeight}e.children.forEach((M,P)=>{const O=l.type===S.doUntilSchleife&&P===0?{top:!0,left:!0}:{};this.drawNode(M,t,n,O,l.type,z)});const T=Se("g");if(t.append(T),l.type===S.doUntilSchleife){const M=((C=e.children[0])==null?void 0:C.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Ee.loopBodyLeadingInset);this.drawLabel(T,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const P=m-e.headerBandHeight;this.line(T,[[M,P],[u,P]]),this.line(T,[[M,o.y],[M,P]]);let O=P+this.metrics.doUntilFooterTopInset;for(const A of g)this.drawKeywordLine(T,A,o.x+Ee.cellTextInsetX,O),O+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const M=this.roofMetrics(e,o,d,e.dividerX),P=M.apex;e.caseColumnFrames.forEach((A,B)=>{if(B>=e.caseColumnFrames.length-1)return;const E=A.x+A.width,U=i3(E,o,P),ee=Number.isFinite(U)?Math.min(Math.max(U,o.y),m):o.y;this.line(T,[[E,m],[E,ee]])});const O=l.cases;if(O&&O.length===e.caseColumnFrames.length){const A=l.type===S.fallauswahl?M.roofBottom-6:o.y+d-8,B=Ee.branchLabelInsetX;if(l.type===S.verzweigung&&O.length===2){this.drawLabel(T,"true",o.x+B,A,!0,"bottom");const E=e.caseColumnFrames[1],U=this.measure("false",this.fontSize,"bold");this.drawLabel(T,"false",E.x+E.width-B-U,A,!0,"bottom")}else O.forEach((E,U)=>{const ee=e.caseColumnFrames[U],ge=["default","true","false"].includes(E.name.toLowerCase()),Ie=this.measure(E.name,this.fontSize,ge?"bold":"medium");this.drawLabel(T,E.name,ee.x+ee.width/2-Ie/2,A,ge,"bottom")})}}h&&T.append(Se("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:b?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Ee.selectionLineWidth}))}}function i3(i,e,t){const n=e.y;if(i<=t.x){const s=t.x-e.x;return Math.abs(s)<.5?t.y:n+(t.y-n)/s*(i-e.x)}const a=e.x+e.width-t.x;return Math.abs(a)<.5?t.y:t.y+(n-t.y)/a*(i-t.x)}function wo(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function a3(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function ns(i){var e,t;return{...i,textLines:Nl(i),loopBody:(e=i.loopBody)==null?void 0:e.map(ns),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(ns)}))}}const s3=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Español"},{code:"fr",name:"Français"},{code:"it",name:"Italiano"},{code:"pl",name:"Polski"},{code:"tr",name:"Türkçe"},{code:"ko",name:"한국어"},{code:"ja",name:"日本語"},{code:"el",name:"Ελληνικά"},{code:"uk",name:"Українська"},{code:"ar",name:"العربية"},{code:"ru",name:"Русский"},{code:"he",name:"עברית"},{code:"nl",name:"Nederlands"},{code:"sv",name:"Svenska"},{code:"da",name:"Dansk"},{code:"nb",name:"Norsk bokmål"},{code:"zh-Hans",name:"中文(简体)"},{code:"zh-Hant",name:"中文(繁體)"},{code:"pt-PT",name:"Português"},{code:"java",name:"Java (Keywords)"}],lh=["de","en","pt-PT"],uh=s3.filter(i=>lh.includes(i.code)),pu=i=>lh.includes(i),r3=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>K(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>K(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>K(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>K(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>K(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>K(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>K(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>K(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),mh=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>K(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),o3=Object.assign({"../i18n/ar.strings":()=>K(()=>import("./ar-D1A1RHrf.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>K(()=>import("./da-Dbh1SeTf.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>K(()=>import("./de-CKhRUlNq.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>K(()=>import("./el-ClnwkgcA.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>K(()=>import("./en-629h-A53.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>K(()=>import("./es-DEyVstEX.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>K(()=>import("./fr-CaaqCPCw.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>K(()=>import("./he-B33U6L6O.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>K(()=>import("./it-DtwtMU0f.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>K(()=>import("./ja-BwrnO7Oa.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>K(()=>import("./ko-Bxgot45y.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>K(()=>import("./nb-F7OeqC8H.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>K(()=>import("./nl-wUwZEWkA.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>K(()=>import("./pl-DSyPX336.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>K(()=>import("./pt-PT-Dt8PZkRv.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>K(()=>import("./ru-BiWIklxb.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>K(()=>import("./sv-CEBUMk9v.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>K(()=>import("./tr-DZ884N2u.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>K(()=>import("./uk-D7iE_cDo.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>K(()=>import("./zh-Hans-CfpA1NVl.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>K(()=>import("./zh-Hant-6rrSGbAQ.js"),[],import.meta.url).then(i=>i.default)});function Ja(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function ch(i){const e=new Map,t=i.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*\/\/.*$/gm,""),n=/"((?:[^"\\]|\\.)*)"\s*=\s*"((?:[^"\\]|\\.)*)"\s*;/g,a=s=>s.replace(/\\(u[0-9a-fA-F]{4}|.)/g,(r,o)=>o==="n"?` -`:o==="t"?" ":o.startsWith("u")&&o.length===5?String.fromCharCode(parseInt(o.slice(1),16)):o);for(const s of t.matchAll(n))e.set(a(s[1]),a(s[2]));return e}async function zo(i){const e=i==="java"?Ja(mh,"/Java.strings"):Ja(r3,`/${i}.lproj/Localizable.strings`),t=Ja(o3,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of ch(await a()))n.set(s,r);return n}let dh="en",hh=new Map,Kn=new Map;const is="appLanguageCode",Vl="visustruct.keywords";let Io=new Map,ql=!1;const l3=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function u3(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem(is)==="java";return i&&(localStorage.setItem(is,"en"),localStorage.setItem(Vl,"1")),i}catch{return!1}}function m3(){try{return localStorage.getItem(Vl)==="1"}catch{return!1}}async function gh(i,e=!0){if(i&&Io.size===0){Kn.size===0&&(Kn=await zo("en"));const t=Ja(mh,"/Java.strings");if(t)for(const[n,a]of ch(await t()))l3(n)&&a!==Kn.get(n)&&Io.set(n,a)}if(ql=i,e)try{localStorage.setItem(Vl,i?"1":"0")}catch{}}function c3(){return ql}function d3(){if(u3())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&pu(i))return i;try{const e=localStorage.getItem(is);if(e&&pu(e))return e}catch{}for(const e of navigator.languages??[navigator.language]){const t=e.toLowerCase();if(t.startsWith("pt"))return"pt-PT";const n=uh.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function ph(i,e=!0){if(Kn.size===0&&(Kn=await zo("en")),hh=i==="en"?Kn:await zo(i),dh=i,e)try{localStorage.setItem(is,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function r1(){return dh}function p(i,...e){const t=(ql?Io.get(i):void 0)??hh.get(i)??Kn.get(i)??i;if(e.length===0)return t;let n=0;return t.replace(/%(?:(\d+)\$)?[@d]/g,(a,s)=>String(e[s?Number(s)-1:n++]??""))}const as=243,h3=244,fh=40,vr=4,g3=1;function Ql(i){const e=i.length,t=as+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([as,t,e&255,e>>8,...i,n,h3])}function p3(i,e,t){const n=Array.from(new TextEncoder().encode(i));return Ql([fh,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function f3(i){if(i[0]!==fh||i.length<6)return;const e=new TextDecoder().decode(Uint8Array.from(i.slice(6))),t=/"ret"\s*:\s*([^}]*)\}/.exec(e);return t?{idx:i[2]|i[3]<<8,value:x3(t[1].trim())}:void 0}function b3(i){const e=[];for(;;){const t=i.indexOf(as);if(t<0){i.length=0;break}if(i.splice(0,t),i.length<4)break;const n=i[2]|i[3]<<8;if(i[1]!==(as+i[2]+i[3]&255)||n>4096){i.splice(0,1);continue}if(i.length/g,">")}function e3(i){return i.replace(/&/g,"&").replace(//g,">")}function du(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Fa(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function yo(i){const e=[];for(const t of Fa(i,"strelem")){const n=t3(t);n&&e.push(n)}return e}function t3(i){const e=ui(i,"typ");if(e===void 0||S[e]===void 0)return;const t={type:e,zoomX:ui(i,"zx")??0,zoomY:ui(i,"zy")??0,textLines:Fa(i,"text").map(o=>bo((o.textContent??"").trim()))},n=gu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=gu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Fa(i,"schleifeninhalt")[0];if(s){const o=yo(s);o.length>0&&(t.loopBody=o)}const r=Fa(i,"fall").map(o=>({name:bo(o.getAttribute("fallname")??""),elements:yo(o)}));return r.length>0&&(t.cases=r),t}function hu(i,e){const t=i.getAttribute(e);return t===null?void 0:bo(t)}function ui(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function gu(i){if(i===null||!/^[+-]?\d+$/.test(i))return;const e=Number(i);if(e<-2147483648||e>2147483647)return;const t=e>>>0;return{a:t>>>24&255,r:t>>>16&255,g:t>>>8&255,b:t&255}}const n3="http://www.w3.org/2000/svg",Ee={diagramLineWidth:2,outerFrameLineWidth:2,selectionLineWidth:3.5,canvasOuterMargin:16,cellTextInsetX:18,cellTextInsetY:15,multiHeaderFirstLineY:14,branchLabelInsetX:10,fallauswahlCaseLabelBand:26,callSideBarInset:14,callTextInsetFromSideBar:20,loopBodyLeadingInset:20};function rh(i){switch(i){case S.forSchleife:case S.whileSchleife:case S.doUntilSchleife:case S.endlosschleife:return"loop";case S.verzweigung:case S.fallauswahl:return"if";default:return}}function Se(i,e={}){const t=document.createElementNS(n3,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class oh{constructor(e,t){y(this,"usesSimulationHighlight",!1);y(this,"fillsSelection",!1);this.metrics=e,this.measure=t}get lineHeight(){return this.metrics.lineHeight}get fontSize(){return this.metrics.fontSize}render(e,t,n,a=Ee.canvasOuterMargin){const s=Se("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":Vs,"font-size":this.fontSize,class:"diagram"});s.append(Se("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(Se("rect",{x:r,y:r,width:e.canvasSize.width-2*r-1,height:e.canvasSize.height-2*r-1,fill:"none",stroke:"black","stroke-width":Ee.outerFrameLineWidth}));const o=Se("g");for(const l of e.elements)this.drawNode(l,o,n,{},void 0,"method");return s.append(o),s}line(e,t){e.append(Se("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth,"stroke-linejoin":"miter"}))}strokeCellBorder(e,t,n){const a=t.x,s=t.y,r=t.x+t.width,o=t.y+t.height;if(!n.top&&!n.left&&!n.bottom&&!n.right){e.append(Se("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth}));return}n.top||this.line(e,[[a,s],[r,s]]),n.right||this.line(e,[[r,s],[r,o]]),n.bottom||this.line(e,[[r,o],[a,o]]),n.left||this.line(e,[[a,o],[a,s]])}textWidth(e){const t=iu(e);return t?this.measure(t.keyword,this.fontSize,"bold")+(t.rest===""?0:this.measure(" "+t.rest,this.fontSize,"medium")):this.measure(e,this.fontSize,"medium")}drawKeywordLine(e,t,n,a){const s=Se("text",{x:n,y:a+lu(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=iu(t);if(r){const o=Se("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=Se("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=lu(this.fontSize,s?"bold":"medium"),l=Se("text",{x:n,y:r==="top"?a+o.ascent:a-o.descent,"font-weight":s?700:500});l.style.whiteSpace="pre",l.textContent=t,e.append(l)}roofMetrics(e,t,n,a){const s=t.y+n,r=e.dividerYInset??0,o=12,l=Math.max(e.element.textLines.length,1)*this.lineHeight,u=t.y+Ee.multiHeaderFirstLineY;if(e.element.type===S.fallauswahl){const c=Math.max(Ee.fallauswahlCaseLabelBand,this.lineHeight+10),d=s-c,h=Math.min(s+r,d-8),g=Math.max(h,u+l+6);return{apex:{x:a,y:g},maxTextBottom:d-o,roofBottom:s}}const m={x:a,y:s+r};return{apex:m,maxTextBottom:m.y-o,roofBottom:s}}drawNode(e,t,n,a,s,r){var j;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===S.verzweigung||l.type===S.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&wo(e.idPath,n),g=Nl(l),f=Se("g",{"data-path":e.idPath.join(",")});t.append(f);const x=this.usesSimulationHighlight,b=l.backgroundColor,v=b&&b.a>0?`rgba(${b.r}, ${b.g}, ${b.b}, ${b.a/255})`:"white",w=h&&(x||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":v,z=rh(l.type)??(l.type===S.leerElement?r:"method"),I=Se("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&z&&I.setAttribute("class",`ns-scope ns-scope-${z}`),f.append(I),this.strokeCellBorder(f,o,a);const k=Ee.callSideBarInset;if(l.type===S.aufruf?(this.line(f,[[o.x+k,o.y],[o.x+k,m]]),this.line(f,[[u-k,o.y],[u-k,m]])):l.type===S.aussprung&&this.line(f,[[o.x+k,o.y],[o.x,o.y+o.height/2],[o.x+k,m]]),c&&e.dividerX!==void 0){const D=e.dividerX,O=this.roofMetrics(e,o,d,D),P=Math.max(g.length,1)*this.lineHeight,C=o.y+Ee.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[O.apex.x,O.apex.y],[u,o.y]]),l.type===S.fallauswahl&&this.line(f,[[o.x,O.roofBottom],[u,O.roofBottom]]);let Z;C+P<=O.maxTextBottom?Z=C:Z=Math.max(o.y+2,O.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((E,U)=>{const ee=this.textWidth(E);let ge;if(l.type===S.verzweigung){const Ie=o.x+Ee.cellTextInsetX,fe=u-ee-Ee.cellTextInsetX;ge=Math.min(Math.max(D-ee/2,Ie),fe)}else ge=o.x+o.width/2-ee/2;this.drawKeywordLine(f,E,ge,Z+U*this.lineHeight)})}else if(l.type!==S.doUntilSchleife)if(l.type===S.anweisung||l.type===S.aufruf||l.type===S.aussprung){const D=Ee.cellTextInsetX;let O=o.x+D,P=u-D;l.type===S.aufruf?(O=o.x+k+Ee.callTextInsetFromSideBar,P=u-k-Ee.callTextInsetFromSideBar):l.type===S.aussprung&&(O=o.x+k+D);const C=Math.max(0,P-O);let Z=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const E of g)this.drawKeywordLine(f,E,O+(C-this.textWidth(E))/2,Z),Z+=this.lineHeight}else{const D=Math.max(1,g.length)*this.lineHeight;let O=s===S.doUntilSchleife?o.y+o.height/2-D/2:o.y+Ee.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Ee.cellTextInsetX,O),O+=this.lineHeight}e.children.forEach((D,O)=>{const P=l.type===S.doUntilSchleife&&O===0?{top:!0,left:!0}:{};this.drawNode(D,t,n,P,l.type,z)});const T=Se("g");if(t.append(T),l.type===S.doUntilSchleife){const D=((j=e.children[0])==null?void 0:j.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Ee.loopBodyLeadingInset);this.drawLabel(T,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const O=m-e.headerBandHeight;this.line(T,[[D,O],[u,O]]),this.line(T,[[D,o.y],[D,O]]);let P=O+this.metrics.doUntilFooterTopInset;for(const C of g)this.drawKeywordLine(T,C,o.x+Ee.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const D=this.roofMetrics(e,o,d,e.dividerX),O=D.apex;e.caseColumnFrames.forEach((C,Z)=>{if(Z>=e.caseColumnFrames.length-1)return;const E=C.x+C.width,U=i3(E,o,O),ee=Number.isFinite(U)?Math.min(Math.max(U,o.y),m):o.y;this.line(T,[[E,m],[E,ee]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const C=l.type===S.fallauswahl?D.roofBottom-6:o.y+d-8,Z=Ee.branchLabelInsetX;if(l.type===S.verzweigung&&P.length===2){this.drawLabel(T,"true",o.x+Z,C,!0,"bottom");const E=e.caseColumnFrames[1],U=this.measure("false",this.fontSize,"bold");this.drawLabel(T,"false",E.x+E.width-Z-U,C,!0,"bottom")}else P.forEach((E,U)=>{const ee=e.caseColumnFrames[U],ge=["default","true","false"].includes(E.name.toLowerCase()),Ie=this.measure(E.name,this.fontSize,ge?"bold":"medium");this.drawLabel(T,E.name,ee.x+ee.width/2-Ie/2,C,ge,"bottom")})}}h&&T.append(Se("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:x?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Ee.selectionLineWidth}))}}function i3(i,e,t){const n=e.y;if(i<=t.x){const s=t.x-e.x;return Math.abs(s)<.5?t.y:n+(t.y-n)/s*(i-e.x)}const a=e.x+e.width-t.x;return Math.abs(a)<.5?t.y:t.y+(n-t.y)/a*(i-t.x)}function wo(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function a3(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function is(i){var e,t;return{...i,textLines:Nl(i),loopBody:(e=i.loopBody)==null?void 0:e.map(is),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(is)}))}}const s3=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Español"},{code:"fr",name:"Français"},{code:"it",name:"Italiano"},{code:"pl",name:"Polski"},{code:"tr",name:"Türkçe"},{code:"ko",name:"한국어"},{code:"ja",name:"日本語"},{code:"el",name:"Ελληνικά"},{code:"uk",name:"Українська"},{code:"ar",name:"العربية"},{code:"ru",name:"Русский"},{code:"he",name:"עברית"},{code:"nl",name:"Nederlands"},{code:"sv",name:"Svenska"},{code:"da",name:"Dansk"},{code:"nb",name:"Norsk bokmål"},{code:"zh-Hans",name:"中文(简体)"},{code:"zh-Hant",name:"中文(繁體)"},{code:"pt-PT",name:"Português"},{code:"java",name:"Java (Keywords)"}],lh=["de","en","pt-PT"],uh=s3.filter(i=>lh.includes(i.code)),pu=i=>lh.includes(i),r3=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>K(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>K(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>K(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>K(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>K(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>K(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>K(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>K(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),mh=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>K(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),o3=Object.assign({"../i18n/ar.strings":()=>K(()=>import("./ar-uZ_mV_Na.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>K(()=>import("./da-C8aaC9z5.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>K(()=>import("./de-GyoXwgNF.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>K(()=>import("./el-BlQcOTEr.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>K(()=>import("./en-MC-jnz4k.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>K(()=>import("./es-DA9G5_P_.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>K(()=>import("./fr-yaOEtLAD.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>K(()=>import("./he-DhhDsw0I.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>K(()=>import("./it-C4u42T79.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>K(()=>import("./ja-WE8XI1hF.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>K(()=>import("./ko-BmWPgd-B.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>K(()=>import("./nb-C5ktjao7.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>K(()=>import("./nl-D84YMRy6.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>K(()=>import("./pl-DWX5XtXe.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>K(()=>import("./pt-PT-CreSj1vz.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>K(()=>import("./ru-oTax2zks.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>K(()=>import("./sv-DEFroOFk.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>K(()=>import("./tr-Cmdsrvdm.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>K(()=>import("./uk-CRlpTSkg.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>K(()=>import("./zh-Hans-D9vdrX4y.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>K(()=>import("./zh-Hant-CetLy6Gl.js"),[],import.meta.url).then(i=>i.default)});function Ja(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function ch(i){const e=new Map,t=i.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*\/\/.*$/gm,""),n=/"((?:[^"\\]|\\.)*)"\s*=\s*"((?:[^"\\]|\\.)*)"\s*;/g,a=s=>s.replace(/\\(u[0-9a-fA-F]{4}|.)/g,(r,o)=>o==="n"?` +`:o==="t"?" ":o.startsWith("u")&&o.length===5?String.fromCharCode(parseInt(o.slice(1),16)):o);for(const s of t.matchAll(n))e.set(a(s[1]),a(s[2]));return e}async function zo(i){const e=i==="java"?Ja(mh,"/Java.strings"):Ja(r3,`/${i}.lproj/Localizable.strings`),t=Ja(o3,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of ch(await a()))n.set(s,r);return n}let dh="en",hh=new Map,Kn=new Map;const as="appLanguageCode",Vl="visustruct.keywords";let Io=new Map,ql=!1;const l3=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function u3(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem(as)==="java";return i&&(localStorage.setItem(as,"en"),localStorage.setItem(Vl,"1")),i}catch{return!1}}function m3(){try{return localStorage.getItem(Vl)==="1"}catch{return!1}}async function gh(i,e=!0){if(i&&Io.size===0){Kn.size===0&&(Kn=await zo("en"));const t=Ja(mh,"/Java.strings");if(t)for(const[n,a]of ch(await t()))l3(n)&&a!==Kn.get(n)&&Io.set(n,a)}if(ql=i,e)try{localStorage.setItem(Vl,i?"1":"0")}catch{}}function c3(){return ql}function d3(){if(u3())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&pu(i))return i;try{const e=localStorage.getItem(as);if(e&&pu(e))return e}catch{}for(const e of navigator.languages??[navigator.language]){const t=e.toLowerCase();if(t.startsWith("pt"))return"pt-PT";const n=uh.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function ph(i,e=!0){if(Kn.size===0&&(Kn=await zo("en")),hh=i==="en"?Kn:await zo(i),dh=i,e)try{localStorage.setItem(as,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function r1(){return dh}function p(i,...e){const t=(ql?Io.get(i):void 0)??hh.get(i)??Kn.get(i)??i;if(e.length===0)return t;let n=0;return t.replace(/%(?:(\d+)\$)?[@d]/g,(a,s)=>String(e[s?Number(s)-1:n++]??""))}const ss=243,h3=244,fh=40,yr=4,g3=1;function Ql(i){const e=i.length,t=ss+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([ss,t,e&255,e>>8,...i,n,h3])}function p3(i,e,t){const n=Array.from(new TextEncoder().encode(i));return Ql([fh,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function f3(i){if(i[0]!==fh||i.length<6)return;const e=new TextDecoder().decode(Uint8Array.from(i.slice(6))),t=/"ret"\s*:\s*([^}]*)\}/.exec(e);return t?{idx:i[2]|i[3]<<8,value:b3(t[1].trim())}:void 0}function x3(i){const e=[];for(;;){const t=i.indexOf(ss);if(t<0){i.length=0;break}if(i.splice(0,t),i.length<4)break;const n=i[2]|i[3]<<8;if(i[1]!==(ss+i[2]+i[3]&255)||n>4096){i.splice(0,1);continue}if(i.lengthArray.from({length:e},(t,n)=>i>>>8*n&255);function z3(i){let e=0;for(let t=0;t>>0;return mi(e,4)}const yr=(i,e)=>Ql([1,0,bh,i,...mi(e.length,2),...e]);function I3(i,e=v3){const t=new TextEncoder().encode(i),n=(4-t.length%H1+H1)%H1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[yr(1,[0,...mi(a.length,4),...z3(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,S3=i=>i.length===7||i.some((e,t)=>e===bh&&i[t+1]===240),xh=()=>typeof navigator>"u"?void 0:navigator.serial,wr=()=>xh()!==void 0,T3=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,Vs=(i,e=24)=>T3("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),vh=Vs("VisuBot",32);class _3{constructor(){y(this,"port");y(this,"writer");y(this,"reader");y(this,"loop");y(this,"rx",[]);y(this,"idx",1);y(this,"frameWaiters",[]);y(this,"waiting",new Map);y(this,"queue",Promise.resolve());y(this,"listeners",new Set);y(this,"error");y(this,"connecting",!1)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}changed(){for(const e of this.listeners)e()}get connected(){return this.writer!==void 0&&!this.connecting}async connect(){const e=xh();if(!e)throw new Error("Web Serial");const t=await e.requestPort();await t.open({baudRate:115200}),this.port=t,this.writer=t.writable.getWriter(),this.error=void 0,this.connecting=!0,this.changed(),this.loop=this.readLoop(),window.addEventListener("pagehide",()=>void this.disconnect(),{once:!0}),await new Promise(n=>setTimeout(n,3e3)),this.writer&&(this.rx.length=0,this.connecting=!1,this.changed(),await this.run(vh))}async disconnect(e){if(!this.port)return this.error=e,this.changed();if(!e&&this.writer&&!this.connecting)for(const r of["mbot2.EM_stop('ALL')","cyberpi.led.off()",Vs("Bis bald!")])await this.send(r,vr,2e3).catch(()=>{});const t=this.port,n=this.writer,a=this.reader,s=this.loop;this.port=this.writer=this.reader=this.loop=void 0,this.error=e,this.connecting=!1;for(const r of this.waiting.values())r.reject(new Error(e??"getrennt"));this.waiting.clear();try{await(a==null?void 0:a.cancel()),await s,await(n==null?void 0:n.close())}catch{}try{n==null||n.releaseLock(),await t.close()}catch(r){console.warn("[mBot2] Schließen",r.message)}this.changed()}run(e){return this.send(e,vr,3e4).then(()=>{})}ask(e){return this.send(e,g3,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=I3(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(Ql(y3),k3),r();for(const l of w3)await this.send(l,vr,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,S3),r();s=a-3,await o(),await this.restart()}sendFrame(e,t){const n=this.queue.then(async()=>{for(let a=0;a<3;a++){if(!this.writer)throw new Error("nicht verbunden");let s=()=>{};const r=new Promise(u=>s=u),o={match:t,resolve:s};this.frameWaiters.push(o),await this.writer.write(e);const l=await Promise.race([r.then(()=>!0),new Promise(u=>setTimeout(()=>u(!1),3e3))]);if(this.frameWaiters=this.frameWaiters.filter(u=>u!==o),l)return}throw new Error("keine Antwort")});return this.queue=n.catch(()=>{}),n}async restart(){const e=this.port;await this.disconnect("restart"),this.error=void 0,await new Promise(t=>setTimeout(t,300)),await e.open({baudRate:115200}),await new Promise(t=>setTimeout(t,500)),await e.close(),this.changed()}send(e,t,n){const a=this.queue.then(()=>new Promise((s,r)=>{if(!this.writer)return r(new Error("nicht verbunden"));const o=this.idx;this.idx=this.idx%65535+1;const l=setTimeout(()=>{this.waiting.delete(o),r(new Error("keine Antwort"))},n);this.waiting.set(o,{resolve:u=>(clearTimeout(l),s(u)),reject:u=>(clearTimeout(l),r(u))}),this.writer.write(p3(e,t,o)).catch(u=>{this.waiting.delete(o),r(u)})}));return this.queue=a.catch(()=>{}),a}async readLoop(){var e;for(;(e=this.port)!=null&&e.readable;){const t=this.port.readable.getReader();this.reader=t;try{for(;;){const{value:n,done:a}=await t.read();if(a)break;this.rx.push(...n);for(const s of b3(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=f3(s);if(!o)continue;const l=this.waiting.get(o.idx);this.waiting.delete(o.idx),l==null||l.resolve(o.value)}}}catch(n){const a=["BufferOverrunError","FramingError","BreakError","ParityError"].includes(n.name);console.warn("[mBot2] Lesefehler",n.name,n.message),!a&&this.port&&this.disconnect(n.message)}finally{t.releaseLock()}if(!this.writer)break}}}const pe=new _3,yh=5,C3=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),Si={forward:{args:1,defaults:[fu],python:([i])=>`mbot2.straight(${ke(i)})`,label:([i])=>`${ke(i)} cm vorwärts`},backward:{args:1,defaults:[fu],python:([i])=>`mbot2.straight(${ke(-i)})`,label:([i])=>`${ke(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ke(-i)})`,label:([i])=>`${ke(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ke(i)})`,label:([i])=>`${ke(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${ke(i)}, ${ke(-e)})`,label:([i,e])=>`Räder links ${ke(i)} %, rechts ${ke(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${ke(i)}, ${ke(e)}, ${ke(t)})`,label:([i,e,t])=>`LEDs (${ke(i)}, ${ke(e)}, ${ke(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(ss),valid:([i])=>C3(i),python:([i],e)=>`cyberpi.led.on(${ss[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${ke(i)}, ${ke(e/1e3)})`,label:([i,e])=>`Ton ${ke(i)} Hz, ${ke(e)} ms`},pause:{args:1,label:([i])=>`${ke(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:A3,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>Vs(e),label:(i,e)=>`Bildschirm: ${e}`}},bu={red:{de:"rot",en:"red"},green:{de:"grün",en:"green"},blue:{de:"blau",en:"blue"},yellow:{de:"gelb",en:"yellow"},cyan:{de:"türkis",en:"cyan"},purple:{de:"lila",en:"purple"},white:{de:"weiß",en:"white"},black:{de:"schwarz",en:"black"}};let Ul="en";function j3(i){Ul=i==="de"?"de":"en"}const O3=()=>Ul;function wh(i){const e=i.trim().toLowerCase(),t=bu[e]??Object.values(bu).find(n=>n.de===e);return t?t[Ul]:e}const c1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),At={getDistance:{python:"mbuild.ultrasonic2.get(1)",simulated:100},getLine:{python:"mbuild.quad_rgb_sensor.get_line_sta('all', 1)",simulated:0},isLineLeft:{python:"mbuild.quad_rgb_sensor.is_line('L1', 1)",simulated:!1},isLineRight:{python:"mbuild.quad_rgb_sensor.is_line('R1', 1)",simulated:!1},getColor:{python:"mbuild.quad_rgb_sensor.get_color_sta('L1', 1)",simulated:"white"},isButtonA:c1("a"),isButtonB:c1("b"),isJoystickUp:c1("up"),isJoystickDown:c1("down"),isJoystickLeft:c1("left"),isJoystickRight:c1("right"),getBrightness:{python:"cyberpi.get_bri()",simulated:50},getLoudness:{python:"cyberpi.get_loudness('maximum')",simulated:0},getPitch:{python:"cyberpi.get_pitch()",simulated:0},getRoll:{python:"cyberpi.get_roll()",simulated:0},isShaken:{python:"cyberpi.is_shake()",simulated:!1},getBattery:{python:"cyberpi.get_battery()",simulated:100},getTimer:{python:"cyberpi.timer.get()",simulated:0}};function P3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in At&&e.add(t[1]);return[...e]}function M3(i){const e=/^mbot\s*\.\s*led\s*\(([^()]*(?:\([^()]*\)[^()]*)*)\)\s*\.\s*setColor\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(e)return{method:"ledColor",args:[e[1].trim(),e[2].trim()]};const t=/^mbot\s*\.\s*([A-Za-z_]\w*)\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(!t)return;const n=t[2].trim();return{method:t[1],args:n===""?[]:B3(n)}}function rs(i,e){const t=Si[i];if(!t)return;const n=e.length===0&&t.defaults?t.defaults:e;if(n.length===t.args)return!t.valid||t.valid(n)?n:void 0}function xu(i,e,t=""){var a;const n=Si[i];return{method:i,args:e,python:(a=n.python)==null?void 0:a.call(n,e,t),waitMs:i==="pause"?Math.max(0,e[0]):void 0,label:n.label(e,t),...n.text?{text:t}:{}}}function zh(i){return i.map(e=>[e.method,...e.args.map(ke),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function D3(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const c=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let d=0;d{if(!(n in At))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?wh(a):a):String(a)}):i}function B3(i){const e=[];let t=0,n=!1,a=0;for(let s=0;s{const a=t==="turn"?((n+180)%360+360)%360-180:n;if(Math.abs(a)<1e-6)return[];const s=Math.round(Math.abs(a)*100)/100;return t==="drive"?[`${a>0?"forward":"backward"} ${s}`]:[a===-180?"turnRight 180":`${a>0?"turnRight":"turnLeft"} ${s}`]})}function Ih(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const u=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let m=0;ma===i[s%t])){const a=ni(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const kh=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],L3=i=>kh.includes(i),W3=100;function Sh(i){switch(i.kind){case"finished":return"Simulation finished.";case"infiniteLoopWithoutBody":return"Infinite loop has no body.";case"unsupportedStatement":return`Unsupported statement: ${i.text}`;case"invalidExpression":return`Invalid expression: ${i.text}`;case"unknownVariable":return`Unknown variable: ${i.text}`;case"divisionByZero":return"Division by zero.";case"wholeNumberExpected":return"Please enter a whole number.";case"numberExpected":return"Please enter a number.";case"booleanExpected":return"Please enter true or false.";case"subprogramNotFound":return`No open diagram is called ${i.text}. The call was skipped.`;case"callTooDeep":return"Too many nested calls. Does a subprogram call itself?";case"callArguments":return`The call does not match the header of ${i.text}. Check the values in the parentheses.`;case"missingReturn":return`${i.text} ended without returning a value with return.`;case"fileNotFound":return`There is no file called ${i.text}.`;case"endOfFile":return`The file ${i.text} has no more lines.`;case"nullValue":return`${i.text} is null.`;case"other":return i.text}}class Je extends Error{constructor(e){super(Sh(e)),this.notice=e}}const Ke=i=>new Je({kind:"unsupportedStatement",text:i}),R=i=>new Je({kind:"invalidExpression",text:i}),ii=i=>new Je({kind:"unknownVariable",text:i}),E3=()=>new Je({kind:"divisionByZero"}),ls=new Map;function N3(i,e){ls.set(i,e)}const Th=()=>[...ls];function vu(i){return i instanceof Je?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function J3(i){if(i===0)return"0";if(!Number.isFinite(i))return Number.isNaN(i)?"nan":i>0?"inf":"-inf";const e=Math.floor(Math.log10(Math.abs(Number(i.toPrecision(12)))));if(e<-4||e>=12){const[n,a]=i.toExponential(11).split("e"),s=n.includes(".")?n.replace(/0+$/,"").replace(/\.$/,""):n,r=Number(a);return`${s}e${r<0?"-":"+"}${String(Math.abs(r)).padStart(2,"0")}`}const t=i.toFixed(Math.max(0,11-e));return t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t}function yu(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):J3(i)}function _e(i){switch(i.kind){case"int":return String(i.value);case"double":return yu(i.value);case"string":return i.value;case"boolean":return String(i.value);case"intArray":return"["+i.value.map(String).join(", ")+"]";case"doubleArray":return"["+i.value.map(yu).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+F3(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function F3(i){return i.value.map(e=>"["+e.map(t=>_e(ko(i.elementType,t))).join(", ")+"]")}function ko(i,e){switch(i){case"int":return{kind:"int",value:e};case"double":return{kind:"double",value:e};case"string":return{kind:"string",value:e};case"boolean":return{kind:"boolean",value:e}}}function wu(i){return i==="string"?"":i==="boolean"?!1:0}function So(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function R3(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const kt=i=>({kind:"int",value:i}),St=i=>({kind:"double",value:i}),$l=i=>i!==void 0&&/\s/u.test(i),us=i=>new RegExp("\\p{L}","u").test(i),ai=i=>new RegExp("\\p{N}","u").test(i);function ci(i){const e=Array.from(i);return e.length===0||!(us(e[0])||e[0]==="_")?!1:e.every(t=>us(t)||ai(t)||t==="_")}function tn(i){switch(i.toLowerCase()){case"int":return"int";case"double":return"double";case"string":return"string";case"char":return"string";case"boolean":case"bool":return"boolean";default:return}}function zu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function lt(i){const e=Array.from(i);if(e.length===3&&e[0]==="'"&&e[2]==="'")return e[1];if(e.length<2||e[0]!=='"'||e[e.length-1]!=='"')return;const t=e.slice(1,-1).join("");if(/^(?:[^"\\]|\\.)*$/u.test(t))return t.replaceAll('\\"','"').replaceAll("\\n",` -`)}function Iu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function Yl(i){const e=new Array(i.length).fill(!1);let t=0,n=!1,a=!1;return i.forEach((s,r)=>{if(n){a?a=!1:s==="\\"?a=!0:s==='"'&&(n=!1);return}switch(s){case'"':n=!0;break;case"(":case"[":t+=1;break;case")":case"]":t-=1;break;default:e[r]=t===0}}),e}function ms(i,e){const t=Array.from(i),n=Array.from(e),a=Yl(t),s=[];let r=[],o=0;for(;ot[o+m]===u)&&a.slice(o,l).every(Boolean)){s.push(r.join("").trim()),r=[],o=l;continue}r.push(t[o]),o+=1}return s.push(r.join("").trim()),s}function G3(i){const e=Array.from(i),t=Yl(e);for(let n=0;n=","<=","==","!="].includes(o)&&(a=o)}if(a===void 0&&(e[n]==="<"||e[n]===">")&&(a=e[n]),a===void 0)continue;const s=e.slice(0,n).join("").trim(),r=e.slice(n+a.length).join("").trim();return{lhs:s,op:a,rhs:r}}}function qs(i,e){let t=0,n=!1,a=!1;for(let s=e;se.length||!t.every((r,o)=>e[a+o]===r))continue;const s=a+t.length-1;if(qs(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function aa(i){const e=i.trim();for(const t of["if","while","until","switch"]){if(!e.startsWith(t))continue;const n=e.slice(t.length);if(!(n===""||$l(n[0])||n[0]==="("))continue;let a=n.trim();const s=_h(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function p1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!ci(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function V3(i){const e=i.trim();if(!e.endsWith(")"))return;const t=/^([A-Za-z_]\w*(?:\s*\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*([A-Za-z_]\w*)\s*\(/u.exec(e);if(!t)return;const n=Array.from(e),a=Array.from(t[0]).length-1;if(qs(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:ms(s,",")}}function ku(i){return ci(i)||p1(i)!==void 0}function zr(i){const e=[];let t="",n=!1,a=!1,s=0;for(const r of i){if(a){t+=r,a=!1;continue}if(r==="\\"){t+=r,a=!0;continue}if(r==='"'){n=!n,t+=r;continue}if(!n&&r==="("&&(s+=1),!n&&r===")"&&(s-=1),r==="+"&&!n&&s===0){e.push(t),t="";continue}t+=r}if(n)throw R(i);return e.push(t),e}function q3(i){const e=[];let t=0,n="";for(const a of i){if(a==="{"&&(t+=1),a==="}"&&(t-=1),a===","&&t===0){e.push(n),n="";continue}n+=a}return n.trim()!==""&&e.push(n),e}function Su(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw R(i)}else if(!ai(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw R(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(us(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function e1(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function _u(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function _o(i){const e=i.map(t=>e1(t).trim());return e.length===1&&e[0].includes(";")?_u(e[0].split(";").map(t=>t.trim())):_u(e)}const dt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function $t(i,e=[],t={}){const n=[],a=s=>n.push(t.frame?{...s,...t}:s);return i.forEach((s,r)=>{const o=[...e,r],l=s.textLines.join(" ").trim();switch(s.type){case S.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case S.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case S.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case S.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:_o(s.textLines)});break;case S.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case S.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case S.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case S.aussprung:a({path:o,text:l,kind:"jump"});break;case S.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function U3(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Je({kind:"wholeNumberExpected"});return kt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Je({kind:"numberExpected"});return St(Number(t));case"string":return{kind:"string",value:i};case"boolean":switch(t.toLowerCase()){case"true":case"wahr":return{kind:"boolean",value:!0};case"false":case"falsch":return{kind:"boolean",value:!1};default:throw new Je({kind:"booleanExpected"})}}}function Cu(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function $3(i,e){for(let t=0;tt===e.path[n])}function It(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(e1(i));if(!e)return;const t=[];if(e[3].trim()!=="")for(const n of e[3].split(",")){const a=/^(int|double|String|boolean|char)\s*((?:\[\s*\]){0,2})\s+([A-Za-z_]\w*)$/u.exec(n.trim());if(!a)return;const s=(a[2].match(/\[/gu)??[]).length;t.push({type:tn(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:tn(e[1]),name:e[2],params:t}}function Ch(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(e1(i));if(e)return{targetType:e[1]?tn(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:ms(e[4],",")}}function cs(i){var t,n;const e=e1(i);return((t=It(e))==null?void 0:t.name)??((n=Ch(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class Ti{constructor(e,t=()=>{}){y(this,"steps");y(this,"state",Cu());y(this,"nextFrame",1);y(this,"callDepth",0);y(this,"frames",new Map);y(this,"peeking",!1);y(this,"robotSensors",{});y(this,"pseudocode");y(this,"decided");y(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=$t(e.elements),this.pseudocode=!!e.pseudocode}get currentStepPath(){const e=this.steps[this.state.stepIndex];return(e==null?void 0:e.callPath)??(e==null?void 0:e.path)}get canStep(){return!this.state.isHalted&&!this.state.inputRequest&&this.state.stepIndex ${_e(n)}`}catch(n){this.state.inputErrorNotice=vu(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}provideDecision(e){var s;if(((s=this.state.inputRequest)==null?void 0:s.valueType)==="string")return this.state.inputRequest=void 0,this.decided=e.trim(),this.step();const t=e.trim().toLowerCase(),n=["true","wahr","ja","yes","sim","verdadeiro"].includes(t),a=["false","falsch","nein","no","não","nao","falso"].includes(t);if(!n&&!a){this.state.inputErrorNotice={kind:"booleanExpected"};return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.decided=n,this.step()}condition(e){if(!this.pseudocode)return this.evaluateBool(e);const t=this.decided;if(typeof t=="boolean")return this.decided=void 0,t;this.state.inputRequest={variableName:"",valueType:"boolean",prompt:`${e} (true/false)`,decision:!0},this.state.inputErrorNotice=void 0,this.state.notice=void 0}finishedIfAtEnd(){return this.state.stepIndex>=this.steps.length?{kind:"finished"}:void 0}splice(e){this.steps.splice(this.state.stepIndex,1,...e)}noticeAfterEntering(e){return e.length>0?void 0:this.finishedIfAtEnd()}executeBranch(e){const t=e.cases;if(!t||t.length<2)throw Ke(e.text);const n=aa(e.text),a=this.condition(n);if(a===void 0)return;const s=a?0:1,r=$t(t[s].elements,[...e.path,s],dt(e));this.splice(r),this.state.lastTrace=`${n} -> ${a}`,this.state.notice=this.noticeAfterEntering(r)}executeSwitchSelection(e){const t=e.cases;if(!t||t.length===0)throw Ke(e.text);const n=aa(e.text);let a;if(this.pseudocode){const r=this.decided;if(typeof r!="string"){const l=t.map(u=>u.name).join(" / ");this.state.inputRequest={variableName:"",valueType:"string",prompt:`${n} (${l})`,decision:!0},this.state.notice=void 0;return}this.decided=void 0;const o=t.findIndex(l=>l.name.trim().toLowerCase()===r.toLowerCase());a=o>=0?o:t.length-1}else a=$3(this.evaluateSwitchSelector(n),t)??t.length-1;const s=$t(t[a].elements,[...e.path,a],dt(e));this.splice(s),this.state.lastTrace=`${n} -> ${t[a].name}`,this.state.notice=this.noticeAfterEntering(s)}executeForLoopStart(e){if(this.pseudocode)return this.splice([{...e,kind:"whileLoop"}]);const t=_o(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...dt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=_o(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.condition(n);if(a!==void 0)if(this.state.lastTrace=`${n} -> ${a}`,a){const s=$t(e.loopBody??[],[...e.path,0],dt(e));this.splice([...s,{...dt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...dt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}executeForLoopIncrement(e){const t=e.text.trim();t!==""&&this.executeIncrement(t),this.splice([])}executeWhileLoop(e){const t=aa(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=$t(e.loopBody??[],[...e.path,0],dt(e));this.splice([...a,{...dt(e),path:e.path,text:e.text,kind:"whileLoop",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(a)}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterDoUntilLoop(e){const t=$t(e.loopBody??[],[...e.path,0],dt(e));this.splice([...t,{...dt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=aa(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=$t(e.loopBody??[],[...e.path,0],dt(e));this.splice([...a,{...dt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=$t(e.loopBody??[],[...e.path,0],dt(e));this.splice([...t,{...dt(e),path:e.path,text:e.text,kind:"infiniteLoop",loopBody:e.loopBody}]),this.state.lastTrace="true -> true",this.state.notice=t.length>0?void 0:{kind:"infiniteLoopWithoutBody"}}executeJump(e){const t=e.frame??0,n=o=>o.lengthl===e.path[u]);let a=this.steps.length,s="end";for(let o=this.state.stepIndex+1;o ${s}`,s==="return"&&this.finishFrame(r),this.state.notice=this.finishedIfAtEnd()}executeCall(e){const t=e.text,n=this.resolveSubprogram(cs(t));if(!n){this.splice([]),this.state.lastTrace=`${t} -> ?`,this.state.notice={kind:"subprogramNotFound",text:t},this.state.stepIndex>=this.steps.length&&(this.state.notice={kind:"finished"});return}const a=Ch(t),s=It(n.caption);if(s?((a==null?void 0:a.args.length)??0)!==s.params.length||(a==null?void 0:a.target)!==void 0&&!s.returnType:a!==void 0&&(a.args.length>0||a.target!==void 0))throw new Je({kind:"callArguments",text:(s==null?void 0:s.name)??cs(t)});if(this.callDepth>=W3)throw new Je({kind:"callTooDeep"});const o=new Map,l=[];s==null||s.params.forEach((d,h)=>{const g=a.args[h].trim();if(!d.dims){o.set(d.name,this.evaluateExpression(g,d.type));return}const f=this.state.variables.get(g);if(!f)throw/^[A-Za-z_]\w*$/u.test(g)?new Je({kind:"unknownVariable",text:g}):R(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw R(g);o.set(d.name,f),l.push({param:d.name,callerName:g})}),this.callDepth+=1;const u={frame:this.nextFrame++,callPath:e.callPath??e.path};s&&(this.frames.set(u.frame,{saved:this.state.variables,header:s,call:a,references:l}),this.state.variables=o);const m=$t(n.elements,[],u);this.splice([...m,{...u,path:e.path,text:t,kind:"callEnd"}]);const c=s==null?void 0:s.params.map((d,h)=>`${d.name} = ${d.dims?a.args[h].trim():_e(o.get(d.name))}`).join(", ");this.state.lastTrace=c?`${t} -> ${c}`:`${t} -> call`}executeCallEnd(e){this.callDepth-=1,this.splice([]),this.state.lastTrace=`${e.text} -> return`,this.finishFrame(e),this.state.notice=this.finishedIfAtEnd()}executeReturn(e){const t=e.frame??0,n=e1(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw R(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${_e(a.returnValue)}`:`${e.text} -> return`;if(t===0){this.steps.splice(this.state.stepIndex),this.state.lastTrace=s,this.state.notice={kind:"finished"};return}let r=this.state.stepIndex+1;for(;r0?new Map(t.saved):t.saved;for(const m of t.references){const c=this.state.variables.get(m.param);c&&n.set(m.callerName,c)}this.state.variables=n;const a=t.returnValue;if(t.header.returnType&&!a)throw new Je({kind:"missingReturn",text:t.header.name});const s=(l=t.call)==null?void 0:l.target;if(!s||!a)return;let r=(u=t.call)==null?void 0:u.targetType;if(!r)try{r=this.inferTargetValueType(s)}catch{r=t.header.returnType}const o=r==="double"&&a.kind==="int"?St(a.value):r==="string"?{kind:"string",value:_e(a)}:a;if(zu(o)!==r)throw R(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${_e(o)}`}executeStatement(e){const t=this.state,n=e.trim(),a=n.toLowerCase(),s=this.afterOutput;if(this.afterOutput=!1,a.startsWith("input:")){t.inputRequest=this.parseInputRequest(n,s),t.outputLineOpen=!1,t.inputErrorNotice=void 0;return}const r=/^System\s*\.\s*out\s*\.\s*(println|print)\s*\(([\s\S]*)\)\s*;?$/u.exec(n);if(a.startsWith("output:")||a.startsWith("print:")||r){const v=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(v)),z=v.trim()===""?"":this.evaluateOutputExpression(v);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=z:t.outputLines.push(z),t.outputLineOpen=(r==null?void 0:r[1])==="print",this.afterOutput=!0,t.lastTrace=`${w} -> ${z}`;return}const o=M3(n);if(o){this.executeMBotCommand(o.method,o.args,n);return}if(this.executeFileStatement(n))return;if(n.endsWith("++")||n.endsWith("--")||n.includes("+=")||n.includes("-=")){this.executeIncrement(n);return}const l=/^(?:final\s+)?([A-Za-z]+)\s+([A-Za-z_]\w*(?:\s*,\s*[A-Za-z_]\w*)*)$/u.exec(e1(n).trim()),u=l?tn(l[1]):void 0;if(l&&u){const v=l[2].split(",").map(w=>w.trim());for(const w of v)t.variables.set(w,ko(u,wu(u)));t.lastTrace=v.map(w=>`${w} = ${_e(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw Ke(n);const c=n.slice(0,m).trim(),d=n.slice(m+1),h=this.parseArrayDeclaration(c,d);if(h){t.variables.set(h.name,h.value),t.lastTrace=`${h.name} = new ${h.typeName}[${h.count}]`;return}const g=this.parseAssignmentTarget(c);let f;try{f=this.peek(()=>this.renderNumericExpression(d))}catch{f=d.trim()}let b=g.valueType;if(!b)try{b=this.inferTargetValueType(g.variableName)}catch{b="int"}const x=this.evaluateExpression(d,b);this.assignValue(x,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${_e(x)}`}executeMBotCommand(e,t,n){var r;if((r=Si[e])!=null&&r.text){const o=Si[e];if(t.length!==o.args+1)throw R(n);const l=rs(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw R(n);const u=xu(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw R(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}const a=rs(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw R(n);const s=xu(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=e1(e).trim(),a=/^(?:(Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*new\s+(Scanner|BufferedReader|PrintWriter)\s*\(([\s\S]*)\)$/u.exec(n);if(a){const[,m,c,d,h]=a;if(m&&m!==d)throw R(n);const g=d==="Scanner"?/^new\s+File\s*\(([\s\S]+)\)$/u.exec(h.trim()):d==="BufferedReader"?/^new\s+FileReader\s*\(([\s\S]+)\)$/u.exec(h.trim()):/^(?:new\s+(?:File|FileWriter)\s*\(([\s\S]+)\)|([\s\S]+))$/u.exec(h.trim());if(!g)throw Ke(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const x=this.fileContent(f).split(/\r?\n/u);x[x.length-1]===""&&x.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:x,next:0})}return t.lastTrace=`${c} = new ${d}(${f})`,!0}const s=/^Files\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(([^()]+)\)\s*,([\s\S]+)\)$/u.exec(n);if(s){const m=this.fileNameValue(s[1]),c=this.evaluateOutputExpression(s[2]);return t.files.set(m,c),t.lastTrace=`${m} ← ${JSON.stringify(c)}`,!0}const r=/^([A-Za-z_]\w*)\s*\.\s*(println|print|close)\s*\(([\s\S]*)\)$/u.exec(n),o=r&&t.variables.get(r[1]);if(!r||!o)return!1;if(o.kind==="null")throw new Je({kind:"nullValue",text:r[1]});if(o.kind==="reader"&&r[2]==="close")return t.lastTrace=`${r[1]}.close()`,!0;if(o.kind!=="writer")return!1;if(r[2]==="close")return t.files.set(o.file,o.text),t.lastTrace=`${o.file} ← ${JSON.stringify(o.text)}`,!0;const l=r[3].trim()===""?"":this.evaluateOutputExpression(r[3]),u=r[2]==="println"?l+` -`:l;return t.variables.set(r[1],{...o,text:o.text+u}),t.lastTrace=`${r[1]}.${r[2]}(${JSON.stringify(l)})`,!0}fileNameValue(e){const t=e.trim(),n=lt(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw R(t)}fileContent(e){const t=this.state.files.get(e)??ls.get(e);if(t===void 0)throw new Je({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw R(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,kt(r.value+a)),this.state.lastTrace=`${s} = ${r.value} ${o} 1 -> ${r.value+a}`;return}if(r.kind==="double"){const l=r.value+a;t.set(s,St(l)),this.state.lastTrace=`${s} = ${_e(r)} ${o} 1 -> ${_e(St(l))}`;return}throw Ke(e)}for(const[n,a]of[["+=",1],["-=",-1]]){const s=e.indexOf(n);if(s<0)continue;const r=e.slice(0,s).trim(),o=e.slice(s+2),l=t.get(r);if(!ci(r)||!l)throw Ke(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,kt(c)),this.state.lastTrace=`${r} = ${l.value} ${u} ${m} -> ${c}`;return}if(l.kind==="double"){const m=this.evaluateDouble(o),c=l.value+a*m;t.set(r,St(c)),this.state.lastTrace=`${r} = ${_e(l)} ${u} ${_e(St(m))} -> ${_e(St(c))}`;return}throw Ke(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(p1(e))return{variableName:e.trim()};const t=e.split(/\s+/u).filter(Boolean);let n,a;if(t.length===1)n=t[0];else if(t.length===2&&tn(t[0]))n=t[1],a=tn(t[0]);else if(t.length===3&&t[0]==="const"&&tn(t[1]))n=t[2],a=tn(t[1]);else throw Ke(e);if(!ku(n))throw Ke(e);return{variableName:n,valueType:a}}parseInputRequest(e,t=!1){const n=e.slice(6).trim(),a=/^(\S+)(?:\s+(\S+))?(?:\s+([\s\S]*))?$/u.exec(n);if(!a)throw Ke(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=tn(s[0]);if(s.length>=2&&u?(r=s[1],o=u,l=(s[2]??"").trim()):(r=s[0],o=this.inferTargetValueType(r),l=(s[1]??"").trim()),!ku(r))throw Ke(e);const m=lt(l)??l;return m===""&&t?this.state.outputLineOpen?{variableName:r,valueType:o,prompt:"",continuesLine:!0}:{variableName:r,valueType:o,prompt:""}:{variableName:r,valueType:o,prompt:m===""?`${r}:`:m}}parseArrayDeclaration(e,t){const n=e.split(/\s+/u).filter(Boolean);if(n.length!==2||!n[0].endsWith("[]"))return;const a=n[0].endsWith("[][]"),s=n[0].slice(0,a?-4:-2),r=tn(s),o=n[1];if(!r||!ci(o))throw Ke(e);if(a)return this.parseGridDeclaration(o,s,r,t);const l=t.trim();if(l.startsWith("{")&&l.endsWith("}")){const h=l.slice(1,-1).split(",").map(f=>f.trim());let g;switch(r){case"int":g={kind:"intArray",value:h.map(f=>this.evaluateInt(f))};break;case"double":g={kind:"doubleArray",value:h.map(f=>this.evaluateDouble(f))};break;case"string":g={kind:"stringArray",value:h.map(f=>lt(f)??this.evaluateOutputExpression(f))};break;case"boolean":g={kind:"booleanArray",value:h.map(f=>this.evaluateBool(f))};break}return{name:o,typeName:s,count:h.length,value:g}}const u=`new ${s}[`;if(!l.startsWith(u)){const h=this.evaluateStringMethod(l);if((h==null?void 0:h.kind)==="stringArray"&&r==="string")return{name:o,typeName:s,count:h.value.length,value:h}}if(!l.startsWith(u)||!l.endsWith("]"))throw Ke(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw R(m);const d=r==="int"?{kind:"intArray",value:new Array(c).fill(0)}:r==="double"?{kind:"doubleArray",value:new Array(c).fill(0)}:r==="boolean"?{kind:"booleanArray",value:new Array(c).fill(!1)}:{kind:"stringArray",value:new Array(c).fill("")};return{name:o,typeName:s,count:c,value:d}}parseGridDeclaration(e,t,n,a){var c;const s=a.trim(),r=d=>{switch(n){case"int":return this.evaluateInt(d);case"double":return this.evaluateDouble(d);case"boolean":return this.evaluateBool(d);case"string":return lt(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=q3(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw R(g);return g.slice(1,-1).trim()===""?[]:g.slice(1,-1).split(",").map(f=>r(f.trim()))});return{name:e,typeName:t,count:`${d.length}][${((c=d[0])==null?void 0:c.length)??0}`,value:{kind:"grid",elementType:n,value:d}}}const o=new RegExp(String.raw`^new\s+${t}\s*\[(.+)\]\s*\[(.+)\]$`,"u").exec(s);if(!o)throw Ke(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw R(o[1]);if(u<0)throw R(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(wu(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw R(e);return t}evaluateReference(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n;const a=this.evaluateStringMethod(t);if(a)return a;const s=/^\(\s*char\s*\)\s*(.+)$/su.exec(t);if(s){const o=this.evaluateInt(s[1]);if(!(o>=0&&o<=1114111))throw R(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=p1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=V3(e);if(!t)return;const n=this.evaluateStaticCall(e,t);if(n)return n;const a=this.state.variables.get(t.target.trim());if((a==null?void 0:a.kind)==="reader")return this.readerMethod(t.target.trim(),a,t,e);if((a==null?void 0:a.kind)==="null")throw new Je({kind:"nullValue",text:t.target.trim()});const s=lt(t.target)??this.stringValueOf(t.target);if(s===void 0)return;const r=t.args,o=d=>{const h=r[d];if(h===void 0)throw R(e);const g=lt(h.trim());if(g!==void 0)return g;const f=this.evaluateReference(h);if((f==null?void 0:f.kind)==="string")return f.value;throw R(h)},l=d=>{if(r[d]===void 0)throw R(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw R(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw R(e);return d};switch(t.method){case"length":return u(0),kt(m.length);case"charAt":return u(1),{kind:"string",value:m[c(l(0),m.length-1)]};case"substring":{if(r.length!==1&&r.length!==2)throw R(e);const d=c(l(0),m.length),h=r.length===2?c(l(1),m.length):m.length;if(h0&&h[h.length-1]==="";)h.pop();return{kind:"stringArray",value:h}}default:return}}evaluateStaticCall(e,t){const n=()=>{if(t.args.length!==1)throw R(e);return t.args[0]},a=s=>{const r=lt(s.trim());if(r!==void 0)return r;const o=this.evaluateReference(s);if((o==null?void 0:o.kind)==="string")return o.value;throw R(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Je({kind:"wholeNumberExpected"});return kt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Je({kind:"numberExpected"});return St(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw R(e);const r=lt(s[1]),o=ls.get(r);if(o===void 0)throw new Je({kind:"fileNotFound",text:r});return{kind:"string",value:o}}default:return}}stringValueOf(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n.kind==="string"?n.value:void 0;const a=p1(t);if(!a)return;const s=this.valueInArray(a.arrayName,a.indexExpressions.map(r=>this.arrayIndex(r)));return s.kind==="string"?s.value:void 0}substituteStringCalls(e){if(!e.includes("("))return e;let t="",n=e;const a=/([A-Za-z_]\w*(?:\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*(length|indexOf|lastIndexOf|compareTo|charAt|parseInt|parseDouble)\s*\(/u;for(let s=a.exec(n);s;s=a.exec(n)){const r=s.index+s[0].length-1,o=qs(Array.from(n),Array.from(n.slice(0,r)).length);if(o===void 0)break;const l=Array.from(n),u=l.slice(Array.from(n.slice(0,s.index)).length,o+1).join(""),m=this.evaluateStringMethod(u),c=l.slice(0,Array.from(n.slice(0,s.index)).length).join(""),d=(m==null?void 0:m.kind)==="string"?To(m.value):void 0;(m==null?void 0:m.kind)==="int"?t+=c+String(m.value):(m==null?void 0:m.kind)==="double"?t+=c+(Number.isInteger(m.value)?m.value.toFixed(1):String(m.value)):d!==void 0?t+=c+String(d):t+=c+u,n=l.slice(o+1).join("")}return t+n}valueInArray(e,t){const n=this.state.variables.get(e);if(!n)throw ii(e);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw R(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw R(a);return ko(n.elementType,r[t[1]])}if(t.length!==1)throw R(a);const s=t[0];if(!So(n))throw R(e);if(s>=n.value.length)throw R(a);switch(n.kind){case"intArray":return kt(n.value[s]);case"doubleArray":return St(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw R(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return zu(n);const a=p1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw ii(a.arrayName);if(s.kind==="intArray")return"int";if(s.kind==="doubleArray")return"double";if(s.kind==="stringArray")return"string";if(s.kind==="booleanArray")return"boolean";if(s.kind==="grid")return s.elementType;throw R(a.arrayName)}throw Ke(e)}assignValue(e,t){const n=t.trim(),a=p1(n);if(!a){this.state.variables.set(n,e);return}const s=a.indexExpressions.map(u=>this.arrayIndex(u)),r=this.state.variables.get(a.arrayName);if(!r)throw ii(a.arrayName);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw R(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||So(e))throw R(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw R(n);const o=s[0];let l;if(r.kind==="intArray"&&e.kind==="int")l={kind:"intArray",value:[...r.value]};else if(r.kind==="doubleArray"&&(e.kind==="double"||e.kind==="int"))l={kind:"doubleArray",value:[...r.value]};else if(r.kind==="stringArray"&&e.kind==="string")l={kind:"stringArray",value:[...r.value]};else if(r.kind==="booleanArray"&&e.kind==="boolean")l={kind:"booleanArray",value:[...r.value]};else throw R(n);if(o>=l.value.length)throw R(n);l.value[o]=e.value,this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(Tu(t)&&zr(t).every(s=>lt(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of zr(this.withSensors(e))){const r=s.trim(),o=lt(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(Tu(r)?{kind:"boolean",value:this.evaluateBool(r)}:this.evaluateNumeric(r)),u=l.kind==="int"||l.kind==="double";if(a===void 0&&u){n?n=n.kind==="int"&&l.kind==="int"?kt(n.value+l.value):St(n.value+l.value):n=l;continue}a=(a??(n?_e(n):""))+_e(l),n=void 0}return a??(n?_e(n):"")}renderOutputExpression(e){return zr(e).map(t=>{const n=t.trim();if(lt(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return _e(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return kt(this.evaluateInt(e));case"double":return St(this.evaluateDouble(e));case"string":{const n=e.trim(),a=lt(n);if(a!==void 0)return{kind:"string",value:a};if(n==="null")return{kind:"null"};const s=this.evaluateReference(n);return(s==null?void 0:s.kind)==="null"?s:s?{kind:"string",value:_e(s)}:{kind:"string",value:this.evaluateOutputExpression(e)}}case"boolean":return{kind:"boolean",value:this.evaluateBool(e)}}}evaluateNumeric(e){const{v:t,int:n}=this.parser(e).parseNumber();return n||Number.isFinite(t)&&Math.round(t)===t?kt(t):St(t)}parser(e){const t=this.withSensors(e);return new Q3(Su(Iu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return Z3(e,t=>this.robotSensors[t]??At[t].simulated)}evaluateInt(e){return this.parser(e).parseInt()}evaluateDouble(e){return this.parser(e).parseDouble()}evaluateBool(e){const t=this.withSensors(e).trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);if((n==null?void 0:n.kind)==="boolean")return n.value;const a=ms(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=ms(t,"&&");if(s.length>1)return s.every(u=>this.evaluateBool(u));if(t.startsWith("!")&&!t.startsWith("!="))return!this.evaluateBool(t.slice(1));const r=_h(t);if(r!==void 0)return this.evaluateBool(r);const o=H3(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=G3(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw R(t);return this.evaluateDouble(t)!==0}evaluateComparison(e,t,n){if((e.trim()==="null"||n.trim()==="null")&&(t==="=="||t==="!=")){const m=d=>{var h;return d.trim()==="null"||((h=this.evaluateReference(d))==null?void 0:h.kind)==="null"},c=m(e)===m(n);return t==="=="?c:!c}const a=this.booleanOperand(e),s=this.booleanOperand(n);if((a!==void 0||s!==void 0)&&(t==="=="||t==="!=")){const m=a??this.evaluateBool(e),c=s??this.evaluateBool(n);return t==="=="?m===c:m!==c}const r=this.stringOperand(e),o=this.stringOperand(n);let l,u;if(r!==void 0||o!==void 0){if(r===void 0||o===void 0)throw R(`${e} ${t} ${n}`);l=r,u=o}else l=this.evaluateDouble(e),u=this.evaluateDouble(n);switch(t){case"==":return l===u;case"!=":return l!==u;case"<":return l":return l>u;case">=":return l>=u;default:throw R(`${e} ${t} ${n}`)}}booleanOperand(e){const t=e.trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);return(n==null?void 0:n.kind)==="boolean"?n.value:void 0}stringOperand(e){const t=e.trim(),n=lt(t);if(n!==void 0)return n;const a=this.evaluateReference(t);return(a==null?void 0:a.kind)==="string"?a.value:void 0}evaluateSwitchSelector(e){const t=this.withSensors(e).trim(),n=lt(t);if(n!==void 0)return{kind:"text",value:n};const a=this.state.variables.get(t);if(a)switch(a.kind){case"int":return{kind:"int",value:a.value};case"double":return{kind:"int",value:Math.trunc(a.value)};case"string":return{kind:"text",value:a.value};default:throw R(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return Su(Iu(e)).map(t=>{if(t.t==="number")return t.literal;if(t.t==="identifier"){const n=this.state.variables.get(t.name);if(!n)throw ii(t.name);return _e(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const Ah={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function ds(i,e,t={},n=[]){const a=Xl(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; + pass`],mi=(i,e)=>Array.from({length:e},(t,n)=>i>>>8*n&255);function z3(i){let e=0;for(let t=0;t>>0;return mi(e,4)}const wr=(i,e)=>Ql([1,0,xh,i,...mi(e.length,2),...e]);function I3(i,e=v3){const t=new TextEncoder().encode(i),n=(4-t.length%V1+V1)%V1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[wr(1,[0,...mi(a.length,4),...z3(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,S3=i=>i.length===7||i.some((e,t)=>e===xh&&i[t+1]===240),bh=()=>typeof navigator>"u"?void 0:navigator.serial,zr=()=>bh()!==void 0,T3=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,qs=(i,e=24)=>T3("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),vh=qs("VisuBot",32);class _3{constructor(){y(this,"port");y(this,"writer");y(this,"reader");y(this,"loop");y(this,"rx",[]);y(this,"idx",1);y(this,"frameWaiters",[]);y(this,"waiting",new Map);y(this,"queue",Promise.resolve());y(this,"listeners",new Set);y(this,"error");y(this,"connecting",!1)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}changed(){for(const e of this.listeners)e()}get connected(){return this.writer!==void 0&&!this.connecting}async connect(){const e=bh();if(!e)throw new Error("Web Serial");const t=await e.requestPort();await t.open({baudRate:115200}),this.port=t,this.writer=t.writable.getWriter(),this.error=void 0,this.connecting=!0,this.changed(),this.loop=this.readLoop(),window.addEventListener("pagehide",()=>void this.disconnect(),{once:!0}),await new Promise(n=>setTimeout(n,3e3)),this.writer&&(this.rx.length=0,this.connecting=!1,this.changed(),await this.run(vh))}async disconnect(e){if(!this.port)return this.error=e,this.changed();if(!e&&this.writer&&!this.connecting)for(const r of["mbot2.EM_stop('ALL')","cyberpi.led.off()",qs("Bis bald!")])await this.send(r,yr,2e3).catch(()=>{});const t=this.port,n=this.writer,a=this.reader,s=this.loop;this.port=this.writer=this.reader=this.loop=void 0,this.error=e,this.connecting=!1;for(const r of this.waiting.values())r.reject(new Error(e??"getrennt"));this.waiting.clear();try{await(a==null?void 0:a.cancel()),await s,await(n==null?void 0:n.close())}catch{}try{n==null||n.releaseLock(),await t.close()}catch(r){console.warn("[mBot2] Schließen",r.message)}this.changed()}run(e){return this.send(e,yr,3e4).then(()=>{})}ask(e){return this.send(e,g3,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=I3(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(Ql(y3),k3),r();for(const l of w3)await this.send(l,yr,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,S3),r();s=a-3,await o(),await this.restart()}sendFrame(e,t){const n=this.queue.then(async()=>{for(let a=0;a<3;a++){if(!this.writer)throw new Error("nicht verbunden");let s=()=>{};const r=new Promise(u=>s=u),o={match:t,resolve:s};this.frameWaiters.push(o),await this.writer.write(e);const l=await Promise.race([r.then(()=>!0),new Promise(u=>setTimeout(()=>u(!1),3e3))]);if(this.frameWaiters=this.frameWaiters.filter(u=>u!==o),l)return}throw new Error("keine Antwort")});return this.queue=n.catch(()=>{}),n}async restart(){const e=this.port;await this.disconnect("restart"),this.error=void 0,await new Promise(t=>setTimeout(t,300)),await e.open({baudRate:115200}),await new Promise(t=>setTimeout(t,500)),await e.close(),this.changed()}send(e,t,n){const a=this.queue.then(()=>new Promise((s,r)=>{if(!this.writer)return r(new Error("nicht verbunden"));const o=this.idx;this.idx=this.idx%65535+1;const l=setTimeout(()=>{this.waiting.delete(o),r(new Error("keine Antwort"))},n);this.waiting.set(o,{resolve:u=>(clearTimeout(l),s(u)),reject:u=>(clearTimeout(l),r(u))}),this.writer.write(p3(e,t,o)).catch(u=>{this.waiting.delete(o),r(u)})}));return this.queue=a.catch(()=>{}),a}async readLoop(){var e;for(;(e=this.port)!=null&&e.readable;){const t=this.port.readable.getReader();this.reader=t;try{for(;;){const{value:n,done:a}=await t.read();if(a)break;this.rx.push(...n);for(const s of x3(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=f3(s);if(!o)continue;const l=this.waiting.get(o.idx);this.waiting.delete(o.idx),l==null||l.resolve(o.value)}}}catch(n){const a=["BufferOverrunError","FramingError","BreakError","ParityError"].includes(n.name);console.warn("[mBot2] Lesefehler",n.name,n.message),!a&&this.port&&this.disconnect(n.message)}finally{t.releaseLock()}if(!this.writer)break}}}const pe=new _3,yh=5,j3=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),Si={forward:{args:1,defaults:[fu],python:([i])=>`mbot2.straight(${ke(i)})`,label:([i])=>`${ke(i)} cm vorwärts`},backward:{args:1,defaults:[fu],python:([i])=>`mbot2.straight(${ke(-i)})`,label:([i])=>`${ke(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ke(-i)})`,label:([i])=>`${ke(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ke(i)})`,label:([i])=>`${ke(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${ke(i)}, ${ke(-e)})`,label:([i,e])=>`Räder links ${ke(i)} %, rechts ${ke(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${ke(i)}, ${ke(e)}, ${ke(t)})`,label:([i,e,t])=>`LEDs (${ke(i)}, ${ke(e)}, ${ke(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(rs),valid:([i])=>j3(i),python:([i],e)=>`cyberpi.led.on(${rs[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${ke(i)}, ${ke(e/1e3)})`,label:([i,e])=>`Ton ${ke(i)} Hz, ${ke(e)} ms`},pause:{args:1,label:([i])=>`${ke(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:C3,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>qs(e),label:(i,e)=>`Bildschirm: ${e}`}},xu={red:{de:"rot",en:"red"},green:{de:"grün",en:"green"},blue:{de:"blau",en:"blue"},yellow:{de:"gelb",en:"yellow"},cyan:{de:"türkis",en:"cyan"},purple:{de:"lila",en:"purple"},white:{de:"weiß",en:"white"},black:{de:"schwarz",en:"black"}};let Ul="en";function A3(i){Ul=i==="de"?"de":"en"}const P3=()=>Ul;function wh(i){const e=i.trim().toLowerCase(),t=xu[e]??Object.values(xu).find(n=>n.de===e);return t?t[Ul]:e}const c1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),Ct={getDistance:{python:"mbuild.ultrasonic2.get(1)",simulated:100},getLine:{python:"mbuild.quad_rgb_sensor.get_line_sta('all', 1)",simulated:0},isLineLeft:{python:"mbuild.quad_rgb_sensor.is_line('L1', 1)",simulated:!1},isLineRight:{python:"mbuild.quad_rgb_sensor.is_line('R1', 1)",simulated:!1},getColor:{python:"mbuild.quad_rgb_sensor.get_color_sta('L1', 1)",simulated:"white"},isButtonA:c1("a"),isButtonB:c1("b"),isJoystickUp:c1("up"),isJoystickDown:c1("down"),isJoystickLeft:c1("left"),isJoystickRight:c1("right"),getBrightness:{python:"cyberpi.get_bri()",simulated:50},getLoudness:{python:"cyberpi.get_loudness('maximum')",simulated:0},getPitch:{python:"cyberpi.get_pitch()",simulated:0},getRoll:{python:"cyberpi.get_roll()",simulated:0},isShaken:{python:"cyberpi.is_shake()",simulated:!1},getBattery:{python:"cyberpi.get_battery()",simulated:100},getTimer:{python:"cyberpi.timer.get()",simulated:0}};function O3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in Ct&&e.add(t[1]);return[...e]}function D3(i){const e=/^mbot\s*\.\s*led\s*\(([^()]*(?:\([^()]*\)[^()]*)*)\)\s*\.\s*setColor\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(e)return{method:"ledColor",args:[e[1].trim(),e[2].trim()]};const t=/^mbot\s*\.\s*([A-Za-z_]\w*)\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(!t)return;const n=t[2].trim();return{method:t[1],args:n===""?[]:Z3(n)}}function os(i,e){const t=Si[i];if(!t)return;const n=e.length===0&&t.defaults?t.defaults:e;if(n.length===t.args)return!t.valid||t.valid(n)?n:void 0}function bu(i,e,t=""){var a;const n=Si[i];return{method:i,args:e,python:(a=n.python)==null?void 0:a.call(n,e,t),waitMs:i==="pause"?Math.max(0,e[0]):void 0,label:n.label(e,t),...n.text?{text:t}:{}}}function zh(i){return i.map(e=>[e.method,...e.args.map(ke),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function M3(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const c=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let d=0;d{if(!(n in Ct))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?wh(a):a):String(a)}):i}function Z3(i){const e=[];let t=0,n=!1,a=0;for(let s=0;s{const a=t==="turn"?((n+180)%360+360)%360-180:n;if(Math.abs(a)<1e-6)return[];const s=Math.round(Math.abs(a)*100)/100;return t==="drive"?[`${a>0?"forward":"backward"} ${s}`]:[a===-180?"turnRight 180":`${a>0?"turnRight":"turnLeft"} ${s}`]})}function Ih(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const u=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let m=0;ma===i[s%t])){const a=ii(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const kh=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],L3=i=>kh.includes(i),W3=100;function Sh(i){switch(i.kind){case"finished":return"Simulation finished.";case"infiniteLoopWithoutBody":return"Infinite loop has no body.";case"unsupportedStatement":return`Unsupported statement: ${i.text}`;case"invalidExpression":return`Invalid expression: ${i.text}`;case"unknownVariable":return i.similar?`Unknown variable: ${i.text}. Java is case-sensitive: did you mean ${i.similar}?`:`Unknown variable: ${i.text}`;case"divisionByZero":return"Division by zero.";case"wholeNumberExpected":return"Please enter a whole number.";case"numberExpected":return"Please enter a number.";case"booleanExpected":return"Please enter true or false.";case"subprogramNotFound":return`No open diagram is called ${i.text}. The call was skipped.`;case"callTooDeep":return"Too many nested calls. Does a subprogram call itself?";case"callArguments":return`The call does not match the header of ${i.text}. Check the values in the parentheses.`;case"missingReturn":return`${i.text} ended without returning a value with return.`;case"fileNotFound":return`There is no file called ${i.text}.`;case"endOfFile":return`The file ${i.text} has no more lines.`;case"nullValue":return`${i.text} is null.`;case"other":return i.text}}class Re extends Error{constructor(e){super(Sh(e)),this.notice=e}}const Ke=i=>new Re({kind:"unsupportedStatement",text:i}),R=i=>new Re({kind:"invalidExpression",text:i}),p1=(i,e)=>{const t=e&&[...e.keys()].find(n=>n!==i&&n.toLowerCase()===i.toLowerCase());return new Re(t?{kind:"unknownVariable",text:i,similar:t}:{kind:"unknownVariable",text:i})},E3=()=>new Re({kind:"divisionByZero"}),us=new Map;function N3(i,e){us.set(i,e)}const Th=()=>[...us];function vu(i){return i instanceof Re?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function F3(i){if(i===0)return"0";if(!Number.isFinite(i))return Number.isNaN(i)?"nan":i>0?"inf":"-inf";const e=Math.floor(Math.log10(Math.abs(Number(i.toPrecision(12)))));if(e<-4||e>=12){const[n,a]=i.toExponential(11).split("e"),s=n.includes(".")?n.replace(/0+$/,"").replace(/\.$/,""):n,r=Number(a);return`${s}e${r<0?"-":"+"}${String(Math.abs(r)).padStart(2,"0")}`}const t=i.toFixed(Math.max(0,11-e));return t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t}function yu(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):F3(i)}function _e(i){switch(i.kind){case"int":return String(i.value);case"double":return yu(i.value);case"string":return i.value;case"boolean":return String(i.value);case"intArray":return"["+i.value.map(String).join(", ")+"]";case"doubleArray":return"["+i.value.map(yu).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+J3(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function J3(i){return i.value.map(e=>"["+e.map(t=>_e(ko(i.elementType,t))).join(", ")+"]")}function ko(i,e){switch(i){case"int":return{kind:"int",value:e};case"double":return{kind:"double",value:e};case"string":return{kind:"string",value:e};case"boolean":return{kind:"boolean",value:e}}}function wu(i){return i==="string"?"":i==="boolean"?!1:0}function So(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function R3(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const kt=i=>({kind:"int",value:i}),St=i=>({kind:"double",value:i}),$l=i=>i!==void 0&&/\s/u.test(i),ms=i=>new RegExp("\\p{L}","u").test(i),ai=i=>new RegExp("\\p{N}","u").test(i);function ci(i){const e=Array.from(i);return e.length===0||!(ms(e[0])||e[0]==="_")?!1:e.every(t=>ms(t)||ai(t)||t==="_")}function tn(i){switch(i.toLowerCase()){case"int":return"int";case"double":return"double";case"string":return"string";case"char":return"string";case"boolean":case"bool":return"boolean";default:return}}function zu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function lt(i){const e=Array.from(i);if(e.length===3&&e[0]==="'"&&e[2]==="'")return e[1];if(e.length<2||e[0]!=='"'||e[e.length-1]!=='"')return;const t=e.slice(1,-1).join("");if(/^(?:[^"\\]|\\.)*$/u.test(t))return t.replaceAll('\\"','"').replaceAll("\\n",` +`)}function Iu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function Yl(i){const e=new Array(i.length).fill(!1);let t=0,n=!1,a=!1;return i.forEach((s,r)=>{if(n){a?a=!1:s==="\\"?a=!0:s==='"'&&(n=!1);return}switch(s){case'"':n=!0;break;case"(":case"[":t+=1;break;case")":case"]":t-=1;break;default:e[r]=t===0}}),e}function cs(i,e){const t=Array.from(i),n=Array.from(e),a=Yl(t),s=[];let r=[],o=0;for(;ot[o+m]===u)&&a.slice(o,l).every(Boolean)){s.push(r.join("").trim()),r=[],o=l;continue}r.push(t[o]),o+=1}return s.push(r.join("").trim()),s}function G3(i){const e=Array.from(i),t=Yl(e);for(let n=0;n=","<=","==","!="].includes(o)&&(a=o)}if(a===void 0&&(e[n]==="<"||e[n]===">")&&(a=e[n]),a===void 0)continue;const s=e.slice(0,n).join("").trim(),r=e.slice(n+a.length).join("").trim();return{lhs:s,op:a,rhs:r}}}function Qs(i,e){let t=0,n=!1,a=!1;for(let s=e;se.length||!t.every((r,o)=>e[a+o]===r))continue;const s=a+t.length-1;if(Qs(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function aa(i){const e=i.trim();for(const t of["if","while","until","switch"]){if(!e.startsWith(t))continue;const n=e.slice(t.length);if(!(n===""||$l(n[0])||n[0]==="("))continue;let a=n.trim();const s=_h(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function f1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!ci(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function V3(i){const e=i.trim();if(!e.endsWith(")"))return;const t=/^([A-Za-z_]\w*(?:\s*\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*([A-Za-z_]\w*)\s*\(/u.exec(e);if(!t)return;const n=Array.from(e),a=Array.from(t[0]).length-1;if(Qs(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:cs(s,",")}}function ku(i){return ci(i)||f1(i)!==void 0}function Ir(i){const e=[];let t="",n=!1,a=!1,s=0;for(const r of i){if(a){t+=r,a=!1;continue}if(r==="\\"){t+=r,a=!0;continue}if(r==='"'){n=!n,t+=r;continue}if(!n&&r==="("&&(s+=1),!n&&r===")"&&(s-=1),r==="+"&&!n&&s===0){e.push(t),t="";continue}t+=r}if(n)throw R(i);return e.push(t),e}function q3(i){const e=[];let t=0,n="";for(const a of i){if(a==="{"&&(t+=1),a==="}"&&(t-=1),a===","&&t===0){e.push(n),n="";continue}n+=a}return n.trim()!==""&&e.push(n),e}function Su(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw R(i)}else if(!ai(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw R(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ms(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function e1(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function _u(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function _o(i){const e=i.map(t=>e1(t).trim());return e.length===1&&e[0].includes(";")?_u(e[0].split(";").map(t=>t.trim())):_u(e)}const dt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function $t(i,e=[],t={}){const n=[],a=s=>n.push(t.frame?{...s,...t}:s);return i.forEach((s,r)=>{const o=[...e,r],l=s.textLines.join(" ").trim();switch(s.type){case S.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case S.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case S.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case S.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:_o(s.textLines)});break;case S.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case S.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case S.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case S.aussprung:a({path:o,text:l,kind:"jump"});break;case S.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function U3(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Re({kind:"wholeNumberExpected"});return kt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Re({kind:"numberExpected"});return St(Number(t));case"string":return{kind:"string",value:i};case"boolean":switch(t.toLowerCase()){case"true":case"wahr":return{kind:"boolean",value:!0};case"false":case"falsch":return{kind:"boolean",value:!1};default:throw new Re({kind:"booleanExpected"})}}}function ju(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function $3(i,e){for(let t=0;tt===e.path[n])}function It(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(e1(i));if(!e)return;const t=[];if(e[3].trim()!=="")for(const n of e[3].split(",")){const a=/^(int|double|String|boolean|char)\s*((?:\[\s*\]){0,2})\s+([A-Za-z_]\w*)$/u.exec(n.trim());if(!a)return;const s=(a[2].match(/\[/gu)??[]).length;t.push({type:tn(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:tn(e[1]),name:e[2],params:t}}function jh(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(e1(i));if(e)return{targetType:e[1]?tn(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:cs(e[4],",")}}function ds(i){var t,n;const e=e1(i);return((t=It(e))==null?void 0:t.name)??((n=jh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class Ti{constructor(e,t=()=>{}){y(this,"steps");y(this,"state",ju());y(this,"nextFrame",1);y(this,"callDepth",0);y(this,"frames",new Map);y(this,"peeking",!1);y(this,"robotSensors",{});y(this,"pseudocode");y(this,"decided");y(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=$t(e.elements),this.pseudocode=!!e.pseudocode}get currentStepPath(){const e=this.steps[this.state.stepIndex];return(e==null?void 0:e.callPath)??(e==null?void 0:e.path)}get canStep(){return!this.state.isHalted&&!this.state.inputRequest&&this.state.stepIndex ${_e(n)}`}catch(n){this.state.inputErrorNotice=vu(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}provideDecision(e){var s;if(((s=this.state.inputRequest)==null?void 0:s.valueType)==="string")return this.state.inputRequest=void 0,this.decided=e.trim(),this.step();const t=e.trim().toLowerCase(),n=["true","wahr","ja","yes","sim","verdadeiro"].includes(t),a=["false","falsch","nein","no","não","nao","falso"].includes(t);if(!n&&!a){this.state.inputErrorNotice={kind:"booleanExpected"};return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.decided=n,this.step()}condition(e){if(!this.pseudocode)return this.evaluateBool(e);const t=this.decided;if(typeof t=="boolean")return this.decided=void 0,t;this.state.inputRequest={variableName:"",valueType:"boolean",prompt:`${e} (true/false)`,decision:!0},this.state.inputErrorNotice=void 0,this.state.notice=void 0}finishedIfAtEnd(){return this.state.stepIndex>=this.steps.length?{kind:"finished"}:void 0}splice(e){this.steps.splice(this.state.stepIndex,1,...e)}noticeAfterEntering(e){return e.length>0?void 0:this.finishedIfAtEnd()}executeBranch(e){const t=e.cases;if(!t||t.length<2)throw Ke(e.text);const n=aa(e.text),a=this.condition(n);if(a===void 0)return;const s=a?0:1,r=$t(t[s].elements,[...e.path,s],dt(e));this.splice(r),this.state.lastTrace=`${n} -> ${a}`,this.state.notice=this.noticeAfterEntering(r)}executeSwitchSelection(e){const t=e.cases;if(!t||t.length===0)throw Ke(e.text);const n=aa(e.text);let a;if(this.pseudocode){const r=this.decided;if(typeof r!="string"){const l=t.map(u=>u.name).join(" / ");this.state.inputRequest={variableName:"",valueType:"string",prompt:`${n} (${l})`,decision:!0},this.state.notice=void 0;return}this.decided=void 0;const o=t.findIndex(l=>l.name.trim().toLowerCase()===r.toLowerCase());a=o>=0?o:t.length-1}else a=$3(this.evaluateSwitchSelector(n),t)??t.length-1;const s=$t(t[a].elements,[...e.path,a],dt(e));this.splice(s),this.state.lastTrace=`${n} -> ${t[a].name}`,this.state.notice=this.noticeAfterEntering(s)}executeForLoopStart(e){if(this.pseudocode)return this.splice([{...e,kind:"whileLoop"}]);const t=_o(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...dt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=_o(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.condition(n);if(a!==void 0)if(this.state.lastTrace=`${n} -> ${a}`,a){const s=$t(e.loopBody??[],[...e.path,0],dt(e));this.splice([...s,{...dt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...dt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}executeForLoopIncrement(e){const t=e.text.trim();t!==""&&this.executeIncrement(t),this.splice([])}executeWhileLoop(e){const t=aa(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=$t(e.loopBody??[],[...e.path,0],dt(e));this.splice([...a,{...dt(e),path:e.path,text:e.text,kind:"whileLoop",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(a)}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterDoUntilLoop(e){const t=$t(e.loopBody??[],[...e.path,0],dt(e));this.splice([...t,{...dt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=aa(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=$t(e.loopBody??[],[...e.path,0],dt(e));this.splice([...a,{...dt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=$t(e.loopBody??[],[...e.path,0],dt(e));this.splice([...t,{...dt(e),path:e.path,text:e.text,kind:"infiniteLoop",loopBody:e.loopBody}]),this.state.lastTrace="true -> true",this.state.notice=t.length>0?void 0:{kind:"infiniteLoopWithoutBody"}}executeJump(e){const t=e.frame??0,n=o=>o.lengthl===e.path[u]);let a=this.steps.length,s="end";for(let o=this.state.stepIndex+1;o ${s}`,s==="return"&&this.finishFrame(r),this.state.notice=this.finishedIfAtEnd()}executeCall(e){const t=e.text,n=this.resolveSubprogram(ds(t));if(!n){this.splice([]),this.state.lastTrace=`${t} -> ?`,this.state.notice={kind:"subprogramNotFound",text:t},this.state.stepIndex>=this.steps.length&&(this.state.notice={kind:"finished"});return}const a=jh(t),s=It(n.caption);if(s?((a==null?void 0:a.args.length)??0)!==s.params.length||(a==null?void 0:a.target)!==void 0&&!s.returnType:a!==void 0&&(a.args.length>0||a.target!==void 0))throw new Re({kind:"callArguments",text:(s==null?void 0:s.name)??ds(t)});if(this.callDepth>=W3)throw new Re({kind:"callTooDeep"});const o=new Map,l=[];s==null||s.params.forEach((d,h)=>{const g=a.args[h].trim();if(!d.dims){o.set(d.name,this.evaluateExpression(g,d.type));return}const f=this.state.variables.get(g);if(!f)throw/^[A-Za-z_]\w*$/u.test(g)?p1(g,this.state.variables):R(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw R(g);o.set(d.name,f),l.push({param:d.name,callerName:g})}),this.callDepth+=1;const u={frame:this.nextFrame++,callPath:e.callPath??e.path};s&&(this.frames.set(u.frame,{saved:this.state.variables,header:s,call:a,references:l}),this.state.variables=o);const m=$t(n.elements,[],u);this.splice([...m,{...u,path:e.path,text:t,kind:"callEnd"}]);const c=s==null?void 0:s.params.map((d,h)=>`${d.name} = ${d.dims?a.args[h].trim():_e(o.get(d.name))}`).join(", ");this.state.lastTrace=c?`${t} -> ${c}`:`${t} -> call`}executeCallEnd(e){this.callDepth-=1,this.splice([]),this.state.lastTrace=`${e.text} -> return`,this.finishFrame(e),this.state.notice=this.finishedIfAtEnd()}executeReturn(e){const t=e.frame??0,n=e1(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw R(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${_e(a.returnValue)}`:`${e.text} -> return`;if(t===0){this.steps.splice(this.state.stepIndex),this.state.lastTrace=s,this.state.notice={kind:"finished"};return}let r=this.state.stepIndex+1;for(;r0?new Map(t.saved):t.saved;for(const m of t.references){const c=this.state.variables.get(m.param);c&&n.set(m.callerName,c)}this.state.variables=n;const a=t.returnValue;if(t.header.returnType&&!a)throw new Re({kind:"missingReturn",text:t.header.name});const s=(l=t.call)==null?void 0:l.target;if(!s||!a)return;let r=(u=t.call)==null?void 0:u.targetType;if(!r)try{r=this.inferTargetValueType(s)}catch{r=t.header.returnType}const o=r==="double"&&a.kind==="int"?St(a.value):r==="string"?{kind:"string",value:_e(a)}:a;if(zu(o)!==r)throw R(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${_e(o)}`}executeStatement(e){const t=this.state,n=e.trim(),a=n.toLowerCase(),s=this.afterOutput;if(this.afterOutput=!1,a.startsWith("input:")){t.inputRequest=this.parseInputRequest(n,s),t.outputLineOpen=!1,t.inputErrorNotice=void 0;return}const r=/^System\s*\.\s*out\s*\.\s*(println|print)\s*\(([\s\S]*)\)\s*;?$/u.exec(n);if(a.startsWith("output:")||a.startsWith("print:")||r){const v=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(v)),z=v.trim()===""?"":this.evaluateOutputExpression(v);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=z:t.outputLines.push(z),t.outputLineOpen=(r==null?void 0:r[1])==="print",this.afterOutput=!0,t.lastTrace=`${w} -> ${z}`;return}const o=D3(n);if(o){this.executeMBotCommand(o.method,o.args,n);return}if(this.executeFileStatement(n))return;if(n.endsWith("++")||n.endsWith("--")||n.includes("+=")||n.includes("-=")){this.executeIncrement(n);return}const l=/^(?:final\s+)?([A-Za-z]+)\s+([A-Za-z_]\w*(?:\s*,\s*[A-Za-z_]\w*)*)$/u.exec(e1(n).trim()),u=l?tn(l[1]):void 0;if(l&&u){const v=l[2].split(",").map(w=>w.trim());for(const w of v)t.variables.set(w,ko(u,wu(u)));t.lastTrace=v.map(w=>`${w} = ${_e(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw Ke(n);const c=n.slice(0,m).trim(),d=n.slice(m+1),h=this.parseArrayDeclaration(c,d);if(h){t.variables.set(h.name,h.value),t.lastTrace=`${h.name} = new ${h.typeName}[${h.count}]`;return}const g=this.parseAssignmentTarget(c);let f;try{f=this.peek(()=>this.renderNumericExpression(d))}catch{f=d.trim()}let x=g.valueType;if(!x)try{x=this.inferTargetValueType(g.variableName)}catch{x="int"}const b=this.evaluateExpression(d,x);this.assignValue(b,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${_e(b)}`}executeMBotCommand(e,t,n){var r;if((r=Si[e])!=null&&r.text){const o=Si[e];if(t.length!==o.args+1)throw R(n);const l=os(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw R(n);const u=bu(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw R(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}const a=os(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw R(n);const s=bu(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=e1(e).trim(),a=/^(?:(Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*new\s+(Scanner|BufferedReader|PrintWriter)\s*\(([\s\S]*)\)$/u.exec(n);if(a){const[,m,c,d,h]=a;if(m&&m!==d)throw R(n);const g=d==="Scanner"?/^new\s+File\s*\(([\s\S]+)\)$/u.exec(h.trim()):d==="BufferedReader"?/^new\s+FileReader\s*\(([\s\S]+)\)$/u.exec(h.trim()):/^(?:new\s+(?:File|FileWriter)\s*\(([\s\S]+)\)|([\s\S]+))$/u.exec(h.trim());if(!g)throw Ke(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const b=this.fileContent(f).split(/\r?\n/u);b[b.length-1]===""&&b.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:b,next:0})}return t.lastTrace=`${c} = new ${d}(${f})`,!0}const s=/^Files\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(([^()]+)\)\s*,([\s\S]+)\)$/u.exec(n);if(s){const m=this.fileNameValue(s[1]),c=this.evaluateOutputExpression(s[2]);return t.files.set(m,c),t.lastTrace=`${m} ← ${JSON.stringify(c)}`,!0}const r=/^([A-Za-z_]\w*)\s*\.\s*(println|print|close)\s*\(([\s\S]*)\)$/u.exec(n),o=r&&t.variables.get(r[1]);if(!r||!o)return!1;if(o.kind==="null")throw new Re({kind:"nullValue",text:r[1]});if(o.kind==="reader"&&r[2]==="close")return t.lastTrace=`${r[1]}.close()`,!0;if(o.kind!=="writer")return!1;if(r[2]==="close")return t.files.set(o.file,o.text),t.lastTrace=`${o.file} ← ${JSON.stringify(o.text)}`,!0;const l=r[3].trim()===""?"":this.evaluateOutputExpression(r[3]),u=r[2]==="println"?l+` +`:l;return t.variables.set(r[1],{...o,text:o.text+u}),t.lastTrace=`${r[1]}.${r[2]}(${JSON.stringify(l)})`,!0}fileNameValue(e){const t=e.trim(),n=lt(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw R(t)}fileContent(e){const t=this.state.files.get(e)??us.get(e);if(t===void 0)throw new Re({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw R(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,kt(r.value+a)),this.state.lastTrace=`${s} = ${r.value} ${o} 1 -> ${r.value+a}`;return}if(r.kind==="double"){const l=r.value+a;t.set(s,St(l)),this.state.lastTrace=`${s} = ${_e(r)} ${o} 1 -> ${_e(St(l))}`;return}throw Ke(e)}for(const[n,a]of[["+=",1],["-=",-1]]){const s=e.indexOf(n);if(s<0)continue;const r=e.slice(0,s).trim(),o=e.slice(s+2),l=t.get(r);if(!ci(r)||!l)throw Ke(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,kt(c)),this.state.lastTrace=`${r} = ${l.value} ${u} ${m} -> ${c}`;return}if(l.kind==="double"){const m=this.evaluateDouble(o),c=l.value+a*m;t.set(r,St(c)),this.state.lastTrace=`${r} = ${_e(l)} ${u} ${_e(St(m))} -> ${_e(St(c))}`;return}throw Ke(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(f1(e))return{variableName:e.trim()};const t=e.split(/\s+/u).filter(Boolean);let n,a;if(t.length===1)n=t[0];else if(t.length===2&&tn(t[0]))n=t[1],a=tn(t[0]);else if(t.length===3&&t[0]==="const"&&tn(t[1]))n=t[2],a=tn(t[1]);else throw Ke(e);if(!ku(n))throw Ke(e);return{variableName:n,valueType:a}}parseInputRequest(e,t=!1){const n=e.slice(6).trim(),a=/^(\S+)(?:\s+(\S+))?(?:\s+([\s\S]*))?$/u.exec(n);if(!a)throw Ke(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=tn(s[0]);if(s.length>=2&&u?(r=s[1],o=u,l=(s[2]??"").trim()):(r=s[0],o=this.inferTargetValueType(r),l=(s[1]??"").trim()),!ku(r))throw Ke(e);const m=lt(l)??l;return m===""&&t?this.state.outputLineOpen?{variableName:r,valueType:o,prompt:"",continuesLine:!0}:{variableName:r,valueType:o,prompt:""}:{variableName:r,valueType:o,prompt:m===""?`${r}:`:m}}parseArrayDeclaration(e,t){const n=e.split(/\s+/u).filter(Boolean);if(n.length!==2||!n[0].endsWith("[]"))return;const a=n[0].endsWith("[][]"),s=n[0].slice(0,a?-4:-2),r=tn(s),o=n[1];if(!r||!ci(o))throw Ke(e);if(a)return this.parseGridDeclaration(o,s,r,t);const l=t.trim();if(l.startsWith("{")&&l.endsWith("}")){const h=l.slice(1,-1).split(",").map(f=>f.trim());let g;switch(r){case"int":g={kind:"intArray",value:h.map(f=>this.evaluateInt(f))};break;case"double":g={kind:"doubleArray",value:h.map(f=>this.evaluateDouble(f))};break;case"string":g={kind:"stringArray",value:h.map(f=>lt(f)??this.evaluateOutputExpression(f))};break;case"boolean":g={kind:"booleanArray",value:h.map(f=>this.evaluateBool(f))};break}return{name:o,typeName:s,count:h.length,value:g}}const u=`new ${s}[`;if(!l.startsWith(u)){const h=this.evaluateStringMethod(l);if((h==null?void 0:h.kind)==="stringArray"&&r==="string")return{name:o,typeName:s,count:h.value.length,value:h}}if(!l.startsWith(u)||!l.endsWith("]"))throw Ke(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw R(m);const d=r==="int"?{kind:"intArray",value:new Array(c).fill(0)}:r==="double"?{kind:"doubleArray",value:new Array(c).fill(0)}:r==="boolean"?{kind:"booleanArray",value:new Array(c).fill(!1)}:{kind:"stringArray",value:new Array(c).fill("")};return{name:o,typeName:s,count:c,value:d}}parseGridDeclaration(e,t,n,a){var c;const s=a.trim(),r=d=>{switch(n){case"int":return this.evaluateInt(d);case"double":return this.evaluateDouble(d);case"boolean":return this.evaluateBool(d);case"string":return lt(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=q3(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw R(g);return g.slice(1,-1).trim()===""?[]:g.slice(1,-1).split(",").map(f=>r(f.trim()))});return{name:e,typeName:t,count:`${d.length}][${((c=d[0])==null?void 0:c.length)??0}`,value:{kind:"grid",elementType:n,value:d}}}const o=new RegExp(String.raw`^new\s+${t}\s*\[(.+)\]\s*\[(.+)\]$`,"u").exec(s);if(!o)throw Ke(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw R(o[1]);if(u<0)throw R(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(wu(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw R(e);return t}evaluateReference(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n;const a=this.evaluateStringMethod(t);if(a)return a;const s=/^\(\s*char\s*\)\s*(.+)$/su.exec(t);if(s){const o=this.evaluateInt(s[1]);if(!(o>=0&&o<=1114111))throw R(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=f1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=V3(e);if(!t)return;const n=this.evaluateStaticCall(e,t);if(n)return n;const a=this.state.variables.get(t.target.trim());if((a==null?void 0:a.kind)==="reader")return this.readerMethod(t.target.trim(),a,t,e);if((a==null?void 0:a.kind)==="null")throw new Re({kind:"nullValue",text:t.target.trim()});const s=lt(t.target)??this.stringValueOf(t.target);if(s===void 0)return;const r=t.args,o=d=>{const h=r[d];if(h===void 0)throw R(e);const g=lt(h.trim());if(g!==void 0)return g;const f=this.evaluateReference(h);if((f==null?void 0:f.kind)==="string")return f.value;throw R(h)},l=d=>{if(r[d]===void 0)throw R(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw R(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw R(e);return d};switch(t.method){case"length":return u(0),kt(m.length);case"charAt":return u(1),{kind:"string",value:m[c(l(0),m.length-1)]};case"substring":{if(r.length!==1&&r.length!==2)throw R(e);const d=c(l(0),m.length),h=r.length===2?c(l(1),m.length):m.length;if(h0&&h[h.length-1]==="";)h.pop();return{kind:"stringArray",value:h}}default:return}}evaluateStaticCall(e,t){const n=()=>{if(t.args.length!==1)throw R(e);return t.args[0]},a=s=>{const r=lt(s.trim());if(r!==void 0)return r;const o=this.evaluateReference(s);if((o==null?void 0:o.kind)==="string")return o.value;throw R(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Re({kind:"wholeNumberExpected"});return kt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Re({kind:"numberExpected"});return St(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw R(e);const r=lt(s[1]),o=us.get(r);if(o===void 0)throw new Re({kind:"fileNotFound",text:r});return{kind:"string",value:o}}default:return}}stringValueOf(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n.kind==="string"?n.value:void 0;const a=f1(t);if(!a)return;const s=this.valueInArray(a.arrayName,a.indexExpressions.map(r=>this.arrayIndex(r)));return s.kind==="string"?s.value:void 0}substituteStringCalls(e){if(!e.includes("("))return e;let t="",n=e;const a=/([A-Za-z_]\w*(?:\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*(length|indexOf|lastIndexOf|compareTo|charAt|parseInt|parseDouble)\s*\(/u;for(let s=a.exec(n);s;s=a.exec(n)){const r=s.index+s[0].length-1,o=Qs(Array.from(n),Array.from(n.slice(0,r)).length);if(o===void 0)break;const l=Array.from(n),u=l.slice(Array.from(n.slice(0,s.index)).length,o+1).join(""),m=this.evaluateStringMethod(u),c=l.slice(0,Array.from(n.slice(0,s.index)).length).join(""),d=(m==null?void 0:m.kind)==="string"?To(m.value):void 0;(m==null?void 0:m.kind)==="int"?t+=c+String(m.value):(m==null?void 0:m.kind)==="double"?t+=c+(Number.isInteger(m.value)?m.value.toFixed(1):String(m.value)):d!==void 0?t+=c+String(d):t+=c+u,n=l.slice(o+1).join("")}return t+n}valueInArray(e,t){const n=this.state.variables.get(e);if(!n)throw p1(e,this.state.variables);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw R(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw R(a);return ko(n.elementType,r[t[1]])}if(t.length!==1)throw R(a);const s=t[0];if(!So(n))throw R(e);if(s>=n.value.length)throw R(a);switch(n.kind){case"intArray":return kt(n.value[s]);case"doubleArray":return St(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw R(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return zu(n);const a=f1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw p1(a.arrayName,this.state.variables);if(s.kind==="intArray")return"int";if(s.kind==="doubleArray")return"double";if(s.kind==="stringArray")return"string";if(s.kind==="booleanArray")return"boolean";if(s.kind==="grid")return s.elementType;throw R(a.arrayName)}throw Ke(e)}assignValue(e,t){const n=t.trim(),a=f1(n);if(!a){this.state.variables.set(n,e);return}const s=a.indexExpressions.map(u=>this.arrayIndex(u)),r=this.state.variables.get(a.arrayName);if(!r)throw p1(a.arrayName,this.state.variables);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw R(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||So(e))throw R(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw R(n);const o=s[0];let l;if(r.kind==="intArray"&&e.kind==="int")l={kind:"intArray",value:[...r.value]};else if(r.kind==="doubleArray"&&(e.kind==="double"||e.kind==="int"))l={kind:"doubleArray",value:[...r.value]};else if(r.kind==="stringArray"&&e.kind==="string")l={kind:"stringArray",value:[...r.value]};else if(r.kind==="booleanArray"&&e.kind==="boolean")l={kind:"booleanArray",value:[...r.value]};else throw R(n);if(o>=l.value.length)throw R(n);l.value[o]=e.value,this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(Tu(t)&&Ir(t).every(s=>lt(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of Ir(this.withSensors(e))){const r=s.trim(),o=lt(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(Tu(r)?{kind:"boolean",value:this.evaluateBool(r)}:this.evaluateNumeric(r)),u=l.kind==="int"||l.kind==="double";if(a===void 0&&u){n?n=n.kind==="int"&&l.kind==="int"?kt(n.value+l.value):St(n.value+l.value):n=l;continue}a=(a??(n?_e(n):""))+_e(l),n=void 0}return a??(n?_e(n):"")}renderOutputExpression(e){return Ir(e).map(t=>{const n=t.trim();if(lt(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return _e(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return kt(this.evaluateInt(e));case"double":return St(this.evaluateDouble(e));case"string":{const n=e.trim(),a=lt(n);if(a!==void 0)return{kind:"string",value:a};if(n==="null")return{kind:"null"};const s=this.evaluateReference(n);return(s==null?void 0:s.kind)==="null"?s:s?{kind:"string",value:_e(s)}:{kind:"string",value:this.evaluateOutputExpression(e)}}case"boolean":return{kind:"boolean",value:this.evaluateBool(e)}}}evaluateNumeric(e){const{v:t,int:n}=this.parser(e).parseNumber();return n||Number.isFinite(t)&&Math.round(t)===t?kt(t):St(t)}parser(e){const t=this.withSensors(e);return new Q3(Su(Iu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return B3(e,t=>this.robotSensors[t]??Ct[t].simulated)}evaluateInt(e){return this.parser(e).parseInt()}evaluateDouble(e){return this.parser(e).parseDouble()}evaluateBool(e){const t=this.withSensors(e).trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);if((n==null?void 0:n.kind)==="boolean")return n.value;const a=cs(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=cs(t,"&&");if(s.length>1)return s.every(u=>this.evaluateBool(u));if(t.startsWith("!")&&!t.startsWith("!="))return!this.evaluateBool(t.slice(1));const r=_h(t);if(r!==void 0)return this.evaluateBool(r);const o=H3(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=G3(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw R(t);return this.evaluateDouble(t)!==0}evaluateComparison(e,t,n){if((e.trim()==="null"||n.trim()==="null")&&(t==="=="||t==="!=")){const m=d=>{var h;return d.trim()==="null"||((h=this.evaluateReference(d))==null?void 0:h.kind)==="null"},c=m(e)===m(n);return t==="=="?c:!c}const a=this.booleanOperand(e),s=this.booleanOperand(n);if((a!==void 0||s!==void 0)&&(t==="=="||t==="!=")){const m=a??this.evaluateBool(e),c=s??this.evaluateBool(n);return t==="=="?m===c:m!==c}const r=this.stringOperand(e),o=this.stringOperand(n);let l,u;if(r!==void 0||o!==void 0){if(r===void 0||o===void 0)throw R(`${e} ${t} ${n}`);l=r,u=o}else l=this.evaluateDouble(e),u=this.evaluateDouble(n);switch(t){case"==":return l===u;case"!=":return l!==u;case"<":return l":return l>u;case">=":return l>=u;default:throw R(`${e} ${t} ${n}`)}}booleanOperand(e){const t=e.trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);return(n==null?void 0:n.kind)==="boolean"?n.value:void 0}stringOperand(e){const t=e.trim(),n=lt(t);if(n!==void 0)return n;const a=this.evaluateReference(t);return(a==null?void 0:a.kind)==="string"?a.value:void 0}evaluateSwitchSelector(e){const t=this.withSensors(e).trim(),n=lt(t);if(n!==void 0)return{kind:"text",value:n};const a=this.state.variables.get(t);if(a)switch(a.kind){case"int":return{kind:"int",value:a.value};case"double":return{kind:"int",value:Math.trunc(a.value)};case"string":return{kind:"text",value:a.value};default:throw R(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return Su(Iu(e)).map(t=>{if(t.t==="number")return t.literal;if(t.t==="identifier"){const n=this.state.variables.get(t.name);if(!n)throw p1(t.name,this.state.variables);return _e(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const Ch={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function hs(i,e,t={},n=[]){const a=Xl(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; `);const r=[i,...e==="java"?[]:n];if(e==="python"&&r.some(Gh)&&(s+=`import random -`),e!=="java"&&(s+=jo(r,e)),e==="java"&&ps(i)&&(s+=`// import java.util.Scanner; +`),e!=="java"&&(s+=Ao(r,e)),e==="java"&&fs(i)&&(s+=`// import java.util.Scanner; `,s+=`Scanner scanner = new Scanner(System.in); `),i.pseudocode&&(s+=(e==="python"?"# ":"// ")+a.pseudocodeNote+` -`),e!=="java")for(const u of n){if(u===i)continue;const m=It(u.caption);m&&(s+=Co(u,m,e,t,0)+` -`)}const o=It(i.caption),l={out:""};if(o)l.out=Co(i,o,e,t,a.baseIndent);else for(const u of i.elements)Ys(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=K3(e);return e==="javascript"?`"use strict"; +`),e!=="java")for(const u of n){if(u===i)continue;const m=It(u.caption);m&&(s+=jo(u,m,e,t,0)+` +`)}const o=It(i.caption),l={out:""};if(o)l.out=jo(i,o,e,t,a.baseIndent);else for(const u of i.elements)Xs(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=K3(e);return e==="javascript"?`"use strict"; -`+u:u}return Qh(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function Xl(i,e,t){const n={...Ah,...t,jsIntVariables:new Set,arrayElementTypes:lb(i),stringVariables:ob(i)};return e!=="java"&&(n.jsIntVariables=Ab(i)),n}const Au=i=>i==="string"?"String":i===void 0?"void":i;function jh(i){const e=i.params.map(t=>`${Au(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${Au(i.returnType)} ${i.name}(${e}) {`}function Co(i,e,t,n,a){const s=Xl(i,t,n);for(const l of e.params)l.dims||(l.type==="int"&&s.jsIntVariables.add(l.name),l.type==="string"&&s.stringVariables.add(l.name));const r=e.params.map(l=>l.name).join(", "),o={out:""};for(const l of i.elements)Ys(l,t,s,a+s.indentPerLevel,o);switch(o.out.trim()===""&&(o.out=Z(a+s.indentPerLevel)+(t==="python"?`pass +`+u:u}return Qh(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function Xl(i,e,t){const n={...Ch,...t,jsIntVariables:new Set,arrayElementTypes:lx(i),stringVariables:ox(i)};return e!=="java"&&(n.jsIntVariables=Cx(i)),n}const Cu=i=>i==="string"?"String":i===void 0?"void":i;function Ah(i){const e=i.params.map(t=>`${Cu(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${Cu(i.returnType)} ${i.name}(${e}) {`}function jo(i,e,t,n,a){const s=Xl(i,t,n);for(const l of e.params)l.dims||(l.type==="int"&&s.jsIntVariables.add(l.name),l.type==="string"&&s.stringVariables.add(l.name));const r=e.params.map(l=>l.name).join(", "),o={out:""};for(const l of i.elements)Xs(l,t,s,a+s.indentPerLevel,o);switch(o.out.trim()===""&&(o.out=B(a+s.indentPerLevel)+(t==="python"?`pass `:` -`)),t){case"java":return`${Z(a)}${jh(e)} -${o.out}${Z(a)}} -`;case"python":return`${Z(a)}def ${e.name}(${r}): -${o.out}`;case"javascript":return`${Z(a)}function ${e.name}(${r}) { -${o.out}${Z(a)}} -`}}const Z=i=>i>0?" ".repeat(i):"";function ve(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function K3(i,e){return i==="python"?"# empty element":"// empty element"}const Ao=i=>i.trim()==="ø";function Oh(i,e){return Z(i)+(e==="python"?`# empty element +`)),t){case"java":return`${B(a)}${Ah(e)} +${o.out}${B(a)}} +`;case"python":return`${B(a)}def ${e.name}(${r}): +${o.out}`;case"javascript":return`${B(a)}function ${e.name}(${r}) { +${o.out}${B(a)}} +`}}const B=i=>i>0?" ".repeat(i):"";function ve(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function K3(i,e){return i==="python"?"# empty element":"// empty element"}const Co=i=>i.trim()==="ø";function Ph(i,e){return B(i)+(e==="python"?`# empty element `:`// empty element -`)}function eb(i){switch(i.type){case S.leerElement:return!0;case S.anweisung:case S.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||Ao(e));default:return!1}}function tb(i){return i.every(eb)}function Kl(i,e,t){const n=i.map(a=>a.replace(/^[ \t]+|[ \t]+$/g,"")).filter(a=>a!=="");return n.length===0?"":e==="python"?Z(t)+`""" -`+n.map(a=>Z(t)+a+` -`).join("")+Z(t)+`""" -`:n.length===1?Z(t)+"/* "+n[0]+` */ -`:Z(t)+`/* -`+n.map(a=>Z(t)+" * "+a+` -`).join("")+Z(t)+` */ -`}const nb=i=>i==="java"||i==="javascript";function hs(i){const e=i.trim();if(e==="")return"";if(e.startsWith("//")||e.startsWith("/*")||e.startsWith("*")||e.startsWith("#")||e.startsWith("{")||e.startsWith("}")||e.endsWith("{")||e.endsWith(";"))return e;const t=e.toLowerCase();for(const n of["if ","else","for ","while ","do ","switch ","case ","default"])if(t.startsWith(n))return e;return e+";"}function Fa(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return ib(e.length===0?"true":e.join(" "))}function ib(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=Ph(t,e);if(n!==void 0)return n===""?"true":n}return e}function Ph(i,e){if(!e.toLowerCase().startsWith(i))return;const t=e.slice(i.length);if(!(t===""||/^\s/.test(t)||t[0]==="("))return;let n=t.trim();return n.startsWith("(")&&n.endsWith(")")&&n.length>=2&&(n=n.slice(1,-1).trim()),n}function qt(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function ab(i){const e=i.trim(),t=e.toLowerCase();let n;if(t.startsWith("output:"))n=e.slice(7).trim();else if(t.startsWith("print:"))n=e.slice(6).trim();else return;return n===""?void 0:n}const Qs=i=>i.name.includes("[")&&i.name.includes("]");function e0(i){const e=i.trim();if(e==="")return;const t=ve(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)(?:\s+"([^"]*)")?\s*$/i,e);if(t){const s=t[2].replaceAll(" ","");if(s==="")return;const r=(t[3]??"").trim();return{type:gs(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ve(/^\s*([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)\s+"([^"]*)"\s*$/i,e);if(n){const s=n[1].replaceAll(" ","");return["int","integer","long","float","double","string","boolean","char","bool","void"].includes(s.toLowerCase())?void 0:{type:s.includes("[")?"String":"int",name:s,customPrompt:n[2].trim()}}const a=sb(e);if(a)return{type:gs(a[0]),name:a[1]}}function gs(i){switch(i.trim().toLowerCase()){case"integer":case"int":return"int";case"long":return"long";case"float":return"float";case"double":return"double";case"string":return"String";case"boolean":case"bool":return"boolean";case"char":return"char";default:return i}}function sb(i){const e=i.split(/[ \t]+/).filter(Boolean);if(e.length===0)return;if(e.length>=2)return[e[0],e[1]];if(!["int","double","string","boolean","char","long","float","short","byte","void","bool","integer"].includes(e[0].toLowerCase()))return["int",e[0]]}function rb(i,e,t,n,a){const s=qt(i).trim();if(s.startsWith('"'))switch(e){case"java":return Z(t)+"System.out.println("+s+`); -`;case"javascript":return Z(t)+"console.log("+s+`); -`;case"python":return Z(t)+"print("+Dn(s,n,a)+`) +`)}function ex(i){switch(i.type){case S.leerElement:return!0;case S.anweisung:case S.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||Co(e));default:return!1}}function tx(i){return i.every(ex)}function Kl(i,e,t){const n=i.map(a=>a.replace(/^[ \t]+|[ \t]+$/g,"")).filter(a=>a!=="");return n.length===0?"":e==="python"?B(t)+`""" +`+n.map(a=>B(t)+a+` +`).join("")+B(t)+`""" +`:n.length===1?B(t)+"/* "+n[0]+` */ +`:B(t)+`/* +`+n.map(a=>B(t)+" * "+a+` +`).join("")+B(t)+` */ +`}const nx=i=>i==="java"||i==="javascript";function gs(i){const e=i.trim();if(e==="")return"";if(e.startsWith("//")||e.startsWith("/*")||e.startsWith("*")||e.startsWith("#")||e.startsWith("{")||e.startsWith("}")||e.endsWith("{")||e.endsWith(";"))return e;const t=e.toLowerCase();for(const n of["if ","else","for ","while ","do ","switch ","case ","default"])if(t.startsWith(n))return e;return e+";"}function Ra(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return ix(e.length===0?"true":e.join(" "))}function ix(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=Oh(t,e);if(n!==void 0)return n===""?"true":n}return e}function Oh(i,e){if(!e.toLowerCase().startsWith(i))return;const t=e.slice(i.length);if(!(t===""||/^\s/.test(t)||t[0]==="("))return;let n=t.trim();return n.startsWith("(")&&n.endsWith(")")&&n.length>=2&&(n=n.slice(1,-1).trim()),n}function qt(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function ax(i){const e=i.trim(),t=e.toLowerCase();let n;if(t.startsWith("output:"))n=e.slice(7).trim();else if(t.startsWith("print:"))n=e.slice(6).trim();else return;return n===""?void 0:n}const Us=i=>i.name.includes("[")&&i.name.includes("]");function e0(i){const e=i.trim();if(e==="")return;const t=ve(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)(?:\s+"([^"]*)")?\s*$/i,e);if(t){const s=t[2].replaceAll(" ","");if(s==="")return;const r=(t[3]??"").trim();return{type:ps(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ve(/^\s*([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)\s+"([^"]*)"\s*$/i,e);if(n){const s=n[1].replaceAll(" ","");return["int","integer","long","float","double","string","boolean","char","bool","void"].includes(s.toLowerCase())?void 0:{type:s.includes("[")?"String":"int",name:s,customPrompt:n[2].trim()}}const a=sx(e);if(a)return{type:ps(a[0]),name:a[1]}}function ps(i){switch(i.trim().toLowerCase()){case"integer":case"int":return"int";case"long":return"long";case"float":return"float";case"double":return"double";case"string":return"String";case"boolean":case"bool":return"boolean";case"char":return"char";default:return i}}function sx(i){const e=i.split(/[ \t]+/).filter(Boolean);if(e.length===0)return;if(e.length>=2)return[e[0],e[1]];if(!["int","double","string","boolean","char","long","float","short","byte","void","bool","integer"].includes(e[0].toLowerCase()))return["int",e[0]]}function rx(i,e,t,n,a){const s=qt(i).trim();if(s.startsWith('"'))switch(e){case"java":return B(t)+"System.out.println("+s+`); +`;case"javascript":return B(t)+"console.log("+s+`); +`;case"python":return B(t)+"print("+Mn(s,n,a)+`) `}}function _i(i){return i.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(` -`,"\\n").replaceAll("\r","\\r")}function t0(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=e0(n);if(a&&Qs(a)&&!/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s/i.test(n)){const s=e.get(a.name.slice(0,a.name.indexOf("[")).trim());if(s)return{...a,type:s}}return a}function ob(i){const e=new Set;return xn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=e0(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!Qs(o)&&e.add(o.name);continue}const s=ve(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ve(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function lb(i){const e=new Map;return xn(i.elements,t=>{for(const n of t.textLines){const a=ve(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ve(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],gs(a[1]))}}),e}function ub(i,e,t){const n=t0(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=Z(e)+'System.out.println("'+_i(a)+`"); -`,r=o=>Qs(n)?n.name:`${o} ${n.name}`;switch(n.type){case"int":return s+Z(e)+`${r("int")} = scanner.nextInt(); -`;case"double":return s+Z(e)+`${r("double")} = scanner.nextDouble(); -`;case"String":return s+Z(e)+`${r("String")} = scanner.next(); -`;case"boolean":return s+Z(e)+`${r("boolean")} = scanner.nextBoolean(); -`;default:return}}function mb(i,e,t){const n=t0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'console.log("'+_i(n.name+": ")+`"); -`,r=l=>{const u=a?n.customPrompt:n.name+": ";return`(prompt("${_i(u)}") ?? "${l}")`},o=Qs(n)?n.name:`let ${n.name}`;switch(n.type){case"int":return s+Z(e)+`${o} = parseInt(${r("0")}, 10); -`;case"double":return s+Z(e)+`${o} = Number(${r("0")}); -`;case"String":return s+Z(e)+`${o} = ${r("")}; -`;case"boolean":return s+Z(e)+`${o} = ${r("")}.trim().toLowerCase() === "true"; -`;default:return}}function cb(i,e,t){const n=t0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'print("'+_i(n.name+": ")+`") -`,r=`input("${_i(a?n.customPrompt:n.name+": ")}")`;switch(n.type){case"int":return s+Z(e)+`${n.name} = int(${r}) -`;case"double":return s+Z(e)+`${n.name} = float(${r}) -`;case"String":return s+Z(e)+`${n.name} = ${r} -`;case"boolean":return s+Z(e)+`${n.name} = ${r}.strip().lower() in ("true", "wahr") -`;default:return}}const Ir=String.raw`("(?:[^"\\]|\\.)*"|[A-Za-z_]\w*)`,db=[[new RegExp(String.raw`^new\s+Scanner\s*\(\s*new\s+File\s*\(\s*${Ir}\s*\)\s*\)$`),"Scanner"],[new RegExp(String.raw`^new\s+BufferedReader\s*\(\s*new\s+FileReader\s*\(\s*${Ir}\s*\)\s*\)$`),"BufferedReader"],[new RegExp(String.raw`^new\s+PrintWriter\s*\(\s*(?:new\s+(?:File|FileWriter)\s*\(\s*)?${Ir}\s*\)?\s*\)$`),"PrintWriter"]];function Mh(i){const e=i.trim();for(const[t,n]of db){const a=t.exec(e);if(a)return{kind:n,name:a[1]}}}function hb(i,e,t,n,a){if(e==="java")return;const s=qt(i).trim(),r=/^(?:(?:Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*(new\s[\s\S]+)$/.exec(s),o=r&&Mh(r[2]);if(r&&o){const m=/^(?:Scanner|BufferedReader|PrintWriter)\s/.test(s);return e==="python"?Z(t)+`${r[1]} = ${o.kind}(${o.name}) -`:Z(t)+`${m?"let ":""}${r[1]} = new ${o.kind}(${o.name}); -`}const l=/^([A-Za-z_]\w*)\.(println|print)\s*\(([\s\S]*)\)$/.exec(s);if(l&&l[1]!=="System"){const m=l[3].trim(),c=e==="python"&&m!==""?Dn(m,n,a):m;return Z(t)+`${l[1]}.${l[2]}(${c})${e==="javascript"?";":""} -`}const u=/^Files\.writeString\s*\(\s*(?:Path\.of|Paths\.get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*,\s*([\s\S]+)\)$/.exec(s);if(u){const m=u[2].trim();return e==="python"?Z(t)+`open(${u[1]}, "w", encoding="utf-8").write(${Dn(m,n,a)}) -`:Z(t)+`require("fs").writeFileSync(${u[1]}, ${m}); -`}}function gb(i){const e=new Set;for(const t of i)xn(t.elements,n=>{for(const a of n.textLines){const s=/=\s*(new\s.+?);?\s*$/.exec(a),r=s&&Mh(s[1]);r&&e.add(r.kind)}});return e}const pb={Scanner:`class Scanner: +`,"\\n").replaceAll("\r","\\r")}function t0(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=e0(n);if(a&&Us(a)&&!/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s/i.test(n)){const s=e.get(a.name.slice(0,a.name.indexOf("[")).trim());if(s)return{...a,type:s}}return a}function ox(i){const e=new Set;return bn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=e0(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!Us(o)&&e.add(o.name);continue}const s=ve(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ve(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function lx(i){const e=new Map;return bn(i.elements,t=>{for(const n of t.textLines){const a=ve(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ve(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],ps(a[1]))}}),e}function ux(i,e,t){const n=t0(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=B(e)+'System.out.println("'+_i(a)+`"); +`,r=o=>Us(n)?n.name:`${o} ${n.name}`;switch(n.type){case"int":return s+B(e)+`${r("int")} = scanner.nextInt(); +`;case"double":return s+B(e)+`${r("double")} = scanner.nextDouble(); +`;case"String":return s+B(e)+`${r("String")} = scanner.next(); +`;case"boolean":return s+B(e)+`${r("boolean")} = scanner.nextBoolean(); +`;default:return}}function mx(i,e,t){const n=t0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":B(e)+'console.log("'+_i(n.name+": ")+`"); +`,r=l=>{const u=a?n.customPrompt:n.name+": ";return`(prompt("${_i(u)}") ?? "${l}")`},o=Us(n)?n.name:`let ${n.name}`;switch(n.type){case"int":return s+B(e)+`${o} = parseInt(${r("0")}, 10); +`;case"double":return s+B(e)+`${o} = Number(${r("0")}); +`;case"String":return s+B(e)+`${o} = ${r("")}; +`;case"boolean":return s+B(e)+`${o} = ${r("")}.trim().toLowerCase() === "true"; +`;default:return}}function cx(i,e,t){const n=t0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":B(e)+'print("'+_i(n.name+": ")+`") +`,r=`input("${_i(a?n.customPrompt:n.name+": ")}")`;switch(n.type){case"int":return s+B(e)+`${n.name} = int(${r}) +`;case"double":return s+B(e)+`${n.name} = float(${r}) +`;case"String":return s+B(e)+`${n.name} = ${r} +`;case"boolean":return s+B(e)+`${n.name} = ${r}.strip().lower() in ("true", "wahr") +`;default:return}}const kr=String.raw`("(?:[^"\\]|\\.)*"|[A-Za-z_]\w*)`,dx=[[new RegExp(String.raw`^new\s+Scanner\s*\(\s*new\s+File\s*\(\s*${kr}\s*\)\s*\)$`),"Scanner"],[new RegExp(String.raw`^new\s+BufferedReader\s*\(\s*new\s+FileReader\s*\(\s*${kr}\s*\)\s*\)$`),"BufferedReader"],[new RegExp(String.raw`^new\s+PrintWriter\s*\(\s*(?:new\s+(?:File|FileWriter)\s*\(\s*)?${kr}\s*\)?\s*\)$`),"PrintWriter"]];function Dh(i){const e=i.trim();for(const[t,n]of dx){const a=t.exec(e);if(a)return{kind:n,name:a[1]}}}function hx(i,e,t,n,a){if(e==="java")return;const s=qt(i).trim(),r=/^(?:(?:Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*(new\s[\s\S]+)$/.exec(s),o=r&&Dh(r[2]);if(r&&o){const m=/^(?:Scanner|BufferedReader|PrintWriter)\s/.test(s);return e==="python"?B(t)+`${r[1]} = ${o.kind}(${o.name}) +`:B(t)+`${m?"let ":""}${r[1]} = new ${o.kind}(${o.name}); +`}const l=/^([A-Za-z_]\w*)\.(println|print)\s*\(([\s\S]*)\)$/.exec(s);if(l&&l[1]!=="System"){const m=l[3].trim(),c=e==="python"&&m!==""?Mn(m,n,a):m;return B(t)+`${l[1]}.${l[2]}(${c})${e==="javascript"?";":""} +`}const u=/^Files\.writeString\s*\(\s*(?:Path\.of|Paths\.get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*,\s*([\s\S]+)\)$/.exec(s);if(u){const m=u[2].trim();return e==="python"?B(t)+`open(${u[1]}, "w", encoding="utf-8").write(${Mn(m,n,a)}) +`:B(t)+`require("fs").writeFileSync(${u[1]}, ${m}); +`}}function gx(i){const e=new Set;for(const t of i)bn(t.elements,n=>{for(const a of n.textLines){const s=/=\s*(new\s.+?);?\s*$/.exec(a),r=s&&Dh(s[1]);r&&e.add(r.kind)}});return e}const px={Scanner:`class Scanner: def __init__(self, name): self.lines = open(name, encoding="utf-8").read().splitlines() def hasNextLine(self): @@ -94,7 +94,7 @@ ${o.out}${Z(a)}} self.file.write(str(text)) def close(self): self.file.close() -`},fb={Scanner:`class Scanner { +`},fx={Scanner:`class Scanner { constructor(name) { this.lines = require("fs").readFileSync(name, "utf8").split(/\\r?\\n/); if (this.lines.at(-1) === "") this.lines.pop(); } hasNextLine() { return this.lines.length > 0; } nextLine() { return this.lines.shift(); } @@ -111,106 +111,106 @@ ${o.out}${Z(a)}} print(text) { this.text += text; } close() { require("fs").writeFileSync(this.name, this.text); } } -`};function jo(i,e){const t=gb(i);if(t.size===0)return"";const n=e==="python"?pb:fb;return[...t].map(a=>n[a]).join(` +`};function Ao(i,e){const t=gx(i);if(t.size===0)return"";const n=e==="python"?px:fx;return[...t].map(a=>n[a]).join(` `)+` -`}function bb(i,e,t,n,a){const s=/^System\s*\.\s*out\s*\.\s*print\s*\(([\s\S]*)\)$/.exec(qt(i).trim());if(s){const o=s[1].trim();switch(e){case"java":return Z(t)+"System.out.print("+o+`); -`;case"javascript":return Z(t)+"process.stdout.write(String("+o+`)); -`;case"python":return Z(t)+"print("+(o===""?"":Dn(o,n,a)+", ")+`end="") -`}}const r=ab(i);if(r===void 0)return/^\s*(?:output|print):\s*$/i.test(i)?Z(t)+{java:"System.out.println();",javascript:"console.log();",python:"print()"}[e]+` -`:void 0;switch(e){case"java":return Z(t)+"System.out.println("+r+`); -`;case"javascript":return Z(t)+"console.log("+r+`); -`;case"python":return Z(t)+"print("+Dn(r,n,a)+`) -`}}function n0(i){const e=i.map(qt).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function xb(i){const t=n0(i).split(";"),n=Dh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function Dh(i){const e=ve(/^(\s*)(?:integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?\s*$/i,i);if(!e)return;const t=e[2].trim();if(t==="")return;const n=(e[3]??"").trim();return i.includes("=")&&n!==""?e[1]+`let ${t} = ${n}`:e[1]+`let ${t}`}function vb(i){const e=i.map(n=>qt(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=Ph("for",n);a!==void 0&&(n=a),t=n.split(";").map(s=>s.trim())}if(!(t.length!==3||t.some(n=>n==="")))return[t[0],t[1],t[2]]}function Zh(i,e){let t=ve(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ve(/^\s*(\+\+|--)\s*(\w+)\s*$/,i);if(t){const[n,a]=t[1]==="++"||t[1]==="--"?[t[2],t[1]]:[t[1],t[2]];return n===e?a==="++"?1:-1:void 0}if(t=ve(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ve(/^\s*(\w+)\s*=\s*(\w+)\s*(\+|-)\s*(\d+)\s*$/,i),t)return t[1]===e&&t[2]===e?(t[3]==="+"?1:-1)*Number(t[4]):void 0}function Oo(i,e){if(/^-?\d+$/.test(i))return String(Number(i)+e);const t=/^[\w.()[\]]+$/.test(i)?i:`(${i})`;return e>0?`${t} + ${e}`:`${t} - ${-e}`}function yb(i,e){const t=vb(i);if(!t)return;const[n,a,s]=t,r=ve(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n);if(!r)return;const o=r[1],l={variable:o,init:`${o} = ${Be(r[2],e)}`,condition:a,increment:s},u=ve(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=Zh(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Be(r[2],e);let d=Be(u[3],e);const h=u[2];if(m>0&&h==="<=")d=Oo(d,1);else if(m<0&&h===">=")d=Oo(d,-1);else if(!(m>0&&h==="<")&&!(m<0&&h===">"))return l;const g=m===1?c==="0"?[d]:[c,d]:[c,d,String(m)];return l.rangeLine=`for ${o} in range(${g.join(", ")}):`,l}function Bh(i){const e=qt(i).trim();if(e==="")return;const t=ve(/^\s*const\s+(integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?$/i,e);if(!t)return;const n=t[2].trim();if(n==="")return;if(!e.includes("="))return{rawType:t[1].trim(),name:n};const a=(t[3]??"").trim();if(a!=="")return{rawType:t[1].trim(),name:n,rhs:a}}function wb(i,e,t,n){var o;const a=Bh(i);if(!a)return;const s=gs(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return Z(t)+hs(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+` -`;case"javascript":return r?Z(t)+hs(`const ${a.name} = ${r}`)+` -`:Z(t)+`let ${a.name}; // from diagram: const ${s} ${a.name} -`;case"python":return r?Z(t)+`${a.name} = ${$s(r,n)} # const ${s} -`:Z(t)+`${a.name} = None # const ${s}, uninitialized -`}}function zb(i){const e=qt(i).trim();if(e===""||Fh(e))return;const t=ve(/^\s*(?:integer|int|long|float|double|string|boolean|char|bool)(?:\s*\[\s*\]\s+(\w+)|\s+(\w+)(\s*\[\s*\])?)\s*=\s*(.*)$/i,e);if(!t)return;const n=t[1]===""?t[2]:t[1],a=t[4].trim();if(a!=="")return{name:n,rhs:a,isArray:t[1]!==""||t[3]!==""}}function Us(i){const e=ve(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||Lh(t)))return t.startsWith("(")&&Po(t,0)===t.length-1?t.slice(1,-1).trim():t}function Po(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function Ib(i,e){if(i[e]==="("){const a=Po(i,e);return a<0?-1:a+1}if(i[e]==="'")return i[e+2]==="'"?e+3:-1;const t=/^(?:[A-Za-z_]\w*|\d+)/.exec(i.slice(e));if(!t)return-1;let n=e+t[0].length;for(;;){const a=/^\.[A-Za-z_]\w*/.exec(i.slice(n));if(a)n+=a[0].length;else if(i[n]==="("||i[n]==="["){const s=Po(i,n);if(s<0)return-1;n=s+1}else return n}}function Mo(i,e){return i0(i,t=>{const n=/\(\s*(int|char)\s*\)\s*/g;let a="",s=0;for(let r=n.exec(t);r;r=n.exec(t)){const o=r.index+r[0].length,l=Ib(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!Lh(u))continue;const m=Mo(u.startsWith("(")?u.slice(1,-1).trim():u,e),c=r[1]==="int"?e==="python"?`ord(${m})`:`${m}.charCodeAt(0)`:e==="python"?`chr(${m})`:`String.fromCharCode(${m})`;a+=t.slice(s,r.index)+c,s=l,n.lastIndex=l}return a+t.slice(s)})}function $s(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=Us(t);return n!==void 0?`int(${$s(n,e)})`:Be(t,e)}function i0(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return i0(t,a=>a.replace(/\bMath\.random\s*\(\s*\)/gi,"random.random()").replace(/===/g,"==").replace(/!==/g,"!=").replace(/\s*&&\s*/g," and ").replace(/\s*\|\|\s*/g," or ").replace(/!(?!=)\s*/g,"not ").replace(/\btrue\b/g,"True").replace(/\bfalse\b/g,"False").replace(/\bnull\b/g,"None").replace(new RegExp("(?n(r)&&n(o)?`${r} // ${o}`:s))}function Wh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function Dn(i,e,t){const n=Wh(i),a=s=>a0(s)||t.has(s)||t.has(s.replace(/^([A-Za-z_]\w*)\[[^[\]]*\]$/u,"$1[]"));return n.length<2||!n.some(a)||n.some(s=>s==="")?Be(i,e):n.map(s=>a(s)?s:`str(${Be(s,e)})`).join(" + ")}function Eh(i,e,t=new Set){const n=qt(i).trim(),a=ve(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ve(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Be(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ve(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Be(s[2],e)}`;const r=ve(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=Wh(u);m=Dn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!a0(u.trim())&&!t.has(u.trim())&&(m=`str(${Be(u,e)})`)}else l==="="&&Us(u)===void 0&&u.trim()!=="null"?m=Dn(u,e,t):m=l==="="?$s(u,e):Be(u,e);return`${o} ${l} ${m}`}return Be(n,e)}const kb=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function Nh(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function Jh(i){const e=ve(/^\s*new\s+(?:byte|short|int|long|float|double|boolean|char|string)\s*\[\s*(.+)\s*\]\s*$/i,i),t=e==null?void 0:e[1].trim();return t||void 0}function Fh(i){const e=ve(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,qt(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function Sb(i){const e=ve(/^\s*new\s+(?:int|double|string|boolean)\s*\[\s*(.+?)\s*\]\s*\[\s*(.+?)\s*\]\s*$/i,i);return e?[e[1],e[2]]:void 0}const ju=i=>i.replaceAll("{","[").replaceAll("}","]");function Ou(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function Tb(i,e,t){const n=Sb(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${Ou(i.elementType,e)}))`:ju(i.rhs):n?`[[${Ou(i.elementType,e)}] * ${Be(n[1],t)} for _ in range(${Be(n[0],t)})]`:Be(ju(i.rhs),t)}function Rh(i,e){const t=i.trim();if(e){const a=Jh(t);return a!==void 0?`new Array(${a})`:Nh(t)}const n=Us(t);return n!==void 0?`Math.floor(${Rh(n,!1)})`:kb(t)}function _b(i,e,t){const n=i.trim();if(e){const a=Jh(n);return a!==void 0?`[None] * ${a}`:Be(Nh(n),t)}return $s(n,t)}function Cb(i,e,t,n,a){if(e==="java")return;const s=Fh(i);if(s){const u=Tb(s,e,n);return e==="javascript"?Z(t)+`let ${s.name} = ${u}; -`:Z(t)+`${s.name} = ${u} -`}const r=zb(i);if(!r)return;if(e==="javascript")return Z(t)+hs(`let ${r.name} = ${Rh(r.rhs,r.isArray)}`)+` -`;const l=!r.isArray&&Us(r.rhs)===void 0&&r.rhs.trim()!=="null"?Dn(r.rhs,n,a):_b(r.rhs,r.isArray,n);return Z(t)+`${r.name} = ${l} -`}function xn(i,e){for(const t of i){e(t),t.loopBody&&xn(t.loopBody,e);for(const n of t.cases??[])xn(n.elements,e)}}function Ab(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return xn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=e0(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=Bh(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ve(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function Do(i,e){const t=r=>/^\d+$/.test(r)||e.has(r),n=String.raw`(?:[a-zA-Z_]\w*|\d+(?:\.\d+)?)`,a=new RegExp(String.raw`(?{const o=r.split(/\s*([*/%])\s*/);if(!o.some(m=>m==="/"))return r;let l=o[0],u=t(o[0]);for(let m=1;mr.replace(a,s).replace(new RegExp("(?t(l)&&t(u)?`${l} = Math.trunc(${l} / ${u})`:o))}function ps(i){let e=!1;return xn(i.elements,t=>{t.type===S.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}function s0(i){let e=!1,t=!1,n=!1;return xn(i.elements,a=>{for(const s of a.textLines)/\bFiles\s*\./.test(s)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(s)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(s)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[]]}function jb(i){return s0(i).length>0}function Gh(i){let e=!1;return xn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function sa(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||a0(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function V1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function Ob(i,e,t,n,a){const s=i.map(r=>r.trim());if(s.every(r=>r==="")){t.live&&(a.out+=Z(n)+(e==="python"?"pass":";")+` -`);return}if(t.includeDiagramTextAsComments){const r=s.filter(o=>o!==""&&!Ao(o));r.length>0&&(a.out+=Kl(r,e,n))}for(const r of s){if(r==="")continue;if(Ao(r)){a.out+=t.live?o0(n,t.live):Oh(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?ub(r,n,l):void 0)??(e==="javascript"?mb(r,n,l):void 0)??(e==="python"?cb(r,n,l):void 0)??hb(r,e,n,o,u)??bb(r,e,n,o,u)??wb(r,e,n,o)??Cb(r,e,n,o,u)??rb(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?Do(m,o):m;continue}let c=r;nb(e)?c=hs(e==="javascript"?Do(r,o):r):e==="python"&&(c=Eh(r,o,u)),c!==""&&(a.out+=Z(n)+c+` -`)}}function di(i,e,t,n,a,s,r,o=(l=>(l=a.live)==null?void 0:l.labels.condition)()){if(a.includeDiagramTextAsComments&&(r.out+=Kl(t,n,s)),o!==void 0&&l0(t)){r.out+=Z(s)+i+t1(o)+e;return}const u=Fa(t),m=a.jsIntVariables??new Set,c=n==="python"?Be(u,m):n==="javascript"?Do(u,m):u;r.out+=Z(s)+i+c+e}function x1(i,e,t,n,a){const s=a.out.length;for(const o of i)Ys(o,e,t,n,a);if(t.live&&a.out.length===s&&(a.out+=o0(n,t.live)),e!=="python")return;a.out.slice(s).split(` -`).map(o=>o.trim()).every(o=>o===""||o.startsWith("#"))&&(a.out+=Z(n)+`pass -`)}function Pb(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===S.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function Zo(i,e,t,n,a,s){const r=i.cases;if(!r||r.length<2)return;const o=e==="python",l=n+t.indentPerLevel,u=!t.includeEmptyElseBranch&&tb(r[1].elements),m=u?void 0:Pb(r[1].elements,t);if(o){di(s?"elif ":"if ",`: -`,i.textLines,e,t,n,a),x1(r[0].elements,e,t,l,a),m?Zo(m,e,t,n,a,!0):u||(a.out+=Z(n)+`else: -`,x1(r[1].elements,e,t,l,a));return}if(di(s?"} else if (":"if (",`) { -`,i.textLines,e,t,n,a),x1(r[0].elements,e,t,l,a),m){const c=a.out.length;Zo(m,e,t,n,a,!0),Vh(t,m,a,c)}else u||(a.out+=Z(n)+`} else { -`,x1(r[1].elements,e,t,l,a)),a.out+=Z(n)+`} -`}function Ys(i,e,t,n,a){const s=a.out.length;Mb(i,e,t,n,a),Vh(t,i,a,s)}function Mb(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>x1(c,e,t,d,a),l=(c,d)=>di(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=Kl(i.textLines,e,c))};switch(i.type){case S.leerElement:a.out+=t.live?o0(n,t.live):Oh(n,e);return;case S.anweisung:case S.aufruf:Ob(i.textLines,e,t,n,a);return;case S.aussprung:{const c=Fa(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=Z(n)+(c===""?`break +`}function xx(i,e,t,n,a){const s=/^System\s*\.\s*out\s*\.\s*print\s*\(([\s\S]*)\)$/.exec(qt(i).trim());if(s){const o=s[1].trim();switch(e){case"java":return B(t)+"System.out.print("+o+`); +`;case"javascript":return B(t)+"process.stdout.write(String("+o+`)); +`;case"python":return B(t)+"print("+(o===""?"":Mn(o,n,a)+", ")+`end="") +`}}const r=ax(i);if(r===void 0)return/^\s*(?:output|print):\s*$/i.test(i)?B(t)+{java:"System.out.println();",javascript:"console.log();",python:"print()"}[e]+` +`:void 0;switch(e){case"java":return B(t)+"System.out.println("+r+`); +`;case"javascript":return B(t)+"console.log("+r+`); +`;case"python":return B(t)+"print("+Mn(r,n,a)+`) +`}}function n0(i){const e=i.map(qt).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function bx(i){const t=n0(i).split(";"),n=Mh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function Mh(i){const e=ve(/^(\s*)(?:integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?\s*$/i,i);if(!e)return;const t=e[2].trim();if(t==="")return;const n=(e[3]??"").trim();return i.includes("=")&&n!==""?e[1]+`let ${t} = ${n}`:e[1]+`let ${t}`}function vx(i){const e=i.map(n=>qt(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=Oh("for",n);a!==void 0&&(n=a),t=n.split(";").map(s=>s.trim())}if(!(t.length!==3||t.some(n=>n==="")))return[t[0],t[1],t[2]]}function Bh(i,e){let t=ve(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ve(/^\s*(\+\+|--)\s*(\w+)\s*$/,i);if(t){const[n,a]=t[1]==="++"||t[1]==="--"?[t[2],t[1]]:[t[1],t[2]];return n===e?a==="++"?1:-1:void 0}if(t=ve(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ve(/^\s*(\w+)\s*=\s*(\w+)\s*(\+|-)\s*(\d+)\s*$/,i),t)return t[1]===e&&t[2]===e?(t[3]==="+"?1:-1)*Number(t[4]):void 0}function Po(i,e){if(/^-?\d+$/.test(i))return String(Number(i)+e);const t=/^[\w.()[\]]+$/.test(i)?i:`(${i})`;return e>0?`${t} + ${e}`:`${t} - ${-e}`}function yx(i,e){const t=vx(i);if(!t)return;const[n,a,s]=t,r=ve(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n);if(!r)return;const o=r[1],l={variable:o,init:`${o} = ${Ze(r[2],e)}`,condition:a,increment:s},u=ve(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=Bh(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Ze(r[2],e);let d=Ze(u[3],e);const h=u[2];if(m>0&&h==="<=")d=Po(d,1);else if(m<0&&h===">=")d=Po(d,-1);else if(!(m>0&&h==="<")&&!(m<0&&h===">"))return l;const g=m===1?c==="0"?[d]:[c,d]:[c,d,String(m)];return l.rangeLine=`for ${o} in range(${g.join(", ")}):`,l}function Zh(i){const e=qt(i).trim();if(e==="")return;const t=ve(/^\s*const\s+(integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?$/i,e);if(!t)return;const n=t[2].trim();if(n==="")return;if(!e.includes("="))return{rawType:t[1].trim(),name:n};const a=(t[3]??"").trim();if(a!=="")return{rawType:t[1].trim(),name:n,rhs:a}}function wx(i,e,t,n){var o;const a=Zh(i);if(!a)return;const s=ps(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return B(t)+gs(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+` +`;case"javascript":return r?B(t)+gs(`const ${a.name} = ${r}`)+` +`:B(t)+`let ${a.name}; // from diagram: const ${s} ${a.name} +`;case"python":return r?B(t)+`${a.name} = ${Ys(r,n)} # const ${s} +`:B(t)+`${a.name} = None # const ${s}, uninitialized +`}}function zx(i){const e=qt(i).trim();if(e===""||Jh(e))return;const t=ve(/^\s*(?:integer|int|long|float|double|string|boolean|char|bool)(?:\s*\[\s*\]\s+(\w+)|\s+(\w+)(\s*\[\s*\])?)\s*=\s*(.*)$/i,e);if(!t)return;const n=t[1]===""?t[2]:t[1],a=t[4].trim();if(a!=="")return{name:n,rhs:a,isArray:t[1]!==""||t[3]!==""}}function $s(i){const e=ve(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||Lh(t)))return t.startsWith("(")&&Oo(t,0)===t.length-1?t.slice(1,-1).trim():t}function Oo(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function Ix(i,e){if(i[e]==="("){const a=Oo(i,e);return a<0?-1:a+1}if(i[e]==="'")return i[e+2]==="'"?e+3:-1;const t=/^(?:[A-Za-z_]\w*|\d+)/.exec(i.slice(e));if(!t)return-1;let n=e+t[0].length;for(;;){const a=/^\.[A-Za-z_]\w*/.exec(i.slice(n));if(a)n+=a[0].length;else if(i[n]==="("||i[n]==="["){const s=Oo(i,n);if(s<0)return-1;n=s+1}else return n}}function Do(i,e){return i0(i,t=>{const n=/\(\s*(int|char)\s*\)\s*/g;let a="",s=0;for(let r=n.exec(t);r;r=n.exec(t)){const o=r.index+r[0].length,l=Ix(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!Lh(u))continue;const m=Do(u.startsWith("(")?u.slice(1,-1).trim():u,e),c=r[1]==="int"?e==="python"?`ord(${m})`:`${m}.charCodeAt(0)`:e==="python"?`chr(${m})`:`String.fromCharCode(${m})`;a+=t.slice(s,r.index)+c,s=l,n.lastIndex=l}return a+t.slice(s)})}function Ys(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=$s(t);return n!==void 0?`int(${Ys(n,e)})`:Ze(t,e)}function i0(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return i0(t,a=>a.replace(/\bMath\.random\s*\(\s*\)/gi,"random.random()").replace(/===/g,"==").replace(/!==/g,"!=").replace(/\s*&&\s*/g," and ").replace(/\s*\|\|\s*/g," or ").replace(/!(?!=)\s*/g,"not ").replace(/\btrue\b/g,"True").replace(/\bfalse\b/g,"False").replace(/\bnull\b/g,"None").replace(new RegExp("(?n(r)&&n(o)?`${r} // ${o}`:s))}function Wh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function Mn(i,e,t){const n=Wh(i),a=s=>a0(s)||t.has(s)||t.has(s.replace(/^([A-Za-z_]\w*)\[[^[\]]*\]$/u,"$1[]"));return n.length<2||!n.some(a)||n.some(s=>s==="")?Ze(i,e):n.map(s=>a(s)?s:`str(${Ze(s,e)})`).join(" + ")}function Eh(i,e,t=new Set){const n=qt(i).trim(),a=ve(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ve(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Ze(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ve(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Ze(s[2],e)}`;const r=ve(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=Wh(u);m=Mn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!a0(u.trim())&&!t.has(u.trim())&&(m=`str(${Ze(u,e)})`)}else l==="="&&$s(u)===void 0&&u.trim()!=="null"?m=Mn(u,e,t):m=l==="="?Ys(u,e):Ze(u,e);return`${o} ${l} ${m}`}return Ze(n,e)}const kx=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function Nh(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function Fh(i){const e=ve(/^\s*new\s+(?:byte|short|int|long|float|double|boolean|char|string)\s*\[\s*(.+)\s*\]\s*$/i,i),t=e==null?void 0:e[1].trim();return t||void 0}function Jh(i){const e=ve(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,qt(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function Sx(i){const e=ve(/^\s*new\s+(?:int|double|string|boolean)\s*\[\s*(.+?)\s*\]\s*\[\s*(.+?)\s*\]\s*$/i,i);return e?[e[1],e[2]]:void 0}const Au=i=>i.replaceAll("{","[").replaceAll("}","]");function Pu(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function Tx(i,e,t){const n=Sx(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${Pu(i.elementType,e)}))`:Au(i.rhs):n?`[[${Pu(i.elementType,e)}] * ${Ze(n[1],t)} for _ in range(${Ze(n[0],t)})]`:Ze(Au(i.rhs),t)}function Rh(i,e){const t=i.trim();if(e){const a=Fh(t);return a!==void 0?`new Array(${a})`:Nh(t)}const n=$s(t);return n!==void 0?`Math.floor(${Rh(n,!1)})`:kx(t)}function _x(i,e,t){const n=i.trim();if(e){const a=Fh(n);return a!==void 0?`[None] * ${a}`:Ze(Nh(n),t)}return Ys(n,t)}function jx(i,e,t,n,a){if(e==="java")return;const s=Jh(i);if(s){const u=Tx(s,e,n);return e==="javascript"?B(t)+`let ${s.name} = ${u}; +`:B(t)+`${s.name} = ${u} +`}const r=zx(i);if(!r)return;if(e==="javascript")return B(t)+gs(`let ${r.name} = ${Rh(r.rhs,r.isArray)}`)+` +`;const l=!r.isArray&&$s(r.rhs)===void 0&&r.rhs.trim()!=="null"?Mn(r.rhs,n,a):_x(r.rhs,r.isArray,n);return B(t)+`${r.name} = ${l} +`}function bn(i,e){for(const t of i){e(t),t.loopBody&&bn(t.loopBody,e);for(const n of t.cases??[])bn(n.elements,e)}}function Cx(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return bn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=e0(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=Zh(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ve(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function Mo(i,e){const t=r=>/^\d+$/.test(r)||e.has(r),n=String.raw`(?:[a-zA-Z_]\w*|\d+(?:\.\d+)?)`,a=new RegExp(String.raw`(?{const o=r.split(/\s*([*/%])\s*/);if(!o.some(m=>m==="/"))return r;let l=o[0],u=t(o[0]);for(let m=1;mr.replace(a,s).replace(new RegExp("(?t(l)&&t(u)?`${l} = Math.trunc(${l} / ${u})`:o))}function fs(i){let e=!1;return bn(i.elements,t=>{t.type===S.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}function s0(i){let e=!1,t=!1,n=!1;return bn(i.elements,a=>{for(const s of a.textLines)/\bFiles\s*\./.test(s)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(s)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(s)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[]]}function Ax(i){return s0(i).length>0}function Gh(i){let e=!1;return bn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function sa(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||a0(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function q1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function Px(i,e,t,n,a){const s=i.map(r=>r.trim());if(s.every(r=>r==="")){t.live&&(a.out+=B(n)+(e==="python"?"pass":";")+` +`);return}if(t.includeDiagramTextAsComments){const r=s.filter(o=>o!==""&&!Co(o));r.length>0&&(a.out+=Kl(r,e,n))}for(const r of s){if(r==="")continue;if(Co(r)){a.out+=t.live?o0(n,t.live):Ph(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?ux(r,n,l):void 0)??(e==="javascript"?mx(r,n,l):void 0)??(e==="python"?cx(r,n,l):void 0)??hx(r,e,n,o,u)??xx(r,e,n,o,u)??wx(r,e,n,o)??jx(r,e,n,o,u)??rx(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?Mo(m,o):m;continue}let c=r;nx(e)?c=gs(e==="javascript"?Mo(r,o):r):e==="python"&&(c=Eh(r,o,u)),c!==""&&(a.out+=B(n)+c+` +`)}}function di(i,e,t,n,a,s,r,o=(l=>(l=a.live)==null?void 0:l.labels.condition)()){if(a.includeDiagramTextAsComments&&(r.out+=Kl(t,n,s)),o!==void 0&&l0(t)){r.out+=B(s)+i+t1(o)+e;return}const u=Ra(t),m=a.jsIntVariables??new Set,c=n==="python"?Ze(u,m):n==="javascript"?Mo(u,m):u;r.out+=B(s)+i+c+e}function v1(i,e,t,n,a){const s=a.out.length;for(const o of i)Xs(o,e,t,n,a);if(t.live&&a.out.length===s&&(a.out+=o0(n,t.live)),e!=="python")return;a.out.slice(s).split(` +`).map(o=>o.trim()).every(o=>o===""||o.startsWith("#"))&&(a.out+=B(n)+`pass +`)}function Ox(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===S.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function Bo(i,e,t,n,a,s){const r=i.cases;if(!r||r.length<2)return;const o=e==="python",l=n+t.indentPerLevel,u=!t.includeEmptyElseBranch&&tx(r[1].elements),m=u?void 0:Ox(r[1].elements,t);if(o){di(s?"elif ":"if ",`: +`,i.textLines,e,t,n,a),v1(r[0].elements,e,t,l,a),m?Bo(m,e,t,n,a,!0):u||(a.out+=B(n)+`else: +`,v1(r[1].elements,e,t,l,a));return}if(di(s?"} else if (":"if (",`) { +`,i.textLines,e,t,n,a),v1(r[0].elements,e,t,l,a),m){const c=a.out.length;Bo(m,e,t,n,a,!0),Vh(t,m,a,c)}else u||(a.out+=B(n)+`} else { +`,v1(r[1].elements,e,t,l,a)),a.out+=B(n)+`} +`}function Xs(i,e,t,n,a){const s=a.out.length;Dx(i,e,t,n,a),Vh(t,i,a,s)}function Dx(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>v1(c,e,t,d,a),l=(c,d)=>di(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=Kl(i.textLines,e,c))};switch(i.type){case S.leerElement:a.out+=t.live?o0(n,t.live):Ph(n,e);return;case S.anweisung:case S.aufruf:Px(i.textLines,e,t,n,a);return;case S.aussprung:{const c=Ra(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=B(n)+(c===""?`break `:`break # ${c} -`):a.out+=Z(n)+(c===""?`break; +`):a.out+=B(n)+(c===""?`break; `:`break; // ${c} -`);return}case S.verzweigung:Zo(i,e,t,n,a,!1);return;case S.fallauswahl:{const c=i.cases;if(!c||c.length===0)return;if(r&&t.pythonWithoutMatch){const d=`wahl${n/s+1}`;di(d+" = ",` -`,i.textLines,e,t,n,a),c.forEach((h,g)=>{const f=g===c.length-1;f&&g===0?a.out+=Z(n)+"if True:"+V1(h.name,e)+` -`:f?a.out+=Z(n)+"else:"+V1(h.name,e)+` -`:a.out+=Z(n)+(g===0?"if ":"elif ")+d+" == "+sa(h.name,e)+`: +`);return}case S.verzweigung:Bo(i,e,t,n,a,!1);return;case S.fallauswahl:{const c=i.cases;if(!c||c.length===0)return;if(r&&t.pythonWithoutMatch){const d=`wahl${n/s+1}`;di(d+" = ",` +`,i.textLines,e,t,n,a),c.forEach((h,g)=>{const f=g===c.length-1;f&&g===0?a.out+=B(n)+"if True:"+q1(h.name,e)+` +`:f?a.out+=B(n)+"else:"+q1(h.name,e)+` +`:a.out+=B(n)+(g===0?"if ":"elif ")+d+" == "+sa(h.name,e)+`: `,o(h.elements,n+s)});return}di(r?"match ":"switch (",r?`: `:`) { -`,i.textLines,e,t,n,a,(m=t.live)==null?void 0:m.labels.selector),c.forEach((d,h)=>{const g=h===c.length-1;if(e==="java"){const f=g?"default -> { "+V1(d.name,e)+` +`,i.textLines,e,t,n,a,(m=t.live)==null?void 0:m.labels.selector),c.forEach((d,h)=>{const g=h===c.length-1;if(e==="java"){const f=g?"default -> { "+q1(d.name,e)+` `:"case "+sa(d.name,e)+` -> { -`;a.out+=Z(n+s)+f,o(d.elements,n+s*2),a.out+=Z(n+s)+`} -`}else if(r){const f=g?"case _:"+V1(d.name,e):"case "+sa(d.name,e)+":";a.out+=Z(n+s)+f+` -`,o(d.elements,n+s*2)}else{const f=g?"default:"+V1(d.name,e):"case "+sa(d.name,e)+":";a.out+=Z(n+s)+f+` -`,o(d.elements,n+s*2),a.out+=Z(n+s*2)+`break; -`}}),r||(a.out+=Z(n)+`} -`);return}case S.forSchleife:if(e==="java"){u();const c=t.live?Hh(i.textLines,t.live.labels):n0(i.textLines);a.out+=Z(n)+"for ("+c+`) { -`}else if(r){const c=t.jsIntVariables??new Set,d=yb(i.textLines,c);if((d==null?void 0:d.rangeLine)!==void 0)u(),a.out+=Z(n)+d.rangeLine+` -`;else if(d){u(),a.out+=Z(n)+d.init+` -`,a.out+=Z(n)+"while "+Be(d.condition,c)+`: -`;for(const h of i.loopBody??[])Ys(h,e,t,n+s,a);a.out+=Z(n+s)+Eh(d.increment,c)+` -`;return}else t.live?a.out+=Z(n)+Zb(i.textLines,t.live.labels,c)+` +`;a.out+=B(n+s)+f,o(d.elements,n+s*2),a.out+=B(n+s)+`} +`}else if(r){const f=g?"case _:"+q1(d.name,e):"case "+sa(d.name,e)+":";a.out+=B(n+s)+f+` +`,o(d.elements,n+s*2)}else{const f=g?"default:"+q1(d.name,e):"case "+sa(d.name,e)+":";a.out+=B(n+s)+f+` +`,o(d.elements,n+s*2),a.out+=B(n+s*2)+`break; +`}}),r||(a.out+=B(n)+`} +`);return}case S.forSchleife:if(e==="java"){u();const c=t.live?Hh(i.textLines,t.live.labels):n0(i.textLines);a.out+=B(n)+"for ("+c+`) { +`}else if(r){const c=t.jsIntVariables??new Set,d=yx(i.textLines,c);if((d==null?void 0:d.rangeLine)!==void 0)u(),a.out+=B(n)+d.rangeLine+` +`;else if(d){u(),a.out+=B(n)+d.init+` +`,a.out+=B(n)+"while "+Ze(d.condition,c)+`: +`;for(const h of i.loopBody??[])Xs(h,e,t,n+s,a);a.out+=B(n+s)+Eh(d.increment,c)+` +`;return}else t.live?a.out+=B(n)+Bx(i.textLines,t.live.labels,c)+` `:l("for ",`: -`)}else{u();const c=t.live?Db(i.textLines,t.live.labels):xb(i.textLines);a.out+=Z(n)+"for ("+c+`) { -`}o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`} +`)}else{u();const c=t.live?Mx(i.textLines,t.live.labels):bx(i.textLines);a.out+=B(n)+"for ("+c+`) { +`}o(i.loopBody??[],n+s),r||(a.out+=B(n)+`} `);return;case S.whileSchleife:l(r?"while ":"while (",r?`: `:`) { -`),o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`} -`);return;case S.doUntilSchleife:{const c=t.live&&l0(i.textLines)?t1(t.live.labels.condition):Fa(i.textLines);if(r){a.out+=Z(n)+`while True: -`;const d=n+s;o(i.loopBody??[],d),u(d);const h=c.includes(Hi)?c:Be(c,t.jsIntVariables??new Set);a.out+=Z(d)+"if not ("+h+`): -`,a.out+=Z(d+s)+`break -`}else a.out+=Z(n)+`do { -`,o(i.loopBody??[],n+s),u(),a.out+=Z(n)+"} while ("+c+`); -`;return}case S.endlosschleife:{const c=Fa(i.textLines),d=c===""||c==="true";d||u(),r?a.out+=Z(n)+(d?`while True: +`),o(i.loopBody??[],n+s),r||(a.out+=B(n)+`} +`);return;case S.doUntilSchleife:{const c=t.live&&l0(i.textLines)?t1(t.live.labels.condition):Ra(i.textLines);if(r){a.out+=B(n)+`while True: +`;const d=n+s;o(i.loopBody??[],d),u(d);const h=c.includes(Hi)?c:Ze(c,t.jsIntVariables??new Set);a.out+=B(d)+"if not ("+h+`): +`,a.out+=B(d+s)+`break +`}else a.out+=B(n)+`do { +`,o(i.loopBody??[],n+s),u(),a.out+=B(n)+"} while ("+c+`); +`;return}case S.endlosschleife:{const c=Ra(i.textLines),d=c===""||c==="true";d||u(),r?a.out+=B(n)+(d?`while True: `:`while True: # ${c} -`):a.out+=Z(n)+(d?`while (true) { +`):a.out+=B(n)+(d?`while (true) { `:`while (true) /* ${c} */ { -`),o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`} -`);return}}}const Hi="",r0="",t1=i=>Hi+i+r0,o0=(i,e)=>Z(i)+t1(e.target==="python"?`pass # ${e.labels.code}`:`// ${e.labels.code}`)+` -`,l0=i=>i.every(e=>e.trim()==="");function Hh(i,e){return l0(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=qt(i[a]??"");return s===""?t1(n):s}).join("; "):n0(i)}function Db(i,e){const t=Hh(i,e).split(";"),n=t[0].includes(Hi)?void 0:Dh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function Zb(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>qt(g)):[],r=ve(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n),o=(r==null?void 0:r[1])??((h=ve(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Be(r[2],t):t1(e.start),u=ve(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=t1(e.end);u&&(o===void 0||u[1]===o)&&(m=Be(u[3],t),u[2]==="<="&&(m=Oo(m,1)));const c=o===void 0?void 0:Zh(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??t1(e.selector)} in range(${d.join(", ")}):`}function Bo(i,e=[],t=new Map){return i.forEach((n,a)=>{var r;const s=[...e,a];t.has(n)||t.set(n,s),n.loopBody&&Bo(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>Bo(o.elements,[...s,l],t))}),t}function Vh(i,e,t,n){const a=i.live,s=a==null?void 0:a.paths.get(e);if(!a||!s||t.out.length===n)return;const r=o=>t.out.slice(0,o).split(` -`).length-1;a.spans.push({path:s,from:r(n),to:r(t.out.length-1)})}function qh(i,e,t){const n={target:e,labels:t,paths:Bo(i.elements),spans:[]},a=Xl(i,e,{includeEmptyElseBranch:!0,live:n}),s=It(i.caption);let r="";if(e==="java"){const u=s0(i);for(const m of u)r+=m+` -`;ps(i)?(u.includes("import java.util.Scanner;")||(r+=`import java.util.Scanner; +`),o(i.loopBody??[],n+s),r||(a.out+=B(n)+`} +`);return}}}const Hi="",r0="",t1=i=>Hi+i+r0,o0=(i,e)=>B(i)+t1(e.target==="python"?`pass # ${e.labels.code}`:`// ${e.labels.code}`)+` +`,l0=i=>i.every(e=>e.trim()==="");function Hh(i,e){return l0(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=qt(i[a]??"");return s===""?t1(n):s}).join("; "):n0(i)}function Mx(i,e){const t=Hh(i,e).split(";"),n=t[0].includes(Hi)?void 0:Mh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function Bx(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>qt(g)):[],r=ve(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n),o=(r==null?void 0:r[1])??((h=ve(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Ze(r[2],t):t1(e.start),u=ve(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=t1(e.end);u&&(o===void 0||u[1]===o)&&(m=Ze(u[3],t),u[2]==="<="&&(m=Po(m,1)));const c=o===void 0?void 0:Bh(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??t1(e.selector)} in range(${d.join(", ")}):`}function Zo(i,e=[],t=new Map){return i.forEach((n,a)=>{var r;const s=[...e,a];t.has(n)||t.set(n,s),n.loopBody&&Zo(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>Zo(o.elements,[...s,l],t))}),t}function Vh(i,e,t,n){const a=i.live,s=a==null?void 0:a.paths.get(e);if(!a||!s||t.out.length===n)return;const r=o=>t.out.slice(0,o).split(` +`).length-1;a.spans.push({path:s,from:r(n),to:r(t.out.length-1)})}function qh(i,e,t){const n={target:e,labels:t,paths:Zo(i.elements),spans:[]},a=Xl(i,e,{includeEmptyElseBranch:!0,live:n}),s=It(i.caption);let r="";if(e==="java"){const u=s0(i);for(const m of u)r+=m+` +`;fs(i)?(u.includes("import java.util.Scanner;")||(r+=`import java.util.Scanner; `),r+=`Scanner scanner = new Scanner(System.in); `):u.length&&(r+=` -`),s&&(r+=jh(s)+` +`),s&&(r+=Ah(s)+` `)}else{if(s)for(const m of s.params)m.dims||(m.type==="int"&&a.jsIntVariables.add(m.name),m.type==="string"&&a.stringVariables.add(m.name));const u=s==null?void 0:s.params.map(m=>m.name).join(", ");e==="javascript"?(r+=`"use strict"; -`,r+=jo([i],"javascript"),s&&(r+=`function ${s.name}(${u}) { +`,r+=Ao([i],"javascript"),s&&(r+=`function ${s.name}(${u}) { `)):(Gh(i)&&(r+=`import random -`),r+=jo([i],"python"),s&&(r+=`def ${s.name}(${u}): -`))}const o={out:""};x1(i.elements,e,a,s?a.indentPerLevel:0,o),s&&e!=="python"&&(o.out+=`} +`),r+=Ao([i],"python"),s&&(r+=`def ${s.name}(${u}): +`))}const o={out:""};v1(i.elements,e,a,s?a.indentPerLevel:0,o),s&&e!=="python"&&(o.out+=`} `);const l=r.split(` -`).length-1;return{text:Qh((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function Qh(i,e){switch(e){case"javascript":return Wb(Mo(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return Bb(Mo(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return Jb(i)}}function Bb(i){for(let e=0;e<5;e++){const t=Uh(Lb(i),"python");if(t===i)break;i=t}return i}const Pu={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function Lb(i){return u0(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(Pu)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=Eb(n);return a.length===2?`${e}[${a[0].trim()}:${a[1].trim()}]`:`${e}[${n.trim()}:]`}case"contains":return`(${n.trim()} in ${e})`;case"isEmpty":return`(len(${e}) == 0)`;case"equalsIgnoreCase":return`(${e}.lower() == ${n.trim()}.lower())`;case"compareTo":return`((${e} > ${n.trim()}) - (${e} < ${n.trim()}))`;case"repeat":return`(${e} * ${n.trim()})`;case"concat":return`(${e} + ${n.trim()})`;default:return`${e}.${Pu[t]}(${n})`}})}function Wb(i){for(let e=0;e<5;e++){const t=Uh(u0(i,["isEmpty","equalsIgnoreCase","compareTo","replace"],(n,a,s)=>{switch(a){case"isEmpty":return`(${n}.length === 0)`;case"equalsIgnoreCase":return`(${n}.toLowerCase() === ${s.trim()}.toLowerCase())`;case"compareTo":return`${n}.localeCompare(${s.trim()})`;default:return`${n}.replaceAll(${s})`}}),"javascript");if(t===i)break;i=t}return i}function Uh(i,e){const t=/\bFiles\.readString\(\s*(?:Path\.of|Paths\.get)\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g;return e==="python"?i.replace(t,'open($1, encoding="utf-8").read()').replace(/\bInteger\.parseInt\(/g,"int(").replace(/\bDouble\.parseDouble\(/g,"float(").replace(/\bString\.valueOf\(/g,"str("):i.replace(t,'require("fs").readFileSync($1, "utf8")').replace(/\bInteger\.parseInt\(/g,"parseInt(").replace(/\bDouble\.parseDouble\(/g,"parseFloat(").replace(/\bString\.valueOf\(/g,"String(")}function Eb(i){let e=0;const t=[...i].findIndex(n=>n==="("?(e+=1,!1):n===")"?(e-=1,!1):n===","&&e===0);return t<0?[i]:[i.slice(0,t),i.slice(t+1)]}function u0(i,e,t){const n=new RegExp(`([A-Za-z_]\\w*(?:\\[[^[\\]]*\\]|\\.\\w+\\(\\))*|"(?:[^"\\\\]|\\\\.)*")\\.(${e.join("|")})\\(`,"g");let a="",s=0;for(let r=n.exec(i);r;r=n.exec(i)){const o=r.index+r[0].length-1;let l=0,u=-1;for(let c=o;ce.has(n.toLowerCase())?t:`${n}.length()`)}const Fb=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record sealed permits yield module open opens requires exports to uses provides with transitive".split(" "));function Xs(i){const e=i.trim();if(e==="")return"Main";let t="";return Array.from(e).forEach((n,a)=>{a===0?new RegExp("\\p{L}","u").test(n)||n==="_"||n==="$"?t+=n:new RegExp("\\p{Nd}","u").test(n)?t+="_"+n:t+="_":/[\p{L}\p{M}\p{N}]/u.test(n)||n==="_"||n==="$"?t+=n:t+="_"}),t=t.replace(/_{2,}/g,"_").replace(/^_+|_+$/g,""),t===""?"Main":(new RegExp("^\\p{Nd}","u").test(t)&&(t="_"+t),Fb.has(t.toLowerCase())&&(t="_"+t),t)}function Mu(i,e,t={},n=[]){const a={...Ah,...t},s=Xs(e),r=[i,...n].filter((z,I,k)=>k.indexOf(z)===I).map(z=>({d:z,header:It(z.caption)})).filter(z=>z.header!==void 0),o=r.map(z=>Co(z.d,z.header,"java",t,a.indentPerLevel)),l=It(i.caption),u=r.some(z=>ps(z.d)),m=ds(i,"java",a),c=a.indentPerLevel*2,d=ps(i),h=d?Rb(m):m,g=Z(c),f=h.trim()===""?"":h.split(` +`).length-1;return{text:Qh((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function Qh(i,e){switch(e){case"javascript":return Wx(Do(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return Zx(Do(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return Fx(i)}}function Zx(i){for(let e=0;e<5;e++){const t=Uh(Lx(i),"python");if(t===i)break;i=t}return i}const Ou={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function Lx(i){return u0(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(Ou)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=Ex(n);return a.length===2?`${e}[${a[0].trim()}:${a[1].trim()}]`:`${e}[${n.trim()}:]`}case"contains":return`(${n.trim()} in ${e})`;case"isEmpty":return`(len(${e}) == 0)`;case"equalsIgnoreCase":return`(${e}.lower() == ${n.trim()}.lower())`;case"compareTo":return`((${e} > ${n.trim()}) - (${e} < ${n.trim()}))`;case"repeat":return`(${e} * ${n.trim()})`;case"concat":return`(${e} + ${n.trim()})`;default:return`${e}.${Ou[t]}(${n})`}})}function Wx(i){for(let e=0;e<5;e++){const t=Uh(u0(i,["isEmpty","equalsIgnoreCase","compareTo","replace"],(n,a,s)=>{switch(a){case"isEmpty":return`(${n}.length === 0)`;case"equalsIgnoreCase":return`(${n}.toLowerCase() === ${s.trim()}.toLowerCase())`;case"compareTo":return`${n}.localeCompare(${s.trim()})`;default:return`${n}.replaceAll(${s})`}}),"javascript");if(t===i)break;i=t}return i}function Uh(i,e){const t=/\bFiles\.readString\(\s*(?:Path\.of|Paths\.get)\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g;return e==="python"?i.replace(t,'open($1, encoding="utf-8").read()').replace(/\bInteger\.parseInt\(/g,"int(").replace(/\bDouble\.parseDouble\(/g,"float(").replace(/\bString\.valueOf\(/g,"str("):i.replace(t,'require("fs").readFileSync($1, "utf8")').replace(/\bInteger\.parseInt\(/g,"parseInt(").replace(/\bDouble\.parseDouble\(/g,"parseFloat(").replace(/\bString\.valueOf\(/g,"String(")}function Ex(i){let e=0;const t=[...i].findIndex(n=>n==="("?(e+=1,!1):n===")"?(e-=1,!1):n===","&&e===0);return t<0?[i]:[i.slice(0,t),i.slice(t+1)]}function u0(i,e,t){const n=new RegExp(`([A-Za-z_]\\w*(?:\\[[^[\\]]*\\]|\\.\\w+\\(\\))*|"(?:[^"\\\\]|\\\\.)*")\\.(${e.join("|")})\\(`,"g");let a="",s=0;for(let r=n.exec(i);r;r=n.exec(i)){const o=r.index+r[0].length-1;let l=0,u=-1;for(let c=o;ce.has(n.toLowerCase())?t:`${n}.length()`)}const Jx=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record sealed permits yield module open opens requires exports to uses provides with transitive".split(" "));function Ks(i){const e=i.trim();if(e==="")return"Main";let t="";return Array.from(e).forEach((n,a)=>{a===0?new RegExp("\\p{L}","u").test(n)||n==="_"||n==="$"?t+=n:new RegExp("\\p{Nd}","u").test(n)?t+="_"+n:t+="_":/[\p{L}\p{M}\p{N}]/u.test(n)||n==="_"||n==="$"?t+=n:t+="_"}),t=t.replace(/_{2,}/g,"_").replace(/^_+|_+$/g,""),t===""?"Main":(new RegExp("^\\p{Nd}","u").test(t)&&(t="_"+t),Jx.has(t.toLowerCase())&&(t="_"+t),t)}function Du(i,e,t={},n=[]){const a={...Ch,...t},s=Ks(e),r=[i,...n].filter((z,I,k)=>k.indexOf(z)===I).map(z=>({d:z,header:It(z.caption)})).filter(z=>z.header!==void 0),o=r.map(z=>jo(z.d,z.header,"java",t,a.indentPerLevel)),l=It(i.caption),u=r.some(z=>fs(z.d)),m=hs(i,"java",a),c=a.indentPerLevel*2,d=fs(i),h=d?Rx(m):m,g=B(c),f=h.trim()===""?"":h.split(` `).map(z=>z.trim()===""?g:g+z).join(` -`);let b="";const x=o.length>0&&(d||u),v=[...new Set([i,...r.map(z=>z.d)].flatMap(s0))],w=v.length>0;(d||u)&&!v.includes("import java.util.Scanner;")&&v.push("import java.util.Scanner;");for(const z of v)b+=z+` -`;v.length&&(b+=` -`),b+=`public class ${s} { -`,x&&(b+=Z(a.indentPerLevel)+`static Scanner scanner = new Scanner(System.in); - -`),l||(b+=Z(a.indentPerLevel)+`public static void main(String[] args)${w?" throws Exception":""} { -`,d&&!x&&(b+=Z(c)+`Scanner scanner = new Scanner(System.in); -`,f!==""&&(b+=` -`)),b+=f,f!==""&&!f.endsWith(` -`)&&(b+=` -`),b+=Z(a.indentPerLevel)+`} -`);for(const[z,I]of o.entries())b+=(z>0||!l?` -`:"")+I;return b+=`} -`,b}function Rb(i){const e=i.split(` +`);let x="";const b=o.length>0&&(d||u),v=[...new Set([i,...r.map(z=>z.d)].flatMap(s0))],w=v.length>0;(d||u)&&!v.includes("import java.util.Scanner;")&&v.push("import java.util.Scanner;");for(const z of v)x+=z+` +`;v.length&&(x+=` +`),x+=`public class ${s} { +`,b&&(x+=B(a.indentPerLevel)+`static Scanner scanner = new Scanner(System.in); + +`),l||(x+=B(a.indentPerLevel)+`public static void main(String[] args)${w?" throws Exception":""} { +`,d&&!b&&(x+=B(c)+`Scanner scanner = new Scanner(System.in); +`,f!==""&&(x+=` +`)),x+=f,f!==""&&!f.endsWith(` +`)&&(x+=` +`),x+=B(a.indentPerLevel)+`} +`);for(const[z,I]of o.entries())x+=(z>0||!l?` +`:"")+I;return x+=`} +`,x}function Rx(i){const e=i.split(` `);let t=0;for(e[t]==="// import java.util.Scanner;"&&t++;t=e.length?"":e.slice(t).join(` -`)}const yn={target:"visustruct.codegen.target",javaMode:"visustruct.codegen.javaOutputMode",comments:"visustruct.codegen.includeDiagramComments",emptyElse:"visustruct.codegen.includeEmptyElse"};function ra(i){try{return localStorage.getItem(i)}catch{return null}}function oa(i,e){try{localStorage.setItem(i,e)}catch{}}const Gb=()=>p("web_run_stopped_loop"),$h=()=>p("web_run_cancelled"),Ne=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Hb(i){let e=0;return i.replace(/^(\s*)while\s*\(\s*true\s*\)(?:\s*\/\*.*?\*\/)?\s*\{/gm,(t,n)=>{const a=`__visuStructLoopGuard${e++}`;return`${n}for (let ${a} = 0; ${a} < 100000 || (() => { throw new Error(${JSON.stringify(Gb())}); })(); ${a}++) {`})}function Vb(i){return Hb(i).replace(/\bprompt\s*\(/g,"await __visuStructPrompt(")}const qb=` +`)}const yn={target:"visustruct.codegen.target",javaMode:"visustruct.codegen.javaOutputMode",comments:"visustruct.codegen.includeDiagramComments",emptyElse:"visustruct.codegen.includeEmptyElse"};function ra(i){try{return localStorage.getItem(i)}catch{return null}}function oa(i,e){try{localStorage.setItem(i,e)}catch{}}const Gx=()=>p("web_run_stopped_loop"),$h=()=>p("web_run_cancelled"),Ne=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Hx(i){let e=0;return i.replace(/^(\s*)while\s*\(\s*true\s*\)(?:\s*\/\*.*?\*\/)?\s*\{/gm,(t,n)=>{const a=`__visuStructLoopGuard${e++}`;return`${n}for (let ${a} = 0; ${a} < 100000 || (() => { throw new Error(${JSON.stringify(Gx())}); })(); ${a}++) {`})}function Vx(i){return Hx(i).replace(/\bprompt\s*\(/g,"await __visuStructPrompt(")}const qx=` let answer let lines = [] // Text von \`process.stdout.write\` ohne neue Zeile (wie \`System.out.print\`). @@ -255,7 +255,7 @@ onmessage = async (e) => { send('error', String(err)) } } -`,kr=2e3;class Qb{constructor(e,t,n,a,s=()=>[]){y(this,"element");y(this,"target");y(this,"javaMode");y(this,"comments");y(this,"emptyElse");y(this,"code","");y(this,"codeView");y(this,"javaModeRow");y(this,"runButton");y(this,"saveButton");y(this,"copyButton");y(this,"runner");y(this,"runOutput");y(this,"runInput");y(this,"pseudocodeBox");y(this,"pseudocodeHint");y(this,"worker");y(this,"outputLines",[]);y(this,"droppedLines",0);y(this,"outputFrame");y(this,"pendingAnswer");this.currentDocument=e,this.saveFile=t,this.onClose=n,this.setPseudocode=a,this.subprograms=s;const r=ra(yn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=ra(yn.javaMode)==="class"?"class":"snippet",this.comments=ra(yn.comments)==="true",this.emptyElse=ra(yn.emptyElse)!=="false",this.element=document.createElement("aside"),this.element.className="codepanel",this.build()}refresh(){const e=this.currentDocument(),t=this.options();this.code=this.target==="java"&&this.javaMode==="class"?Mu(e,this.classStem(),t,this.subprograms()):ds(e,this.target,t,this.subprograms()),this.codeView.textContent=this.code,this.javaModeRow.hidden=this.target!=="java",this.saveButton.hidden=this.target!=="java",this.runButton.hidden=this.target!=="javascript"||!!e.pseudocode,this.runButton.hidden&&this.stopRun(!0),this.pseudocodeBox.checked=!!e.pseudocode,this.pseudocodeHint.hidden=!e.pseudocode;for(const n of this.element.querySelectorAll("[data-target]"))n.setAttribute("aria-pressed",String(n.dataset.target===this.target));for(const n of this.element.querySelectorAll("[data-java-mode]"))n.setAttribute("aria-pressed",String(n.dataset.javaMode===this.javaMode))}close(){this.stopRun(!0)}options(){return{includeDiagramTextAsComments:this.comments,includeEmptyElseBranch:this.emptyElse,pseudocodeNote:p("codegen_pseudocode_note")}}classStem(){return cs(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=` +`,Sr=2e3;class Qx{constructor(e,t,n,a,s=()=>[]){y(this,"element");y(this,"target");y(this,"javaMode");y(this,"comments");y(this,"emptyElse");y(this,"code","");y(this,"codeView");y(this,"javaModeRow");y(this,"runButton");y(this,"saveButton");y(this,"copyButton");y(this,"runner");y(this,"runOutput");y(this,"runInput");y(this,"pseudocodeBox");y(this,"pseudocodeHint");y(this,"worker");y(this,"outputLines",[]);y(this,"droppedLines",0);y(this,"outputFrame");y(this,"pendingAnswer");this.currentDocument=e,this.saveFile=t,this.onClose=n,this.setPseudocode=a,this.subprograms=s;const r=ra(yn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=ra(yn.javaMode)==="class"?"class":"snippet",this.comments=ra(yn.comments)==="true",this.emptyElse=ra(yn.emptyElse)!=="false",this.element=document.createElement("aside"),this.element.className="codepanel",this.build()}refresh(){const e=this.currentDocument(),t=this.options();this.code=this.target==="java"&&this.javaMode==="class"?Du(e,this.classStem(),t,this.subprograms()):hs(e,this.target,t,this.subprograms()),this.codeView.textContent=this.code,this.javaModeRow.hidden=this.target!=="java",this.saveButton.hidden=this.target!=="java",this.runButton.hidden=this.target!=="javascript"||!!e.pseudocode,this.runButton.hidden&&this.stopRun(!0),this.pseudocodeBox.checked=!!e.pseudocode,this.pseudocodeHint.hidden=!e.pseudocode;for(const n of this.element.querySelectorAll("[data-target]"))n.setAttribute("aria-pressed",String(n.dataset.target===this.target));for(const n of this.element.querySelectorAll("[data-java-mode]"))n.setAttribute("aria-pressed",String(n.dataset.javaMode===this.javaMode))}close(){this.stopRun(!0)}options(){return{includeDiagramTextAsComments:this.comments,includeEmptyElseBranch:this.emptyElse,pseudocodeNote:p("codegen_pseudocode_note")}}classStem(){return ds(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=`

${Ne(p("codegen_placeholder_title"))}

@@ -285,12 +285,12 @@ onmessage = async (e) => {

${Ne(p("codegen_generated_hint"))}

- `;const e=a=>this.element.querySelector(a);this.codeView=e(".code-view"),this.javaModeRow=e(".java-mode"),this.runButton=e("[data-act=run]"),this.saveButton=e("[data-act=save]"),this.copyButton=e("[data-act=copy]"),this.runner=e(".runner"),this.runOutput=e(".runner-out"),this.runInput=e(".runner-input"),this.pseudocodeBox=e("[data-opt=pseudocode]"),this.pseudocodeHint=e(".pseudocode-hint"),this.pseudocodeBox.addEventListener("change",()=>this.setPseudocode(this.pseudocodeBox.checked)),e(".code-close").addEventListener("click",()=>this.onClose());for(const a of this.element.querySelectorAll("[data-target]"))a.addEventListener("click",()=>{this.target=a.dataset.target,oa(yn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,oa(yn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,oa(yn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,oa(yn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=Xs(this.classStem()),s=Mu(this.currentDocument(),this.classStem(),this.options());this.saveFile(`${a}.java`,s)}),this.runButton.addEventListener("click",()=>this.run()),e("[data-act=stop]").addEventListener("click",()=>this.stopRun(!1)),e("[data-act=cancel]").addEventListener("click",()=>this.answer(null)),this.runInput.addEventListener("submit",a=>{a.preventDefault(),this.answer(this.runInput.querySelector("input").value)})}async copy(){var t;let e=!1;try{await navigator.clipboard.writeText(this.code),e=!0}catch{const n=document.createRange();n.selectNodeContents(this.codeView);const a=getSelection();a==null||a.removeAllRanges(),a==null||a.addRange(n),e=((t=document.execCommand)==null?void 0:t.call(document,"copy"))??!1}this.copyButton.textContent=p(e?"web_copied_check":"web_copy_manual"),setTimeout(()=>this.copyButton.textContent=p("codegen_copy"),2e3)}run(){this.stopRun(!0),this.runner.hidden=!1,this.runOutput.textContent="",this.outputLines=[],this.droppedLines=0,this.runOutput.classList.remove("error");const e=Vb(this.code),t=n=>this.onRunnerMessage(n);try{const n=URL.createObjectURL(new Blob([qb],{type:"text/javascript"})),a=new Worker(n);URL.revokeObjectURL(n),a.onmessage=s=>t(s.data),a.onerror=s=>{s.preventDefault(),t({type:"error",text:s.message||p("web_run_error")})},a.postMessage({type:"run",code:e}),this.worker=a}catch{this.runInPage(e,t)}this.setRunning(!0)}runInPage(e,t){const n={log:(...r)=>t({type:"log",lines:[r.map(o=>typeof o=="string"?o:JSON.stringify(o)).join(" ")]})},a=r=>new Promise((o,l)=>{this.pendingAnswer=u=>u===null?l(new Error($h())):o(u),t({type:"prompt",text:r})}),s=(async()=>{}).constructor;new s("__visuStructPrompt","console",e)(a,n).then(()=>t({type:"done"})).catch(r=>t({type:"error",text:String(r)}))}onRunnerMessage(e){switch(e.type){case"log":this.appendOutput(e.lines??[]);break;case"prompt":{this.runInput.hidden=!1,this.runInput.querySelector("label").textContent=e.text??"";const t=this.runInput.querySelector("input");t.value="",t.focus();break}case"error":this.appendOutput([e.text??""]),this.runOutput.classList.add("error"),this.stopRun(!1);break;case"done":this.stopRun(!1);break}}appendOutput(e){this.outputLines.push(...e),this.outputLines.length>kr&&(this.droppedLines+=this.outputLines.length-kr,this.outputLines.splice(0,this.outputLines.length-kr)),this.outputFrame===void 0&&(this.outputFrame=requestAnimationFrame(()=>{this.outputFrame=void 0;const t=this.droppedLines>0?p("web_run_dropped_fmt",this.droppedLines)+` + `;const e=a=>this.element.querySelector(a);this.codeView=e(".code-view"),this.javaModeRow=e(".java-mode"),this.runButton=e("[data-act=run]"),this.saveButton=e("[data-act=save]"),this.copyButton=e("[data-act=copy]"),this.runner=e(".runner"),this.runOutput=e(".runner-out"),this.runInput=e(".runner-input"),this.pseudocodeBox=e("[data-opt=pseudocode]"),this.pseudocodeHint=e(".pseudocode-hint"),this.pseudocodeBox.addEventListener("change",()=>this.setPseudocode(this.pseudocodeBox.checked)),e(".code-close").addEventListener("click",()=>this.onClose());for(const a of this.element.querySelectorAll("[data-target]"))a.addEventListener("click",()=>{this.target=a.dataset.target,oa(yn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,oa(yn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,oa(yn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,oa(yn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=Ks(this.classStem()),s=Du(this.currentDocument(),this.classStem(),this.options());this.saveFile(`${a}.java`,s)}),this.runButton.addEventListener("click",()=>this.run()),e("[data-act=stop]").addEventListener("click",()=>this.stopRun(!1)),e("[data-act=cancel]").addEventListener("click",()=>this.answer(null)),this.runInput.addEventListener("submit",a=>{a.preventDefault(),this.answer(this.runInput.querySelector("input").value)})}async copy(){var t;let e=!1;try{await navigator.clipboard.writeText(this.code),e=!0}catch{const n=document.createRange();n.selectNodeContents(this.codeView);const a=getSelection();a==null||a.removeAllRanges(),a==null||a.addRange(n),e=((t=document.execCommand)==null?void 0:t.call(document,"copy"))??!1}this.copyButton.textContent=p(e?"web_copied_check":"web_copy_manual"),setTimeout(()=>this.copyButton.textContent=p("codegen_copy"),2e3)}run(){this.stopRun(!0),this.runner.hidden=!1,this.runOutput.textContent="",this.outputLines=[],this.droppedLines=0,this.runOutput.classList.remove("error");const e=Vx(this.code),t=n=>this.onRunnerMessage(n);try{const n=URL.createObjectURL(new Blob([qx],{type:"text/javascript"})),a=new Worker(n);URL.revokeObjectURL(n),a.onmessage=s=>t(s.data),a.onerror=s=>{s.preventDefault(),t({type:"error",text:s.message||p("web_run_error")})},a.postMessage({type:"run",code:e}),this.worker=a}catch{this.runInPage(e,t)}this.setRunning(!0)}runInPage(e,t){const n={log:(...r)=>t({type:"log",lines:[r.map(o=>typeof o=="string"?o:JSON.stringify(o)).join(" ")]})},a=r=>new Promise((o,l)=>{this.pendingAnswer=u=>u===null?l(new Error($h())):o(u),t({type:"prompt",text:r})}),s=(async()=>{}).constructor;new s("__visuStructPrompt","console",e)(a,n).then(()=>t({type:"done"})).catch(r=>t({type:"error",text:String(r)}))}onRunnerMessage(e){switch(e.type){case"log":this.appendOutput(e.lines??[]);break;case"prompt":{this.runInput.hidden=!1,this.runInput.querySelector("label").textContent=e.text??"";const t=this.runInput.querySelector("input");t.value="",t.focus();break}case"error":this.appendOutput([e.text??""]),this.runOutput.classList.add("error"),this.stopRun(!1);break;case"done":this.stopRun(!1);break}}appendOutput(e){this.outputLines.push(...e),this.outputLines.length>Sr&&(this.droppedLines+=this.outputLines.length-Sr,this.outputLines.splice(0,this.outputLines.length-Sr)),this.outputFrame===void 0&&(this.outputFrame=requestAnimationFrame(()=>{this.outputFrame=void 0;const t=this.droppedLines>0?p("web_run_dropped_fmt",this.droppedLines)+` `:"";this.runOutput.textContent=t+this.outputLines.join(` `)+(this.outputLines.length?` -`:""),this.runOutput.scrollTop=this.runOutput.scrollHeight}))}answer(e){var t;this.runInput.hidden=!0,this.worker?this.worker.postMessage({type:"answer",value:e}):(t=this.pendingAnswer)==null||t.call(this,e),this.pendingAnswer=void 0}stopRun(e){var t;(t=this.worker)==null||t.terminate(),this.worker=void 0,this.pendingAnswer=void 0,this.runInput&&(this.runInput.hidden=!0),e&&this.runner&&(this.runner.hidden=!0),this.setRunning(!1)}setRunning(e){const t=this.element.querySelector("[data-act=stop]");t&&(t.disabled=!e)}}const Me=(i,e=!1)=>``,se={newFile:Me(''),open:Me(''),save:Me(''),undo:Me(''),redo:Me(''),cut:Me(''),copy:Me(''),paste:Me(''),trash:Me(''),share:Me(''),book:Me(''),code:Me(''),play:Me('',!0),step:Me(''),indent:Me(''),stop:Me('',!0),folder:Me(''),newFolder:Me(''),diagram:Me(''),fileText:Me('')},Ub="visustruct.learn.progress",Sr={"04-sequenz":"05-sequenz","05-variablen-und-datentypen":"04-variablen-und-datentypen","07-verzweigung":"08-verzweigung","08-bedingungen-verknuepfen":"09-bedingungen-verknuepfen","09-fallauswahl":"10-fallauswahl","10-while-schleife":"11-while-schleife","11-do-while-schleife":"12-do-while-schleife","12-for-schleife":"13-for-schleife","13-verschachteln":"14-verschachteln","14-arrays":"15-arrays","15-aufruf-und-aussprung":"18-aufruf-und-aussprung","16-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-suchen-und-sortieren":"19-suchen-und-sortieren","18-suchen-und-sortieren":"19-suchen-und-sortieren","16-simulation-und-schreibtischtest":"07-simulation-und-schreibtischtest","17-java":"20-java","18-java":"20-java","19-java":"20-java","18-python-und-javascript":"21-python-und-javascript","19-python-und-javascript":"21-python-und-javascript","20-python-und-javascript":"21-python-und-javascript","22-erstes-fenster":"28-erstes-fenster","23-knopf-im-fenster":"29-knopf-im-fenster","24-der-knopf-reagiert":"30-der-knopf-reagiert","23-erstes-fenster":"28-erstes-fenster","24-knopf-im-fenster":"29-knopf-im-fenster","25-der-knopf-reagiert":"30-der-knopf-reagiert","26-zahl-verdoppeln":"31-zahl-verdoppeln","27-klickzaehler":"32-klickzaehler","28-ampel":"33-ampel","29-notenrechner":"34-notenrechner","30-taschenrechner":"35-taschenrechner","31-zahlenraten":"36-zahlenraten","13-lautsprecher":"16-lautsprecher","14-bildschirm":"18-bildschirm","15-motoren":"20-motoren","16-stoppuhr-akku":"21-stoppuhr-akku","03-sensoren":"04-sensoren","04-bis-zur-wand":"05-bis-zur-wand","05-abstand":"06-abstand","06-linie":"07-linie","07-farben":"08-farben","08-tasten-joystick":"10-tasten-joystick","09-licht":"11-licht","10-lautstaerke":"12-lautstaerke","11-neigung":"13-neigung","12-leds":"14-leds","13-einzelne-leds":"15-einzelne-leds","14-lautsprecher":"16-lautsprecher","15-bildschirm":"18-bildschirm","16-motoren":"20-motoren","17-stoppuhr-akku":"21-stoppuhr-akku"};function $b(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(Sr))i.lessons[a]&&!i.lessons[s]&&(e[s]=i.lessons[a]),i.lessons[a]&&delete e[a];const t=(n=i.view)!=null&&n.lesson&&Sr[i.view.lesson]?{...i.view,lesson:Sr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function Yb(){try{localStorage.removeItem(Ub)}catch{}}const Yh=()=>({lessons:{},exercises:{}});Yb();let et=Yh();const Lo=new Set;function la(){for(const i of Lo)i()}const Du="visustruct-lernstand";function Xh(i,e){return i||e||void 0}function Xb(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||t[n]||!1;return{step:Math.max(i.step??0,e.step??0),done:Xh(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function Kb(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=Xb(i.lessons[a],s);const n={...i.exercises};for(const[a,s]of Object.entries(e.exercises)){const r=i.exercises[a];n[a]=r?{done:Xh(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const be={lesson(i){return et.lessons[i]??{step:0}},updateLesson(i,e){et.lessons[i]={...be.lesson(i),...e},la()},exercise(i){return et.exercises[i]??{}},updateExercise(i,e){et.exercises[i]={...be.exercise(i),...e},la()},resetExercise(i){delete et.exercises[i],la()},view(){return et.view},hasContent(){return Object.values(et.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(et.exercises).length>0},setView(i){et.view=i,la()},onChange(i){return Lo.add(i),()=>Lo.delete(i)},toFile(){return JSON.stringify({format:Du,version:1,saved:new Date().toISOString(),lessons:et.lessons,exercises:et.exercises,view:et.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==Du)return!1;const n=$b({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return et=e?{...Kb(et,n),view:n.view??et.view}:n,!0},clear(){et=Yh()}};function Zu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const Bu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function ex(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:Bu(i.name)&&Bu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function tx(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function nx(i,e){const t=new Set([...e].map(a=>a.toLowerCase())),n=a=>!t.has(`${a}.visustruct`.toLowerCase())&&!t.has(`${a}.java`.toLowerCase());if(n(i))return i;for(let a=2;;a++)if(n(`${i} ${a}`))return`${i} ${a}`}function ix(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Un=10;function ax(i){let e=i.replace(/\r/g,"").split(` -`).filter(m=>!m.startsWith("//"));const t=e.filter(m=>/^linie:/.test(m)).map(m=>m.slice(6).trim());e=e.filter(m=>!/^linie:/.test(m));const n=e.findIndex(m=>/^raster:\s*\d+\s*$/.test(m));if(n>=0){const m=Number(e[n].split(":")[1]);e.splice(n,1),e=e.flatMap(c=>Array.from({length:m},(d,h)=>Array.from(c).map(g=>Array.from({length:m},(f,b)=>"^>v<".includes(g)?h===m>>1&&b===m>>1?g:".":g).join("")).join("")))}for(;e.length&&e[e.length-1].trim()==="";)e.pop();for(;e.length&&e[0].trim()==="";)e.shift();const s=Math.max(...e.map(m=>m.length))*Un,r=e.length*Un,o=(m,c)=>({x:-s/2+(m+.5)*Un,y:r/2-(c+.5)*Un}),l={width:s,depth:r,start:{x:0,y:0,heading:0},walls:[],lines:[],blocks:[],marks:[],goals:[],targets:[],colors:[]};let u=0;e.forEach((m,c)=>{Array.from(m).forEach((d,h)=>{const g=o(h,c);d==="#"?l.blocks.push(g):d==="="?l.marks.push(g):d==="Z"?l.goals.push(g):d==="o"?l.targets.push(g):d in Lu?l.colors.push({at:g,color:Lu[d]}):"^>v<".includes(d)&&(u++,l.start={...g,heading:{"^":0,">":90,v:180,"<":270}[d]})})});for(const m of t)l.lines.push(m.split(/\s+/).map(c=>{const[d,h]=c.split(",").map(Number);if(!Number.isFinite(d)||!Number.isFinite(h))throw new Error(`Linie: „${c}“ ist kein Feld (Spalte,Zeile).`);return o(d,h)}));if(u!==1)throw new Error(`Die Weltkarte braucht genau einen Start (^ > v <), gefunden: ${u}`);return l}const Lu={r:"red",g:"green",b:"blue",y:"yellow"},q1=(i,e)=>Math.abs(i.x-e.x)<=Un/2&&Math.abs(i.y-e.y)<=Un/2,Wu=10,Eu=9,sx=300,d1=8,rx=[-3.6,-1.2,1.2,3.6],ox=2.5,lx=20,ux=12,m0=100,Ci={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},Nu=i=>i*Math.PI/180,h1=i=>({x:Math.sin(Nu(i)),y:Math.cos(Nu(i))}),ua=()=>Array.from({length:yh},()=>{}),Ju=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class fs{constructor(e=Ci){y(this,"pose");y(this,"trail");y(this,"bumps",0);y(this,"leds",ua());y(this,"screen");y(this,"wheels",[0,0]);y(this,"time",0);y(this,"timerStart",0);y(this,"blocked",!1);y(this,"blockWallCache");this.setup=e,this.pose={...e.start},this.trail=[{x:e.start.x,y:e.start.y}]}reset(){this.pose={...this.setup.start},this.trail=[{x:this.pose.x,y:this.pose.y}],this.bumps=0,this.leds=ua(),this.screen=void 0,this.wheels=[0,0],this.time=0,this.timerStart=0,this.blocked=!1}get allWalls(){const e=this.setup.width/2,t=this.setup.depth/2,n=[{x:-e,y:-t},{x:e,y:-t},{x:e,y:t},{x:-e,y:t}];return[...this.setup.walls,...n.map((a,s)=>({from:a,to:n[(s+1)%4]})),...this.blockWalls]}get blockWalls(){return this.blockWallCache??(this.blockWallCache=(this.setup.blocks??[]).flatMap(e=>{const t=Un/2,n=[{x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t},{x:e.x-t,y:e.y+t}];return n.map((a,s)=>({from:a,to:n[(s+1)%4]}))})),this.blockWallCache}atGoal(){const e=h1(this.pose.heading),t={x:this.pose.x+e.x*d1,y:this.pose.y+e.y*d1};return(this.setup.goals??[]).some(n=>q1(this.pose,n)||q1(t,n))||(this.setup.targets??[]).some(n=>q1(this.pose,n))}apply(e){switch(e.method){case"forward":return this.wheels=[0,0],this.drive(e.args[0]);case"backward":return this.wheels=[0,0],this.drive(-e.args[0]);case"turnRight":return this.wheels=[0,0],this.turn(e.args[0]);case"turnLeft":return this.wheels=[0,0],this.turn(-e.args[0]);case"stop":this.wheels=[0,0];return;case"drive":this.wheels=[Fu(e.args[0]),Fu(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=ua().map(()=>Ju(e.args));return;case"ledOff":this.leds=ua();return;case"ledColor":this.leds[e.args[0]]=Ju(ss[e.text??""]??[0,0,0]);return;case"showText":this.screen=e.text;return}}tick(e){if(e<=0)return;this.time+=e;const[t,n]=this.wheels.map(o=>o/100*lx);if(t===0&&n===0)return;const a=Math.ceil(e/10),s=e/1e3/a;let r=!1;for(let o=0;o{const r={x:this.pose.x+e.x*d1+t.x*a,y:this.pose.y+e.y*d1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>q1(r,l))||this.setup.lines.some(l=>cx(r,l)<=ox/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=h1(this.pose.heading),t={x:this.pose.x+e.x*d1,y:this.pose.y+e.y*d1};return(n=(this.setup.colors??[]).find(a=>q1(t,a.at)))==null?void 0:n.color}sensors(){const e=this.lineState();return{getDistance:this.distance(),getLine:e,getColor:this.colorUnder()??(e&6?"black":"white"),isLineLeft:(e&4)!==0,isLineRight:(e&2)!==0,getTimer:this.timer}}freeDistance(e,t){let n=1/0;for(const a of this.allWalls){const s=mx(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Ru(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function mx(i,e,t,n){const a={x:n.x-t.x,y:n.y-t.y},s=e.x*a.y-e.y*a.x;if(Math.abs(s)<1e-12)return;const r={x:t.x-i.x,y:t.y-i.y},o=(r.x*a.y-r.y*a.x)/s,l=(r.x*e.y-r.y*e.x)/s;return o>=0&&l>=0&&l<=1?o:void 0}function cx(i,e){let t=1/0;for(let n=0;n+10&&o.tick(m0),s.robotSensors={...o.sensors(),...bx(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?os(m.robotActions):void 0,...n?{atGoal:o.atGoal(),bumps:o.bumps}:{},led:o.leds.some(d=>d!==void 0),tone:m.robotActions.some(d=>d.method==="playTone"),screen:o.screen,actions:zh(m.robotActions.filter(d=>!px.has(d.method)))});if(m.inputRequest){const d=r.shift();if(d===void 0)return{...c(),missingInput:!0};if(s.provideInput(d),m.inputErrorNotice)return{...c(),error:m.inputErrorNotice};continue}if(m.isHalted)return{...c(),error:m.notice};if(!s.canStep)return{...c(),unusedInputs:r.length||void 0};s.step()}return{outputs:[...s.state.outputLines],files:new Map(s.state.files),drive:os(s.state.robotActions),tooManySteps:!0}}function bx(i,e){const t=Math.floor(e/hx);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function Kh(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` -`)}function ma(i,e){return i.length!==e.length?!1:i.every((t,n)=>Gu(t)===Gu(e[n]))}function Gu(i){const e=i.trim().replace(/\s+/g," ");return/^-?\d+\.0+$/.test(e)?e.replace(/\.0+$/,""):e}function xx(i,e,t,n){return e.map(a=>{var d,h,g;const s=a.world?n==null?void 0:n(a.world):void 0;if(a.world&&!s)throw new Error(`Weltkarte „${a.world}“ fehlt.`);const r=fx(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var b;return ma(Kh((b=r.files)==null?void 0:b.get(f.name)),f.lines)}),l=!a.drive||ma(r.drive??[],a.drive),u=!a.world||r.bumps===0&&(!((d=s==null?void 0:s.goals)!=null&&d.length||(h=s==null?void 0:s.targets)!=null&&h.length)||r.atGoal===!0),m=(a.led===void 0||r.led===a.led)&&(a.tone===void 0||r.tone===a.tone)&&(a.screen===void 0||r.screen===a.screen)&&(a.drives===void 0||(((g=r.drive)==null?void 0:g.length)??0)>0===a.drives)&&(!a.actions||ma(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ma(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function vx(i){const e=new Set,t=n=>{for(const a of n){e.add(a.type),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])t(s.elements)}};return t(i.elements),e}function Wo(i){const e=[S.forSchleife,S.whileSchleife,S.doUntilSchleife,S.endlosschleife];let t=0;for(const n of i){const a=Math.max(Wo(n.loopBody??[]),...(n.cases??[]).map(s=>Wo(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class Ai extends Error{}function yx(i,e){const t=[],n=[];for(const a of i){const s=a.trim();if(!s)continue;if(s.startsWith("?")){const o=s.slice(1).trim();bs(o,wx(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new Ai(`${e}: Unbekannte Zeile im Spiel: „${s}“`);t.push(r[4]?{name:r[1],kind:"boolean"}:{name:r[1],kind:"int",min:Number(r[2]),max:Number(r[3])})}if(!n.length)throw new Ai(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function wx(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function zx(i){const e=[],t=/\s*(?:(\d+)|(true|false)\b|([A-Za-z_]\w*)|(&&|\|\||==|!=|<=|>=|<|>|!|\(|\)))/y;let n=0;for(;nt[n],s=d=>{var h;return((h=a())==null?void 0:h.kind)==="op"&&a().value===d},r=()=>{throw new Ai(`Bedingung nicht lesbar: „${i}“`)},o=()=>{const d=t[n++]??r();if(d.kind==="num"||d.kind==="bool")return d.value;if(d.kind==="name"){if(!(d.value in e))throw new Ai(`Unbekannte Variable „${d.value}“ in „${i}“`);return e[d.value]}if(d.value==="("){const h=m();return s(")")||r(),n++,h}if(d.value==="!"){const h=o();return typeof h!="boolean"&&r(),!h}return r()},l=()=>{const d=o(),h=a();if((h==null?void 0:h.kind)==="op"&&["==","!=","<","<=",">",">="].includes(h.value)){n++;const g=o();switch(h.value){case"==":return d===g;case"!=":return d!==g}(typeof d!="number"||typeof g!="number")&&r();const[f,b]=[d,g];return h.value==="<"?f"?f>b:f>=b}return d},u=()=>{let d=l();for(;s("&&");){n++;const h=l();d=d&&h}return d},m=()=>{let d=u();for(;s("||");){n++;const h=u();d=d||h}return d},c=m();return n!==t.length||typeof c!="boolean"?r():c}function Ix(i,e){const t=[i],n=i.replace(/\b[A-Za-z_]\w*\b/g,r=>r in e?String(e[r]):r);n!==i&&t.push(n);const a=n.replace(/(-?\d+|true|false)\s*(==|!=|<=|>=|<|>)\s*(-?\d+|true|false)/g,r=>String(bs(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(bs(i,e));return s!==t[t.length-1]&&t.push(s),t}function kx(i,e){const t=[],n=new RegExp(`\\b${e}\\s*(?:==|!=|<=|>=|<|>)\\s*(-?\\d+)|(-?\\d+)\\s*(?:==|!=|<=|>=|<|>)\\s*${e}\\b`,"g");for(const a of i.matchAll(n)){const s=Number(a[1]??a[2]);t.push(s-1,s,s+1)}return t}function Sx(i,e,t,n=Math.random){const a=i.conditions.length,s=Math.floor(e*a/t),r=Math.min(a-1,s+(n()<.5?0:1)),o=i.conditions[r],l={};for(const u of i.vars){if(u.kind==="boolean"){l[u.name]=n()<.5;continue}const m=kx(o,u.name).filter(c=>c>=u.min&&c<=u.max);l[u.name]=m.length&&n()<.6?m[Math.floor(n()*m.length)]:u.min+Math.floor(n()*(u.max-u.min+1))}return{condition:o,values:l,answer:bs(o,l)}}function Tx(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const _x=`--- +`:""),this.runOutput.scrollTop=this.runOutput.scrollHeight}))}answer(e){var t;this.runInput.hidden=!0,this.worker?this.worker.postMessage({type:"answer",value:e}):(t=this.pendingAnswer)==null||t.call(this,e),this.pendingAnswer=void 0}stopRun(e){var t;(t=this.worker)==null||t.terminate(),this.worker=void 0,this.pendingAnswer=void 0,this.runInput&&(this.runInput.hidden=!0),e&&this.runner&&(this.runner.hidden=!0),this.setRunning(!1)}setRunning(e){const t=this.element.querySelector("[data-act=stop]");t&&(t.disabled=!e)}}const De=(i,e=!1)=>``,se={newFile:De(''),open:De(''),save:De(''),undo:De(''),redo:De(''),cut:De(''),copy:De(''),paste:De(''),trash:De(''),share:De(''),book:De(''),code:De(''),play:De('',!0),step:De(''),indent:De(''),stop:De('',!0),folder:De(''),newFolder:De(''),diagram:De(''),fileText:De('')},Ux="visustruct.learn.progress",Tr={"04-sequenz":"05-sequenz","05-variablen-und-datentypen":"04-variablen-und-datentypen","07-verzweigung":"08-verzweigung","08-bedingungen-verknuepfen":"09-bedingungen-verknuepfen","09-fallauswahl":"10-fallauswahl","10-while-schleife":"11-while-schleife","11-do-while-schleife":"12-do-while-schleife","12-for-schleife":"13-for-schleife","13-verschachteln":"14-verschachteln","14-arrays":"15-arrays","15-aufruf-und-aussprung":"18-aufruf-und-aussprung","16-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-suchen-und-sortieren":"19-suchen-und-sortieren","18-suchen-und-sortieren":"19-suchen-und-sortieren","16-simulation-und-schreibtischtest":"07-simulation-und-schreibtischtest","17-java":"20-java","18-java":"20-java","19-java":"20-java","18-python-und-javascript":"21-python-und-javascript","19-python-und-javascript":"21-python-und-javascript","20-python-und-javascript":"21-python-und-javascript","22-erstes-fenster":"28-erstes-fenster","23-knopf-im-fenster":"29-knopf-im-fenster","24-der-knopf-reagiert":"30-der-knopf-reagiert","23-erstes-fenster":"28-erstes-fenster","24-knopf-im-fenster":"29-knopf-im-fenster","25-der-knopf-reagiert":"30-der-knopf-reagiert","26-zahl-verdoppeln":"31-zahl-verdoppeln","27-klickzaehler":"32-klickzaehler","28-ampel":"33-ampel","29-notenrechner":"34-notenrechner","30-taschenrechner":"35-taschenrechner","31-zahlenraten":"36-zahlenraten","13-lautsprecher":"16-lautsprecher","14-bildschirm":"18-bildschirm","15-motoren":"20-motoren","16-stoppuhr-akku":"21-stoppuhr-akku","03-sensoren":"04-sensoren","04-bis-zur-wand":"05-bis-zur-wand","05-abstand":"06-abstand","06-linie":"07-linie","07-farben":"08-farben","08-tasten-joystick":"10-tasten-joystick","09-licht":"11-licht","10-lautstaerke":"12-lautstaerke","11-neigung":"13-neigung","12-leds":"14-leds","13-einzelne-leds":"15-einzelne-leds","14-lautsprecher":"16-lautsprecher","15-bildschirm":"18-bildschirm","16-motoren":"20-motoren","17-stoppuhr-akku":"21-stoppuhr-akku"};function $x(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(Tr))i.lessons[a]&&!i.lessons[s]&&(e[s]=i.lessons[a]),i.lessons[a]&&delete e[a];const t=(n=i.view)!=null&&n.lesson&&Tr[i.view.lesson]?{...i.view,lesson:Tr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function Yx(){try{localStorage.removeItem(Ux)}catch{}}const Yh=()=>({lessons:{},exercises:{}});Yx();let et=Yh();const Lo=new Set;function la(){for(const i of Lo)i()}const Mu="visustruct-lernstand";function Xh(i,e){return i||e||void 0}function Xx(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||t[n]||!1;return{step:Math.max(i.step??0,e.step??0),done:Xh(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function Kx(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=Xx(i.lessons[a],s);const n={...i.exercises};for(const[a,s]of Object.entries(e.exercises)){const r=i.exercises[a];n[a]=r?{done:Xh(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const xe={lesson(i){return et.lessons[i]??{step:0}},updateLesson(i,e){et.lessons[i]={...xe.lesson(i),...e},la()},exercise(i){return et.exercises[i]??{}},updateExercise(i,e){et.exercises[i]={...xe.exercise(i),...e},la()},resetExercise(i){delete et.exercises[i],la()},view(){return et.view},hasContent(){return Object.values(et.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(et.exercises).length>0},setView(i){et.view=i,la()},onChange(i){return Lo.add(i),()=>Lo.delete(i)},toFile(){return JSON.stringify({format:Mu,version:1,saved:new Date().toISOString(),lessons:et.lessons,exercises:et.exercises,view:et.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==Mu)return!1;const n=$x({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return et=e?{...Kx(et,n),view:n.view??et.view}:n,!0},clear(){et=Yh()}};function Bu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const Zu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function eb(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:Zu(i.name)&&Zu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function tb(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function nb(i,e){const t=new Set([...e].map(a=>a.toLowerCase())),n=a=>!t.has(`${a}.visustruct`.toLowerCase())&&!t.has(`${a}.java`.toLowerCase());if(n(i))return i;for(let a=2;;a++)if(n(`${i} ${a}`))return`${i} ${a}`}function ib(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Un=10;function ab(i){let e=i.replace(/\r/g,"").split(` +`).filter(m=>!m.startsWith("//"));const t=e.filter(m=>/^linie:/.test(m)).map(m=>m.slice(6).trim());e=e.filter(m=>!/^linie:/.test(m));const n=e.findIndex(m=>/^raster:\s*\d+\s*$/.test(m));if(n>=0){const m=Number(e[n].split(":")[1]);e.splice(n,1),e=e.flatMap(c=>Array.from({length:m},(d,h)=>Array.from(c).map(g=>Array.from({length:m},(f,x)=>"^>v<".includes(g)?h===m>>1&&x===m>>1?g:".":g).join("")).join("")))}for(;e.length&&e[e.length-1].trim()==="";)e.pop();for(;e.length&&e[0].trim()==="";)e.shift();const s=Math.max(...e.map(m=>m.length))*Un,r=e.length*Un,o=(m,c)=>({x:-s/2+(m+.5)*Un,y:r/2-(c+.5)*Un}),l={width:s,depth:r,start:{x:0,y:0,heading:0},walls:[],lines:[],blocks:[],marks:[],goals:[],targets:[],colors:[]};let u=0;e.forEach((m,c)=>{Array.from(m).forEach((d,h)=>{const g=o(h,c);d==="#"?l.blocks.push(g):d==="="?l.marks.push(g):d==="Z"?l.goals.push(g):d==="o"?l.targets.push(g):d in Lu?l.colors.push({at:g,color:Lu[d]}):"^>v<".includes(d)&&(u++,l.start={...g,heading:{"^":0,">":90,v:180,"<":270}[d]})})});for(const m of t)l.lines.push(m.split(/\s+/).map(c=>{const[d,h]=c.split(",").map(Number);if(!Number.isFinite(d)||!Number.isFinite(h))throw new Error(`Linie: „${c}“ ist kein Feld (Spalte,Zeile).`);return o(d,h)}));if(u!==1)throw new Error(`Die Weltkarte braucht genau einen Start (^ > v <), gefunden: ${u}`);return l}const Lu={r:"red",g:"green",b:"blue",y:"yellow"},Q1=(i,e)=>Math.abs(i.x-e.x)<=Un/2&&Math.abs(i.y-e.y)<=Un/2,Wu=10,Eu=9,sb=300,d1=8,rb=[-3.6,-1.2,1.2,3.6],ob=2.5,lb=20,ub=12,m0=100,ji={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},Nu=i=>i*Math.PI/180,h1=i=>({x:Math.sin(Nu(i)),y:Math.cos(Nu(i))}),ua=()=>Array.from({length:yh},()=>{}),Fu=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class xs{constructor(e=ji){y(this,"pose");y(this,"trail");y(this,"bumps",0);y(this,"leds",ua());y(this,"screen");y(this,"wheels",[0,0]);y(this,"time",0);y(this,"timerStart",0);y(this,"blocked",!1);y(this,"blockWallCache");this.setup=e,this.pose={...e.start},this.trail=[{x:e.start.x,y:e.start.y}]}reset(){this.pose={...this.setup.start},this.trail=[{x:this.pose.x,y:this.pose.y}],this.bumps=0,this.leds=ua(),this.screen=void 0,this.wheels=[0,0],this.time=0,this.timerStart=0,this.blocked=!1}get allWalls(){const e=this.setup.width/2,t=this.setup.depth/2,n=[{x:-e,y:-t},{x:e,y:-t},{x:e,y:t},{x:-e,y:t}];return[...this.setup.walls,...n.map((a,s)=>({from:a,to:n[(s+1)%4]})),...this.blockWalls]}get blockWalls(){return this.blockWallCache??(this.blockWallCache=(this.setup.blocks??[]).flatMap(e=>{const t=Un/2,n=[{x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t},{x:e.x-t,y:e.y+t}];return n.map((a,s)=>({from:a,to:n[(s+1)%4]}))})),this.blockWallCache}atGoal(){const e=h1(this.pose.heading),t={x:this.pose.x+e.x*d1,y:this.pose.y+e.y*d1};return(this.setup.goals??[]).some(n=>Q1(this.pose,n)||Q1(t,n))||(this.setup.targets??[]).some(n=>Q1(this.pose,n))}apply(e){switch(e.method){case"forward":return this.wheels=[0,0],this.drive(e.args[0]);case"backward":return this.wheels=[0,0],this.drive(-e.args[0]);case"turnRight":return this.wheels=[0,0],this.turn(e.args[0]);case"turnLeft":return this.wheels=[0,0],this.turn(-e.args[0]);case"stop":this.wheels=[0,0];return;case"drive":this.wheels=[Ju(e.args[0]),Ju(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=ua().map(()=>Fu(e.args));return;case"ledOff":this.leds=ua();return;case"ledColor":this.leds[e.args[0]]=Fu(rs[e.text??""]??[0,0,0]);return;case"showText":this.screen=e.text;return}}tick(e){if(e<=0)return;this.time+=e;const[t,n]=this.wheels.map(o=>o/100*lb);if(t===0&&n===0)return;const a=Math.ceil(e/10),s=e/1e3/a;let r=!1;for(let o=0;o{const r={x:this.pose.x+e.x*d1+t.x*a,y:this.pose.y+e.y*d1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>Q1(r,l))||this.setup.lines.some(l=>cb(r,l)<=ob/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=h1(this.pose.heading),t={x:this.pose.x+e.x*d1,y:this.pose.y+e.y*d1};return(n=(this.setup.colors??[]).find(a=>Q1(t,a.at)))==null?void 0:n.color}sensors(){const e=this.lineState();return{getDistance:this.distance(),getLine:e,getColor:this.colorUnder()??(e&6?"black":"white"),isLineLeft:(e&4)!==0,isLineRight:(e&2)!==0,getTimer:this.timer}}freeDistance(e,t){let n=1/0;for(const a of this.allWalls){const s=mb(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Ru(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function mb(i,e,t,n){const a={x:n.x-t.x,y:n.y-t.y},s=e.x*a.y-e.y*a.x;if(Math.abs(s)<1e-12)return;const r={x:t.x-i.x,y:t.y-i.y},o=(r.x*a.y-r.y*a.x)/s,l=(r.x*e.y-r.y*e.x)/s;return o>=0&&l>=0&&l<=1?o:void 0}function cb(i,e){let t=1/0;for(let n=0;n+10&&o.tick(m0),s.robotSensors={...o.sensors(),...xb(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?ls(m.robotActions):void 0,...n?{atGoal:o.atGoal(),bumps:o.bumps}:{},led:o.leds.some(d=>d!==void 0),tone:m.robotActions.some(d=>d.method==="playTone"),screen:o.screen,actions:zh(m.robotActions.filter(d=>!pb.has(d.method)))});if(m.inputRequest){const d=r.shift();if(d===void 0)return{...c(),missingInput:!0};if(s.provideInput(d),m.inputErrorNotice)return{...c(),error:m.inputErrorNotice};continue}if(m.isHalted)return{...c(),error:m.notice};if(!s.canStep)return{...c(),unusedInputs:r.length||void 0};s.step()}return{outputs:[...s.state.outputLines],files:new Map(s.state.files),drive:ls(s.state.robotActions),tooManySteps:!0}}function xb(i,e){const t=Math.floor(e/hb);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function Kh(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` +`)}function ma(i,e){return i.length!==e.length?!1:i.every((t,n)=>Gu(t)===Gu(e[n]))}function Gu(i){const e=i.trim().replace(/\s+/g," ");return/^-?\d+\.0+$/.test(e)?e.replace(/\.0+$/,""):e}function bb(i,e,t,n){return e.map(a=>{var d,h,g;const s=a.world?n==null?void 0:n(a.world):void 0;if(a.world&&!s)throw new Error(`Weltkarte „${a.world}“ fehlt.`);const r=fb(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var x;return ma(Kh((x=r.files)==null?void 0:x.get(f.name)),f.lines)}),l=!a.drive||ma(r.drive??[],a.drive),u=!a.world||r.bumps===0&&(!((d=s==null?void 0:s.goals)!=null&&d.length||(h=s==null?void 0:s.targets)!=null&&h.length)||r.atGoal===!0),m=(a.led===void 0||r.led===a.led)&&(a.tone===void 0||r.tone===a.tone)&&(a.screen===void 0||r.screen===a.screen)&&(a.drives===void 0||(((g=r.drive)==null?void 0:g.length)??0)>0===a.drives)&&(!a.actions||ma(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ma(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function vb(i){const e=new Set,t=n=>{for(const a of n){e.add(a.type),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])t(s.elements)}};return t(i.elements),e}function Wo(i){const e=[S.forSchleife,S.whileSchleife,S.doUntilSchleife,S.endlosschleife];let t=0;for(const n of i){const a=Math.max(Wo(n.loopBody??[]),...(n.cases??[]).map(s=>Wo(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class Ci extends Error{}function yb(i,e){const t=[],n=[];for(const a of i){const s=a.trim();if(!s)continue;if(s.startsWith("?")){const o=s.slice(1).trim();bs(o,wb(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new Ci(`${e}: Unbekannte Zeile im Spiel: „${s}“`);t.push(r[4]?{name:r[1],kind:"boolean"}:{name:r[1],kind:"int",min:Number(r[2]),max:Number(r[3])})}if(!n.length)throw new Ci(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function wb(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function zb(i){const e=[],t=/\s*(?:(\d+)|(true|false)\b|([A-Za-z_]\w*)|(&&|\|\||==|!=|<=|>=|<|>|!|\(|\)))/y;let n=0;for(;nt[n],s=d=>{var h;return((h=a())==null?void 0:h.kind)==="op"&&a().value===d},r=()=>{throw new Ci(`Bedingung nicht lesbar: „${i}“`)},o=()=>{const d=t[n++]??r();if(d.kind==="num"||d.kind==="bool")return d.value;if(d.kind==="name"){if(!(d.value in e))throw new Ci(`Unbekannte Variable „${d.value}“ in „${i}“`);return e[d.value]}if(d.value==="("){const h=m();return s(")")||r(),n++,h}if(d.value==="!"){const h=o();return typeof h!="boolean"&&r(),!h}return r()},l=()=>{const d=o(),h=a();if((h==null?void 0:h.kind)==="op"&&["==","!=","<","<=",">",">="].includes(h.value)){n++;const g=o();switch(h.value){case"==":return d===g;case"!=":return d!==g}(typeof d!="number"||typeof g!="number")&&r();const[f,x]=[d,g];return h.value==="<"?f"?f>x:f>=x}return d},u=()=>{let d=l();for(;s("&&");){n++;const h=l();d=d&&h}return d},m=()=>{let d=u();for(;s("||");){n++;const h=u();d=d||h}return d},c=m();return n!==t.length||typeof c!="boolean"?r():c}function Ib(i,e){const t=[i],n=i.replace(/\b[A-Za-z_]\w*\b/g,r=>r in e?String(e[r]):r);n!==i&&t.push(n);const a=n.replace(/(-?\d+|true|false)\s*(==|!=|<=|>=|<|>)\s*(-?\d+|true|false)/g,r=>String(bs(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(bs(i,e));return s!==t[t.length-1]&&t.push(s),t}function kb(i,e){const t=[],n=new RegExp(`\\b${e}\\s*(?:==|!=|<=|>=|<|>)\\s*(-?\\d+)|(-?\\d+)\\s*(?:==|!=|<=|>=|<|>)\\s*${e}\\b`,"g");for(const a of i.matchAll(n)){const s=Number(a[1]??a[2]);t.push(s-1,s,s+1)}return t}function Sb(i,e,t,n=Math.random){const a=i.conditions.length,s=Math.floor(e*a/t),r=Math.min(a-1,s+(n()<.5?0:1)),o=i.conditions[r],l={};for(const u of i.vars){if(u.kind==="boolean"){l[u.name]=n()<.5;continue}const m=kb(o,u.name).filter(c=>c>=u.min&&c<=u.max);l[u.name]=m.length&&n()<.6?m[Math.floor(n()*m.length)]:u.min+Math.floor(n()*(u.max-u.min+1))}return{condition:o,values:l,answer:bs(o,l)}}function Tb(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const _b=`--- titel: Was ist ein Struktogramm? bereich: Erste Schritte kurz: Algorithmen als Folge klarer Schritte darstellen und lesen. @@ -694,7 +694,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Ein Pfeil > Alles zwischen SOLANGE und ENDE SOLANGE ist eingerückt und wird wiederholt. ::: -`,Cx=`--- +`,jb=`--- titel: Der Editor bereich: Erste Schritte kurz: Elemente einfügen, Text eingeben, verschieben und löschen. @@ -880,7 +880,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] input: "Guten Tag" > Ohne Anführungszeichen wird Guten Tag als Name einer Variablen verstanden. ::: -`,Ax=`--- +`,Cb=`--- titel: Speichern, Öffnen, Exportieren bereich: Erste Schritte kurz: Dateien sichern, deinen Workspace nutzen, mehrere Diagramme öffnen und als Bild oder PDF weitergeben. @@ -1042,7 +1042,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Direkt im Workspace ohne Unterordner > VisuStruct legt für jeden Tag automatisch einen Datumsordner an. So bleiben die Programme nach Stunden sortiert. ::: -`,jx=`--- +`,Ab=`--- titel: Variablen und Datentypen bereich: Grundlagen kurz: Werte speichern, die Datentypen int, double, String und boolean kennen und rechnen. @@ -1052,6 +1052,7 @@ kurz: Werte speichern, die Datentypen int, double, String und boolean kennen und ::: kompetenzen - eine Variable mit Datentyp, Namen und Wert anlegen +- erklären, dass Java Groß- und Kleinschreibung unterscheidet (\`zahl\` ist nicht \`Zahl\`) - die Datentypen int, double, String und boolean unterscheiden - erklären, dass = eine Zuweisung ist und kein Vergleich - mit + - * / % rechnen und die ganzzahlige Division anwenden @@ -1088,6 +1089,33 @@ CamelCase heißt so, weil die Großbuchstaben in der Mitte wie die Höcker eines Die Großbuchstaben M und S ragen heraus wie die zwei Höcker des Kamels. ::: +## Groß- und Kleinschreibung + +Java unterscheidet **Groß- und Kleinschreibung**. Auf Englisch heißt das **case-sensitive**. Für Java sind \`zahl\`, \`Zahl\` und \`ZAHL\` drei verschiedene Namen, also drei verschiedene Kisten: + +\`\`\` +int zahl = 4 +int Zahl = 6 +\`\`\` + +Hier gibt es zwei Variablen. Schreibst du später \`ZAHL\`, findet Java keine Variable mit diesem Namen. Das Programm läuft nicht, und du bekommst eine Fehlermeldung. + +> Das gilt auch für Java-Wörter: \`String\` und \`System\` schreibt man groß, \`int\` und \`double\` klein. Lege in deinen eigenen Programmen nie zwei Variablen an, die sich nur in der Groß- und Kleinschreibung unterscheiden. Das verwirrt dich und alle, die deinen Code lesen. + +## Übung: Drei Namen + +::: übung l04-gross-klein +titel: Drei Namen +auftrag: Ludwig hat zwei Variablen angelegt: \`zahl\` mit dem Wert 4 und \`Zahl\` mit dem Wert 6. Das Struktogramm soll beide malnehmen und **Ergebnis: 24** ausgeben. Es läuft aber nicht. + Öffne die Übung, klicke auf Prüfen und lies die Fehlermeldung. Repariere die Anweisung und klicke noch einmal auf Prüfen. +start: l04-gross-klein-start.visustruct +test: - -> Ergebnis: 24 +braucht: anweisung +tipp: Wie viele verschiedene Namen stehen im Struktogramm? \`zahl\`, \`Zahl\` und \`ZAHL\` sind für den Computer drei verschiedene Namen. +tipp: \`ZAHL\` gibt es nicht. Für 24 brauchst du 4 mal 6, also \`zahl\` mal \`Zahl\`: \`int ergebnis = zahl * Zahl\`. Mit \`zahl * zahl\` kommt 16 heraus. +lösung: l04-gross-klein-loesung.visustruct +::: + ## Die vier Datentypen Der Datentyp legt fest, welche Art von Wert in der Variablen stehen darf. @@ -1287,6 +1315,21 @@ tipp: Die beiden Zeichen sind vertauscht: \`int minuten = sekunden / 60;\` und \ lösung: l04-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l04-java-laeuft-nicht +titel: Steckbrief reparieren +code: java +auftrag: Das Programm soll **Ludwig ist 7 Jahre alt.** ausgeben. Es läuft aber nicht, denn zwei Wörter sind falsch geschrieben. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l04-java-laeuft-nicht-start.visustruct +test: - -> Ludwig ist 7 Jahre alt. +braucht: anweisung +tipp: Java unterscheidet Groß- und Kleinschreibung. Vergleiche jedes Wort in der Ausgabe genau mit dem, was oben angelegt ist. +tipp: \`System\` schreibt man mit großem S. Die Variable heißt \`alter\` mit kleinem a: \`System.out.println(name + " ist " + alter + " Jahre alt.");\` +lösung: l04-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Welcher Datentyp? ::: spiel frage @@ -1341,6 +1384,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ ::: checkliste - Ich kann eine Variable mit Datentyp, Namen und Wert anlegen. → Was ist eine Variable? +- Ich kann erklären, dass Java Groß- und Kleinschreibung unterscheidet (\`zahl\` ist nicht \`Zahl\`). → Groß- und Kleinschreibung - Ich kann die Datentypen int, double, String und boolean unterscheiden. → Die vier Datentypen - Ich kann erklären, dass = eine Zuweisung ist und kein Vergleich. → Zuweisung mit = - Ich kann mit + - * / % rechnen und die ganzzahlige Division anwenden. → Rechnen @@ -1358,6 +1402,13 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] boolean > Kommazahlen haben den Typ double. In VisuStruct schreibst du sie mit Punkt. +? Wie viele Variablen legen \`int zahl = 1\`, \`int Zahl = 2\` und \`int ZAHL = 3\` an? +→ Groß- und Kleinschreibung +- [ ] eine +- [ ] zwei +- [x] drei +> Java unterscheidet Groß- und Kleinschreibung. Die drei Namen sind verschieden, also gibt es drei Variablen. + ? Welchen Wert hat x nach \`int x = 17 / 5\`? → Rechnen - [ ] 3.4 @@ -1386,7 +1437,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Double preis = 2.5 > Kommazahlen schreibst du mit Punkt, und am Ende steht ein Semikolon. ::: -`,Ox=`--- +`,Pb=`--- titel: Sequenz bereich: Grundlagen kurz: Schritte nacheinander ausführen, auf die Reihenfolge achten und Werte tauschen. @@ -1533,6 +1584,21 @@ tipp: Tausche die letzten beiden Zeilen: erst \`guthaben = guthaben - preis;\`, lösung: l05-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l05-java-laeuft-nicht +titel: Pizza teilen +code: java +auftrag: Eine Pizza hat 8 Stücke, 4 Freunde teilen sie. Das Programm soll **Jeder bekommt 2 Stücke.** ausgeben. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l05-java-laeuft-nicht-start.visustruct +test: - -> Jeder bekommt 2 Stücke. +braucht: anweisung +tipp: Vergleiche den Namen in der Ausgabe Buchstabe für Buchstabe mit dem Namen, der in der dritten Zeile angelegt wird. +tipp: Die Variable heißt \`proPerson\` mit großem P (CamelCase). Schreibe sie in der Ausgabe genauso. +lösung: l05-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Kästen sortieren ::: spiel reihenfolge @@ -1623,7 +1689,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Mit einem Doppelpunkt : > Fehlt das Semikolon, zeigt VisuStruct unter dem Code einen Hinweis. ::: -`,Px=`--- +`,Ob=`--- titel: Eingabe und Ausgabe bereich: Grundlagen kurz: Werte abfragen, Ergebnisse anzeigen und das EVA-Prinzip anwenden. @@ -1898,6 +1964,22 @@ tipp: Setze Klammern, damit Java zuerst rechnet: \`System.out.println("Summe: " lösung: l06-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l06-java-laeuft-nicht +titel: Alter im nächsten Jahr +code: java +auftrag: Das Programm fragt nach deinem Alter und soll sagen, wie alt du nächstes Jahr bist. Bei 14 also **Nächstes Jahr bist du 15**. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l06-java-laeuft-nicht-start.visustruct +test: 14 -> Nächstes Jahr bist du 15 +test: 9 -> Nächstes Jahr bist du 10 +braucht: anweisung +tipp: Die Eingabe landet in einer Variablen. Wie genau heißt sie, und wie heißt sie in der Ausgabe? +tipp: Die Variable heißt \`alter\` mit kleinem a: \`System.out.println("Nächstes Jahr bist du " + (alter + 1));\` +lösung: l06-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Was wird ausgegeben? ::: spiel frage @@ -2039,7 +2121,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Bei der nächsten Leerzeile > Darum kann ein Kommentar mit \`/*\` über mehrere Zeilen gehen. Ein Kommentar mit \`//\` endet dagegen am Zeilenende. ::: -`,Mx=`--- +`,Db=`--- titel: Simulation und Schreibtischtest bereich: Grundlagen kurz: Ein Struktogramm Schritt für Schritt ausführen, von Hand nachrechnen und Fehler finden. @@ -2250,6 +2332,21 @@ tipp: Ludwig verliert 3 Punkte, also wird vom alten Wert abgezogen: \`punkte = p lösung: l07-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l07-java-laeuft-nicht +titel: Bonus reparieren +code: java +auftrag: Ludwig hat 10 Punkte und bekommt 5 Bonuspunkte. Am Ende soll **Punkte: 15** erscheinen. Der Code läuft aber nicht. Gehe ihn auch mit dem Einzelschritt durch: In welcher Zeile bleibt er stehen? + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l07-java-laeuft-nicht-start.visustruct +test: - -> Punkte: 15 +braucht: anweisung +tipp: Java arbeitet den Code von oben nach unten ab. Gibt es \`bonus\` schon, wenn damit gerechnet wird? +tipp: Lege \`bonus\` vor der Rechnung an: erst \`int bonus = 5;\`, dann \`punkte = punkte + bonus;\` +lösung: l07-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Bombe entschärfen ::: spiel bombe @@ -2384,7 +2481,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] Logikfehler > Es gibt keine Meldung, das Ergebnis ist trotzdem falsch. So einen Fehler findest du nur mit deiner Erwartung und dem Schreibtischtest. ::: -`,Dx=`--- +`,Mb=`--- titel: Verzweigung bereich: Grundlagen kurz: Mit einer Bedingung entscheiden, welcher von zwei Wegen ausgeführt wird. @@ -2583,6 +2680,21 @@ tipp: „Unter 6“ heißt \`alter < 6\`. \`<=\` bedeutet „kleiner oder gleich lösung: l08-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l08-java-laeuft-nicht +titel: Film ab 16 +code: java +auftrag: Der Film ist ab 16. Ludwig ist 15, also soll das Programm **Kein Einlass** ausgeben. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l08-java-laeuft-nicht-start.visustruct +test: - -> Kein Einlass +braucht: verzweigung +tipp: Schau dir die Bedingung in der Klammer nach \`if\` genau an. Gibt es diese Variable? +tipp: Die Variable heißt \`alter\` mit kleinem a: \`if (alter >= 16) {\` +lösung: l08-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Welcher Weg? ::: spiel frage @@ -2737,7 +2849,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Hinter einem Semikolon > \`if (alter >= 18) { … }\`: Die runden Klammern gehören zur Bedingung, die geschweiften zum Zweig. ::: -`,Zx=`--- +`,Bb=`--- titel: Bedingungen verknüpfen bereich: Grundlagen kurz: Mehrere Bedingungen mit und, oder und nicht verbinden und Wertebereiche prüfen. @@ -2998,6 +3110,21 @@ tipp: Es reicht, wenn eine der beiden Bedingungen stimmt: \`tag == 6 || tag == 7 lösung: l09-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l09-java-laeuft-nicht +titel: Wochenende reparieren +code: java +auftrag: Tag 6 ist Samstag, Tag 7 ist Sonntag. Heute ist Tag 7, also soll **schulfrei** erscheinen. Das Programm läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l09-java-laeuft-nicht-start.visustruct +test: - -> schulfrei +braucht: verzweigung +tipp: Die Bedingung besteht aus zwei Teilen. Vergleiche in beiden Teilen den Namen der Variablen. +tipp: Auch im zweiten Teil heißt die Variable \`tag\` mit kleinem t: \`if (tag == 6 || tag == 7) {\` +lösung: l09-java-laeuft-nicht-loesung.visustruct +::: + ## Checkliste Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. @@ -3049,7 +3176,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] if (alter >= 12 || alter < 18) > Jeder Vergleich steht für sich, verbunden mit \`&&\`. ::: -`,Bx=`--- +`,Zb=`--- titel: Fallauswahl bereich: Grundlagen kurz: Je nach Wert einer Variablen einen von vielen Fällen ausführen. @@ -3235,6 +3362,21 @@ tipp: Beim Minus zählt die Reihenfolge: \`a - b\` statt \`b - a\`. lösung: l10-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l10-java-laeuft-nicht +titel: Note reparieren +code: java +auftrag: Ludwig hat die Note 2 geschrieben. Das Programm soll **gut** ausgeben. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l10-java-laeuft-nicht-start.visustruct +test: - -> gut +braucht: fallauswahl +tipp: Welche Variable prüft die Fallauswahl? Steht sie genauso oben? +tipp: In der Klammer nach \`switch\` muss \`note\` mit kleinem n stehen: \`switch (note) {\` +lösung: l10-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Welcher Fall? ::: spiel frage @@ -3363,7 +3505,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] default - [ ] case 0 ::: -`,Lx=`--- +`,Lb=`--- titel: While-Schleife bereich: Grundlagen kurz: Schritte wiederholen, solange eine Bedingung wahr ist. @@ -3573,6 +3715,21 @@ tipp: Gespart wird nur, solange das Ziel noch **nicht erreicht** ist: \`while (g lösung: l11-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l11-java-laeuft-nicht +titel: Countdown reparieren +code: java +auftrag: Der Countdown soll **3**, **2**, **1** und dann **Start!** ausgeben. Er läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l11-java-laeuft-nicht-start.visustruct +test: - -> 3 | 2 | 1 | Start! +braucht: whileSchleife +tipp: Der Fehler steckt in der Schleife. Welche Variable soll ausgegeben werden, und wie heißt sie wirklich? +tipp: Gib \`zahl\` mit kleinem z aus: \`System.out.println(zahl);\` +lösung: l11-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Wie oft? ::: spiel frage @@ -3707,7 +3864,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] while (zahl > 0); > Die Bedingung steht in runden Klammern, danach öffnet \`{\` den Rumpf. ::: -`,Wx=`--- +`,Wb=`--- titel: Do-while-Schleife bereich: Grundlagen kurz: Erst ausführen, dann prüfen: Schleifen mit mindestens einem Durchlauf. @@ -3853,6 +4010,21 @@ tipp: Die Schleife soll weiterlaufen, solange die Zahl größer als 0 ist: \`whi lösung: l12-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l12-java-laeuft-nicht +titel: Verdoppeln reparieren +code: java +auftrag: Das Programm soll ab 1 immer verdoppeln, solange die Zahl kleiner als 20 ist: **1**, **2**, **4**, **8**, **16**. Es gibt nur die 1 aus und bleibt dann stehen. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l12-java-laeuft-nicht-start.visustruct +test: - -> 1 | 2 | 4 | 8 | 16 +braucht: doUntilSchleife +tipp: Die erste Runde läuft noch. Der Fehler kommt erst, wenn die Bedingung unten zum ersten Mal geprüft wird. +tipp: In der Bedingung muss \`grenze\` mit kleinem g stehen: \`} while (zahl < grenze);\` +lösung: l12-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Mindestens einmal? ::: spiel frage @@ -3970,7 +4142,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] } until (bedingung); > Nach der Bedingung kommt ein Semikolon. ::: -`,Ex=`--- +`,Eb=`--- titel: For-Schleife bereich: Grundlagen kurz: Mit Start, Bedingung und Schritt eine feste Anzahl von Durchläufen zählen. @@ -4151,6 +4323,21 @@ tipp: \`i\` soll auch den Wert 10 annehmen: \`i <= 10\` statt \`i < 10\`. lösung: l13-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l13-java-laeuft-nicht +titel: Treppe reparieren +code: java +auftrag: Ludwig klettert 5 Stufen hoch, jede ist 20 cm hoch. Das Programm soll **Höhe: 100 cm** ausgeben. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l13-java-laeuft-nicht-start.visustruct +test: - -> Höhe: 100 cm +braucht: forSchleife +tipp: Mit \`hoehe\` wird gerechnet, aber wo wird die Variable angelegt? Und mit welchem Wert startet Ludwig? +tipp: Lege \`hoehe\` vor der Schleife an: \`int hoehe = 0;\` +lösung: l13-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Bombe entschärfen ::: spiel bombe @@ -4282,7 +4469,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] i wird ausgegeben. > \`i++\` ist die Kurzform von \`i = i + 1\`. ::: -`,Nx=`--- +`,Nb=`--- titel: Verschachteln bereich: Grundlagen kurz: Verzweigungen in Schleifen und Schleifen in Schleifen kombinieren. @@ -4439,6 +4626,21 @@ tipp: Verschiebe die Zeile \`System.out.println("Anzahl: " + anzahl);\` hinter d lösung: l14-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l14-java-laeuft-nicht +titel: Gerade Zahlen reparieren +code: java +auftrag: Das Programm soll die geraden Zahlen von 1 bis 10 ausgeben: **2**, **4**, **6**, **8**, **10**. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l14-java-laeuft-nicht-start.visustruct +test: - -> 2 | 4 | 6 | 8 | 10 +braucht: forSchleife, verzweigung +tipp: Der Fehler steckt ganz innen, in der Ausgabe. Wie heißt die Zählvariable der Schleife? +tipp: Die Zählvariable heißt \`i\` mit kleinem i: \`System.out.println(i);\` +lösung: l14-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Innen und außen ::: spiel frage @@ -4565,7 +4767,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] An den geschweiften Klammern und der Einrückung - [ ] An den Semikolons ::: -`,Jx=`--- +`,Fb=`--- titel: Arrays bereich: Grundlagen kurz: Viele Werte unter einem Namen speichern, mit dem Index darauf zugreifen und sie mit einer Schleife durchlaufen. @@ -4777,6 +4979,21 @@ tipp: \`max\` muss mit einem Wert aus dem Array beginnen: \`int max = temperatur lösung: l15-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l15-java-laeuft-nicht +titel: Punkte zusammenzählen +code: java +auftrag: Im Array \`punkte\` stehen 4, 7, 2 und 5. Das Programm soll alle zusammenzählen und **Summe: 18** ausgeben. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l15-java-laeuft-nicht-start.visustruct +test: - -> Summe: 18 +braucht: forSchleife +tipp: Der Code-Bereich unterstreicht das falsche Wort rot. Wie schreibt man die Länge eines Arrays? +tipp: \`length\` schreibt man ganz klein: \`i < punkte.length\` +lösung: l15-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Bombe entschärfen ::: spiel bombe @@ -4903,7 +5120,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] int zahlen = [1, 2, 3]; - [ ] array zahlen = (1, 2, 3); ::: -`,Fx=`--- +`,Jb=`--- titel: Zweidimensionale Arrays bereich: Grundlagen kurz: Werte in Zeilen und Spalten speichern, wie die Sitze in einem Kinosaal, und mit zwei verschachtelten Schleifen durchlaufen. @@ -5083,6 +5300,21 @@ tipp: Die Indizes sind vertauscht: \`punkte[1][j]\` statt \`punkte[j][1]\`. lösung: l16-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l16-java-laeuft-nicht +titel: Spielstand ablesen +code: java +auftrag: In der Tabelle \`punkte\` steht jede Reihe für einen Spieler, jede Spalte für eine Runde. Das Programm soll die Punkte von Spieler 2 in Runde 1 ausgeben, also **Spieler 2, Runde 1: 4**. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l16-java-laeuft-nicht-start.visustruct +test: - -> Spieler 2, Runde 1: 4 +braucht: anweisung +tipp: Die Fächer \`[1][0]\` stimmen. Schau dir den Namen der Tabelle an. +tipp: Die Tabelle heißt \`punkte\` mit kleinem p: \`punkte[1][0]\` +lösung: l16-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Welcher Platz? ::: spiel frage @@ -5205,7 +5437,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] 5, die Zahl der Plätze - [ ] 15, alle Plätze zusammen ::: -`,Rx=`--- +`,Rb=`--- titel: Zeichenketten bereich: Grundlagen kurz: Mit Texten arbeiten, also einzelne Zeichen lesen, Teile herausschneiden, suchen, vergleichen und zerlegen. @@ -5440,6 +5672,21 @@ tipp: Das erste Zeichen hat den Index 0: \`vorname.charAt(0)\` und \`nachname.ch lösung: l17-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l17-java-laeuft-nicht +titel: Buchstaben zählen +code: java +auftrag: Das Programm soll den ersten Buchstaben und die Länge von **Ludwig** ausgeben, also **L hat 6 Buchstaben**. Es läuft aber nicht, denn zwei Methoden sind falsch geschrieben. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l17-java-laeuft-nicht-start.visustruct +test: - -> L hat 6 Buchstaben +braucht: anweisung +tipp: Methodennamen sind auch CamelCase: Sie beginnen klein, jedes weitere Wort beginnt groß. +tipp: Richtig sind \`name.charAt(0)\` mit großem A und \`name.length()\` ganz klein. +lösung: l17-java-laeuft-nicht-loesung.visustruct +::: + ## Noch mehr Methoden Ein String kann noch viel mehr. Diese Methoden brauchst du auch oft: @@ -5716,7 +5963,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] eine Fehlermeldung > parseInt macht aus dem Text eine Zahl. Danach rechnet Java ganz normal. ::: -`,Gx=`--- +`,Gb=`--- titel: Aufruf und Aussprung bereich: Grundlagen kurz: Große Aufgaben in Unterprogramme zerlegen und Schleifen vorzeitig verlassen. @@ -6199,7 +6446,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] return > void heißt „leer“: Die Methode macht etwas, gibt aber keinen Wert zurück. ::: -`,Hx=`--- +`,Hb=`--- titel: Suchen und Sortieren bereich: Grundlagen kurz: Mit Spielkarten verstehen, wie lineare und binäre Suche und Bubblesort arbeiten und warum manche Verfahren viel schneller sind. @@ -6402,6 +6649,21 @@ tipp: Die Schleife soll aufhören, sobald etwas gefunden ist: \`while (position lösung: l19-java-fehler-loesung.visustruct ::: +## Warum läuft das nicht? + +::: übung l19-java-laeuft-nicht +titel: Karte suchen +code: java +auftrag: Die Karten {8, 4, 11, 4, 6} liegen in einem Array. Das Programm sucht die 11 und soll **Position: 2** ausgeben. Es läuft aber nicht. + „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: l19-java-laeuft-nicht-start.visustruct +test: - -> Position: 2 +braucht: forSchleife, verzweigung +tipp: Vergleiche die Namen in der Bedingung mit den Namen, die oben angelegt werden. +tipp: Die gesuchte Karte steht in \`gesucht\` mit kleinem g: \`if (karten[i] == gesucht) {\` +lösung: l19-java-laeuft-nicht-loesung.visustruct +::: + ## Spiel: Suchprofi ::: spiel frage @@ -6535,7 +6797,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Eine While-Schleife kann keine Arrays durchlaufen. > Die Karte kann mehrmals vorkommen. Darum gehst du alle Karten bis zum Ende durch. ::: -`,Vx=`--- +`,Vb=`--- titel: Struktogramm und Code bereich: Vom Struktogramm zum Code kurz: Alle Elemente in Java auf einen Blick, Code erzeugen, im Bereich Code Java schreiben, ausführen und Fehler suchen. @@ -7006,7 +7268,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Zeile 3 wird als Nächstes ausgeführt. > Der Haltepunkt ist ein runder roter Punkt, die nächste Zeile ist gelb. Eine rote Zeilennummer zeigt einen Syntaxfehler oder einen Laufzeitfehler. ::: -`,qx=`--- +`,qb=`--- titel: Python und JavaScript bereich: Vom Struktogramm zum Code kurz: Python- und JavaScript-Code aus dem Struktogramm erzeugen und JavaScript direkt im Browser ausführen. @@ -7244,7 +7506,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Es wird Summe: ausgegeben. > Mit str(summe) wird aus der Zahl ein Text. ::: -`,Qx=`--- +`,Qb=`--- titel: Wenn das Programm abstürzt: try und catch bereich: Fehler abfangen kurz: Mit echtem Java Fehlermeldungen lesen und Abstürze mit try und catch abfangen. @@ -7537,7 +7799,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = ArithmeticException -> Teilen durch 0 = NumberFormatException -> Text ist keine Zahl ::: -`,Ux=`--- +`,Ub=`--- titel: Text einlesen und speichern bereich: Dateien kurz: Mit Scanner eine Textdatei Zeile für Zeile lesen und mit PrintWriter eine Datei speichern. @@ -7791,7 +8053,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = println(text) -> schreibt eine Zeile = close() -> schließt die Datei ::: -`,$x=`--- +`,$b=`--- titel: Zeile für Zeile mit BufferedReader bereich: Dateien kurz: Mit BufferedReader und readLine lesen, bis null kommt, und mit Files eine ganze Datei auf einmal lesen. @@ -8047,7 +8309,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = Files.readString -> kleine Dateien auf einmal = Scanner -> Zahlen und Wörter lesen ::: -`,Yx=`--- +`,Yb=`--- titel: Tabellen als CSV bereich: Dateien kurz: Eine Tabelle als CSV-Datei lesen, jede Zeile mit split zerlegen und mit den Zahlen rechnen. @@ -8271,7 +8533,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = Datensatz -> eine Zeile mit Werten = Trennzeichen -> trennt die Spalten, meist ; ::: -`,Xx=`--- +`,Xb=`--- titel: Daten als JSON bereich: Dateien kurz: JSON-Dateien verstehen, Werte mit indexOf und substring herausholen und selbst JSON schreiben. @@ -8496,7 +8758,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = [ ] -> eine Liste = : -> trennt Schlüssel und Wert ::: -`,Kx=`--- +`,Kb=`--- titel: Formate im Vergleich bereich: Dateien kurz: Dieselben Daten als txt, CSV und JSON vergleichen, das passende Format wählen und eine Datei in ein anderes Format umwandeln. @@ -12243,6 +12505,10 @@ Eine beschriftete Kiste für einen Wert. Sie hat einen Namen, einen Datentyp und auch: camelCase Schreibweise für Namen aus mehreren Wörtern: zusammengeschrieben, jedes weitere Wort beginnt groß, z. B. \`preisMitSteuer\`. +### case-sensitive +auch: Groß- und Kleinschreibung +Java unterscheidet Groß- und Kleinbuchstaben: \`zahl\`, \`Zahl\` und \`ZAHL\` sind drei verschiedene Namen. \`system\` statt \`System\` ist ein Fehler. + ### Konstante auch: Konstanten Eine Variable, deren Wert nach dem Festlegen gleich bleibt. Man schreibt \`const\` davor, z. B. \`const double MWST = 0.19\`. @@ -13171,7 +13437,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] input: "Good morning" > Without quotation marks, Good morning is understood as the name of a variable. ::: -`,b4=`--- +`,x4=`--- titel: Save, open, export bereich: First steps kurz: Keep your files safe, use your workspace, open several diagrams and share them as an image or PDF. @@ -13333,7 +13599,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Directly in the workspace without a subfolder > VisuStruct automatically creates a date folder for each day. That keeps the programs sorted by lesson. ::: -`,x4=`--- +`,b4=`--- titel: Variables and data types bereich: Basics kurz: Store values, get to know the data types int, double, String and boolean, and calculate. @@ -13343,6 +13609,7 @@ kurz: Store values, get to know the data types int, double, String and boolean, ::: kompetenzen - create a variable with a data type, a name and a value +- explain that Java is case-sensitive (\`number\` is not \`Number\`) - tell the data types int, double, String and boolean apart - explain that = is an assignment and not a comparison - calculate with + - * / % and use whole-number division @@ -13379,6 +13646,33 @@ camelCase got its name because the capital letters in the middle stick out of th The capitals W and T stick out like the camel's two humps. ::: +## Upper and lower case + +Java tells **upper and lower case** apart. The English word for this is **case-sensitive**. For Java, \`number\`, \`Number\` and \`NUMBER\` are three different names, so three different boxes: + +\`\`\` +int number = 4 +int Number = 6 +\`\`\` + +There are two variables here. If you later write \`NUMBER\`, Java finds no variable with that name. The program doesn’t run and you get an error message. + +> This also applies to Java words: \`String\` and \`System\` start with a capital, \`int\` and \`double\` are small. In your own programs, never create two variables that differ only in upper and lower case. It confuses you and everyone who reads your code. + +## Exercise: Three names + +::: übung l04-gross-klein +titel: Three names +auftrag: Ludwig created two variables: \`number\` with the value 4 and \`Number\` with the value 6. The structure chart should multiply them and output **Result: 24**. But it doesn’t run. + Open the exercise, click Check and read the error message. Fix the statement and click Check again. +start: l04-gross-klein-start.visustruct +test: - -> Result: 24 +braucht: anweisung +tipp: How many different names are in the structure chart? \`number\`, \`Number\` and \`NUMBER\` are three different names for the computer. +tipp: \`NUMBER\` doesn’t exist. For 24 you need 4 times 6, so \`number\` times \`Number\`: \`int result = number * Number\`. \`number * number\` gives 16. +lösung: l04-gross-klein-loesung.visustruct +::: + ## The four data types The data type says what kind of value may be stored in the variable. @@ -13578,6 +13872,21 @@ tipp: The two operators are swapped: \`int minutes = seconds / 60;\` and \`int r lösung: l04-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l04-java-laeuft-nicht +titel: Fix the profile +code: java +auftrag: The program should output **Ludwig is 7 years old.** But it doesn’t run, because two words are spelled wrong. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l04-java-laeuft-nicht-start.visustruct +test: - -> Ludwig is 7 years old. +braucht: anweisung +tipp: Java is case-sensitive. Compare every word in the output carefully with what was created above. +tipp: \`System\` is written with a capital S. The variable is called \`age\` with a small a: \`System.out.println(name + " is " + age + " years old.");\` +lösung: l04-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Which data type? ::: spiel frage @@ -13632,6 +13941,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can ::: checkliste - I can create a variable with a data type, a name and a value. → What is a variable? +- I can explain that Java is case-sensitive (\`number\` is not \`Number\`). → Upper and lower case - I can tell the data types int, double, String and boolean apart. → The four data types - I can explain that = is an assignment and not a comparison. → Assignment with = - I can calculate with + - * / % and use whole-number division. → Calculating @@ -13649,6 +13959,13 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] boolean > Decimal numbers have the type double. In VisuStruct you write them with a point. +? How many variables do \`int number = 1\`, \`int Number = 2\` and \`int NUMBER = 3\` create? +→ Upper and lower case +- [ ] one +- [ ] two +- [x] three +> Java is case-sensitive. The three names are different, so there are three variables. + ? What value does x have after \`int x = 17 / 5\`? → Calculating - [ ] 3.4 @@ -13824,6 +14141,21 @@ tipp: Swap the last two lines: first \`credit = credit - price;\`, then the outp lösung: l05-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l05-java-laeuft-nicht +titel: Share a pizza +code: java +auftrag: A pizza has 8 slices and 4 friends share it. The program should output **Everyone gets 2 slices.** But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l05-java-laeuft-nicht-start.visustruct +test: - -> Everyone gets 2 slices. +braucht: anweisung +tipp: Compare the name in the output letter by letter with the name created in the third line. +tipp: The variable is called \`perPerson\` with a capital P (camelCase). Write it exactly like that in the output. +lösung: l05-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Sort the boxes ::: spiel reihenfolge @@ -14189,6 +14521,22 @@ tipp: Add brackets so that Java calculates first: \`System.out.println("Sum: " + lösung: l06-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l06-java-laeuft-nicht +titel: Age next year +code: java +auftrag: The program asks for your age and should say how old you will be next year. For 14 that is **Next year you will be 15**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l06-java-laeuft-nicht-start.visustruct +test: 14 -> Next year you will be 15 +test: 9 -> Next year you will be 10 +braucht: anweisung +tipp: The input ends up in a variable. What exactly is it called, and what is it called in the output? +tipp: The variable is called \`age\` with a small a: \`System.out.println("Next year you will be " + (age + 1));\` +lösung: l06-java-laeuft-nicht-loesung.visustruct +::: + ## Game: What is output? ::: spiel frage @@ -14541,6 +14889,21 @@ tipp: Ludwig loses 3 points, so 3 is subtracted from the old value: \`points = p lösung: l07-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l07-java-laeuft-nicht +titel: Fix the bonus +code: java +auftrag: Ludwig has 10 points and gets 5 bonus points. At the end **Points: 15** should appear. But the code doesn’t run. Also step through it with Single step: in which line does it stop? + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l07-java-laeuft-nicht-start.visustruct +test: - -> Points: 15 +braucht: anweisung +tipp: Java runs the code from top to bottom. Does \`bonus\` already exist when it is used in the calculation? +tipp: Create \`bonus\` before the calculation: first \`int bonus = 5;\`, then \`points = points + bonus;\` +lösung: l07-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Defuse the bomb ::: spiel bombe @@ -14874,6 +15237,21 @@ tipp: “Under 6” means \`age < 6\`. \`<=\` means “less than or equal to”. lösung: l08-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l08-java-laeuft-nicht +titel: Rated 16 +code: java +auftrag: The film is rated 16. Ludwig is 15, so the program should output **No entry**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l08-java-laeuft-nicht-start.visustruct +test: - -> No entry +braucht: verzweigung +tipp: Look closely at the condition in the brackets after \`if\`. Does this variable exist? +tipp: The variable is called \`age\` with a small a: \`if (age >= 16) {\` +lösung: l08-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Which way? ::: spiel frage @@ -15289,6 +15667,21 @@ tipp: It is enough if one of the two conditions is true: \`day == 6 || day == 7\ lösung: l09-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l09-java-laeuft-nicht +titel: Fix the weekend +code: java +auftrag: Day 6 is Saturday, day 7 is Sunday. Today is day 7, so **no school** should appear. But the program doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l09-java-laeuft-nicht-start.visustruct +test: - -> no school +braucht: verzweigung +tipp: The condition has two parts. Compare the variable name in both parts. +tipp: In the second part the variable is also called \`day\` with a small d: \`if (day == 6 || day == 7) {\` +lösung: l09-java-laeuft-nicht-loesung.visustruct +::: + ## Checklist Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. @@ -15526,6 +15919,21 @@ tipp: With minus the order matters: \`a - b\` instead of \`b - a\`. lösung: l10-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l10-java-laeuft-nicht +titel: Fix the grade +code: java +auftrag: Ludwig got grade 2. The program should output **good**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l10-java-laeuft-nicht-start.visustruct +test: - -> good +braucht: fallauswahl +tipp: Which variable does the case selection check? Is it written the same way above? +tipp: The brackets after \`switch\` need \`grade\` with a small g: \`switch (grade) {\` +lösung: l10-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Which case? ::: spiel frage @@ -15864,6 +16272,21 @@ tipp: He only saves as long as the goal has **not been reached** yet: \`while (m lösung: l11-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l11-java-laeuft-nicht +titel: Fix the countdown +code: java +auftrag: The countdown should output **3**, **2**, **1** and then **Go!** But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l11-java-laeuft-nicht-start.visustruct +test: - -> 3 | 2 | 1 | Go! +braucht: whileSchleife +tipp: The bug is inside the loop. Which variable should be output, and what is it really called? +tipp: Output \`number\` with a small n: \`System.out.println(number);\` +lösung: l11-java-laeuft-nicht-loesung.visustruct +::: + ## Game: How often? ::: spiel frage @@ -16144,6 +16567,21 @@ tipp: The loop should keep going as long as the number is greater than 0: \`whil lösung: l12-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l12-java-laeuft-nicht +titel: Fix the doubling +code: java +auftrag: Starting at 1, the program should keep doubling as long as the number is less than 20: **1**, **2**, **4**, **8**, **16**. It outputs only the 1 and then stops. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l12-java-laeuft-nicht-start.visustruct +test: - -> 1 | 2 | 4 | 8 | 16 +braucht: doUntilSchleife +tipp: The first round still runs. The bug appears when the condition at the bottom is checked for the first time. +tipp: The condition needs \`limit\` with a small l: \`} while (number < limit);\` +lösung: l12-java-laeuft-nicht-loesung.visustruct +::: + ## Game: At least once? ::: spiel frage @@ -16442,6 +16880,21 @@ tipp: \`i\` should also take the value 10: \`i <= 10\` instead of \`i < 10\`. lösung: l13-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l13-java-laeuft-nicht +titel: Fix the stairs +code: java +auftrag: Ludwig climbs 5 steps, each 20 cm high. The program should output **Height: 100 cm**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l13-java-laeuft-nicht-start.visustruct +test: - -> Height: 100 cm +braucht: forSchleife +tipp: \`height\` is used in a calculation, but where is the variable created? And at what height does Ludwig start? +tipp: Create \`height\` before the loop: \`int height = 0;\` +lösung: l13-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Defuse the bomb ::: spiel bombe @@ -16573,7 +17026,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] i is output. > \`i++\` is short for \`i = i + 1\`. ::: -`,C4=`--- +`,j4=`--- titel: Nesting bereich: Basics kurz: Combine branches inside loops and loops inside loops. @@ -16730,6 +17183,21 @@ tipp: Move the line \`System.out.println("Count: " + count);\` after the closing lösung: l14-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l14-java-laeuft-nicht +titel: Fix the even numbers +code: java +auftrag: The program should output the even numbers from 1 to 10: **2**, **4**, **6**, **8**, **10**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l14-java-laeuft-nicht-start.visustruct +test: - -> 2 | 4 | 6 | 8 | 10 +braucht: forSchleife, verzweigung +tipp: The bug is right inside, in the output. What is the loop’s counter variable called? +tipp: The counter variable is \`i\` with a small i: \`System.out.println(i);\` +lösung: l14-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Inside and outside ::: spiel frage @@ -16856,7 +17324,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] By the curly brackets and the indentation - [ ] By the semicolons ::: -`,A4=`--- +`,C4=`--- titel: Arrays bereich: Basics kurz: Store many values under one name, reach them with the index and go through them with a loop. @@ -17068,6 +17536,21 @@ tipp: \`max\` has to start with a value from the array: \`int max = temperatures lösung: l15-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l15-java-laeuft-nicht +titel: Add up the points +code: java +auftrag: The array \`points\` holds 4, 7, 2 and 5. The program should add them all up and output **Sum: 18**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l15-java-laeuft-nicht-start.visustruct +test: - -> Sum: 18 +braucht: forSchleife +tipp: The Code area underlines the wrong word in red. How do you write the length of an array? +tipp: \`length\` is written all in small letters: \`i < points.length\` +lösung: l15-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Defuse the bomb ::: spiel bombe @@ -17194,7 +17677,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] int numbers = [1, 2, 3]; - [ ] array numbers = (1, 2, 3); ::: -`,j4=`--- +`,A4=`--- titel: Two-dimensional arrays bereich: Basics kurz: Store values in rows and columns, like the seats in a cinema, and go through them with two nested loops. @@ -17374,6 +17857,21 @@ tipp: The indices are swapped: \`points[1][j]\` instead of \`points[j][1]\`. lösung: l16-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l16-java-laeuft-nicht +titel: Read the score +code: java +auftrag: In the table \`points\` each row is a player and each column a round. The program should output player 2’s points in round 1, so **Player 2, round 1: 4**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l16-java-laeuft-nicht-start.visustruct +test: - -> Player 2, round 1: 4 +braucht: anweisung +tipp: The cells \`[1][0]\` are right. Look at the name of the table. +tipp: The table is called \`points\` with a small p: \`points[1][0]\` +lösung: l16-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Which seat? ::: spiel frage @@ -17496,7 +17994,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] 5, the number of seats - [ ] 15, all seats together ::: -`,O4=`--- +`,P4=`--- titel: Strings bereich: Basics kurz: Work with text: read single characters, cut out parts, search, compare and split. @@ -17731,6 +18229,21 @@ tipp: The first character has the index 0: \`first.charAt(0)\` and \`last.charAt lösung: l17-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l17-java-laeuft-nicht +titel: Count the letters +code: java +auftrag: The program should output the first letter and the length of **Ludwig**, so **L has 6 letters**. But it doesn’t run, because two methods are spelled wrong. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l17-java-laeuft-nicht-start.visustruct +test: - -> L has 6 letters +braucht: anweisung +tipp: Method names are camelCase too: they start small, and every further word starts with a capital. +tipp: Correct are \`name.charAt(0)\` with a capital A and \`name.length()\` all small. +lösung: l17-java-laeuft-nicht-loesung.visustruct +::: + ## Even more methods A String can do much more. You will often need these methods too: @@ -18005,7 +18518,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] an error message > parseInt turns the text into a number. After that Java calculates as usual. ::: -`,P4=`--- +`,O4=`--- titel: Call and break bereich: Basics kurz: Split big tasks into subprograms and leave loops early. @@ -18487,7 +19000,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] return > void means “empty”: the method does something but returns no value. ::: -`,M4=`--- +`,D4=`--- titel: Searching and sorting bereich: Basics kurz: Use playing cards to understand how linear search, binary search and bubble sort work, and why some methods are much faster. @@ -18690,6 +19203,21 @@ tipp: The loop should stop as soon as something has been found: \`while (positio lösung: l19-java-fehler-loesung.visustruct ::: +## Why doesn’t it run? + +::: übung l19-java-laeuft-nicht +titel: Find a card +code: java +auftrag: The cards {8, 4, 11, 4, 6} are in an array. The program searches for the 11 and should output **Position: 2**. But it doesn’t run. + “Open in editor” shows the code in the Code area. Click “Run” and read the error message. Fix the bug and click Check. +start: l19-java-laeuft-nicht-start.visustruct +test: - -> Position: 2 +braucht: forSchleife, verzweigung +tipp: Compare the names in the condition with the names created above. +tipp: The card you are looking for is in \`wanted\` with a small w: \`if (cards[i] == wanted) {\` +lösung: l19-java-laeuft-nicht-loesung.visustruct +::: + ## Game: Search pro ::: spiel frage @@ -18823,7 +19351,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] A while loop cannot go through arrays. > The card can appear several times. That is why you go through all cards to the end. ::: -`,D4=`--- +`,M4=`--- titel: Structure chart and code bereich: From structure chart to code kurz: All elements in Java at a glance, generate code, write Java in the Code area, run it and find mistakes. @@ -19294,7 +19822,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Line 3 runs next. > A breakpoint is a round red dot, and the next line is yellow. A red line number shows a syntax error or a runtime error. ::: -`,Z4=`--- +`,B4=`--- titel: Python and JavaScript bereich: From structure chart to code kurz: Generate Python and JavaScript code from the structure chart and run JavaScript straight in the browser. @@ -19532,7 +20060,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Sum: is output. > str(sum) turns the number into text. ::: -`,B4=`--- +`,Z4=`--- titel: When the program crashes: try and catch bereich: Catching errors kurz: Use real Java to read error messages and catch crashes with try and catch. @@ -20784,7 +21312,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = [ ] -> a list = : -> separates key and value ::: -`,J4=`--- +`,F4=`--- titel: Comparing formats bereich: Files kurz: Compare the same data as txt, CSV and JSON, choose the right format and convert a file into another format. @@ -20959,7 +21487,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = the class grade list -> CSV = a game save with lists -> JSON ::: -`,F4=`--- +`,J4=`--- titel: Your first window bereich: Windows with Swing kurz: Open your own window with Java and Swing, explained line by line. @@ -24529,6 +25057,9 @@ A labelled box for a value. It has a name, a data type and a value. also: CamelCase A way of writing names made of several words: written together, every further word starts with a capital, e.g. \`priceWithTax\`. +### case-sensitive +Java tells upper and lower case apart: \`number\`, \`Number\` and \`NUMBER\` are three different names. \`system\` instead of \`System\` is an error. + ### Constant also: constant, constants, Constants A variable whose value stays the same once it is set. You write \`const\` in front of it, e.g. \`const double VAT = 0.19\`. @@ -25640,6 +26171,7 @@ kurz: Guardar valores, conhecer os tipos de dados int, double, String e boolean, ::: kompetenzen - criar uma variável com tipo de dados, nome e valor +- explicar que o Java distingue maiúsculas de minúsculas (\`numero\` não é \`Numero\`) - distinguir os tipos de dados int, double, String e boolean - explicar que = é uma atribuição e não uma comparação - fazer contas com + - * / % e usar a divisão inteira @@ -25676,6 +26208,33 @@ O camelCase tem este nome porque as maiúsculas no meio saem da palavra como as As maiúsculas C e I sobressaem como as duas bossas do camelo. ::: +## Maiúsculas e minúsculas + +O Java distingue **maiúsculas de minúsculas**. Em inglês diz-se **case-sensitive**. Para o Java, \`numero\`, \`Numero\` e \`NUMERO\` são três nomes diferentes, ou seja, três caixas diferentes: + +\`\`\` +int numero = 4 +int Numero = 6 +\`\`\` + +Aqui há duas variáveis. Se mais tarde escreveres \`NUMERO\`, o Java não encontra nenhuma variável com esse nome. O programa não corre e aparece uma mensagem de erro. + +> Isto também vale para as palavras do Java: \`String\` e \`System\` escrevem-se com maiúscula, \`int\` e \`double\` com minúscula. Nos teus programas, nunca cries duas variáveis que só se distinguem por maiúsculas e minúsculas. Isso confunde-te a ti e a quem lê o teu código. + +## Exercício: Três nomes + +::: übung l04-gross-klein +titel: Três nomes +auftrag: O Ludwig criou duas variáveis: \`numero\` com o valor 4 e \`Numero\` com o valor 6. O estrutograma deve multiplicá-las e mostrar **Resultado: 24**. Mas não corre. + Abre o exercício, carrega em Verificar e lê a mensagem de erro. Corrige a instrução e carrega outra vez em Verificar. +start: l04-gross-klein-start.visustruct +test: - -> Resultado: 24 +braucht: anweisung +tipp: Quantos nomes diferentes há no estrutograma? \`numero\`, \`Numero\` e \`NUMERO\` são três nomes diferentes para o computador. +tipp: \`NUMERO\` não existe. Para 24 precisas de 4 vezes 6, ou seja, \`numero\` vezes \`Numero\`: \`int resultado = numero * Numero\`. Com \`numero * numero\` dá 16. +lösung: l04-gross-klein-loesung.visustruct +::: + ## Os quatro tipos de dados O tipo de dados diz que tipo de valor pode ser guardado na variável. @@ -25875,6 +26434,21 @@ tipp: Os dois operadores estão trocados: \`int minutos = segundos / 60;\` e \`i lösung: l04-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l04-java-laeuft-nicht +titel: Corrigir a ficha +code: java +auftrag: O programa deve mostrar **Ludwig tem 7 anos.** Mas não corre, porque há duas palavras mal escritas. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l04-java-laeuft-nicht-start.visustruct +test: - -> Ludwig tem 7 anos. +braucht: anweisung +tipp: O Java distingue maiúsculas de minúsculas. Compara cada palavra da saída com o que foi criado em cima. +tipp: \`System\` escreve-se com S maiúsculo. A variável chama-se \`idade\` com i minúsculo: \`System.out.println(nome + " tem " + idade + " anos.");\` +lösung: l04-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Que tipo de dados? ::: spiel frage @@ -25929,6 +26503,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ ::: checkliste - Consigo criar uma variável com tipo de dados, nome e valor. → O que é uma variável? +- Consigo explicar que o Java distingue maiúsculas de minúsculas (\`numero\` não é \`Numero\`). → Maiúsculas e minúsculas - Consigo distinguir os tipos de dados int, double, String e boolean. → Os quatro tipos de dados - Consigo explicar que = é uma atribuição e não uma comparação. → Atribuição com = - Consigo fazer contas com + - * / % e usar a divisão inteira. → Fazer contas @@ -25946,6 +26521,13 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] boolean > Os números decimais são do tipo double. No VisuStruct escrevem-se com ponto. +? Quantas variáveis criam \`int numero = 1\`, \`int Numero = 2\` e \`int NUMERO = 3\`? +→ Maiúsculas e minúsculas +- [ ] uma +- [ ] duas +- [x] três +> O Java distingue maiúsculas de minúsculas. Os três nomes são diferentes, por isso há três variáveis. + ? Que valor tem x depois de \`int x = 17 / 5\`? → Fazer contas - [ ] 3.4 @@ -26121,6 +26703,21 @@ tipp: Troca as duas últimas linhas: primeiro \`saldo = saldo - preco;\`, depois lösung: l05-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l05-java-laeuft-nicht +titel: Dividir uma piza +code: java +auftrag: Uma piza tem 8 fatias e 4 amigos dividem-na. O programa deve mostrar **Cada um recebe 2 fatias.** Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l05-java-laeuft-nicht-start.visustruct +test: - -> Cada um recebe 2 fatias. +braucht: anweisung +tipp: Compara o nome na saída, letra a letra, com o nome criado na terceira linha. +tipp: A variável chama-se \`porPessoa\` com P maiúsculo (camelCase). Escreve-a exatamente assim na saída. +lösung: l05-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Ordenar os blocos ::: spiel reihenfolge @@ -26486,6 +27083,22 @@ tipp: Põe parênteses para o Java calcular primeiro: \`System.out.println("Soma lösung: l06-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l06-java-laeuft-nicht +titel: Idade no próximo ano +code: java +auftrag: O programa pergunta a tua idade e deve dizer quantos anos terás no próximo ano. Com 14, **No próximo ano tens 15**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l06-java-laeuft-nicht-start.visustruct +test: 14 -> No próximo ano tens 15 +test: 9 -> No próximo ano tens 10 +braucht: anweisung +tipp: A entrada fica guardada numa variável. Como se chama exatamente, e como se chama na saída? +tipp: A variável chama-se \`idade\` com i minúsculo: \`System.out.println("No próximo ano tens " + (idade + 1));\` +lösung: l06-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: O que aparece? ::: spiel frage @@ -26838,6 +27451,21 @@ tipp: O Ludwig perde 3 pontos, por isso tira-se 3 ao valor antigo: \`pontos = po lösung: l07-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l07-java-laeuft-nicht +titel: Corrigir o bónus +code: java +auftrag: O Ludwig tem 10 pontos e recebe 5 pontos de bónus. No fim deve aparecer **Pontos: 15**. Mas o código não corre. Percorre-o também com o passo a passo: em que linha para? + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l07-java-laeuft-nicht-start.visustruct +test: - -> Pontos: 15 +braucht: anweisung +tipp: O Java executa o código de cima para baixo. A variável \`bonus\` já existe quando é usada no cálculo? +tipp: Cria \`bonus\` antes do cálculo: primeiro \`int bonus = 5;\`, depois \`pontos = pontos + bonus;\` +lösung: l07-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Desativar a bomba ::: spiel bombe @@ -27171,6 +27799,21 @@ tipp: “Menos de 6” é \`idade < 6\`. \`<=\` significa “menor ou igual”. lösung: l08-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l08-java-laeuft-nicht +titel: Filme para maiores de 16 +code: java +auftrag: O filme é para maiores de 16. O Ludwig tem 15, por isso o programa deve mostrar **Não pode entrar**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l08-java-laeuft-nicht-start.visustruct +test: - -> Não pode entrar +braucht: verzweigung +tipp: Olha com atenção para a condição entre parênteses depois de \`if\`. Esta variável existe? +tipp: A variável chama-se \`idade\` com i minúsculo: \`if (idade >= 16) {\` +lösung: l08-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Que caminho? ::: spiel frage @@ -27586,6 +28229,21 @@ tipp: Basta que uma das duas condições seja verdadeira: \`dia == 6 || dia == 7 lösung: l09-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l09-java-laeuft-nicht +titel: Corrigir o fim de semana +code: java +auftrag: O dia 6 é sábado, o dia 7 é domingo. Hoje é o dia 7, por isso deve aparecer **sem escola**. Mas o programa não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l09-java-laeuft-nicht-start.visustruct +test: - -> sem escola +braucht: verzweigung +tipp: A condição tem duas partes. Compara o nome da variável nas duas partes. +tipp: Também na segunda parte a variável chama-se \`dia\` com d minúsculo: \`if (dia == 6 || dia == 7) {\` +lösung: l09-java-laeuft-nicht-loesung.visustruct +::: + ## Lista de verificação Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ consigo com segurança. Com ⛅ e ☂️, **Rever** ajuda-te. Depois vem o teste de conhecimentos. Mostra-te se a tua autoavaliação está certa. @@ -27823,6 +28481,21 @@ tipp: No menos, a ordem conta: \`a - b\` em vez de \`b - a\`. lösung: l10-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l10-java-laeuft-nicht +titel: Corrigir a nota +code: java +auftrag: O Ludwig teve nota 2. O programa deve mostrar **bom**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l10-java-laeuft-nicht-start.visustruct +test: - -> bom +braucht: fallauswahl +tipp: Que variável verifica a seleção múltipla? Está escrita da mesma forma em cima? +tipp: Entre parênteses depois de \`switch\` tem de estar \`nota\` com n minúsculo: \`switch (nota) {\` +lösung: l10-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Que caso? ::: spiel frage @@ -28161,6 +28834,21 @@ tipp: Só se poupa enquanto o objetivo **ainda não foi atingido**: \`while (din lösung: l11-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l11-java-laeuft-nicht +titel: Corrigir a contagem +code: java +auftrag: A contagem decrescente deve mostrar **3**, **2**, **1** e depois **Partida!** Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l11-java-laeuft-nicht-start.visustruct +test: - -> 3 | 2 | 1 | Partida! +braucht: whileSchleife +tipp: O erro está dentro do ciclo. Que variável deve ser mostrada e como se chama de facto? +tipp: Mostra \`numero\` com n minúsculo: \`System.out.println(numero);\` +lösung: l11-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Quantas vezes? ::: spiel frage @@ -28441,6 +29129,21 @@ tipp: O ciclo deve continuar enquanto o número for maior do que 0: \`while (num lösung: l12-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l12-java-laeuft-nicht +titel: Corrigir a duplicação +code: java +auftrag: A partir de 1, o programa deve duplicar enquanto o número for menor do que 20: **1**, **2**, **4**, **8**, **16**. Só mostra o 1 e depois para. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l12-java-laeuft-nicht-start.visustruct +test: - -> 1 | 2 | 4 | 8 | 16 +braucht: doUntilSchleife +tipp: A primeira volta ainda corre. O erro aparece quando a condição em baixo é verificada pela primeira vez. +tipp: Na condição tem de estar \`limite\` com l minúsculo: \`} while (numero < limite);\` +lösung: l12-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Pelo menos uma vez? ::: spiel frage @@ -28739,6 +29442,21 @@ tipp: \`i\` também deve tomar o valor 10: \`i <= 10\` em vez de \`i < 10\`. lösung: l13-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l13-java-laeuft-nicht +titel: Corrigir a escada +code: java +auftrag: O Ludwig sobe 5 degraus, cada um com 20 cm. O programa deve mostrar **Altura: 100 cm**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l13-java-laeuft-nicht-start.visustruct +test: - -> Altura: 100 cm +braucht: forSchleife +tipp: A variável \`altura\` é usada num cálculo, mas onde é criada? E com que altura começa o Ludwig? +tipp: Cria \`altura\` antes do ciclo: \`int altura = 0;\` +lösung: l13-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Desativar a bomba ::: spiel bombe @@ -29027,6 +29745,21 @@ tipp: Passa a linha \`System.out.println("Quantidade: " + quantidade);\` para de lösung: l14-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l14-java-laeuft-nicht +titel: Corrigir os números pares +code: java +auftrag: O programa deve mostrar os números pares de 1 a 10: **2**, **4**, **6**, **8**, **10**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l14-java-laeuft-nicht-start.visustruct +test: - -> 2 | 4 | 6 | 8 | 10 +braucht: forSchleife, verzweigung +tipp: O erro está lá dentro, na saída. Como se chama a variável contadora do ciclo? +tipp: A variável contadora é \`i\` com i minúsculo: \`System.out.println(i);\` +lösung: l14-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Dentro e fora ::: spiel frage @@ -29153,7 +29886,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [x] Pelas chavetas e pela indentação - [ ] Pelos pontos e vírgulas ::: -`,bv=`--- +`,xv=`--- titel: Arrays bereich: Fundamentos kurz: Guardar muitos valores com um só nome, chegar a eles com o índice e percorrê-los com um ciclo. @@ -29365,6 +30098,21 @@ tipp: \`max\` tem de começar com um valor do array: \`int max = temperaturas[0] lösung: l15-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l15-java-laeuft-nicht +titel: Somar os pontos +code: java +auftrag: O array \`pontos\` contém 4, 7, 2 e 5. O programa deve somá-los todos e mostrar **Soma: 18**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l15-java-laeuft-nicht-start.visustruct +test: - -> Soma: 18 +braucht: forSchleife +tipp: A área Código sublinha a palavra errada a vermelho. Como se escreve o comprimento de um array? +tipp: \`length\` escreve-se todo em minúsculas: \`i < pontos.length\` +lösung: l15-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Desativar a bomba ::: spiel bombe @@ -29491,7 +30239,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] int numeros = [1, 2, 3]; - [ ] array numeros = (1, 2, 3); ::: -`,xv=`--- +`,bv=`--- titel: Arrays bidimensionais bereich: Fundamentos kurz: Guardar valores em linhas e colunas, como os lugares de um cinema, e percorrê-los com dois ciclos encaixados. @@ -29671,6 +30419,21 @@ tipp: Os índices estão trocados: \`pontos[1][j]\` em vez de \`pontos[j][1]\`. lösung: l16-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l16-java-laeuft-nicht +titel: Ler a pontuação +code: java +auftrag: Na tabela \`pontos\` cada linha é um jogador e cada coluna uma ronda. O programa deve mostrar os pontos do jogador 2 na ronda 1, ou seja, **Jogador 2, ronda 1: 4**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l16-java-laeuft-nicht-start.visustruct +test: - -> Jogador 2, ronda 1: 4 +braucht: anweisung +tipp: As posições \`[1][0]\` estão certas. Olha para o nome da tabela. +tipp: A tabela chama-se \`pontos\` com p minúsculo: \`pontos[1][0]\` +lösung: l16-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Que lugar? ::: spiel frage @@ -30028,6 +30791,21 @@ tipp: O primeiro caráter tem o índice 0: \`nome.charAt(0)\` e \`apelido.charAt lösung: l17-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l17-java-laeuft-nicht +titel: Contar as letras +code: java +auftrag: O programa deve mostrar a primeira letra e o comprimento de **Ludwig**, ou seja, **L tem 6 letras**. Mas não corre, porque há dois métodos mal escritos. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l17-java-laeuft-nicht-start.visustruct +test: - -> L tem 6 letras +braucht: anweisung +tipp: Os nomes dos métodos também são camelCase: começam com minúscula e cada palavra seguinte começa com maiúscula. +tipp: O correto é \`nome.charAt(0)\` com A maiúsculo e \`nome.length()\` todo em minúsculas. +lösung: l17-java-laeuft-nicht-loesung.visustruct +::: + ## Ainda mais métodos Uma String sabe fazer muito mais. Também vais precisar muitas vezes destes métodos: @@ -30989,6 +31767,21 @@ tipp: O ciclo deve parar assim que encontrar algo: \`while (posicao == -1 && i < lösung: l19-java-fehler-loesung.visustruct ::: +## Porque é que não corre? + +::: übung l19-java-laeuft-nicht +titel: Procurar uma carta +code: java +auftrag: As cartas {8, 4, 11, 4, 6} estão num array. O programa procura o 11 e deve mostrar **Posição: 2**. Mas não corre. + “Abrir no editor” mostra o código na área Código. Clica em “Executar” e lê a mensagem de erro. Corrige o erro e carrega em Verificar. +start: l19-java-laeuft-nicht-start.visustruct +test: - -> Posição: 2 +braucht: forSchleife, verzweigung +tipp: Compara os nomes na condição com os nomes criados em cima. +tipp: A carta procurada está em \`procurada\` com p minúsculo: \`if (cartas[i] == procurada) {\` +lösung: l19-java-laeuft-nicht-loesung.visustruct +::: + ## Jogo: Profissional da pesquisa ::: spiel frage @@ -32858,7 +33651,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = registo -> uma linha com valores = separador -> separa as colunas, muitas vezes ; ::: -`,Cv=`--- +`,jv=`--- titel: Dados em JSON bereich: Ficheiros kurz: Perceber ficheiros JSON, tirar valores com indexOf e substring e escrever JSON tu mesmo. @@ -33083,7 +33876,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = [ ] -> uma lista = : -> separa a chave do valor ::: -`,Av=`--- +`,Cv=`--- titel: Comparar formatos bereich: Ficheiros kurz: Comparar os mesmos dados em txt, CSV e JSON, escolher o formato certo e converter um ficheiro noutro formato. @@ -33258,7 +34051,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = a pauta de notas da turma -> CSV = um jogo guardado com listas -> JSON ::: -`,jv=`--- +`,Av=`--- titel: A tua primeira janela bereich: Janelas com Swing kurz: Abrir uma janela tua com Java e Swing, explicado linha a linha. @@ -33480,7 +34273,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Estão entre chavetas. - [ ] Terminam em Window. ::: -`,Ov=`--- +`,Pv=`--- titel: Um botão na janela bereich: Janelas com Swing kurz: Pôr um botão na janela e arrumá-lo bem com um layout. @@ -33696,7 +34489,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] No botão aparece “Fui clicado”. > O que deve acontecer com um clique aprendes na próxima lição. ::: -`,Pv=`--- +`,Ov=`--- titel: O botão reage bereich: Janelas com Swing kurz: Com um ActionListener decides o que acontece com um clique. @@ -34038,7 +34831,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = setText -> mudar o texto = setVisible(true) -> mostrar a janela ::: -`,Mv=`--- +`,Dv=`--- titel: Duplicar um número na janela bereich: Janelas com Swing kurz: Arrumar uma etiqueta, um campo de texto e um botão com um GridLayout e calcular com o texto do campo de texto. @@ -34319,7 +35112,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = JButton -> botão = GridLayout -> arrumação em grelha ::: -`,Dv=`--- +`,Mv=`--- titel: Contador de cliques com reset bereich: Janelas com Swing kurz: Dois botões alteram o mesmo número: criar uma variável para a classe toda. @@ -34551,7 +35344,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Põe a janela no meio do ecrã. - [ ] Aumenta a letra. ::: -`,Zv=`--- +`,Bv=`--- titel: Um semáforo com cores bereich: Janelas com Swing kurz: Definir cores de fundo e mudar um semáforo com uma variável de estado. @@ -34827,7 +35620,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] 3 > Depois de fase++ é 3, que é maior do que 2, por isso passa a 0. ::: -`,Bv=`--- +`,Zv=`--- titel: Calculadora de notas na janela bereich: Janelas com Swing kurz: Escrever a percentagem, determinar o nível com else if e apanhar entradas erradas. @@ -36061,7 +36854,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = new ActionListener() { … } -> classe anónima = a seta depois de e -> lambda ::: -`,Jv=`--- +`,Fv=`--- titel: Dois separadores bereich: Janelas com Swing kurz: Construir uma janela com dois separadores, levar dados de um separador para o outro e guardar a lista num ficheiro de texto. @@ -36342,7 +37135,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = JPanel -> a área de um separador = JTextArea -> uma área de texto com várias linhas ::: -`,Fv=`--- +`,Jv=`--- titel: Model View Controller bereich: Janelas com Swing kurz: Dividir o contador de cliques em model, view e controller e perceber quem fala com quem. @@ -36828,6 +37621,9 @@ Uma caixa com etiqueta para um valor. Tem um nome, um tipo de dados e um valor. auch: CamelCase Forma de escrever nomes com várias palavras: escritas juntas, cada palavra seguinte começa com maiúscula, p. ex. \`precoComIva\`. +### case-sensitive +O Java distingue maiúsculas de minúsculas: \`numero\`, \`Numero\` e \`NUMERO\` são três nomes diferentes. \`system\` em vez de \`System\` é um erro. + ### Constante auch: constante, constantes, Constantes Uma variável cujo valor não muda depois de definido. Escreve-se \`const\` à frente, p. ex. \`const double IVA = 0.23\`. @@ -38188,7 +38984,7 @@ tipp: Start with \`String binary = "";\`. The loop runs with \`while (number > 0 tipp: In the body: \`int remainder = number % 2;\`, then \`binary = remainder + binary;\` and \`number = number / 2;\`. Because \`binary\` is a String, \`+\` puts the remainder at the front. lösung: aufgabe-binaer-loesung.visustruct ::: -`,by=`--- +`,xy=`--- titel: Caesar cipher nach: 17 stufe: 3 @@ -38322,7 +39118,7 @@ lösung: aufgabe-caesar-entschluesseln-loesung.visustruct ::: angeberwissen Unfortunately, Caesar is not secure. There are only 25 keys, and you can try them all in a few minutes. It is even quicker with a trick: in English, E is the most common letter. If H is the most common letter in the secret text, the key was probably 3. On the internet there is also ROT13, which is Caesar with the key 13. Applying ROT13 twice gives you the plain text again, because 13 + 13 = 26. ::: -`,xy=`--- +`,by=`--- titel: Collatz sequence nach: 11 stufe: 2 @@ -38710,7 +39506,7 @@ tipp: You need three variables: two for the numbers and one for the result. tipp: You set a variable with a statement such as \`int number1 = 4\`. For the output you write the name of the variable without quotation marks. lösung: aufgabe-summe-loesung.visustruct ::: -`,Cy=`--- +`,jy=`--- titel: Draw for board duty nach: 15 stufe: 2 @@ -38747,7 +39543,7 @@ lösung: aufgabe-tafeldienst-loesung.visustruct ::: > With \`int pick = (int) (Math.random() * 5) + 1\` you can also let chance draw the number. But for the automatic check we need a fixed input. -`,Ay=`--- +`,Cy=`--- titel: Calculator nach: 10 stufe: 2 @@ -38783,7 +39579,7 @@ tipp: The operator is a text. Read it with \`String operator = scanner.next();\` tipp: \`switch (operator) { case "+" -> { … } … default -> { … } }\`. With texts, the cases are in quotation marks. lösung: aufgabe-rechner-loesung.visustruct ::: -`,jy=`--- +`,Ay=`--- titel: Rental menu nach: 18 stufe: 2 @@ -38818,7 +39614,7 @@ tipp: \`while (true) { … }\` runs forever until a \`break;\` comes. tipp: In Java, use \`if\`/\`else if\` here instead of \`switch\`: a \`break;\` inside a \`switch\` only leaves the \`switch\`, not the loop. \`if (choice == 0) { System.out.println("Bye"); break; } else if (choice == 1) { … }\`. lösung: aufgabe-verleih-java-loesung.visustruct ::: -`,Oy=`--- +`,Py=`--- titel: Vocabulary trainer nach: 27 stufe: 3 @@ -38853,7 +39649,7 @@ tipp: Skip the header line. In the loop, split every line with \`split(";")\`: \ tipp: Compare texts with \`answer.equals(parts[1])\`, not with \`==\`. Count along with \`int right = 0;\` and \`int count = 0;\` before the loop. lösung: aufgabe-vokabeln-loesung.visustruct ::: -`,Py=`--- +`,Oy=`--- titel: Adult? nach: 8 stufe: 1 @@ -38889,7 +39685,7 @@ tipp: Read the age with \`int age = scanner.nextInt();\`. tipp: \`if (age >= 18) { … } else { … }\`, with a \`System.out.println(…)\` in each branch. lösung: aufgabe-volljaehrig-loesung.visustruct ::: -`,My=`--- +`,Dy=`--- titel: Rolling dice with MVC nach: 40 stufe: 3 @@ -38927,7 +39723,7 @@ Extra: a button **New game** resets everything. The method for that belongs in t ::: ludwig Remember the rule from lesson 40: there isn't a single \`JLabel\` in the model. If you change the font size when rolling, that belongs in the view. ::: -`,Dy=`--- +`,My=`--- titel: Double a number nach: 2 stufe: 1 @@ -38943,7 +39739,7 @@ tipp: Doubling means: times 2. You store the result in the same variable again. tipp: \`number = number * 2\` calculates with the old value and stores the result in \`number\` again. You join text and a variable with \`+\`. lösung: aufgabe-verdoppeln-loesung.visustruct ::: -`,Zy=`--- +`,By=`--- titel: Idade num subprograma nach: 18 stufe: 2 @@ -38964,7 +39760,7 @@ tipp: Abre o exercício no editor e constrói lá o programa principal com a cha lösung: aufgabe-alter-haupt-loesung.visustruct unterprogramm: aufgabe-alter-unterprogramm-loesung.visustruct ::: -`,By=`--- +`,Zy=`--- titel: Avaliar o lançamento da bola nach: 25 stufe: 2 @@ -39247,7 +40043,7 @@ lösung: aufgabe-collatz-loesung.visustruct ::: angeberwissen Esta tarefa pode tornar-te rico! O matemático Paul Erdős ofereceu 500 dólares por uma demonstração. Em 2021, a empresa japonesa Bakuage juntou bastante mais: 120 milhões de ienes, na altura cerca de um milhão de dólares, por uma demonstração ou um contraexemplo. Ainda ninguém foi buscar o dinheiro. Já agora, o enigma foi inventado pelo matemático alemão Lothar Collatz em 1937. Vou já começar a fazer contas; com tanto dinheiro compra-se muito feno. ::: -`,Jy=`--- +`,Fy=`--- titel: Conversor de unidades nach: 35 stufe: 2 @@ -39296,7 +40092,7 @@ Extra: um quarto botão **em pés** converte para a unidade inglesa. Um pé são ::: ludwig Marca **Java verdadeiro (com Swing)** na [roda dentada](#zeige-einstellungen). Para "abc" no campo, cada ouvinte precisa de um try/catch com \`NumberFormatException\`, tal como na calculadora. ::: -`,Fy=`--- +`,Jy=`--- titel: Números de Fibonacci nach: 13 stufe: 2 @@ -39734,7 +40530,7 @@ tipp: Salta a linha de cabeçalho. No ciclo, divide cada linha com \`split(";")\ tipp: Os textos comparam-se com \`resposta.equals(partes[1])\`, não com \`==\`. Conta com \`int certas = 0;\` e \`int contagem = 0;\` antes do ciclo. lösung: aufgabe-vokabeln-loesung.visustruct ::: -`,ew=`--- +`,e9=`--- titel: Maior de idade? nach: 8 stufe: 1 @@ -39770,7 +40566,7 @@ tipp: Lê a idade com \`int idade = scanner.nextInt();\`. tipp: \`if (idade >= 18) { … } else { … }\`, com um \`System.out.println(…)\` em cada ramo. lösung: aufgabe-volljaehrig-loesung.visustruct ::: -`,tw=`--- +`,t9=`--- titel: Lançar o dado com MVC nach: 40 stufe: 3 @@ -39808,7 +40604,7 @@ Extra: um botão **Novo jogo** põe tudo no início. O método para isso pertenc ::: ludwig Lembra-te da regra da lição 40: no model não há um único \`JLabel\`. Se mudares o tamanho da letra ao lançar, isso pertence à view. ::: -`,nw=`--- +`,n9=`--- titel: Duplicar um número nach: 2 stufe: 1 @@ -39824,7 +40620,7 @@ tipp: Duplicar quer dizer: vezes 2. Guardas o resultado outra vez na mesma vari tipp: \`numero = numero * 2\` calcula com o valor antigo e volta a guardar o resultado em \`numero\`. Juntas texto e uma variável com \`+\`. lösung: aufgabe-verdoppeln-loesung.visustruct ::: -`,iw=`--- +`,i9=`--- titel: Der mBot2 bereich: VisuBot kurz: Lerne den Roboter kennen, den du gleich programmierst. @@ -40156,7 +40952,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann den echten mBot2 per USB-C verbinden und wieder trennen. → Den echten mBot2 verbinden - Ich kann prüfen, ob alle Sensoren und Aktoren funktionieren. → Den mBot2 testen ::: -`,aw=`--- +`,a9=`--- titel: Das Quadrat bereich: VisuBot kurz: Vom langen Struktogramm zur dreifach verschachtelten Schleife. @@ -40293,7 +41089,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann drei Schleifen ineinander schachteln. → Vier Quadrate - Ich kann mein Programm auf den mBot2 übertragen und ohne Kabel mit Taste A starten. → Ohne Kabel fahren ::: -`,sw='---\ntitel: Variablen und Ausgabe\nbereich: VisuBot\nkurz: Werte in Variablen speichern, den mBot2 damit fahren lassen und Ergebnisse ausgeben.\n---\n\n## Diese Kompetenzen erwerbe ich jetzt\n\n::: kompetenzen\n- eine Variable anlegen und benutzen\n- die Datentypen `int`, `double`, `String` und `boolean` unterscheiden\n- mit zwei Variablen ein Rechteck in Java fahren\n- mit `System.out.println` etwas ausgeben\n:::\n\n## Eine Variable für die Seite\n\nMit `mbot.forward(30)` fährt der mBot2 30 cm am Stück. Fährst du damit ein Quadrat ohne Schleife, steht die 30 aber viermal im Programm. Soll das Quadrat größer werden, musst du sie an vier Stellen ändern. Besser ist es, die Seitenlänge **einmal** zu speichern und dann überall zu benutzen.\n\nDafür gibt es **Variablen**. Eine Variable ist ein Kästchen mit einem Namen, in dem ein Wert liegt:\n\n```java\nint seite = 30;\nmbot.forward(seite);\n```\n\n- `int` ist der **Datentyp**: eine ganze Zahl.\n- `seite` ist der **Name**. Du darfst ihn selbst wählen.\n- `30` ist der **Wert**. Das `=` legt ihn in das Kästchen.\n\nWo danach `seite` steht, setzt der Computer den Wert ein. `mbot.forward(seite)` fährt also 30 cm.\n\n::: übung vb-variable-seite\ntitel: Quadrat mit Variable\nauftrag: Lege in einer Anweisung die Variable `int seite = 30` an. Danach fährt der mBot2 ein Quadrat: viermal `seite` Zentimeter vor und nach rechts drehen.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: Die erste Anweisung ist `int seite = 30`. Darunter kommt eine For-Schleife, die viermal läuft.\ntipp: In der Schleife stehen `mbot.forward(seite)` und `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Ändere jetzt nur die 30 in eine 60 und starte die Simulation. Das ganze Quadrat wird doppelt so groß.\n\n## Welche Datentypen gibt es?\n\nJede Variable hat einen Datentyp. Er legt fest, welche Werte hineinpassen:\n\n| Datentyp | Was passt hinein? | Beispiel |\n|---|---|---|\n| `int` | ganze Zahlen | `int seite = 30;` |\n| `double` | Kommazahlen, mit Punkt geschrieben | `double tempo = 1.5;` |\n| `String` | Text in Anführungszeichen | `String name = "Visu";` |\n| `boolean` | wahr oder falsch | `boolean fertig = false;` |\n\nMit Variablen kannst du auch rechnen: `int strecke = 4 * seite;` rechnet die ganze Strecke des Quadrats aus.\n\n## Jetzt in Java: Rechteck\n\nEin Rechteck hat zwei verschiedene Seiten. Also brauchst du zwei Variablen.\n\n::: übung vb-java-rechteck\ntitel: Rechteck mit Variablen\ncode: java\nauftrag: Schreibe in Java: Lege `int laenge = 60` und `int breite = 30` an. Der mBot2 fährt ein Rechteck: Länge, rechts drehen, Breite, rechts drehen, und das zweimal.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Zwei Variablen oben: `int laenge = 60;` und `int breite = 30;`. Darunter eine For-Schleife, die zweimal läuft.\ntipp: In der Schleife: `mbot.forward(laenge);`, `mbot.turnRight();`, `mbot.forward(breite);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Ausgabe\n\nNicht jedes Ergebnis muss der Roboter fahren. Mit `System.out.println(…)` gibt ein Java-Programm Text in der [Konsole](#zeige-konsole) aus. Mit `+` hängst du Text und Werte aneinander:\n\n```java\nint seite = 30;\nint strecke = 4 * seite;\nSystem.out.println("Strecke: " + strecke + " cm");\n```\n\nDie Konsole zeigt dann **Strecke: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: Wie weit fährt er?\ncode: java\nauftrag: Ein Rechteck ist 60 cm lang und 30 cm breit. Lege `laenge` und `breite` als Variablen an. Berechne in einer Variablen `strecke`, wie weit der mBot2 einmal ganz herum fährt, und gib **Strecke: 180 cm** aus. Ganz ohne `mbot`!\ntest: - -> Strecke: 180 cm\nbraucht: anweisung\ntipp: Einmal herum sind zweimal die Länge und zweimal die Breite.\ntipp: `int strecke = 2 * laenge + 2 * breite;` und dann `System.out.println("Strecke: " + strecke + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? Was fährt `mbot.forward(seite)`, wenn vorher `int seite = 40;` steht?\n→ Eine Variable für die Seite\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] gar nichts, `seite` ist kein Befehl\n> Wo `seite` steht, setzt Java den Wert 40 ein.\n? Welcher Datentyp passt zu `"Visu"`?\n→ Welche Datentypen gibt es?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in Anführungszeichen ist ein `String`.\n? Was gibt `System.out.println("Seite: " + 30);` aus?\n→ Jetzt ohne Roboter: Ausgabe\n- [x] Seite: 30\n- [ ] "Seite: " + 30\n- [ ] 30\n> Das `+` hängt den Text und die Zahl aneinander.\n:::\n\nSchätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt.\n\n::: checkliste\n- Ich kann eine Variable anlegen und benutzen. → Eine Variable für die Seite\n- Ich kann die Datentypen `int`, `double`, `String` und `boolean` unterscheiden. → Welche Datentypen gibt es?\n- Ich kann mit zwei Variablen ein Rechteck in Java fahren. → Jetzt in Java: Rechteck\n- Ich kann mit `System.out.println` etwas ausgeben. → Jetzt ohne Roboter: Ausgabe\n:::\n',rw=`--- +`,s9='---\ntitel: Variablen und Ausgabe\nbereich: VisuBot\nkurz: Werte in Variablen speichern, den mBot2 damit fahren lassen und Ergebnisse ausgeben.\n---\n\n## Diese Kompetenzen erwerbe ich jetzt\n\n::: kompetenzen\n- eine Variable anlegen und benutzen\n- die Datentypen `int`, `double`, `String` und `boolean` unterscheiden\n- mit zwei Variablen ein Rechteck in Java fahren\n- mit `System.out.println` etwas ausgeben\n:::\n\n## Eine Variable für die Seite\n\nMit `mbot.forward(30)` fährt der mBot2 30 cm am Stück. Fährst du damit ein Quadrat ohne Schleife, steht die 30 aber viermal im Programm. Soll das Quadrat größer werden, musst du sie an vier Stellen ändern. Besser ist es, die Seitenlänge **einmal** zu speichern und dann überall zu benutzen.\n\nDafür gibt es **Variablen**. Eine Variable ist ein Kästchen mit einem Namen, in dem ein Wert liegt:\n\n```java\nint seite = 30;\nmbot.forward(seite);\n```\n\n- `int` ist der **Datentyp**: eine ganze Zahl.\n- `seite` ist der **Name**. Du darfst ihn selbst wählen.\n- `30` ist der **Wert**. Das `=` legt ihn in das Kästchen.\n\nWo danach `seite` steht, setzt der Computer den Wert ein. `mbot.forward(seite)` fährt also 30 cm.\n\n::: übung vb-variable-seite\ntitel: Quadrat mit Variable\nauftrag: Lege in einer Anweisung die Variable `int seite = 30` an. Danach fährt der mBot2 ein Quadrat: viermal `seite` Zentimeter vor und nach rechts drehen.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: Die erste Anweisung ist `int seite = 30`. Darunter kommt eine For-Schleife, die viermal läuft.\ntipp: In der Schleife stehen `mbot.forward(seite)` und `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Ändere jetzt nur die 30 in eine 60 und starte die Simulation. Das ganze Quadrat wird doppelt so groß.\n\n## Welche Datentypen gibt es?\n\nJede Variable hat einen Datentyp. Er legt fest, welche Werte hineinpassen:\n\n| Datentyp | Was passt hinein? | Beispiel |\n|---|---|---|\n| `int` | ganze Zahlen | `int seite = 30;` |\n| `double` | Kommazahlen, mit Punkt geschrieben | `double tempo = 1.5;` |\n| `String` | Text in Anführungszeichen | `String name = "Visu";` |\n| `boolean` | wahr oder falsch | `boolean fertig = false;` |\n\nMit Variablen kannst du auch rechnen: `int strecke = 4 * seite;` rechnet die ganze Strecke des Quadrats aus.\n\n## Jetzt in Java: Rechteck\n\nEin Rechteck hat zwei verschiedene Seiten. Also brauchst du zwei Variablen.\n\n::: übung vb-java-rechteck\ntitel: Rechteck mit Variablen\ncode: java\nauftrag: Schreibe in Java: Lege `int laenge = 60` und `int breite = 30` an. Der mBot2 fährt ein Rechteck: Länge, rechts drehen, Breite, rechts drehen, und das zweimal.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Zwei Variablen oben: `int laenge = 60;` und `int breite = 30;`. Darunter eine For-Schleife, die zweimal läuft.\ntipp: In der Schleife: `mbot.forward(laenge);`, `mbot.turnRight();`, `mbot.forward(breite);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Ausgabe\n\nNicht jedes Ergebnis muss der Roboter fahren. Mit `System.out.println(…)` gibt ein Java-Programm Text in der [Konsole](#zeige-konsole) aus. Mit `+` hängst du Text und Werte aneinander:\n\n```java\nint seite = 30;\nint strecke = 4 * seite;\nSystem.out.println("Strecke: " + strecke + " cm");\n```\n\nDie Konsole zeigt dann **Strecke: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: Wie weit fährt er?\ncode: java\nauftrag: Ein Rechteck ist 60 cm lang und 30 cm breit. Lege `laenge` und `breite` als Variablen an. Berechne in einer Variablen `strecke`, wie weit der mBot2 einmal ganz herum fährt, und gib **Strecke: 180 cm** aus. Ganz ohne `mbot`!\ntest: - -> Strecke: 180 cm\nbraucht: anweisung\ntipp: Einmal herum sind zweimal die Länge und zweimal die Breite.\ntipp: `int strecke = 2 * laenge + 2 * breite;` und dann `System.out.println("Strecke: " + strecke + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? Was fährt `mbot.forward(seite)`, wenn vorher `int seite = 40;` steht?\n→ Eine Variable für die Seite\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] gar nichts, `seite` ist kein Befehl\n> Wo `seite` steht, setzt Java den Wert 40 ein.\n? Welcher Datentyp passt zu `"Visu"`?\n→ Welche Datentypen gibt es?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in Anführungszeichen ist ein `String`.\n? Was gibt `System.out.println("Seite: " + 30);` aus?\n→ Jetzt ohne Roboter: Ausgabe\n- [x] Seite: 30\n- [ ] "Seite: " + 30\n- [ ] 30\n> Das `+` hängt den Text und die Zahl aneinander.\n:::\n\nSchätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt.\n\n::: checkliste\n- Ich kann eine Variable anlegen und benutzen. → Eine Variable für die Seite\n- Ich kann die Datentypen `int`, `double`, `String` und `boolean` unterscheiden. → Welche Datentypen gibt es?\n- Ich kann mit zwei Variablen ein Rechteck in Java fahren. → Jetzt in Java: Rechteck\n- Ich kann mit `System.out.println` etwas ausgeben. → Jetzt ohne Roboter: Ausgabe\n:::\n',r9=`--- titel: Sensoren abfragen bereich: VisuBot kurz: Der mBot2 misst etwas, und dein Programm entscheidet. @@ -40374,7 +41170,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann den Unterschied zwischen Befehl und Sensor erklären. → Befehle und Sensoren - Ich kann einen Sensor in eine Bedingung einbauen. → Wand vorn? ::: -`,ow=`--- +`,o9=`--- titel: Bis zur Wand bereich: VisuBot kurz: Der mBot2 misst den Abstand und hält rechtzeitig an. @@ -40461,7 +41257,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann entscheiden, wann ich eine While-Schleife statt einer For-Schleife nehme. → Drei Welten, ein Programm - Ich kann mit dem Liniensensor ein Ziel finden. → Bis zum Ziel ::: -`,lw=`--- +`,l9=`--- titel: Der Ultraschallsensor bereich: VisuBot kurz: Abstand messen, Abstand halten und das Ganze in Java. @@ -40559,7 +41355,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann zwei Verzweigungen ineinander bauen. → Abstand halten im Struktogramm - Ich kann eine While-Schleife mit dem Abstand in Java schreiben. → Jetzt in Java ::: -`,uw=`--- +`,u9=`--- titel: Der Liniensensor bereich: VisuBot kurz: Dunkle Linien auf dem Boden erkennen und nicht vom Tisch fallen. @@ -40653,7 +41449,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann bis zu einer Linie fahren. → Am Rand umkehren im Struktogramm - Ich kann in Java mit einer Variable Schritte zählen. → Jetzt in Java: hin und zurück ::: -`,mw=`--- +`,m9=`--- titel: Farben erkennen bereich: VisuBot kurz: Der Quad-RGB-Sensor sagt, auf welcher Farbe der mBot2 steht. @@ -40743,7 +41539,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann mit \`!\` eine Bedingung umdrehen. → Fahre bis Rot im Struktogramm - Ich kann eine Verzweigung in eine Schleife schreiben. → Jetzt in Java: bei Grün piepen ::: -`,cw=`--- +`,c9=`--- titel: Fallauswahl mit Farben bereich: VisuBot kurz: Je nach Farbe oder Linie etwas anderes tun, mit einer Fallauswahl statt vieler Verzweigungen. @@ -40865,7 +41661,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann eine Fallauswahl mit Zahlen in Java schreiben. → Jetzt in Java: Linienmuster - Ich kann eine Zahl einlesen und je nach Wert etwas ausgeben. → Jetzt ohne Roboter: Noten in Worten ::: -`,dw=`--- +`,d9=`--- titel: Tasten und Joystick bereich: VisuBot kurz: Der mBot2 wartet auf dich und lässt sich fernsteuern. @@ -40954,7 +41750,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann auf eine Taste warten. → Warten auf Taste A im Struktogramm - Ich kann den mBot2 mit dem Joystick steuern. → Jetzt in Java: Fernsteuerung ::: -`,hw=`--- +`,h9=`--- titel: Der Lichtsensor bereich: VisuBot kurz: Hell oder dunkel? Der mBot2 wird zum Nachtlicht. @@ -41034,7 +41830,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann mit einer Verzweigung die LEDs schalten. → Nachtlicht im Struktogramm - Ich kann mehrere Befehle in einen Zweig schreiben. → Jetzt in Java: Nachtlicht mit Ton ::: -`,gw=`--- +`,g9=`--- titel: Das Mikrofon bereich: VisuBot kurz: Klatschen zum Losfahren und eine Lärmampel für das Klassenzimmer. @@ -41111,7 +41907,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann warten, bis etwas passiert. → Klatschen zum Losfahren im Struktogramm - Ich kann eine Lärmampel in Java schreiben. → Jetzt in Java: Lärmampel ::: -`,pw=`--- +`,p9=`--- titel: Der Lagesensor bereich: VisuBot kurz: Neigung messen und Schütteln erkennen. @@ -41197,7 +41993,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann zwei Bedingungen mit „oder“ verbinden. → Schräglage-Warnung im Struktogramm - Ich kann mehrere Bedingungen mit „und“ verbinden. → Jetzt in Java: Wasserwaage ::: -`,fw=`--- +`,f9=`--- titel: Die LEDs bereich: VisuBot kurz: Farben mischen, eine Ampel bauen und blinken lassen. @@ -41284,7 +42080,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann Farben mit Pausen nacheinander zeigen. → Ampel im Struktogramm - Ich kann die LEDs in Java blinken lassen. → Jetzt in Java: Blaulicht ::: -`,bw=`--- +`,x9=`--- titel: Einzelne LEDs bereich: VisuBot kurz: Jede der fünf LEDs bekommt ihre eigene Farbe, bis zum Lauflicht. @@ -41371,7 +42167,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann einzelne LEDs in verschiedenen Farben leuchten lassen. → Drei Lichter im Struktogramm - Ich kann mit einer Schleife ein Lauflicht bauen. → Jetzt in Java: Lauflicht ::: -`,xw=`--- +`,b9=`--- titel: Der Lautsprecher bereich: VisuBot kurz: Töne, eine Tonleiter und eine Sirene. @@ -41475,7 +42271,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann in Java mit der Zählvariable rechnen. → Jetzt in Java: immer höher - Ich kann den mBot2 ein Gefühl zeigen lassen. → Gefühle zeigen ::: -`,vw=`--- +`,v9=`--- titel: Arrays und Melodien bereich: VisuBot kurz: Viele Werte in einem Array speichern und mit einer Schleife abarbeiten. @@ -41574,7 +42370,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann ein Array mit Texten in Java benutzen. → Jetzt in Java: Regenbogen - Ich kann alle Werte eines Arrays zusammenzählen. → Jetzt ohne Roboter: Summe der Noten ::: -`,yw=`--- +`,y9=`--- titel: Der Bildschirm bereich: VisuBot kurz: Text, Zahlen und Messwerte auf dem CyberPi anzeigen. @@ -41662,7 +42458,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann Zahlen und Messwerte anzeigen. → Zahlen und Messwerte - Ich kann einen Countdown in Java schreiben. → Jetzt in Java: Countdown ::: -`,ww=`--- +`,w9=`--- titel: Zeichenketten bereich: VisuBot kurz: Mit Texten rechnen, Buchstaben herausholen und auf dem Bildschirm zeigen. @@ -41756,7 +42552,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann Texte und Zahlen mit \`+\` verbinden. → Jetzt in Java: Text und Länge - Ich kann mit \`charAt(…)\` einzelne Zeichen holen. → Jetzt ohne Roboter: rückwärts lesen ::: -`,zw=`--- +`,z9=`--- titel: Motoren und Geschwindigkeit bereich: VisuBot kurz: Gas geben, lenken und einer Linie folgen. @@ -41858,7 +42654,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann fahren, bis ein Sensor etwas meldet. → Gas geben bis zur Wand im Struktogramm - Ich kann einen Linienfolger in Java schreiben. → Jetzt in Java: Linienfolger ::: -`,Iw=`--- +`,I9=`--- titel: Stoppuhr und Akku bereich: VisuBot kurz: Zeit messen und den Akku im Blick behalten. @@ -41949,7 +42745,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann eine bestimmte Zeit lang fahren. → Zwei Sekunden fahren im Struktogramm - Ich kann den Akkustand anzeigen. → Jetzt in Java: Akku-Anzeige ::: -`,kw=`--- +`,k9=`--- titel: Eigene Methoden bereich: VisuBot kurz: Eigene Befehle mit Parametern und Rückgabewert schreiben und aufrufen. @@ -42051,7 +42847,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann Methoden in Java erkennen. → Methoden in Java - Ich kann eine Methode mit Rückgabewert schreiben. → Jetzt ohne Roboter: Methode mit Rückgabe ::: -`,Sw=`## 🤖 mBot2-Befehle +`,S9=`## 🤖 mBot2-Befehle Ein Befehl sagt dem mBot2, was er **tun** soll. Jeder Befehl beginnt mit \`mbot.\` und endet mit Klammern. In die Klammern schreibst du oft eine Zahl. @@ -42203,7 +42999,7 @@ Mit **🔌 mBot2** neben „Simulation starten“ verbindest du den echten Robot ### Ohne Kabel fahren Mit **⬆ Übertragen** speicherst du dein Programm fest auf dem mBot2. Danach Kabel ab, mBot2 an den Start und **Taste A** drücken: Er fährt dein Programm allein. Es bleibt gespeichert, bis du ein neues überträgst. Eingaben mit der Tastatur gehen am mBot2 nicht. -`,Tw=`--- +`,T9=`--- titel: The mBot2 bereich: VisuBot kurz: Get to know the robot you are about to program. @@ -42535,7 +43331,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can connect the real mBot2 with USB-C and disconnect it again. → Connecting the real mBot2 - I can check that all sensors and actuators work. → Testing the mBot2 ::: -`,_w=`--- +`,_9=`--- titel: The square bereich: VisuBot kurz: From a long structure chart to a triple nested loop. @@ -42672,7 +43468,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can nest three loops. → Four squares - I can upload my program to the mBot2 and start it with button A without a cable. → Driving without a cable ::: -`,Cw='---\ntitel: Variables and output\nbereich: VisuBot\nkurz: Store values in variables, drive the mBot2 with them and print results.\n---\n\n## Skills I will gain now\n\n::: kompetenzen\n- create and use a variable\n- tell the data types `int`, `double`, `String` and `boolean` apart\n- drive a rectangle in Java with two variables\n- print something with `System.out.println`\n:::\n\n## A variable for the side\n\nWith `mbot.forward(30)` the mBot2 drives 30 cm in one go. If you drive a square with it and no loop, the 30 appears four times in your program. To make the square bigger, you have to change it in four places. It is better to store the side length **once** and then use it everywhere.\n\nThat is what **variables** are for. A variable is a box with a name that holds a value:\n\n```java\nint side = 30;\nmbot.forward(side);\n```\n\n- `int` is the **data type**: a whole number.\n- `side` is the **name**. You may choose it yourself.\n- `30` is the **value**. The `=` puts it into the box.\n\nWherever `side` appears afterwards, the computer uses its value. So `mbot.forward(side)` drives 30 cm.\n\n::: übung vb-variable-seite\ntitel: Square with a variable\nauftrag: In one statement, create the variable `int side = 30`. After that the mBot2 drives a square: four times `side` centimetres forward and turn right.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: The first statement is `int side = 30`. Below it comes a for loop that runs four times.\ntipp: Inside the loop are `mbot.forward(side)` and `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Now change only the 30 to 60 and start the simulation. The whole square becomes twice as big.\n\n## Which data types are there?\n\nEvery variable has a data type. It decides which values fit inside:\n\n| Data type | What fits inside? | Example |\n|---|---|---|\n| `int` | whole numbers | `int side = 30;` |\n| `double` | decimal numbers, written with a point | `double speed = 1.5;` |\n| `String` | text in quotation marks | `String name = "Visu";` |\n| `boolean` | true or false | `boolean done = false;` |\n\nYou can also calculate with variables: `int distance = 4 * side;` works out the whole distance around the square.\n\n## Now in Java: rectangle\n\nA rectangle has two different sides. So you need two variables.\n\n::: übung vb-java-rechteck\ntitel: Rectangle with variables\ncode: java\nauftrag: Write in Java: create `int length = 60` and `int width = 30`. The mBot2 drives a rectangle: length, turn right, width, turn right, and all that twice.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Two variables at the top: `int length = 60;` and `int width = 30;`. Below them a for loop that runs twice.\ntipp: Inside the loop: `mbot.forward(length);`, `mbot.turnRight();`, `mbot.forward(width);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Now without the robot: output\n\nNot every result has to be driven by the robot. With `System.out.println(…)` a Java program prints text in the [console](#zeige-konsole). With `+` you join text and values:\n\n```java\nint side = 30;\nint distance = 4 * side;\nSystem.out.println("Distance: " + distance + " cm");\n```\n\nThe console then shows **Distance: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: How far does it drive?\ncode: java\nauftrag: A rectangle is 60 cm long and 30 cm wide. Create `length` and `width` as variables. Calculate in a variable `distance` how far the mBot2 drives once all the way round, and print **Distance: 180 cm**. No `mbot` at all!\ntest: - -> Distance: 180 cm\nbraucht: anweisung\ntipp: Once round is twice the length plus twice the width.\ntipp: `int distance = 2 * length + 2 * width;` and then `System.out.println("Distance: " + distance + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? What does `mbot.forward(side)` drive if `int side = 40;` comes first?\n→ A variable for the side\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] nothing, `side` is not a command\n> Wherever `side` appears, Java uses the value 40.\n? Which data type fits `"Visu"`?\n→ Which data types are there?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in quotation marks is a `String`.\n? What does `System.out.println("Side: " + 30);` print?\n→ Now without the robot: output\n- [x] Side: 30\n- [ ] "Side: " + 30\n- [ ] 30\n> The `+` joins the text and the number.\n:::\n\nRate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right.\n\n::: checkliste\n- I can create and use a variable. → A variable for the side\n- I can tell the data types `int`, `double`, `String` and `boolean` apart. → Which data types are there?\n- I can drive a rectangle in Java with two variables. → Now in Java: rectangle\n- I can print something with `System.out.println`. → Now without the robot: output\n:::\n',Aw=`--- +`,j9='---\ntitel: Variables and output\nbereich: VisuBot\nkurz: Store values in variables, drive the mBot2 with them and print results.\n---\n\n## Skills I will gain now\n\n::: kompetenzen\n- create and use a variable\n- tell the data types `int`, `double`, `String` and `boolean` apart\n- drive a rectangle in Java with two variables\n- print something with `System.out.println`\n:::\n\n## A variable for the side\n\nWith `mbot.forward(30)` the mBot2 drives 30 cm in one go. If you drive a square with it and no loop, the 30 appears four times in your program. To make the square bigger, you have to change it in four places. It is better to store the side length **once** and then use it everywhere.\n\nThat is what **variables** are for. A variable is a box with a name that holds a value:\n\n```java\nint side = 30;\nmbot.forward(side);\n```\n\n- `int` is the **data type**: a whole number.\n- `side` is the **name**. You may choose it yourself.\n- `30` is the **value**. The `=` puts it into the box.\n\nWherever `side` appears afterwards, the computer uses its value. So `mbot.forward(side)` drives 30 cm.\n\n::: übung vb-variable-seite\ntitel: Square with a variable\nauftrag: In one statement, create the variable `int side = 30`. After that the mBot2 drives a square: four times `side` centimetres forward and turn right.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: The first statement is `int side = 30`. Below it comes a for loop that runs four times.\ntipp: Inside the loop are `mbot.forward(side)` and `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Now change only the 30 to 60 and start the simulation. The whole square becomes twice as big.\n\n## Which data types are there?\n\nEvery variable has a data type. It decides which values fit inside:\n\n| Data type | What fits inside? | Example |\n|---|---|---|\n| `int` | whole numbers | `int side = 30;` |\n| `double` | decimal numbers, written with a point | `double speed = 1.5;` |\n| `String` | text in quotation marks | `String name = "Visu";` |\n| `boolean` | true or false | `boolean done = false;` |\n\nYou can also calculate with variables: `int distance = 4 * side;` works out the whole distance around the square.\n\n## Now in Java: rectangle\n\nA rectangle has two different sides. So you need two variables.\n\n::: übung vb-java-rechteck\ntitel: Rectangle with variables\ncode: java\nauftrag: Write in Java: create `int length = 60` and `int width = 30`. The mBot2 drives a rectangle: length, turn right, width, turn right, and all that twice.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Two variables at the top: `int length = 60;` and `int width = 30;`. Below them a for loop that runs twice.\ntipp: Inside the loop: `mbot.forward(length);`, `mbot.turnRight();`, `mbot.forward(width);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Now without the robot: output\n\nNot every result has to be driven by the robot. With `System.out.println(…)` a Java program prints text in the [console](#zeige-konsole). With `+` you join text and values:\n\n```java\nint side = 30;\nint distance = 4 * side;\nSystem.out.println("Distance: " + distance + " cm");\n```\n\nThe console then shows **Distance: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: How far does it drive?\ncode: java\nauftrag: A rectangle is 60 cm long and 30 cm wide. Create `length` and `width` as variables. Calculate in a variable `distance` how far the mBot2 drives once all the way round, and print **Distance: 180 cm**. No `mbot` at all!\ntest: - -> Distance: 180 cm\nbraucht: anweisung\ntipp: Once round is twice the length plus twice the width.\ntipp: `int distance = 2 * length + 2 * width;` and then `System.out.println("Distance: " + distance + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? What does `mbot.forward(side)` drive if `int side = 40;` comes first?\n→ A variable for the side\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] nothing, `side` is not a command\n> Wherever `side` appears, Java uses the value 40.\n? Which data type fits `"Visu"`?\n→ Which data types are there?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in quotation marks is a `String`.\n? What does `System.out.println("Side: " + 30);` print?\n→ Now without the robot: output\n- [x] Side: 30\n- [ ] "Side: " + 30\n- [ ] 30\n> The `+` joins the text and the number.\n:::\n\nRate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right.\n\n::: checkliste\n- I can create and use a variable. → A variable for the side\n- I can tell the data types `int`, `double`, `String` and `boolean` apart. → Which data types are there?\n- I can drive a rectangle in Java with two variables. → Now in Java: rectangle\n- I can print something with `System.out.println`. → Now without the robot: output\n:::\n',C9=`--- titel: Reading sensors bereich: VisuBot kurz: The mBot2 measures something, and your program decides. @@ -42753,7 +43549,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can explain the difference between a command and a sensor. → Commands and sensors - I can build a sensor into a condition. → Wall ahead? ::: -`,jw=`--- +`,A9=`--- titel: Up to the wall bereich: VisuBot kurz: The mBot2 measures the distance and stops in time. @@ -42840,7 +43636,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can decide when to use a while loop instead of a for loop. → Three worlds, one program - I can find a goal with the line sensor. → To the goal ::: -`,Ow=`--- +`,P9=`--- titel: The ultrasonic sensor bereich: VisuBot kurz: Measure the distance, keep your distance, and do it all in Java. @@ -42938,7 +43734,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can put one branch inside another. → Keep your distance in the structure chart - I can write a while loop with the distance in Java. → Now in Java ::: -`,Pw=`--- +`,O9=`--- titel: The line sensor bereich: VisuBot kurz: Detect dark lines on the floor and don't fall off the table. @@ -43032,7 +43828,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can drive up to a line. → Turn round at the edge in the structure chart - I can count steps with a variable in Java. → Now in Java: there and back ::: -`,Mw=`--- +`,D9=`--- titel: Recognising colours bereich: VisuBot kurz: The quad RGB sensor tells you which colour the mBot2 is standing on. @@ -43122,7 +43918,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can turn a condition round with \`!\`. → Drive to red in the structure chart - I can put a branch inside a loop. → Now in Java: beep on green ::: -`,Dw=`--- +`,M9=`--- titel: Case selection with colours bereich: VisuBot kurz: Do something different for each colour or line, with one case selection instead of many branches. @@ -43244,7 +44040,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can write a case selection with numbers in Java. → Now in Java: line patterns - I can read a number and print something depending on its value. → Now without the robot: grades in words ::: -`,Zw=`--- +`,B9=`--- titel: Buttons and joystick bereich: VisuBot kurz: The mBot2 waits for you and can be remote controlled. @@ -43333,7 +44129,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can wait for a button. → Waiting for button A in the structure chart - I can steer the mBot2 with the joystick. → Now in Java: remote control ::: -`,Bw=`--- +`,Z9=`--- titel: The light sensor bereich: VisuBot kurz: Bright or dark? The mBot2 becomes a night light. @@ -43413,7 +44209,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can switch the LEDs with a branch. → Night light in the structure chart - I can write several commands in one branch. → Now in Java: night light with sound ::: -`,Lw=`--- +`,L9=`--- titel: The microphone bereich: VisuBot kurz: Clap to start, and a noise light for the classroom. @@ -43490,7 +44286,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can wait until something happens. → Clap to start in the structure chart - I can write a noise light in Java. → Now in Java: noise light ::: -`,Ww=`--- +`,W9=`--- titel: The motion sensor bereich: VisuBot kurz: Measure tilt and detect shaking. @@ -43576,7 +44372,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can join two conditions with “or”. → Tilt warning in the structure chart - I can join several conditions with “and”. → Now in Java: spirit level ::: -`,Ew=`--- +`,E9=`--- titel: The LEDs bereich: VisuBot kurz: Mix colours, build a traffic light and make it blink. @@ -43663,7 +44459,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can show colours one after the other with pauses. → Traffic light in the structure chart - I can make the LEDs blink in Java. → Now in Java: blue light ::: -`,Nw=`--- +`,N9=`--- titel: Single LEDs bereich: VisuBot kurz: Each of the five LEDs gets its own colour, all the way to a running light. @@ -43750,7 +44546,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can make single LEDs light up in different colours. → Three lights in the structogram - I can build a running light with a loop. → Now in Java: running light ::: -`,Jw=`--- +`,F9=`--- titel: The speaker bereich: VisuBot kurz: Tones, a scale and a siren. @@ -43854,7 +44650,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can calculate with the counting variable in Java. → Now in Java: higher and higher - I can make the mBot2 show a feeling. → Showing feelings ::: -`,Fw=`--- +`,J9=`--- titel: Arrays and melodies bereich: VisuBot kurz: Store many values in one array and work through them with a loop. @@ -43953,7 +44749,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can use an array of texts in Java. → Now in Java: rainbow - I can add up all values of an array. → Now without the robot: sum of the grades ::: -`,Rw=`--- +`,R9=`--- titel: The screen bereich: VisuBot kurz: Show text, numbers and sensor values on the CyberPi. @@ -44041,7 +44837,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can show numbers and sensor values. → Numbers and sensor values - I can write a countdown in Java. → Now in Java: countdown ::: -`,Gw=`--- +`,G9=`--- titel: Strings bereich: VisuBot kurz: Work with texts, pick out letters and show them on the screen. @@ -44135,7 +44931,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can join texts and numbers with \`+\`. → Now in Java: text and length - I can get single characters with \`charAt(…)\`. → Now without the robot: read it backwards ::: -`,Hw=`--- +`,H9=`--- titel: Motors and speed bereich: VisuBot kurz: Step on the gas, steer and follow a line. @@ -44237,7 +45033,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can drive until a sensor reports something. → Full speed to the wall in the structure chart - I can write a line follower in Java. → Now in Java: line follower ::: -`,Vw=`--- +`,V9=`--- titel: Stopwatch and battery bereich: VisuBot kurz: Measure time and keep an eye on the battery. @@ -44328,7 +45124,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can drive for a certain time. → Driving two seconds in the structure chart - I can show the battery level. → Now in Java: battery display ::: -`,qw=`--- +`,q9=`--- titel: Your own methods bereich: VisuBot kurz: Write and call your own commands with parameters and return values. @@ -44430,7 +45226,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can recognise methods in Java. → Methods in Java - I can write a method with a return value. → Now without the robot: a method with a return value ::: -`,Qw=`## 🤖 mBot2 commands +`,Q9=`## 🤖 mBot2 commands A command tells the mBot2 what to **do**. Every command starts with \`mbot.\` and ends with brackets. Often you write a number in the brackets. @@ -44582,7 +45378,7 @@ With **🔌 mBot2** next to "Start simulation" you connect the real robot with t ### Driving without a cable With **⬆ Upload** you save your program on the mBot2. Then unplug the cable, put the mBot2 at the start and press **button A**: it drives your program on its own. It stays saved until you upload a new one. Keyboard inputs do not work on the mBot2. -`,Uw=`--- +`,U9=`--- titel: Die Alarmanlage nach: 16 stufe: 2 @@ -44601,7 +45397,7 @@ tipp: Außen steht eine While-Schleife mit \`!mbot.isButtonB()\`. Darin eine Ver tipp: Die Bedingung der Verzweigung: \`mbot.getDistance() < 20 || mbot.getLoudness() > 60\`. Im Ja-Zweig \`mbot.setLed(255, 0, 0)\` und \`mbot.playTone(880, 200)\`, im Nein-Zweig \`mbot.ledOff()\`. lösung: vb-alarmanlage-loesung.visustruct ::: -`,$w=`--- +`,$9=`--- titel: Labyrinth mit Ausgängen nach: 5 stufe: 3 @@ -44620,7 +45416,7 @@ tipp: In jedem Durchlauf dreht sich der mBot2 zuerst nach links und misst. Ist o tipp: Durch die Lücke sind es zwei Felder bis in den nächsten Gang. Danach soll er wieder nach rechts schauen. Ist oben eine Wand, dreht er sich zurück und fährt ein Feld weiter. lösung: vb-ausgang-loesung.visustruct ::: -`,Yw=`--- +`,Y9=`--- titel: Binär zählen nach: 15 stufe: 3 @@ -44645,7 +45441,7 @@ tipp: Ob LED 0 an ist, verrät der Rest beim Teilen durch 2: \`zahl % 2 == 1\`. tipp: In der Schleife stehen drei Verzweigungen und danach **kurz warten**. Im Ja-Zweig zum Beispiel \`mbot.led(0).setColor("grün")\`, im Nein-Zweig \`mbot.led(0).setColor("aus")\`. lösung: vb-binaer-zaehlen-loesung.visustruct ::: -`,Xw=`--- +`,X9=`--- titel: Das Dreieck nach: 2 stufe: 1 @@ -44668,7 +45464,7 @@ lösung: vb-dreieck-loesung.visustruct ::: angeberwissen Die Idee, mit einem fahrenden Roboter Figuren zu zeichnen, ist über 50 Jahre alt: Ende der 1960er-Jahre entstand die Sprache **Logo**. Kinder steuerten damit eine „Schildkröte“, die mit einem Stift über das Papier fuhr. ::: -`,Kw=`--- +`,K9=`--- titel: Rückwärts einparken nach: 16 stufe: 2 @@ -44688,7 +45484,7 @@ tipp: Zwei While-Schleifen hintereinander: erst \`!mbot.getColor().equals("blau" tipp: Am Ende: \`mbot.setLed(0, 255, 0)\` und \`mbot.showText("Geparkt!")\`. lösung: vb-einparken-loesung.visustruct ::: -`,e9='---\ntitel: Hindernis ausweichen\nnach: 16\nstufe: 2\n---\n\nAuf dem Weg zum roten Feld stehen Klötze im Weg. Der mBot2 fährt in 10-cm-Schritten vor. Taucht ein Klotz auf (näher als 20 cm), warnt er mit Licht und Ton und fährt außen herum: nach rechts drehen, 30 cm vor, nach links drehen. Dann geht es weiter geradeaus.\n\n::: übung vb-hindernis\ntitel: Hindernis ausweichen\nauftrag: Der mBot2 fährt, solange er nicht auf Rot steht. Ist ein Klotz näher als 20 cm, leuchten die LEDs orange (`mbot.setLed(255, 128, 0)`), er piept und weicht aus. Danach gehen die LEDs aus. Sonst fährt er 10 cm vor. Es gibt zwei Welten.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, darin eine Verzweigung mit `mbot.getDistance() < 20`.\ntipp: Im Ja-Zweig: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. Im Nein-Zweig: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',t9=`--- +`,ew='---\ntitel: Hindernis ausweichen\nnach: 16\nstufe: 2\n---\n\nAuf dem Weg zum roten Feld stehen Klötze im Weg. Der mBot2 fährt in 10-cm-Schritten vor. Taucht ein Klotz auf (näher als 20 cm), warnt er mit Licht und Ton und fährt außen herum: nach rechts drehen, 30 cm vor, nach links drehen. Dann geht es weiter geradeaus.\n\n::: übung vb-hindernis\ntitel: Hindernis ausweichen\nauftrag: Der mBot2 fährt, solange er nicht auf Rot steht. Ist ein Klotz näher als 20 cm, leuchten die LEDs orange (`mbot.setLed(255, 128, 0)`), er piept und weicht aus. Danach gehen die LEDs aus. Sonst fährt er 10 cm vor. Es gibt zwei Welten.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, darin eine Verzweigung mit `mbot.getDistance() < 20`.\ntipp: Im Ja-Zweig: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. Im Nein-Zweig: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',tw=`--- titel: Knight Rider nach: 15 stufe: 2 @@ -44705,7 +45501,7 @@ tipp: Die erste Schleife zählt \`i\` von 0 bis 4 hoch. Die zweite startet bei 3 tipp: In beiden Schleifen: \`mbot.led(i).setColor("rot")\`, \`mbot.pause(100)\`, \`mbot.led(i).setColor("aus")\`. lösung: vb-knight-rider-loesung.visustruct ::: -`,n9=`--- +`,nw=`--- titel: Das Labyrinth nach: 5 stufe: 2 @@ -44730,7 +45526,7 @@ lösung: vb-labyrinth-loesung.visustruct ::: angeberwissen Mit der Regel „Hand immer an der Wand“ findet man aus jedem Labyrinth, dessen Wände alle zusammenhängen. Schon die Griechen erzählten von Theseus, der sich im Labyrinth des Minotaurus mit einem Wollfaden half. ::: -`,i9='---\ntitel: Linienfolger mit Stopp\nnach: 20\nstufe: 3\n---\n\nDer mBot2 folgt einer schwarzen Linie und hält am roten Feld an ihrem Ende an.\n\nDafür gibt er mit **Räder einzeln** Gas: `mbot.drive(40, 40)` lässt beide Räder gleich schnell drehen, er fährt geradeaus weiter, bis ein anderer Fahrbefehl kommt. `mbot.drive(10, 40)` macht eine Linkskurve, `mbot.drive(40, 10)` eine Rechtskurve. `mbot.stop()` hält ihn an.\n\nDie beiden mittleren Fühler des Liniensensors fragst du mit `mbot.isLineLeft()` und `mbot.isLineRight()` ab. Sehen beide die Linie, fährt er geradeaus. Sieht nur der linke sie, lenkt er nach links, sieht nur der rechte sie, nach rechts.\n\n::: übung vb-linienfolger-stopp\ntitel: Linienfolger mit Stopp\nauftrag: Solange der mBot2 nicht auf Rot steht, folgt er der Linie. Danach hält er an. In der zweiten Welt schlängelt sich die Linie.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, danach **anhalten**.\ntipp: In der Schleife: Sind `mbot.isLineLeft() && mbot.isLineRight()`, dann `mbot.drive(40, 40)`. Sonst, wenn `mbot.isLineLeft()`, dann `mbot.drive(10, 40)`. Sonst, wenn `mbot.isLineRight()`, dann `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',a9=`--- +`,iw='---\ntitel: Linienfolger mit Stopp\nnach: 20\nstufe: 3\n---\n\nDer mBot2 folgt einer schwarzen Linie und hält am roten Feld an ihrem Ende an.\n\nDafür gibt er mit **Räder einzeln** Gas: `mbot.drive(40, 40)` lässt beide Räder gleich schnell drehen, er fährt geradeaus weiter, bis ein anderer Fahrbefehl kommt. `mbot.drive(10, 40)` macht eine Linkskurve, `mbot.drive(40, 10)` eine Rechtskurve. `mbot.stop()` hält ihn an.\n\nDie beiden mittleren Fühler des Liniensensors fragst du mit `mbot.isLineLeft()` und `mbot.isLineRight()` ab. Sehen beide die Linie, fährt er geradeaus. Sieht nur der linke sie, lenkt er nach links, sieht nur der rechte sie, nach rechts.\n\n::: übung vb-linienfolger-stopp\ntitel: Linienfolger mit Stopp\nauftrag: Solange der mBot2 nicht auf Rot steht, folgt er der Linie. Danach hält er an. In der zweiten Welt schlängelt sich die Linie.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, danach **anhalten**.\ntipp: In der Schleife: Sind `mbot.isLineLeft() && mbot.isLineRight()`, dann `mbot.drive(40, 40)`. Sonst, wenn `mbot.isLineLeft()`, dann `mbot.drive(10, 40)`. Sonst, wenn `mbot.isLineRight()`, dann `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',aw=`--- titel: Morsen nach: 15 stufe: 2 @@ -44747,7 +45543,7 @@ tipp: Drei For-Schleifen hintereinander, jede läuft dreimal. Dazwischen steht j tipp: In der ersten und dritten Schleife: \`mbot.led(2).setColor("weiß")\`, \`mbot.pause(200)\`, \`mbot.led(2).setColor("aus")\`, \`mbot.pause(200)\`. In der mittleren wartet er nach dem Einschalten 600. lösung: vb-morsen-loesung.visustruct ::: -`,s9=`--- +`,sw=`--- titel: Der Nachtwächter nach: 18 stufe: 1 @@ -44765,7 +45561,7 @@ tipp: Eine While-Schleife mit \`mbot.getBrightness() < 20\`. Darin \`mbot.forwar tipp: Nach der Schleife steht \`mbot.showText("Zzz")\`. lösung: vb-nachtwaechter-loesung.visustruct ::: -`,r9=`--- +`,rw=`--- titel: Slalom nach: 2 stufe: 2 @@ -44784,7 +45580,7 @@ tipp: Überlege zuerst, wie der mBot2 oben um einen einzigen Pylon herumfährt: tipp: Unten herum geht genauso, nur mit links und rechts vertauscht. „Oben herum, dann unten herum“ wiederholt sich zweimal. lösung: vb-slalom-loesung.visustruct ::: -`,o9=`--- +`,ow=`--- titel: Die Spirale nach: 2 stufe: 2 @@ -44803,7 +45599,7 @@ tipp: Lass die Zählvariable von 1 bis 8 laufen. Wie lang ist dann die Seite in tipp: In der Klammer von **fahre vor** steht eine Rechnung mit der Zählvariable. lösung: vb-spirale-loesung.visustruct ::: -`,l9=`--- +`,lw=`--- titel: Die Treppe nach: 2 stufe: 1 @@ -44820,7 +45616,7 @@ tipp: Schreib zuerst eine Stufe auf. Dann packst du sie in eine For-Schleife, di tipp: In der Schleife: \`mbot.forward(20)\`, \`mbot.turnLeft()\`, \`mbot.forward(20)\`, \`mbot.turnRight()\`. lösung: vb-treppe-loesung.visustruct ::: -`,u9=`--- +`,uw=`--- titel: Der Tunnelsucher nach: 5 stufe: 3 @@ -44841,7 +45637,7 @@ tipp: In jedem Durchlauf fährt der mBot2 ein Feld vor und schaut sich dann nach tipp: Hier passt eine Schleife, die erst fährt und danach prüft. Sie läuft weiter, solange links **oder** rechts mindestens 20 cm frei ist: \`links >= 20 || rechts >= 20\`. lösung: vb-tunnel-loesung.visustruct ::: -`,m9=`--- +`,mw=`--- titel: Kleeblatt im Wald nach: 5 stufe: 2 @@ -44860,7 +45656,7 @@ tipp: Wie bei „Fahre bis zum Ziel“ läuft außen eine Schleife, bis der Lini tipp: Um einen Baum herum: nach links drehen, ein Feld vor, nach rechts drehen, zwei Felder vor, nach rechts drehen, ein Feld vor, nach links drehen. lösung: vb-wald-loesung.visustruct ::: -`,c9=`--- +`,cw=`--- titel: The alarm system nach: 16 stufe: 2 @@ -44879,7 +45675,7 @@ tipp: On the outside is a while loop with \`!mbot.isButtonB()\`. Inside a branch tipp: The condition of the branch: \`mbot.getDistance() < 20 || mbot.getLoudness() > 60\`. In the yes branch \`mbot.setLed(255, 0, 0)\` and \`mbot.playTone(880, 200)\`, in the no branch \`mbot.ledOff()\`. lösung: vb-alarmanlage-loesung.visustruct ::: -`,d9=`--- +`,dw=`--- titel: Maze with exits nach: 5 stufe: 3 @@ -44898,7 +45694,7 @@ tipp: In each pass the mBot2 first turns left and measures. If the way up is fre tipp: Through the gap it is two squares into the next corridor. Afterwards it should face right again. If there is a wall above, it turns back and drives one square further. lösung: vb-ausgang-loesung.visustruct ::: -`,h9=`--- +`,hw=`--- titel: Counting in binary nach: 15 stufe: 3 @@ -44923,7 +45719,7 @@ tipp: Whether LED 0 is on is given by the remainder when dividing by 2: \`number tipp: The loop contains three branches and then **wait a moment**. In the yes branch, for example, \`mbot.led(0).setColor("green")\`, in the no branch \`mbot.led(0).setColor("off")\`. lösung: vb-binaer-zaehlen-loesung.visustruct ::: -`,g9=`--- +`,gw=`--- titel: The triangle nach: 2 stufe: 1 @@ -44946,7 +45742,7 @@ lösung: vb-dreieck-loesung.visustruct ::: angeberwissen The idea of drawing shapes with a driving robot is more than 50 years old: the language **Logo** was created in the late 1960s. Children used it to steer a "turtle" that rolled across paper with a pen. ::: -`,p9=`--- +`,pw=`--- titel: Reverse parking nach: 16 stufe: 2 @@ -44966,7 +45762,7 @@ tipp: Two while loops one after the other: first \`!mbot.getColor().equals("blue tipp: At the end: \`mbot.setLed(0, 255, 0)\` and \`mbot.showText("Parked!")\`. lösung: vb-einparken-loesung.visustruct ::: -`,f9='---\ntitel: Avoid obstacles\nnach: 16\nstufe: 2\n---\n\nOn the way to the red field there are blocks in the way. The mBot2 drives forward in steps of 10 cm. If a block shows up (closer than 20 cm), it warns with light and sound and drives around it: turn right, 30 cm forward, turn left. Then it carries on straight ahead.\n\n::: übung vb-hindernis\ntitel: Avoid obstacles\nauftrag: The mBot2 drives as long as it is not on red. If a block is closer than 20 cm, the LEDs light up orange (`mbot.setLed(255, 128, 0)`), it beeps and drives around it. Then the LEDs go off. Otherwise it drives forward 10 cm. There are two worlds.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, inside a branch with `mbot.getDistance() < 20`.\ntipp: In the yes branch: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. In the no branch: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',b9=`--- +`,fw='---\ntitel: Avoid obstacles\nnach: 16\nstufe: 2\n---\n\nOn the way to the red field there are blocks in the way. The mBot2 drives forward in steps of 10 cm. If a block shows up (closer than 20 cm), it warns with light and sound and drives around it: turn right, 30 cm forward, turn left. Then it carries on straight ahead.\n\n::: übung vb-hindernis\ntitel: Avoid obstacles\nauftrag: The mBot2 drives as long as it is not on red. If a block is closer than 20 cm, the LEDs light up orange (`mbot.setLed(255, 128, 0)`), it beeps and drives around it. Then the LEDs go off. Otherwise it drives forward 10 cm. There are two worlds.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, inside a branch with `mbot.getDistance() < 20`.\ntipp: In the yes branch: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. In the no branch: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',xw=`--- titel: Knight Rider nach: 15 stufe: 2 @@ -44983,7 +45779,7 @@ tipp: The first loop counts \`i\` up from 0 to 4. The second starts at 3 and cou tipp: In both loops: \`mbot.led(i).setColor("red")\`, \`mbot.pause(100)\`, \`mbot.led(i).setColor("off")\`. lösung: vb-knight-rider-loesung.visustruct ::: -`,x9=`--- +`,bw=`--- titel: The maze nach: 5 stufe: 2 @@ -45008,7 +45804,7 @@ lösung: vb-labyrinth-loesung.visustruct ::: angeberwissen With the rule "always keep one hand on the wall" you get out of any maze whose walls are all connected. The ancient Greeks already told of Theseus, who found his way through the Minotaur's labyrinth with a ball of thread. ::: -`,v9='---\ntitel: Line follower with stop\nnach: 20\nstufe: 3\n---\n\nThe mBot2 follows a black line and stops at the red field at its end.\n\nFor this it steps on the gas with **wheels separately**: `mbot.drive(40, 40)` turns both wheels equally fast, it keeps driving straight ahead until another driving command comes. `mbot.drive(10, 40)` makes a left curve, `mbot.drive(40, 10)` a right curve. `mbot.stop()` stops it.\n\nYou ask the two middle probes of the line sensor with `mbot.isLineLeft()` and `mbot.isLineRight()`. If both see the line, it drives straight ahead. If only the left one sees it, it steers left, if only the right one sees it, right.\n\n::: übung vb-linienfolger-stopp\ntitel: Line follower with stop\nauftrag: As long as the mBot2 is not on red, it follows the line. Then it stops. In the second world the line winds about.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, after it **stop**.\ntipp: Inside the loop: if `mbot.isLineLeft() && mbot.isLineRight()`, then `mbot.drive(40, 40)`. Otherwise, if `mbot.isLineLeft()`, then `mbot.drive(10, 40)`. Otherwise, if `mbot.isLineRight()`, then `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',y9=`--- +`,vw='---\ntitel: Line follower with stop\nnach: 20\nstufe: 3\n---\n\nThe mBot2 follows a black line and stops at the red field at its end.\n\nFor this it steps on the gas with **wheels separately**: `mbot.drive(40, 40)` turns both wheels equally fast, it keeps driving straight ahead until another driving command comes. `mbot.drive(10, 40)` makes a left curve, `mbot.drive(40, 10)` a right curve. `mbot.stop()` stops it.\n\nYou ask the two middle probes of the line sensor with `mbot.isLineLeft()` and `mbot.isLineRight()`. If both see the line, it drives straight ahead. If only the left one sees it, it steers left, if only the right one sees it, right.\n\n::: übung vb-linienfolger-stopp\ntitel: Line follower with stop\nauftrag: As long as the mBot2 is not on red, it follows the line. Then it stops. In the second world the line winds about.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, after it **stop**.\ntipp: Inside the loop: if `mbot.isLineLeft() && mbot.isLineRight()`, then `mbot.drive(40, 40)`. Otherwise, if `mbot.isLineLeft()`, then `mbot.drive(10, 40)`. Otherwise, if `mbot.isLineRight()`, then `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',yw=`--- titel: Morse code nach: 15 stufe: 2 @@ -45025,7 +45821,7 @@ tipp: Three for loops one after the other, each runs three times. Between them t tipp: In the first and third loop: \`mbot.led(2).setColor("white")\`, \`mbot.pause(200)\`, \`mbot.led(2).setColor("off")\`, \`mbot.pause(200)\`. In the middle one it waits 600 after switching on. lösung: vb-morsen-loesung.visustruct ::: -`,w9=`--- +`,ww=`--- titel: The night watchman nach: 18 stufe: 1 @@ -45043,7 +45839,7 @@ tipp: A while loop with \`mbot.getBrightness() < 20\`. Inside \`mbot.forward(30) tipp: After the loop is \`mbot.showText("Zzz")\`. lösung: vb-nachtwaechter-loesung.visustruct ::: -`,z9=`--- +`,zw=`--- titel: Slalom nach: 2 stufe: 2 @@ -45062,7 +45858,7 @@ tipp: First think about how the mBot2 drives around a single cone on the top sid tipp: Around the bottom works the same way, only with left and right swapped. "Top, then bottom" repeats twice. lösung: vb-slalom-loesung.visustruct ::: -`,I9=`--- +`,Iw=`--- titel: The spiral nach: 2 stufe: 2 @@ -45081,7 +45877,7 @@ tipp: Let the counter variable run from 1 to 8. How long is the side in each pas tipp: The brackets of **drive forward** contain a calculation with the counter variable. lösung: vb-spirale-loesung.visustruct ::: -`,k9=`--- +`,kw=`--- titel: The staircase nach: 2 stufe: 1 @@ -45098,7 +45894,7 @@ tipp: Write down one step first. Then put it into a for loop that runs three tim tipp: Inside the loop: \`mbot.forward(20)\`, \`mbot.turnLeft()\`, \`mbot.forward(20)\`, \`mbot.turnRight()\`. lösung: vb-treppe-loesung.visustruct ::: -`,S9=`--- +`,Sw=`--- titel: The tunnel finder nach: 5 stufe: 3 @@ -45119,7 +45915,7 @@ tipp: In each pass the mBot2 drives one square forward and then looks left and r tipp: A loop that drives first and checks afterwards fits here. It keeps going as long as at least 20 cm are free on the left **or** on the right: \`left >= 20 || right >= 20\`. lösung: vb-tunnel-loesung.visustruct ::: -`,T9=`--- +`,Tw=`--- titel: Clover in the forest nach: 5 stufe: 2 @@ -45138,7 +45934,7 @@ tipp: As in "Drive to the goal", a loop on the outside runs until the line senso tipp: Around a tree: turn left, one square forward, turn right, two squares forward, turn right, one square forward, turn left. lösung: vb-wald-loesung.visustruct ::: -`,_9=` +`,_w=` 111;117;116;112;117;116;58;32;34;87;105;108;108;107;111;109;109;101;110;34; @@ -45150,7 +45946,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;117;102;32;87;105;101;100;101;114;115;101;104;101;110;34; -`,C9=` +`,jw=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -45169,7 +45965,7 @@ lösung: vb-wald-loesung.visustruct -`,A9=` +`,Cw=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;98;97;108;108;119;117;114;102;46;99;115;118;34;41;41; @@ -45250,7 +46046,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,j9=` +`,Aw=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;98;97;108;108;119;117;114;102;46;99;115;118;34;41;41; @@ -45259,7 +46055,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,O9=` +`,Pw=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -45324,7 +46120,7 @@ lösung: vb-wald-loesung.visustruct -`,P9=` +`,Ow=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;71;97;110;122;101;32;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -45350,7 +46146,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;101;114; -`,M9=` +`,Dw=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -45404,13 +46200,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;101;104;101;105;109; -`,D9=` +`,Mw=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,Z9=` +`,Bw=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;101;108;99;104;101;115;32;87;111;114;116;32;40;110;117;114;32;71;114;111;223;98;117;99;104;115;116;97;98;101;110;41;63;34; @@ -45441,7 +46237,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;101;104;101;105;109; -`,B9=` +`,Zw=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;103;101;104;101;105;109;32;34;87;101;108;99;104;101;114;32;71;101;104;101;105;109;116;101;120;116;63;34; @@ -45472,7 +46268,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;107;108;97;114;116;101;120;116; -`,L9=` +`,Lw=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -45508,7 +46304,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;99;104;114;105;116;116;101;58;32;34;32;43;32;115;99;104;114;105;116;116;101; -`,W9=` +`,Ww=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;78;111;116;101;110;63;34; @@ -45536,7 +46332,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;99;104;110;105;116;116; -`,E9=` +`,Ew=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;90;97;104;108;101;110;63;34; @@ -45573,7 +46369,7 @@ lösung: vb-wald-loesung.visustruct -`,N9=` +`,Nw=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -45592,7 +46388,7 @@ lösung: vb-wald-loesung.visustruct -`,J9=` +`,Fw=` 99;111;110;115;116;32;100;111;117;98;108;101;32;77;87;83;84;32;61;32;48;46;49;57; @@ -45613,7 +46409,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;114;117;116;116;111;112;114;101;105;115; -`,F9=` +`,Jw=` 105;110;116;32;112;105;110;32;61;32;48; @@ -45649,7 +46445,7 @@ lösung: vb-wald-loesung.visustruct -`,R9=` +`,Rw=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -45685,7 +46481,7 @@ lösung: vb-wald-loesung.visustruct -`,G9=` +`,Gw=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;49;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -45729,7 +46525,7 @@ lösung: vb-wald-loesung.visustruct -`,H9=` +`,Hw=` 98;111;111;108;101;97;110;91;93;91;93;32;109;101;101;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -45783,7 +46579,7 @@ lösung: vb-wald-loesung.visustruct -`,V9=` +`,Vw=` 98;111;111;108;101;97;110;91;93;91;93;32;109;101;101;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -45810,7 +46606,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;115;112;97;108;116;101;110;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,q9=` +`,qw=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;109;101;114;32;34;87;101;108;99;104;101;115;32;71;101;114;105;99;104;116;63;32;40;49;44;32;50;32;111;100;101;114;32;51;41;34; @@ -45839,7 +46635,7 @@ lösung: vb-wald-loesung.visustruct -`,Q9=` +`,Qw=` 105;110;116;32;122;97;104;108;49;32;61;32;52; @@ -45854,7 +46650,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,U9=` +`,Uw=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -45876,7 +46672,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;97;102;101;108;100;105;101;110;115;116;58;32;34;32;43;32;110;97;109;101;110;91;110;117;109;109;101;114;32;45;32;49;93; -`,$9=` +`,$w=` 105;110;116;32;122;97;104;108;32;61;32;52; @@ -45888,7 +46684,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;100;111;112;112;101;108;116;101;32;90;97;104;108;58;32;34;32;43;32;122;97;104;108; -`,Y9=` +`,Yw=` -1; @@ -45935,7 +46731,7 @@ lösung: vb-wald-loesung.visustruct -`,X9=` +`,Xw=` @@ -45972,7 +46768,7 @@ lösung: vb-wald-loesung.visustruct -`,K9=` +`,Kw=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;107;97;98;101;108;110;46;99;115;118;34;41;41; @@ -46509,7 +47305,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;101;112;115;58;32;34;32;43;32;115;116;101;112;115; -`,b5=` +`,x5=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;103;114;97;100;101;115;63;34; @@ -46537,7 +47333,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;118;101;114;97;103;101; -`,x5=` +`,b5=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;110;117;109;98;101;114;115;63;34; @@ -46855,7 +47651,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,C5=` +`,j5=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -46877,7 +47673,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;111;97;114;100;32;100;117;116;121;58;32;34;32;43;32;110;97;109;101;115;91;112;105;99;107;32;45;32;49;93; -`,A5=` +`,C5=` 105;110;116;32;110;117;109;98;101;114;32;61;32;52; @@ -46889,7 +47685,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;111;117;98;108;101;100;32;110;117;109;98;101;114;58;32;34;32;43;32;110;117;109;98;101;114; -`,j5=` +`,A5=` -1; @@ -46936,7 +47732,7 @@ lösung: vb-wald-loesung.visustruct -`,O5=` +`,P5=` @@ -46973,7 +47769,7 @@ lösung: vb-wald-loesung.visustruct -`,P5=` +`,O5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;119;111;114;100;115;46;99;115;118;34;41;41; @@ -47033,7 +47829,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;105;103;104;116;32;43;32;34;32;111;102;32;34;32;43;32;99;111;117;110;116;32;43;32;34;32;114;105;103;104;116;34; -`,M5=` +`,D5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;119;111;114;100;115;46;99;115;118;34;41;41; @@ -47042,7 +47838,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,D5=` +`,M5=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -47061,7 +47857,7 @@ lösung: vb-wald-loesung.visustruct -`,Z5=` +`,B5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -47084,7 +47880,7 @@ lösung: vb-wald-loesung.visustruct 114;101;97;100;101;114;46;99;108;111;115;101;40;41; -`,B5=` +`,Z5=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -47220,7 +48016,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;114;101;101;58;32;34;32;43;32;102;114;101;101; -`,J5=` +`,F5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -47235,7 +48031,7 @@ lösung: vb-wald-loesung.visustruct 115;101;97;116;115;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,F5=` +`,J5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -47360,6 +48156,36 @@ lösung: vb-wald-loesung.visustruct `,V5=` + + + 105;110;116;32;110;117;109;98;101;114;32;61;32;52; + + + 105;110;116;32;78;117;109;98;101;114;32;61;32;54; + + + 105;110;116;32;114;101;115;117;108;116;32;61;32;110;117;109;98;101;114;32;42;32;78;117;109;98;101;114; + + + 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;58;32;34;32;43;32;114;101;115;117;108;116; + + +`,q5=` + + + 105;110;116;32;110;117;109;98;101;114;32;61;32;52; + + + 105;110;116;32;78;117;109;98;101;114;32;61;32;54; + + + 105;110;116;32;114;101;115;117;108;116;32;61;32;110;117;109;98;101;114;32;42;32;78;85;77;66;69;82; + + + 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;58;32;34;32;43;32;114;101;115;117;108;116; + + +`,Q5=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -47374,7 +48200,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,q5=` +`,U5=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -47389,7 +48215,31 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,Q5=` +`,$5=` + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 105;110;116;32;97;103;101;32;61;32;55; + + + 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;105;115;32;34;32;43;32;97;103;101;32;43;32;34;32;121;101;97;114;115;32;111;108;100;46;34; + + +`,Y5=` + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 105;110;116;32;97;103;101;32;61;32;55; + + + 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;97;109;101;32;43;32;34;32;105;115;32;34;32;43;32;65;103;101;32;43;32;34;32;121;101;97;114;115;32;111;108;100;46;34;41; + + +`,X5=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -47407,7 +48257,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;109;34; -`,U5=` +`,K5=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -47422,7 +48272,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,$5=` +`,ez=` 105;110;116;32;110;117;109;98;101;114;32;61;32;50; @@ -47437,7 +48287,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,Y5=` +`,tz=` 111;117;116;112;117;116;58;32;110;117;109;98;101;114; @@ -47452,7 +48302,7 @@ lösung: vb-wald-loesung.visustruct 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;43;32;51; -`,X5=` +`,nz=` 83;116;114;105;110;103;32;108;101;102;116;32;61;32;34;106;117;105;99;101;34; @@ -47476,7 +48326,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;105;103;104;116;58;32;34;32;43;32;114;105;103;104;116; -`,K5=` +`,iz=` 83;116;114;105;110;103;32;108;101;102;116;32;61;32;34;106;117;105;99;101;34; @@ -47491,7 +48341,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;105;103;104;116;58;32;34;32;43;32;114;105;103;104;116; -`,ez=` +`,az=` 105;110;116;32;97;32;61;32;53; @@ -47515,7 +48365,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,tz=` +`,sz=` 105;110;116;32;97;103;101;32;61;32;49;52; @@ -47533,7 +48383,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;109;34; -`,nz=` +`,rz=` 105;110;116;32;109;105;110;117;116;101;115;32;61;32;49;51;53; @@ -47548,7 +48398,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;104;111;117;114;115;32;43;32;34;32;104;111;117;114;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;109;105;110;117;116;101;115;34; -`,iz=` +`,oz=` 105;110;116;32;99;111;117;110;116;32;61;32;51; @@ -47563,7 +48413,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108;80;114;105;99;101;32;43;32;34;32;101;117;114;111;115;34; -`,az=` +`,lz=` 105;110;116;32;99;114;101;100;105;116;32;61;32;50;48; @@ -47578,7 +48428,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;101;102;116;58;32;34;32;43;32;99;114;101;100;105;116; -`,sz=` +`,uz=` 105;110;116;32;99;114;101;100;105;116;32;61;32;50;48; @@ -47593,7 +48443,7 @@ lösung: vb-wald-loesung.visustruct 99;114;101;100;105;116;32;61;32;99;114;101;100;105;116;32;45;32;112;114;105;99;101; -`,rz=` +`,mz=` 105;110;116;32;112;114;105;99;101;32;61;32;57; @@ -47608,7 +48458,37 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,oz=` +`,cz=` + + + 105;110;116;32;115;108;105;99;101;115;32;61;32;56; + + + 105;110;116;32;112;101;111;112;108;101;32;61;32;52; + + + 105;110;116;32;112;101;114;80;101;114;115;111;110;32;61;32;115;108;105;99;101;115;32;47;32;112;101;111;112;108;101; + + + 111;117;116;112;117;116;58;32;34;69;118;101;114;121;111;110;101;32;103;101;116;115;32;34;32;43;32;112;101;114;80;101;114;115;111;110;32;43;32;34;32;115;108;105;99;101;115;46;34; + + +`,dz=` + + + 105;110;116;32;115;108;105;99;101;115;32;61;32;56; + + + 105;110;116;32;112;101;111;112;108;101;32;61;32;52; + + + 105;110;116;32;112;101;114;80;101;114;115;111;110;32;61;32;115;108;105;99;101;115;32;47;32;112;101;111;112;108;101; + + + 111;117;116;112;117;116;58;32;34;69;118;101;114;121;111;110;101;32;103;101;116;115;32;34;32;43;32;112;101;114;112;101;114;115;111;110;32;43;32;34;32;115;108;105;99;101;115;46;34; + + +`,hz=` 105;110;116;32;108;101;110;103;116;104;32;61;32;55; @@ -47629,7 +48509,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;101;114;105;109;101;116;101;114;58;32;34;32;43;32;112;101;114;105;109;101;116;101;114; -`,lz=` +`,gz=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -47644,7 +48524,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;117;116;101;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;115;101;99;111;110;100;115;34; -`,uz=` +`,pz=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -47653,7 +48533,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;117;116;101;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;115;101;99;111;110;100;115;34; -`,mz=` +`,fz=` 105;110;116;32;108;101;110;103;116;104;32;61;32;53; @@ -47668,7 +48548,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;114;101;97; -`,cz=` +`,xz=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;97;109;101;32;34;87;104;97;116;32;105;115;32;121;111;117;114;32;110;97;109;101;63;34; @@ -47677,7 +48557,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;34;32;43;32;110;97;109;101;32;43;32;34;33;34; -`,dz=` +`,bz=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -47692,7 +48572,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,hz=` +`,vz=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -47704,7 +48584,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,gz=` +`,yz=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -47716,7 +48596,25 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;97;32;43;32;98; -`,pz=` +`,wz=` + + + 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; + + + 111;117;116;112;117;116;58;32;34;78;101;120;116;32;121;101;97;114;32;121;111;117;32;119;105;108;108;32;98;101;32;34;32;43;32;40;97;103;101;32;43;32;49;41; + + +`,zz=` + + + 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; + + + 111;117;116;112;117;116;58;32;34;78;101;120;116;32;121;101;97;114;32;121;111;117;32;119;105;108;108;32;98;101;32;34;32;43;32;40;65;103;101;32;43;32;49;41; + + +`,Iz=` 105;110;112;117;116;58;32;105;110;116;32;121;101;97;114;115;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -47728,7 +48626,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;97;116;32;105;115;32;97;98;111;117;116;32;34;32;43;32;100;97;121;115;32;43;32;34;32;100;97;121;115;46;34; -`,fz=` +`,kz=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -47743,7 +48641,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;101;97;110;58;32;34;32;43;32;109;101;97;110; -`,bz=` +`,Sz=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -47764,7 +48662,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;99;116;58;32;34;32;43;32;112;114;111;100;117;99;116; -`,xz=` +`,Tz=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -47783,7 +48681,7 @@ lösung: vb-wald-loesung.visustruct -`,vz=` +`,_z=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;78;117;109;98;101;114;63;34; @@ -47805,7 +48703,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,yz=` +`,jz=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;78;117;109;98;101;114;63;34; @@ -47824,7 +48722,7 @@ lösung: vb-wald-loesung.visustruct -`,wz=` +`,Cz=` 105;110;116;32;112;111;105;110;116;115;32;61;32;48; @@ -47842,7 +48740,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,zz=` +`,Az=` 105;110;116;32;112;111;105;110;116;115;32;61;32;48; @@ -47860,7 +48758,37 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,Iz=` +`,Pz=` + + + 105;110;116;32;112;111;105;110;116;115;32;61;32;49;48; + + + 105;110;116;32;98;111;110;117;115;32;61;32;53; + + + 112;111;105;110;116;115;32;61;32;112;111;105;110;116;115;32;43;32;98;111;110;117;115; + + + 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; + + +`,Oz=` + + + 105;110;116;32;112;111;105;110;116;115;32;61;32;49;48; + + + 112;111;105;110;116;115;32;61;32;112;111;105;110;116;115;32;43;32;98;111;110;117;115; + + + 105;110;116;32;98;111;110;117;115;32;61;32;53; + + + 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; + + +`,Dz=` 105;110;116;32;112;114;105;99;101;32;61;32;56; @@ -47878,7 +48806,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,kz=` +`,Mz=` 105;110;116;32;112;114;105;99;101;32;61;32;56; @@ -47896,7 +48824,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,Sz=` +`,Bz=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -47918,7 +48846,7 @@ lösung: vb-wald-loesung.visustruct -`,Tz=` +`,Zz=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;105;99;101;32;34;80;114;105;99;101;32;105;110;32;101;117;114;111;115;63;34; @@ -47940,7 +48868,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;32;112;97;121;58;32;34;32;43;32;112;114;105;99;101;32;43;32;34;32;101;117;114;111;115;34; -`,_z=` +`,Lz=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;71;114;97;100;101;63;34; @@ -47959,7 +48887,7 @@ lösung: vb-wald-loesung.visustruct -`,Cz=` +`,Wz=` 105;110;112;117;116;58;32;105;110;116;32;112;111;105;110;116;115;32;34;72;111;119;32;109;97;110;121;32;112;111;105;110;116;115;63;34; @@ -47978,7 +48906,7 @@ lösung: vb-wald-loesung.visustruct -`,Az=` +`,Ez=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -47997,7 +48925,7 @@ lösung: vb-wald-loesung.visustruct -`,jz=` +`,Nz=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -48016,7 +48944,45 @@ lösung: vb-wald-loesung.visustruct -`,Oz=` +`,Fz=` + + + 105;110;116;32;97;103;101;32;61;32;49;53; + + + 97;103;101;32;62;61;32;49;54; + + + 111;117;116;112;117;116;58;32;34;69;110;116;114;121;34; + + + + + 111;117;116;112;117;116;58;32;34;78;111;32;101;110;116;114;121;34; + + + + +`,Jz=` + + + 105;110;116;32;97;103;101;32;61;32;49;53; + + + 65;103;101;32;62;61;32;49;54; + + + 111;117;116;112;117;116;58;32;34;69;110;116;114;121;34; + + + + + 111;117;116;112;117;116;58;32;34;78;111;32;101;110;116;114;121;34; + + + + +`,Rz=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -48035,7 +49001,7 @@ lösung: vb-wald-loesung.visustruct -`,Pz=` +`,Gz=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;71;114;97;100;101;63;34; @@ -48054,7 +49020,7 @@ lösung: vb-wald-loesung.visustruct -`,Mz=` +`,Hz=` 105;110;112;117;116;58;32;105;110;116;32;121;101;97;114;32;34;89;101;97;114;63;34; @@ -48073,7 +49039,7 @@ lösung: vb-wald-loesung.visustruct -`,Dz=` +`,Vz=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;68;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -48092,7 +49058,7 @@ lösung: vb-wald-loesung.visustruct -`,Zz=` +`,qz=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;99;111;108;111;114;32;34;87;104;97;116;32;99;111;108;111;114;32;105;115;32;116;104;101;32;116;114;97;102;102;105;99;32;108;105;103;104;116;63;34; @@ -48121,7 +49087,7 @@ lösung: vb-wald-loesung.visustruct -`,Bz=` +`,Qz=` 105;110;112;117;116;58;32;105;110;116;32;99;104;111;105;99;101;32;34;49;32;119;97;116;101;114;44;32;50;32;106;117;105;99;101;44;32;51;32;99;111;99;111;97;34; @@ -48150,7 +49116,7 @@ lösung: vb-wald-loesung.visustruct -`,Lz=` +`,Uz=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;87;104;105;99;104;32;100;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -48169,7 +49135,7 @@ lösung: vb-wald-loesung.visustruct -`,Wz=` +`,$z=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;87;104;105;99;104;32;100;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -48188,7 +49154,45 @@ lösung: vb-wald-loesung.visustruct -`,Ez=` +`,Yz=` + + + 105;110;116;32;100;97;121;32;61;32;55; + + + 100;97;121;32;61;61;32;54;32;124;124;32;100;97;121;32;61;61;32;55; + + + 111;117;116;112;117;116;58;32;34;110;111;32;115;99;104;111;111;108;34; + + + + + 111;117;116;112;117;116;58;32;34;115;99;104;111;111;108;34; + + + + +`,Xz=` + + + 105;110;116;32;100;97;121;32;61;32;55; + + + 100;97;121;32;61;61;32;54;32;124;124;32;68;97;121;32;61;61;32;55; + + + 111;117;116;112;117;116;58;32;34;110;111;32;115;99;104;111;111;108;34; + + + + + 111;117;116;112;117;116;58;32;34;115;99;104;111;111;108;34; + + + + +`,Kz=` 105;110;112;117;116;58;32;105;110;116;32;104;111;117;114;32;34;87;104;97;116;32;116;105;109;101;32;105;115;32;105;116;32;40;106;117;115;116;32;116;104;101;32;104;111;117;114;41;63;34; @@ -48207,7 +49211,7 @@ lösung: vb-wald-loesung.visustruct -`,Nz=` +`,e6=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;87;104;105;99;104;32;103;114;97;100;101;63;34; @@ -48251,7 +49255,7 @@ lösung: vb-wald-loesung.visustruct -`,Jz=` +`,t6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -48298,7 +49302,7 @@ lösung: vb-wald-loesung.visustruct -`,Fz=` +`,n6=` 105;110;112;117;116;58;32;105;110;116;32;99;104;111;105;99;101;32;34;49;32;119;97;116;101;114;44;32;50;32;106;117;105;99;101;44;32;51;32;99;111;99;111;97;34; @@ -48337,7 +49341,7 @@ lösung: vb-wald-loesung.visustruct -`,Rz=` +`,i6=` 80;117;116;32;97;32;99;117;112;32;111;110;32;116;104;101;32;116;97;98;108;101; @@ -48367,7 +49371,7 @@ lösung: vb-wald-loesung.visustruct 68;114;105;110;107;32;116;104;101;32;116;101;97; -`,Gz=` +`,a6=` 71;101;116;32;117;112; @@ -48382,7 +49386,7 @@ lösung: vb-wald-loesung.visustruct 72;97;118;101;32;98;114;101;97;107;102;97;115;116; -`,Hz=` +`,s6=` 70;105;108;108;32;116;104;101;32;107;101;116;116;108;101;32;119;105;116;104;32;119;97;116;101;114; @@ -48403,7 +49407,7 @@ lösung: vb-wald-loesung.visustruct 84;97;107;101;32;111;117;116;32;116;104;101;32;116;101;97;32;98;97;103; -`,Vz=` +`,r6=` 73;115;32;105;116;32;114;97;105;110;105;110;103;63; @@ -48422,7 +49426,7 @@ lösung: vb-wald-loesung.visustruct 76;101;97;118;101; -`,qz=` +`,o6=` 80;108;97;116;101;32;110;111;116;32;101;109;112;116;121; @@ -48436,7 +49440,7 @@ lösung: vb-wald-loesung.visustruct 67;108;101;97;114;32;116;104;101;32;112;108;97;116;101; -`,Qz=` +`,l6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;67;111;117;110;116;32;117;112;32;116;111;63;34; @@ -48456,7 +49460,7 @@ lösung: vb-wald-loesung.visustruct -`,Uz=` +`,u6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -48476,7 +49480,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,$z=` +`,m6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -48493,7 +49497,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,Yz=` +`,c6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;99;116;111;114;105;97;108;32;111;102;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -48519,7 +49523,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;99;116;111;114;105;97;108; -`,Xz=` +`,d6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -48554,7 +49558,7 @@ lösung: vb-wald-loesung.visustruct -`,Kz=` +`,h6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -48589,7 +49593,55 @@ lösung: vb-wald-loesung.visustruct -`,e6=` +`,g6=` + + + 105;110;116;32;103;114;97;100;101;32;61;32;50; + + + 103;114;97;100;101; + + + 111;117;116;112;117;116;58;32;34;118;101;114;121;32;103;111;111;100;34; + + + + + 111;117;116;112;117;116;58;32;34;103;111;111;100;34; + + + + + 111;117;116;112;117;116;58;32;34;107;101;101;112;32;112;114;97;99;116;105;115;105;110;103;34; + + + + +`,p6=` + + + 105;110;116;32;103;114;97;100;101;32;61;32;50; + + + 71;114;97;100;101; + + + 111;117;116;112;117;116;58;32;34;118;101;114;121;32;103;111;111;100;34; + + + + + 111;117;116;112;117;116;58;32;34;103;111;111;100;34; + + + + + 111;117;116;112;117;116;58;32;34;107;101;101;112;32;112;114;97;99;116;105;115;105;110;103;34; + + + + +`,f6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -48618,7 +49670,7 @@ lösung: vb-wald-loesung.visustruct -`,t6=` +`,x6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;34; @@ -48641,7 +49693,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;116;101;112;115; -`,n6=` +`,b6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;48; @@ -48658,7 +49710,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;97;110;107;32;121;111;117;33;34; -`,i6=` +`,v6=` 105;110;116;32;105;32;61;32;49;48; @@ -48675,7 +49727,7 @@ lösung: vb-wald-loesung.visustruct -`,a6=` +`,y6=` 105;110;112;117;116;58;32;105;110;116;32;103;111;97;108;32;34;83;97;118;105;110;103;115;32;103;111;97;108;63;34; @@ -48701,7 +49753,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;101;101;107;115;58;32;34;32;43;32;119;101;101;107;115; -`,s6=` +`,w6=` 105;110;112;117;116;58;32;105;110;116;32;103;111;97;108;32;34;83;97;118;105;110;103;115;32;103;111;97;108;63;34; @@ -48727,7 +49779,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;101;101;107;115;58;32;34;32;43;32;119;101;101;107;115; -`,r6=` +`,z6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;101;114;101;63;34; @@ -48747,7 +49799,47 @@ lösung: vb-wald-loesung.visustruct -`,o6=` +`,I6=` + + + 105;110;116;32;110;117;109;98;101;114;32;61;32;51; + + + 110;117;109;98;101;114;32;62;32;48; + + + 111;117;116;112;117;116;58;32;110;117;109;98;101;114; + + + 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;45;32;49; + + + + + 111;117;116;112;117;116;58;32;34;71;111;33;34; + + +`,k6=` + + + 105;110;116;32;110;117;109;98;101;114;32;61;32;51; + + + 110;117;109;98;101;114;32;62;32;48; + + + 111;117;116;112;117;116;58;32;78;117;109;98;101;114; + + + 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;45;32;49; + + + + + 111;117;116;112;117;116;58;32;34;71;111;33;34; + + +`,S6=` 105;110;116;32;103;114;97;100;101;32;61;32;48; @@ -48764,7 +49856,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;89;111;117;114;32;103;114;97;100;101;58;32;34;32;43;32;103;114;97;100;101; -`,l6=` +`,T6=` 105;110;116;32;115;117;109;32;61;32;48; @@ -48787,7 +49879,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,u6=` +`,_6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;83;116;97;114;116;32;110;117;109;98;101;114;34; @@ -48806,7 +49898,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,m6=` +`,j6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -48825,7 +49917,7 @@ lösung: vb-wald-loesung.visustruct -`,c6=` +`,C6=` 105;110;116;32;105;32;61;32;49; @@ -48838,7 +49930,7 @@ lösung: vb-wald-loesung.visustruct -`,d6=` +`,A6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -48855,7 +49947,7 @@ lösung: vb-wald-loesung.visustruct -`,h6=` +`,P6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -48872,7 +49964,47 @@ lösung: vb-wald-loesung.visustruct -`,g6=` +`,O6=` + + + 105;110;116;32;110;117;109;98;101;114;32;61;32;49; + + + 105;110;116;32;108;105;109;105;116;32;61;32;50;48; + + + 110;117;109;98;101;114;32;60;32;108;105;109;105;116; + + + 111;117;116;112;117;116;58;32;110;117;109;98;101;114; + + + 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;42;32;50; + + + + +`,D6=` + + + 105;110;116;32;110;117;109;98;101;114;32;61;32;49; + + + 105;110;116;32;108;105;109;105;116;32;61;32;50;48; + + + 110;117;109;98;101;114;32;60;32;76;105;109;105;116; + + + 111;117;116;112;117;116;58;32;110;117;109;98;101;114; + + + 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;42;32;50; + + + + +`,M6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -48889,7 +50021,7 @@ lösung: vb-wald-loesung.visustruct -`,p6=` +`,B6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -48911,7 +50043,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,f6=` +`,Z6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;72;111;119;32;109;97;110;121;32;108;105;110;101;115;63;34; @@ -48940,7 +50072,7 @@ lösung: vb-wald-loesung.visustruct -`,b6=` +`,L6=` 105;110;116;32;99;111;117;110;116;32;61;32;48; @@ -48972,7 +50104,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116; -`,x6=` +`,W6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -49004,7 +50136,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116; -`,v6=` +`,E6=` 105;110;112;117;116;58;32;105;110;116;32;114;111;119;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -49020,7 +50152,7 @@ lösung: vb-wald-loesung.visustruct -`,y6=` +`,N6=` 105;110;112;117;116;58;32;105;110;116;32;114;111;119;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -49036,7 +50168,42 @@ lösung: vb-wald-loesung.visustruct -`,w6=` +`,F6=` + + + 105;110;116;32;104;101;105;103;104;116;32;61;32;48; + + + 105;110;116;32;115;116;101;112;32;61;32;49; + 115;116;101;112;32;60;61;32;53; + 115;116;101;112;43;43; + + + 104;101;105;103;104;116;32;61;32;104;101;105;103;104;116;32;43;32;50;48; + + + + + 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;99;109;34; + + +`,J6=` + + + 105;110;116;32;115;116;101;112;32;61;32;49; + 115;116;101;112;32;60;61;32;53; + 115;116;101;112;43;43; + + + 104;101;105;103;104;116;32;61;32;104;101;105;103;104;116;32;43;32;50;48; + + + + + 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;99;109;34; + + +`,R6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -49052,7 +50219,7 @@ lösung: vb-wald-loesung.visustruct -`,z6=` +`,G6=` 105;110;112;117;116;58;32;105;110;116;32;119;105;100;116;104;32;34;87;105;100;116;104;34; @@ -49084,7 +50251,7 @@ lösung: vb-wald-loesung.visustruct -`,I6=` +`,H6=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -49100,7 +50267,7 @@ lösung: vb-wald-loesung.visustruct -`,k6=` +`,V6=` 105;110;116;91;93;32;118;97;108;117;101;115;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -49115,7 +50282,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;97;108;117;101;115;46;108;101;110;103;116;104; -`,S6=` +`,q6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -49147,7 +50314,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;99;111;117;110;116; -`,T6=` +`,Q6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -49179,7 +50346,53 @@ lösung: vb-wald-loesung.visustruct -`,_6=` +`,U6=` + + + 105;110;116;32;105;32;61;32;49; + 105;32;60;61;32;49;48; + 105;43;43; + + + 105;32;37;32;50;32;61;61;32;48; + + + 111;117;116;112;117;116;58;32;105; + + + + + 248; + + + + + + +`,$6=` + + + 105;110;116;32;105;32;61;32;49; + 105;32;60;61;32;49;48; + 105;43;43; + + + 105;32;37;32;50;32;61;61;32;48; + + + 111;117;116;112;117;116;58;32;73; + + + + + 248; + + + + + + +`,Y6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;72;111;119;32;109;97;110;121;32;115;116;101;112;115;63;34; @@ -49208,7 +50421,7 @@ lösung: vb-wald-loesung.visustruct -`,C6=` +`,X6=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -49227,7 +50440,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;114;115;116;32;110;97;109;101;58;32;34;32;43;32;110;97;109;101;115;91;48;93; -`,A6=` +`,K6=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -49253,7 +50466,7 @@ lösung: vb-wald-loesung.visustruct -`,j6=` +`,eI=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -49304,7 +50517,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,O6=` +`,tI=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -49345,7 +50558,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,P6=` +`,nI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -49368,7 +50581,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,M6=` +`,iI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -49398,7 +50611,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,D6=` +`,aI=` 105;110;112;117;116;58;32;105;110;116;32;108;101;110;103;116;104;32;34;76;101;110;103;116;104;63;34; @@ -49413,13 +50626,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;114;101;97;58;32;34;32;43;32;102; -`,Z6=` +`,sI=` 114;101;116;117;114;110;32;97;32;42;32;98; -`,B6=` +`,rI=` 115;104;111;119;71;114;101;101;116;105;110;103;40;41; @@ -49431,7 +50644,7 @@ lösung: vb-wald-loesung.visustruct 115;104;111;119;82;101;115;117;108;116;40;41; -`,L6=` +`,oI=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -49463,7 +50676,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;105;103;104;101;115;116;32;116;101;109;112;101;114;97;116;117;114;101;58;32;34;32;43;32;109;97;120; -`,W6=` +`,lI=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -49495,7 +50708,51 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;105;103;104;101;115;116;32;116;101;109;112;101;114;97;116;117;114;101;58;32;34;32;43;32;109;97;120; -`,E6=` +`,uI=` + + + 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; + + + 105;110;116;32;115;117;109;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;112;111;105;110;116;115;46;108;101;110;103;116;104; + 105;43;43; + + + 115;117;109;32;61;32;115;117;109;32;43;32;112;111;105;110;116;115;91;105;93; + + + + + 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; + + +`,mI=` + + + 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; + + + 105;110;116;32;115;117;109;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;112;111;105;110;116;115;46;76;101;110;103;116;104; + 105;43;43; + + + 115;117;109;32;61;32;115;117;109;32;43;32;112;111;105;110;116;115;91;105;93; + + + + + 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; + + +`,cI=` 105;110;116;91;93;32;103;114;97;100;101;115;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -49517,7 +50774,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,N6=` +`,dI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -49529,7 +50786,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;101;32;115;113;117;97;114;101;32;105;115;32;34;32;43;32;113; -`,J6=` +`,hI=` 105;110;116;32;114;101;115;117;108;116;32;61;32;120;32;42;32;120; @@ -49538,7 +50795,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;114;101;115;117;108;116; -`,F6=` +`,gI=` 115;104;111;119;84;105;116;108;101;40;41; @@ -49550,7 +50807,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;34;32;43;32;110;97;109;101; -`,R6=` +`,pI=` 111;117;116;112;117;116;58;32;34;87;101;108;99;111;109;101;32;116;111;32;116;104;101;32;113;117;105;122;33;34; @@ -49559,7 +50816,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;89;111;117;32;103;101;116;32;116;104;114;101;101;32;113;117;101;115;116;105;111;110;115;46;34; -`,G6=` +`,fI=` 115;104;111;119;83;117;109;40;51;44;32;52;41; @@ -49571,7 +50828,7 @@ lösung: vb-wald-loesung.visustruct 115;104;111;119;83;117;109;40;120;44;32;120;32;43;32;49;41; -`,H6=` +`,xI=` 105;110;116;32;115;117;109;32;61;32;97;32;43;32;98; @@ -49580,7 +50837,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;117;109; -`,V6=` +`,bI=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;32;118;97;108;117;101;34; @@ -49603,7 +50860,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,q6=` +`,vI=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;32;118;97;108;117;101;34; @@ -49626,7 +50883,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;34; -`,Q6=` +`,yI=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -49648,7 +50905,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;58;32;34;32;43;32;116;111;116;97;108; -`,U6=` +`,wI=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -49670,7 +50927,25 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;58;32;34;32;43;32;116;111;116;97;108; -`,$6=` +`,zI=` + + + 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; + + + 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;44;32;114;111;117;110;100;32;49;58;32;34;32;43;32;112;111;105;110;116;115;91;49;93;91;48;93; + + +`,II=` + + + 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; + + + 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;44;32;114;111;117;110;100;32;49;58;32;34;32;43;32;80;111;105;110;116;115;91;49;93;91;48;93; + + +`,kI=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -49699,7 +50974,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,Y6=` +`,SI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -49722,7 +50997,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,X6=` +`,TI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -49744,7 +51019,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,K6=` +`,_I=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -49766,7 +51041,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,eI=` +`,jI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -49798,7 +51073,7 @@ lösung: vb-wald-loesung.visustruct -`,tI=` +`,CI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;69;110;116;101;114;32;97;32;110;117;109;98;101;114;34; @@ -49820,7 +51095,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;99;116;111;114;105;97;108; -`,nI=` +`,AI=` 83;116;114;105;110;103;32;108;101;116;116;101;114;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;101;116;116;101;114;46;116;120;116;34;41;41; @@ -49852,13 +51127,13 @@ lösung: vb-wald-loesung.visustruct -`,iI=` +`,PI=` 83;116;114;105;110;103;32;108;101;116;116;101;114;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;101;116;116;101;114;46;116;120;116;34;41;41; -`,aI=` +`,OI=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;32;34;70;105;114;115;116;32;110;97;109;101;63;34; @@ -49870,7 +51145,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,sI=` +`,DI=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;32;34;70;105;114;115;116;32;110;97;109;101;63;34; @@ -49882,7 +51157,25 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,rI=` +`,MI=` + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;104;97;115;32;34;32;43;32;110;97;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;116;101;114;115;34; + + +`,BI=` + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;104;97;115;32;34;32;43;32;110;97;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;116;101;114;115;34; + + +`,ZI=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;105;110;112;117;116;32;34;80;97;115;115;119;111;114;100;63;34; @@ -49901,7 +51194,7 @@ lösung: vb-wald-loesung.visustruct -`,oI=` +`,LI=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -49930,7 +51223,7 @@ lösung: vb-wald-loesung.visustruct -`,lI=` +`,WI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;118;97;108;117;101;63;34; @@ -49950,7 +51243,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;100;34; -`,uI=` +`,EI=` 105;110;116;32;116;114;105;101;115;32;61;32;48; @@ -49983,7 +51276,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;114;105;101;115;58;32;34;32;43;32;116;114;105;101;115; -`,mI=` +`,NI=` 105;110;116;32;116;114;105;101;115;32;61;32;48; @@ -50016,7 +51309,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;114;105;101;115;58;32;34;32;43;32;116;114;105;101;115; -`,cI=` +`,FI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -50058,7 +51351,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;115;117;109; -`,dI=` +`,JI=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -50080,7 +51373,7 @@ lösung: vb-wald-loesung.visustruct -`,hI=` +`,RI=` 105;110;112;117;116;58;32;105;110;116;32;108;105;109;105;116;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -50096,7 +51389,7 @@ lösung: vb-wald-loesung.visustruct -`,gI=` +`,GI=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -50135,7 +51428,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,pI=` +`,HI=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -50174,7 +51467,77 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,fI=` +`,VI=` + + + 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; + + + 105;110;116;32;119;97;110;116;101;100;32;61;32;49;49; + + + 105;110;116;32;112;111;115;105;116;105;111;110;32;61;32;45;49; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;99;97;114;100;115;46;108;101;110;103;116;104; + 105;43;43; + + + 99;97;114;100;115;91;105;93;32;61;61;32;119;97;110;116;101;100; + + + 112;111;115;105;116;105;111;110;32;61;32;105; + + + + + 248; + + + + + + + 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; + + +`,qI=` + + + 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; + + + 105;110;116;32;119;97;110;116;101;100;32;61;32;49;49; + + + 105;110;116;32;112;111;115;105;116;105;111;110;32;61;32;45;49; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;99;97;114;100;115;46;108;101;110;103;116;104; + 105;43;43; + + + 99;97;114;100;115;91;105;93;32;61;61;32;87;97;110;116;101;100; + + + 112;111;115;105;116;105;111;110;32;61;32;105; + + + + + 248; + + + + + + + 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; + + +`,QI=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -50209,7 +51572,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;99;111;117;110;116; -`,bI=` +`,UI=` 111;117;116;112;117;116;58;32;34;71;111;111;100;32;109;111;114;110;105;110;103;34; @@ -50218,13 +51581,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;100;97;121;32;119;101;32;108;101;97;114;110;32;115;116;114;117;99;116;117;114;101;32;99;104;97;114;116;115;46;34; -`,xI=` +`,$I=` 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;87;111;114;108;100;34; -`,vI=` +`,YI=` 111;117;116;112;117;116;58;32;34;72;101;108;108;111;34; @@ -50233,7 +51596,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;32;97;109;32;108;101;97;114;110;105;110;103;32;115;116;114;117;99;116;117;114;101;32;99;104;97;114;116;115;34; -`,yI=` +`,XI=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -50274,7 +51637,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116;32;43;32;34;32;108;105;110;101;115;32;115;97;118;101;100;34; -`,wI=` +`,KI=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -50283,7 +51646,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;111;117;116;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;115;104;111;112;112;105;110;103;45;110;101;119;46;116;120;116;34;41; -`,zI=` +`,e7=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -50309,13 +51672,13 @@ lösung: vb-wald-loesung.visustruct 102;105;108;101;46;99;108;111;115;101;40;41; -`,II=` +`,t7=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; -`,kI=` +`,n7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -50354,7 +51717,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;111;120;58;32;34;32;43;32;99;111;117;110;116; -`,SI=` +`,i7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -50363,7 +51726,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,TI=` +`,a7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -50398,7 +51761,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;110;103;101;115;116;32;101;110;116;114;121;58;32;34;32;43;32;108;111;110;103;101;115;116; -`,_I=` +`,s7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -50407,7 +51770,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;108;105;110;101;115;32;61;32;116;101;120;116;46;115;112;108;105;116;40;34;92;110;34;41; -`,CI=` +`,r7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -50461,7 +51824,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;101;115;116;32;103;114;97;100;101;32;105;110;32;69;110;103;108;105;115;104;58;32;34;32;43;32;98;101;115;116;78;97;109;101;32;43;32;34;32;40;34;32;43;32;98;101;115;116;71;114;97;100;101;32;43;32;34;41;34; -`,AI=` +`,o7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -50470,7 +51833,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,jI=` +`,l7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -50511,7 +51874,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;116;104;115;32;97;118;101;114;97;103;101;58;32;34;32;43;32;115;117;109;32;47;32;99;111;117;110;116; -`,OI=` +`,u7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -50520,7 +51883,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,PI=` +`,m7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -50559,7 +51922,7 @@ lösung: vb-wald-loesung.visustruct 114;101;97;100;101;114;46;99;108;111;115;101;40;41; -`,MI=` +`,c7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -50568,7 +51931,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,DI=` +`,d7=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;111;120;34;125; @@ -50618,7 +51981,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;115;46;108;101;110;103;116;104;32;43;32;34;32;101;110;116;114;105;101;115;32;115;97;118;101;100;34; -`,ZI=` +`,h7=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;111;120;34;125; @@ -50636,7 +51999,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,BI=` +`,g7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -50689,7 +52052,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;108;105;110;101;115;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;97;110;105;109;97;108;115;32;115;97;118;101;100;34; -`,LI=` +`,p7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -50710,7 +52073,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,WI=` +`,f7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -50754,7 +52117,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116;32;43;32;34;32;115;101;110;116;101;110;99;101;115;32;115;97;118;101;100;34; -`,EI=` +`,x7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -50775,7 +52138,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,NI=` +`,b7=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;116;105;99;107;101;116;115;63;34; @@ -50787,7 +52150,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,JI=` +`,v7=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;116;105;99;107;101;116;115;63;34; @@ -50799,7 +52162,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;116;111;116;97;108;32;61;32;99;111;117;110;116;32;42;32;56;46;53; -`,FI=` +`,y7=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -50823,7 +52186,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,RI=` +`,w7=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -50844,7 +52207,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,GI=` +`,z7=` 105;110;116;32;97;32;61;32;51; @@ -50868,7 +52231,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,HI=` +`,I7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -50927,7 +52290,7 @@ lösung: vb-wald-loesung.visustruct -`,VI=` +`,k7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -50986,7 +52349,7 @@ lösung: vb-wald-loesung.visustruct -`,qI=` +`,S7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -51060,7 +52423,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;105;115;111;110;115;58;32;34;32;43;32;99;111;109;112;97;114;105;115;111;110;115; -`,QI=` +`,T7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -51109,7 +52472,7 @@ lösung: vb-wald-loesung.visustruct -`,UI=` +`,_7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -51158,7 +52521,7 @@ lösung: vb-wald-loesung.visustruct -`,$I=` +`,j7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -51216,7 +52579,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;105;115;111;110;115;58;32;34;32;43;32;99;111;109;112;97;114;105;115;111;110;115; -`,YI=` +`,C7=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -51235,7 +52598,7 @@ lösung: vb-wald-loesung.visustruct -`,XI=` +`,A7=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -51254,7 +52617,7 @@ lösung: vb-wald-loesung.visustruct -`,KI=` +`,P7=` 105;110;116;32;105;32;61;32;48; @@ -51267,7 +52630,7 @@ lösung: vb-wald-loesung.visustruct -`,ek=` +`,O7=` 105;110;116;32;110;117;109;98;101;114;32;61;32;53; @@ -51291,7 +52654,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;102;116;101;114;58;32;34;32;43;32;114;111;119;91;48;93;32;43;32;34;44;32;34;32;43;32;114;111;119;91;49;93; -`,tk=` +`,D7=` 105;110;116;32;105;32;61;32;48; @@ -51304,7 +52667,7 @@ lösung: vb-wald-loesung.visustruct -`,nk=` +`,M7=` 120;32;61;32;120;32;42;32;50; @@ -51313,7 +52676,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;110;32;116;104;101;32;115;117;98;112;114;111;103;114;97;109;58;32;120;32;61;32;34;32;43;32;120; -`,ik=` +`,B7=` 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; @@ -51322,7 +52685,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;100;105;115;116;97;110;99;101;32;43;32;34;32;99;109;34;41; -`,ak=` +`,Z7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; @@ -51348,7 +52711,7 @@ lösung: vb-wald-loesung.visustruct -`,sk=` +`,L7=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -51375,7 +52738,7 @@ lösung: vb-wald-loesung.visustruct -`,rk=` +`,W7=` 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; @@ -51393,7 +52756,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; -`,ok=` +`,E7=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -51423,7 +52786,7 @@ lösung: vb-wald-loesung.visustruct -`,lk=` +`,N7=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;72;101;108;108;111;33;34;41; @@ -51435,7 +52798,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;32;97;109;32;86;105;115;117;66;111;116;34;41; -`,uk=` +`,F7=` 105;110;116;32;110;117;109;98;101;114;32;61;32;48; @@ -51487,7 +52850,7 @@ lösung: vb-wald-loesung.visustruct -`,mk=` +`,J7=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -51498,7 +52861,7 @@ lösung: vb-wald-loesung.visustruct -`,ck=` +`,R7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -51509,7 +52872,7 @@ lösung: vb-wald-loesung.visustruct -`,dk=` +`,G7=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -51520,7 +52883,7 @@ lösung: vb-wald-loesung.visustruct -`,hk=` +`,H7=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;86;105;115;117;66;111;116;34; @@ -51539,7 +52902,7 @@ lösung: vb-wald-loesung.visustruct -`,gk=` +`,V7=` 109;98;111;116;46;108;101;100;40;48;41;46;115;101;116;67;111;108;111;114;40;34;114;101;100;34;41; @@ -51551,7 +52914,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;108;101;100;40;52;41;46;115;101;116;67;111;108;111;114;40;34;103;114;101;101;110;34;41; -`,pk=` +`,q7=` 105;110;116;32;105;32;61;32;48; @@ -51567,7 +52930,7 @@ lösung: vb-wald-loesung.visustruct -`,fk=` +`,Q7=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;117;101;34;41; @@ -51595,7 +52958,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;80;97;114;107;101;100;33;34;41; -`,bk=` +`,U7=` 83;116;114;105;110;103;91;93;32;99;111;108;111;117;114;115;32;61;32;123;34;114;101;100;34;44;32;34;121;101;108;108;111;119;34;44;32;34;103;114;101;101;110;34;44;32;34;98;108;117;101;34;44;32;34;112;117;114;112;108;101;34;125; @@ -51611,7 +52974,7 @@ lösung: vb-wald-loesung.visustruct -`,xk=` +`,$7=` 109;98;111;116;46;103;101;116;67;111;108;111;114;40;41; @@ -51637,7 +53000,7 @@ lösung: vb-wald-loesung.visustruct -`,vk=` +`,Y7=` 109;98;111;116;46;100;114;105;118;101;40;53;48;44;32;53;48;41; @@ -51654,7 +53017,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,yk=` +`,X7=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -51672,7 +53035,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,wk=` +`,K7=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -51708,7 +53071,7 @@ lösung: vb-wald-loesung.visustruct -`,zk=` +`,ek=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;66;97;116;116;101;114;121;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -51727,7 +53090,7 @@ lösung: vb-wald-loesung.visustruct -`,Ik=` +`,tk=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;117;101;34;41; @@ -51751,7 +53114,7 @@ lösung: vb-wald-loesung.visustruct -`,kk=` +`,nk=` 105;110;116;32;105;32;61;32;48; @@ -51773,7 +53136,7 @@ lösung: vb-wald-loesung.visustruct -`,Sk=` +`,ik=` 105;110;116;32;105;32;61;32;51; @@ -51792,7 +53155,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;111;33;34;41; -`,Tk=` +`,ak=` 105;110;116;32;105;32;61;32;49; @@ -51805,7 +53168,7 @@ lösung: vb-wald-loesung.visustruct -`,_k=` +`,sk=` 105;110;116;32;105;32;61;32;48; @@ -51838,7 +53201,7 @@ lösung: vb-wald-loesung.visustruct -`,Ck=` +`,rk=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -51854,7 +53217,7 @@ lösung: vb-wald-loesung.visustruct -`,Ak=` +`,ok=` 105;110;116;32;105;32;61;32;48; @@ -51873,7 +53236,7 @@ lösung: vb-wald-loesung.visustruct -`,jk=` +`,lk=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -51917,7 +53280,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,Ok=` +`,uk=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -51936,7 +53299,7 @@ lösung: vb-wald-loesung.visustruct -`,Pk=` +`,mk=` 105;110;116;32;115;116;101;112;115;32;61;32;48; @@ -51966,7 +53329,7 @@ lösung: vb-wald-loesung.visustruct -`,Mk=` +`,ck=` 105;110;116;32;108;101;110;103;116;104;32;61;32;54;48; @@ -51994,7 +53357,7 @@ lösung: vb-wald-loesung.visustruct -`,Dk=` +`,dk=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;101;108;108;111;32;99;108;97;115;115;34; @@ -52003,7 +53366,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;116;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,Zk=` +`,hk=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -52017,7 +53380,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,Bk=` +`,gk=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -52033,7 +53396,7 @@ lösung: vb-wald-loesung.visustruct -`,Lk=` +`,pk=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;60;32;53;48; @@ -52047,7 +53410,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,Wk=` +`,fk=` 105;110;116;32;105;32;61;32;48; @@ -52082,7 +53445,7 @@ lösung: vb-wald-loesung.visustruct -`,Ek=` +`,xk=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -52116,7 +53479,7 @@ lösung: vb-wald-loesung.visustruct -`,Nk=` +`,bk=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -52160,7 +53523,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,Jk=` +`,vk=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -52186,7 +53549,7 @@ lösung: vb-wald-loesung.visustruct -`,Fk=` +`,yk=` 105;110;116;91;93;32;116;111;110;101;115;32;61;32;123;50;54;50;44;32;50;57;52;44;32;51;51;48;44;32;51;52;57;44;32;51;57;50;125; @@ -52202,7 +53565,7 @@ lösung: vb-wald-loesung.visustruct -`,Rk=` +`,wk=` 105;110;116;32;105;32;61;32;48; @@ -52268,7 +53631,7 @@ lösung: vb-wald-loesung.visustruct -`,Gk=` +`,zk=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -52284,7 +53647,7 @@ lösung: vb-wald-loesung.visustruct -`,Hk=` +`,Ik=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; @@ -52301,7 +53664,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;90;122;122;34;41; -`,Vk=` +`,kk=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101; @@ -52330,7 +53693,7 @@ lösung: vb-wald-loesung.visustruct -`,qk=` +`,Sk=` 105;110;116;32;97;32;61;32;115;113;117;97;114;101;78;117;109;98;101;114;40;51;41; @@ -52345,13 +53708,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,Qk=` +`,Tk=` 114;101;116;117;114;110;32;120;32;42;32;120; -`,Uk=` +`,_k=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;76;117;100;119;105;103;34; @@ -52373,7 +53736,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;97;99;107;119;97;114;100;115; -`,$k=` +`,jk=` 105;110;116;32;108;101;110;103;116;104;32;61;32;54;48; @@ -52388,7 +53751,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;100;105;115;116;97;110;99;101;32;43;32;34;32;99;109;34; -`,Yk=` +`,Ck=` 105;110;116;91;93;32;103;114;97;100;101;115;32;61;32;123;50;44;32;49;44;32;51;44;32;50;125; @@ -52413,7 +53776,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;103;114;97;100;101;115;46;108;101;110;103;116;104; -`,Xk=` +`,Ak=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -52488,7 +53851,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,Kk=` +`,Pk=` 115;113;117;97;114;101;40;51;48;41; @@ -52497,7 +53860,7 @@ lösung: vb-wald-loesung.visustruct 115;113;117;97;114;101;40;53;48;41; -`,e7=` +`,Ok=` 105;110;116;32;105;32;61;32;48; @@ -52552,7 +53915,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,t7=` +`,Dk=` 105;110;116;32;105;32;61;32;48; @@ -52568,7 +53931,7 @@ lösung: vb-wald-loesung.visustruct -`,n7=` +`,Mk=` 105;110;116;32;105;32;61;32;48; @@ -52591,7 +53954,7 @@ lösung: vb-wald-loesung.visustruct -`,i7=` +`,Bk=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -52605,7 +53968,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; -`,a7=` +`,Zk=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;50;48;32;124;124;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;45;50;48; @@ -52621,7 +53984,7 @@ lösung: vb-wald-loesung.visustruct -`,s7=` +`,Lk=` 105;110;116;32;105;32;61;32;48; @@ -52673,7 +54036,7 @@ lösung: vb-wald-loesung.visustruct -`,r7=` +`,Wk=` 105;110;116;32;105;32;61;32;49; @@ -52689,7 +54052,7 @@ lösung: vb-wald-loesung.visustruct -`,o7=` +`,Ek=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41; @@ -52703,7 +54066,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,l7=` +`,Nk=` 109;98;111;116;46;112;108;97;121;84;111;110;101;40;50;54;50;44;32;51;48;48;41; @@ -52721,7 +54084,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;51;57;50;44;32;51;48;48;41; -`,u7=` +`,Fk=` 105;110;116;32;105;32;61;32;48; @@ -52743,7 +54106,7 @@ lösung: vb-wald-loesung.visustruct -`,m7=` +`,Jk=` 105;110;116;32;108;101;102;116;32;61;32;57;57; @@ -52775,7 +54138,7 @@ lösung: vb-wald-loesung.visustruct -`,c7=` +`,Rk=` 105;110;116;32;115;105;100;101;32;61;32;51;48; @@ -52794,7 +54157,7 @@ lösung: vb-wald-loesung.visustruct -`,d7=` +`,Gk=` 105;110;116;32;105;32;61;32;48; @@ -52827,7 +54190,7 @@ lösung: vb-wald-loesung.visustruct -`,h7=` +`,Hk=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -52866,7 +54229,7 @@ lösung: vb-wald-loesung.visustruct -`,g7=` +`,Vk=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -52882,7 +54245,7 @@ lösung: vb-wald-loesung.visustruct -`,p7=` +`,qk=` 109;98;111;116;46;114;101;115;101;116;84;105;109;101;114;40;41; @@ -52902,7 +54265,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,f7=` +`,Qk=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;78;97;109;101;32;34;70;105;114;115;116;32;110;97;109;101;34; @@ -52914,7 +54277,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;78;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;78;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,b7=` +`,Uk=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;66;105;108;108;121;103;111;97;116;34; @@ -52953,7 +54316,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,x7=` +`,$k=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;69;110;116;101;114;32;97;32;119;111;114;100;34; @@ -52975,7 +54338,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;97;99;107;119;97;114;100;115; -`,v7=` +`,Yk=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;76;117;100;119;105;103;59;98;105;108;108;121;32;103;111;97;116;59;55;34; @@ -52994,7 +54357,7 @@ lösung: vb-wald-loesung.visustruct -`,y7=` +`,Xk=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;110;116;101;110;99;101;32;34;69;110;116;101;114;32;97;32;115;101;110;116;101;110;99;101;34; @@ -53006,7 +54369,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;114;100;115;58;32;34;32;43;32;119;111;114;100;115;46;108;101;110;103;116;104; -`,w7=` +`,Kk=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;69;110;116;101;114;32;97;32;119;111;114;100;34; @@ -53038,7 +54401,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;117;109;98;101;114;32;111;102;32;101;58;32;34;32;43;32;99;111;117;110;116; -`,z7=` +`,e8=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;66;105;108;108;121;103;111;97;116;34; @@ -53062,7 +54425,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;111;114;100;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,I7=` +`,t8=` 105;110;116;91;93;91;93;32;116;97;98;101;108;108;101;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -53094,7 +54457,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;101;108;108;101;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,k7=` +`,n8=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -53142,7 +54505,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;114;101;105;58;32;34;32;43;32;102;114;101;105; -`,S7=` +`,i8=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -53157,7 +54520,7 @@ lösung: vb-wald-loesung.visustruct 115;105;116;122;101;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,T7=` +`,a8=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -53191,7 +54554,7 @@ lösung: vb-wald-loesung.visustruct -`,_7=` +`,s8=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -53209,7 +54572,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;112;108;97;116;122;32;34;80;108;97;116;122;34; -`,C7=` +`,r8=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -53257,7 +54620,7 @@ lösung: vb-wald-loesung.visustruct -`,A7=` +`,o8=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -53281,7 +54644,37 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;105;104;101;32;49;44;32;80;108;97;116;122;32;50;32;118;101;114;107;97;117;102;116;63;32;34;32;43;32;115;105;116;122;101;91;49;93;91;50;93; -`,j7=` +`,l8=` + + + 105;110;116;32;122;97;104;108;32;61;32;52; + + + 105;110;116;32;90;97;104;108;32;61;32;54; + + + 105;110;116;32;101;114;103;101;98;110;105;115;32;61;32;122;97;104;108;32;42;32;90;97;104;108; + + + 111;117;116;112;117;116;58;32;34;69;114;103;101;98;110;105;115;58;32;34;32;43;32;101;114;103;101;98;110;105;115; + + +`,u8=` + + + 105;110;116;32;122;97;104;108;32;61;32;52; + + + 105;110;116;32;90;97;104;108;32;61;32;54; + + + 105;110;116;32;101;114;103;101;98;110;105;115;32;61;32;122;97;104;108;32;42;32;90;65;72;76; + + + 111;117;116;112;117;116;58;32;34;69;114;103;101;98;110;105;115;58;32;34;32;43;32;101;114;103;101;98;110;105;115; + + +`,m8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -53296,7 +54689,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,O7=` +`,c8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -53311,7 +54704,31 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,P7=` +`,d8=` + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 105;110;116;32;97;108;116;101;114;32;61;32;55; + + + 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;105;115;116;32;34;32;43;32;97;108;116;101;114;32;43;32;34;32;74;97;104;114;101;32;97;108;116;46;34; + + +`,h8=` + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 105;110;116;32;97;108;116;101;114;32;61;32;55; + + + 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;97;109;101;32;43;32;34;32;105;115;116;32;34;32;43;32;65;108;116;101;114;32;43;32;34;32;74;97;104;114;101;32;97;108;116;46;34;41; + + +`,g8=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -53329,7 +54746,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;114;246;223;101;58;32;34;32;43;32;103;114;111;101;115;115;101;32;43;32;34;32;109;34; -`,M7=` +`,p8=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -53344,7 +54761,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,D7=` +`,f8=` 105;110;116;32;122;97;104;108;32;61;32;50; @@ -53359,7 +54776,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,Z7=` +`,x8=` 111;117;116;112;117;116;58;32;122;97;104;108; @@ -53374,7 +54791,7 @@ lösung: vb-wald-loesung.visustruct 122;97;104;108;32;61;32;122;97;104;108;32;43;32;51; -`,B7=` +`,b8=` 83;116;114;105;110;103;32;108;105;110;107;115;32;61;32;34;83;97;102;116;34; @@ -53398,7 +54815,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;99;104;116;115;58;32;34;32;43;32;114;101;99;104;116;115; -`,L7=` +`,v8=` 83;116;114;105;110;103;32;108;105;110;107;115;32;61;32;34;83;97;102;116;34; @@ -53413,7 +54830,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;99;104;116;115;58;32;34;32;43;32;114;101;99;104;116;115; -`,W7=` +`,y8=` 105;110;116;32;97;32;61;32;53; @@ -53437,7 +54854,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,E7=` +`,w8=` 105;110;116;32;97;108;116;101;114;32;61;32;49;52; @@ -53455,7 +54872,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;114;246;223;101;58;32;34;32;43;32;103;114;111;101;115;115;101;32;43;32;34;32;109;34; -`,N7=` +`,z8=` 105;110;116;32;109;105;110;117;116;101;110;32;61;32;49;51;53; @@ -53470,7 +54887,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;116;117;110;100;101;110;32;43;32;34;32;83;116;117;110;100;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;77;105;110;117;116;101;110;34; -`,J7=` +`,I8=` 105;110;116;32;97;110;122;97;104;108;32;61;32;51; @@ -53485,7 +54902,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116;80;114;101;105;115;32;43;32;34;32;69;117;114;111;34; -`,F7=` +`,k8=` 105;110;116;32;103;117;116;104;97;98;101;110;32;61;32;50;48; @@ -53500,7 +54917,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;220;98;114;105;103;58;32;34;32;43;32;103;117;116;104;97;98;101;110; -`,R7=` +`,S8=` 105;110;116;32;103;117;116;104;97;98;101;110;32;61;32;50;48; @@ -53515,7 +54932,7 @@ lösung: vb-wald-loesung.visustruct 103;117;116;104;97;98;101;110;32;61;32;103;117;116;104;97;98;101;110;32;45;32;112;114;101;105;115; -`,G7=` +`,T8=` 105;110;116;32;112;114;101;105;115;32;61;32;57; @@ -53530,7 +54947,37 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,H7=` +`,_8=` + + + 105;110;116;32;115;116;117;101;99;107;101;32;61;32;56; + + + 105;110;116;32;112;101;114;115;111;110;101;110;32;61;32;52; + + + 105;110;116;32;112;114;111;80;101;114;115;111;110;32;61;32;115;116;117;101;99;107;101;32;47;32;112;101;114;115;111;110;101;110; + + + 111;117;116;112;117;116;58;32;34;74;101;100;101;114;32;98;101;107;111;109;109;116;32;34;32;43;32;112;114;111;80;101;114;115;111;110;32;43;32;34;32;83;116;252;99;107;101;46;34; + + +`,j8=` + + + 105;110;116;32;115;116;117;101;99;107;101;32;61;32;56; + + + 105;110;116;32;112;101;114;115;111;110;101;110;32;61;32;52; + + + 105;110;116;32;112;114;111;80;101;114;115;111;110;32;61;32;115;116;117;101;99;107;101;32;47;32;112;101;114;115;111;110;101;110; + + + 111;117;116;112;117;116;58;32;34;74;101;100;101;114;32;98;101;107;111;109;109;116;32;34;32;43;32;112;114;111;112;101;114;115;111;110;32;43;32;34;32;83;116;252;99;107;101;46;34; + + +`,C8=` 105;110;116;32;108;97;101;110;103;101;32;61;32;55; @@ -53551,7 +54998,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;85;109;102;97;110;103;58;32;34;32;43;32;117;109;102;97;110;103; -`,V7=` +`,A8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -53566,7 +55013,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;77;105;110;117;116;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;83;101;107;117;110;100;101;110;34; -`,q7=` +`,P8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -53575,7 +55022,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;77;105;110;117;116;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;83;101;107;117;110;100;101;110;34; -`,Q7=` +`,O8=` 105;110;116;32;108;97;101;110;103;101;32;61;32;53; @@ -53590,7 +55037,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;108;97;101;99;104;101; -`,U7=` +`,D8=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;97;109;101;32;34;87;105;101;32;104;101;105;223;116;32;100;117;63;34; @@ -53599,7 +55046,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;34;32;43;32;110;97;109;101;32;43;32;34;33;34; -`,$7=` +`,M8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -53614,7 +55061,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,Y7=` +`,B8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -53626,7 +55073,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,X7=` +`,Z8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -53638,7 +55085,25 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;97;32;43;32;98; -`,K7=` +`,L8=` + + + 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; + + + 111;117;116;112;117;116;58;32;34;78;228;99;104;115;116;101;115;32;74;97;104;114;32;98;105;115;116;32;100;117;32;34;32;43;32;40;97;108;116;101;114;32;43;32;49;41; + + +`,W8=` + + + 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; + + + 111;117;116;112;117;116;58;32;34;78;228;99;104;115;116;101;115;32;74;97;104;114;32;98;105;115;116;32;100;117;32;34;32;43;32;40;65;108;116;101;114;32;43;32;49;41; + + +`,E8=` 105;110;112;117;116;58;32;105;110;116;32;106;97;104;114;101;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -53650,7 +55115,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;115;32;115;105;110;100;32;101;116;119;97;32;34;32;43;32;116;97;103;101;32;43;32;34;32;84;97;103;101;46;34; -`,eS=` +`,N8=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -53665,7 +55130,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;105;116;116;101;108;119;101;114;116;58;32;34;32;43;32;109;105;116;116;101;108; -`,tS=` +`,F8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -53686,7 +55151,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;107;116;58;32;34;32;43;32;112;114;111;100;117;107;116; -`,nS=` +`,J8=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -53705,7 +55170,7 @@ lösung: vb-wald-loesung.visustruct -`,iS=` +`,R8=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;63;34; @@ -53727,7 +55192,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,aS=` +`,G8=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;63;34; @@ -53746,7 +55211,7 @@ lösung: vb-wald-loesung.visustruct -`,sS=` +`,H8=` 105;110;116;32;112;117;110;107;116;101;32;61;32;48; @@ -53764,7 +55229,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,rS=` +`,V8=` 105;110;116;32;112;117;110;107;116;101;32;61;32;48; @@ -53782,7 +55247,37 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,oS=` +`,q8=` + + + 105;110;116;32;112;117;110;107;116;101;32;61;32;49;48; + + + 105;110;116;32;98;111;110;117;115;32;61;32;53; + + + 112;117;110;107;116;101;32;61;32;112;117;110;107;116;101;32;43;32;98;111;110;117;115; + + + 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; + + +`,Q8=` + + + 105;110;116;32;112;117;110;107;116;101;32;61;32;49;48; + + + 112;117;110;107;116;101;32;61;32;112;117;110;107;116;101;32;43;32;98;111;110;117;115; + + + 105;110;116;32;98;111;110;117;115;32;61;32;53; + + + 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; + + +`,U8=` 105;110;116;32;112;114;101;105;115;32;61;32;56; @@ -53800,7 +55295,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,lS=` +`,$8=` 105;110;116;32;112;114;101;105;115;32;61;32;56; @@ -53818,7 +55313,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,uS=` +`,Y8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -53840,7 +55335,7 @@ lösung: vb-wald-loesung.visustruct -`,mS=` +`,X8=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;101;105;115;32;34;80;114;101;105;115;32;105;110;32;69;117;114;111;63;34; @@ -53862,7 +55357,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;90;117;32;122;97;104;108;101;110;58;32;34;32;43;32;112;114;101;105;115;32;43;32;34;32;69;117;114;111;34; -`,cS=` +`,K8=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;78;111;116;101;63;34; @@ -53881,7 +55376,7 @@ lösung: vb-wald-loesung.visustruct -`,dS=` +`,eS=` 105;110;112;117;116;58;32;105;110;116;32;112;117;110;107;116;101;32;34;87;105;101;32;118;105;101;108;101;32;80;117;110;107;116;101;63;34; @@ -53900,7 +55395,7 @@ lösung: vb-wald-loesung.visustruct -`,hS=` +`,tS=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -53919,7 +55414,7 @@ lösung: vb-wald-loesung.visustruct -`,gS=` +`,nS=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -53938,7 +55433,45 @@ lösung: vb-wald-loesung.visustruct -`,pS=` +`,iS=` + + + 105;110;116;32;97;108;116;101;114;32;61;32;49;53; + + + 97;108;116;101;114;32;62;61;32;49;54; + + + 111;117;116;112;117;116;58;32;34;69;105;110;108;97;115;115;34; + + + + + 111;117;116;112;117;116;58;32;34;75;101;105;110;32;69;105;110;108;97;115;115;34; + + + + +`,aS=` + + + 105;110;116;32;97;108;116;101;114;32;61;32;49;53; + + + 65;108;116;101;114;32;62;61;32;49;54; + + + 111;117;116;112;117;116;58;32;34;69;105;110;108;97;115;115;34; + + + + + 111;117;116;112;117;116;58;32;34;75;101;105;110;32;69;105;110;108;97;115;115;34; + + + + +`,sS=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -53957,7 +55490,7 @@ lösung: vb-wald-loesung.visustruct -`,fS=` +`,rS=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;78;111;116;101;63;34; @@ -53976,7 +55509,7 @@ lösung: vb-wald-loesung.visustruct -`,bS=` +`,oS=` 105;110;112;117;116;58;32;105;110;116;32;106;97;104;114;32;34;74;97;104;114;63;34; @@ -53995,7 +55528,7 @@ lösung: vb-wald-loesung.visustruct -`,xS=` +`,lS=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -54014,7 +55547,7 @@ lösung: vb-wald-loesung.visustruct -`,vS=` +`,uS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;97;114;98;101;32;34;87;101;108;99;104;101;32;70;97;114;98;101;32;104;97;116;32;100;105;101;32;65;109;112;101;108;63;34; @@ -54043,7 +55576,7 @@ lösung: vb-wald-loesung.visustruct -`,yS=` +`,mS=` 105;110;112;117;116;58;32;105;110;116;32;119;97;104;108;32;34;49;32;87;97;115;115;101;114;44;32;50;32;83;97;102;116;44;32;51;32;75;97;107;97;111;34; @@ -54072,7 +55605,7 @@ lösung: vb-wald-loesung.visustruct -`,wS=` +`,cS=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;87;101;108;99;104;101;114;32;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -54091,7 +55624,7 @@ lösung: vb-wald-loesung.visustruct -`,zS=` +`,dS=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;87;101;108;99;104;101;114;32;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -54110,7 +55643,45 @@ lösung: vb-wald-loesung.visustruct -`,IS=` +`,hS=` + + + 105;110;116;32;116;97;103;32;61;32;55; + + + 116;97;103;32;61;61;32;54;32;124;124;32;116;97;103;32;61;61;32;55; + + + 111;117;116;112;117;116;58;32;34;115;99;104;117;108;102;114;101;105;34; + + + + + 111;117;116;112;117;116;58;32;34;83;99;104;117;108;101;34; + + + + +`,gS=` + + + 105;110;116;32;116;97;103;32;61;32;55; + + + 116;97;103;32;61;61;32;54;32;124;124;32;84;97;103;32;61;61;32;55; + + + 111;117;116;112;117;116;58;32;34;115;99;104;117;108;102;114;101;105;34; + + + + + 111;117;116;112;117;116;58;32;34;83;99;104;117;108;101;34; + + + + +`,pS=` 105;110;112;117;116;58;32;105;110;116;32;115;116;117;110;100;101;32;34;87;105;101;32;115;112;228;116;32;105;115;116;32;101;115;32;40;110;117;114;32;100;105;101;32;83;116;117;110;100;101;41;63;34; @@ -54129,7 +55700,7 @@ lösung: vb-wald-loesung.visustruct -`,kS=` +`,fS=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;87;101;108;99;104;101;32;78;111;116;101;63;34; @@ -54173,7 +55744,7 @@ lösung: vb-wald-loesung.visustruct -`,SS=` +`,xS=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -54220,7 +55791,7 @@ lösung: vb-wald-loesung.visustruct -`,TS=` +`,bS=` 105;110;112;117;116;58;32;105;110;116;32;119;97;104;108;32;34;49;32;87;97;115;115;101;114;44;32;50;32;83;97;102;116;44;32;51;32;75;97;107;97;111;34; @@ -54259,7 +55830,7 @@ lösung: vb-wald-loesung.visustruct -`,_S=` +`,vS=` 84;97;115;115;101;32;97;117;102;32;100;101;110;32;84;105;115;99;104;32;115;116;101;108;108;101;110; @@ -54289,7 +55860,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;32;116;114;105;110;107;101;110; -`,CS=` +`,yS=` 65;117;102;115;116;101;104;101;110; @@ -54304,7 +55875,7 @@ lösung: vb-wald-loesung.visustruct 70;114;252;104;115;116;252;99;107;101;110; -`,AS=` +`,wS=` 87;97;115;115;101;114;32;105;110;32;100;101;110;32;87;97;115;115;101;114;107;111;99;104;101;114;32;102;252;108;108;101;110; @@ -54325,7 +55896,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;98;101;117;116;101;108;32;104;101;114;97;117;115;110;101;104;109;101;110; -`,jS=` +`,zS=` 82;101;103;110;101;116;32;101;115;63; @@ -54344,7 +55915,7 @@ lösung: vb-wald-loesung.visustruct 76;111;115;103;101;104;101;110; -`,OS=` +`,IS=` 84;101;108;108;101;114;32;110;105;99;104;116;32;108;101;101;114; @@ -54358,7 +55929,7 @@ lösung: vb-wald-loesung.visustruct 84;101;108;108;101;114;32;97;98;114;228;117;109;101;110; -`,PS=` +`,kS=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;32;122;228;104;108;101;110;63;34; @@ -54378,7 +55949,7 @@ lösung: vb-wald-loesung.visustruct -`,MS=` +`,SS=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -54398,7 +55969,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,DS=` +`,TS=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -54415,7 +55986,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,ZS=` +`,_S=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;107;117;108;116;228;116;32;118;111;110;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -54441,7 +56012,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;107;117;108;116;97;101;116; -`,BS=` +`,jS=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -54476,7 +56047,7 @@ lösung: vb-wald-loesung.visustruct -`,LS=` +`,CS=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -54511,7 +56082,55 @@ lösung: vb-wald-loesung.visustruct -`,WS=` +`,AS=` + + + 105;110;116;32;110;111;116;101;32;61;32;50; + + + 110;111;116;101; + + + 111;117;116;112;117;116;58;32;34;115;101;104;114;32;103;117;116;34; + + + + + 111;117;116;112;117;116;58;32;34;103;117;116;34; + + + + + 111;117;116;112;117;116;58;32;34;119;101;105;116;101;114;32;252;98;101;110;34; + + + + +`,PS=` + + + 105;110;116;32;110;111;116;101;32;61;32;50; + + + 78;111;116;101; + + + 111;117;116;112;117;116;58;32;34;115;101;104;114;32;103;117;116;34; + + + + + 111;117;116;112;117;116;58;32;34;103;117;116;34; + + + + + 111;117;116;112;117;116;58;32;34;119;101;105;116;101;114;32;252;98;101;110;34; + + + + +`,OS=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;90;97;104;108;63;34; @@ -54540,7 +56159,7 @@ lösung: vb-wald-loesung.visustruct -`,ES=` +`,DS=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;34; @@ -54563,7 +56182,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;99;104;114;105;116;116;101; -`,NS=` +`,MS=` 105;110;116;32;122;97;104;108;32;61;32;48; @@ -54580,7 +56199,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;110;107;101;33;34; -`,JS=` +`,BS=` 105;110;116;32;105;32;61;32;49;48; @@ -54597,7 +56216,7 @@ lösung: vb-wald-loesung.visustruct -`,FS=` +`,ZS=` 105;110;112;117;116;58;32;105;110;116;32;122;105;101;108;32;34;83;112;97;114;122;105;101;108;63;34; @@ -54623,7 +56242,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;99;104;101;110;58;32;34;32;43;32;119;111;99;104;101;110; -`,RS=` +`,LS=` 105;110;112;117;116;58;32;105;110;116;32;122;105;101;108;32;34;83;112;97;114;122;105;101;108;63;34; @@ -54649,7 +56268,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;99;104;101;110;58;32;34;32;43;32;119;111;99;104;101;110; -`,GS=` +`,WS=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -54669,7 +56288,47 @@ lösung: vb-wald-loesung.visustruct -`,HS=` +`,ES=` + + + 105;110;116;32;122;97;104;108;32;61;32;51; + + + 122;97;104;108;32;62;32;48; + + + 111;117;116;112;117;116;58;32;122;97;104;108; + + + 122;97;104;108;32;61;32;122;97;104;108;32;45;32;49; + + + + + 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; + + +`,NS=` + + + 105;110;116;32;122;97;104;108;32;61;32;51; + + + 122;97;104;108;32;62;32;48; + + + 111;117;116;112;117;116;58;32;90;97;104;108; + + + 122;97;104;108;32;61;32;122;97;104;108;32;45;32;49; + + + + + 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; + + +`,FS=` 105;110;116;32;110;111;116;101;32;61;32;48; @@ -54686,7 +56345,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;101;105;110;101;32;78;111;116;101;58;32;34;32;43;32;110;111;116;101; -`,VS=` +`,JS=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -54709,7 +56368,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,qS=` +`,RS=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;83;116;97;114;116;122;97;104;108;34; @@ -54728,7 +56387,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;33;34; -`,QS=` +`,GS=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -54747,7 +56406,7 @@ lösung: vb-wald-loesung.visustruct -`,US=` +`,HS=` 105;110;116;32;105;32;61;32;49; @@ -54760,7 +56419,7 @@ lösung: vb-wald-loesung.visustruct -`,$S=` +`,VS=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -54777,7 +56436,7 @@ lösung: vb-wald-loesung.visustruct -`,YS=` +`,qS=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -54794,7 +56453,47 @@ lösung: vb-wald-loesung.visustruct -`,XS=` +`,QS=` + + + 105;110;116;32;122;97;104;108;32;61;32;49; + + + 105;110;116;32;103;114;101;110;122;101;32;61;32;50;48; + + + 122;97;104;108;32;60;32;103;114;101;110;122;101; + + + 111;117;116;112;117;116;58;32;122;97;104;108; + + + 122;97;104;108;32;61;32;122;97;104;108;32;42;32;50; + + + + +`,US=` + + + 105;110;116;32;122;97;104;108;32;61;32;49; + + + 105;110;116;32;103;114;101;110;122;101;32;61;32;50;48; + + + 122;97;104;108;32;60;32;71;114;101;110;122;101; + + + 111;117;116;112;117;116;58;32;122;97;104;108; + + + 122;97;104;108;32;61;32;122;97;104;108;32;42;32;50; + + + + +`,$S=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -54811,7 +56510,7 @@ lösung: vb-wald-loesung.visustruct -`,KS=` +`,YS=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -54833,7 +56532,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,e8=` +`,XS=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;87;105;101;32;118;105;101;108;101;32;90;101;105;108;101;110;63;34; @@ -54862,7 +56561,7 @@ lösung: vb-wald-loesung.visustruct -`,t8=` +`,KS=` 105;110;116;32;97;110;122;97;104;108;32;61;32;48; @@ -54894,7 +56593,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108; -`,n8=` +`,eT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -54926,7 +56625,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108; -`,i8=` +`,tT=` 105;110;112;117;116;58;32;105;110;116;32;114;101;105;104;101;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -54942,7 +56641,7 @@ lösung: vb-wald-loesung.visustruct -`,a8=` +`,nT=` 105;110;112;117;116;58;32;105;110;116;32;114;101;105;104;101;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -54958,7 +56657,42 @@ lösung: vb-wald-loesung.visustruct -`,s8=` +`,iT=` + + + 105;110;116;32;104;111;101;104;101;32;61;32;48; + + + 105;110;116;32;115;116;117;102;101;32;61;32;49; + 115;116;117;102;101;32;60;61;32;53; + 115;116;117;102;101;43;43; + + + 104;111;101;104;101;32;61;32;104;111;101;104;101;32;43;32;50;48; + + + + + 111;117;116;112;117;116;58;32;34;72;246;104;101;58;32;34;32;43;32;104;111;101;104;101;32;43;32;34;32;99;109;34; + + +`,aT=` + + + 105;110;116;32;115;116;117;102;101;32;61;32;49; + 115;116;117;102;101;32;60;61;32;53; + 115;116;117;102;101;43;43; + + + 104;111;101;104;101;32;61;32;104;111;101;104;101;32;43;32;50;48; + + + + + 111;117;116;112;117;116;58;32;34;72;246;104;101;58;32;34;32;43;32;104;111;101;104;101;32;43;32;34;32;99;109;34; + + +`,sT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -54974,7 +56708,7 @@ lösung: vb-wald-loesung.visustruct -`,r8=` +`,rT=` 105;110;112;117;116;58;32;105;110;116;32;98;114;101;105;116;101;32;34;66;114;101;105;116;101;34; @@ -55006,7 +56740,7 @@ lösung: vb-wald-loesung.visustruct -`,o8=` +`,oT=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -55022,7 +56756,7 @@ lösung: vb-wald-loesung.visustruct -`,l8=` +`,lT=` 105;110;116;91;93;32;119;101;114;116;101;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -55037,7 +56771,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;101;114;116;101;46;108;101;110;103;116;104; -`,u8=` +`,uT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -55069,7 +56803,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;97;110;122;97;104;108; -`,m8=` +`,mT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -55101,7 +56835,53 @@ lösung: vb-wald-loesung.visustruct -`,c8=` +`,cT=` + + + 105;110;116;32;105;32;61;32;49; + 105;32;60;61;32;49;48; + 105;43;43; + + + 105;32;37;32;50;32;61;61;32;48; + + + 111;117;116;112;117;116;58;32;105; + + + + + 248; + + + + + + +`,dT=` + + + 105;110;116;32;105;32;61;32;49; + 105;32;60;61;32;49;48; + 105;43;43; + + + 105;32;37;32;50;32;61;61;32;48; + + + 111;117;116;112;117;116;58;32;73; + + + + + 248; + + + + + + +`,hT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;87;105;101;32;118;105;101;108;101;32;83;116;117;102;101;110;63;34; @@ -55130,7 +56910,7 @@ lösung: vb-wald-loesung.visustruct -`,d8=` +`,gT=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -55149,7 +56929,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;114;115;116;101;114;32;78;97;109;101;58;32;34;32;43;32;110;97;109;101;110;91;48;93; -`,h8=` +`,pT=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -55175,7 +56955,7 @@ lösung: vb-wald-loesung.visustruct -`,g8=` +`,fT=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -55226,7 +57006,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,p8=` +`,xT=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -55267,7 +57047,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,f8=` +`,bT=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -55290,7 +57070,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,b8=` +`,vT=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -55320,7 +57100,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,x8=` +`,yT=` 105;110;112;117;116;58;32;105;110;116;32;108;97;101;110;103;101;32;34;76;228;110;103;101;63;34; @@ -55335,13 +57115,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;108;228;99;104;101;58;32;34;32;43;32;102; -`,v8=` +`,wT=` 114;101;116;117;114;110;32;97;32;42;32;98; -`,y8=` +`,zT=` 122;101;105;103;101;66;101;103;114;117;101;115;115;117;110;103;40;41; @@ -55353,7 +57133,7 @@ lösung: vb-wald-loesung.visustruct 122;101;105;103;101;69;114;103;101;98;110;105;115;40;41; -`,w8=` +`,IT=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;110;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -55385,7 +57165,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;99;104;115;116;101;32;84;101;109;112;101;114;97;116;117;114;58;32;34;32;43;32;109;97;120; -`,z8=` +`,kT=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;110;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -55417,7 +57197,51 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;99;104;115;116;101;32;84;101;109;112;101;114;97;116;117;114;58;32;34;32;43;32;109;97;120; -`,I8=` +`,ST=` + + + 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; + + + 105;110;116;32;115;117;109;109;101;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;112;117;110;107;116;101;46;108;101;110;103;116;104; + 105;43;43; + + + 115;117;109;109;101;32;61;32;115;117;109;109;101;32;43;32;112;117;110;107;116;101;91;105;93; + + + + + 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; + + +`,TT=` + + + 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; + + + 105;110;116;32;115;117;109;109;101;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;112;117;110;107;116;101;46;76;101;110;103;116;104; + 105;43;43; + + + 115;117;109;109;101;32;61;32;115;117;109;109;101;32;43;32;112;117;110;107;116;101;91;105;93; + + + + + 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; + + +`,_T=` 105;110;116;91;93;32;110;111;116;101;110;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -55439,7 +57263,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,k8=` +`,jT=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;90;97;104;108;63;34; @@ -55451,7 +57275,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;115;32;81;117;97;100;114;97;116;32;105;115;116;32;34;32;43;32;113; -`,S8=` +`,CT=` 105;110;116;32;101;114;103;101;98;110;105;115;32;61;32;120;32;42;32;120; @@ -55460,7 +57284,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;101;114;103;101;98;110;105;115; -`,T8=` +`,AT=` 122;101;105;103;101;84;105;116;101;108;40;41; @@ -55472,7 +57296,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;34;32;43;32;110;97;109;101; -`,_8=` +`,PT=` 111;117;116;112;117;116;58;32;34;87;105;108;108;107;111;109;109;101;110;32;122;117;109;32;81;117;105;122;33;34; @@ -55481,7 +57305,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;117;32;98;101;107;111;109;109;115;116;32;100;114;101;105;32;70;114;97;103;101;110;46;34; -`,C8=` +`,OT=` 122;101;105;103;101;83;117;109;109;101;40;51;44;32;52;41; @@ -55493,7 +57317,7 @@ lösung: vb-wald-loesung.visustruct 122;101;105;103;101;83;117;109;109;101;40;120;44;32;120;32;43;32;49;41; -`,A8=` +`,DT=` 105;110;116;32;115;117;109;109;101;32;61;32;97;32;43;32;98; @@ -55502,7 +57326,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;117;109;109;101; -`,j8=` +`,MT=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;119;101;114;116;34; @@ -55525,7 +57349,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;33;34; -`,O8=` +`,BT=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;119;101;114;116;34; @@ -55548,7 +57372,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;34; -`,P8=` +`,ZT=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -55570,7 +57394,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;58;32;34;32;43;32;115;117;109;109;101; -`,M8=` +`,LT=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -55592,7 +57416,25 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;58;32;34;32;43;32;115;117;109;109;101; -`,D8=` +`,WT=` + + + 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; + + + 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;44;32;82;117;110;100;101;32;49;58;32;34;32;43;32;112;117;110;107;116;101;91;49;93;91;48;93; + + +`,ET=` + + + 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; + + + 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;44;32;82;117;110;100;101;32;49;58;32;34;32;43;32;80;117;110;107;116;101;91;49;93;91;48;93; + + +`,NT=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -55621,7 +57463,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,Z8=` +`,FT=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -55644,7 +57486,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,B8=` +`,JT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -55666,7 +57508,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,L8=` +`,RT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -55688,7 +57530,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,W8=` +`,GT=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -55720,7 +57562,7 @@ lösung: vb-wald-loesung.visustruct -`,E8=` +`,HT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -55742,7 +57584,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;107;117;108;116;97;101;116; -`,N8=` +`,VT=` 83;116;114;105;110;103;32;98;114;105;101;102;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;98;114;105;101;102;46;116;120;116;34;41;41; @@ -55774,13 +57616,13 @@ lösung: vb-wald-loesung.visustruct -`,J8=` +`,qT=` 83;116;114;105;110;103;32;98;114;105;101;102;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;98;114;105;101;102;46;116;120;116;34;41;41; -`,F8=` +`,QT=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;63;34; @@ -55792,7 +57634,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,R8=` +`,UT=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;63;34; @@ -55804,7 +57646,25 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,G8=` +`,$T=` + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;104;97;116;32;34;32;43;32;110;97;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;66;117;99;104;115;116;97;98;101;110;34; + + +`,YT=` + + + 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;104;97;116;32;34;32;43;32;110;97;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;66;117;99;104;115;116;97;98;101;110;34; + + +`,XT=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;101;105;110;103;97;98;101;32;34;80;97;115;115;119;111;114;116;63;34; @@ -55823,7 +57683,7 @@ lösung: vb-wald-loesung.visustruct -`,H8=` +`,KT=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -55852,7 +57712,7 @@ lösung: vb-wald-loesung.visustruct -`,V8=` +`,e_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;119;101;114;116;63;34; @@ -55872,7 +57732,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;100;101;34; -`,q8=` +`,t_=` 105;110;116;32;118;101;114;115;117;99;104;101;32;61;32;48; @@ -55905,7 +57765,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;115;117;99;104;101;58;32;34;32;43;32;118;101;114;115;117;99;104;101; -`,Q8=` +`,n_=` 105;110;116;32;118;101;114;115;117;99;104;101;32;61;32;48; @@ -55938,7 +57798,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;115;117;99;104;101;58;32;34;32;43;32;118;101;114;115;117;99;104;101; -`,U8=` +`,i_=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -55980,7 +57840,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;115;117;109;109;101; -`,$8=` +`,a_=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -56002,7 +57862,7 @@ lösung: vb-wald-loesung.visustruct -`,Y8=` +`,s_=` 105;110;112;117;116;58;32;105;110;116;32;103;114;101;110;122;101;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -56018,7 +57878,7 @@ lösung: vb-wald-loesung.visustruct -`,X8=` +`,r_=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -56057,7 +57917,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,K8=` +`,o_=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -56096,7 +57956,77 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,eT=` +`,l_=` + + + 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; + + + 105;110;116;32;103;101;115;117;99;104;116;32;61;32;49;49; + + + 105;110;116;32;112;111;115;105;116;105;111;110;32;61;32;45;49; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;107;97;114;116;101;110;46;108;101;110;103;116;104; + 105;43;43; + + + 107;97;114;116;101;110;91;105;93;32;61;61;32;103;101;115;117;99;104;116; + + + 112;111;115;105;116;105;111;110;32;61;32;105; + + + + + 248; + + + + + + + 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; + + +`,u_=` + + + 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; + + + 105;110;116;32;103;101;115;117;99;104;116;32;61;32;49;49; + + + 105;110;116;32;112;111;115;105;116;105;111;110;32;61;32;45;49; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;107;97;114;116;101;110;46;108;101;110;103;116;104; + 105;43;43; + + + 107;97;114;116;101;110;91;105;93;32;61;61;32;71;101;115;117;99;104;116; + + + 112;111;115;105;116;105;111;110;32;61;32;105; + + + + + 248; + + + + + + + 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; + + +`,m_=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -56131,7 +58061,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;97;110;122;97;104;108; -`,tT=` +`,c_=` 111;117;116;112;117;116;58;32;34;71;117;116;101;110;32;77;111;114;103;101;110;34; @@ -56140,13 +58070,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;117;116;101;32;108;101;114;110;101;110;32;119;105;114;32;83;116;114;117;107;116;111;103;114;97;109;109;101;46;34; -`,nT=` +`,d_=` 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;87;101;108;116;34; -`,iT=` +`,h_=` 111;117;116;112;117;116;58;32;34;72;97;108;108;111;34; @@ -56155,7 +58085,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;99;104;32;108;101;114;110;101;32;83;116;114;117;107;116;111;103;114;97;109;109;101;34; -`,aT=` +`,g_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -56175,7 +58105,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,sT=` +`,p_=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -56216,7 +58146,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108;32;43;32;34;32;90;101;105;108;101;110;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,rT=` +`,f_=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -56225,7 +58155,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;97;117;115;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;101;105;110;107;97;117;102;45;110;101;117;46;116;120;116;34;41; -`,oT=` +`,x_=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -56251,13 +58181,13 @@ lösung: vb-wald-loesung.visustruct 100;97;116;101;105;46;99;108;111;115;101;40;41; -`,lT=` +`,b_=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; -`,uT=` +`,v_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -56296,7 +58226,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;117;99;104;115;58;32;34;32;43;32;97;110;122;97;104;108; -`,mT=` +`,y_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -56305,7 +58235,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,cT=` +`,w_=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -56340,7 +58270,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;228;110;103;115;116;101;114;32;69;105;110;116;114;97;103;58;32;34;32;43;32;108;97;101;110;103;115;116;101;114; -`,dT=` +`,z_=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -56349,7 +58279,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;122;101;105;108;101;110;32;61;32;116;101;120;116;46;115;112;108;105;116;40;34;92;110;34;41; -`,hT=` +`,I_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -56403,7 +58333,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;101;115;116;101;32;78;111;116;101;32;105;110;32;69;110;103;108;105;115;99;104;58;32;34;32;43;32;98;101;115;116;101;114;78;97;109;101;32;43;32;34;32;40;34;32;43;32;98;101;115;116;101;78;111;116;101;32;43;32;34;41;34; -`,gT=` +`,k_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -56412,7 +58342,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,pT=` +`,S_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -56453,7 +58383,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;99;104;110;105;116;116;32;77;97;116;104;101;58;32;34;32;43;32;115;117;109;109;101;32;47;32;97;110;122;97;104;108; -`,fT=` +`,T_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -56462,7 +58392,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,bT=` +`,__=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -56501,7 +58431,7 @@ lösung: vb-wald-loesung.visustruct 108;101;115;101;114;46;99;108;111;115;101;40;41; -`,xT=` +`,j_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -56510,7 +58440,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,vT=` +`,C_=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;117;99;104;115;34;125; @@ -56560,7 +58490,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;110;46;108;101;110;103;116;104;32;43;32;34;32;69;105;110;116;114;228;103;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,yT=` +`,A_=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;117;99;104;115;34;125; @@ -56578,7 +58508,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,wT=` +`,P_=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -56631,7 +58561,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;122;101;105;108;101;110;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;84;105;101;114;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,zT=` +`,O_=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -56652,7 +58582,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,IT=` +`,D_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -56696,7 +58626,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108;32;43;32;34;32;83;228;116;122;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,kT=` +`,M_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -56717,7 +58647,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,ST=` +`,B_=` 111;117;116;112;117;116;58;32;34;66;101;109;45;118;105;110;100;111;34; @@ -56729,7 +58659,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;100;101;117;115;34; -`,TT=` +`,Z_=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -56748,7 +58678,7 @@ lösung: vb-wald-loesung.visustruct -`,_T=` +`,L_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;97;110;99;97;109;101;110;116;111;46;99;115;118;34;41;41; @@ -56829,7 +58759,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,CT=` +`,W_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;97;110;99;97;109;101;110;116;111;46;99;115;118;34;41;41; @@ -56838,7 +58768,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,AT=` +`,E_=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -56903,7 +58833,7 @@ lösung: vb-wald-loesung.visustruct -`,jT=` +`,N_=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;32;105;110;116;101;105;114;111;34; @@ -56929,7 +58859,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;114;105;111; -`,OT=` +`,F_=` 99;104;97;114;91;93;32;97;108;102;97;98;101;116;111;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -56983,13 +58913,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;103;114;101;100;111; -`,PT=` +`,J_=` 99;104;97;114;91;93;32;97;108;102;97;98;101;116;111;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,MT=` +`,R_=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;81;117;101;32;112;97;108;97;118;114;97;32;40;115;243;32;109;97;105;250;115;99;117;108;97;115;41;63;34; @@ -57020,7 +58950,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;103;114;101;100;111; -`,DT=` +`,G_=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;103;114;101;100;111;32;34;81;117;97;108;32;233;32;111;32;116;101;120;116;111;32;99;105;102;114;97;100;111;63;34; @@ -57051,7 +58981,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116;111; -`,ZT=` +`,H_=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -57087,7 +59017,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;115;115;111;115;58;32;34;32;43;32;112;97;115;115;111;115; -`,BT=` +`,V_=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;97;115;32;110;111;116;97;115;63;34; @@ -57115,7 +59045,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;101;100;105;97; -`,LT=` +`,q_=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;110;250;109;101;114;111;115;63;34; @@ -57152,7 +59082,7 @@ lösung: vb-wald-loesung.visustruct -`,WT=` +`,Q_=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;34; @@ -57171,7 +59101,7 @@ lösung: vb-wald-loesung.visustruct -`,ET=` +`,U_=` 99;111;110;115;116;32;100;111;117;98;108;101;32;73;86;65;32;61;32;48;46;50;51; @@ -57192,7 +59122,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;114;101;99;111;67;111;109;73;118;97; -`,NT=` +`,$_=` 105;110;116;32;112;105;110;32;61;32;48; @@ -57228,7 +59158,7 @@ lösung: vb-wald-loesung.visustruct -`,JT=` +`,Y_=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -57264,7 +59194,7 @@ lösung: vb-wald-loesung.visustruct -`,FT=` +`,X_=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;49;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -57308,7 +59238,7 @@ lösung: vb-wald-loesung.visustruct -`,RT=` +`,K_=` 98;111;111;108;101;97;110;91;93;91;93;32;109;97;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -57362,7 +59292,7 @@ lösung: vb-wald-loesung.visustruct -`,GT=` +`,ej=` 98;111;111;108;101;97;110;91;93;91;93;32;109;97;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -57389,7 +59319,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;99;111;108;117;110;97;115;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,HT=` +`,tj=` 105;110;112;117;116;58;32;105;110;116;32;112;114;97;116;111;32;34;81;117;101;32;112;114;97;116;111;63;32;40;49;44;32;50;32;111;117;32;51;41;34; @@ -57418,7 +59348,7 @@ lösung: vb-wald-loesung.visustruct -`,VT=` +`,nj=` 105;110;116;32;110;117;109;101;114;111;49;32;61;32;52; @@ -57433,7 +59363,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,qT=` +`,ij=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -57455,7 +59385,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;105;109;112;97;32;111;32;113;117;97;100;114;111;58;32;34;32;43;32;110;111;109;101;115;91;115;111;114;116;101;97;100;111;32;45;32;49;93; -`,QT=` +`,aj=` 105;110;116;32;110;117;109;101;114;111;32;61;32;52; @@ -57467,7 +59397,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;250;109;101;114;111;32;100;117;112;108;105;99;97;100;111;58;32;34;32;43;32;110;117;109;101;114;111; -`,UT=` +`,sj=` -1; @@ -57514,7 +59444,7 @@ lösung: vb-wald-loesung.visustruct -`,$T=` +`,rj=` @@ -57551,7 +59481,7 @@ lösung: vb-wald-loesung.visustruct -`,YT=` +`,oj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;99;97;98;117;108;97;114;105;111;46;99;115;118;34;41;41; @@ -57611,7 +59541,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;101;114;116;97;115;32;43;32;34;32;100;101;32;34;32;43;32;99;111;110;116;97;103;101;109;32;43;32;34;32;99;101;114;116;97;115;34; -`,XT=` +`,lj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;99;97;98;117;108;97;114;105;111;46;99;115;118;34;41;41; @@ -57620,7 +59550,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,KT=` +`,uj=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -57639,7 +59569,7 @@ lösung: vb-wald-loesung.visustruct -`,e_=` +`,mj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -57662,7 +59592,7 @@ lösung: vb-wald-loesung.visustruct 108;101;105;116;111;114;46;99;108;111;115;101;40;41; -`,t_=` +`,cj=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -57680,7 +59610,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;109;97;116;101;109;97;116;105;99;97;32;43;32;34;32;97;32;77;97;116;101;109;225;116;105;99;97;34; -`,n_=` +`,dj=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;123;92;34;110;111;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;101;115;112;101;99;105;101;92;34;58;32;92;34;99;97;98;114;97;92;34;44;32;92;34;105;100;97;100;101;92;34;58;32;54;125;44;34; @@ -57698,7 +59628,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101; -`,i_=` +`,hj=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -57718,7 +59648,7 @@ lösung: vb-wald-loesung.visustruct 102;105;99;104;101;105;114;111;46;99;108;111;115;101;40;41; -`,a_=` +`,gj=` 105;110;116;91;93;91;93;32;116;97;98;101;108;97;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -57750,7 +59680,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;101;108;97;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,s_=` +`,pj=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -57798,7 +59728,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;105;118;114;101;115;58;32;34;32;43;32;108;105;118;114;101;115; -`,r_=` +`,fj=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -57813,7 +59743,7 @@ lösung: vb-wald-loesung.visustruct 108;117;103;97;114;101;115;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,o_=` +`,xj=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -57847,7 +59777,7 @@ lösung: vb-wald-loesung.visustruct -`,l_=` +`,bj=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -57865,7 +59795,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;108;117;103;97;114;32;34;76;117;103;97;114;34; -`,u_=` +`,vj=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -57913,7 +59843,7 @@ lösung: vb-wald-loesung.visustruct -`,m_=` +`,yj=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -57937,7 +59867,37 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;108;97;32;49;44;32;108;117;103;97;114;32;50;32;118;101;110;100;105;100;111;63;32;34;32;43;32;108;117;103;97;114;101;115;91;49;93;91;50;93; -`,c_=` +`,wj=` + + + 105;110;116;32;110;117;109;101;114;111;32;61;32;52; + + + 105;110;116;32;78;117;109;101;114;111;32;61;32;54; + + + 105;110;116;32;114;101;115;117;108;116;97;100;111;32;61;32;110;117;109;101;114;111;32;42;32;78;117;109;101;114;111; + + + 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;97;100;111;58;32;34;32;43;32;114;101;115;117;108;116;97;100;111; + + +`,zj=` + + + 105;110;116;32;110;117;109;101;114;111;32;61;32;52; + + + 105;110;116;32;78;117;109;101;114;111;32;61;32;54; + + + 105;110;116;32;114;101;115;117;108;116;97;100;111;32;61;32;110;117;109;101;114;111;32;42;32;78;85;77;69;82;79; + + + 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;97;100;111;58;32;34;32;43;32;114;101;115;117;108;116;97;100;111; + + +`,Ij=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -57952,7 +59912,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;34; -`,d_=` +`,kj=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -57967,7 +59927,31 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;34; -`,h_=` +`,Sj=` + + + 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 105;110;116;32;105;100;97;100;101;32;61;32;55; + + + 111;117;116;112;117;116;58;32;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;105;100;97;100;101;32;43;32;34;32;97;110;111;115;46;34; + + +`,Tj=` + + + 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 105;110;116;32;105;100;97;100;101;32;61;32;55; + + + 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;73;100;97;100;101;32;43;32;34;32;97;110;111;115;46;34;41; + + +`,_j=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -57985,7 +59969,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;109;34; -`,g_=` +`,jj=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -58000,7 +59984,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,p_=` +`,Cj=` 105;110;116;32;110;117;109;101;114;111;32;61;32;50; @@ -58015,7 +59999,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,f_=` +`,Aj=` 111;117;116;112;117;116;58;32;110;117;109;101;114;111; @@ -58030,7 +60014,7 @@ lösung: vb-wald-loesung.visustruct 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;43;32;51; -`,b_=` +`,Pj=` 83;116;114;105;110;103;32;101;115;113;117;101;114;100;97;32;61;32;34;115;117;109;111;34; @@ -58054,7 +60038,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;114;101;105;116;97;58;32;34;32;43;32;100;105;114;101;105;116;97; -`,x_=` +`,Oj=` 83;116;114;105;110;103;32;101;115;113;117;101;114;100;97;32;61;32;34;115;117;109;111;34; @@ -58069,7 +60053,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;114;101;105;116;97;58;32;34;32;43;32;100;105;114;101;105;116;97; -`,v_=` +`,Dj=` 105;110;116;32;97;32;61;32;53; @@ -58093,7 +60077,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,y_=` +`,Mj=` 105;110;116;32;105;100;97;100;101;32;61;32;49;52; @@ -58111,7 +60095,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;109;34; -`,w_=` +`,Bj=` 105;110;116;32;109;105;110;117;116;111;115;32;61;32;49;51;53; @@ -58126,7 +60110,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;104;111;114;97;115;32;43;32;34;32;104;111;114;97;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;109;105;110;117;116;111;115;34; -`,z_=` +`,Zj=` 105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;61;32;51; @@ -58141,7 +60125,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;112;114;101;99;111;84;111;116;97;108;32;43;32;34;32;101;117;114;111;115;34; -`,I_=` +`,Lj=` 105;110;116;32;115;97;108;100;111;32;61;32;50;48; @@ -58156,7 +60140,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;116;97;58;32;34;32;43;32;115;97;108;100;111; -`,k_=` +`,Wj=` 105;110;116;32;115;97;108;100;111;32;61;32;50;48; @@ -58171,7 +60155,7 @@ lösung: vb-wald-loesung.visustruct 115;97;108;100;111;32;61;32;115;97;108;100;111;32;45;32;112;114;101;99;111; -`,S_=` +`,Ej=` 105;110;116;32;112;114;101;99;111;32;61;32;57; @@ -58186,7 +60170,37 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,T_=` +`,Nj=` + + + 105;110;116;32;102;97;116;105;97;115;32;61;32;56; + + + 105;110;116;32;112;101;115;115;111;97;115;32;61;32;52; + + + 105;110;116;32;112;111;114;80;101;115;115;111;97;32;61;32;102;97;116;105;97;115;32;47;32;112;101;115;115;111;97;115; + + + 111;117;116;112;117;116;58;32;34;67;97;100;97;32;117;109;32;114;101;99;101;98;101;32;34;32;43;32;112;111;114;80;101;115;115;111;97;32;43;32;34;32;102;97;116;105;97;115;46;34; + + +`,Fj=` + + + 105;110;116;32;102;97;116;105;97;115;32;61;32;56; + + + 105;110;116;32;112;101;115;115;111;97;115;32;61;32;52; + + + 105;110;116;32;112;111;114;80;101;115;115;111;97;32;61;32;102;97;116;105;97;115;32;47;32;112;101;115;115;111;97;115; + + + 111;117;116;112;117;116;58;32;34;67;97;100;97;32;117;109;32;114;101;99;101;98;101;32;34;32;43;32;112;111;114;112;101;115;115;111;97;32;43;32;34;32;102;97;116;105;97;115;46;34; + + +`,Jj=` 105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;61;32;55; @@ -58207,7 +60221,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;101;114;237;109;101;116;114;111;58;32;34;32;43;32;112;101;114;105;109;101;116;114;111; -`,__=` +`,Rj=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -58222,7 +60236,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;117;116;111;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;101;103;117;110;100;111;115;34; -`,C_=` +`,Gj=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -58231,7 +60245,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;117;116;111;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;101;103;117;110;100;111;115;34; -`,A_=` +`,Hj=` 105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;61;32;53; @@ -58246,7 +60260,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;114;101;97; -`,j_=` +`,Vj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;67;111;109;111;32;116;101;32;99;104;97;109;97;115;63;34; @@ -58255,7 +60269,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;108;225;32;34;32;43;32;110;111;109;101;32;43;32;34;33;34; -`,O_=` +`,qj=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -58270,7 +60284,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,P_=` +`,Qj=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -58282,7 +60296,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,M_=` +`,Uj=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -58294,7 +60308,25 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;97;32;43;32;98; -`,D_=` +`,$j=` + + + 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; + + + 111;117;116;112;117;116;58;32;34;78;111;32;112;114;243;120;105;109;111;32;97;110;111;32;116;101;110;115;32;34;32;43;32;40;105;100;97;100;101;32;43;32;49;41; + + +`,Yj=` + + + 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; + + + 111;117;116;112;117;116;58;32;34;78;111;32;112;114;243;120;105;109;111;32;97;110;111;32;116;101;110;115;32;34;32;43;32;40;73;100;97;100;101;32;43;32;49;41; + + +`,Xj=` 105;110;112;117;116;58;32;105;110;116;32;97;110;111;115;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -58306,7 +60338,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;227;111;32;99;101;114;99;97;32;100;101;32;34;32;43;32;100;105;97;115;32;43;32;34;32;100;105;97;115;46;34; -`,Z_=` +`,Kj=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -58321,7 +60353,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;233;100;105;97;58;32;34;32;43;32;109;101;100;105;97; -`,B_=` +`,eC=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -58342,7 +60374,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;116;111;58;32;34;32;43;32;112;114;111;100;117;116;111; -`,L_=` +`,tC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -58361,7 +60393,7 @@ lösung: vb-wald-loesung.visustruct -`,W_=` +`,nC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;63;34; @@ -58383,7 +60415,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,E_=` +`,iC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;63;34; @@ -58402,7 +60434,7 @@ lösung: vb-wald-loesung.visustruct -`,N_=` +`,aC=` 105;110;116;32;112;111;110;116;111;115;32;61;32;48; @@ -58420,7 +60452,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,J_=` +`,sC=` 105;110;116;32;112;111;110;116;111;115;32;61;32;48; @@ -58438,7 +60470,37 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,F_=` +`,rC=` + + + 105;110;116;32;112;111;110;116;111;115;32;61;32;49;48; + + + 105;110;116;32;98;111;110;117;115;32;61;32;53; + + + 112;111;110;116;111;115;32;61;32;112;111;110;116;111;115;32;43;32;98;111;110;117;115; + + + 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; + + +`,oC=` + + + 105;110;116;32;112;111;110;116;111;115;32;61;32;49;48; + + + 112;111;110;116;111;115;32;61;32;112;111;110;116;111;115;32;43;32;98;111;110;117;115; + + + 105;110;116;32;98;111;110;117;115;32;61;32;53; + + + 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; + + +`,lC=` 105;110;116;32;112;114;101;99;111;32;61;32;56; @@ -58456,7 +60518,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,R_=` +`,uC=` 105;110;116;32;112;114;101;99;111;32;61;32;56; @@ -58474,7 +60536,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,G_=` +`,mC=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -58496,7 +60558,7 @@ lösung: vb-wald-loesung.visustruct -`,H_=` +`,cC=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;101;99;111;32;34;80;114;101;231;111;32;101;109;32;101;117;114;111;115;63;34; @@ -58518,7 +60580,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;32;112;97;103;97;114;58;32;34;32;43;32;112;114;101;99;111;32;43;32;34;32;101;117;114;111;115;34; -`,V_=` +`,dC=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;78;111;116;97;63;34; @@ -58537,7 +60599,7 @@ lösung: vb-wald-loesung.visustruct -`,q_=` +`,hC=` 105;110;112;117;116;58;32;105;110;116;32;112;111;110;116;111;115;32;34;81;117;97;110;116;111;115;32;112;111;110;116;111;115;63;34; @@ -58556,7 +60618,7 @@ lösung: vb-wald-loesung.visustruct -`,Q_=` +`,gC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;101;32;105;100;97;100;101;32;116;101;110;115;63;34; @@ -58575,7 +60637,7 @@ lösung: vb-wald-loesung.visustruct -`,U_=` +`,pC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;101;32;105;100;97;100;101;32;116;101;110;115;63;34; @@ -58594,7 +60656,45 @@ lösung: vb-wald-loesung.visustruct -`,$_=` +`,fC=` + + + 105;110;116;32;105;100;97;100;101;32;61;32;49;53; + + + 105;100;97;100;101;32;62;61;32;49;54; + + + 111;117;116;112;117;116;58;32;34;80;111;100;101;32;101;110;116;114;97;114;34; + + + + + 111;117;116;112;117;116;58;32;34;78;227;111;32;112;111;100;101;32;101;110;116;114;97;114;34; + + + + +`,xC=` + + + 105;110;116;32;105;100;97;100;101;32;61;32;49;53; + + + 73;100;97;100;101;32;62;61;32;49;54; + + + 111;117;116;112;117;116;58;32;34;80;111;100;101;32;101;110;116;114;97;114;34; + + + + + 111;117;116;112;117;116;58;32;34;78;227;111;32;112;111;100;101;32;101;110;116;114;97;114;34; + + + + +`,bC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -58613,7 +60713,7 @@ lösung: vb-wald-loesung.visustruct -`,Y_=` +`,vC=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;78;111;116;97;63;34; @@ -58632,7 +60732,7 @@ lösung: vb-wald-loesung.visustruct -`,X_=` +`,yC=` 105;110;112;117;116;58;32;105;110;116;32;97;110;111;32;34;65;110;111;63;34; @@ -58651,7 +60751,7 @@ lösung: vb-wald-loesung.visustruct -`,K_=` +`,wC=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;68;105;97;32;40;49;32;97;32;55;41;63;34; @@ -58670,7 +60770,7 @@ lösung: vb-wald-loesung.visustruct -`,eC=` +`,zC=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;99;111;114;32;34;68;101;32;113;117;101;32;99;111;114;32;101;115;116;225;32;111;32;115;101;109;225;102;111;114;111;63;34; @@ -58699,7 +60799,7 @@ lösung: vb-wald-loesung.visustruct -`,tC=` +`,IC=` 105;110;112;117;116;58;32;105;110;116;32;101;115;99;111;108;104;97;32;34;49;32;225;103;117;97;44;32;50;32;115;117;109;111;44;32;51;32;99;104;111;99;111;108;97;116;101;32;113;117;101;110;116;101;34; @@ -58728,7 +60828,7 @@ lösung: vb-wald-loesung.visustruct -`,nC=` +`,kC=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;81;117;101;32;100;105;97;32;40;49;32;97;32;55;41;63;34; @@ -58747,7 +60847,7 @@ lösung: vb-wald-loesung.visustruct -`,iC=` +`,SC=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;81;117;101;32;100;105;97;32;40;49;32;97;32;55;41;63;34; @@ -58766,7 +60866,45 @@ lösung: vb-wald-loesung.visustruct -`,aC=` +`,TC=` + + + 105;110;116;32;100;105;97;32;61;32;55; + + + 100;105;97;32;61;61;32;54;32;124;124;32;100;105;97;32;61;61;32;55; + + + 111;117;116;112;117;116;58;32;34;115;101;109;32;101;115;99;111;108;97;34; + + + + + 111;117;116;112;117;116;58;32;34;101;115;99;111;108;97;34; + + + + +`,_C=` + + + 105;110;116;32;100;105;97;32;61;32;55; + + + 100;105;97;32;61;61;32;54;32;124;124;32;68;105;97;32;61;61;32;55; + + + 111;117;116;112;117;116;58;32;34;115;101;109;32;101;115;99;111;108;97;34; + + + + + 111;117;116;112;117;116;58;32;34;101;115;99;111;108;97;34; + + + + +`,jC=` 105;110;112;117;116;58;32;105;110;116;32;104;111;114;97;32;34;81;117;101;32;104;111;114;97;115;32;115;227;111;32;40;115;243;32;97;32;104;111;114;97;41;63;34; @@ -58785,7 +60923,7 @@ lösung: vb-wald-loesung.visustruct -`,sC=` +`,CC=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;81;117;101;32;110;111;116;97;63;34; @@ -58824,7 +60962,7 @@ lösung: vb-wald-loesung.visustruct -`,rC=` +`,AC=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -58871,7 +61009,7 @@ lösung: vb-wald-loesung.visustruct -`,oC=` +`,PC=` 105;110;112;117;116;58;32;105;110;116;32;101;115;99;111;108;104;97;32;34;49;32;225;103;117;97;44;32;50;32;115;117;109;111;44;32;51;32;99;104;111;99;111;108;97;116;101;32;113;117;101;110;116;101;34; @@ -58910,7 +61048,7 @@ lösung: vb-wald-loesung.visustruct -`,lC=` +`,OC=` 80;244;114;32;117;109;97;32;99;104;225;118;101;110;97;32;110;97;32;109;101;115;97; @@ -58940,7 +61078,7 @@ lösung: vb-wald-loesung.visustruct 66;101;98;101;114;32;111;32;99;104;225; -`,uC=` +`,DC=` 76;101;118;97;110;116;97;114; @@ -58955,7 +61093,7 @@ lösung: vb-wald-loesung.visustruct 84;111;109;97;114;32;111;32;112;101;113;117;101;110;111;45;97;108;109;111;231;111; -`,mC=` +`,MC=` 69;110;99;104;101;114;32;97;32;99;104;97;108;101;105;114;97;32;99;111;109;32;225;103;117;97; @@ -58976,7 +61114,7 @@ lösung: vb-wald-loesung.visustruct 84;105;114;97;114;32;97;32;115;97;113;117;101;116;97;32;100;101;32;99;104;225; -`,cC=` +`,BC=` 69;115;116;225;32;97;32;99;104;111;118;101;114;63; @@ -58995,7 +61133,7 @@ lösung: vb-wald-loesung.visustruct 83;97;105;114; -`,dC=` +`,ZC=` 80;114;97;116;111;32;110;227;111;32;118;97;122;105;111; @@ -59009,7 +61147,7 @@ lösung: vb-wald-loesung.visustruct 76;101;118;97;110;116;97;114;32;111;32;112;114;97;116;111; -`,hC=` +`,LC=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;67;111;110;116;97;114;32;97;116;233;63;34; @@ -59029,7 +61167,7 @@ lösung: vb-wald-loesung.visustruct -`,gC=` +`,WC=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -59049,7 +61187,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,pC=` +`,EC=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -59066,7 +61204,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,fC=` +`,NC=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;116;111;114;105;97;108;32;100;101;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -59092,7 +61230,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;116;111;114;105;97;108; -`,bC=` +`,FC=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -59127,7 +61265,7 @@ lösung: vb-wald-loesung.visustruct -`,xC=` +`,JC=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -59162,7 +61300,55 @@ lösung: vb-wald-loesung.visustruct -`,vC=` +`,RC=` + + + 105;110;116;32;110;111;116;97;32;61;32;50; + + + 110;111;116;97; + + + 111;117;116;112;117;116;58;32;34;109;117;105;116;111;32;98;111;109;34; + + + + + 111;117;116;112;117;116;58;32;34;98;111;109;34; + + + + + 111;117;116;112;117;116;58;32;34;99;111;110;116;105;110;117;97;32;97;32;112;114;97;116;105;99;97;114;34; + + + + +`,GC=` + + + 105;110;116;32;110;111;116;97;32;61;32;50; + + + 78;111;116;97; + + + 111;117;116;112;117;116;58;32;34;109;117;105;116;111;32;98;111;109;34; + + + + + 111;117;116;112;117;116;58;32;34;98;111;109;34; + + + + + 111;117;116;112;117;116;58;32;34;99;111;110;116;105;110;117;97;32;97;32;112;114;97;116;105;99;97;114;34; + + + + +`,HC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;110;250;109;101;114;111;63;34; @@ -59191,7 +61377,7 @@ lösung: vb-wald-loesung.visustruct -`,yC=` +`,VC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -59214,7 +61400,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;97;115;115;111;115; -`,wC=` +`,qC=` 105;110;116;32;110;117;109;101;114;111;32;61;32;48; @@ -59231,7 +61417,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;98;114;105;103;97;100;111;33;34; -`,zC=` +`,QC=` 105;110;116;32;105;32;61;32;49;48; @@ -59248,7 +61434,7 @@ lösung: vb-wald-loesung.visustruct -`,IC=` +`,UC=` 105;110;112;117;116;58;32;105;110;116;32;111;98;106;101;116;105;118;111;32;34;79;98;106;101;116;105;118;111;63;34; @@ -59274,7 +61460,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;101;109;97;110;97;115;58;32;34;32;43;32;115;101;109;97;110;97;115; -`,kC=` +`,$C=` 105;110;112;117;116;58;32;105;110;116;32;111;98;106;101;116;105;118;111;32;34;79;98;106;101;116;105;118;111;63;34; @@ -59300,7 +61486,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;101;109;97;110;97;115;58;32;34;32;43;32;115;101;109;97;110;97;115; -`,SC=` +`,YC=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;111;110;100;101;63;34; @@ -59320,7 +61506,47 @@ lösung: vb-wald-loesung.visustruct -`,TC=` +`,XC=` + + + 105;110;116;32;110;117;109;101;114;111;32;61;32;51; + + + 110;117;109;101;114;111;32;62;32;48; + + + 111;117;116;112;117;116;58;32;110;117;109;101;114;111; + + + 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;45;32;49; + + + + + 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; + + +`,KC=` + + + 105;110;116;32;110;117;109;101;114;111;32;61;32;51; + + + 110;117;109;101;114;111;32;62;32;48; + + + 111;117;116;112;117;116;58;32;78;117;109;101;114;111; + + + 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;45;32;49; + + + + + 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; + + +`,eA=` 105;110;116;32;110;111;116;97;32;61;32;48; @@ -59337,7 +61563,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;32;116;117;97;32;110;111;116;97;58;32;34;32;43;32;110;111;116;97; -`,_C=` +`,tA=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -59360,7 +61586,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,CC=` +`,nA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -59379,7 +61605,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;33;34; -`,AC=` +`,iA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -59398,7 +61624,7 @@ lösung: vb-wald-loesung.visustruct -`,jC=` +`,aA=` 105;110;116;32;105;32;61;32;49; @@ -59411,7 +61637,7 @@ lösung: vb-wald-loesung.visustruct -`,OC=` +`,sA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -59428,7 +61654,7 @@ lösung: vb-wald-loesung.visustruct -`,PC=` +`,rA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -59445,7 +61671,47 @@ lösung: vb-wald-loesung.visustruct -`,MC=` +`,oA=` + + + 105;110;116;32;110;117;109;101;114;111;32;61;32;49; + + + 105;110;116;32;108;105;109;105;116;101;32;61;32;50;48; + + + 110;117;109;101;114;111;32;60;32;108;105;109;105;116;101; + + + 111;117;116;112;117;116;58;32;110;117;109;101;114;111; + + + 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;42;32;50; + + + + +`,lA=` + + + 105;110;116;32;110;117;109;101;114;111;32;61;32;49; + + + 105;110;116;32;108;105;109;105;116;101;32;61;32;50;48; + + + 110;117;109;101;114;111;32;60;32;76;105;109;105;116;101; + + + 111;117;116;112;117;116;58;32;110;117;109;101;114;111; + + + 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;42;32;50; + + + + +`,uA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -59462,7 +61728,7 @@ lösung: vb-wald-loesung.visustruct -`,DC=` +`,mA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -59484,7 +61750,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,ZC=` +`,cA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;81;117;97;110;116;97;115;32;108;105;110;104;97;115;63;34; @@ -59513,7 +61779,7 @@ lösung: vb-wald-loesung.visustruct -`,BC=` +`,dA=` 105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;61;32;48; @@ -59545,7 +61811,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101; -`,LC=` +`,hA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -59577,7 +61843,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101; -`,WC=` +`,gA=` 105;110;112;117;116;58;32;105;110;116;32;116;97;98;117;97;100;97;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -59593,7 +61859,7 @@ lösung: vb-wald-loesung.visustruct -`,EC=` +`,pA=` 105;110;112;117;116;58;32;105;110;116;32;116;97;98;117;97;100;97;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -59609,7 +61875,42 @@ lösung: vb-wald-loesung.visustruct -`,NC=` +`,fA=` + + + 105;110;116;32;97;108;116;117;114;97;32;61;32;48; + + + 105;110;116;32;100;101;103;114;97;117;32;61;32;49; + 100;101;103;114;97;117;32;60;61;32;53; + 100;101;103;114;97;117;43;43; + + + 97;108;116;117;114;97;32;61;32;97;108;116;117;114;97;32;43;32;50;48; + + + + + 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;99;109;34; + + +`,xA=` + + + 105;110;116;32;100;101;103;114;97;117;32;61;32;49; + 100;101;103;114;97;117;32;60;61;32;53; + 100;101;103;114;97;117;43;43; + + + 97;108;116;117;114;97;32;61;32;97;108;116;117;114;97;32;43;32;50;48; + + + + + 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;99;109;34; + + +`,bA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -59625,7 +61926,7 @@ lösung: vb-wald-loesung.visustruct -`,JC=` +`,vA=` 105;110;112;117;116;58;32;105;110;116;32;108;97;114;103;117;114;97;32;34;76;97;114;103;117;114;97;34; @@ -59657,7 +61958,7 @@ lösung: vb-wald-loesung.visustruct -`,FC=` +`,yA=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -59673,7 +61974,7 @@ lösung: vb-wald-loesung.visustruct -`,RC=` +`,wA=` 105;110;116;91;93;32;118;97;108;111;114;101;115;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -59688,7 +61989,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;97;108;111;114;101;115;46;108;101;110;103;116;104; -`,GC=` +`,zA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -59720,7 +62021,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;81;117;97;110;116;105;100;97;100;101;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,HC=` +`,IA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -59752,7 +62053,53 @@ lösung: vb-wald-loesung.visustruct -`,VC=` +`,kA=` + + + 105;110;116;32;105;32;61;32;49; + 105;32;60;61;32;49;48; + 105;43;43; + + + 105;32;37;32;50;32;61;61;32;48; + + + 111;117;116;112;117;116;58;32;105; + + + + + 248; + + + + + + +`,SA=` + + + 105;110;116;32;105;32;61;32;49; + 105;32;60;61;32;49;48; + 105;43;43; + + + 105;32;37;32;50;32;61;61;32;48; + + + 111;117;116;112;117;116;58;32;73; + + + + + 248; + + + + + + +`,TA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;81;117;97;110;116;111;115;32;100;101;103;114;97;117;115;63;34; @@ -59781,7 +62128,7 @@ lösung: vb-wald-loesung.visustruct -`,qC=` +`,_A=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -59800,7 +62147,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;105;109;101;105;114;111;32;110;111;109;101;58;32;34;32;43;32;110;111;109;101;115;91;48;93; -`,QC=` +`,jA=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -59826,7 +62173,7 @@ lösung: vb-wald-loesung.visustruct -`,UC=` +`,CA=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -59877,7 +62224,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;225;120;105;109;111;58;32;34;32;43;32;109;97;120; -`,$C=` +`,AA=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -59918,7 +62265,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;225;120;105;109;111;58;32;34;32;43;32;109;97;120; -`,YC=` +`,PA=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -59941,7 +62288,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,XC=` +`,OA=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -59971,7 +62318,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,KC=` +`,DA=` 105;110;112;117;116;58;32;105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;34;67;111;109;112;114;105;109;101;110;116;111;63;34; @@ -59986,7 +62333,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;193;114;101;97;58;32;34;32;43;32;102; -`,eA=` +`,MA=` 109;111;115;116;114;97;114;66;111;97;115;86;105;110;100;97;115;40;41; @@ -59998,7 +62345,7 @@ lösung: vb-wald-loesung.visustruct 109;111;115;116;114;97;114;82;101;115;117;108;116;97;100;111;40;41; -`,tA=` +`,BA=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;97;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -60030,7 +62377,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;109;112;101;114;97;116;117;114;97;32;109;97;105;115;32;97;108;116;97;58;32;34;32;43;32;109;97;120; -`,nA=` +`,ZA=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;97;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -60062,7 +62409,51 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;109;112;101;114;97;116;117;114;97;32;109;97;105;115;32;97;108;116;97;58;32;34;32;43;32;109;97;120; -`,iA=` +`,LA=` + + + 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; + + + 105;110;116;32;115;111;109;97;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;112;111;110;116;111;115;46;108;101;110;103;116;104; + 105;43;43; + + + 115;111;109;97;32;61;32;115;111;109;97;32;43;32;112;111;110;116;111;115;91;105;93; + + + + + 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; + + +`,WA=` + + + 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; + + + 105;110;116;32;115;111;109;97;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;112;111;110;116;111;115;46;76;101;110;103;116;104; + 105;43;43; + + + 115;111;109;97;32;61;32;115;111;109;97;32;43;32;112;111;110;116;111;115;91;105;93; + + + + + 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; + + +`,EA=` 105;110;116;91;93;32;110;111;116;97;115;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -60084,7 +62475,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,aA=` +`,NA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;110;250;109;101;114;111;63;34; @@ -60096,7 +62487,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;32;113;117;97;100;114;97;100;111;32;233;32;34;32;43;32;113; -`,sA=` +`,FA=` 105;110;116;32;114;101;115;117;108;116;97;100;111;32;61;32;120;32;42;32;120; @@ -60105,7 +62496,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;114;101;115;117;108;116;97;100;111; -`,rA=` +`,JA=` 109;111;115;116;114;97;114;84;105;116;117;108;111;40;41; @@ -60117,7 +62508,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;108;225;32;34;32;43;32;110;111;109;101; -`,oA=` +`,RA=` 111;117;116;112;117;116;58;32;34;66;101;109;45;118;105;110;100;111;32;97;111;32;113;117;105;122;33;34; @@ -60126,7 +62517,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;97;105;115;32;116;101;114;32;116;114;234;115;32;112;101;114;103;117;110;116;97;115;46;34; -`,lA=` +`,GA=` 109;111;115;116;114;97;114;83;111;109;97;40;51;44;32;52;41; @@ -60138,7 +62529,7 @@ lösung: vb-wald-loesung.visustruct 109;111;115;116;114;97;114;83;111;109;97;40;120;44;32;120;32;43;32;49;41; -`,uA=` +`,HA=` 105;110;116;32;115;111;109;97;32;61;32;97;32;43;32;98; @@ -60147,7 +62538,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;111;109;97; -`,mA=` +`,VA=` 105;110;112;117;116;58;32;105;110;116;32;105;110;105;99;105;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;34; @@ -60170,7 +62561,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;33;34; -`,cA=` +`,qA=` 105;110;112;117;116;58;32;105;110;116;32;105;110;105;99;105;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;34; @@ -60193,7 +62584,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;34; -`,dA=` +`,QA=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -60215,7 +62606,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;58;32;34;32;43;32;115;111;109;97; -`,hA=` +`,UA=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -60237,7 +62628,25 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;58;32;34;32;43;32;115;111;109;97; -`,gA=` +`,$A=` + + + 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; + + + 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;44;32;114;111;110;100;97;32;49;58;32;34;32;43;32;112;111;110;116;111;115;91;49;93;91;48;93; + + +`,YA=` + + + 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; + + + 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;44;32;114;111;110;100;97;32;49;58;32;34;32;43;32;80;111;110;116;111;115;91;49;93;91;48;93; + + +`,XA=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -60266,7 +62675,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,pA=` +`,KA=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -60289,7 +62698,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,fA=` +`,eP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -60311,7 +62720,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,bA=` +`,tP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -60333,7 +62742,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,xA=` +`,nP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -60365,7 +62774,7 @@ lösung: vb-wald-loesung.visustruct -`,vA=` +`,iP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;34; @@ -60387,7 +62796,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;116;111;114;105;97;108; -`,yA=` +`,aP=` 83;116;114;105;110;103;32;99;97;114;116;97;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;99;97;114;116;97;46;116;120;116;34;41;41; @@ -60419,13 +62828,13 @@ lösung: vb-wald-loesung.visustruct -`,wA=` +`,sP=` 83;116;114;105;110;103;32;99;97;114;116;97;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;99;97;114;116;97;46;116;120;116;34;41;41; -`,zA=` +`,rP=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;63;34; @@ -60437,7 +62846,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,IA=` +`,oP=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;63;34; @@ -60449,7 +62858,25 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,kA=` +`,lP=` + + + 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;116;101;109;32;34;32;43;32;110;111;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;114;97;115;34; + + +`,uP=` + + + 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; + + + 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;116;101;109;32;34;32;43;32;110;111;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;114;97;115;34; + + +`,mP=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;101;110;116;114;97;100;97;32;34;80;97;108;97;118;114;97;45;112;97;115;115;101;63;34; @@ -60468,7 +62895,7 @@ lösung: vb-wald-loesung.visustruct -`,SA=` +`,cP=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -60497,7 +62924,7 @@ lösung: vb-wald-loesung.visustruct -`,TA=` +`,dP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;63;34; @@ -60517,7 +62944,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;109;34; -`,_A=` +`,hP=` 105;110;116;32;116;101;110;116;97;116;105;118;97;115;32;61;32;48; @@ -60550,7 +62977,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;110;116;97;116;105;118;97;115;58;32;34;32;43;32;116;101;110;116;97;116;105;118;97;115; -`,CA=` +`,gP=` 105;110;116;32;116;101;110;116;97;116;105;118;97;115;32;61;32;48; @@ -60583,7 +63010,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;110;116;97;116;105;118;97;115;58;32;34;32;43;32;116;101;110;116;97;116;105;118;97;115; -`,AA=` +`,pP=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -60625,7 +63052,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;115;111;109;97; -`,jA=` +`,fP=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -60647,7 +63074,7 @@ lösung: vb-wald-loesung.visustruct -`,OA=` +`,xP=` 105;110;112;117;116;58;32;105;110;116;32;108;105;109;105;116;101;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -60663,7 +63090,7 @@ lösung: vb-wald-loesung.visustruct -`,PA=` +`,bP=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -60702,7 +63129,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,MA=` +`,vP=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -60741,7 +63168,77 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,DA=` +`,yP=` + + + 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; + + + 105;110;116;32;112;114;111;99;117;114;97;100;97;32;61;32;49;49; + + + 105;110;116;32;112;111;115;105;99;97;111;32;61;32;45;49; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;99;97;114;116;97;115;46;108;101;110;103;116;104; + 105;43;43; + + + 99;97;114;116;97;115;91;105;93;32;61;61;32;112;114;111;99;117;114;97;100;97; + + + 112;111;115;105;99;97;111;32;61;32;105; + + + + + 248; + + + + + + + 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; + + +`,wP=` + + + 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; + + + 105;110;116;32;112;114;111;99;117;114;97;100;97;32;61;32;49;49; + + + 105;110;116;32;112;111;115;105;99;97;111;32;61;32;45;49; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;99;97;114;116;97;115;46;108;101;110;103;116;104; + 105;43;43; + + + 99;97;114;116;97;115;91;105;93;32;61;61;32;80;114;111;99;117;114;97;100;97; + + + 112;111;115;105;99;97;111;32;61;32;105; + + + + + 248; + + + + + + + 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; + + +`,zP=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -60776,7 +63273,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;81;117;97;110;116;105;100;97;100;101;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,ZA=` +`,IP=` 111;117;116;112;117;116;58;32;34;66;111;109;32;100;105;97;34; @@ -60785,13 +63282,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;111;106;101;32;97;112;114;101;110;100;101;109;111;115;32;101;115;116;114;117;116;111;103;114;97;109;97;115;46;34; -`,BA=` +`,kP=` 111;117;116;112;117;116;58;32;34;79;108;225;32;77;117;110;100;111;34; -`,LA=` +`,SP=` 111;117;116;112;117;116;58;32;34;79;108;225;34; @@ -60800,7 +63297,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;115;116;111;117;32;97;32;97;112;114;101;110;100;101;114;32;101;115;116;114;117;116;111;103;114;97;109;97;115;34; -`,WA=` +`,TP=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -60841,7 +63338,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101;32;43;32;34;32;108;105;110;104;97;115;32;103;117;97;114;100;97;100;97;115;34; -`,EA=` +`,_P=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -60850,7 +63347,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;115;97;105;100;97;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;99;111;109;112;114;97;115;45;110;111;118;97;46;116;120;116;34;41; -`,NA=` +`,jP=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -60876,13 +63373,13 @@ lösung: vb-wald-loesung.visustruct 102;105;99;104;101;105;114;111;46;99;108;111;115;101;40;41; -`,JA=` +`,CP=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; -`,FA=` +`,AP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -60921,7 +63418,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;97;112;111;115;97;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,RA=` +`,PP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -60930,7 +63427,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,GA=` +`,OP=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -60965,7 +63462,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;116;114;97;100;97;32;109;97;105;115;32;108;111;110;103;97;58;32;34;32;43;32;109;97;105;115;76;111;110;103;97; -`,HA=` +`,DP=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -60974,7 +63471,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;108;105;110;104;97;115;32;61;32;116;101;120;116;111;46;115;112;108;105;116;40;34;92;110;34;41; -`,VA=` +`,MP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -61028,7 +63525,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;101;108;104;111;114;32;110;111;116;97;32;97;32;73;110;103;108;234;115;58;32;34;32;43;32;109;101;108;104;111;114;78;111;109;101;32;43;32;34;32;40;34;32;43;32;109;101;108;104;111;114;78;111;116;97;32;43;32;34;41;34; -`,qA=` +`,BP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -61037,7 +63534,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,QA=` +`,ZP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -61078,7 +63575,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;233;100;105;97;32;100;101;32;77;97;116;101;109;225;116;105;99;97;58;32;34;32;43;32;115;111;109;97;32;47;32;113;117;97;110;116;105;100;97;100;101; -`,UA=` +`,LP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -61087,7 +63584,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,$A=` +`,WP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -61126,7 +63623,7 @@ lösung: vb-wald-loesung.visustruct 108;101;105;116;111;114;46;99;108;111;115;101;40;41; -`,YA=` +`,EP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -61135,7 +63632,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,XA=` +`,NP=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;82;97;112;111;115;97;34;125; @@ -61185,7 +63682,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;115;46;108;101;110;103;116;104;32;43;32;34;32;101;110;116;114;97;100;97;115;32;103;117;97;114;100;97;100;97;115;34; -`,KA=` +`,FP=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;82;97;112;111;115;97;34;125; @@ -61203,7 +63700,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,ej=` +`,JP=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -61256,7 +63753,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;108;105;110;104;97;115;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;97;110;105;109;97;105;115;32;103;117;97;114;100;97;100;111;115;34; -`,tj=` +`,RP=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -61277,7 +63774,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,nj=` +`,GP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -61321,7 +63818,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101;32;43;32;34;32;102;114;97;115;101;115;32;103;117;97;114;100;97;100;97;115;34; -`,ij=` +`,HP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -61342,7 +63839,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,aj=` +`,VP=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;98;105;108;104;101;116;101;115;63;34; @@ -61354,7 +63851,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,sj=` +`,qP=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;98;105;108;104;101;116;101;115;63;34; @@ -61366,7 +63863,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;116;111;116;97;108;32;61;32;113;117;97;110;116;105;100;97;100;101;32;42;32;56;46;53; -`,rj=` +`,QP=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -61390,7 +63887,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,oj=` +`,UP=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -61411,7 +63908,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,lj=` +`,$P=` 105;110;116;32;97;32;61;32;51; @@ -61435,7 +63932,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,uj=` +`,YP=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -61494,7 +63991,7 @@ lösung: vb-wald-loesung.visustruct -`,mj=` +`,XP=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -61553,7 +64050,7 @@ lösung: vb-wald-loesung.visustruct -`,cj=` +`,KP=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -61627,7 +64124,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;97;231;245;101;115;58;32;34;32;43;32;99;111;109;112;97;114;97;99;111;101;115; -`,dj=` +`,eO=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -61676,7 +64173,7 @@ lösung: vb-wald-loesung.visustruct -`,hj=` +`,tO=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -61725,7 +64222,7 @@ lösung: vb-wald-loesung.visustruct -`,gj=` +`,nO=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -61783,7 +64280,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;97;231;245;101;115;58;32;34;32;43;32;99;111;109;112;97;114;97;99;111;101;115; -`,pj=` +`,iO=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -61802,7 +64299,7 @@ lösung: vb-wald-loesung.visustruct -`,fj=` +`,aO=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -61821,7 +64318,7 @@ lösung: vb-wald-loesung.visustruct -`,bj=` +`,sO=` 105;110;116;32;105;32;61;32;48; @@ -61834,7 +64331,7 @@ lösung: vb-wald-loesung.visustruct -`,xj=` +`,rO=` 105;110;116;32;110;117;109;101;114;111;32;61;32;53; @@ -61858,7 +64355,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;101;112;111;105;115;58;32;34;32;43;32;102;105;108;97;91;48;93;32;43;32;34;44;32;34;32;43;32;102;105;108;97;91;49;93; -`,vj=` +`,oO=` 105;110;116;32;105;32;61;32;48; @@ -61871,7 +64368,7 @@ lösung: vb-wald-loesung.visustruct -`,yj=` +`,lO=` 120;32;61;32;120;32;42;32;50; @@ -61880,7 +64377,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;111;32;115;117;98;112;114;111;103;114;97;109;97;58;32;120;32;61;32;34;32;43;32;120; -`,wj=` +`,uO=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;34; @@ -61892,7 +64389,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,zj=` +`,mO=` 83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;61;32;34;80;97;115;115;97;116;101;109;112;111;34; @@ -61931,7 +64428,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,Ij=` +`,cO=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;112;97;108;97;118;114;97;34; @@ -61953,7 +64450,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;105;110;118;101;114;116;105;100;97; -`,kj=` +`,dO=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;76;117;100;119;105;103;59;98;111;100;101;59;55;34; @@ -61972,7 +64469,7 @@ lösung: vb-wald-loesung.visustruct -`,Sj=` +`,hO=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;114;97;115;101;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;102;114;97;115;101;34; @@ -61984,7 +64481,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;108;97;118;114;97;115;58;32;34;32;43;32;112;97;108;97;118;114;97;115;46;108;101;110;103;116;104; -`,Tj=` +`,gO=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;112;97;108;97;118;114;97;34; @@ -62016,7 +64513,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;250;109;101;114;111;32;100;101;32;97;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,_j=` +`,pO=` 83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;61;32;34;80;97;115;115;97;116;101;109;112;111;34; @@ -62040,7 +64537,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;97;108;97;118;114;97;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,Cj=` +`,fO=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;75;97;114;116;101;110;63;34; @@ -62052,7 +64549,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,Aj=` +`,xO=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;75;97;114;116;101;110;63;34; @@ -62064,7 +64561,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;103;101;115;97;109;116;32;61;32;97;110;122;97;104;108;32;42;32;56;46;53; -`,jj=` +`,bO=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -62088,7 +64585,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,Oj=` +`,vO=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -62109,7 +64606,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,Pj=` +`,yO=` 105;110;116;32;97;32;61;32;51; @@ -62133,7 +64630,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,Mj=` +`,wO=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -62192,7 +64689,7 @@ lösung: vb-wald-loesung.visustruct -`,Dj=` +`,zO=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -62251,7 +64748,7 @@ lösung: vb-wald-loesung.visustruct -`,Zj=` +`,IO=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -62325,7 +64822,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;103;108;101;105;99;104;101;58;32;34;32;43;32;118;101;114;103;108;101;105;99;104;101; -`,Bj=` +`,kO=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -62374,7 +64871,7 @@ lösung: vb-wald-loesung.visustruct -`,Lj=` +`,SO=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -62423,7 +64920,7 @@ lösung: vb-wald-loesung.visustruct -`,Wj=` +`,TO=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -62481,7 +64978,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;103;108;101;105;99;104;101;58;32;34;32;43;32;118;101;114;103;108;101;105;99;104;101; -`,Ej=` +`,_O=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;51;44;32;53;44;32;56;125; @@ -62500,7 +64997,7 @@ lösung: vb-wald-loesung.visustruct -`,Nj=` +`,jO=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;51;44;32;53;44;32;56;125; @@ -62519,7 +65016,7 @@ lösung: vb-wald-loesung.visustruct -`,Jj=` +`,CO=` 105;110;116;32;105;32;61;32;48; @@ -62532,7 +65029,7 @@ lösung: vb-wald-loesung.visustruct -`,Fj=` +`,AO=` 105;110;116;32;122;97;104;108;32;61;32;53; @@ -62556,7 +65053,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;97;99;104;104;101;114;58;32;34;32;43;32;114;101;105;104;101;91;48;93;32;43;32;34;44;32;34;32;43;32;114;101;105;104;101;91;49;93; -`,Rj=` +`,PO=` 105;110;116;32;105;32;61;32;48; @@ -62569,7 +65066,7 @@ lösung: vb-wald-loesung.visustruct -`,Gj=` +`,OO=` 120;32;61;32;120;32;42;32;50; @@ -62578,7 +65075,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;109;32;85;110;116;101;114;112;114;111;103;114;97;109;109;58;32;120;32;61;32;34;32;43;32;120; -`,Hj=` +`,DO=` 105;110;116;32;97;98;115;116;97;110;100;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; @@ -62587,7 +65084,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;98;115;116;97;110;100;58;32;34;32;43;32;97;98;115;116;97;110;100;32;43;32;34;32;99;109;34;41; -`,Vj=` +`,MO=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; @@ -62613,7 +65110,7 @@ lösung: vb-wald-loesung.visustruct -`,qj=` +`,BO=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -62640,7 +65137,7 @@ lösung: vb-wald-loesung.visustruct -`,Qj=` +`,ZO=` 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; @@ -62658,7 +65155,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; -`,Uj=` +`,LO=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -62688,7 +65185,7 @@ lösung: vb-wald-loesung.visustruct -`,$j=` +`,WO=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;72;97;108;108;111;33;34;41; @@ -62700,7 +65197,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;99;104;32;98;105;110;32;86;105;115;117;66;111;116;34;41; -`,Yj=` +`,EO=` 105;110;116;32;122;97;104;108;32;61;32;48; @@ -62752,7 +65249,7 @@ lösung: vb-wald-loesung.visustruct -`,Xj=` +`,NO=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -62763,7 +65260,7 @@ lösung: vb-wald-loesung.visustruct -`,Kj=` +`,FO=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -62774,7 +65271,7 @@ lösung: vb-wald-loesung.visustruct -`,eO=` +`,JO=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -62785,7 +65282,7 @@ lösung: vb-wald-loesung.visustruct -`,tO=` +`,RO=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;86;105;115;117;66;111;116;34; @@ -62804,7 +65301,7 @@ lösung: vb-wald-loesung.visustruct -`,nO=` +`,GO=` 109;98;111;116;46;108;101;100;40;48;41;46;115;101;116;67;111;108;111;114;40;34;114;111;116;34;41; @@ -62816,7 +65313,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;108;101;100;40;52;41;46;115;101;116;67;111;108;111;114;40;34;103;114;252;110;34;41; -`,iO=` +`,HO=` 105;110;116;32;105;32;61;32;48; @@ -62832,7 +65329,7 @@ lösung: vb-wald-loesung.visustruct -`,aO=` +`,VO=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;97;117;34;41; @@ -62860,7 +65357,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;101;112;97;114;107;116;33;34;41; -`,sO=` +`,qO=` 83;116;114;105;110;103;91;93;32;102;97;114;98;101;110;32;61;32;123;34;114;111;116;34;44;32;34;103;101;108;98;34;44;32;34;103;114;252;110;34;44;32;34;98;108;97;117;34;44;32;34;108;105;108;97;34;125; @@ -62876,7 +65373,7 @@ lösung: vb-wald-loesung.visustruct -`,rO=` +`,QO=` 109;98;111;116;46;103;101;116;67;111;108;111;114;40;41; @@ -62902,7 +65399,7 @@ lösung: vb-wald-loesung.visustruct -`,oO=` +`,UO=` 109;98;111;116;46;100;114;105;118;101;40;53;48;44;32;53;48;41; @@ -62919,7 +65416,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,lO=` +`,$O=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -62937,7 +65434,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,uO=` +`,YO=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -62973,7 +65470,7 @@ lösung: vb-wald-loesung.visustruct -`,mO=` +`,XO=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;107;107;117;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -62992,7 +65489,7 @@ lösung: vb-wald-loesung.visustruct -`,cO=` +`,KO=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;97;117;34;41; @@ -63016,7 +65513,7 @@ lösung: vb-wald-loesung.visustruct -`,dO=` +`,eD=` 105;110;116;32;105;32;61;32;48; @@ -63038,7 +65535,7 @@ lösung: vb-wald-loesung.visustruct -`,hO=` +`,tD=` 105;110;116;32;105;32;61;32;51; @@ -63057,7 +65554,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;76;111;115;33;34;41; -`,gO=` +`,nD=` 105;110;116;32;105;32;61;32;49; @@ -63070,7 +65567,7 @@ lösung: vb-wald-loesung.visustruct -`,pO=` +`,iD=` 105;110;116;32;105;32;61;32;48; @@ -63103,7 +65600,7 @@ lösung: vb-wald-loesung.visustruct -`,fO=` +`,aD=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -63119,7 +65616,7 @@ lösung: vb-wald-loesung.visustruct -`,bO=` +`,sD=` 105;110;116;32;105;32;61;32;48; @@ -63138,7 +65635,7 @@ lösung: vb-wald-loesung.visustruct -`,xO=` +`,rD=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -63182,7 +65679,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,vO=` +`,oD=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -63201,7 +65698,7 @@ lösung: vb-wald-loesung.visustruct -`,yO=` +`,lD=` 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; @@ -63231,7 +65728,7 @@ lösung: vb-wald-loesung.visustruct -`,wO=` +`,uD=` 105;110;116;32;108;97;101;110;103;101;32;61;32;54;48; @@ -63259,7 +65756,7 @@ lösung: vb-wald-loesung.visustruct -`,zO=` +`,mD=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;97;108;108;111;32;75;108;97;115;115;101;34; @@ -63268,7 +65765,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;116;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,IO=` +`,cD=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -63282,7 +65779,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,kO=` +`,dD=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -63298,7 +65795,7 @@ lösung: vb-wald-loesung.visustruct -`,SO=` +`,hD=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;60;32;53;48; @@ -63312,7 +65809,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,TO=` +`,gD=` 105;110;116;32;105;32;61;32;48; @@ -63347,7 +65844,7 @@ lösung: vb-wald-loesung.visustruct -`,_O=` +`,pD=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -63381,7 +65878,7 @@ lösung: vb-wald-loesung.visustruct -`,CO=` +`,fD=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -63425,7 +65922,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,AO=` +`,xD=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -63451,7 +65948,7 @@ lösung: vb-wald-loesung.visustruct -`,jO=` +`,bD=` 105;110;116;91;93;32;116;111;101;110;101;32;61;32;123;50;54;50;44;32;50;57;52;44;32;51;51;48;44;32;51;52;57;44;32;51;57;50;125; @@ -63467,7 +65964,7 @@ lösung: vb-wald-loesung.visustruct -`,OO=` +`,vD=` 105;110;116;32;105;32;61;32;48; @@ -63533,7 +66030,7 @@ lösung: vb-wald-loesung.visustruct -`,PO=` +`,yD=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -63549,7 +66046,7 @@ lösung: vb-wald-loesung.visustruct -`,MO=` +`,wD=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; @@ -63566,7 +66063,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;90;122;122;34;41; -`,DO=` +`,zD=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101; @@ -63595,7 +66092,7 @@ lösung: vb-wald-loesung.visustruct -`,ZO=` +`,ID=` 105;110;116;32;97;32;61;32;113;117;97;100;114;97;116;122;97;104;108;40;51;41; @@ -63610,13 +66107,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,BO=` +`,kD=` 114;101;116;117;114;110;32;120;32;42;32;120; -`,LO=` +`,SD=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;76;117;100;119;105;103;34; @@ -63638,7 +66135,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;117;101;99;107;119;97;101;114;116;115; -`,WO=` +`,TD=` 105;110;116;32;108;97;101;110;103;101;32;61;32;54;48; @@ -63653,7 +66150,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;114;101;99;107;101;58;32;34;32;43;32;115;116;114;101;99;107;101;32;43;32;34;32;99;109;34; -`,EO=` +`,_D=` 105;110;116;91;93;32;110;111;116;101;110;32;61;32;123;50;44;32;49;44;32;51;44;32;50;125; @@ -63678,7 +66175,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;110;111;116;101;110;46;108;101;110;103;116;104; -`,NO=` +`,jD=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -63753,7 +66250,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,JO=` +`,CD=` 113;117;97;100;114;97;116;40;51;48;41; @@ -63762,7 +66259,7 @@ lösung: vb-wald-loesung.visustruct 113;117;97;100;114;97;116;40;53;48;41; -`,FO=` +`,AD=` 105;110;116;32;105;32;61;32;48; @@ -63817,7 +66314,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,RO=` +`,PD=` 105;110;116;32;105;32;61;32;48; @@ -63833,7 +66330,7 @@ lösung: vb-wald-loesung.visustruct -`,GO=` +`,OD=` 105;110;116;32;105;32;61;32;48; @@ -63856,7 +66353,7 @@ lösung: vb-wald-loesung.visustruct -`,HO=` +`,DD=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -63870,7 +66367,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; -`,VO=` +`,MD=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;50;48;32;124;124;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;45;50;48; @@ -63886,7 +66383,7 @@ lösung: vb-wald-loesung.visustruct -`,qO=` +`,BD=` 105;110;116;32;105;32;61;32;48; @@ -63938,7 +66435,7 @@ lösung: vb-wald-loesung.visustruct -`,QO=` +`,ZD=` 105;110;116;32;105;32;61;32;49; @@ -63954,7 +66451,7 @@ lösung: vb-wald-loesung.visustruct -`,UO=` +`,LD=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41; @@ -63968,7 +66465,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,$O=` +`,WD=` 109;98;111;116;46;112;108;97;121;84;111;110;101;40;50;54;50;44;32;51;48;48;41; @@ -63986,7 +66483,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;51;57;50;44;32;51;48;48;41; -`,YO=` +`,ED=` 105;110;116;32;105;32;61;32;48; @@ -64008,7 +66505,7 @@ lösung: vb-wald-loesung.visustruct -`,XO=` +`,ND=` 105;110;116;32;108;105;110;107;115;32;61;32;57;57; @@ -64040,7 +66537,7 @@ lösung: vb-wald-loesung.visustruct -`,KO=` +`,FD=` 105;110;116;32;115;101;105;116;101;32;61;32;51;48; @@ -64059,7 +66556,7 @@ lösung: vb-wald-loesung.visustruct -`,eP=` +`,JD=` 105;110;116;32;105;32;61;32;48; @@ -64092,7 +66589,7 @@ lösung: vb-wald-loesung.visustruct -`,tP=` +`,RD=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -64131,7 +66628,7 @@ lösung: vb-wald-loesung.visustruct -`,nP=` +`,GD=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -64147,7 +66644,7 @@ lösung: vb-wald-loesung.visustruct -`,iP=` +`,HD=` 109;98;111;116;46;114;101;115;101;116;84;105;109;101;114;40;41; @@ -64167,7 +66664,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,aP=` +`,VD=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;34; @@ -64179,7 +66676,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,sP=` +`,qD=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;90;105;101;103;101;110;98;111;99;107;34; @@ -64218,7 +66715,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,rP=` +`,QD=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;111;114;116;32;101;105;110;103;101;98;101;110;34; @@ -64240,7 +66737,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;117;101;99;107;119;97;101;114;116;115; -`,oP=` +`,UD=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;76;117;100;119;105;103;59;71;101;105;223;98;111;99;107;59;55;34; @@ -64259,7 +66756,7 @@ lösung: vb-wald-loesung.visustruct -`,lP=` +`,$D=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;97;116;122;32;34;83;97;116;122;32;101;105;110;103;101;98;101;110;34; @@ -64271,7 +66768,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;246;114;116;101;114;58;32;34;32;43;32;119;111;101;114;116;101;114;46;108;101;110;103;116;104; -`,uP=` +`,YD=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;111;114;116;32;101;105;110;103;101;98;101;110;34; @@ -64303,7 +66800,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;32;101;58;32;34;32;43;32;97;110;122;97;104;108; -`,mP=` +`,XD=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;71;101;105;223;98;111;99;107;34; @@ -64327,14 +66824,14 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;111;114;116;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,cP=`// Labyrinth mit Ausgängen (nach Kara): jede Wandreihe hat genau eine Lücke, immer weiter rechts. Ein Zeichen = 30 cm. +`,KD=`// Labyrinth mit Ausgängen (nach Kara): jede Wandreihe hat genau eine Lücke, immer weiter rechts. Ein Zeichen = 30 cm. raster: 3 .......Z #####.## ........ ##.##### >....... -`,dP=`// Labyrinth mit Ausgängen, drei Reihen. Ein Zeichen = 30 cm. +`,eM=`// Labyrinth mit Ausgängen, drei Reihen. Ein Zeichen = 30 cm. raster: 3 ........Z ######.## @@ -64343,20 +66840,20 @@ raster: 3 ......... .######## >........ -`,hP=`// Um die Ecke (Sequenz im Kurs, Lektion 5): ein Zeichen = 30 cm. +`,tM=`// Um die Ecke (Sequenz im Kurs, Lektion 5): ein Zeichen = 30 cm. raster: 3 Z.... ###.. ..... ..### ^.... -`,gP=`// Fahre bis Rot: kurzer Weg +`,nM=`// Fahre bis Rot: kurzer Weg ..... ..r.. ..... ..... ..^.. -`,pP=`// Fahre bis Rot: erst kommt ein grünes Feld +`,iM=`// Fahre bis Rot: erst kommt ein grünes Feld ..... ..r.. ..... @@ -64365,21 +66862,21 @@ Z.... ..... ..... ..^.. -`,fP=`// Bis Blau, bei Grün piepen +`,aM=`// Bis Blau, bei Grün piepen ..... ..b.. ..... ..g.. ..... ..^.. -`,bP=`// Bis Blau, ohne grünes Feld +`,sM=`// Bis Blau, ohne grünes Feld ..... ..b.. ..... ..... ..... ..^.. -`,xP=`// Hindernis ausweichen: ein Klotz im Weg, das rote Feld liegt dahinter. +`,rM=`// Hindernis ausweichen: ein Klotz im Weg, das rote Feld liegt dahinter. ......... .....r... .....o... @@ -64390,7 +66887,7 @@ Z.... ......... ......... ..^...... -`,vP=`// Hindernis ausweichen: zwei Klötze im Weg. +`,oM=`// Hindernis ausweichen: zwei Klötze im Weg. ......... .......r. .......o. @@ -64405,7 +66902,7 @@ Z.... ......... ......... .^....... -`,yP=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben links. +`,lM=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben links. ........... .Z......... ........... @@ -64417,7 +66914,7 @@ Z.... ........... .........<. ........... -`,wP=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben rechts. +`,uM=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben rechts. ........... .........Z. ........... @@ -64429,7 +66926,7 @@ Z.... ........... .>......... ........... -`,zP=`// Linienfolger: Die Linie biegt nach rechts ab und endet vor der Wand. +`,mM=`// Linienfolger: Die Linie biegt nach rechts ab und endet vor der Wand. ######### ......... ......... @@ -64444,7 +66941,7 @@ Z.... ......... ..^...... linie: 2,12 2,8 4,5 4,0.6 -`,IP=`// Linienfolger: Die Linie biegt nach links ab und endet vor der Wand. +`,cM=`// Linienfolger: Die Linie biegt nach links ab und endet vor der Wand. ######### ......... ......... @@ -64459,7 +66956,7 @@ linie: 2,12 2,8 4,5 4,0.6 ......... ......^.. linie: 6,12 6,8 4,5 4,0.6 -`,kP=`// Linienfolger mit Stopp: Am Ende der Linie liegt ein rotes Feld. +`,dM=`// Linienfolger mit Stopp: Am Ende der Linie liegt ein rotes Feld. ......... .....r... .....o... @@ -64473,7 +66970,7 @@ linie: 6,12 6,8 4,5 4,0.6 ......... ..^...... linie: 2,11 2,8 5,4 5,1.5 -`,SP=`// Linienfolger mit Stopp: Die Linie schlängelt sich zum roten Feld. +`,hM=`// Linienfolger mit Stopp: Die Linie schlängelt sich zum roten Feld. ........... ...r....... ...o....... @@ -64489,7 +66986,7 @@ linie: 2,11 2,8 5,4 5,1.5 ........... .......^... linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 -`,TP=`// Einparken: rechts parken Autos (Klötze), die blaue Markierung zeigt die Lücke. +`,gM=`// Einparken: rechts parken Autos (Klötze), die blaue Markierung zeigt die Lücke. #....#### #....#### #....#### @@ -64502,7 +66999,7 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 #....#### #....#### #..^.#### -`,_P=`// Einparken: Die Lücke liegt weiter vorn. +`,pM=`// Einparken: Die Lücke liegt weiter vorn. #....#### #..b....# #.....o.# @@ -64515,14 +67012,14 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 #....#### #....#### #..^.#### -`,CP=`// Bis zur Linie: der schwarze Rand ist nah +`,fM=`// Bis zur Linie: der schwarze Rand ist nah ..... ===== ..... ..... ..^.. ..... -`,AP=`// Bis zur Linie: der schwarze Rand ist weiter weg +`,xM=`// Bis zur Linie: der schwarze Rand ist weiter weg ..... ===== ..... @@ -64532,17 +67029,17 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 ..... ..^.. ..... -`,jP=`// Slalom: ein Zeichen = 30 cm. Vier Pylonen, abwechselnd oben und unten herum, Ziel am Ende. +`,bM=`// Slalom: ein Zeichen = 30 cm. Vier Pylonen, abwechselnd oben und unten herum, Ziel am Ende. raster: 3 ......... >#.#.#.#Z ......... -`,OP=`// Tunnelsucher (nach Kara): Halt im ersten Feld mit Wand links UND rechts (hellgrün). Ein Zeichen = 30 cm. +`,vM=`// Tunnelsucher (nach Kara): Halt im ersten Feld mit Wand links UND rechts (hellgrün). Ein Zeichen = 30 cm. raster: 3 ..#..###. >....o... ....##### -`,PP=`// Tunnelsucher, nach oben. Ein Zeichen = 30 cm. +`,yM=`// Tunnelsucher, nach oben. Ein Zeichen = 30 cm. raster: 3 .#.#. .#o#. @@ -64550,12 +67047,12 @@ raster: 3 .#... ..... ..^.. -`,MP=`// Kleeblatt im Wald (nach Kara): Bäume liegen auf dem Weg zum Ziel, nie zwei nebeneinander. Ein Zeichen = 30 cm. +`,wM=`// Kleeblatt im Wald (nach Kara): Bäume liegen auf dem Weg zum Ziel, nie zwei nebeneinander. Ein Zeichen = 30 cm. raster: 3 .......... >..#.#..#Z .......... -`,DP=`// Kleeblatt im Wald, nach oben. Ein Zeichen = 30 cm. +`,zM=`// Kleeblatt im Wald, nach oben. Ein Zeichen = 30 cm. raster: 3 .Z. .#. @@ -64564,7 +67061,7 @@ raster: 3 ... ... .^. -`,ZP=`// Wand vorn? Vor dem mBot2 ist viel Platz. +`,IM=`// Wand vorn? Vor dem mBot2 ist viel Platz. ##### ..... ..... @@ -64574,14 +67071,14 @@ raster: 3 ..... ..^.. ..... -`,BP=`// Bis zur Wand: kurzer Weg +`,kM=`// Bis zur Wand: kurzer Weg ##### ..... ..Z.. ..... ..... ..^.. -`,LP=`// Bis zur Wand: langer Weg +`,SM=`// Bis zur Wand: langer Weg ##### ..... ..Z.. @@ -64597,7 +67094,7 @@ raster: 3 ..... ..... ..^.. -`,WP=`// Bis zur Wand: mittlerer Weg +`,TM=`// Bis zur Wand: mittlerer Weg ##### ..... ..Z.. @@ -64608,26 +67105,26 @@ raster: 3 ..... ..... ..^.. -`,EP=`// Wand vorn? Die Wand steht direkt vor dem mBot2. +`,_M=`// Wand vorn? Die Wand steht direkt vor dem mBot2. ##### ..... ..^.. ..... -`,NP=`// Zwei Sekunden mit halber Kraft: Wo bleibt er stehen? +`,jM=`// Zwei Sekunden mit halber Kraft: Wo bleibt er stehen? ..... ..... ..... ..o.. ..... ..^.. -`,JP=`// Fahre bis zum Ziel: kurzer Weg, keine Wand +`,CM=`// Fahre bis zum Ziel: kurzer Weg, keine Wand ..... ..Z.. ..... ..... ..^.. ..... -`,FP=`// Fahre bis zum Ziel: langer Weg, keine Wand +`,AM=`// Fahre bis zum Ziel: langer Weg, keine Wand ..... ..Z.. ..... @@ -64640,56 +67137,57 @@ raster: 3 ..... ..^.. ..... -`,RP=""+new URL("ada-lovelace-DS_988PF.jpg",import.meta.url).href,GP=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,HP=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,VP=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,qP=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,QP=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,UP=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,$P=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,YP=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,XP="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlB1dCBhIGN1cCBvbiB0aGUgdGFibGU8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjEzMyI+U3VnYXIgd2FudGVkPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5BZGQgc3VnYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+VGVhIHN0aWxsIHRvbyBob3Q/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+V2FpdCAxIG1pbnV0ZTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5EcmluayB0aGUgdGVhPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIzOTUiPkVuZDwvdGV4dD4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZm9udC13ZWlnaHQ9IjYwMCI+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjE2OCIgZmlsbD0iIzI0OGEzZCI+eWVzPC90ZXh0PgogICAgPHRleHQgeD0iMjQyIiB5PSIxMjIiIGZpbGw9IiNkNzAwMTUiPm5vPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPnllczwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMzIwIiBmaWxsPSIjZDcwMDE1Ij5ubzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5TdGFydCBvciBlbmQ8L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ0MyI+U3RhdGVtZW50PC90ZXh0PgogICAgPHRleHQgeD0iODYiIHk9IjQ3MyI+RGVjaXNpb248L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ3MyI+SW5wdXQgb3Igb3V0cHV0PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",KP="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",eM=""+new URL("l03-lochkarte-beschriftet-BjBFZjzb.svg",import.meta.url).href,tM=""+new URL("l03-lochkarte-BB3rWQOm.svg",import.meta.url).href,nM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjg4IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByaWNlPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlc8L3RzcGFuPml0aDx0c3BhbiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj5UPC90c3Bhbj5heDwvdGV4dD4KPGxpbmUgeDE9IjE4MiIgeTE9IjU0IiB4Mj0iMTgyIiB5Mj0iODIiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIvPgo8bGluZSB4MT0iMjc4IiB5MT0iNTQiIHgyPSIyNzgiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxwYXRoIGQ9Ik0yMCAyNzIgSDQ0MCIgc3Ryb2tlPSIjZTVkM2IwIiBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTU2IDE3MiBMMTUwIDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTE1MCAyMjYgTDE1NiAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxNjEiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMyOCAxNzIgTDMzMiAyMjYiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMzIgMjI2IEwzMjggMjYyIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMzMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzMzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0xMjAgMTQwIEMxMDQgMTUwIDEwNCAxNzYgMTEwIDE5NiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8ZWxsaXBzZSBjeD0iMTEwIiBjeT0iMjAwIiByeD0iNSIgcnk9IjkiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNzIgQzEwOCAxNTIgMTE0IDEyOCAxMzQgMTIyIEMxNDggMTIwIDE1NCA4NCAxODIgODQgQzIxMCA4NCAyMDggMTI2IDIzMCAxMjQgQzI1MiAxMjYgMjUwIDg0IDI3OCA4NCBDMzA2IDg0IDMwOCAxMjIgMzE4IDEyOCBDMzQwIDEzMiAzNDggMTU4IDM2NCAxNTggQzM3NiAxNTggMzc4IDEyNCAzODIgMTEwIEMzODYgOTggNDAwIDk2IDQxMiA5OSBDNDI0IDEwMiA0MzAgMTA4IDQyOCAxMTYgQzQyNiAxMjMgNDE0IDEyNCA0MDQgMTIyIEMzOTYgMTIyIDM5NCAxMjggMzk0IDEzNiBDMzk0IDE2MiAzODggMTg0IDM2NiAxODYgQzM1MCAxODggMzQwIDE4MiAzMzAgMTc4IEMyNjAgMTg4IDIwMCAxODggMTQwIDE4MiBDMTMwIDE4MCAxMjQgMTc3IDEyMCAxNzIgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTM0IDE3MiBMMTI4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTEyOCAyMjYgTDEzNCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTI4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxMzkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMwOCAxNzIgTDMxMiAyMjYiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMTIgMjI2IEwzMDggMjYyIiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMxMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzEzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0zOTAgMTAzIEwzODYgOTIgTDM5OCAxMDAgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGNpcmNsZSBjeD0iNDA2IiBjeT0iMTA3IiByPSIzLjIiIGZpbGw9IiMxYzFjMWUiLz4KPHBhdGggZD0iTTQwMSAxMDQgUTQwNiAxMDEgNDExIDEwNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDIyIDEwNyBxNCAxIDUgNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDE2IDExOSBRNDIyIDExOCA0MjcgMTE3IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPgo=",iM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",aM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",sM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",rM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",oM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",lM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",uM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4ob25seSBvbmNlKTwvdHNwYW4+PC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNzYiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSIxNyIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY2hlY2sgdGhlIGNvbmRpdGlvbjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjEzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIxNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoiBydW4gdGhlIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBzdGVwLCBlLmcuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+YmFjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50byDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZG9uZTwvdGV4dD4KPC9zdmc+Cg==",mM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtYmVycyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5JbmRleDwvdGV4dD4KICA8dGV4dCB4PSI5MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjA8L3RleHQ+PHJlY3QgeD0iNjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iOTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj4yPC90ZXh0PgogIDx0ZXh0IHg9IjE1MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjE8L3RleHQ+PHJlY3QgeD0iMTIwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjQ8L3RleHQ+CiAgPHRleHQgeD0iMjEwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MjwvdGV4dD48cmVjdCB4PSIxODAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjEwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NjwvdGV4dD4KICA8dGV4dCB4PSIyNzAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4zPC90ZXh0PjxyZWN0IHg9IjI0MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNzAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj44PC90ZXh0PgogIDx0ZXh0IHg9IjMzMCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjQ8L3RleHQ+PHJlY3QgeD0iMzAwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMzMCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjEwPC90ZXh0PgogIDx0ZXh0IHg9IjIwIiB5PSI5MCIgZmlsbD0iIzZlNmU3MyIgZm9udC1zaXplPSIxMiI+VmFsdWU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+PGxpbmUgeDE9IjkwIiB5MT0iMTQwIiB4Mj0iOTAiIHkyPSIxMTIiLz48bGluZSB4MT0iMzMwIiB5MT0iMTQwIiB4Mj0iMzMwIiB5Mj0iMTEyIi8+PC9nPgogIDxnIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dGV4dCB4PSI5MCIgeT0iMTU2Ij5udW1iZXJzWzBdIGlzIDI8L3RleHQ+PHRleHQgeD0iMzMwIiB5PSIxNTYiPm51bWJlcnNbNF0gaXMgMTA8L3RleHQ+PC9nPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj41IHNsb3RzLCBjb3VudGluZyBzdGFydHMgYXQgMDogdGhlIGxhc3QgaW5kZXggaXMgNC48L3RleHQ+Cjwvc3ZnPgo=",cM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGF0b3IuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPnNvdXJjZSBjb2RlIGluIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTU4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjYjkxYzFjIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxlIGFnYWluPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmZvciBldmVyeSBzeXN0ZW08L3RleHQ+Cjwvc3ZnPgo=",dM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRpbWVzVGFibGUuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5zb3VyY2UgY29kZSwgZm9yIHBlb3BsZTwvdGV4dD4KICA8cmVjdCB4PSIxMTAiIHk9IjEwNCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXdlaWdodD0iNjAwIj5UaW1lc1RhYmxlLmNsYXNzPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMTQzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5ieXRlY29kZTogQ0EgRkUgQkEgQkUg4oCmPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iMTAyIi8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iODAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIyMjAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIzNjAiIHkyPSIxOTYiLz4KICA8L2c+CiAgPHRleHQgeD0iMjMwIiB5PSI4NiI+Y29tcGlsZXIgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPldyaXRlIG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnJ1biBhbnl3aGVyZTwvdGV4dD4KPC9zdmc+Cg==",hM=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,gM=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,pM=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,fM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Mb29raW5nIGZvciB0aGUgOS4gVGhlIGNhcmRzIGFyZSBtaXhlZCB1cC48L3RleHQ+CjxnPjxyZWN0IHg9IjE0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIzNC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij43PC90ZXh0Pjx0ZXh0IHg9IjM0LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjZGMyNjI2Ij7imaU8L3RleHQ+PC9nPgo8dGV4dCB4PSIzNC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMzQuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4xLjwvdGV4dD4KPGc+PHJlY3QgeD0iNjIiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjgyLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjM8L3RleHQ+PHRleHQgeD0iODIuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZoDwvdGV4dD48L2c+Cjx0ZXh0IHg9IjgyLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSI4Mi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjIuPC90ZXh0Pgo8Zz48cmVjdCB4PSIxMTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjEzMC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij4xMDwvdGV4dD48dGV4dCB4PSIxMzAuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpjwvdGV4dD48L2c+Cjx0ZXh0IHg9IjEzMC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTMwLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+My48L3RleHQ+CjxnPjxyZWN0IHg9IjE1OCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTc4LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjU8L3RleHQ+PHRleHQgeD0iMTc4LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaM8L3RleHQ+PC9nPgo8dGV4dCB4PSIxNzguMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjQuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyMDYiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMyIvPjx0ZXh0IHg9IjIyNi4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj45PC90ZXh0Pjx0ZXh0IHg9IjIyNi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iMjI2LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzE1ODAzZCI+4pyTPC90ZXh0Pgo8dGV4dCB4PSIyMjYuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj41LjwvdGV4dD4KPGc+PHJlY3QgeD0iMjU0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIyNTgiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjMwMiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzA2IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8Zz48cmVjdCB4PSIzNTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjM1NCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPHRleHQgeD0iMTQiIHk9IjE2OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+VHVybiB0aGVtIG92ZXIgZnJvbSBsZWZ0IHRvIHJpZ2h0OjwvdGV4dD48dGV4dCB4PSIxNCIgeT0iMTg4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5BZnRlciA1IGNvbXBhcmlzb25zIHRoZSA5IGlzIGZvdW5kLjwvdGV4dD4KPC9zdmc+Cg==",bM=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,xM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPkNhbGwgYnkgdmFsdWU6IGEgY29weTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1iZXI8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZG91YmxlSXQ8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb3B5PC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTUwIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj54IGJlY29tZXMgMTAsIGJ1dCBudW1iZXIgc3RheXMgNS48L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNjgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPkxpa2UgYSBwaG90b2NvcHk6IHdyaXRpbmcgb24gdGhlIGNvcHk8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPmRvZXMgbm90IGNoYW5nZSB0aGUgb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5DYWxsIGJ5IHJlZmVyZW5jZTogdGhlIHNhbWUgYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+cm93PC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5jbGVhcjwvdGV4dD4KPHRleHQgeD0iMjYwIiB5PSIzMDAiPnNlYXRzPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5UaGVyZSBpcyBvbmx5IG9uZSBhcnJheS4gV2hhdCBjbGVhciBjaGFuZ2VzIHRocm91Z2ggc2VhdHMsPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDM0IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj50aGUgbWFpbiBwcm9ncmFtIHNlZXMgdW5kZXIgcm93LjwvdGV4dD4KPC9zdmc+Cg==",vM=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,yM=""+new URL("grace-hopper-DltOT1I5.jpg",import.meta.url).href,wM=""+new URL("hedy-lamarr-MFZMAlPQ.jpg",import.meta.url).href,zM=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,IM=""+new URL("katherine-johnson-k17EjVTs.jpg",import.meta.url).href,kM=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,SM=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,TM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlRhc3NlIGF1ZiBkZW4gVGlzY2ggc3RlbGxlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5adWNrZXIgZ2V3w7xuc2NodD88L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjE5NCI+WnVja2VyIGhpbmVpbmdlYmVuPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIyODUiPlRlZSBub2NoIHp1IGhlacOfPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjMyNy41IiB5PSIyODUiPjEgTWludXRlIHdhcnRlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5UZWUgdHJpbmtlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzk1Ij5FbmRlPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5qYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MiIgeT0iMTIyIiBmaWxsPSIjZDcwMDE1Ij5uZWluPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPmphPC90ZXh0PgogICAgPHRleHQgeD0iMTU2IiB5PSIzMjAiIGZpbGw9IiNkNzAwMTUiPm5laW48L3RleHQ+CiAgPC9nPgogIDwhLS0gTGVnZW5kZSAtLT4KICA8bGluZSB4MT0iMTAiIHkxPSI0MTgiIHgyPSIzOTAiIHkyPSI0MTgiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxnIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHJlY3QgeD0iNDAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiByeD0iOSIgZmlsbD0iI2QxZjJkOSIvPgogICAgPHJlY3QgeD0iMjIwIiB5PSI0MzAiIHdpZHRoPSIzNiIgaGVpZ2h0PSIxOCIgZmlsbD0iI2U1ZjBmZiIvPgogICAgPHBhdGggZD0iTTU4IDQ1OCBMNzYgNDY5IEw1OCA0ODAgTDQwIDQ2OSBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8cGF0aCBkPSJNMjI2IDQ2MCBMMjU2IDQ2MCBMMjUwIDQ3OCBMMjIwIDQ3OCBaIiBmaWxsPSIjZjJlNmZmIi8+CiAgPC9nPgogIDxnIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiMzYTNhM2MiPgogICAgPHRleHQgeD0iODYiIHk9IjQ0MyI+U3RhcnQgb2RlciBFbmRlPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NDMiPkFud2Vpc3VuZzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPlZlcnp3ZWlndW5nPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVpbi0gb2RlciBBdXNnYWJlPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",_M="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",CM=""+new URL("l03-lochkarte-beschriftet-7hmU_7ct.svg",import.meta.url).href,AM=""+new URL("l03-lochkarte-gzfFEatc.svg",import.meta.url).href,jM=""+new URL("l03-zuse-lochstreifen-B87kqGex.svg",import.meta.url).href,OM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMzM2IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWlzPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPk08L3RzcGFuPml0PHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlM8L3RzcGFuPnRldWVyPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",PM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",MM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",DM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGlua3M8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+U2FmdDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aGlsZjwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bGVlcjwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cmVjaHRzPC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5XYXNzZXI8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iNzAiIHk9IjI0NyI+MTogaGlsZiA9IGxpbmtzPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNDciPjI6IGxpbmtzID0gcmVjaHRzPC90ZXh0PgogICAgPHRleHQgeD0iMzMwIiB5PSIyNDciPjM6IHJlY2h0cyA9IGhpbGY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",ZM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",BM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMTkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+CiAgPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIxOTAiIGZpbGw9IiNmZmZmZmYiLz4KICA8cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmE8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmI8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIyMjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmEgJmFtcDsmYW1wOyBiPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjM1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNzAwIj5hIHx8IGI8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPiFhPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0NiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSI2MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjE0MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyNjAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIzNDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjM4MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjEwMCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzMDAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjExMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjE4MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTQyIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMjIwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8bGluZSB4MT0iMTgwIiB5MT0iMTQiIHgyPSIxODAiIHkyPSIxNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIzIi8+Cjwvc3ZnPgo=",LM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",WM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",EM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4obnVyIGVpbm1hbCk8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIEJlZGluZ3VuZyBwcsO8ZmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGiIEluaGFsdCBhdXNmw7xocmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMjAwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGjIFNjaHJpdHQsIHouIEIuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+enVyw7xjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj56dSDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZmVydGlnPC90ZXh0Pgo8L3N2Zz4K",NM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gemFobGVuID0gezIsIDQsIDYsIDgsIDEwfTwvdGV4dD4KICA8dGV4dCB4PSIyMCIgeT0iNTQiIGZpbGw9IiM2ZTZlNzMiIGZvbnQtc2l6ZT0iMTIiPkluZGV4PC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5XZXJ0PC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPjxsaW5lIHgxPSI5MCIgeTE9IjE0MCIgeDI9IjkwIiB5Mj0iMTEyIi8+PGxpbmUgeDE9IjMzMCIgeTE9IjE0MCIgeDI9IjMzMCIgeTI9IjExMiIvPjwvZz4KICA8ZyBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRleHQgeD0iOTAiIHk9IjE1NiI+emFobGVuWzBdIGlzdCAyPC90ZXh0Pjx0ZXh0IHg9IjMzMCIgeT0iMTU2Ij56YWhsZW5bNF0gaXN0IDEwPC90ZXh0PjwvZz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+NSBGw6RjaGVyLCBnZXrDpGhsdCB3aXJkIGFiIDA6IGRlciBsZXR6dGUgSW5kZXggaXN0IDQuPC90ZXh0Pgo8L3N2Zz4K",JM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPnJlY2huZXIuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPlF1ZWxsY29kZSBpbiBDKys8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSI4MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iODAiIHkxPSIxMjYiIHgyPSI4MCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxMjYiIHgyPSIyMjAiIHkyPSIxNTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjM2MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iMzYwIiB5MT0iMTI2IiB4Mj0iMzYwIiB5Mj0iMTU2Ii8+CiAgPC9nPgogIDxyZWN0IHg9IjE4IiB5PSI5NiIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzMCIgcng9IjE1IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMS41Ii8+CiAgPHRleHQgeD0iODAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjE4MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+TWFzY2hpbmVuY29kZTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iOTYiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzAiIHJ4PSIxNSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5Db21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPk1hc2NoaW5lbmNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5NYXNjaGluZW5jb2RlPC90ZXh0PgogIDxyZWN0IHg9IjI5OCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+TGludXg8L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+RsO8ciBqZWRlcyBTeXN0ZW08L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+bmV1IMO8YmVyc2V0emVuPC90ZXh0Pgo8L3N2Zz4K",FM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPkVpbm1hbGVpbnMuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5RdWVsbGNvZGUsIGbDvHIgTWVuc2NoZW48L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+RWlubWFsZWlucy5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Qnl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPkNvbXBpbGVyIGphdmFjPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMTk4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjI1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+bWFjT1M8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5FaW5tYWwgc2NocmVpYmVuLDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjMxOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj7DvGJlcmFsbCBhdXNmw7xocmVuPC90ZXh0Pgo8L3N2Zz4K",RM=""+new URL("margaret-hamilton-pYPKs1sU.jpg",import.meta.url).href,GM=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,HM=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,VM=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,qM=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,QM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5JbsOtY2lvPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSI3NiI+UMO0ciB1bWEgY2jDoXZlbmEgbmEgbWVzYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5RdWVyIGHDp8O6Y2FyPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5KdW50YXIgYcOnw7pjYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+Q2jDoSBtdWl0byBxdWVudGU/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+RXNwZXJhciAxIG1pbnV0bzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5CZWJlciBvIGNow6E8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjM5NSI+RmltPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIyNDIiIHk9IjEyMiIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MCIgeT0iMjc0IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjMyMCIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5JbsOtY2lvIG91IGZpbTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI2NiIgeT0iNDQzIj5JbnN0cnXDp8OjbzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPkRlY2lzw6NvPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVudHJhZGEgb3Ugc2HDrWRhPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",UM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",$M=""+new URL("l03-lochkarte-beschriftet-D1QjqGFo.svg",import.meta.url).href,YM=""+new URL("l03-lochkarte-BSn6oWaS.svg",import.meta.url).href,XM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjY0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWNvPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkM8L3RzcGFuPm9tPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkk8L3RzcGFuPnZhPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",KM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",eD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",tD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMzAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZXNxdWVyZGE8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+c3VtbzwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YXV4PC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52YXppbzwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZGlyZWl0YTwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+w6FndWE8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iMjAwIiB5PSIyNTAiPjE6IGF1eCA9IGVzcXVlcmRhPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNjgiPjI6IGVzcXVlcmRhID0gZGlyZWl0YTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjg2Ij4zOiBkaXJlaXRhID0gYXV4PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",nD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",iD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",aD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",sD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",rD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtZXJvcyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj7DjW5kaWNlPC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5WYWxvcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj48bGluZSB4MT0iOTAiIHkxPSIxNDAiIHgyPSI5MCIgeTI9IjExMiIvPjxsaW5lIHgxPSIzMzAiIHkxPSIxNDAiIHgyPSIzMzAiIHkyPSIxMTIiLz48L2c+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0ZXh0IHg9IjkwIiB5PSIxNTYiPm51bWVyb3NbMF0gw6kgMjwvdGV4dD48dGV4dCB4PSIzMzAiIHk9IjE1NiI+bnVtZXJvc1s0XSDDqSAxMDwvdGV4dD48L2c+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPjUgcG9zacOnw7VlcywgY29udGEtc2UgYSBwYXJ0aXIgZGUgMDogbyDDumx0aW1vIMOtbmRpY2Ugw6kgNC48L3RleHQ+Cjwvc3ZnPgo=",oD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGFkb3JhLmNwcDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlIGVtIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxhZG9yPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxhciBkZSBub3ZvPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnBhcmEgY2FkYSBzaXN0ZW1hPC90ZXh0Pgo8L3N2Zz4K",lD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRhYnVhZGEuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlLCBwYXJhIHBlc3NvYXM8L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+VGFidWFkYS5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Ynl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPmNvbXBpbGFkb3IgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPkVzY3JldmVyIHVtYSB2ZXosPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmV4ZWN1dGFyIGVtIHF1YWxxdWVyIGxhZG88L3RleHQ+Cjwvc3ZnPgo=",uD=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,mD=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,cD=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,dD=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,hD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Qcm9jdXJhLXNlIG8gOS4gQXMgY2FydGFzIGVzdMOjbyBiYXJhbGhhZGFzLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5WaXJhciBkYSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YTo8L3RleHQ+PHRleHQgeD0iMTQiIHk9IjE4OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+QXDDs3MgNSBjb21wYXJhw6fDtWVzLCBvIDkgw6kgZW5jb250cmFkby48L3RleHQ+Cjwvc3ZnPgo=",gD=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,pD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlBhc3NhZ2VtIHBvciB2YWxvcjogdW1hIGPDs3BpYTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1lcm88L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZHVwbGljYXI8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggcGFzc2EgYSAxMCwgbWFzIG51bWVybyBmaWNhIDUuPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTY4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5Db21vIHVtYSBmb3RvY8OzcGlhOiBlc2NyZXZlciBuYSBjw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPm7Do28gYWx0ZXJhIG8gb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5QYXNzYWdlbSBwb3IgcmVmZXLDqm5jaWE6IG8gbWVzbW8gYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+ZmlsYTwvdGV4dD4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjMWQ0ZWQ4Ii8+CjxyZWN0IHg9IjI1MCIgeT0iMjUyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjYyIiByeD0iOCIgZmlsbD0iI2ZmZjdlZCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyNjAiIHk9IjI3MiIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+bGltcGFyPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9IjMwMCI+bHVnYXJlczwvdGV4dD4KPGNpcmNsZSBjeD0iMzkwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjYjQ1MzA5Ii8+CjxwYXRoIGQ9Ik0xNTAgMzAwIEwxNTAgMzQwIEwxNDAgMzUyIiBmaWxsPSJub25lIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI2IpIi8+CjxwYXRoIGQ9Ik0zOTAgMzAwIEwzOTAgMzQwIEwzMjIgMzU0IiBmaWxsPSJub25lIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI28pIi8+CjxyZWN0IHg9IjkwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjE1MCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyMTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMjcwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9IjEyMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTgwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQxNiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+U8OzIGjDoSB1bSBhcnJheS4gTyBxdWUgbGltcGFyIGFsdGVyYSBhdHJhdsOpcyBkZSBsdWdhcmVzLDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+byBwcm9ncmFtYSBwcmluY2lwYWwgdsOqIGVtIGZpbGEuPC90ZXh0Pgo8L3N2Zz4K",fD=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,bD=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,xD=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,vD=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,yD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5HZXN1Y2h0OiBkaWUgOS4gRGllIEthcnRlbiBzaW5kIGdlbWlzY2h0LjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5Wb24gbGlua3MgbmFjaCByZWNodHMgdW1kcmVoZW46PC90ZXh0Pjx0ZXh0IHg9IjE0IiB5PSIxODgiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiM2ZTZlNzMiPk5hY2ggNSBWZXJnbGVpY2hlbiBpc3QgZGllIDkgZ2VmdW5kZW4uPC90ZXh0Pgo8L3N2Zz4K",wD=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,zD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPldlcnTDvGJlcmdhYmU6IGVpbmUgS29waWU8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNlZmY2ZmYiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjAiIHk9IjU4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWQ0ZWQ4Ij5IYXVwdHByb2dyYW1tPC90ZXh0Pgo8dGV4dCB4PSIyMCIgeT0iOTgiPnphaGw8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+dmVyZG9wcGxlPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9Ijk4Ij54PC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMzIwIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIGZpbGw9IiM2ZTZlNzMiIHRleHQtZGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIj41PC90c3Bhbj4gPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIxMjgiIHkxPSI5MyIgeDI9IjI0OCIgeTI9IjkzIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiIG1hcmtlci1lbmQ9InVybCgjaykiLz4KPHRleHQgeD0iMjEwIiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+S29waWU8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggd2lyZCAxMCwgYWJlciB6YWhsIGJsZWlidCA1LjwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE2OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+V2llIGJlaSBlaW5lciBGb3Rva29waWU6IFdlciBhdWYgZGVyIEtvcGllIHNjaHJlaWJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE4NiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+w6RuZGVydCBkYXMgT3JpZ2luYWwgbmljaHQuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5SZWZlcmVuesO8YmVyZ2FiZTogZGFzc2VsYmUgQXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPkhhdXB0cHJvZ3JhbW08L3RleHQ+Cjx0ZXh0IHg9IjIwIiB5PSIzMDAiPnJlaWhlPC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5sZWVyZW48L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iMzAwIj5wbGFldHplPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5FcyBnaWJ0IG51ciBlaW4gQXJyYXkuIFdhcyBsZWVyZW4gw7xiZXIgcGxhZXR6ZSDDpG5kZXJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+c2llaHQgZGFzIEhhdXB0cHJvZ3JhbW0gdW50ZXIgcmVpaGUuPC90ZXh0Pgo8L3N2Zz4K",ID=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function kD(i){const e=[];for(const t of i.replace(/\r\n/g,` +`,PM=""+new URL("ada-lovelace-DS_988PF.jpg",import.meta.url).href,OM=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,DM=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,MM=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,BM=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,ZM=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,LM=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,WM=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,EM=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,NM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlB1dCBhIGN1cCBvbiB0aGUgdGFibGU8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjEzMyI+U3VnYXIgd2FudGVkPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5BZGQgc3VnYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+VGVhIHN0aWxsIHRvbyBob3Q/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+V2FpdCAxIG1pbnV0ZTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5EcmluayB0aGUgdGVhPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIzOTUiPkVuZDwvdGV4dD4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZm9udC13ZWlnaHQ9IjYwMCI+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjE2OCIgZmlsbD0iIzI0OGEzZCI+eWVzPC90ZXh0PgogICAgPHRleHQgeD0iMjQyIiB5PSIxMjIiIGZpbGw9IiNkNzAwMTUiPm5vPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPnllczwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMzIwIiBmaWxsPSIjZDcwMDE1Ij5ubzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5TdGFydCBvciBlbmQ8L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ0MyI+U3RhdGVtZW50PC90ZXh0PgogICAgPHRleHQgeD0iODYiIHk9IjQ3MyI+RGVjaXNpb248L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ3MyI+SW5wdXQgb3Igb3V0cHV0PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",FM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",JM=""+new URL("l03-lochkarte-beschriftet-BjBFZjzb.svg",import.meta.url).href,RM=""+new URL("l03-lochkarte-BB3rWQOm.svg",import.meta.url).href,GM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjg4IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByaWNlPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlc8L3RzcGFuPml0aDx0c3BhbiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj5UPC90c3Bhbj5heDwvdGV4dD4KPGxpbmUgeDE9IjE4MiIgeTE9IjU0IiB4Mj0iMTgyIiB5Mj0iODIiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIvPgo8bGluZSB4MT0iMjc4IiB5MT0iNTQiIHgyPSIyNzgiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxwYXRoIGQ9Ik0yMCAyNzIgSDQ0MCIgc3Ryb2tlPSIjZTVkM2IwIiBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTU2IDE3MiBMMTUwIDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTE1MCAyMjYgTDE1NiAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxNjEiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMyOCAxNzIgTDMzMiAyMjYiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMzIgMjI2IEwzMjggMjYyIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMzMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzMzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0xMjAgMTQwIEMxMDQgMTUwIDEwNCAxNzYgMTEwIDE5NiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8ZWxsaXBzZSBjeD0iMTEwIiBjeT0iMjAwIiByeD0iNSIgcnk9IjkiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNzIgQzEwOCAxNTIgMTE0IDEyOCAxMzQgMTIyIEMxNDggMTIwIDE1NCA4NCAxODIgODQgQzIxMCA4NCAyMDggMTI2IDIzMCAxMjQgQzI1MiAxMjYgMjUwIDg0IDI3OCA4NCBDMzA2IDg0IDMwOCAxMjIgMzE4IDEyOCBDMzQwIDEzMiAzNDggMTU4IDM2NCAxNTggQzM3NiAxNTggMzc4IDEyNCAzODIgMTEwIEMzODYgOTggNDAwIDk2IDQxMiA5OSBDNDI0IDEwMiA0MzAgMTA4IDQyOCAxMTYgQzQyNiAxMjMgNDE0IDEyNCA0MDQgMTIyIEMzOTYgMTIyIDM5NCAxMjggMzk0IDEzNiBDMzk0IDE2MiAzODggMTg0IDM2NiAxODYgQzM1MCAxODggMzQwIDE4MiAzMzAgMTc4IEMyNjAgMTg4IDIwMCAxODggMTQwIDE4MiBDMTMwIDE4MCAxMjQgMTc3IDEyMCAxNzIgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTM0IDE3MiBMMTI4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTEyOCAyMjYgTDEzNCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTI4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxMzkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMwOCAxNzIgTDMxMiAyMjYiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMTIgMjI2IEwzMDggMjYyIiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMxMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzEzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0zOTAgMTAzIEwzODYgOTIgTDM5OCAxMDAgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGNpcmNsZSBjeD0iNDA2IiBjeT0iMTA3IiByPSIzLjIiIGZpbGw9IiMxYzFjMWUiLz4KPHBhdGggZD0iTTQwMSAxMDQgUTQwNiAxMDEgNDExIDEwNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDIyIDEwNyBxNCAxIDUgNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDE2IDExOSBRNDIyIDExOCA0MjcgMTE3IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPgo=",HM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",VM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",qM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",QM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",UM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",$M="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",YM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4ob25seSBvbmNlKTwvdHNwYW4+PC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNzYiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSIxNyIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY2hlY2sgdGhlIGNvbmRpdGlvbjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjEzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIxNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoiBydW4gdGhlIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBzdGVwLCBlLmcuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+YmFjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50byDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZG9uZTwvdGV4dD4KPC9zdmc+Cg==",XM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtYmVycyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5JbmRleDwvdGV4dD4KICA8dGV4dCB4PSI5MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjA8L3RleHQ+PHJlY3QgeD0iNjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iOTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj4yPC90ZXh0PgogIDx0ZXh0IHg9IjE1MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjE8L3RleHQ+PHJlY3QgeD0iMTIwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjQ8L3RleHQ+CiAgPHRleHQgeD0iMjEwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MjwvdGV4dD48cmVjdCB4PSIxODAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjEwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NjwvdGV4dD4KICA8dGV4dCB4PSIyNzAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4zPC90ZXh0PjxyZWN0IHg9IjI0MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNzAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj44PC90ZXh0PgogIDx0ZXh0IHg9IjMzMCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjQ8L3RleHQ+PHJlY3QgeD0iMzAwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMzMCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjEwPC90ZXh0PgogIDx0ZXh0IHg9IjIwIiB5PSI5MCIgZmlsbD0iIzZlNmU3MyIgZm9udC1zaXplPSIxMiI+VmFsdWU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+PGxpbmUgeDE9IjkwIiB5MT0iMTQwIiB4Mj0iOTAiIHkyPSIxMTIiLz48bGluZSB4MT0iMzMwIiB5MT0iMTQwIiB4Mj0iMzMwIiB5Mj0iMTEyIi8+PC9nPgogIDxnIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dGV4dCB4PSI5MCIgeT0iMTU2Ij5udW1iZXJzWzBdIGlzIDI8L3RleHQ+PHRleHQgeD0iMzMwIiB5PSIxNTYiPm51bWJlcnNbNF0gaXMgMTA8L3RleHQ+PC9nPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj41IHNsb3RzLCBjb3VudGluZyBzdGFydHMgYXQgMDogdGhlIGxhc3QgaW5kZXggaXMgNC48L3RleHQ+Cjwvc3ZnPgo=",KM="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGF0b3IuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPnNvdXJjZSBjb2RlIGluIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTU4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjYjkxYzFjIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxlIGFnYWluPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmZvciBldmVyeSBzeXN0ZW08L3RleHQ+Cjwvc3ZnPgo=",eB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRpbWVzVGFibGUuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5zb3VyY2UgY29kZSwgZm9yIHBlb3BsZTwvdGV4dD4KICA8cmVjdCB4PSIxMTAiIHk9IjEwNCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXdlaWdodD0iNjAwIj5UaW1lc1RhYmxlLmNsYXNzPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMTQzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5ieXRlY29kZTogQ0EgRkUgQkEgQkUg4oCmPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iMTAyIi8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iODAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIyMjAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIzNjAiIHkyPSIxOTYiLz4KICA8L2c+CiAgPHRleHQgeD0iMjMwIiB5PSI4NiI+Y29tcGlsZXIgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPldyaXRlIG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnJ1biBhbnl3aGVyZTwvdGV4dD4KPC9zdmc+Cg==",tB=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,nB=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,iB=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,aB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Mb29raW5nIGZvciB0aGUgOS4gVGhlIGNhcmRzIGFyZSBtaXhlZCB1cC48L3RleHQ+CjxnPjxyZWN0IHg9IjE0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIzNC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij43PC90ZXh0Pjx0ZXh0IHg9IjM0LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjZGMyNjI2Ij7imaU8L3RleHQ+PC9nPgo8dGV4dCB4PSIzNC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMzQuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4xLjwvdGV4dD4KPGc+PHJlY3QgeD0iNjIiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjgyLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjM8L3RleHQ+PHRleHQgeD0iODIuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZoDwvdGV4dD48L2c+Cjx0ZXh0IHg9IjgyLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSI4Mi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjIuPC90ZXh0Pgo8Zz48cmVjdCB4PSIxMTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjEzMC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij4xMDwvdGV4dD48dGV4dCB4PSIxMzAuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpjwvdGV4dD48L2c+Cjx0ZXh0IHg9IjEzMC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTMwLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+My48L3RleHQ+CjxnPjxyZWN0IHg9IjE1OCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTc4LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjU8L3RleHQ+PHRleHQgeD0iMTc4LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaM8L3RleHQ+PC9nPgo8dGV4dCB4PSIxNzguMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjQuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyMDYiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMyIvPjx0ZXh0IHg9IjIyNi4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj45PC90ZXh0Pjx0ZXh0IHg9IjIyNi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iMjI2LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzE1ODAzZCI+4pyTPC90ZXh0Pgo8dGV4dCB4PSIyMjYuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj41LjwvdGV4dD4KPGc+PHJlY3QgeD0iMjU0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIyNTgiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjMwMiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzA2IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8Zz48cmVjdCB4PSIzNTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjM1NCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPHRleHQgeD0iMTQiIHk9IjE2OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+VHVybiB0aGVtIG92ZXIgZnJvbSBsZWZ0IHRvIHJpZ2h0OjwvdGV4dD48dGV4dCB4PSIxNCIgeT0iMTg4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5BZnRlciA1IGNvbXBhcmlzb25zIHRoZSA5IGlzIGZvdW5kLjwvdGV4dD4KPC9zdmc+Cg==",sB=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,rB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPkNhbGwgYnkgdmFsdWU6IGEgY29weTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1iZXI8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZG91YmxlSXQ8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb3B5PC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTUwIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj54IGJlY29tZXMgMTAsIGJ1dCBudW1iZXIgc3RheXMgNS48L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNjgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPkxpa2UgYSBwaG90b2NvcHk6IHdyaXRpbmcgb24gdGhlIGNvcHk8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPmRvZXMgbm90IGNoYW5nZSB0aGUgb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5DYWxsIGJ5IHJlZmVyZW5jZTogdGhlIHNhbWUgYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+cm93PC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5jbGVhcjwvdGV4dD4KPHRleHQgeD0iMjYwIiB5PSIzMDAiPnNlYXRzPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5UaGVyZSBpcyBvbmx5IG9uZSBhcnJheS4gV2hhdCBjbGVhciBjaGFuZ2VzIHRocm91Z2ggc2VhdHMsPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDM0IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj50aGUgbWFpbiBwcm9ncmFtIHNlZXMgdW5kZXIgcm93LjwvdGV4dD4KPC9zdmc+Cg==",oB=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,lB=""+new URL("grace-hopper-DltOT1I5.jpg",import.meta.url).href,uB=""+new URL("hedy-lamarr-MFZMAlPQ.jpg",import.meta.url).href,mB=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,cB=""+new URL("katherine-johnson-k17EjVTs.jpg",import.meta.url).href,dB=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,hB=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,gB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlRhc3NlIGF1ZiBkZW4gVGlzY2ggc3RlbGxlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5adWNrZXIgZ2V3w7xuc2NodD88L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjE5NCI+WnVja2VyIGhpbmVpbmdlYmVuPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIyODUiPlRlZSBub2NoIHp1IGhlacOfPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjMyNy41IiB5PSIyODUiPjEgTWludXRlIHdhcnRlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5UZWUgdHJpbmtlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzk1Ij5FbmRlPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5qYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MiIgeT0iMTIyIiBmaWxsPSIjZDcwMDE1Ij5uZWluPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPmphPC90ZXh0PgogICAgPHRleHQgeD0iMTU2IiB5PSIzMjAiIGZpbGw9IiNkNzAwMTUiPm5laW48L3RleHQ+CiAgPC9nPgogIDwhLS0gTGVnZW5kZSAtLT4KICA8bGluZSB4MT0iMTAiIHkxPSI0MTgiIHgyPSIzOTAiIHkyPSI0MTgiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxnIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHJlY3QgeD0iNDAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiByeD0iOSIgZmlsbD0iI2QxZjJkOSIvPgogICAgPHJlY3QgeD0iMjIwIiB5PSI0MzAiIHdpZHRoPSIzNiIgaGVpZ2h0PSIxOCIgZmlsbD0iI2U1ZjBmZiIvPgogICAgPHBhdGggZD0iTTU4IDQ1OCBMNzYgNDY5IEw1OCA0ODAgTDQwIDQ2OSBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8cGF0aCBkPSJNMjI2IDQ2MCBMMjU2IDQ2MCBMMjUwIDQ3OCBMMjIwIDQ3OCBaIiBmaWxsPSIjZjJlNmZmIi8+CiAgPC9nPgogIDxnIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiMzYTNhM2MiPgogICAgPHRleHQgeD0iODYiIHk9IjQ0MyI+U3RhcnQgb2RlciBFbmRlPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NDMiPkFud2Vpc3VuZzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPlZlcnp3ZWlndW5nPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVpbi0gb2RlciBBdXNnYWJlPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",pB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",fB=""+new URL("l03-lochkarte-beschriftet-7hmU_7ct.svg",import.meta.url).href,xB=""+new URL("l03-lochkarte-gzfFEatc.svg",import.meta.url).href,bB=""+new URL("l03-zuse-lochstreifen-B87kqGex.svg",import.meta.url).href,vB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMzM2IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWlzPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPk08L3RzcGFuPml0PHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlM8L3RzcGFuPnRldWVyPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",yB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",wB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",zB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGlua3M8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+U2FmdDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aGlsZjwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bGVlcjwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cmVjaHRzPC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5XYXNzZXI8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iNzAiIHk9IjI0NyI+MTogaGlsZiA9IGxpbmtzPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNDciPjI6IGxpbmtzID0gcmVjaHRzPC90ZXh0PgogICAgPHRleHQgeD0iMzMwIiB5PSIyNDciPjM6IHJlY2h0cyA9IGhpbGY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",IB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",kB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMTkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+CiAgPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIxOTAiIGZpbGw9IiNmZmZmZmYiLz4KICA8cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmE8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmI8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIyMjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmEgJmFtcDsmYW1wOyBiPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjM1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNzAwIj5hIHx8IGI8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPiFhPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0NiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSI2MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjE0MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyNjAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIzNDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjM4MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjEwMCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzMDAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjExMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjE4MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTQyIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMjIwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8bGluZSB4MT0iMTgwIiB5MT0iMTQiIHgyPSIxODAiIHkyPSIxNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIzIi8+Cjwvc3ZnPgo=",SB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",TB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",_B="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4obnVyIGVpbm1hbCk8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIEJlZGluZ3VuZyBwcsO8ZmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGiIEluaGFsdCBhdXNmw7xocmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMjAwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGjIFNjaHJpdHQsIHouIEIuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+enVyw7xjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj56dSDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZmVydGlnPC90ZXh0Pgo8L3N2Zz4K",jB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gemFobGVuID0gezIsIDQsIDYsIDgsIDEwfTwvdGV4dD4KICA8dGV4dCB4PSIyMCIgeT0iNTQiIGZpbGw9IiM2ZTZlNzMiIGZvbnQtc2l6ZT0iMTIiPkluZGV4PC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5XZXJ0PC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPjxsaW5lIHgxPSI5MCIgeTE9IjE0MCIgeDI9IjkwIiB5Mj0iMTEyIi8+PGxpbmUgeDE9IjMzMCIgeTE9IjE0MCIgeDI9IjMzMCIgeTI9IjExMiIvPjwvZz4KICA8ZyBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRleHQgeD0iOTAiIHk9IjE1NiI+emFobGVuWzBdIGlzdCAyPC90ZXh0Pjx0ZXh0IHg9IjMzMCIgeT0iMTU2Ij56YWhsZW5bNF0gaXN0IDEwPC90ZXh0PjwvZz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+NSBGw6RjaGVyLCBnZXrDpGhsdCB3aXJkIGFiIDA6IGRlciBsZXR6dGUgSW5kZXggaXN0IDQuPC90ZXh0Pgo8L3N2Zz4K",CB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPnJlY2huZXIuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPlF1ZWxsY29kZSBpbiBDKys8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSI4MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iODAiIHkxPSIxMjYiIHgyPSI4MCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxMjYiIHgyPSIyMjAiIHkyPSIxNTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjM2MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iMzYwIiB5MT0iMTI2IiB4Mj0iMzYwIiB5Mj0iMTU2Ii8+CiAgPC9nPgogIDxyZWN0IHg9IjE4IiB5PSI5NiIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzMCIgcng9IjE1IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMS41Ii8+CiAgPHRleHQgeD0iODAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjE4MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+TWFzY2hpbmVuY29kZTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iOTYiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzAiIHJ4PSIxNSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5Db21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPk1hc2NoaW5lbmNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5NYXNjaGluZW5jb2RlPC90ZXh0PgogIDxyZWN0IHg9IjI5OCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+TGludXg8L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+RsO8ciBqZWRlcyBTeXN0ZW08L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+bmV1IMO8YmVyc2V0emVuPC90ZXh0Pgo8L3N2Zz4K",AB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPkVpbm1hbGVpbnMuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5RdWVsbGNvZGUsIGbDvHIgTWVuc2NoZW48L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+RWlubWFsZWlucy5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Qnl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPkNvbXBpbGVyIGphdmFjPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMTk4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjI1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+bWFjT1M8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5FaW5tYWwgc2NocmVpYmVuLDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjMxOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj7DvGJlcmFsbCBhdXNmw7xocmVuPC90ZXh0Pgo8L3N2Zz4K",PB=""+new URL("margaret-hamilton-pYPKs1sU.jpg",import.meta.url).href,OB=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,DB=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,MB=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,BB=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,ZB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5JbsOtY2lvPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSI3NiI+UMO0ciB1bWEgY2jDoXZlbmEgbmEgbWVzYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5RdWVyIGHDp8O6Y2FyPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5KdW50YXIgYcOnw7pjYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+Q2jDoSBtdWl0byBxdWVudGU/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+RXNwZXJhciAxIG1pbnV0bzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5CZWJlciBvIGNow6E8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjM5NSI+RmltPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIyNDIiIHk9IjEyMiIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MCIgeT0iMjc0IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjMyMCIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5JbsOtY2lvIG91IGZpbTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI2NiIgeT0iNDQzIj5JbnN0cnXDp8OjbzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPkRlY2lzw6NvPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVudHJhZGEgb3Ugc2HDrWRhPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",LB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",WB=""+new URL("l03-lochkarte-beschriftet-D1QjqGFo.svg",import.meta.url).href,EB=""+new URL("l03-lochkarte-BSn6oWaS.svg",import.meta.url).href,NB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjY0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWNvPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkM8L3RzcGFuPm9tPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkk8L3RzcGFuPnZhPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",FB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",JB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",RB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMzAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZXNxdWVyZGE8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+c3VtbzwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YXV4PC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52YXppbzwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZGlyZWl0YTwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+w6FndWE8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iMjAwIiB5PSIyNTAiPjE6IGF1eCA9IGVzcXVlcmRhPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNjgiPjI6IGVzcXVlcmRhID0gZGlyZWl0YTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjg2Ij4zOiBkaXJlaXRhID0gYXV4PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",GB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",HB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",VB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",qB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",QB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtZXJvcyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj7DjW5kaWNlPC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5WYWxvcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj48bGluZSB4MT0iOTAiIHkxPSIxNDAiIHgyPSI5MCIgeTI9IjExMiIvPjxsaW5lIHgxPSIzMzAiIHkxPSIxNDAiIHgyPSIzMzAiIHkyPSIxMTIiLz48L2c+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0ZXh0IHg9IjkwIiB5PSIxNTYiPm51bWVyb3NbMF0gw6kgMjwvdGV4dD48dGV4dCB4PSIzMzAiIHk9IjE1NiI+bnVtZXJvc1s0XSDDqSAxMDwvdGV4dD48L2c+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPjUgcG9zacOnw7VlcywgY29udGEtc2UgYSBwYXJ0aXIgZGUgMDogbyDDumx0aW1vIMOtbmRpY2Ugw6kgNC48L3RleHQ+Cjwvc3ZnPgo=",UB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGFkb3JhLmNwcDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlIGVtIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxhZG9yPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxhciBkZSBub3ZvPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnBhcmEgY2FkYSBzaXN0ZW1hPC90ZXh0Pgo8L3N2Zz4K",$B="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRhYnVhZGEuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlLCBwYXJhIHBlc3NvYXM8L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+VGFidWFkYS5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Ynl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPmNvbXBpbGFkb3IgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPkVzY3JldmVyIHVtYSB2ZXosPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmV4ZWN1dGFyIGVtIHF1YWxxdWVyIGxhZG88L3RleHQ+Cjwvc3ZnPgo=",YB=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,XB=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,KB=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,eZ=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,tZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Qcm9jdXJhLXNlIG8gOS4gQXMgY2FydGFzIGVzdMOjbyBiYXJhbGhhZGFzLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5WaXJhciBkYSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YTo8L3RleHQ+PHRleHQgeD0iMTQiIHk9IjE4OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+QXDDs3MgNSBjb21wYXJhw6fDtWVzLCBvIDkgw6kgZW5jb250cmFkby48L3RleHQ+Cjwvc3ZnPgo=",nZ=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,iZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlBhc3NhZ2VtIHBvciB2YWxvcjogdW1hIGPDs3BpYTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1lcm88L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZHVwbGljYXI8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggcGFzc2EgYSAxMCwgbWFzIG51bWVybyBmaWNhIDUuPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTY4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5Db21vIHVtYSBmb3RvY8OzcGlhOiBlc2NyZXZlciBuYSBjw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPm7Do28gYWx0ZXJhIG8gb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5QYXNzYWdlbSBwb3IgcmVmZXLDqm5jaWE6IG8gbWVzbW8gYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+ZmlsYTwvdGV4dD4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjMWQ0ZWQ4Ii8+CjxyZWN0IHg9IjI1MCIgeT0iMjUyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjYyIiByeD0iOCIgZmlsbD0iI2ZmZjdlZCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyNjAiIHk9IjI3MiIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+bGltcGFyPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9IjMwMCI+bHVnYXJlczwvdGV4dD4KPGNpcmNsZSBjeD0iMzkwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjYjQ1MzA5Ii8+CjxwYXRoIGQ9Ik0xNTAgMzAwIEwxNTAgMzQwIEwxNDAgMzUyIiBmaWxsPSJub25lIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI2IpIi8+CjxwYXRoIGQ9Ik0zOTAgMzAwIEwzOTAgMzQwIEwzMjIgMzU0IiBmaWxsPSJub25lIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI28pIi8+CjxyZWN0IHg9IjkwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjE1MCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyMTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMjcwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9IjEyMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTgwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQxNiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+U8OzIGjDoSB1bSBhcnJheS4gTyBxdWUgbGltcGFyIGFsdGVyYSBhdHJhdsOpcyBkZSBsdWdhcmVzLDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+byBwcm9ncmFtYSBwcmluY2lwYWwgdsOqIGVtIGZpbGEuPC90ZXh0Pgo8L3N2Zz4K",aZ=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,sZ=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,rZ=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,oZ=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,lZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5HZXN1Y2h0OiBkaWUgOS4gRGllIEthcnRlbiBzaW5kIGdlbWlzY2h0LjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5Wb24gbGlua3MgbmFjaCByZWNodHMgdW1kcmVoZW46PC90ZXh0Pjx0ZXh0IHg9IjE0IiB5PSIxODgiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiM2ZTZlNzMiPk5hY2ggNSBWZXJnbGVpY2hlbiBpc3QgZGllIDkgZ2VmdW5kZW4uPC90ZXh0Pgo8L3N2Zz4K",uZ=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,mZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPldlcnTDvGJlcmdhYmU6IGVpbmUgS29waWU8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNlZmY2ZmYiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjAiIHk9IjU4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWQ0ZWQ4Ij5IYXVwdHByb2dyYW1tPC90ZXh0Pgo8dGV4dCB4PSIyMCIgeT0iOTgiPnphaGw8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+dmVyZG9wcGxlPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9Ijk4Ij54PC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMzIwIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIGZpbGw9IiM2ZTZlNzMiIHRleHQtZGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIj41PC90c3Bhbj4gPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIxMjgiIHkxPSI5MyIgeDI9IjI0OCIgeTI9IjkzIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiIG1hcmtlci1lbmQ9InVybCgjaykiLz4KPHRleHQgeD0iMjEwIiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+S29waWU8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggd2lyZCAxMCwgYWJlciB6YWhsIGJsZWlidCA1LjwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE2OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+V2llIGJlaSBlaW5lciBGb3Rva29waWU6IFdlciBhdWYgZGVyIEtvcGllIHNjaHJlaWJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE4NiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+w6RuZGVydCBkYXMgT3JpZ2luYWwgbmljaHQuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5SZWZlcmVuesO8YmVyZ2FiZTogZGFzc2VsYmUgQXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPkhhdXB0cHJvZ3JhbW08L3RleHQ+Cjx0ZXh0IHg9IjIwIiB5PSIzMDAiPnJlaWhlPC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5sZWVyZW48L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iMzAwIj5wbGFldHplPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5FcyBnaWJ0IG51ciBlaW4gQXJyYXkuIFdhcyBsZWVyZW4gw7xiZXIgcGxhZXR6ZSDDpG5kZXJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+c2llaHQgZGFzIEhhdXB0cHJvZ3JhbW0gdW50ZXIgcmVpaGUuPC90ZXh0Pgo8L3N2Zz4K",cZ=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function dZ(i){const e=[];for(const t of i.replace(/\r\n/g,` `).split(` -`)){const n=/^###\s+(.+)$/.exec(t),a=e.at(-1);if(n){const s=n[1].trim();e.push({term:s,forms:[s],text:""})}else a&&/^(auch|also):/i.test(t)?a.forms.push(...t.replace(/^(auch|also):/i,"").split(",").map(s=>s.trim()).filter(Boolean)):a&&t.trim()!==""&&(a.text=(a.text+" "+t.trim()).trim())}return e.filter(t=>t.text!=="")}const SD=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function Hu(i){const e=i.flatMap(t=>t.forms).sort((t,n)=>n.length-t.length);if(e.length!==0)return new RegExp(`(?t.forms.includes(e))}class Eo extends Error{}function TD(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function _D(i,e,t){const n=h=>{throw new Eo(`${t}: ${h}`)};let a="",s="",r="",o=[],l,u;const m=[];let c,d=!1;for(const h of e){const g=h.trim();if(c&&d&&(/^ {4}|^\t/.test(h)||g==="")){c.code+=(c.code?` -`:"")+h.replace(/^( {4}|\t)/,"");continue}if(d=!1,!g)continue;const f=/^(titel|intro|antworten|frage|runde|klicks|richtig|zeit|fehler|besser|daten):\s*(.*)$/.exec(g);if(f){const[,v,w]=f;v==="runde"?(c={code:"",question:r,options:[],explanation:"",clicks:[]},m.push(c),d=!0):c?v==="frage"?c.question=w:v==="fehler"?c.wrongLine=Number(w):v==="besser"?c.fix=w:v==="klicks"?c.clicks=w.split(",").map(z=>z.trim()).filter(Boolean):v==="richtig"?c.rightText=w:n(`„${v}:“ gehört vor die erste Runde.`):v==="titel"?a=w:v==="intro"?s=w:v==="antworten"?o=w.split("|").map(z=>z.trim()):v==="frage"?r=w:v==="zeit"?l=Number(w):v==="daten"?u=w==="csv"?w:n("„daten:“ kennt nur „csv“."):n(`„${v}:“ gehört in eine Runde.`);continue}c||n(`Unbekannte Zeile vor der ersten Runde: „${g}“`);const b=c,x=/^-\s+(\[x\]\s+)?(.+)$/.exec(g);x?b.options.push({text:x[2].trim().replaceAll("\\n",` -`),right:!!x[1]}):g.startsWith(">")?b.explanation+=(b.explanation?" ":"")+g.slice(1).trim():n(`Unbekannte Zeile im Spiel: „${g}“`)}return a||n("Das Spiel braucht eine Zeile „titel:“."),m.length||n("Das Spiel braucht mindestens eine „runde:“."),m.forEach((h,g)=>{if(h.code=h.code.replace(/\n+$/,""),i==="bombe"){const f=h.code.split(` -`),b=h.wrongLine;(!b||!Number.isInteger(b)||b<1||b>f.length||!f[b-1].trim())&&n(`Runde ${g+1}: „fehler:“ muss eine Zeile des Codes sein.`),h.fix||n(`Runde ${g+1}: „besser:“ fehlt.`),h.options.length&&n(`Runde ${g+1}: Bei „bombe“ gibt es keine Antworten, man tippt auf die Zeile.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(i==="reihenfolge"){h.options.length<3&&n(`Runde ${g+1}: „reihenfolge“ braucht mindestens drei Schritte.`),h.options.some(f=>f.right)&&n(`Runde ${g+1}: Bei „reihenfolge“ gibt es kein [x], die Schritte stehen der Reihe nach da.`),new Set(h.options.map(f=>f.text)).size!==h.options.length&&n(`Runde ${g+1}: zwei Schritte sind gleich.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(h.options.length||(o.length||n(`Runde ${g+1}: keine Antworten.`),(!h.rightText||!o.includes(h.rightText))&&n(`Runde ${g+1}: „richtig:“ muss eine der Antworten sein.`),h.options=o.map(f=>({text:f,right:f===h.rightText}))),h.options.filter(f=>f.right).length!==1&&n(`Runde ${g+1}: genau eine Antwort muss richtig sein.`),h.question||n(`Runde ${g+1}: keine Frage.`),i==="layout"&&h.options.forEach(f=>eg(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=tg(h.code);for(const b of h.clicks)f.buttons.some(x=>x.caption===b)||n(`Runde ${g+1}: Knopf „${b}“ gibt es nicht.`);CD(f,h.clicks)}catch(f){if(f instanceof Eo)throw f;n(`Runde ${g+1}: ${f.message}`)}delete h.rightText}),i==="bombe"&&!(l&&l>0)&&n("„bombe“ braucht „zeit:“ mit den Sekunden je Runde."),{kind:i,title:a,intro:s,...i==="bombe"?{seconds:l,...u?{data:u}:{}}:{},rounds:m}}function eg(i,e="",t=n=>{throw new Eo(n)}){const n=/^(grid|flow|border):\s*(.+)$/.exec(i);if(!n)return t(`${e}: Antwort „${i}“ ist kein Fensterbild (grid:, flow: oder border:).`);if(n[1]==="border"){const s={};for(const r of n[2].split(/\s+/)){const o=/^([NSWEC])=(.+)$/.exec(r);o||t(`${e}: „${r}“ im BorderLayout-Bild verstehe ich nicht (z. B. N=A).`),s[o[1]]=o[2]}return{kind:"border",areas:s}}const a=n[2].split("/").map(s=>s.trim().split(/\s+/).filter(Boolean));return{kind:n[1],rows:a}}const Ra='"((?:[^"\\\\]|\\\\.)*)"';function tg(i){const e=i.split(` -`),t={title:"",buttons:[],labels:[],ints:{},listeners:[]},n=new Map,a=(r,o,l)=>{if(o.startsWith("{")){let m=r+1;const c=[];for(;m=e.length)throw new Error(`Dem Zuhörer fehlt „${l}“.`);return{from:r,to:m,statements:No(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:No(u)}},s=r=>{if(!t.buttons.some(o=>o.name===r))throw new Error(`Knopf ${r} ist nicht angelegt.`);return r};for(let r=0;r\s*(.*)$/.exec(o)){const u=a(r,l[2],"};");n.set(l[1],u),r=u.to}else if(l=/^(\w+)\.addActionListener\(\s*(\w+)\s*\)\s*;$/.exec(o)){const u=n.get(l[2]);if(!u)throw new Error(`Zuhörer ${l[2]} ist nicht angelegt.`);t.listeners.push({button:s(l[1]),...u})}else if(l=/^(\w+)\.addActionListener\(\s*\w+\s*->\s*(.*)$/.exec(o)){const u=a(r,l[2],"});");t.listeners.push({button:s(l[1]),...u}),r=u.to}}return t}function No(i){const e=[];let t=0;const n=()=>{for(;t{let u=0,m=!1;const c=t+1;for(;t{let o=0,l=!1;const u=t;for(;t{if(n(),i[t]==="{")return No(a("{","}"));if(/^if\s*\(/.test(i.slice(t))){t=i.indexOf("(",t);const l=a("(",")").trim(),u=r();n();let m=[];return/^else\b/.test(i.slice(t))&&(t+=4,m=r()),[{condition:l,then:u,otherwise:m}]}const o=s();return o?[o]:[]};for(n();ta.caption===t)??i.buttons.find(a=>e.texts[a.name]===t);if(!n)throw new Error(`Knopf „${t}“ gibt es nicht.`);return ag(i,e,n.name)}function ag(i,e,t){const n=i.listeners.find(r=>r.button===t),a=[],s={source:t,command:e.texts[t]};for(const r of(n==null?void 0:n.statements)??[])sg(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function CD(i,e){const t=ng(i);return e.map(n=>ig(i,t,n))}function sg(i,e,t,n){if(typeof i!="string"){for(const s of AD(i.condition,e,n)?i.then:i.otherwise)sg(s,e,t,n);return}let a;if(a=/^(\w+)\.setText\((.*)\)$/.exec(i)){if(!(a[1]in e.texts))throw new Error(`${a[1]} ist keine Beschriftung und kein Knopf.`);e.texts[a[1]]=String($n(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String($n(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[qu(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=qu(a[1],e),r=Number($n(a[3],e,n));e.ints[s]=a[2]==="="?r:a[2]==="+="?e.ints[s]+r:e.ints[s]-r}else throw new Error(`Diese Anweisung kann das Spiel nicht nachspielen: „${i}“`)}function AD(i,e,t){let n;if(n=/^e\.getSource\(\)\s*(==|!=)\s*(\w+)$/.exec(i)){if(!(n[2]in e.texts))throw new Error(`${n[2]} ist kein Knopf.`);return t.source===n[2]==(n[1]==="==")}if(n=/^(!?)(.+)\.equals\((.+)\)$/.exec(i))return String($n(n[2],e,t))===String($n(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number($n(n[1],e,t)),s=Number($n(n[3],e,t));return{"==":a===s,"!=":a!==s,"<=":a<=s,">=":a>=s,"<":a":a>s}[n[2]]}throw new Error(`Diese Bedingung kann das Spiel nicht nachspielen: „${i}“`)}function qu(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function $n(i,e,t){const n=i.match(new RegExp(`${Ra}|\\d+|e\\.getActionCommand\\(\\)|\\w+(?:\\.getText\\(\\))?|[-+*/()]`,"g"))??[];let a=0;const s=()=>{const l=n[a++];if(l===void 0)throw new Error(`Unvollständiger Ausdruck „${i}“`);if(l==="("){const u=o();return a++,u}if(l.startsWith('"'))return JSON.parse(l);if(/^\d+$/.test(l))return Number(l);if(l==="e.getActionCommand()"){if(!t)throw new Error("e.getActionCommand() gibt es nur im Zuhörer.");return t.command}if(l.endsWith(".getText()"))return e.texts[l.slice(0,-10)]??"";if(l in e.ints)return e.ints[l];throw new Error(`Unbekannt: „${l}“`)},r=()=>{let l=s();for(;n[a]==="*"||n[a]==="/";){const u=n[a++],m=Number(s());l=u==="*"?Number(l)*m:Math.trunc(Number(l)/m)}return l},o=()=>{let l=r();for(;n[a]==="+"||n[a]==="-";){const u=n[a++],m=r();u==="+"?l=typeof l=="string"||typeof m=="string"?`${l}${m}`:l+m:l=Number(l)-Number(m)}return l};return o()}class jD extends Error{}const xs="___";function OD(i){const e=Array.from({length:i.rows},()=>Array(i.cols).fill(""));for(const t of i.words)[...t.word].forEach((n,a)=>e[t.row+(t.across?0:a)][t.col+(t.across?a:0)]=n);return e}function PD(i,e){const t=C=>{throw new jD(`${e}: ${C}`)},n=(C,M)=>{const P=/^(\d+)\s+(\d+)$/.exec(C.trim());return!P||Number(P[1])<1||Number(P[2])<1?t(`${M}: „${C}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(P[1])-1,col:Number(P[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const C of i){const M=C.trim();if(g&&(/^( {4}|\t)/.test(C)||M==="")){const O=C.replace(/^( {4}|\t)/,"");if(g==="station"){const A=c[c.length-1];A.code+=(A.code?` -`:"")+O}else u+=(u?` -`:"")+O;continue}if(g=void 0,!M)continue;const P=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(M);if(P){const[,O,A]=P;if(O==="station")c.push({name:A,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(O==="kreuzwort")o=A,f="crossword";else if(O==="tor")l=A,f="gate",g="gate";else if(O==="titel")a=A;else if(O==="intro")s=A;else if(O==="alphabet")r=A;else if(O==="ende")m=A;else if(O==="lösung"||O==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=A.split(",").map(B=>n(B,"lösung"));else{f!=="station"&&t(`„${O}:“ gehört in eine Station.`);const B=c[c.length-1];O==="frage"?B.question=A:O==="tipp"?B.hint=A:O==="zahl"?B.answer=/^-?\d+$/.test(A)?Number(A):t(`Station „${B.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(B,n(A,`Station „${B.name}“`))}continue}if(f==="crossword"){const O=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(M);O||t(`Kreuzworträtsel: „${M}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),d.push({across:O[1]==="→",row:Number(O[2])-1,col:Number(O[3])-1,word:O[4],clue:O[5]});continue}if(f==="station"&&M.startsWith(">")){const O=c[c.length-1];O.explanation+=(O.explanation?" ":"")+M.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${M}“`)}a||t("Das Spiel braucht eine Zeile „titel:“."),c.length||t("Das Spiel braucht mindestens eine „station:“."),d.length||t("Das Spiel braucht ein „kreuzwort:“ mit Wörtern."),h.length||t("Das Kreuzworträtsel braucht eine Zeile „lösung:“."),u.includes(xs)||t(`Der Code bei „tor:“ braucht ${xs} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const b=Math.max(...d.map(C=>C.row+(C.across?1:C.word.length))),x=Math.max(...d.map(C=>C.col+(C.across?C.word.length:1))),v=Array.from({length:b},()=>Array(x).fill(""));for(const C of d)[...C.word].forEach((M,P)=>{const O=C.row+(C.across?0:P),A=C.col+(C.across?P:0);v[O][A]&&v[O][A]!==M&&t(`Kreuzworträtsel: ${C.word} passt in Zeile ${O+1}, Spalte ${A+1} nicht (dort steht ${v[O][A]}).`),v[O][A]=M});const w=[...new Set(d.map(C=>C.row*x+C.col))].sort((C,M)=>C-M),z=d.map(C=>({...C,number:w.indexOf(C.row*x+C.col)+1})),I=(C,M)=>{var P;return((P=v[C])==null?void 0:P[M])??""},k=h.map(({row:C,col:M})=>I(C,M)||t(`lösung: In Zeile ${C+1}, Spalte ${M+1} ist kein Feld.`)).join(""),T=c.map(C=>{C.code||t(`Station „${C.name}“: Code fehlt.`),C.question||t(`Station „${C.name}“: „frage:“ fehlt.`),C.answer===void 0&&t(`Station „${C.name}“: „zahl:“ fehlt.`),C.row===void 0&&t(`Station „${C.name}“: „feld:“ fehlt.`);const M=r.charAt(C.answer);M||t(`Station „${C.name}“: alphabet.charAt(${C.answer}) gibt es nicht.`);const P=I(C.row,C.col);return P!==M&&t(`Station „${C.name}“: alphabet.charAt(${C.answer}) ist ${M}, im Feld ${C.row+1} ${C.col+1} steht aber „${P}“.`),C.code=C.code.replace(/\n+$/,""),C});return{title:a,intro:s,alphabet:r,stations:T,crosswordText:o,rows:b,cols:x,words:z,solution:h,keyword:k,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const MD=/\[\[(.+?)\]\]/g;function DD(i,e){const t={title:"",task:"",blocks:[]},n=[];let a=!1;for(const s of i){if(/^\s*```/.test(s)){a||n.push([]),a=!a;continue}if(a){n[n.length-1].push(s.replace(/\s+$/,""));continue}const r=s.trim();if(!r)continue;const o=/^([a-zäöü]+):\s*(.*)$/i.exec(r);if(!o)throw new Error(`${e}: Unbekannte Zeile im Lückentext: „${r}“.`);const l=o[2].trim();switch(o[1].toLowerCase()){case"titel":t.title=l;break;case"auftrag":t.task=l;break;case"erklärung":case"erklaerung":t.explanation=l;break;default:throw new Error(`${e}: Unbekannter Schlüssel „${o[1]}“ im Lückentext.`)}}if(a)throw new Error(`${e}: Der Codeblock im Lückentext wird nicht mit \`\`\` geschlossen.`);if(!t.title)throw new Error(`${e}: Ein Lückentext braucht einen Titel.`);if(!n.some(s=>s.some(r=>r.trim())))throw new Error(`${e}: Lückentext „${t.title}“ braucht einen Codeblock.`);if(t.blocks=n.map(s=>{const r=Math.min(...s.filter(o=>o.trim()).map(o=>/^ */.exec(o)[0].length));return s.map(o=>ZD(o.slice(r),e,t.title))}),!BD(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function ZD(i,e,t){const n=[];let a=0;for(const s of i.matchAll(MD)){s.index>a&&n.push(i.slice(a,s.index));const r=s[1].split(/\s+\|\s+/).map(o=>o.trim()).filter(Boolean);if(!r.length)throw new Error(`${e}: Leere Lücke im Lückentext „${t}“.`);n.push({answers:r}),a=s.index+s[0].length}if(atypeof s=="string"&&(s.includes("[[")||s.includes("]]"))))throw new Error(`${e}: Unvollständige Lücke im Lückentext „${t}“: „${i}“.`);return n}function BD(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function LD(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}const Qu={start:"oval",ende:"oval",anweisung:"rechteck",eingabe:"parallelogramm",ausgabe:"parallelogramm",frage:"raute"};function WD(i,e){const t={title:"",task:"",nodes:[]},n=[];for(const a of i){const s=a.trim();if(!s)continue;const r=/^([a-zäöü]+):\s*(.*)$/i.exec(s);if(!r)throw new Error(`${e}: Unbekannte Zeile im PAP: „${s}“.`);const o=r[1].toLowerCase(),l=r[2].trim();if(o==="titel")t.title=l;else if(o==="auftrag")t.task=l;else if(o==="erklärung"||o==="erklaerung")t.explanation=l;else if(o==="legende")t.legend=/^(ja|yes|true|sim)$/i.test(l);else if(o in Qu){const[u,m]=l.split(/\s+\|\s+/);if(!u)throw new Error(`${e}: Leeres Element im PAP: „${s}“.`);const c={shape:Qu[o],text:u.trim()};if(t.nodes.push(c),o!=="frage"){if(m)throw new Error(`${e}: Nur eine Frage hat einen zweiten Ausgang: „${s}“.`);continue}const d=/^(ja|nein)\s*(->|:)\s*(.+)$/i.exec(m??"");if(!d)throw new Error(`${e}: Eine Frage braucht „| nein -> Text“ oder „| nein: Text“: „${s}“.`);c.sideExit=d[1].toLowerCase(),d[2]===":"?(c.side=t.nodes.length,t.nodes.push({shape:"rechteck",text:d[3].trim(),isSide:!0})):n.push({node:t.nodes.length-1,target:d[3].trim(),line:s})}else throw new Error(`${e}: Unbekannter Schlüssel „${r[1]}“ im PAP.`)}for(const a of n){const s=t.nodes.findIndex((r,o)=>o{if(n.isSide)return;const s=GD(n.shape);(i.nodes.some(r=>r.backTo===a)||n.side!==void 0)&&(t+=12),e[a]={x:ND,y:t+s/2,w:n.shape==="raute"?170:n.shape==="oval"?110:JD,h:s},n.side!==void 0&&(e[n.side]={x:FD,y:t+s/2,w:RD,h:40}),t+=s+Uu}),{boxes:e,height:t-Uu+10}}function rg(i,e){if((r=>r.length*6.6<=e)(i))return[i];const n=i.split(" ");let a=[i],s=1/0;for(let r=1;ru.length));ls.trim()).filter(Boolean)):a&&t.trim()!==""&&(a.text=(a.text+" "+t.trim()).trim())}return e.filter(t=>t.text!=="")}const hZ=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function Hu(i){const e=i.flatMap(t=>t.forms).sort((t,n)=>n.length-t.length);if(e.length!==0)return new RegExp(`(?t.forms.includes(e))}class Eo extends Error{}function gZ(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function pZ(i,e,t){const n=h=>{throw new Eo(`${t}: ${h}`)};let a="",s="",r="",o=[],l,u;const m=[];let c,d=!1;for(const h of e){const g=h.trim();if(c&&d&&(/^ {4}|^\t/.test(h)||g==="")){c.code+=(c.code?` +`:"")+h.replace(/^( {4}|\t)/,"");continue}if(d=!1,!g)continue;const f=/^(titel|intro|antworten|frage|runde|klicks|richtig|zeit|fehler|besser|daten):\s*(.*)$/.exec(g);if(f){const[,v,w]=f;v==="runde"?(c={code:"",question:r,options:[],explanation:"",clicks:[]},m.push(c),d=!0):c?v==="frage"?c.question=w:v==="fehler"?c.wrongLine=Number(w):v==="besser"?c.fix=w:v==="klicks"?c.clicks=w.split(",").map(z=>z.trim()).filter(Boolean):v==="richtig"?c.rightText=w:n(`„${v}:“ gehört vor die erste Runde.`):v==="titel"?a=w:v==="intro"?s=w:v==="antworten"?o=w.split("|").map(z=>z.trim()):v==="frage"?r=w:v==="zeit"?l=Number(w):v==="daten"?u=w==="csv"?w:n("„daten:“ kennt nur „csv“."):n(`„${v}:“ gehört in eine Runde.`);continue}c||n(`Unbekannte Zeile vor der ersten Runde: „${g}“`);const x=c,b=/^-\s+(\[x\]\s+)?(.+)$/.exec(g);b?x.options.push({text:b[2].trim().replaceAll("\\n",` +`),right:!!b[1]}):g.startsWith(">")?x.explanation+=(x.explanation?" ":"")+g.slice(1).trim():n(`Unbekannte Zeile im Spiel: „${g}“`)}return a||n("Das Spiel braucht eine Zeile „titel:“."),m.length||n("Das Spiel braucht mindestens eine „runde:“."),m.forEach((h,g)=>{if(h.code=h.code.replace(/\n+$/,""),i==="bombe"){const f=h.code.split(` +`),x=h.wrongLine;(!x||!Number.isInteger(x)||x<1||x>f.length||!f[x-1].trim())&&n(`Runde ${g+1}: „fehler:“ muss eine Zeile des Codes sein.`),h.fix||n(`Runde ${g+1}: „besser:“ fehlt.`),h.options.length&&n(`Runde ${g+1}: Bei „bombe“ gibt es keine Antworten, man tippt auf die Zeile.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(i==="reihenfolge"){h.options.length<3&&n(`Runde ${g+1}: „reihenfolge“ braucht mindestens drei Schritte.`),h.options.some(f=>f.right)&&n(`Runde ${g+1}: Bei „reihenfolge“ gibt es kein [x], die Schritte stehen der Reihe nach da.`),new Set(h.options.map(f=>f.text)).size!==h.options.length&&n(`Runde ${g+1}: zwei Schritte sind gleich.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(h.options.length||(o.length||n(`Runde ${g+1}: keine Antworten.`),(!h.rightText||!o.includes(h.rightText))&&n(`Runde ${g+1}: „richtig:“ muss eine der Antworten sein.`),h.options=o.map(f=>({text:f,right:f===h.rightText}))),h.options.filter(f=>f.right).length!==1&&n(`Runde ${g+1}: genau eine Antwort muss richtig sein.`),h.question||n(`Runde ${g+1}: keine Frage.`),i==="layout"&&h.options.forEach(f=>eg(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=tg(h.code);for(const x of h.clicks)f.buttons.some(b=>b.caption===x)||n(`Runde ${g+1}: Knopf „${x}“ gibt es nicht.`);fZ(f,h.clicks)}catch(f){if(f instanceof Eo)throw f;n(`Runde ${g+1}: ${f.message}`)}delete h.rightText}),i==="bombe"&&!(l&&l>0)&&n("„bombe“ braucht „zeit:“ mit den Sekunden je Runde."),{kind:i,title:a,intro:s,...i==="bombe"?{seconds:l,...u?{data:u}:{}}:{},rounds:m}}function eg(i,e="",t=n=>{throw new Eo(n)}){const n=/^(grid|flow|border):\s*(.+)$/.exec(i);if(!n)return t(`${e}: Antwort „${i}“ ist kein Fensterbild (grid:, flow: oder border:).`);if(n[1]==="border"){const s={};for(const r of n[2].split(/\s+/)){const o=/^([NSWEC])=(.+)$/.exec(r);o||t(`${e}: „${r}“ im BorderLayout-Bild verstehe ich nicht (z. B. N=A).`),s[o[1]]=o[2]}return{kind:"border",areas:s}}const a=n[2].split("/").map(s=>s.trim().split(/\s+/).filter(Boolean));return{kind:n[1],rows:a}}const Ga='"((?:[^"\\\\]|\\\\.)*)"';function tg(i){const e=i.split(` +`),t={title:"",buttons:[],labels:[],ints:{},listeners:[]},n=new Map,a=(r,o,l)=>{if(o.startsWith("{")){let m=r+1;const c=[];for(;m=e.length)throw new Error(`Dem Zuhörer fehlt „${l}“.`);return{from:r,to:m,statements:No(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:No(u)}},s=r=>{if(!t.buttons.some(o=>o.name===r))throw new Error(`Knopf ${r} ist nicht angelegt.`);return r};for(let r=0;r\s*(.*)$/.exec(o)){const u=a(r,l[2],"};");n.set(l[1],u),r=u.to}else if(l=/^(\w+)\.addActionListener\(\s*(\w+)\s*\)\s*;$/.exec(o)){const u=n.get(l[2]);if(!u)throw new Error(`Zuhörer ${l[2]} ist nicht angelegt.`);t.listeners.push({button:s(l[1]),...u})}else if(l=/^(\w+)\.addActionListener\(\s*\w+\s*->\s*(.*)$/.exec(o)){const u=a(r,l[2],"});");t.listeners.push({button:s(l[1]),...u}),r=u.to}}return t}function No(i){const e=[];let t=0;const n=()=>{for(;t{let u=0,m=!1;const c=t+1;for(;t{let o=0,l=!1;const u=t;for(;t{if(n(),i[t]==="{")return No(a("{","}"));if(/^if\s*\(/.test(i.slice(t))){t=i.indexOf("(",t);const l=a("(",")").trim(),u=r();n();let m=[];return/^else\b/.test(i.slice(t))&&(t+=4,m=r()),[{condition:l,then:u,otherwise:m}]}const o=s();return o?[o]:[]};for(n();ta.caption===t)??i.buttons.find(a=>e.texts[a.name]===t);if(!n)throw new Error(`Knopf „${t}“ gibt es nicht.`);return ag(i,e,n.name)}function ag(i,e,t){const n=i.listeners.find(r=>r.button===t),a=[],s={source:t,command:e.texts[t]};for(const r of(n==null?void 0:n.statements)??[])sg(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function fZ(i,e){const t=ng(i);return e.map(n=>ig(i,t,n))}function sg(i,e,t,n){if(typeof i!="string"){for(const s of xZ(i.condition,e,n)?i.then:i.otherwise)sg(s,e,t,n);return}let a;if(a=/^(\w+)\.setText\((.*)\)$/.exec(i)){if(!(a[1]in e.texts))throw new Error(`${a[1]} ist keine Beschriftung und kein Knopf.`);e.texts[a[1]]=String($n(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String($n(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[qu(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=qu(a[1],e),r=Number($n(a[3],e,n));e.ints[s]=a[2]==="="?r:a[2]==="+="?e.ints[s]+r:e.ints[s]-r}else throw new Error(`Diese Anweisung kann das Spiel nicht nachspielen: „${i}“`)}function xZ(i,e,t){let n;if(n=/^e\.getSource\(\)\s*(==|!=)\s*(\w+)$/.exec(i)){if(!(n[2]in e.texts))throw new Error(`${n[2]} ist kein Knopf.`);return t.source===n[2]==(n[1]==="==")}if(n=/^(!?)(.+)\.equals\((.+)\)$/.exec(i))return String($n(n[2],e,t))===String($n(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number($n(n[1],e,t)),s=Number($n(n[3],e,t));return{"==":a===s,"!=":a!==s,"<=":a<=s,">=":a>=s,"<":a":a>s}[n[2]]}throw new Error(`Diese Bedingung kann das Spiel nicht nachspielen: „${i}“`)}function qu(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function $n(i,e,t){const n=i.match(new RegExp(`${Ga}|\\d+|e\\.getActionCommand\\(\\)|\\w+(?:\\.getText\\(\\))?|[-+*/()]`,"g"))??[];let a=0;const s=()=>{const l=n[a++];if(l===void 0)throw new Error(`Unvollständiger Ausdruck „${i}“`);if(l==="("){const u=o();return a++,u}if(l.startsWith('"'))return JSON.parse(l);if(/^\d+$/.test(l))return Number(l);if(l==="e.getActionCommand()"){if(!t)throw new Error("e.getActionCommand() gibt es nur im Zuhörer.");return t.command}if(l.endsWith(".getText()"))return e.texts[l.slice(0,-10)]??"";if(l in e.ints)return e.ints[l];throw new Error(`Unbekannt: „${l}“`)},r=()=>{let l=s();for(;n[a]==="*"||n[a]==="/";){const u=n[a++],m=Number(s());l=u==="*"?Number(l)*m:Math.trunc(Number(l)/m)}return l},o=()=>{let l=r();for(;n[a]==="+"||n[a]==="-";){const u=n[a++],m=r();u==="+"?l=typeof l=="string"||typeof m=="string"?`${l}${m}`:l+m:l=Number(l)-Number(m)}return l};return o()}class bZ extends Error{}const vs="___";function vZ(i){const e=Array.from({length:i.rows},()=>Array(i.cols).fill(""));for(const t of i.words)[...t.word].forEach((n,a)=>e[t.row+(t.across?0:a)][t.col+(t.across?a:0)]=n);return e}function yZ(i,e){const t=j=>{throw new bZ(`${e}: ${j}`)},n=(j,D)=>{const O=/^(\d+)\s+(\d+)$/.exec(j.trim());return!O||Number(O[1])<1||Number(O[2])<1?t(`${D}: „${j}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(O[1])-1,col:Number(O[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const j of i){const D=j.trim();if(g&&(/^( {4}|\t)/.test(j)||D==="")){const P=j.replace(/^( {4}|\t)/,"");if(g==="station"){const C=c[c.length-1];C.code+=(C.code?` +`:"")+P}else u+=(u?` +`:"")+P;continue}if(g=void 0,!D)continue;const O=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(D);if(O){const[,P,C]=O;if(P==="station")c.push({name:C,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(P==="kreuzwort")o=C,f="crossword";else if(P==="tor")l=C,f="gate",g="gate";else if(P==="titel")a=C;else if(P==="intro")s=C;else if(P==="alphabet")r=C;else if(P==="ende")m=C;else if(P==="lösung"||P==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=C.split(",").map(Z=>n(Z,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const Z=c[c.length-1];P==="frage"?Z.question=C:P==="tipp"?Z.hint=C:P==="zahl"?Z.answer=/^-?\d+$/.test(C)?Number(C):t(`Station „${Z.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(Z,n(C,`Station „${Z.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(D);P||t(`Kreuzworträtsel: „${D}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),d.push({across:P[1]==="→",row:Number(P[2])-1,col:Number(P[3])-1,word:P[4],clue:P[5]});continue}if(f==="station"&&D.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+D.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${D}“`)}a||t("Das Spiel braucht eine Zeile „titel:“."),c.length||t("Das Spiel braucht mindestens eine „station:“."),d.length||t("Das Spiel braucht ein „kreuzwort:“ mit Wörtern."),h.length||t("Das Kreuzworträtsel braucht eine Zeile „lösung:“."),u.includes(vs)||t(`Der Code bei „tor:“ braucht ${vs} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const x=Math.max(...d.map(j=>j.row+(j.across?1:j.word.length))),b=Math.max(...d.map(j=>j.col+(j.across?j.word.length:1))),v=Array.from({length:x},()=>Array(b).fill(""));for(const j of d)[...j.word].forEach((D,O)=>{const P=j.row+(j.across?0:O),C=j.col+(j.across?O:0);v[P][C]&&v[P][C]!==D&&t(`Kreuzworträtsel: ${j.word} passt in Zeile ${P+1}, Spalte ${C+1} nicht (dort steht ${v[P][C]}).`),v[P][C]=D});const w=[...new Set(d.map(j=>j.row*b+j.col))].sort((j,D)=>j-D),z=d.map(j=>({...j,number:w.indexOf(j.row*b+j.col)+1})),I=(j,D)=>{var O;return((O=v[j])==null?void 0:O[D])??""},k=h.map(({row:j,col:D})=>I(j,D)||t(`lösung: In Zeile ${j+1}, Spalte ${D+1} ist kein Feld.`)).join(""),T=c.map(j=>{j.code||t(`Station „${j.name}“: Code fehlt.`),j.question||t(`Station „${j.name}“: „frage:“ fehlt.`),j.answer===void 0&&t(`Station „${j.name}“: „zahl:“ fehlt.`),j.row===void 0&&t(`Station „${j.name}“: „feld:“ fehlt.`);const D=r.charAt(j.answer);D||t(`Station „${j.name}“: alphabet.charAt(${j.answer}) gibt es nicht.`);const O=I(j.row,j.col);return O!==D&&t(`Station „${j.name}“: alphabet.charAt(${j.answer}) ist ${D}, im Feld ${j.row+1} ${j.col+1} steht aber „${O}“.`),j.code=j.code.replace(/\n+$/,""),j});return{title:a,intro:s,alphabet:r,stations:T,crosswordText:o,rows:x,cols:b,words:z,solution:h,keyword:k,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const wZ=/\[\[(.+?)\]\]/g;function zZ(i,e){const t={title:"",task:"",blocks:[]},n=[];let a=!1;for(const s of i){if(/^\s*```/.test(s)){a||n.push([]),a=!a;continue}if(a){n[n.length-1].push(s.replace(/\s+$/,""));continue}const r=s.trim();if(!r)continue;const o=/^([a-zäöü]+):\s*(.*)$/i.exec(r);if(!o)throw new Error(`${e}: Unbekannte Zeile im Lückentext: „${r}“.`);const l=o[2].trim();switch(o[1].toLowerCase()){case"titel":t.title=l;break;case"auftrag":t.task=l;break;case"erklärung":case"erklaerung":t.explanation=l;break;default:throw new Error(`${e}: Unbekannter Schlüssel „${o[1]}“ im Lückentext.`)}}if(a)throw new Error(`${e}: Der Codeblock im Lückentext wird nicht mit \`\`\` geschlossen.`);if(!t.title)throw new Error(`${e}: Ein Lückentext braucht einen Titel.`);if(!n.some(s=>s.some(r=>r.trim())))throw new Error(`${e}: Lückentext „${t.title}“ braucht einen Codeblock.`);if(t.blocks=n.map(s=>{const r=Math.min(...s.filter(o=>o.trim()).map(o=>/^ */.exec(o)[0].length));return s.map(o=>IZ(o.slice(r),e,t.title))}),!kZ(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function IZ(i,e,t){const n=[];let a=0;for(const s of i.matchAll(wZ)){s.index>a&&n.push(i.slice(a,s.index));const r=s[1].split(/\s+\|\s+/).map(o=>o.trim()).filter(Boolean);if(!r.length)throw new Error(`${e}: Leere Lücke im Lückentext „${t}“.`);n.push({answers:r}),a=s.index+s[0].length}if(atypeof s=="string"&&(s.includes("[[")||s.includes("]]"))))throw new Error(`${e}: Unvollständige Lücke im Lückentext „${t}“: „${i}“.`);return n}function kZ(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function SZ(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}const Qu={start:"oval",ende:"oval",anweisung:"rechteck",eingabe:"parallelogramm",ausgabe:"parallelogramm",frage:"raute"};function TZ(i,e){const t={title:"",task:"",nodes:[]},n=[];for(const a of i){const s=a.trim();if(!s)continue;const r=/^([a-zäöü]+):\s*(.*)$/i.exec(s);if(!r)throw new Error(`${e}: Unbekannte Zeile im PAP: „${s}“.`);const o=r[1].toLowerCase(),l=r[2].trim();if(o==="titel")t.title=l;else if(o==="auftrag")t.task=l;else if(o==="erklärung"||o==="erklaerung")t.explanation=l;else if(o==="legende")t.legend=/^(ja|yes|true|sim)$/i.test(l);else if(o in Qu){const[u,m]=l.split(/\s+\|\s+/);if(!u)throw new Error(`${e}: Leeres Element im PAP: „${s}“.`);const c={shape:Qu[o],text:u.trim()};if(t.nodes.push(c),o!=="frage"){if(m)throw new Error(`${e}: Nur eine Frage hat einen zweiten Ausgang: „${s}“.`);continue}const d=/^(ja|nein)\s*(->|:)\s*(.+)$/i.exec(m??"");if(!d)throw new Error(`${e}: Eine Frage braucht „| nein -> Text“ oder „| nein: Text“: „${s}“.`);c.sideExit=d[1].toLowerCase(),d[2]===":"?(c.side=t.nodes.length,t.nodes.push({shape:"rechteck",text:d[3].trim(),isSide:!0})):n.push({node:t.nodes.length-1,target:d[3].trim(),line:s})}else throw new Error(`${e}: Unbekannter Schlüssel „${r[1]}“ im PAP.`)}for(const a of n){const s=t.nodes.findIndex((r,o)=>o{if(n.isSide)return;const s=OZ(n.shape);(i.nodes.some(r=>r.backTo===a)||n.side!==void 0)&&(t+=12),e[a]={x:jZ,y:t+s/2,w:n.shape==="raute"?170:n.shape==="oval"?110:CZ,h:s},n.side!==void 0&&(e[n.side]={x:AZ,y:t+s/2,w:PZ,h:40}),t+=s+Uu}),{boxes:e,height:t-Uu+10}}function rg(i,e){if((r=>r.length*6.6<=e)(i))return[i];const n=i.split(" ");let a=[i],s=1/0;for(let r=1;ru.length));l|→)\s*/);if(t.length!==2)throw new ne(`${e}: Test „${i}“ braucht genau ein „->“.`);const n=(a,s)=>a.trim()===""||a.trim()==="-"?[]:a.split(s).map(r=>r.trim());return{inputs:n(t[0],/\s*,\s*/),expected:n(t[1],/\s*\|\s*/)}}function qD(i){const e=/^(.*?)\s*(?:->|→)\s*(.*)$/.exec(i.trim());if(!e)throw new Error(`„messwerte: ${i}“ braucht ein „->“.`);const t={};for(const n of e[1].split(/\s*,\s*/).filter(Boolean)){const a=/^(\w+)\s*=\s*(.+)$/.exec(n);if(!a||!(a[1]in At))throw new Error(`Unbekannter Sensor in „${n}“.`);t[a[1]]=a[2].split("/").map(s=>{const r=s.trim();if(r==="true"||r==="false")return r==="true";if(/^-?\d+(\.\d+)?$/.test(r))return Number(r);if(typeof At[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return ug({inputs:[],expected:[],sensors:t},e[2])}function ug(i,e){const t=[];e=e.replace(/\bscreen\s+("(?:[^"\\]|\\.)*")/u,(n,a)=>(i.screen=JSON.parse(a),""));for(const n of e.split(/\s*,\s*/).filter(Boolean))n==="ledOn"||n==="ledOff"?i.led=n==="ledOn":n==="tone"||n==="noTone"?i.tone=n==="tone":n==="none"?i.drive=[]:n==="drives"?i.drives=!0:t.push(n);return t.length&&(i.drive=os(Ih(t.join(", ")))),i}function QD(i,e,t){const n={id:i,title:"",task:"",tests:[],requires:[],hints:[],subprograms:[]};let a;for(const s of e){const r=/^(titel|auftrag|start|test|datei|fahrt|befehle|welt|messwerte|schleifentiefe|braucht|tipp|lösung|loesung|unterprogramm|code|bereich):\s*(.*)$/i.exec(s.trim());if(r){const[,o,l]=r;switch(a=void 0,o.toLowerCase()){case"titel":n.title=l;break;case"auftrag":n.task=l,a="task";break;case"start":n.start=l;break;case"test":n.tests.push(VD(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new ne(`${t}: Übung „${i}“: „datei:“ braucht vorher einen Test und die Form „name.txt -> Zeile | Zeile“.`);const m=n.tests[n.tests.length-1];m.files=[...m.files??[],{name:u[1],lines:u[2].trim()===""?[]:u[2].split(/\s*\|\s*/).map(c=>c.trim())}];break}case"fahrt":try{n.tests.push({inputs:[],expected:[],drive:os(Ih(l))})}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(ug({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new ne(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new ne(`${t}: Übung „${i}“: Weltname „${m}“ (nur Buchstaben, Ziffern, -).`);n.tests.push({inputs:[],expected:[],world:m})}break}case"befehle":try{n.tests.push({inputs:[],expected:[],actions:D3(l)})}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(qD(l))}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new ne(`${t}: Übung „${i}“: „schleifentiefe:“ braucht eine Zahl ab 1.`);break;case"braucht":n.requires.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"tipp":n.hints.push(l),a="hint";break;case"lösung":case"loesung":n.solution=l;break;case"unterprogramm":n.subprograms.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"code":if(l.trim().toLowerCase()!=="java")throw new ne(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break;case"bereich":{const u=l.trim().toLowerCase();if(u!=="struktogramm"&&u!=="code"&&u!=="beide")throw new ne(`${t}: Übung „${i}“: „bereich:“ kennt nur „struktogramm“, „code“ oder „beide“.`);n.area=u;break}}}else a&&s.trim()!==""?a==="task"?n.task+=` +`).slice(t[0].length)}}function MZ(i,e){const t=i.split(/\s*(?:->|→)\s*/);if(t.length!==2)throw new ne(`${e}: Test „${i}“ braucht genau ein „->“.`);const n=(a,s)=>a.trim()===""||a.trim()==="-"?[]:a.split(s).map(r=>r.trim());return{inputs:n(t[0],/\s*,\s*/),expected:n(t[1],/\s*\|\s*/)}}function BZ(i){const e=/^(.*?)\s*(?:->|→)\s*(.*)$/.exec(i.trim());if(!e)throw new Error(`„messwerte: ${i}“ braucht ein „->“.`);const t={};for(const n of e[1].split(/\s*,\s*/).filter(Boolean)){const a=/^(\w+)\s*=\s*(.+)$/.exec(n);if(!a||!(a[1]in Ct))throw new Error(`Unbekannter Sensor in „${n}“.`);t[a[1]]=a[2].split("/").map(s=>{const r=s.trim();if(r==="true"||r==="false")return r==="true";if(/^-?\d+(\.\d+)?$/.test(r))return Number(r);if(typeof Ct[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return ug({inputs:[],expected:[],sensors:t},e[2])}function ug(i,e){const t=[];e=e.replace(/\bscreen\s+("(?:[^"\\]|\\.)*")/u,(n,a)=>(i.screen=JSON.parse(a),""));for(const n of e.split(/\s*,\s*/).filter(Boolean))n==="ledOn"||n==="ledOff"?i.led=n==="ledOn":n==="tone"||n==="noTone"?i.tone=n==="tone":n==="none"?i.drive=[]:n==="drives"?i.drives=!0:t.push(n);return t.length&&(i.drive=ls(Ih(t.join(", ")))),i}function ZZ(i,e,t){const n={id:i,title:"",task:"",tests:[],requires:[],hints:[],subprograms:[]};let a;for(const s of e){const r=/^(titel|auftrag|start|test|datei|fahrt|befehle|welt|messwerte|schleifentiefe|braucht|tipp|lösung|loesung|unterprogramm|code|bereich):\s*(.*)$/i.exec(s.trim());if(r){const[,o,l]=r;switch(a=void 0,o.toLowerCase()){case"titel":n.title=l;break;case"auftrag":n.task=l,a="task";break;case"start":n.start=l;break;case"test":n.tests.push(MZ(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new ne(`${t}: Übung „${i}“: „datei:“ braucht vorher einen Test und die Form „name.txt -> Zeile | Zeile“.`);const m=n.tests[n.tests.length-1];m.files=[...m.files??[],{name:u[1],lines:u[2].trim()===""?[]:u[2].split(/\s*\|\s*/).map(c=>c.trim())}];break}case"fahrt":try{n.tests.push({inputs:[],expected:[],drive:ls(Ih(l))})}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(ug({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new ne(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new ne(`${t}: Übung „${i}“: Weltname „${m}“ (nur Buchstaben, Ziffern, -).`);n.tests.push({inputs:[],expected:[],world:m})}break}case"befehle":try{n.tests.push({inputs:[],expected:[],actions:M3(l)})}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(BZ(l))}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new ne(`${t}: Übung „${i}“: „schleifentiefe:“ braucht eine Zahl ab 1.`);break;case"braucht":n.requires.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"tipp":n.hints.push(l),a="hint";break;case"lösung":case"loesung":n.solution=l;break;case"unterprogramm":n.subprograms.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"code":if(l.trim().toLowerCase()!=="java")throw new ne(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break;case"bereich":{const u=l.trim().toLowerCase();if(u!=="struktogramm"&&u!=="code"&&u!=="beide")throw new ne(`${t}: Übung „${i}“: „bereich:“ kennt nur „struktogramm“, „code“ oder „beide“.`);n.area=u;break}}}else a&&s.trim()!==""?a==="task"?n.task+=` `+s.trim():n.hints[n.hints.length-1]+=` `+s.trim():s.trim()===""&&a==="task"&&(n.task+=` -`)}if(!n.title)throw new ne(`${t}: Übung „${i}“ hat keinen Titel.`);if(!n.task.trim())throw new ne(`${t}: Übung „${i}“ hat keinen Auftrag.`);return n.task=n.task.trim(),n}function UD(i,e){const t=[];for(const n of i){const a=n.trim();if(a.startsWith("?"))t.push({question:a.slice(1).trim(),options:[]});else if(/^- \[[ xX]\]/.test(a)){const s=t.at(-1);if(!s)throw new ne(`${e}: Antwort ohne Frage im Quiz.`);s.options.push({text:a.slice(5).trim(),correct:a[3].toLowerCase()==="x"})}else if(a.startsWith("= ")){const s=t.at(-1),r=/^=\s+(.+?)\s+->\s+(.+)$/.exec(a);if(!s||!r)throw new ne(`${e}: Zuordnung „${a}“ braucht die Form „= links -> rechts“ nach einer Frage.`);(s.pairs??(s.pairs=[])).push({left:r[1].trim(),right:r[2].trim()})}else if(a.startsWith("→")){const s=t.at(-1);if(!s)throw new ne(`${e}: „→ Schritt“ ohne Frage im Quiz.`);s.ref=a.slice(1).trim()}else if(a.startsWith(">")){const s=t.at(-1);s&&(s.explanation=((s.explanation?s.explanation+" ":"")+a.slice(1).trim()).trim())}}for(const n of t){if(n.pairs){const a=new Set(n.pairs.map(s=>s.right));if(n.options.length>0||n.pairs.length<2||a.size!==n.pairs.length)throw new ne(`${e}: Zuordnung „${n.question}“ braucht mindestens zwei Paare mit verschiedenen rechten Seiten und keine Antworten.`);continue}if(n.options.length<2||!n.options.some(a=>a.correct))throw new ne(`${e}: Quizfrage „${n.question}“ braucht mindestens zwei Antworten, davon eine richtige.`)}return t}function mg(i,e){const t=[],n=i.split(` +`)}if(!n.title)throw new ne(`${t}: Übung „${i}“ hat keinen Titel.`);if(!n.task.trim())throw new ne(`${t}: Übung „${i}“ hat keinen Auftrag.`);return n.task=n.task.trim(),n}function LZ(i,e){const t=[];for(const n of i){const a=n.trim();if(a.startsWith("?"))t.push({question:a.slice(1).trim(),options:[]});else if(/^- \[[ xX]\]/.test(a)){const s=t.at(-1);if(!s)throw new ne(`${e}: Antwort ohne Frage im Quiz.`);s.options.push({text:a.slice(5).trim(),correct:a[3].toLowerCase()==="x"})}else if(a.startsWith("= ")){const s=t.at(-1),r=/^=\s+(.+?)\s+->\s+(.+)$/.exec(a);if(!s||!r)throw new ne(`${e}: Zuordnung „${a}“ braucht die Form „= links -> rechts“ nach einer Frage.`);(s.pairs??(s.pairs=[])).push({left:r[1].trim(),right:r[2].trim()})}else if(a.startsWith("→")){const s=t.at(-1);if(!s)throw new ne(`${e}: „→ Schritt“ ohne Frage im Quiz.`);s.ref=a.slice(1).trim()}else if(a.startsWith(">")){const s=t.at(-1);s&&(s.explanation=((s.explanation?s.explanation+" ":"")+a.slice(1).trim()).trim())}}for(const n of t){if(n.pairs){const a=new Set(n.pairs.map(s=>s.right));if(n.options.length>0||n.pairs.length<2||a.size!==n.pairs.length)throw new ne(`${e}: Zuordnung „${n.question}“ braucht mindestens zwei Paare mit verschiedenen rechten Seiten und keine Antworten.`);continue}if(n.options.length<2||!n.options.some(a=>a.correct))throw new ne(`${e}: Quizfrage „${n.question}“ braucht mindestens zwei Antworten, davon eine richtige.`)}return t}function mg(i,e){const t=[],n=i.split(` `);let a=[];const s=()=>{const r=a.join(` -`).trim();r&&t.push({kind:"markdown",text:r}),a=[]};for(let r=0;r=n.length)throw new ne(`${e}: Block „::: ${o[1]}“ wird nicht mit „:::“ geschlossen.`);const m=o[1].toLowerCase(),c=o[2].trim();switch(m){case"diagramm":if(!c)throw new ne(`${e}: „::: diagramm“ braucht einen Dateinamen.`);t.push({kind:"diagram",file:c,caption:l.join(" ").trim()});break;case"übung":case"uebung":if(!c)throw new ne(`${e}: „::: übung“ braucht eine Kennung.`);t.push({kind:"exercise",exercise:QD(c,l,e)});break;case"checkliste":t.push({kind:"checklist",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>$D(d.slice(2).trim()))});break;case"kompetenzen":t.push({kind:"competences",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>d.slice(2).trim())});break;case"quiz":t.push({kind:"quiz",questions:UD(l,e)});break;case"bild":if(!c)throw new ne(`${e}: „::: bild“ braucht einen Dateinamen.`);t.push({kind:"images",files:c.split(/\s+/),caption:l.join(" ").trim()});break;case"grafik":if(!c)throw new ne(`${e}: „::: grafik“ braucht einen Dateinamen.`);{const[d,h]=c.split(/\s+/);t.push({kind:"graphic",file:d,...h?{labeled:h}:{},caption:l.join(" ").trim()})}break;case"angeberwissen":t.push({kind:"brag",text:l.join(` -`).trim()});break;case"spiel":try{if(TD(c))t.push({kind:"roundGame",game:_D(c,l,e)});else if(c==="prinzessin")t.push({kind:"rescueGame",game:PD(l,e)});else{if(c)throw new ne(`${e}: Unbekanntes Spiel „${c}“ (zuhoerer, vertrag, layout, bombe, frage, reihenfolge oder prinzessin).`);t.push({kind:"game",game:yx(l,e)})}}catch(d){throw new ne(d.message)}break;case"lückentext":case"lueckentext":try{t.push({kind:"cloze",cloze:DD(l,e)})}catch(d){throw new ne(d.message)}break;case"pap":try{t.push({kind:"pap",pap:WD(l,e)})}catch(d){throw new ne(d.message)}break;case"ludwig":t.push({kind:"brag",text:l.join(` +`).trim();r&&t.push({kind:"markdown",text:r}),a=[]};for(let r=0;r=n.length)throw new ne(`${e}: Block „::: ${o[1]}“ wird nicht mit „:::“ geschlossen.`);const m=o[1].toLowerCase(),c=o[2].trim();switch(m){case"diagramm":if(!c)throw new ne(`${e}: „::: diagramm“ braucht einen Dateinamen.`);t.push({kind:"diagram",file:c,caption:l.join(" ").trim()});break;case"übung":case"uebung":if(!c)throw new ne(`${e}: „::: übung“ braucht eine Kennung.`);t.push({kind:"exercise",exercise:ZZ(c,l,e)});break;case"checkliste":t.push({kind:"checklist",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>WZ(d.slice(2).trim()))});break;case"kompetenzen":t.push({kind:"competences",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>d.slice(2).trim())});break;case"quiz":t.push({kind:"quiz",questions:LZ(l,e)});break;case"bild":if(!c)throw new ne(`${e}: „::: bild“ braucht einen Dateinamen.`);t.push({kind:"images",files:c.split(/\s+/),caption:l.join(" ").trim()});break;case"grafik":if(!c)throw new ne(`${e}: „::: grafik“ braucht einen Dateinamen.`);{const[d,h]=c.split(/\s+/);t.push({kind:"graphic",file:d,...h?{labeled:h}:{},caption:l.join(" ").trim()})}break;case"angeberwissen":t.push({kind:"brag",text:l.join(` +`).trim()});break;case"spiel":try{if(gZ(c))t.push({kind:"roundGame",game:pZ(c,l,e)});else if(c==="prinzessin")t.push({kind:"rescueGame",game:yZ(l,e)});else{if(c)throw new ne(`${e}: Unbekanntes Spiel „${c}“ (zuhoerer, vertrag, layout, bombe, frage, reihenfolge oder prinzessin).`);t.push({kind:"game",game:yb(l,e)})}}catch(d){throw new ne(d.message)}break;case"lückentext":case"lueckentext":try{t.push({kind:"cloze",cloze:zZ(l,e)})}catch(d){throw new ne(d.message)}break;case"pap":try{t.push({kind:"pap",pap:TZ(l,e)})}catch(d){throw new ne(d.message)}break;case"ludwig":t.push({kind:"brag",text:l.join(` `).trim(),tip:!0});break;case"caesar":{const d=c?Number(c):3;if(!Number.isInteger(d)||d<0||d>25)throw new ne(`${e}: „::: caesar“ braucht einen Schlüssel von 0 bis 25.`);t.push({kind:"caesar",key:d,text:l.join(" ").trim()});break}case"mbot2":{const d={kind:"robotModel",focus:[]};for(const h of l.filter(g=>g.trim())){const g=/^\s*(fokus|focus|ansicht|view|drehen|spin):\s*(.*)$/i.exec(h);if(!g)throw new ne(`${e}: „::: mbot2“ kennt nur Zeilen „fokus:“, „ansicht:“ und „drehen:“.`);const f=g[1].toLowerCase();f==="fokus"||f==="focus"?d.focus=$u(g[2],e):f==="ansicht"||f==="view"?d.view=g[2].trim().toLowerCase():d.spin=/^(ja|yes|true|sim)$/i.test(g[2].trim())}t.push(d);break}case"mbot2quiz":{const d={kind:"robotQuiz",tasks:[]};for(const h of l.filter(g=>g.trim())){const g=/^\s*-\s*(\w+)\s*:\s*(.+)$/.exec(h),f=/^\s*(fertig|done):\s*(.+)$/i.exec(h);if(g)d.tasks.push({part:$u(g[1],e)[0],question:g[2].trim()});else if(f)d.done=f[2].trim();else throw new ne(`${e}: „::: mbot2quiz“ braucht Zeilen „- teil: Frage“ und optional „fertig: Text“.`)}if(!d.tasks.length)throw new ne(`${e}: „::: mbot2quiz“ hat keine Fragen.`);t.push(d);break}case"datei":{if(!/^[\w.-]+\.(txt|csv|json)$/u.test(c))throw new ne(`${e}: „::: datei“ braucht einen Dateinamen wie brief.txt, liste.csv oder daten.json.`);for(;l.length&&l[0].trim()==="";)l.shift();for(;l.length&&l[l.length-1].trim()==="";)l.pop();t.push({kind:"textFile",name:c,content:l.join(` -`)});break}default:throw new ne(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function $D(i){const e=/^(.*?)\s+→\s+(.+)$/.exec(i);return e?{text:e[1],ref:e[2].trim()}:{text:i}}function YD(i,e){const t=new Map(i.map((a,s)=>[a.title.toLowerCase(),s]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="checklist"){for(const s of a.items)if(s.ref!==void 0&&(s.step=t.get(s.ref.toLowerCase()),s.step===void 0))throw new ne(`${e}: Checkliste verweist auf unbekannten Schritt „${s.ref}“.`)}const n=new Set(i.flatMap(a=>a.blocks).flatMap(a=>a.kind==="checklist"?a.items.map(s=>s.step):[]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="quiz"){for(const s of a.questions)if(s.ref!==void 0){if(s.step=t.get(s.ref.toLowerCase()),s.step===void 0)throw new ne(`${e}: Quizfrage „${s.question}“ verweist auf unbekannten Schritt „${s.ref}“.`);if(!n.has(s.step))throw new ne(`${e}: Zu „${s.ref}“ (Quizfrage „${s.question}“) gibt es keinen Checklistenpunkt.`)}}}function XD(i,e){var c;const{meta:t,body:n}=lg(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new ne(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:mg(l.lines.join(` +`)});break}default:throw new ne(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function WZ(i){const e=/^(.*?)\s+→\s+(.+)$/.exec(i);return e?{text:e[1],ref:e[2].trim()}:{text:i}}function EZ(i,e){const t=new Map(i.map((a,s)=>[a.title.toLowerCase(),s]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="checklist"){for(const s of a.items)if(s.ref!==void 0&&(s.step=t.get(s.ref.toLowerCase()),s.step===void 0))throw new ne(`${e}: Checkliste verweist auf unbekannten Schritt „${s.ref}“.`)}const n=new Set(i.flatMap(a=>a.blocks).flatMap(a=>a.kind==="checklist"?a.items.map(s=>s.step):[]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="quiz"){for(const s of a.questions)if(s.ref!==void 0){if(s.step=t.get(s.ref.toLowerCase()),s.step===void 0)throw new ne(`${e}: Quizfrage „${s.question}“ verweist auf unbekannten Schritt „${s.ref}“.`);if(!n.has(s.step))throw new ne(`${e}: Zu „${s.ref}“ (Quizfrage „${s.question}“) gibt es keinen Checklistenpunkt.`)}}}function NZ(i,e){var c;const{meta:t,body:n}=lg(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new ne(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:mg(l.lines.join(` `),e)})};for(const d of n.split(` -`)){const h=/^##\s+(.*)$/.exec(d);h?(u(),l={title:h[1].trim(),lines:[]}):l?l.lines.push(d):o.push(d)}if(u(),r.length===0)throw new ne(`${e}: Keine Schritte (## Überschrift) gefunden.`);YD(r,e);const m=t.get("titel");if(!m)throw new ne(`${e}: „titel:“ fehlt.`);return{id:a,number:s,title:m,section:t.get("bereich")??"",summary:t.get("kurz")??o.join(" ").trim(),steps:r}}function KD(i,e){const{meta:t,body:n}=lg(i,e),a=t.get("titel");if(!a)throw new ne(`${e}: „titel:“ fehlt.`);const s=t.get("nach");return{id:e.replace(/^.*\//,"").replace(/\.md$/,""),title:a,after:s?Number(s):void 0,level:Number(t.get("stufe")??"1")||1,blocks:mg(n,e)}}function $u(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!L3(n))throw new ne(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${kh.join(", ")}.`);return t}const eZ=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":_x,"../../lessons/de/02-der-editor.md":Cx,"../../lessons/de/03-speichern-oeffnen-exportieren.md":Ax,"../../lessons/de/04-variablen-und-datentypen.md":jx,"../../lessons/de/05-sequenz.md":Ox,"../../lessons/de/06-eingabe-und-ausgabe.md":Px,"../../lessons/de/07-simulation-und-schreibtischtest.md":Mx,"../../lessons/de/08-verzweigung.md":Dx,"../../lessons/de/09-bedingungen-verknuepfen.md":Zx,"../../lessons/de/10-fallauswahl.md":Bx,"../../lessons/de/11-while-schleife.md":Lx,"../../lessons/de/12-do-while-schleife.md":Wx,"../../lessons/de/13-for-schleife.md":Ex,"../../lessons/de/14-verschachteln.md":Nx,"../../lessons/de/15-arrays.md":Jx,"../../lessons/de/16-zweidimensionale-arrays.md":Fx,"../../lessons/de/17-zeichenketten.md":Rx,"../../lessons/de/18-aufruf-und-aussprung.md":Gx,"../../lessons/de/19-suchen-und-sortieren.md":Hx,"../../lessons/de/20-java.md":Vx,"../../lessons/de/21-python-und-javascript.md":qx,"../../lessons/de/22-try-und-catch.md":Qx,"../../lessons/de/23-text-einlesen-und-speichern.md":Ux,"../../lessons/de/24-zeile-fuer-zeile.md":$x,"../../lessons/de/25-tabellen-als-csv.md":Yx,"../../lessons/de/26-json.md":Xx,"../../lessons/de/27-formate-im-vergleich.md":Kx,"../../lessons/de/28-erstes-fenster.md":e4,"../../lessons/de/29-knopf-im-fenster.md":t4,"../../lessons/de/30-der-knopf-reagiert.md":n4,"../../lessons/de/31-zahl-verdoppeln.md":i4,"../../lessons/de/32-klickzaehler.md":a4,"../../lessons/de/33-ampel.md":s4,"../../lessons/de/34-notenrechner.md":r4,"../../lessons/de/35-taschenrechner.md":o4,"../../lessons/de/36-zahlenraten.md":l4,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":u4,"../../lessons/de/38-innere-klassen.md":m4,"../../lessons/de/39-zwei-reiter.md":c4,"../../lessons/de/40-model-view-controller.md":d4,"../../lessons/de/begriffe.md":h4,"../../lessons/de/nachschlagen.md":g4,"../../lessons/en/01-was-ist-ein-struktogramm.md":p4,"../../lessons/en/02-der-editor.md":f4,"../../lessons/en/03-speichern-oeffnen-exportieren.md":b4,"../../lessons/en/04-variablen-und-datentypen.md":x4,"../../lessons/en/05-sequenz.md":v4,"../../lessons/en/06-eingabe-und-ausgabe.md":y4,"../../lessons/en/07-simulation-und-schreibtischtest.md":w4,"../../lessons/en/08-verzweigung.md":z4,"../../lessons/en/09-bedingungen-verknuepfen.md":I4,"../../lessons/en/10-fallauswahl.md":k4,"../../lessons/en/11-while-schleife.md":S4,"../../lessons/en/12-do-while-schleife.md":T4,"../../lessons/en/13-for-schleife.md":_4,"../../lessons/en/14-verschachteln.md":C4,"../../lessons/en/15-arrays.md":A4,"../../lessons/en/16-zweidimensionale-arrays.md":j4,"../../lessons/en/17-zeichenketten.md":O4,"../../lessons/en/18-aufruf-und-aussprung.md":P4,"../../lessons/en/19-suchen-und-sortieren.md":M4,"../../lessons/en/20-java.md":D4,"../../lessons/en/21-python-und-javascript.md":Z4,"../../lessons/en/22-try-und-catch.md":B4,"../../lessons/en/23-text-einlesen-und-speichern.md":L4,"../../lessons/en/24-zeile-fuer-zeile.md":W4,"../../lessons/en/25-tabellen-als-csv.md":E4,"../../lessons/en/26-json.md":N4,"../../lessons/en/27-formate-im-vergleich.md":J4,"../../lessons/en/28-erstes-fenster.md":F4,"../../lessons/en/29-knopf-im-fenster.md":R4,"../../lessons/en/30-der-knopf-reagiert.md":G4,"../../lessons/en/31-zahl-verdoppeln.md":H4,"../../lessons/en/32-klickzaehler.md":V4,"../../lessons/en/33-ampel.md":q4,"../../lessons/en/34-notenrechner.md":Q4,"../../lessons/en/35-taschenrechner.md":U4,"../../lessons/en/36-zahlenraten.md":$4,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":Y4,"../../lessons/en/38-innere-klassen.md":X4,"../../lessons/en/39-zwei-reiter.md":K4,"../../lessons/en/40-model-view-controller.md":ev,"../../lessons/en/begriffe.md":tv,"../../lessons/en/nachschlagen.md":nv,"../../lessons/pt/01-was-ist-ein-struktogramm.md":iv,"../../lessons/pt/02-der-editor.md":av,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":sv,"../../lessons/pt/04-variablen-und-datentypen.md":rv,"../../lessons/pt/05-sequenz.md":ov,"../../lessons/pt/06-eingabe-und-ausgabe.md":lv,"../../lessons/pt/07-simulation-und-schreibtischtest.md":uv,"../../lessons/pt/08-verzweigung.md":mv,"../../lessons/pt/09-bedingungen-verknuepfen.md":cv,"../../lessons/pt/10-fallauswahl.md":dv,"../../lessons/pt/11-while-schleife.md":hv,"../../lessons/pt/12-do-while-schleife.md":gv,"../../lessons/pt/13-for-schleife.md":pv,"../../lessons/pt/14-verschachteln.md":fv,"../../lessons/pt/15-arrays.md":bv,"../../lessons/pt/16-zweidimensionale-arrays.md":xv,"../../lessons/pt/17-zeichenketten.md":vv,"../../lessons/pt/18-aufruf-und-aussprung.md":yv,"../../lessons/pt/19-suchen-und-sortieren.md":wv,"../../lessons/pt/20-java.md":zv,"../../lessons/pt/21-python-und-javascript.md":Iv,"../../lessons/pt/22-try-und-catch.md":kv,"../../lessons/pt/23-text-einlesen-und-speichern.md":Sv,"../../lessons/pt/24-zeile-fuer-zeile.md":Tv,"../../lessons/pt/25-tabellen-als-csv.md":_v,"../../lessons/pt/26-json.md":Cv,"../../lessons/pt/27-formate-im-vergleich.md":Av,"../../lessons/pt/28-erstes-fenster.md":jv,"../../lessons/pt/29-knopf-im-fenster.md":Ov,"../../lessons/pt/30-der-knopf-reagiert.md":Pv,"../../lessons/pt/31-zahl-verdoppeln.md":Mv,"../../lessons/pt/32-klickzaehler.md":Dv,"../../lessons/pt/33-ampel.md":Zv,"../../lessons/pt/34-notenrechner.md":Bv,"../../lessons/pt/35-taschenrechner.md":Lv,"../../lessons/pt/36-zahlenraten.md":Wv,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":Ev,"../../lessons/pt/38-innere-klassen.md":Nv,"../../lessons/pt/39-zwei-reiter.md":Jv,"../../lessons/pt/40-model-view-controller.md":Fv,"../../lessons/pt/begriffe.md":Rv,"../../lessons/pt/nachschlagen.md":Gv}),tZ=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":Hv,"../../lessons/de/aufgaben/ballwurf.md":Vv,"../../lessons/de/aufgaben/bestenliste.md":qv,"../../lessons/de/aufgaben/binaerzahl.md":Qv,"../../lessons/de/aufgaben/caesar.md":Uv,"../../lessons/de/aufgaben/collatz.md":$v,"../../lessons/de/aufgaben/einheitenrechner.md":Yv,"../../lessons/de/aufgaben/fibonacci.md":Xv,"../../lessons/de/aufgaben/gerade-ungerade.md":Kv,"../../lessons/de/aufgaben/mehrwertsteuer.md":ey,"../../lessons/de/aufgaben/notendurchschnitt.md":ty,"../../lessons/de/aufgaben/pin-pruefen.md":ny,"../../lessons/de/aufgaben/schiffe-versenken.md":iy,"../../lessons/de/aufgaben/speisekarte.md":ay,"../../lessons/de/aufgaben/summe-bilden.md":sy,"../../lessons/de/aufgaben/tafeldienst.md":ry,"../../lessons/de/aufgaben/taschenrechner.md":oy,"../../lessons/de/aufgaben/verleih-menue.md":ly,"../../lessons/de/aufgaben/vokabeltrainer.md":uy,"../../lessons/de/aufgaben/volljaehrig.md":my,"../../lessons/de/aufgaben/wuerfel-mvc.md":cy,"../../lessons/de/aufgaben/zahl-verdoppeln.md":dy,"../../lessons/en/aufgaben/alter-unterprogramm.md":hy,"../../lessons/en/aufgaben/ballwurf.md":gy,"../../lessons/en/aufgaben/bestenliste.md":py,"../../lessons/en/aufgaben/binaerzahl.md":fy,"../../lessons/en/aufgaben/caesar.md":by,"../../lessons/en/aufgaben/collatz.md":xy,"../../lessons/en/aufgaben/einheitenrechner.md":vy,"../../lessons/en/aufgaben/fibonacci.md":yy,"../../lessons/en/aufgaben/gerade-ungerade.md":wy,"../../lessons/en/aufgaben/mehrwertsteuer.md":zy,"../../lessons/en/aufgaben/notendurchschnitt.md":Iy,"../../lessons/en/aufgaben/pin-pruefen.md":ky,"../../lessons/en/aufgaben/schiffe-versenken.md":Sy,"../../lessons/en/aufgaben/speisekarte.md":Ty,"../../lessons/en/aufgaben/summe-bilden.md":_y,"../../lessons/en/aufgaben/tafeldienst.md":Cy,"../../lessons/en/aufgaben/taschenrechner.md":Ay,"../../lessons/en/aufgaben/verleih-menue.md":jy,"../../lessons/en/aufgaben/vokabeltrainer.md":Oy,"../../lessons/en/aufgaben/volljaehrig.md":Py,"../../lessons/en/aufgaben/wuerfel-mvc.md":My,"../../lessons/en/aufgaben/zahl-verdoppeln.md":Dy,"../../lessons/pt/aufgaben/alter-unterprogramm.md":Zy,"../../lessons/pt/aufgaben/ballwurf.md":By,"../../lessons/pt/aufgaben/bestenliste.md":Ly,"../../lessons/pt/aufgaben/binaerzahl.md":Wy,"../../lessons/pt/aufgaben/caesar.md":Ey,"../../lessons/pt/aufgaben/collatz.md":Ny,"../../lessons/pt/aufgaben/einheitenrechner.md":Jy,"../../lessons/pt/aufgaben/fibonacci.md":Fy,"../../lessons/pt/aufgaben/gerade-ungerade.md":Ry,"../../lessons/pt/aufgaben/mehrwertsteuer.md":Gy,"../../lessons/pt/aufgaben/notendurchschnitt.md":Hy,"../../lessons/pt/aufgaben/pin-pruefen.md":Vy,"../../lessons/pt/aufgaben/schiffe-versenken.md":qy,"../../lessons/pt/aufgaben/speisekarte.md":Qy,"../../lessons/pt/aufgaben/summe-bilden.md":Uy,"../../lessons/pt/aufgaben/tafeldienst.md":$y,"../../lessons/pt/aufgaben/taschenrechner.md":Yy,"../../lessons/pt/aufgaben/verleih-menue.md":Xy,"../../lessons/pt/aufgaben/vokabeltrainer.md":Ky,"../../lessons/pt/aufgaben/volljaehrig.md":ew,"../../lessons/pt/aufgaben/wuerfel-mvc.md":tw,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":nw}),Yu=Object.assign({"../../lessons/de/visubot/01-der-mbot2.md":iw,"../../lessons/de/visubot/02-das-quadrat.md":aw,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":sw,"../../lessons/de/visubot/04-sensoren.md":rw,"../../lessons/de/visubot/05-bis-zur-wand.md":ow,"../../lessons/de/visubot/06-abstand.md":lw,"../../lessons/de/visubot/07-linie.md":uw,"../../lessons/de/visubot/08-farben.md":mw,"../../lessons/de/visubot/09-fallauswahl.md":cw,"../../lessons/de/visubot/10-tasten-joystick.md":dw,"../../lessons/de/visubot/11-licht.md":hw,"../../lessons/de/visubot/12-lautstaerke.md":gw,"../../lessons/de/visubot/13-neigung.md":pw,"../../lessons/de/visubot/14-leds.md":fw,"../../lessons/de/visubot/15-einzelne-leds.md":bw,"../../lessons/de/visubot/16-lautsprecher.md":xw,"../../lessons/de/visubot/17-arrays-melodie.md":vw,"../../lessons/de/visubot/18-bildschirm.md":yw,"../../lessons/de/visubot/19-zeichenketten.md":ww,"../../lessons/de/visubot/20-motoren.md":zw,"../../lessons/de/visubot/21-stoppuhr-akku.md":Iw,"../../lessons/de/visubot/22-eigene-methoden.md":kw,"../../lessons/de/visubot/nachschlagen.md":Sw,"../../lessons/en/visubot/01-der-mbot2.md":Tw,"../../lessons/en/visubot/02-das-quadrat.md":_w,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":Cw,"../../lessons/en/visubot/04-sensoren.md":Aw,"../../lessons/en/visubot/05-bis-zur-wand.md":jw,"../../lessons/en/visubot/06-abstand.md":Ow,"../../lessons/en/visubot/07-linie.md":Pw,"../../lessons/en/visubot/08-farben.md":Mw,"../../lessons/en/visubot/09-fallauswahl.md":Dw,"../../lessons/en/visubot/10-tasten-joystick.md":Zw,"../../lessons/en/visubot/11-licht.md":Bw,"../../lessons/en/visubot/12-lautstaerke.md":Lw,"../../lessons/en/visubot/13-neigung.md":Ww,"../../lessons/en/visubot/14-leds.md":Ew,"../../lessons/en/visubot/15-einzelne-leds.md":Nw,"../../lessons/en/visubot/16-lautsprecher.md":Jw,"../../lessons/en/visubot/17-arrays-melodie.md":Fw,"../../lessons/en/visubot/18-bildschirm.md":Rw,"../../lessons/en/visubot/19-zeichenketten.md":Gw,"../../lessons/en/visubot/20-motoren.md":Hw,"../../lessons/en/visubot/21-stoppuhr-akku.md":Vw,"../../lessons/en/visubot/22-eigene-methoden.md":qw,"../../lessons/en/visubot/nachschlagen.md":Qw}),nZ=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":Uw,"../../lessons/de/visubot/aufgaben/ausgang.md":$w,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":Yw,"../../lessons/de/visubot/aufgaben/dreieck.md":Xw,"../../lessons/de/visubot/aufgaben/einparken.md":Kw,"../../lessons/de/visubot/aufgaben/hindernis.md":e9,"../../lessons/de/visubot/aufgaben/knight-rider.md":t9,"../../lessons/de/visubot/aufgaben/labyrinth.md":n9,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":i9,"../../lessons/de/visubot/aufgaben/morsen.md":a9,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":s9,"../../lessons/de/visubot/aufgaben/slalom.md":r9,"../../lessons/de/visubot/aufgaben/spirale.md":o9,"../../lessons/de/visubot/aufgaben/treppe.md":l9,"../../lessons/de/visubot/aufgaben/tunnel.md":u9,"../../lessons/de/visubot/aufgaben/wald.md":m9,"../../lessons/en/visubot/aufgaben/alarmanlage.md":c9,"../../lessons/en/visubot/aufgaben/ausgang.md":d9,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":h9,"../../lessons/en/visubot/aufgaben/dreieck.md":g9,"../../lessons/en/visubot/aufgaben/einparken.md":p9,"../../lessons/en/visubot/aufgaben/hindernis.md":f9,"../../lessons/en/visubot/aufgaben/knight-rider.md":b9,"../../lessons/en/visubot/aufgaben/labyrinth.md":x9,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":v9,"../../lessons/en/visubot/aufgaben/morsen.md":y9,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":w9,"../../lessons/en/visubot/aufgaben/slalom.md":z9,"../../lessons/en/visubot/aufgaben/spirale.md":I9,"../../lessons/en/visubot/aufgaben/treppe.md":k9,"../../lessons/en/visubot/aufgaben/tunnel.md":S9,"../../lessons/en/visubot/aufgaben/wald.md":T9}),iZ=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":_9,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":C9,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":A9,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":j9,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":O9,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":P9,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":M9,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":D9,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":Z9,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":B9,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":L9,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":W9,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":E9,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":N9,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":J9,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":F9,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":R9,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":G9,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":H9,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":V9,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":q9,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":Q9,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":U9,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":$9,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":Y9,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":X9,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":K9,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":e5,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":t5,"../../lessons/diagramme/dt-buffered.visustruct":n5,"../../lessons/diagramme/dt-csv.visustruct":i5,"../../lessons/diagramme/dt-json.visustruct":a5,"../../lessons/diagramme/dt-lesen.visustruct":s5,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":r5,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":o5,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":l5,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":u5,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":m5,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":c5,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":d5,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":h5,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":g5,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":p5,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":f5,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":b5,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":x5,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":v5,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":y5,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":w5,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":z5,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":I5,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":k5,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":S5,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":T5,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":_5,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":C5,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":A5,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":j5,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":O5,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":P5,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":M5,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":D5,"../../lessons/diagramme/en/dt-buffered.visustruct":Z5,"../../lessons/diagramme/en/dt-csv.visustruct":B5,"../../lessons/diagramme/en/dt-json.visustruct":L5,"../../lessons/diagramme/en/dt-lesen.visustruct":W5,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":E5,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":N5,"../../lessons/diagramme/en/kino-frei-start.visustruct":J5,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":F5,"../../lessons/diagramme/en/kino-karte-start.visustruct":R5,"../../lessons/diagramme/en/kino-saalplan.visustruct":G5,"../../lessons/diagramme/en/kino-verkaufen.visustruct":H5,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":V5,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":q5,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":Q5,"../../lessons/diagramme/en/l04-rechnen.visustruct":U5,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":$5,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":Y5,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":X5,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":K5,"../../lessons/diagramme/en/l04-tauschen.visustruct":ez,"../../lessons/diagramme/en/l05-datentypen.visustruct":tz,"../../lessons/diagramme/en/l05-division.visustruct":nz,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":iz,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":az,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":sz,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":rz,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":oz,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":lz,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":uz,"../../lessons/diagramme/en/l05-sequenz.visustruct":mz,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":cz,"../../lessons/diagramme/en/l06-eva.visustruct":dz,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":hz,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":gz,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":pz,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":fz,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":bz,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":xz,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":vz,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":yz,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":wz,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":zz,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":Iz,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":kz,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":Sz,"../../lessons/diagramme/en/l07-rabatt.visustruct":Tz,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":_z,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":Cz,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":Az,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":jz,"../../lessons/diagramme/en/l08-jugendticket.visustruct":Oz,"../../lessons/diagramme/en/l08-note.visustruct":Pz,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":Mz,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":Dz,"../../lessons/diagramme/en/l09-ampel.visustruct":Zz,"../../lessons/diagramme/en/l09-automat.visustruct":Bz,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":Lz,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":Wz,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":Ez,"../../lessons/diagramme/en/l09-note-loesung.visustruct":Nz,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":Jz,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":Fz,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":Rz,"../../lessons/diagramme/en/l1-sequenz.visustruct":Gz,"../../lessons/diagramme/en/l1-tee.visustruct":Hz,"../../lessons/diagramme/en/l1-verzweigung.visustruct":Vz,"../../lessons/diagramme/en/l1-wiederholung.visustruct":qz,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":Qz,"../../lessons/diagramme/en/l10-countdown.visustruct":Uz,"../../lessons/diagramme/en/l10-endlos.visustruct":$z,"../../lessons/diagramme/en/l10-fakultaet.visustruct":Yz,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":Xz,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":Kz,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":e6,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":t6,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":n6,"../../lessons/diagramme/en/l11-einmal.visustruct":i6,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":a6,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":s6,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":r6,"../../lessons/diagramme/en/l11-note-loesung.visustruct":o6,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":l6,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":u6,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":m6,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":c6,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":d6,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":h6,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":g6,"../../lessons/diagramme/en/l12-summe.visustruct":p6,"../../lessons/diagramme/en/l13-dreieck.visustruct":f6,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":b6,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":x6,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":v6,"../../lessons/diagramme/en/l13-java-fehler-start.visustruct":y6,"../../lessons/diagramme/en/l13-java-quadrate-loesung.visustruct":w6,"../../lessons/diagramme/en/l13-rechteck-loesung.visustruct":z6,"../../lessons/diagramme/en/l14-array-durchlaufen.visustruct":I6,"../../lessons/diagramme/en/l14-erster-letzter-loesung.visustruct":k6,"../../lessons/diagramme/en/l14-java-fehler-loesung.visustruct":S6,"../../lessons/diagramme/en/l14-java-fehler-start.visustruct":T6,"../../lessons/diagramme/en/l14-java-treppe-loesung.visustruct":_6,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":C6,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":A6,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":j6,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":O6,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":P6,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":M6,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":D6,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":Z6,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":B6,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":L6,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":W6,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":E6,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":N6,"../../lessons/diagramme/en/l15-quadrat.visustruct":J6,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":F6,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":R6,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":G6,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":H6,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":V6,"../../lessons/diagramme/en/l16-countdown-start.visustruct":q6,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":Q6,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":U6,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":$6,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":Y6,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":X6,"../../lessons/diagramme/en/l16-summe-start.visustruct":K6,"../../lessons/diagramme/en/l17-beispiel.visustruct":eI,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":tI,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":nI,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":iI,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":aI,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":sI,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":rI,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":oI,"../../lessons/diagramme/en/l18-beispiel.visustruct":lI,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":uI,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":mI,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":cI,"../../lessons/diagramme/en/l18-js-loesung.visustruct":dI,"../../lessons/diagramme/en/l18-python-loesung.visustruct":hI,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":gI,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":pI,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":fI,"../../lessons/diagramme/en/l2-ausgabe.visustruct":bI,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":xI,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":vI,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":yI,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":wI,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":zI,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":II,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":kI,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":SI,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":TI,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":_I,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":CI,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":AI,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":jI,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":OI,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":PI,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":MI,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":DI,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":ZI,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":BI,"../../lessons/diagramme/en/l27-java-json-start.visustruct":LI,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":WI,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":EI,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":NI,"../../lessons/diagramme/en/sim-kino-start.visustruct":JI,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":FI,"../../lessons/diagramme/en/sim-tausch-start.visustruct":RI,"../../lessons/diagramme/en/sim-tausch.visustruct":GI,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":HI,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":VI,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":qI,"../../lessons/diagramme/en/ss-bubblesort.visustruct":QI,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":UI,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":$I,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":YI,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":XI,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":KI,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":ek,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":tk,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":nk,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":ik,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":ak,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":sk,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":rk,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":ok,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":lk,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":uk,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":mk,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":ck,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":dk,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":hk,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":gk,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":pk,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":fk,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":bk,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":xk,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":vk,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":yk,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":wk,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":zk,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":Ik,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":kk,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":Sk,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":Tk,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":_k,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":Ck,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":Ak,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":jk,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":Ok,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":Pk,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":Mk,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":Dk,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":Zk,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":Bk,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":Lk,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":Wk,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":Ek,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":Nk,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":Jk,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":Fk,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":Rk,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":Gk,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":Hk,"../../lessons/diagramme/en/vb-ohne-noten-loesung.visustruct":Vk,"../../lessons/diagramme/en/vb-ohne-quadratzahl-loesung.visustruct":qk,"../../lessons/diagramme/en/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":Qk,"../../lessons/diagramme/en/vb-ohne-rueckwaerts-loesung.visustruct":Uk,"../../lessons/diagramme/en/vb-ohne-strecke-loesung.visustruct":$k,"../../lessons/diagramme/en/vb-ohne-summe-loesung.visustruct":Yk,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":Xk,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":Kk,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":e7,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":t7,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":n7,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":i7,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":a7,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":s7,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":r7,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":o7,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":l7,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":u7,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":m7,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":c7,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":d7,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":h7,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":g7,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":p7,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":f7,"../../lessons/diagramme/en/zk-mehr.visustruct":b7,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":x7,"../../lessons/diagramme/en/zk-split.visustruct":v7,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":y7,"../../lessons/diagramme/en/zk-zaehlen.visustruct":w7,"../../lessons/diagramme/en/zk-zeichen.visustruct":z7,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":I7,"../../lessons/diagramme/kino-frei-loesung.visustruct":k7,"../../lessons/diagramme/kino-frei-start.visustruct":S7,"../../lessons/diagramme/kino-karte-loesung.visustruct":T7,"../../lessons/diagramme/kino-karte-start.visustruct":_7,"../../lessons/diagramme/kino-saalplan.visustruct":C7,"../../lessons/diagramme/kino-verkaufen.visustruct":A7,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":j7,"../../lessons/diagramme/l04-java-fehler-start.visustruct":O7,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":P7,"../../lessons/diagramme/l04-rechnen.visustruct":M7,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":D7,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":Z7,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":B7,"../../lessons/diagramme/l04-tauschen-start.visustruct":L7,"../../lessons/diagramme/l04-tauschen.visustruct":W7,"../../lessons/diagramme/l05-datentypen.visustruct":E7,"../../lessons/diagramme/l05-division.visustruct":N7,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":J7,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":F7,"../../lessons/diagramme/l05-java-fehler-start.visustruct":R7,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":G7,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":H7,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":V7,"../../lessons/diagramme/l05-sekunden-start.visustruct":q7,"../../lessons/diagramme/l05-sequenz.visustruct":Q7,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":U7,"../../lessons/diagramme/l06-eva.visustruct":$7,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":Y7,"../../lessons/diagramme/l06-java-fehler-start.visustruct":X7,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":K7,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":eS,"../../lessons/diagramme/l06-rechner-loesung.visustruct":tS,"../../lessons/diagramme/l07-alter-pruefen.visustruct":nS,"../../lessons/diagramme/l07-betrag-loesung.visustruct":iS,"../../lessons/diagramme/l07-gerade-loesung.visustruct":aS,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":sS,"../../lessons/diagramme/l07-java-fehler-start.visustruct":rS,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":oS,"../../lessons/diagramme/l07-java-pizza-start.visustruct":lS,"../../lessons/diagramme/l07-maximum-loesung.visustruct":uS,"../../lessons/diagramme/l07-rabatt.visustruct":mS,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":cS,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":dS,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":hS,"../../lessons/diagramme/l08-java-fehler-start.visustruct":gS,"../../lessons/diagramme/l08-jugendticket.visustruct":pS,"../../lessons/diagramme/l08-note.visustruct":fS,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":bS,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":xS,"../../lessons/diagramme/l09-ampel.visustruct":vS,"../../lessons/diagramme/l09-automat.visustruct":yS,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":wS,"../../lessons/diagramme/l09-java-fehler-start.visustruct":zS,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":IS,"../../lessons/diagramme/l09-note-loesung.visustruct":kS,"../../lessons/diagramme/l09-rechner-loesung.visustruct":SS,"../../lessons/diagramme/l09-verschachtelt.visustruct":TS,"../../lessons/diagramme/l1-grundbausteine.visustruct":_S,"../../lessons/diagramme/l1-sequenz.visustruct":CS,"../../lessons/diagramme/l1-tee.visustruct":AS,"../../lessons/diagramme/l1-verzweigung.visustruct":jS,"../../lessons/diagramme/l1-wiederholung.visustruct":OS,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":PS,"../../lessons/diagramme/l10-countdown.visustruct":MS,"../../lessons/diagramme/l10-endlos.visustruct":DS,"../../lessons/diagramme/l10-fakultaet.visustruct":ZS,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":BS,"../../lessons/diagramme/l10-java-fehler-start.visustruct":LS,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":WS,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":ES,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":NS,"../../lessons/diagramme/l11-einmal.visustruct":JS,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":FS,"../../lessons/diagramme/l11-java-fehler-start.visustruct":RS,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":GS,"../../lessons/diagramme/l11-note-loesung.visustruct":HS,"../../lessons/diagramme/l11-summe-loesung.visustruct":VS,"../../lessons/diagramme/l12-countdown-loesung.visustruct":qS,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":QS,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":US,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":$S,"../../lessons/diagramme/l12-java-fehler-start.visustruct":YS,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":XS,"../../lessons/diagramme/l12-summe.visustruct":KS,"../../lessons/diagramme/l13-dreieck.visustruct":e8,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":t8,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":n8,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":i8,"../../lessons/diagramme/l13-java-fehler-start.visustruct":a8,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":s8,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":r8,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":o8,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":l8,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":u8,"../../lessons/diagramme/l14-java-fehler-start.visustruct":m8,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":c8,"../../lessons/diagramme/l14-namen-eingeben.visustruct":d8,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":h8,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":g8,"../../lessons/diagramme/l14-summe-maximum.visustruct":p8,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":f8,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":b8,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":x8,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":v8,"../../lessons/diagramme/l15-hauptprogramm.visustruct":y8,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":w8,"../../lessons/diagramme/l15-java-fehler-start.visustruct":z8,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":I8,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":k8,"../../lessons/diagramme/l15-quadrat.visustruct":S8,"../../lessons/diagramme/l15-titel-loesung.visustruct":T8,"../../lessons/diagramme/l15-unterprogramm.visustruct":_8,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":C8,"../../lessons/diagramme/l15-zeige-summe.visustruct":A8,"../../lessons/diagramme/l16-countdown-loesung.visustruct":j8,"../../lessons/diagramme/l16-countdown-start.visustruct":O8,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":P8,"../../lessons/diagramme/l16-java-fehler-start.visustruct":M8,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":D8,"../../lessons/diagramme/l16-schreibtisch.visustruct":Z8,"../../lessons/diagramme/l16-summe-loesung.visustruct":B8,"../../lessons/diagramme/l16-summe-start.visustruct":L8,"../../lessons/diagramme/l17-beispiel.visustruct":W8,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":E8,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":N8,"../../lessons/diagramme/l17-java-brief-start.visustruct":J8,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":F8,"../../lessons/diagramme/l17-java-fehler-start.visustruct":R8,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":G8,"../../lessons/diagramme/l17-ticket-loesung.visustruct":H8,"../../lessons/diagramme/l18-beispiel.visustruct":V8,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":q8,"../../lessons/diagramme/l18-java-fehler-start.visustruct":Q8,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":U8,"../../lessons/diagramme/l18-js-loesung.visustruct":$8,"../../lessons/diagramme/l18-python-loesung.visustruct":Y8,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":X8,"../../lessons/diagramme/l19-java-fehler-start.visustruct":K8,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":eT,"../../lessons/diagramme/l2-ausgabe.visustruct":tT,"../../lessons/diagramme/l2-hallo-loesung.visustruct":nT,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":iT,"../../lessons/diagramme/l20-countdown-loesung.visustruct":aT,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":sT,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":rT,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":oT,"../../lessons/diagramme/l23-java-nummern-start.visustruct":lT,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":uT,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":mT,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":cT,"../../lessons/diagramme/l24-java-laengster-start.visustruct":dT,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":hT,"../../lessons/diagramme/l25-java-beste-start.visustruct":gT,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":pT,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":fT,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":bT,"../../lessons/diagramme/l26-java-namen-start.visustruct":xT,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":vT,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":yT,"../../lessons/diagramme/l27-java-json-loesung.visustruct":wT,"../../lessons/diagramme/l27-java-json-start.visustruct":zT,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":IT,"../../lessons/diagramme/l27-java-saetze-start.visustruct":kT,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":ST,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":TT,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":_T,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":CT,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":AT,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":jT,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":OT,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":PT,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":MT,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":DT,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":ZT,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":BT,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":LT,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":WT,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":ET,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":NT,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":JT,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":FT,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":RT,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":GT,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":HT,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":VT,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":qT,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":QT,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":UT,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":$T,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":YT,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":XT,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":KT,"../../lessons/diagramme/pt/dt-buffered.visustruct":e_,"../../lessons/diagramme/pt/dt-csv.visustruct":t_,"../../lessons/diagramme/pt/dt-json.visustruct":n_,"../../lessons/diagramme/pt/dt-lesen.visustruct":i_,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":a_,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":s_,"../../lessons/diagramme/pt/kino-frei-start.visustruct":r_,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":o_,"../../lessons/diagramme/pt/kino-karte-start.visustruct":l_,"../../lessons/diagramme/pt/kino-saalplan.visustruct":u_,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":m_,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":c_,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":d_,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":h_,"../../lessons/diagramme/pt/l04-rechnen.visustruct":g_,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":p_,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":f_,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":b_,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":x_,"../../lessons/diagramme/pt/l04-tauschen.visustruct":v_,"../../lessons/diagramme/pt/l05-datentypen.visustruct":y_,"../../lessons/diagramme/pt/l05-division.visustruct":w_,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":z_,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":I_,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":k_,"../../lessons/diagramme/pt/l05-java-kino-loesung.visustruct":S_,"../../lessons/diagramme/pt/l05-rechteck-loesung.visustruct":T_,"../../lessons/diagramme/pt/l05-sekunden-loesung.visustruct":__,"../../lessons/diagramme/pt/l05-sekunden-start.visustruct":C_,"../../lessons/diagramme/pt/l05-sequenz.visustruct":A_,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":j_,"../../lessons/diagramme/pt/l06-eva.visustruct":O_,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":P_,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":M_,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":D_,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":Z_,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":B_,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":L_,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":W_,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":E_,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":N_,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":J_,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":F_,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":R_,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":G_,"../../lessons/diagramme/pt/l07-rabatt.visustruct":H_,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":V_,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":q_,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":Q_,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":U_,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":$_,"../../lessons/diagramme/pt/l08-note.visustruct":Y_,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":X_,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":K_,"../../lessons/diagramme/pt/l09-ampel.visustruct":eC,"../../lessons/diagramme/pt/l09-automat.visustruct":tC,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":nC,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":iC,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":aC,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":sC,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":rC,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":oC,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":lC,"../../lessons/diagramme/pt/l1-sequenz.visustruct":uC,"../../lessons/diagramme/pt/l1-tee.visustruct":mC,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":cC,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":dC,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":hC,"../../lessons/diagramme/pt/l10-countdown.visustruct":gC,"../../lessons/diagramme/pt/l10-endlos.visustruct":pC,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":fC,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":bC,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":xC,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":vC,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":yC,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":wC,"../../lessons/diagramme/pt/l11-einmal.visustruct":zC,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":IC,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":kC,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":SC,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":TC,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":_C,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":CC,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":AC,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":jC,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":OC,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":PC,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":MC,"../../lessons/diagramme/pt/l12-summe.visustruct":DC,"../../lessons/diagramme/pt/l13-dreieck.visustruct":ZC,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":BC,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":LC,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":WC,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":EC,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":NC,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":JC,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":FC,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":RC,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":GC,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":HC,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":VC,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":qC,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":QC,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":UC,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":$C,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":YC,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":XC,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":KC,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":eA,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":tA,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":nA,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":iA,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":aA,"../../lessons/diagramme/pt/l15-quadrat.visustruct":sA,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":rA,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":oA,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":lA,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":uA,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":mA,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":cA,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":dA,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":hA,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":gA,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":pA,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":fA,"../../lessons/diagramme/pt/l16-summe-start.visustruct":bA,"../../lessons/diagramme/pt/l17-beispiel.visustruct":xA,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":vA,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":yA,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":wA,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":zA,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":IA,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":kA,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":SA,"../../lessons/diagramme/pt/l18-beispiel.visustruct":TA,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":_A,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":CA,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":AA,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":jA,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":OA,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":PA,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":MA,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":DA,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":ZA,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":BA,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":LA,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":WA,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":EA,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":NA,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":JA,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":FA,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":RA,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":GA,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":HA,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":VA,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":qA,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":QA,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":UA,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":$A,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":YA,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":XA,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":KA,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":ej,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":tj,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":nj,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":ij,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":aj,"../../lessons/diagramme/pt/sim-kino-start.visustruct":sj,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":rj,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":oj,"../../lessons/diagramme/pt/sim-tausch.visustruct":lj,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":uj,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":mj,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":cj,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":dj,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":hj,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":gj,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":pj,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":fj,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":bj,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":xj,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":vj,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":yj,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":wj,"../../lessons/diagramme/pt/zk-mehr.visustruct":zj,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":Ij,"../../lessons/diagramme/pt/zk-split.visustruct":kj,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":Sj,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":Tj,"../../lessons/diagramme/pt/zk-zeichen.visustruct":_j,"../../lessons/diagramme/sim-kino-loesung.visustruct":Cj,"../../lessons/diagramme/sim-kino-start.visustruct":Aj,"../../lessons/diagramme/sim-tausch-loesung.visustruct":jj,"../../lessons/diagramme/sim-tausch-start.visustruct":Oj,"../../lessons/diagramme/sim-tausch.visustruct":Pj,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":Mj,"../../lessons/diagramme/ss-absteigend-start.visustruct":Dj,"../../lessons/diagramme/ss-binaere-suche.visustruct":Zj,"../../lessons/diagramme/ss-bubblesort.visustruct":Bj,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":Lj,"../../lessons/diagramme/ss-lineare-suche.visustruct":Wj,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":Ej,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":Nj,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":Jj,"../../lessons/diagramme/uebergabe-haupt.visustruct":Fj,"../../lessons/diagramme/uebergabe-leeren.visustruct":Rj,"../../lessons/diagramme/uebergabe-verdopple.visustruct":Gj,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":Hj,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":Vj,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":qj,"../../lessons/diagramme/vb-ampel-loesung.visustruct":Qj,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":Uj,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":$j,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":Yj,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":Xj,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":Kj,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":eO,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":tO,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":nO,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":iO,"../../lessons/diagramme/vb-einparken-loesung.visustruct":aO,"../../lessons/diagramme/vb-farben-loesung.visustruct":sO,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":rO,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":oO,"../../lessons/diagramme/vb-gerade-loesung.visustruct":lO,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":uO,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":mO,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":cO,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":dO,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":hO,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":gO,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":pO,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":fO,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":bO,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":xO,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":vO,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":yO,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":wO,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":zO,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":IO,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":kO,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":SO,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":TO,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":_O,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":CO,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":AO,"../../lessons/diagramme/vb-melodie-loesung.visustruct":jO,"../../lessons/diagramme/vb-morsen-loesung.visustruct":OO,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":PO,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":MO,"../../lessons/diagramme/vb-ohne-noten-loesung.visustruct":DO,"../../lessons/diagramme/vb-ohne-quadratzahl-loesung.visustruct":ZO,"../../lessons/diagramme/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":BO,"../../lessons/diagramme/vb-ohne-rueckwaerts-loesung.visustruct":LO,"../../lessons/diagramme/vb-ohne-strecke-loesung.visustruct":WO,"../../lessons/diagramme/vb-ohne-summe-loesung.visustruct":EO,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":NO,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":JO,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":FO,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":RO,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":GO,"../../lessons/diagramme/vb-rand-loesung.visustruct":HO,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":VO,"../../lessons/diagramme/vb-slalom-loesung.visustruct":qO,"../../lessons/diagramme/vb-spirale-loesung.visustruct":QO,"../../lessons/diagramme/vb-start-a-loesung.visustruct":UO,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":$O,"../../lessons/diagramme/vb-treppe-loesung.visustruct":YO,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":XO,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":KO,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":eP,"../../lessons/diagramme/vb-wald-loesung.visustruct":tP,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":nP,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":iP,"../../lessons/diagramme/zk-initialen-loesung.visustruct":aP,"../../lessons/diagramme/zk-mehr.visustruct":sP,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":rP,"../../lessons/diagramme/zk-split.visustruct":oP,"../../lessons/diagramme/zk-woerter-loesung.visustruct":lP,"../../lessons/diagramme/zk-zaehlen.visustruct":uP,"../../lessons/diagramme/zk-zeichen.visustruct":mP}),aZ=Object.assign({"../../lessons/welten/ausgang-1.txt":cP,"../../lessons/welten/ausgang-2.txt":dP,"../../lessons/welten/ecke.txt":hP,"../../lessons/welten/farbe-1.txt":gP,"../../lessons/welten/farbe-2.txt":pP,"../../lessons/welten/farbe-3.txt":fP,"../../lessons/welten/farbe-4.txt":bP,"../../lessons/welten/hindernis-1.txt":xP,"../../lessons/welten/hindernis-2.txt":vP,"../../lessons/welten/labyrinth-1.txt":yP,"../../lessons/welten/labyrinth-2.txt":wP,"../../lessons/welten/linie-1.txt":zP,"../../lessons/welten/linie-2.txt":IP,"../../lessons/welten/linie-rot-1.txt":kP,"../../lessons/welten/linie-rot-2.txt":SP,"../../lessons/welten/parken-1.txt":TP,"../../lessons/welten/parken-2.txt":_P,"../../lessons/welten/rand-1.txt":CP,"../../lessons/welten/rand-2.txt":AP,"../../lessons/welten/slalom.txt":jP,"../../lessons/welten/tunnel-1.txt":OP,"../../lessons/welten/tunnel-2.txt":PP,"../../lessons/welten/wald-1.txt":MP,"../../lessons/welten/wald-2.txt":DP,"../../lessons/welten/wand-frei.txt":ZP,"../../lessons/welten/wand-kurz.txt":BP,"../../lessons/welten/wand-lang.txt":LP,"../../lessons/welten/wand-mittel.txt":WP,"../../lessons/welten/wand-nah.txt":EP,"../../lessons/welten/zeit-1.txt":NP,"../../lessons/welten/ziel-kurz.txt":JP,"../../lessons/welten/ziel-lang.txt":FP}),sZ=Object.assign({"../../lessons/bilder/ada-lovelace.jpg":RP,"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":GP,"../../lessons/bilder/ben-shneiderman.jpg":HP,"../../lessons/bilder/caesar-ascii.svg":VP,"../../lessons/bilder/caesar-scheibe.svg":qP,"../../lessons/bilder/caesar-verschiebung.svg":QP,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":UP,"../../lessons/bilder/en/kino-saal.svg":$P,"../../lessons/bilder/en/kino-schleifen.svg":YP,"../../lessons/bilder/en/l01-pap.svg":XP,"../../lessons/bilder/en/l02-einfuegen.svg":KP,"../../lessons/bilder/en/l03-lochkarte-beschriftet.svg":eM,"../../lessons/bilder/en/l03-lochkarte.svg":tM,"../../lessons/bilder/en/l04-camelcase.svg":nM,"../../lessons/bilder/en/l04-variable.svg":iM,"../../lessons/bilder/en/l04-zuweisung.svg":aM,"../../lessons/bilder/en/l05-tauschen.svg":sM,"../../lessons/bilder/en/l08-zahlenstrahl.svg":rM,"../../lessons/bilder/en/l10-kopfgesteuert.svg":oM,"../../lessons/bilder/en/l11-vergleich.svg":lM,"../../lessons/bilder/en/l12-for-ablauf.svg":uM,"../../lessons/bilder/en/l14-array.svg":mM,"../../lessons/bilder/en/l20-cpp.svg":cM,"../../lessons/bilder/en/l20-jvm.svg":dM,"../../lessons/bilder/en/mvc-klick.svg":hM,"../../lessons/bilder/en/ss-binaere-suche.svg":gM,"../../lessons/bilder/en/ss-bubblesort.svg":pM,"../../lessons/bilder/en/ss-lineare-suche.svg":fM,"../../lessons/bilder/en/ss-vergleiche.svg":bM,"../../lessons/bilder/en/uebergabe.svg":xM,"../../lessons/bilder/en/zk-zeichen.svg":vM,"../../lessons/bilder/grace-hopper.jpg":yM,"../../lessons/bilder/hedy-lamarr.jpg":wM,"../../lessons/bilder/ike-nassi.jpg":zM,"../../lessons/bilder/katherine-johnson.jpg":IM,"../../lessons/bilder/kino-saal.svg":kM,"../../lessons/bilder/kino-schleifen.svg":SM,"../../lessons/bilder/l01-pap.svg":TM,"../../lessons/bilder/l02-einfuegen.svg":_M,"../../lessons/bilder/l03-lochkarte-beschriftet.svg":CM,"../../lessons/bilder/l03-lochkarte.svg":AM,"../../lessons/bilder/l03-zuse-lochstreifen.svg":jM,"../../lessons/bilder/l04-camelcase.svg":OM,"../../lessons/bilder/l04-variable.svg":PM,"../../lessons/bilder/l04-zuweisung.svg":MM,"../../lessons/bilder/l05-tauschen.svg":DM,"../../lessons/bilder/l08-zahlenstrahl.svg":ZM,"../../lessons/bilder/l09-wahrheitstabelle.svg":BM,"../../lessons/bilder/l10-kopfgesteuert.svg":LM,"../../lessons/bilder/l11-vergleich.svg":WM,"../../lessons/bilder/l12-for-ablauf.svg":EM,"../../lessons/bilder/l14-array.svg":NM,"../../lessons/bilder/l20-cpp.svg":JM,"../../lessons/bilder/l20-jvm.svg":FM,"../../lessons/bilder/margaret-hamilton.jpg":RM,"../../lessons/bilder/mvc-klick.svg":GM,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":HM,"../../lessons/bilder/pt/kino-saal.svg":VM,"../../lessons/bilder/pt/kino-schleifen.svg":qM,"../../lessons/bilder/pt/l01-pap.svg":QM,"../../lessons/bilder/pt/l02-einfuegen.svg":UM,"../../lessons/bilder/pt/l03-lochkarte-beschriftet.svg":$M,"../../lessons/bilder/pt/l03-lochkarte.svg":YM,"../../lessons/bilder/pt/l04-camelcase.svg":XM,"../../lessons/bilder/pt/l04-variable.svg":KM,"../../lessons/bilder/pt/l04-zuweisung.svg":eD,"../../lessons/bilder/pt/l05-tauschen.svg":tD,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":nD,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":iD,"../../lessons/bilder/pt/l11-vergleich.svg":aD,"../../lessons/bilder/pt/l12-for-ablauf.svg":sD,"../../lessons/bilder/pt/l14-array.svg":rD,"../../lessons/bilder/pt/l20-cpp.svg":oD,"../../lessons/bilder/pt/l20-jvm.svg":lD,"../../lessons/bilder/pt/mvc-klick.svg":uD,"../../lessons/bilder/pt/schiffe-versenken.svg":mD,"../../lessons/bilder/pt/ss-binaere-suche.svg":cD,"../../lessons/bilder/pt/ss-bubblesort.svg":dD,"../../lessons/bilder/pt/ss-lineare-suche.svg":hD,"../../lessons/bilder/pt/ss-vergleiche.svg":gD,"../../lessons/bilder/pt/uebergabe.svg":pD,"../../lessons/bilder/pt/zk-zeichen.svg":fD,"../../lessons/bilder/schiffe-versenken.svg":bD,"../../lessons/bilder/ss-binaere-suche.svg":xD,"../../lessons/bilder/ss-bubblesort.svg":vD,"../../lessons/bilder/ss-lineare-suche.svg":yD,"../../lessons/bilder/ss-vergleiche.svg":wD,"../../lessons/bilder/uebergabe.svg":zD,"../../lessons/bilder/zk-zeichen.svg":ID}),cg=i=>i.replace(/^.*\//,"");function Q1(i,e,t){const n=s=>new Map(Object.entries(i).filter(([r])=>{var o;return((o=e.exec(r))==null?void 0:o[1])===s}).map(([r,o])=>[cg(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function Xu(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let k1="en",Pt=[],jn=[],Ga="",Ha=[],vs="off";function Ku(i){i!==vs&&(vs=i,Pt=[],ys(k1))}function ys(i){var s,r,o;if(j3(i),i===k1&&Pt.length>0)return;k1=i;const e=Q1(eZ,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>XD(nm(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=KD(nm(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=Q1(tZ,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(vs==="on"){const l=Q1(Yu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=rZ(tm(e),tm(l)),m=t(e,u.normal),c=h=>{var g;return((g=[...m].reverse().find(f=>u.normal.get(f.number)({...h,number:u.normal.get(h.number)})),...t(l,u.robot).map(h=>{const g=u.robot.get(h.number);return{...h,number:g,section:c(g),robot:!0}})].sort((h,g)=>h.number-g.number);const d=Q1(nZ,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);jn=[...n(a,"aufgaben/",u.normal),...n(d,"visubot/aufgaben/",u.robot).map(h=>({...h,robot:!0}))]}else Pt=t(e),jn=n(a,"aufgaben/");jn.sort((l,u)=>(l.after??0)-(u.after??0)||l.level-u.level||l.title.localeCompare(u.title,i));for(const l of[...Pt.flatMap(u=>u.steps.flatMap(m=>m.blocks)),...jn.flatMap(u=>u.blocks)])l.kind==="textFile"&&N3(l.name,l.content);if(Ga=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",vs!=="off"){const l=(r=Q1(Yu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&(Ga=`${Ga.trimEnd()} +`)){const h=/^##\s+(.*)$/.exec(d);h?(u(),l={title:h[1].trim(),lines:[]}):l?l.lines.push(d):o.push(d)}if(u(),r.length===0)throw new ne(`${e}: Keine Schritte (## Überschrift) gefunden.`);EZ(r,e);const m=t.get("titel");if(!m)throw new ne(`${e}: „titel:“ fehlt.`);return{id:a,number:s,title:m,section:t.get("bereich")??"",summary:t.get("kurz")??o.join(" ").trim(),steps:r}}function FZ(i,e){const{meta:t,body:n}=lg(i,e),a=t.get("titel");if(!a)throw new ne(`${e}: „titel:“ fehlt.`);const s=t.get("nach");return{id:e.replace(/^.*\//,"").replace(/\.md$/,""),title:a,after:s?Number(s):void 0,level:Number(t.get("stufe")??"1")||1,blocks:mg(n,e)}}function $u(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!L3(n))throw new ne(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${kh.join(", ")}.`);return t}const JZ=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":_b,"../../lessons/de/02-der-editor.md":jb,"../../lessons/de/03-speichern-oeffnen-exportieren.md":Cb,"../../lessons/de/04-variablen-und-datentypen.md":Ab,"../../lessons/de/05-sequenz.md":Pb,"../../lessons/de/06-eingabe-und-ausgabe.md":Ob,"../../lessons/de/07-simulation-und-schreibtischtest.md":Db,"../../lessons/de/08-verzweigung.md":Mb,"../../lessons/de/09-bedingungen-verknuepfen.md":Bb,"../../lessons/de/10-fallauswahl.md":Zb,"../../lessons/de/11-while-schleife.md":Lb,"../../lessons/de/12-do-while-schleife.md":Wb,"../../lessons/de/13-for-schleife.md":Eb,"../../lessons/de/14-verschachteln.md":Nb,"../../lessons/de/15-arrays.md":Fb,"../../lessons/de/16-zweidimensionale-arrays.md":Jb,"../../lessons/de/17-zeichenketten.md":Rb,"../../lessons/de/18-aufruf-und-aussprung.md":Gb,"../../lessons/de/19-suchen-und-sortieren.md":Hb,"../../lessons/de/20-java.md":Vb,"../../lessons/de/21-python-und-javascript.md":qb,"../../lessons/de/22-try-und-catch.md":Qb,"../../lessons/de/23-text-einlesen-und-speichern.md":Ub,"../../lessons/de/24-zeile-fuer-zeile.md":$b,"../../lessons/de/25-tabellen-als-csv.md":Yb,"../../lessons/de/26-json.md":Xb,"../../lessons/de/27-formate-im-vergleich.md":Kb,"../../lessons/de/28-erstes-fenster.md":e4,"../../lessons/de/29-knopf-im-fenster.md":t4,"../../lessons/de/30-der-knopf-reagiert.md":n4,"../../lessons/de/31-zahl-verdoppeln.md":i4,"../../lessons/de/32-klickzaehler.md":a4,"../../lessons/de/33-ampel.md":s4,"../../lessons/de/34-notenrechner.md":r4,"../../lessons/de/35-taschenrechner.md":o4,"../../lessons/de/36-zahlenraten.md":l4,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":u4,"../../lessons/de/38-innere-klassen.md":m4,"../../lessons/de/39-zwei-reiter.md":c4,"../../lessons/de/40-model-view-controller.md":d4,"../../lessons/de/begriffe.md":h4,"../../lessons/de/nachschlagen.md":g4,"../../lessons/en/01-was-ist-ein-struktogramm.md":p4,"../../lessons/en/02-der-editor.md":f4,"../../lessons/en/03-speichern-oeffnen-exportieren.md":x4,"../../lessons/en/04-variablen-und-datentypen.md":b4,"../../lessons/en/05-sequenz.md":v4,"../../lessons/en/06-eingabe-und-ausgabe.md":y4,"../../lessons/en/07-simulation-und-schreibtischtest.md":w4,"../../lessons/en/08-verzweigung.md":z4,"../../lessons/en/09-bedingungen-verknuepfen.md":I4,"../../lessons/en/10-fallauswahl.md":k4,"../../lessons/en/11-while-schleife.md":S4,"../../lessons/en/12-do-while-schleife.md":T4,"../../lessons/en/13-for-schleife.md":_4,"../../lessons/en/14-verschachteln.md":j4,"../../lessons/en/15-arrays.md":C4,"../../lessons/en/16-zweidimensionale-arrays.md":A4,"../../lessons/en/17-zeichenketten.md":P4,"../../lessons/en/18-aufruf-und-aussprung.md":O4,"../../lessons/en/19-suchen-und-sortieren.md":D4,"../../lessons/en/20-java.md":M4,"../../lessons/en/21-python-und-javascript.md":B4,"../../lessons/en/22-try-und-catch.md":Z4,"../../lessons/en/23-text-einlesen-und-speichern.md":L4,"../../lessons/en/24-zeile-fuer-zeile.md":W4,"../../lessons/en/25-tabellen-als-csv.md":E4,"../../lessons/en/26-json.md":N4,"../../lessons/en/27-formate-im-vergleich.md":F4,"../../lessons/en/28-erstes-fenster.md":J4,"../../lessons/en/29-knopf-im-fenster.md":R4,"../../lessons/en/30-der-knopf-reagiert.md":G4,"../../lessons/en/31-zahl-verdoppeln.md":H4,"../../lessons/en/32-klickzaehler.md":V4,"../../lessons/en/33-ampel.md":q4,"../../lessons/en/34-notenrechner.md":Q4,"../../lessons/en/35-taschenrechner.md":U4,"../../lessons/en/36-zahlenraten.md":$4,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":Y4,"../../lessons/en/38-innere-klassen.md":X4,"../../lessons/en/39-zwei-reiter.md":K4,"../../lessons/en/40-model-view-controller.md":ev,"../../lessons/en/begriffe.md":tv,"../../lessons/en/nachschlagen.md":nv,"../../lessons/pt/01-was-ist-ein-struktogramm.md":iv,"../../lessons/pt/02-der-editor.md":av,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":sv,"../../lessons/pt/04-variablen-und-datentypen.md":rv,"../../lessons/pt/05-sequenz.md":ov,"../../lessons/pt/06-eingabe-und-ausgabe.md":lv,"../../lessons/pt/07-simulation-und-schreibtischtest.md":uv,"../../lessons/pt/08-verzweigung.md":mv,"../../lessons/pt/09-bedingungen-verknuepfen.md":cv,"../../lessons/pt/10-fallauswahl.md":dv,"../../lessons/pt/11-while-schleife.md":hv,"../../lessons/pt/12-do-while-schleife.md":gv,"../../lessons/pt/13-for-schleife.md":pv,"../../lessons/pt/14-verschachteln.md":fv,"../../lessons/pt/15-arrays.md":xv,"../../lessons/pt/16-zweidimensionale-arrays.md":bv,"../../lessons/pt/17-zeichenketten.md":vv,"../../lessons/pt/18-aufruf-und-aussprung.md":yv,"../../lessons/pt/19-suchen-und-sortieren.md":wv,"../../lessons/pt/20-java.md":zv,"../../lessons/pt/21-python-und-javascript.md":Iv,"../../lessons/pt/22-try-und-catch.md":kv,"../../lessons/pt/23-text-einlesen-und-speichern.md":Sv,"../../lessons/pt/24-zeile-fuer-zeile.md":Tv,"../../lessons/pt/25-tabellen-als-csv.md":_v,"../../lessons/pt/26-json.md":jv,"../../lessons/pt/27-formate-im-vergleich.md":Cv,"../../lessons/pt/28-erstes-fenster.md":Av,"../../lessons/pt/29-knopf-im-fenster.md":Pv,"../../lessons/pt/30-der-knopf-reagiert.md":Ov,"../../lessons/pt/31-zahl-verdoppeln.md":Dv,"../../lessons/pt/32-klickzaehler.md":Mv,"../../lessons/pt/33-ampel.md":Bv,"../../lessons/pt/34-notenrechner.md":Zv,"../../lessons/pt/35-taschenrechner.md":Lv,"../../lessons/pt/36-zahlenraten.md":Wv,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":Ev,"../../lessons/pt/38-innere-klassen.md":Nv,"../../lessons/pt/39-zwei-reiter.md":Fv,"../../lessons/pt/40-model-view-controller.md":Jv,"../../lessons/pt/begriffe.md":Rv,"../../lessons/pt/nachschlagen.md":Gv}),RZ=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":Hv,"../../lessons/de/aufgaben/ballwurf.md":Vv,"../../lessons/de/aufgaben/bestenliste.md":qv,"../../lessons/de/aufgaben/binaerzahl.md":Qv,"../../lessons/de/aufgaben/caesar.md":Uv,"../../lessons/de/aufgaben/collatz.md":$v,"../../lessons/de/aufgaben/einheitenrechner.md":Yv,"../../lessons/de/aufgaben/fibonacci.md":Xv,"../../lessons/de/aufgaben/gerade-ungerade.md":Kv,"../../lessons/de/aufgaben/mehrwertsteuer.md":ey,"../../lessons/de/aufgaben/notendurchschnitt.md":ty,"../../lessons/de/aufgaben/pin-pruefen.md":ny,"../../lessons/de/aufgaben/schiffe-versenken.md":iy,"../../lessons/de/aufgaben/speisekarte.md":ay,"../../lessons/de/aufgaben/summe-bilden.md":sy,"../../lessons/de/aufgaben/tafeldienst.md":ry,"../../lessons/de/aufgaben/taschenrechner.md":oy,"../../lessons/de/aufgaben/verleih-menue.md":ly,"../../lessons/de/aufgaben/vokabeltrainer.md":uy,"../../lessons/de/aufgaben/volljaehrig.md":my,"../../lessons/de/aufgaben/wuerfel-mvc.md":cy,"../../lessons/de/aufgaben/zahl-verdoppeln.md":dy,"../../lessons/en/aufgaben/alter-unterprogramm.md":hy,"../../lessons/en/aufgaben/ballwurf.md":gy,"../../lessons/en/aufgaben/bestenliste.md":py,"../../lessons/en/aufgaben/binaerzahl.md":fy,"../../lessons/en/aufgaben/caesar.md":xy,"../../lessons/en/aufgaben/collatz.md":by,"../../lessons/en/aufgaben/einheitenrechner.md":vy,"../../lessons/en/aufgaben/fibonacci.md":yy,"../../lessons/en/aufgaben/gerade-ungerade.md":wy,"../../lessons/en/aufgaben/mehrwertsteuer.md":zy,"../../lessons/en/aufgaben/notendurchschnitt.md":Iy,"../../lessons/en/aufgaben/pin-pruefen.md":ky,"../../lessons/en/aufgaben/schiffe-versenken.md":Sy,"../../lessons/en/aufgaben/speisekarte.md":Ty,"../../lessons/en/aufgaben/summe-bilden.md":_y,"../../lessons/en/aufgaben/tafeldienst.md":jy,"../../lessons/en/aufgaben/taschenrechner.md":Cy,"../../lessons/en/aufgaben/verleih-menue.md":Ay,"../../lessons/en/aufgaben/vokabeltrainer.md":Py,"../../lessons/en/aufgaben/volljaehrig.md":Oy,"../../lessons/en/aufgaben/wuerfel-mvc.md":Dy,"../../lessons/en/aufgaben/zahl-verdoppeln.md":My,"../../lessons/pt/aufgaben/alter-unterprogramm.md":By,"../../lessons/pt/aufgaben/ballwurf.md":Zy,"../../lessons/pt/aufgaben/bestenliste.md":Ly,"../../lessons/pt/aufgaben/binaerzahl.md":Wy,"../../lessons/pt/aufgaben/caesar.md":Ey,"../../lessons/pt/aufgaben/collatz.md":Ny,"../../lessons/pt/aufgaben/einheitenrechner.md":Fy,"../../lessons/pt/aufgaben/fibonacci.md":Jy,"../../lessons/pt/aufgaben/gerade-ungerade.md":Ry,"../../lessons/pt/aufgaben/mehrwertsteuer.md":Gy,"../../lessons/pt/aufgaben/notendurchschnitt.md":Hy,"../../lessons/pt/aufgaben/pin-pruefen.md":Vy,"../../lessons/pt/aufgaben/schiffe-versenken.md":qy,"../../lessons/pt/aufgaben/speisekarte.md":Qy,"../../lessons/pt/aufgaben/summe-bilden.md":Uy,"../../lessons/pt/aufgaben/tafeldienst.md":$y,"../../lessons/pt/aufgaben/taschenrechner.md":Yy,"../../lessons/pt/aufgaben/verleih-menue.md":Xy,"../../lessons/pt/aufgaben/vokabeltrainer.md":Ky,"../../lessons/pt/aufgaben/volljaehrig.md":e9,"../../lessons/pt/aufgaben/wuerfel-mvc.md":t9,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":n9}),Yu=Object.assign({"../../lessons/de/visubot/01-der-mbot2.md":i9,"../../lessons/de/visubot/02-das-quadrat.md":a9,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":s9,"../../lessons/de/visubot/04-sensoren.md":r9,"../../lessons/de/visubot/05-bis-zur-wand.md":o9,"../../lessons/de/visubot/06-abstand.md":l9,"../../lessons/de/visubot/07-linie.md":u9,"../../lessons/de/visubot/08-farben.md":m9,"../../lessons/de/visubot/09-fallauswahl.md":c9,"../../lessons/de/visubot/10-tasten-joystick.md":d9,"../../lessons/de/visubot/11-licht.md":h9,"../../lessons/de/visubot/12-lautstaerke.md":g9,"../../lessons/de/visubot/13-neigung.md":p9,"../../lessons/de/visubot/14-leds.md":f9,"../../lessons/de/visubot/15-einzelne-leds.md":x9,"../../lessons/de/visubot/16-lautsprecher.md":b9,"../../lessons/de/visubot/17-arrays-melodie.md":v9,"../../lessons/de/visubot/18-bildschirm.md":y9,"../../lessons/de/visubot/19-zeichenketten.md":w9,"../../lessons/de/visubot/20-motoren.md":z9,"../../lessons/de/visubot/21-stoppuhr-akku.md":I9,"../../lessons/de/visubot/22-eigene-methoden.md":k9,"../../lessons/de/visubot/nachschlagen.md":S9,"../../lessons/en/visubot/01-der-mbot2.md":T9,"../../lessons/en/visubot/02-das-quadrat.md":_9,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":j9,"../../lessons/en/visubot/04-sensoren.md":C9,"../../lessons/en/visubot/05-bis-zur-wand.md":A9,"../../lessons/en/visubot/06-abstand.md":P9,"../../lessons/en/visubot/07-linie.md":O9,"../../lessons/en/visubot/08-farben.md":D9,"../../lessons/en/visubot/09-fallauswahl.md":M9,"../../lessons/en/visubot/10-tasten-joystick.md":B9,"../../lessons/en/visubot/11-licht.md":Z9,"../../lessons/en/visubot/12-lautstaerke.md":L9,"../../lessons/en/visubot/13-neigung.md":W9,"../../lessons/en/visubot/14-leds.md":E9,"../../lessons/en/visubot/15-einzelne-leds.md":N9,"../../lessons/en/visubot/16-lautsprecher.md":F9,"../../lessons/en/visubot/17-arrays-melodie.md":J9,"../../lessons/en/visubot/18-bildschirm.md":R9,"../../lessons/en/visubot/19-zeichenketten.md":G9,"../../lessons/en/visubot/20-motoren.md":H9,"../../lessons/en/visubot/21-stoppuhr-akku.md":V9,"../../lessons/en/visubot/22-eigene-methoden.md":q9,"../../lessons/en/visubot/nachschlagen.md":Q9}),GZ=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":U9,"../../lessons/de/visubot/aufgaben/ausgang.md":$9,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":Y9,"../../lessons/de/visubot/aufgaben/dreieck.md":X9,"../../lessons/de/visubot/aufgaben/einparken.md":K9,"../../lessons/de/visubot/aufgaben/hindernis.md":ew,"../../lessons/de/visubot/aufgaben/knight-rider.md":tw,"../../lessons/de/visubot/aufgaben/labyrinth.md":nw,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":iw,"../../lessons/de/visubot/aufgaben/morsen.md":aw,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":sw,"../../lessons/de/visubot/aufgaben/slalom.md":rw,"../../lessons/de/visubot/aufgaben/spirale.md":ow,"../../lessons/de/visubot/aufgaben/treppe.md":lw,"../../lessons/de/visubot/aufgaben/tunnel.md":uw,"../../lessons/de/visubot/aufgaben/wald.md":mw,"../../lessons/en/visubot/aufgaben/alarmanlage.md":cw,"../../lessons/en/visubot/aufgaben/ausgang.md":dw,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":hw,"../../lessons/en/visubot/aufgaben/dreieck.md":gw,"../../lessons/en/visubot/aufgaben/einparken.md":pw,"../../lessons/en/visubot/aufgaben/hindernis.md":fw,"../../lessons/en/visubot/aufgaben/knight-rider.md":xw,"../../lessons/en/visubot/aufgaben/labyrinth.md":bw,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":vw,"../../lessons/en/visubot/aufgaben/morsen.md":yw,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":ww,"../../lessons/en/visubot/aufgaben/slalom.md":zw,"../../lessons/en/visubot/aufgaben/spirale.md":Iw,"../../lessons/en/visubot/aufgaben/treppe.md":kw,"../../lessons/en/visubot/aufgaben/tunnel.md":Sw,"../../lessons/en/visubot/aufgaben/wald.md":Tw}),HZ=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":_w,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":jw,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":Cw,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":Aw,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":Pw,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":Ow,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":Dw,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":Mw,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":Bw,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":Zw,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":Lw,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":Ww,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":Ew,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":Nw,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":Fw,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":Jw,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":Rw,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":Gw,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":Hw,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":Vw,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":qw,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":Qw,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":Uw,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":$w,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":Yw,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":Xw,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":Kw,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":e5,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":t5,"../../lessons/diagramme/dt-buffered.visustruct":n5,"../../lessons/diagramme/dt-csv.visustruct":i5,"../../lessons/diagramme/dt-json.visustruct":a5,"../../lessons/diagramme/dt-lesen.visustruct":s5,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":r5,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":o5,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":l5,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":u5,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":m5,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":c5,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":d5,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":h5,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":g5,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":p5,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":f5,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":x5,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":b5,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":v5,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":y5,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":w5,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":z5,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":I5,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":k5,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":S5,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":T5,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":_5,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":j5,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":C5,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":A5,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":P5,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":O5,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":D5,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":M5,"../../lessons/diagramme/en/dt-buffered.visustruct":B5,"../../lessons/diagramme/en/dt-csv.visustruct":Z5,"../../lessons/diagramme/en/dt-json.visustruct":L5,"../../lessons/diagramme/en/dt-lesen.visustruct":W5,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":E5,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":N5,"../../lessons/diagramme/en/kino-frei-start.visustruct":F5,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":J5,"../../lessons/diagramme/en/kino-karte-start.visustruct":R5,"../../lessons/diagramme/en/kino-saalplan.visustruct":G5,"../../lessons/diagramme/en/kino-verkaufen.visustruct":H5,"../../lessons/diagramme/en/l04-gross-klein-loesung.visustruct":V5,"../../lessons/diagramme/en/l04-gross-klein-start.visustruct":q5,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":Q5,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":U5,"../../lessons/diagramme/en/l04-java-laeuft-nicht-loesung.visustruct":$5,"../../lessons/diagramme/en/l04-java-laeuft-nicht-start.visustruct":Y5,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":X5,"../../lessons/diagramme/en/l04-rechnen.visustruct":K5,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":ez,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":tz,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":nz,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":iz,"../../lessons/diagramme/en/l04-tauschen.visustruct":az,"../../lessons/diagramme/en/l05-datentypen.visustruct":sz,"../../lessons/diagramme/en/l05-division.visustruct":rz,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":oz,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":lz,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":uz,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":mz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-loesung.visustruct":cz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-start.visustruct":dz,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":hz,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":gz,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":pz,"../../lessons/diagramme/en/l05-sequenz.visustruct":fz,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":xz,"../../lessons/diagramme/en/l06-eva.visustruct":bz,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":vz,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":yz,"../../lessons/diagramme/en/l06-java-laeuft-nicht-loesung.visustruct":wz,"../../lessons/diagramme/en/l06-java-laeuft-nicht-start.visustruct":zz,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":Iz,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":kz,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":Sz,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":Tz,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":_z,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":jz,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":Cz,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":Az,"../../lessons/diagramme/en/l07-java-laeuft-nicht-loesung.visustruct":Pz,"../../lessons/diagramme/en/l07-java-laeuft-nicht-start.visustruct":Oz,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":Dz,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":Mz,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":Bz,"../../lessons/diagramme/en/l07-rabatt.visustruct":Zz,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":Lz,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":Wz,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":Ez,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":Nz,"../../lessons/diagramme/en/l08-java-laeuft-nicht-loesung.visustruct":Fz,"../../lessons/diagramme/en/l08-java-laeuft-nicht-start.visustruct":Jz,"../../lessons/diagramme/en/l08-jugendticket.visustruct":Rz,"../../lessons/diagramme/en/l08-note.visustruct":Gz,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":Hz,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":Vz,"../../lessons/diagramme/en/l09-ampel.visustruct":qz,"../../lessons/diagramme/en/l09-automat.visustruct":Qz,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":Uz,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":$z,"../../lessons/diagramme/en/l09-java-laeuft-nicht-loesung.visustruct":Yz,"../../lessons/diagramme/en/l09-java-laeuft-nicht-start.visustruct":Xz,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":Kz,"../../lessons/diagramme/en/l09-note-loesung.visustruct":e6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":t6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":n6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":i6,"../../lessons/diagramme/en/l1-sequenz.visustruct":a6,"../../lessons/diagramme/en/l1-tee.visustruct":s6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":r6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":o6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":l6,"../../lessons/diagramme/en/l10-countdown.visustruct":u6,"../../lessons/diagramme/en/l10-endlos.visustruct":m6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":c6,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":d6,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":h6,"../../lessons/diagramme/en/l10-java-laeuft-nicht-loesung.visustruct":g6,"../../lessons/diagramme/en/l10-java-laeuft-nicht-start.visustruct":p6,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":f6,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":x6,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":b6,"../../lessons/diagramme/en/l11-einmal.visustruct":v6,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":y6,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":w6,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":z6,"../../lessons/diagramme/en/l11-java-laeuft-nicht-loesung.visustruct":I6,"../../lessons/diagramme/en/l11-java-laeuft-nicht-start.visustruct":k6,"../../lessons/diagramme/en/l11-note-loesung.visustruct":S6,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":T6,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":_6,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":j6,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":C6,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":A6,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":P6,"../../lessons/diagramme/en/l12-java-laeuft-nicht-loesung.visustruct":O6,"../../lessons/diagramme/en/l12-java-laeuft-nicht-start.visustruct":D6,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":M6,"../../lessons/diagramme/en/l12-summe.visustruct":B6,"../../lessons/diagramme/en/l13-dreieck.visustruct":Z6,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":L6,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":W6,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":E6,"../../lessons/diagramme/en/l13-java-fehler-start.visustruct":N6,"../../lessons/diagramme/en/l13-java-laeuft-nicht-loesung.visustruct":F6,"../../lessons/diagramme/en/l13-java-laeuft-nicht-start.visustruct":J6,"../../lessons/diagramme/en/l13-java-quadrate-loesung.visustruct":R6,"../../lessons/diagramme/en/l13-rechteck-loesung.visustruct":G6,"../../lessons/diagramme/en/l14-array-durchlaufen.visustruct":H6,"../../lessons/diagramme/en/l14-erster-letzter-loesung.visustruct":V6,"../../lessons/diagramme/en/l14-java-fehler-loesung.visustruct":q6,"../../lessons/diagramme/en/l14-java-fehler-start.visustruct":Q6,"../../lessons/diagramme/en/l14-java-laeuft-nicht-loesung.visustruct":U6,"../../lessons/diagramme/en/l14-java-laeuft-nicht-start.visustruct":$6,"../../lessons/diagramme/en/l14-java-treppe-loesung.visustruct":Y6,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":X6,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":K6,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":eI,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":tI,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":nI,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":iI,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":aI,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":sI,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":rI,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":oI,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":lI,"../../lessons/diagramme/en/l15-java-laeuft-nicht-loesung.visustruct":uI,"../../lessons/diagramme/en/l15-java-laeuft-nicht-start.visustruct":mI,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":cI,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":dI,"../../lessons/diagramme/en/l15-quadrat.visustruct":hI,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":gI,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":pI,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":fI,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":xI,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":bI,"../../lessons/diagramme/en/l16-countdown-start.visustruct":vI,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":yI,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":wI,"../../lessons/diagramme/en/l16-java-laeuft-nicht-loesung.visustruct":zI,"../../lessons/diagramme/en/l16-java-laeuft-nicht-start.visustruct":II,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":kI,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":SI,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":TI,"../../lessons/diagramme/en/l16-summe-start.visustruct":_I,"../../lessons/diagramme/en/l17-beispiel.visustruct":jI,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":CI,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":AI,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":PI,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":OI,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":DI,"../../lessons/diagramme/en/l17-java-laeuft-nicht-loesung.visustruct":MI,"../../lessons/diagramme/en/l17-java-laeuft-nicht-start.visustruct":BI,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":ZI,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":LI,"../../lessons/diagramme/en/l18-beispiel.visustruct":WI,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":EI,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":NI,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":FI,"../../lessons/diagramme/en/l18-js-loesung.visustruct":JI,"../../lessons/diagramme/en/l18-python-loesung.visustruct":RI,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":GI,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":HI,"../../lessons/diagramme/en/l19-java-laeuft-nicht-loesung.visustruct":VI,"../../lessons/diagramme/en/l19-java-laeuft-nicht-start.visustruct":qI,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":QI,"../../lessons/diagramme/en/l2-ausgabe.visustruct":UI,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":$I,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":YI,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":XI,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":KI,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":e7,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":t7,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":n7,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":i7,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":a7,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":s7,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":r7,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":o7,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":l7,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":u7,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":m7,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":c7,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":d7,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":h7,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":g7,"../../lessons/diagramme/en/l27-java-json-start.visustruct":p7,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":f7,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":x7,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":b7,"../../lessons/diagramme/en/sim-kino-start.visustruct":v7,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":y7,"../../lessons/diagramme/en/sim-tausch-start.visustruct":w7,"../../lessons/diagramme/en/sim-tausch.visustruct":z7,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":I7,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":k7,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":S7,"../../lessons/diagramme/en/ss-bubblesort.visustruct":T7,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":_7,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":j7,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":C7,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":A7,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":P7,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":O7,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":D7,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":M7,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":B7,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":Z7,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":L7,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":W7,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":E7,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":N7,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":F7,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":J7,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":R7,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":G7,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":H7,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":V7,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":q7,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":Q7,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":U7,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":$7,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":Y7,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":X7,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":K7,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":ek,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":tk,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":nk,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":ik,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":ak,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":sk,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":rk,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":ok,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":lk,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":uk,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":mk,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":ck,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":dk,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":hk,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":gk,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":pk,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":fk,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":xk,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":bk,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":vk,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":yk,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":wk,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":zk,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":Ik,"../../lessons/diagramme/en/vb-ohne-noten-loesung.visustruct":kk,"../../lessons/diagramme/en/vb-ohne-quadratzahl-loesung.visustruct":Sk,"../../lessons/diagramme/en/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":Tk,"../../lessons/diagramme/en/vb-ohne-rueckwaerts-loesung.visustruct":_k,"../../lessons/diagramme/en/vb-ohne-strecke-loesung.visustruct":jk,"../../lessons/diagramme/en/vb-ohne-summe-loesung.visustruct":Ck,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":Ak,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":Pk,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":Ok,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":Dk,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":Mk,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":Bk,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":Zk,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":Lk,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":Wk,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":Ek,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":Nk,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":Fk,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":Jk,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":Rk,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":Gk,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":Hk,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":Vk,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":qk,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":Qk,"../../lessons/diagramme/en/zk-mehr.visustruct":Uk,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":$k,"../../lessons/diagramme/en/zk-split.visustruct":Yk,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":Xk,"../../lessons/diagramme/en/zk-zaehlen.visustruct":Kk,"../../lessons/diagramme/en/zk-zeichen.visustruct":e8,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":t8,"../../lessons/diagramme/kino-frei-loesung.visustruct":n8,"../../lessons/diagramme/kino-frei-start.visustruct":i8,"../../lessons/diagramme/kino-karte-loesung.visustruct":a8,"../../lessons/diagramme/kino-karte-start.visustruct":s8,"../../lessons/diagramme/kino-saalplan.visustruct":r8,"../../lessons/diagramme/kino-verkaufen.visustruct":o8,"../../lessons/diagramme/l04-gross-klein-loesung.visustruct":l8,"../../lessons/diagramme/l04-gross-klein-start.visustruct":u8,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":m8,"../../lessons/diagramme/l04-java-fehler-start.visustruct":c8,"../../lessons/diagramme/l04-java-laeuft-nicht-loesung.visustruct":d8,"../../lessons/diagramme/l04-java-laeuft-nicht-start.visustruct":h8,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":g8,"../../lessons/diagramme/l04-rechnen.visustruct":p8,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":f8,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":x8,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":b8,"../../lessons/diagramme/l04-tauschen-start.visustruct":v8,"../../lessons/diagramme/l04-tauschen.visustruct":y8,"../../lessons/diagramme/l05-datentypen.visustruct":w8,"../../lessons/diagramme/l05-division.visustruct":z8,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":I8,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":k8,"../../lessons/diagramme/l05-java-fehler-start.visustruct":S8,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":T8,"../../lessons/diagramme/l05-java-laeuft-nicht-loesung.visustruct":_8,"../../lessons/diagramme/l05-java-laeuft-nicht-start.visustruct":j8,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":C8,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":A8,"../../lessons/diagramme/l05-sekunden-start.visustruct":P8,"../../lessons/diagramme/l05-sequenz.visustruct":O8,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":D8,"../../lessons/diagramme/l06-eva.visustruct":M8,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":B8,"../../lessons/diagramme/l06-java-fehler-start.visustruct":Z8,"../../lessons/diagramme/l06-java-laeuft-nicht-loesung.visustruct":L8,"../../lessons/diagramme/l06-java-laeuft-nicht-start.visustruct":W8,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":E8,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":N8,"../../lessons/diagramme/l06-rechner-loesung.visustruct":F8,"../../lessons/diagramme/l07-alter-pruefen.visustruct":J8,"../../lessons/diagramme/l07-betrag-loesung.visustruct":R8,"../../lessons/diagramme/l07-gerade-loesung.visustruct":G8,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":H8,"../../lessons/diagramme/l07-java-fehler-start.visustruct":V8,"../../lessons/diagramme/l07-java-laeuft-nicht-loesung.visustruct":q8,"../../lessons/diagramme/l07-java-laeuft-nicht-start.visustruct":Q8,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":U8,"../../lessons/diagramme/l07-java-pizza-start.visustruct":$8,"../../lessons/diagramme/l07-maximum-loesung.visustruct":Y8,"../../lessons/diagramme/l07-rabatt.visustruct":X8,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":K8,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":eS,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":tS,"../../lessons/diagramme/l08-java-fehler-start.visustruct":nS,"../../lessons/diagramme/l08-java-laeuft-nicht-loesung.visustruct":iS,"../../lessons/diagramme/l08-java-laeuft-nicht-start.visustruct":aS,"../../lessons/diagramme/l08-jugendticket.visustruct":sS,"../../lessons/diagramme/l08-note.visustruct":rS,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":oS,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":lS,"../../lessons/diagramme/l09-ampel.visustruct":uS,"../../lessons/diagramme/l09-automat.visustruct":mS,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":cS,"../../lessons/diagramme/l09-java-fehler-start.visustruct":dS,"../../lessons/diagramme/l09-java-laeuft-nicht-loesung.visustruct":hS,"../../lessons/diagramme/l09-java-laeuft-nicht-start.visustruct":gS,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":pS,"../../lessons/diagramme/l09-note-loesung.visustruct":fS,"../../lessons/diagramme/l09-rechner-loesung.visustruct":xS,"../../lessons/diagramme/l09-verschachtelt.visustruct":bS,"../../lessons/diagramme/l1-grundbausteine.visustruct":vS,"../../lessons/diagramme/l1-sequenz.visustruct":yS,"../../lessons/diagramme/l1-tee.visustruct":wS,"../../lessons/diagramme/l1-verzweigung.visustruct":zS,"../../lessons/diagramme/l1-wiederholung.visustruct":IS,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":kS,"../../lessons/diagramme/l10-countdown.visustruct":SS,"../../lessons/diagramme/l10-endlos.visustruct":TS,"../../lessons/diagramme/l10-fakultaet.visustruct":_S,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":jS,"../../lessons/diagramme/l10-java-fehler-start.visustruct":CS,"../../lessons/diagramme/l10-java-laeuft-nicht-loesung.visustruct":AS,"../../lessons/diagramme/l10-java-laeuft-nicht-start.visustruct":PS,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":OS,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":DS,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":MS,"../../lessons/diagramme/l11-einmal.visustruct":BS,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":ZS,"../../lessons/diagramme/l11-java-fehler-start.visustruct":LS,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":WS,"../../lessons/diagramme/l11-java-laeuft-nicht-loesung.visustruct":ES,"../../lessons/diagramme/l11-java-laeuft-nicht-start.visustruct":NS,"../../lessons/diagramme/l11-note-loesung.visustruct":FS,"../../lessons/diagramme/l11-summe-loesung.visustruct":JS,"../../lessons/diagramme/l12-countdown-loesung.visustruct":RS,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":GS,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":HS,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":VS,"../../lessons/diagramme/l12-java-fehler-start.visustruct":qS,"../../lessons/diagramme/l12-java-laeuft-nicht-loesung.visustruct":QS,"../../lessons/diagramme/l12-java-laeuft-nicht-start.visustruct":US,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":$S,"../../lessons/diagramme/l12-summe.visustruct":YS,"../../lessons/diagramme/l13-dreieck.visustruct":XS,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":KS,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":eT,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":tT,"../../lessons/diagramme/l13-java-fehler-start.visustruct":nT,"../../lessons/diagramme/l13-java-laeuft-nicht-loesung.visustruct":iT,"../../lessons/diagramme/l13-java-laeuft-nicht-start.visustruct":aT,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":sT,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":rT,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":oT,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":lT,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":uT,"../../lessons/diagramme/l14-java-fehler-start.visustruct":mT,"../../lessons/diagramme/l14-java-laeuft-nicht-loesung.visustruct":cT,"../../lessons/diagramme/l14-java-laeuft-nicht-start.visustruct":dT,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":hT,"../../lessons/diagramme/l14-namen-eingeben.visustruct":gT,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":pT,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":fT,"../../lessons/diagramme/l14-summe-maximum.visustruct":xT,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":bT,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":vT,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":yT,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":wT,"../../lessons/diagramme/l15-hauptprogramm.visustruct":zT,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":IT,"../../lessons/diagramme/l15-java-fehler-start.visustruct":kT,"../../lessons/diagramme/l15-java-laeuft-nicht-loesung.visustruct":ST,"../../lessons/diagramme/l15-java-laeuft-nicht-start.visustruct":TT,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":_T,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":jT,"../../lessons/diagramme/l15-quadrat.visustruct":CT,"../../lessons/diagramme/l15-titel-loesung.visustruct":AT,"../../lessons/diagramme/l15-unterprogramm.visustruct":PT,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":OT,"../../lessons/diagramme/l15-zeige-summe.visustruct":DT,"../../lessons/diagramme/l16-countdown-loesung.visustruct":MT,"../../lessons/diagramme/l16-countdown-start.visustruct":BT,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":ZT,"../../lessons/diagramme/l16-java-fehler-start.visustruct":LT,"../../lessons/diagramme/l16-java-laeuft-nicht-loesung.visustruct":WT,"../../lessons/diagramme/l16-java-laeuft-nicht-start.visustruct":ET,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":NT,"../../lessons/diagramme/l16-schreibtisch.visustruct":FT,"../../lessons/diagramme/l16-summe-loesung.visustruct":JT,"../../lessons/diagramme/l16-summe-start.visustruct":RT,"../../lessons/diagramme/l17-beispiel.visustruct":GT,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":HT,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":VT,"../../lessons/diagramme/l17-java-brief-start.visustruct":qT,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":QT,"../../lessons/diagramme/l17-java-fehler-start.visustruct":UT,"../../lessons/diagramme/l17-java-laeuft-nicht-loesung.visustruct":$T,"../../lessons/diagramme/l17-java-laeuft-nicht-start.visustruct":YT,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":XT,"../../lessons/diagramme/l17-ticket-loesung.visustruct":KT,"../../lessons/diagramme/l18-beispiel.visustruct":e_,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":t_,"../../lessons/diagramme/l18-java-fehler-start.visustruct":n_,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":i_,"../../lessons/diagramme/l18-js-loesung.visustruct":a_,"../../lessons/diagramme/l18-python-loesung.visustruct":s_,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":r_,"../../lessons/diagramme/l19-java-fehler-start.visustruct":o_,"../../lessons/diagramme/l19-java-laeuft-nicht-loesung.visustruct":l_,"../../lessons/diagramme/l19-java-laeuft-nicht-start.visustruct":u_,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":m_,"../../lessons/diagramme/l2-ausgabe.visustruct":c_,"../../lessons/diagramme/l2-hallo-loesung.visustruct":d_,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":h_,"../../lessons/diagramme/l20-countdown-loesung.visustruct":g_,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":p_,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":f_,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":x_,"../../lessons/diagramme/l23-java-nummern-start.visustruct":b_,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":v_,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":y_,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":w_,"../../lessons/diagramme/l24-java-laengster-start.visustruct":z_,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":I_,"../../lessons/diagramme/l25-java-beste-start.visustruct":k_,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":S_,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":T_,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":__,"../../lessons/diagramme/l26-java-namen-start.visustruct":j_,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":C_,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":A_,"../../lessons/diagramme/l27-java-json-loesung.visustruct":P_,"../../lessons/diagramme/l27-java-json-start.visustruct":O_,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":D_,"../../lessons/diagramme/l27-java-saetze-start.visustruct":M_,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":B_,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":Z_,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":L_,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":W_,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":E_,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":N_,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":F_,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":J_,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":R_,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":G_,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":H_,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":V_,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":q_,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":Q_,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":U_,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":$_,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":Y_,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":X_,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":K_,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":ej,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":tj,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":nj,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":ij,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":aj,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":sj,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":rj,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":oj,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":lj,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":uj,"../../lessons/diagramme/pt/dt-buffered.visustruct":mj,"../../lessons/diagramme/pt/dt-csv.visustruct":cj,"../../lessons/diagramme/pt/dt-json.visustruct":dj,"../../lessons/diagramme/pt/dt-lesen.visustruct":hj,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":gj,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":pj,"../../lessons/diagramme/pt/kino-frei-start.visustruct":fj,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":xj,"../../lessons/diagramme/pt/kino-karte-start.visustruct":bj,"../../lessons/diagramme/pt/kino-saalplan.visustruct":vj,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":yj,"../../lessons/diagramme/pt/l04-gross-klein-loesung.visustruct":wj,"../../lessons/diagramme/pt/l04-gross-klein-start.visustruct":zj,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":Ij,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":kj,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-loesung.visustruct":Sj,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-start.visustruct":Tj,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":_j,"../../lessons/diagramme/pt/l04-rechnen.visustruct":jj,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":Cj,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":Aj,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":Pj,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":Oj,"../../lessons/diagramme/pt/l04-tauschen.visustruct":Dj,"../../lessons/diagramme/pt/l05-datentypen.visustruct":Mj,"../../lessons/diagramme/pt/l05-division.visustruct":Bj,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":Zj,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":Lj,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":Wj,"../../lessons/diagramme/pt/l05-java-kino-loesung.visustruct":Ej,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-loesung.visustruct":Nj,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-start.visustruct":Fj,"../../lessons/diagramme/pt/l05-rechteck-loesung.visustruct":Jj,"../../lessons/diagramme/pt/l05-sekunden-loesung.visustruct":Rj,"../../lessons/diagramme/pt/l05-sekunden-start.visustruct":Gj,"../../lessons/diagramme/pt/l05-sequenz.visustruct":Hj,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":Vj,"../../lessons/diagramme/pt/l06-eva.visustruct":qj,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":Qj,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":Uj,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-loesung.visustruct":$j,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-start.visustruct":Yj,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":Xj,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":Kj,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":eC,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":tC,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":nC,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":iC,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":aC,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":sC,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-loesung.visustruct":rC,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-start.visustruct":oC,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":lC,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":uC,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":mC,"../../lessons/diagramme/pt/l07-rabatt.visustruct":cC,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":dC,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":hC,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":gC,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":pC,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-loesung.visustruct":fC,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-start.visustruct":xC,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":bC,"../../lessons/diagramme/pt/l08-note.visustruct":vC,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":yC,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":wC,"../../lessons/diagramme/pt/l09-ampel.visustruct":zC,"../../lessons/diagramme/pt/l09-automat.visustruct":IC,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":kC,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":SC,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-loesung.visustruct":TC,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-start.visustruct":_C,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":jC,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":CC,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":AC,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":PC,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":OC,"../../lessons/diagramme/pt/l1-sequenz.visustruct":DC,"../../lessons/diagramme/pt/l1-tee.visustruct":MC,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":BC,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":ZC,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":LC,"../../lessons/diagramme/pt/l10-countdown.visustruct":WC,"../../lessons/diagramme/pt/l10-endlos.visustruct":EC,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":NC,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":FC,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":JC,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-loesung.visustruct":RC,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-start.visustruct":GC,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":HC,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":VC,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":qC,"../../lessons/diagramme/pt/l11-einmal.visustruct":QC,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":UC,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":$C,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":YC,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-loesung.visustruct":XC,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-start.visustruct":KC,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":eA,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":tA,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":nA,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":iA,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":aA,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":sA,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":rA,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-loesung.visustruct":oA,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-start.visustruct":lA,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":uA,"../../lessons/diagramme/pt/l12-summe.visustruct":mA,"../../lessons/diagramme/pt/l13-dreieck.visustruct":cA,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":dA,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":hA,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":gA,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":pA,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-loesung.visustruct":fA,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-start.visustruct":xA,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":bA,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":vA,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":yA,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":wA,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":zA,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":IA,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-loesung.visustruct":kA,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-start.visustruct":SA,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":TA,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":_A,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":jA,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":CA,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":AA,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":PA,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":OA,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":DA,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":MA,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":BA,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":ZA,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-loesung.visustruct":LA,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-start.visustruct":WA,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":EA,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":NA,"../../lessons/diagramme/pt/l15-quadrat.visustruct":FA,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":JA,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":RA,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":GA,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":HA,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":VA,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":qA,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":QA,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":UA,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-loesung.visustruct":$A,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-start.visustruct":YA,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":XA,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":KA,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":eP,"../../lessons/diagramme/pt/l16-summe-start.visustruct":tP,"../../lessons/diagramme/pt/l17-beispiel.visustruct":nP,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":iP,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":aP,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":sP,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":rP,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":oP,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-loesung.visustruct":lP,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-start.visustruct":uP,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":mP,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":cP,"../../lessons/diagramme/pt/l18-beispiel.visustruct":dP,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":hP,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":gP,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":pP,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":fP,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":xP,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":bP,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":vP,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-loesung.visustruct":yP,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-start.visustruct":wP,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":zP,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":IP,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":kP,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":SP,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":TP,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":_P,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":jP,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":CP,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":AP,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":PP,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":OP,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":DP,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":MP,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":BP,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":ZP,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":LP,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":WP,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":EP,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":NP,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":FP,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":JP,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":RP,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":GP,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":HP,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":VP,"../../lessons/diagramme/pt/sim-kino-start.visustruct":qP,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":QP,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":UP,"../../lessons/diagramme/pt/sim-tausch.visustruct":$P,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":YP,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":XP,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":KP,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":eO,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":tO,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":nO,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":iO,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":aO,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":sO,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":rO,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":oO,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":lO,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":uO,"../../lessons/diagramme/pt/zk-mehr.visustruct":mO,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":cO,"../../lessons/diagramme/pt/zk-split.visustruct":dO,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":hO,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":gO,"../../lessons/diagramme/pt/zk-zeichen.visustruct":pO,"../../lessons/diagramme/sim-kino-loesung.visustruct":fO,"../../lessons/diagramme/sim-kino-start.visustruct":xO,"../../lessons/diagramme/sim-tausch-loesung.visustruct":bO,"../../lessons/diagramme/sim-tausch-start.visustruct":vO,"../../lessons/diagramme/sim-tausch.visustruct":yO,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":wO,"../../lessons/diagramme/ss-absteigend-start.visustruct":zO,"../../lessons/diagramme/ss-binaere-suche.visustruct":IO,"../../lessons/diagramme/ss-bubblesort.visustruct":kO,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":SO,"../../lessons/diagramme/ss-lineare-suche.visustruct":TO,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":_O,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":jO,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":CO,"../../lessons/diagramme/uebergabe-haupt.visustruct":AO,"../../lessons/diagramme/uebergabe-leeren.visustruct":PO,"../../lessons/diagramme/uebergabe-verdopple.visustruct":OO,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":DO,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":MO,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":BO,"../../lessons/diagramme/vb-ampel-loesung.visustruct":ZO,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":LO,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":WO,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":EO,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":NO,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":FO,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":JO,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":RO,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":GO,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":HO,"../../lessons/diagramme/vb-einparken-loesung.visustruct":VO,"../../lessons/diagramme/vb-farben-loesung.visustruct":qO,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":QO,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":UO,"../../lessons/diagramme/vb-gerade-loesung.visustruct":$O,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":YO,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":XO,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":KO,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":eD,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":tD,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":nD,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":iD,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":aD,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":sD,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":rD,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":oD,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":lD,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":uD,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":mD,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":cD,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":dD,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":hD,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":gD,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":pD,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":fD,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":xD,"../../lessons/diagramme/vb-melodie-loesung.visustruct":bD,"../../lessons/diagramme/vb-morsen-loesung.visustruct":vD,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":yD,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":wD,"../../lessons/diagramme/vb-ohne-noten-loesung.visustruct":zD,"../../lessons/diagramme/vb-ohne-quadratzahl-loesung.visustruct":ID,"../../lessons/diagramme/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":kD,"../../lessons/diagramme/vb-ohne-rueckwaerts-loesung.visustruct":SD,"../../lessons/diagramme/vb-ohne-strecke-loesung.visustruct":TD,"../../lessons/diagramme/vb-ohne-summe-loesung.visustruct":_D,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":jD,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":CD,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":AD,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":PD,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":OD,"../../lessons/diagramme/vb-rand-loesung.visustruct":DD,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":MD,"../../lessons/diagramme/vb-slalom-loesung.visustruct":BD,"../../lessons/diagramme/vb-spirale-loesung.visustruct":ZD,"../../lessons/diagramme/vb-start-a-loesung.visustruct":LD,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":WD,"../../lessons/diagramme/vb-treppe-loesung.visustruct":ED,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":ND,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":FD,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":JD,"../../lessons/diagramme/vb-wald-loesung.visustruct":RD,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":GD,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":HD,"../../lessons/diagramme/zk-initialen-loesung.visustruct":VD,"../../lessons/diagramme/zk-mehr.visustruct":qD,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":QD,"../../lessons/diagramme/zk-split.visustruct":UD,"../../lessons/diagramme/zk-woerter-loesung.visustruct":$D,"../../lessons/diagramme/zk-zaehlen.visustruct":YD,"../../lessons/diagramme/zk-zeichen.visustruct":XD}),VZ=Object.assign({"../../lessons/welten/ausgang-1.txt":KD,"../../lessons/welten/ausgang-2.txt":eM,"../../lessons/welten/ecke.txt":tM,"../../lessons/welten/farbe-1.txt":nM,"../../lessons/welten/farbe-2.txt":iM,"../../lessons/welten/farbe-3.txt":aM,"../../lessons/welten/farbe-4.txt":sM,"../../lessons/welten/hindernis-1.txt":rM,"../../lessons/welten/hindernis-2.txt":oM,"../../lessons/welten/labyrinth-1.txt":lM,"../../lessons/welten/labyrinth-2.txt":uM,"../../lessons/welten/linie-1.txt":mM,"../../lessons/welten/linie-2.txt":cM,"../../lessons/welten/linie-rot-1.txt":dM,"../../lessons/welten/linie-rot-2.txt":hM,"../../lessons/welten/parken-1.txt":gM,"../../lessons/welten/parken-2.txt":pM,"../../lessons/welten/rand-1.txt":fM,"../../lessons/welten/rand-2.txt":xM,"../../lessons/welten/slalom.txt":bM,"../../lessons/welten/tunnel-1.txt":vM,"../../lessons/welten/tunnel-2.txt":yM,"../../lessons/welten/wald-1.txt":wM,"../../lessons/welten/wald-2.txt":zM,"../../lessons/welten/wand-frei.txt":IM,"../../lessons/welten/wand-kurz.txt":kM,"../../lessons/welten/wand-lang.txt":SM,"../../lessons/welten/wand-mittel.txt":TM,"../../lessons/welten/wand-nah.txt":_M,"../../lessons/welten/zeit-1.txt":jM,"../../lessons/welten/ziel-kurz.txt":CM,"../../lessons/welten/ziel-lang.txt":AM}),qZ=Object.assign({"../../lessons/bilder/ada-lovelace.jpg":PM,"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":OM,"../../lessons/bilder/ben-shneiderman.jpg":DM,"../../lessons/bilder/caesar-ascii.svg":MM,"../../lessons/bilder/caesar-scheibe.svg":BM,"../../lessons/bilder/caesar-verschiebung.svg":ZM,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":LM,"../../lessons/bilder/en/kino-saal.svg":WM,"../../lessons/bilder/en/kino-schleifen.svg":EM,"../../lessons/bilder/en/l01-pap.svg":NM,"../../lessons/bilder/en/l02-einfuegen.svg":FM,"../../lessons/bilder/en/l03-lochkarte-beschriftet.svg":JM,"../../lessons/bilder/en/l03-lochkarte.svg":RM,"../../lessons/bilder/en/l04-camelcase.svg":GM,"../../lessons/bilder/en/l04-variable.svg":HM,"../../lessons/bilder/en/l04-zuweisung.svg":VM,"../../lessons/bilder/en/l05-tauschen.svg":qM,"../../lessons/bilder/en/l08-zahlenstrahl.svg":QM,"../../lessons/bilder/en/l10-kopfgesteuert.svg":UM,"../../lessons/bilder/en/l11-vergleich.svg":$M,"../../lessons/bilder/en/l12-for-ablauf.svg":YM,"../../lessons/bilder/en/l14-array.svg":XM,"../../lessons/bilder/en/l20-cpp.svg":KM,"../../lessons/bilder/en/l20-jvm.svg":eB,"../../lessons/bilder/en/mvc-klick.svg":tB,"../../lessons/bilder/en/ss-binaere-suche.svg":nB,"../../lessons/bilder/en/ss-bubblesort.svg":iB,"../../lessons/bilder/en/ss-lineare-suche.svg":aB,"../../lessons/bilder/en/ss-vergleiche.svg":sB,"../../lessons/bilder/en/uebergabe.svg":rB,"../../lessons/bilder/en/zk-zeichen.svg":oB,"../../lessons/bilder/grace-hopper.jpg":lB,"../../lessons/bilder/hedy-lamarr.jpg":uB,"../../lessons/bilder/ike-nassi.jpg":mB,"../../lessons/bilder/katherine-johnson.jpg":cB,"../../lessons/bilder/kino-saal.svg":dB,"../../lessons/bilder/kino-schleifen.svg":hB,"../../lessons/bilder/l01-pap.svg":gB,"../../lessons/bilder/l02-einfuegen.svg":pB,"../../lessons/bilder/l03-lochkarte-beschriftet.svg":fB,"../../lessons/bilder/l03-lochkarte.svg":xB,"../../lessons/bilder/l03-zuse-lochstreifen.svg":bB,"../../lessons/bilder/l04-camelcase.svg":vB,"../../lessons/bilder/l04-variable.svg":yB,"../../lessons/bilder/l04-zuweisung.svg":wB,"../../lessons/bilder/l05-tauschen.svg":zB,"../../lessons/bilder/l08-zahlenstrahl.svg":IB,"../../lessons/bilder/l09-wahrheitstabelle.svg":kB,"../../lessons/bilder/l10-kopfgesteuert.svg":SB,"../../lessons/bilder/l11-vergleich.svg":TB,"../../lessons/bilder/l12-for-ablauf.svg":_B,"../../lessons/bilder/l14-array.svg":jB,"../../lessons/bilder/l20-cpp.svg":CB,"../../lessons/bilder/l20-jvm.svg":AB,"../../lessons/bilder/margaret-hamilton.jpg":PB,"../../lessons/bilder/mvc-klick.svg":OB,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":DB,"../../lessons/bilder/pt/kino-saal.svg":MB,"../../lessons/bilder/pt/kino-schleifen.svg":BB,"../../lessons/bilder/pt/l01-pap.svg":ZB,"../../lessons/bilder/pt/l02-einfuegen.svg":LB,"../../lessons/bilder/pt/l03-lochkarte-beschriftet.svg":WB,"../../lessons/bilder/pt/l03-lochkarte.svg":EB,"../../lessons/bilder/pt/l04-camelcase.svg":NB,"../../lessons/bilder/pt/l04-variable.svg":FB,"../../lessons/bilder/pt/l04-zuweisung.svg":JB,"../../lessons/bilder/pt/l05-tauschen.svg":RB,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":GB,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":HB,"../../lessons/bilder/pt/l11-vergleich.svg":VB,"../../lessons/bilder/pt/l12-for-ablauf.svg":qB,"../../lessons/bilder/pt/l14-array.svg":QB,"../../lessons/bilder/pt/l20-cpp.svg":UB,"../../lessons/bilder/pt/l20-jvm.svg":$B,"../../lessons/bilder/pt/mvc-klick.svg":YB,"../../lessons/bilder/pt/schiffe-versenken.svg":XB,"../../lessons/bilder/pt/ss-binaere-suche.svg":KB,"../../lessons/bilder/pt/ss-bubblesort.svg":eZ,"../../lessons/bilder/pt/ss-lineare-suche.svg":tZ,"../../lessons/bilder/pt/ss-vergleiche.svg":nZ,"../../lessons/bilder/pt/uebergabe.svg":iZ,"../../lessons/bilder/pt/zk-zeichen.svg":aZ,"../../lessons/bilder/schiffe-versenken.svg":sZ,"../../lessons/bilder/ss-binaere-suche.svg":rZ,"../../lessons/bilder/ss-bubblesort.svg":oZ,"../../lessons/bilder/ss-lineare-suche.svg":lZ,"../../lessons/bilder/ss-vergleiche.svg":uZ,"../../lessons/bilder/uebergabe.svg":mZ,"../../lessons/bilder/zk-zeichen.svg":cZ}),cg=i=>i.replace(/^.*\//,"");function U1(i,e,t){const n=s=>new Map(Object.entries(i).filter(([r])=>{var o;return((o=e.exec(r))==null?void 0:o[1])===s}).map(([r,o])=>[cg(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function Xu(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let S1="en",Ot=[],An=[],Ha="",Va=[],ys="off";function Ku(i){i!==ys&&(ys=i,Ot=[],ws(S1))}function ws(i){var s,r,o;if(A3(i),i===S1&&Ot.length>0)return;S1=i;const e=U1(JZ,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>NZ(nm(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=FZ(nm(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=U1(RZ,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(ys==="on"){const l=U1(Yu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=QZ(tm(e),tm(l)),m=t(e,u.normal),c=h=>{var g;return((g=[...m].reverse().find(f=>u.normal.get(f.number)({...h,number:u.normal.get(h.number)})),...t(l,u.robot).map(h=>{const g=u.robot.get(h.number);return{...h,number:g,section:c(g),robot:!0}})].sort((h,g)=>h.number-g.number);const d=U1(GZ,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);An=[...n(a,"aufgaben/",u.normal),...n(d,"visubot/aufgaben/",u.robot).map(h=>({...h,robot:!0}))]}else Ot=t(e),An=n(a,"aufgaben/");An.sort((l,u)=>(l.after??0)-(u.after??0)||l.level-u.level||l.title.localeCompare(u.title,i));for(const l of[...Ot.flatMap(u=>u.steps.flatMap(m=>m.blocks)),...An.flatMap(u=>u.blocks)])l.kind==="textFile"&&N3(l.name,l.content);if(Ha=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",ys!=="off"){const l=(r=U1(Yu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&(Ha=`${Ha.trimEnd()} -${l}`)}Ha=kD(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const em={1:3,2:5,3:5,4:8,5:11,6:11,7:11,8:11,9:11,10:11,11:11,12:11,13:11,14:11,15:11,16:14,17:15,18:15,19:17,20:17,21:17,22:18},tm=i=>i.map(([e])=>{var t;return Number((t=/^(\d+)/.exec(e))==null?void 0:t[1])}).filter(Number.isFinite).sort((e,t)=>e-t);function rZ(i,e){const t=[...i].reverse().find(o=>o<=19)??i.at(-1)??0,n=o=>i.includes(em[o])?em[o]:t,a=new Map,s=new Map;let r=1;for(const o of i){a.set(o,r++);for(const l of e.filter(u=>n(u)===o))s.set(l,r++)}return{normal:a,robot:s}}function nm(i,e){return e?i.replace(/\b(Lektion(?:en)?|Lessons?|Li[cç](?:ão|ões))(\s+\d+(?:\s*(?:,|bis|und|and|to|a|e|–|-)\s*\d+)*)/gi,(t,n,a)=>n+a.replace(/\d+/g,s=>String(e.get(Number(s))??s))):i}ys("en");function dg(i,e){return k1==="de"?i.get(e)??i.get(`en/${e}`):(k1==="en"?void 0:i.get(`${k1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const hg=(i,e)=>i.slice(i.indexOf(e)+e.length),oZ=new Map(Object.entries(iZ).map(([i,e])=>[hg(i,"/diagramme/"),e]));function si(i){const e=dg(oZ,i);return e===void 0?void 0:Hl(e)}const lZ=new Map(Object.entries(sZ).map(([i,e])=>[hg(i,"/bilder/"),e]));function Tr(i){return dg(lZ,i)}const uZ=new Map(Object.entries(aZ).map(([i,e])=>[cg(i).replace(/\.txt$/,""),e])),im=new Map;function Va(i){const e=uZ.get(i);if(e===void 0)return;let t=im.get(i);return t||im.set(i,t=ax(e)),t}const gg=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Oe(i){const e=[];let t=gg(i).replace(/`([^`]+)`/g,(n,a)=>(e.push(a),`\0${e.length-1}\0`));return t=t.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[^*])\*([^*\s][^*]*?)\*/g,"$1$2").replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,a,s)=>{const r=/^(https?:|mailto:|#|\.{0,2}\/)/.test(s)?s:"#",o=/^https?:/.test(r)?' target="_blank" rel="noopener noreferrer"':"";return`${a}`}).replace(/\[([^\]]+)\]\{\.(blau|orange|gruen|gelb|rosa)\}/g,'$1').replace(/\[([^\]]+)\]\{(?:teil|part)=([\w,]+)\}/g,'$1'),t.replace(/\u0000(\d+)\u0000/g,(n,a)=>`${e[Number(a)]}`)}function _n(i){const e=[],t=i.replace(/\r\n/g,` +${l}`)}Va=dZ(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const em={1:3,2:5,3:5,4:8,5:11,6:11,7:11,8:11,9:11,10:11,11:11,12:11,13:11,14:11,15:11,16:14,17:15,18:15,19:17,20:17,21:17,22:18},tm=i=>i.map(([e])=>{var t;return Number((t=/^(\d+)/.exec(e))==null?void 0:t[1])}).filter(Number.isFinite).sort((e,t)=>e-t);function QZ(i,e){const t=[...i].reverse().find(o=>o<=19)??i.at(-1)??0,n=o=>i.includes(em[o])?em[o]:t,a=new Map,s=new Map;let r=1;for(const o of i){a.set(o,r++);for(const l of e.filter(u=>n(u)===o))s.set(l,r++)}return{normal:a,robot:s}}function nm(i,e){return e?i.replace(/\b(Lektion(?:en)?|Lessons?|Li[cç](?:ão|ões))(\s+\d+(?:\s*(?:,|bis|und|and|to|a|e|–|-)\s*\d+)*)/gi,(t,n,a)=>n+a.replace(/\d+/g,s=>String(e.get(Number(s))??s))):i}ws("en");function dg(i,e){return S1==="de"?i.get(e)??i.get(`en/${e}`):(S1==="en"?void 0:i.get(`${S1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const hg=(i,e)=>i.slice(i.indexOf(e)+e.length),UZ=new Map(Object.entries(HZ).map(([i,e])=>[hg(i,"/diagramme/"),e]));function si(i){const e=dg(UZ,i);return e===void 0?void 0:Hl(e)}const $Z=new Map(Object.entries(qZ).map(([i,e])=>[hg(i,"/bilder/"),e]));function _r(i){return dg($Z,i)}const YZ=new Map(Object.entries(VZ).map(([i,e])=>[cg(i).replace(/\.txt$/,""),e])),im=new Map;function qa(i){const e=YZ.get(i);if(e===void 0)return;let t=im.get(i);return t||im.set(i,t=ab(e)),t}const gg=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Pe(i){const e=[];let t=gg(i).replace(/`([^`]+)`/g,(n,a)=>(e.push(a),`\0${e.length-1}\0`));return t=t.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[^*])\*([^*\s][^*]*?)\*/g,"$1$2").replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,a,s)=>{const r=/^(https?:|mailto:|#|\.{0,2}\/)/.test(s)?s:"#",o=/^https?:/.test(r)?' target="_blank" rel="noopener noreferrer"':"";return`${a}`}).replace(/\[([^\]]+)\]\{\.(blau|orange|gruen|gelb|rosa)\}/g,'$1').replace(/\[([^\]]+)\]\{(?:teil|part)=([\w,]+)\}/g,'$1'),t.replace(/\u0000(\d+)\u0000/g,(n,a)=>`${e[Number(a)]}`)}function _n(i){const e=[],t=i.replace(/\r\n/g,` `).split(` `);let n=0;for(;n${gg(c.join(` -`))}`);continue}const s=/^(#{2,4})\s+(.*)$/.exec(a);if(s){const o=s[1].length;e.push(`${Oe(s[2])}`),n++;continue}if(/^\s*([-*]|\d+\.)\s+/.test(a)){const o=/^\s*\d+\./.test(a),l=[];for(;n${Oe(u)}`)}e.push(o?`
    ${l.join("")}
`:`
    ${l.join("")}
`);continue}if(a.startsWith("|")&&/^\|?[\s:|-]*-{3,}[\s:|-]*$/.test(t[n+1]??"")){const o=m=>m.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(c=>Oe(c.trim())),l=o(a);n+=2;const u=[];for(;n${l.map(m=>``).join("")}${u.map(m=>`${m.map(c=>``).join("")}`).join("")}
${m}
${c}
`);continue}if(a.startsWith(">")){const o=[];for(;n");)o.push(t[n++].replace(/^>\s?/,""));e.push(``);continue}const r=[];for(;n|\||\s*([-*]|\d+\.)\s+)/.test(t[n]);)r.push(t[n++].trim());e.push(`

${Oe(r.join(" "))}

`)}return e.join(` -`)}const ca=""+new URL("ludwig-Cus1i402.webp",import.meta.url).href,Jo="f4ecc8e489ae7865308288c7d0fa313333cf2be3ff529b23bc214bee010310e0",c0="visustruct.learn.teacher";let d0=!1;function am(){if(d0)return!0;try{return localStorage.getItem(c0)===Jo}catch{return!1}}async function mZ(i){const e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(i));return[...new Uint8Array(e)].map(t=>t.toString(16).padStart(2,"0")).join("")}async function cZ(i){let e=!1;try{e=await mZ(i.trim())===Jo}catch{return!1}if(e){d0=!0;try{localStorage.setItem(c0,Jo)}catch{}}return e}function dZ(){d0=!1;try{localStorage.removeItem(c0)}catch{}}function pg(i,e,t=!1){const n=document.createElement("figure");n.className=t?"learn-file written":"learn-file";const a=document.createElement("figcaption"),s=document.createElement("span");s.className="learn-file-icon",s.setAttribute("aria-hidden","true"),s.textContent="📄",a.append(s,t?p("web_sim_written_file_fmt",i):i);const r=document.createElement("pre");return r.className="learn-file-text",r.dir="ltr",e.replace(/\n$/,"").split(` +`))}`);continue}const s=/^(#{2,4})\s+(.*)$/.exec(a);if(s){const o=s[1].length;e.push(`${Pe(s[2])}`),n++;continue}if(/^\s*([-*]|\d+\.)\s+/.test(a)){const o=/^\s*\d+\./.test(a),l=[];for(;n${Pe(u)}`)}e.push(o?`
    ${l.join("")}
`:`
    ${l.join("")}
`);continue}if(a.startsWith("|")&&/^\|?[\s:|-]*-{3,}[\s:|-]*$/.test(t[n+1]??"")){const o=m=>m.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(c=>Pe(c.trim())),l=o(a);n+=2;const u=[];for(;n${l.map(m=>``).join("")}${u.map(m=>`${m.map(c=>``).join("")}`).join("")}
${m}
${c}
`);continue}if(a.startsWith(">")){const o=[];for(;n");)o.push(t[n++].replace(/^>\s?/,""));e.push(``);continue}const r=[];for(;n|\||\s*([-*]|\d+\.)\s+)/.test(t[n]);)r.push(t[n++].trim());e.push(`

${Pe(r.join(" "))}

`)}return e.join(` +`)}const ca=""+new URL("ludwig-Cus1i402.webp",import.meta.url).href,Fo="f4ecc8e489ae7865308288c7d0fa313333cf2be3ff529b23bc214bee010310e0",c0="visustruct.learn.teacher";let d0=!1;function am(){if(d0)return!0;try{return localStorage.getItem(c0)===Fo}catch{return!1}}async function XZ(i){const e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(i));return[...new Uint8Array(e)].map(t=>t.toString(16).padStart(2,"0")).join("")}async function KZ(i){let e=!1;try{e=await XZ(i.trim())===Fo}catch{return!1}if(e){d0=!0;try{localStorage.setItem(c0,Fo)}catch{}}return e}function eL(){d0=!1;try{localStorage.removeItem(c0)}catch{}}function pg(i,e,t=!1){const n=document.createElement("figure");n.className=t?"learn-file written":"learn-file";const a=document.createElement("figcaption"),s=document.createElement("span");s.className="learn-file-icon",s.setAttribute("aria-hidden","true"),s.textContent="📄",a.append(s,t?p("web_sim_written_file_fmt",i):i);const r=document.createElement("pre");return r.className="learn-file-text",r.dir="ltr",e.replace(/\n$/,"").split(` `).forEach((l,u)=>{const m=document.createElement("span");m.className="ln",m.textContent=String(u+1),r.append(m,l+` -`)}),n.append(a,r),n}function fg(i){return[...i].map(([e,t])=>pg(e,t,!0))}function n1(i){switch(i.kind){case"finished":return p("sim_notice_finished");case"infiniteLoopWithoutBody":return p("sim_notice_infinite_loop_empty");case"unsupportedStatement":return p("sim_notice_unsupported_statement_fmt",i.text);case"invalidExpression":return p("sim_notice_invalid_expression_fmt",i.text);case"unknownVariable":return p("sim_notice_unknown_variable_fmt",i.text);case"divisionByZero":return p("sim_notice_division_by_zero");case"wholeNumberExpected":return p("sim_notice_whole_number_expected");case"numberExpected":return p("sim_notice_number_expected");case"booleanExpected":return p("sim_notice_boolean_expected");case"subprogramNotFound":return p("sim_notice_subprogram_not_found_fmt",i.text);case"callTooDeep":return p("sim_notice_call_too_deep");case"callArguments":return p("web_sim_call_arguments_fmt",i.text);case"missingReturn":return p("web_sim_missing_return_fmt",i.text);case"fileNotFound":return p("web_sim_file_not_found_fmt",i.text);case"endOfFile":return p("web_sim_end_of_file_fmt",i.text);case"nullValue":return p("web_sim_null_value_fmt",i.text);case"other":return i.text}}const De=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),sm=["0.2","0.5","1.0","1.5","2.0"],hZ=i=>Number(i).toLocaleString(r1()==="java"?"en":r1(),{minimumFractionDigits:1}),_r="visustruct.simulation.stepDelay",rm="visustruct.simulation.highlightMode";function Cr(i){try{return localStorage.getItem(i)}catch{return null}}function om(i,e){try{localStorage.setItem(i,e)}catch{}}class gZ{constructor(e,t,n=()=>{},a=()=>{},s=()=>{}){y(this,"element");y(this,"engine");y(this,"isPlaying",!1);y(this,"playTimer");y(this,"wasPlayingBeforeInput",!1);y(this,"delay",sm.includes(Cr(_r)??"")?Cr(_r):"0.5");y(this,"highlightMode",Cr(rm)==="nextToExecute"?"nextToExecute":"lastExecuted");y(this,"buttons");y(this,"inputSection");y(this,"trace");y(this,"variables");y(this,"output");y(this,"transcript",[]);y(this,"printed",0);y(this,"notice");y(this,"editButton");y(this,"robot");y(this,"liveBusy",!1);this.currentDocument=e,this.onHighlight=t,this.findSubprogram=n,this.onEdit=a,this.onTranscript=s,this.engine=new Ti(e(),n),this.element=document.createElement("aside"),this.element.className="simpanel",this.build()}setRobot(e){var t;this.robot!==e&&((t=this.robot)==null||t.element.remove(),this.robot=e,e&&(this.element.querySelector("section").after(e.element),e.onWorldChange=()=>this.restartEngine(),e.reset()))}showRobot(){var e;(e=this.robot)==null||e.show()}begin(){this.pause(),this.restartEngine(),this.showRobot()}end(){this.pause()}step(){var n,a,s;if((n=this.robot)!=null&&n.live){this.stepLive();return}if(!this.engine.canStep){this.pause();return}const e=this.isPlaying,t=this.engine.currentStepPath;(a=this.robot)==null||a.prepare(this.engine),this.engine.step(),(s=this.robot)==null||s.follow(this.engine.state.robotActions,e?Number(this.delay)*850:450),this.afterStep(e,t)}async stepLive(){if(this.liveBusy)return;if(!this.engine.canStep){this.pause();return}this.liveBusy=!0;const e=this.robot,t=this.isPlaying,n=this.engine.currentStepPath;try{await e.prepareLive(this.engine,P3(JSON.stringify(this.currentDocument()))),this.engine.step(),e.follow(this.engine.state.robotActions,450),await e.drive(this.engine.state.robotActions)}catch(a){e.liveFailed(a),this.isPlaying=!1}finally{this.liveBusy=!1}this.afterStep(t,n)}afterStep(e,t){this.collectOutput(),this.highlightMode==="nextToExecute"&&this.engine.canStep?this.onHighlight(this.engine.currentStepPath):this.onHighlight(t??this.engine.currentStepPath),this.engine.state.inputRequest&&e&&(this.wasPlayingBeforeInput=!0),this.engine.canStep||this.pause(),this.update()}reset(){this.pause(),this.restartEngine()}play(){if(this.isPlaying||!this.engine.canStep)return;this.isPlaying=!0;const e=async()=>{var t;this.playTimer=void 0,this.isPlaying&&((t=this.robot)!=null&&t.live?await this.stepLive():this.step(),this.isPlaying&&this.engine.canStep?this.playTimer=window.setTimeout(()=>void e(),Number(this.delay)*1e3):(this.isPlaying=!1,this.update()))};e()}pause(){this.playTimer!==void 0&&window.clearTimeout(this.playTimer),this.playTimer=void 0,this.isPlaying=!1,this.update()}submitInput(e){var s,r;const t=this.isPlaying||this.wasPlayingBeforeInput;this.pause();const n=((s=this.engine.state.inputRequest)==null?void 0:s.prompt)??"",a=(r=this.engine.state.inputRequest)==null?void 0:r.continuesLine;if(this.engine.provideInput(e.value),!this.engine.state.inputRequest){const o=this.transcript[this.transcript.length-1];a&&o&&o.typed===void 0?o.typed=e.value:this.transcript.push({text:n?`${n} `:"",typed:e.value}),e.value=""}this.onHighlight(this.engine.currentStepPath),t&&this.engine.canStep&&(this.wasPlayingBeforeInput=!1,this.play()),this.update()}restartEngine(){var e;this.engine=new Ti(this.currentDocument(),this.findSubprogram),this.transcript=[],this.printed=0,this.wasPlayingBeforeInput=!1,(e=this.robot)==null||e.reset(),this.onHighlight(this.engine.currentStepPath),this.update()}build(){this.element.innerHTML=` +`)}),n.append(a,r),n}function fg(i){return[...i].map(([e,t])=>pg(e,t,!0))}function n1(i){switch(i.kind){case"finished":return p("sim_notice_finished");case"infiniteLoopWithoutBody":return p("sim_notice_infinite_loop_empty");case"unsupportedStatement":return p("sim_notice_unsupported_statement_fmt",i.text);case"invalidExpression":return p("sim_notice_invalid_expression_fmt",i.text);case"unknownVariable":return i.similar?p("web_sim_unknown_variable_case_fmt",i.text,i.similar):p("sim_notice_unknown_variable_fmt",i.text);case"divisionByZero":return p("sim_notice_division_by_zero");case"wholeNumberExpected":return p("sim_notice_whole_number_expected");case"numberExpected":return p("sim_notice_number_expected");case"booleanExpected":return p("sim_notice_boolean_expected");case"subprogramNotFound":return p("sim_notice_subprogram_not_found_fmt",i.text);case"callTooDeep":return p("sim_notice_call_too_deep");case"callArguments":return p("web_sim_call_arguments_fmt",i.text);case"missingReturn":return p("web_sim_missing_return_fmt",i.text);case"fileNotFound":return p("web_sim_file_not_found_fmt",i.text);case"endOfFile":return p("web_sim_end_of_file_fmt",i.text);case"nullValue":return p("web_sim_null_value_fmt",i.text);case"other":return i.text}}const Me=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),sm=["0.2","0.5","1.0","1.5","2.0"],tL=i=>Number(i).toLocaleString(r1()==="java"?"en":r1(),{minimumFractionDigits:1}),jr="visustruct.simulation.stepDelay",rm="visustruct.simulation.highlightMode";function Cr(i){try{return localStorage.getItem(i)}catch{return null}}function om(i,e){try{localStorage.setItem(i,e)}catch{}}class nL{constructor(e,t,n=()=>{},a=()=>{},s=()=>{}){y(this,"element");y(this,"engine");y(this,"isPlaying",!1);y(this,"playTimer");y(this,"wasPlayingBeforeInput",!1);y(this,"delay",sm.includes(Cr(jr)??"")?Cr(jr):"0.5");y(this,"highlightMode",Cr(rm)==="nextToExecute"?"nextToExecute":"lastExecuted");y(this,"buttons");y(this,"inputSection");y(this,"trace");y(this,"variables");y(this,"output");y(this,"transcript",[]);y(this,"printed",0);y(this,"notice");y(this,"editButton");y(this,"robot");y(this,"liveBusy",!1);this.currentDocument=e,this.onHighlight=t,this.findSubprogram=n,this.onEdit=a,this.onTranscript=s,this.engine=new Ti(e(),n),this.element=document.createElement("aside"),this.element.className="simpanel",this.build()}setRobot(e){var t;this.robot!==e&&((t=this.robot)==null||t.element.remove(),this.robot=e,e&&(this.element.querySelector("section").after(e.element),e.onWorldChange=()=>this.restartEngine(),e.reset()))}showRobot(){var e;(e=this.robot)==null||e.show()}begin(){this.pause(),this.restartEngine(),this.showRobot()}end(){this.pause()}step(){var n,a,s;if((n=this.robot)!=null&&n.live){this.stepLive();return}if(!this.engine.canStep){this.pause();return}const e=this.isPlaying,t=this.engine.currentStepPath;(a=this.robot)==null||a.prepare(this.engine),this.engine.step(),(s=this.robot)==null||s.follow(this.engine.state.robotActions,e?Number(this.delay)*850:450),this.afterStep(e,t)}async stepLive(){if(this.liveBusy)return;if(!this.engine.canStep){this.pause();return}this.liveBusy=!0;const e=this.robot,t=this.isPlaying,n=this.engine.currentStepPath;try{await e.prepareLive(this.engine,O3(JSON.stringify(this.currentDocument()))),this.engine.step(),e.follow(this.engine.state.robotActions,450),await e.drive(this.engine.state.robotActions)}catch(a){e.liveFailed(a),this.isPlaying=!1}finally{this.liveBusy=!1}this.afterStep(t,n)}afterStep(e,t){this.collectOutput(),this.highlightMode==="nextToExecute"&&this.engine.canStep?this.onHighlight(this.engine.currentStepPath):this.onHighlight(t??this.engine.currentStepPath),this.engine.state.inputRequest&&e&&(this.wasPlayingBeforeInput=!0),this.engine.canStep||this.pause(),this.update()}reset(){this.pause(),this.restartEngine()}play(){if(this.isPlaying||!this.engine.canStep)return;this.isPlaying=!0;const e=async()=>{var t;this.playTimer=void 0,this.isPlaying&&((t=this.robot)!=null&&t.live?await this.stepLive():this.step(),this.isPlaying&&this.engine.canStep?this.playTimer=window.setTimeout(()=>void e(),Number(this.delay)*1e3):(this.isPlaying=!1,this.update()))};e()}pause(){this.playTimer!==void 0&&window.clearTimeout(this.playTimer),this.playTimer=void 0,this.isPlaying=!1,this.update()}submitInput(e){var s,r;const t=this.isPlaying||this.wasPlayingBeforeInput;this.pause();const n=((s=this.engine.state.inputRequest)==null?void 0:s.prompt)??"",a=(r=this.engine.state.inputRequest)==null?void 0:r.continuesLine;if(this.engine.provideInput(e.value),!this.engine.state.inputRequest){const o=this.transcript[this.transcript.length-1];a&&o&&o.typed===void 0?o.typed=e.value:this.transcript.push({text:n?`${n} `:"",typed:e.value}),e.value=""}this.onHighlight(this.engine.currentStepPath),t&&this.engine.canStep&&(this.wasPlayingBeforeInput=!1,this.play()),this.update()}restartEngine(){var e;this.engine=new Ti(this.currentDocument(),this.findSubprogram),this.transcript=[],this.printed=0,this.wasPlayingBeforeInput=!1,(e=this.robot)==null||e.reset(),this.onHighlight(this.engine.currentStepPath),this.update()}build(){this.element.innerHTML=`
-

${De(p("simulation_controls"))}

+

${Me(p("simulation_controls"))}

- - - - + + + +
-

+<<<<<<<< HEAD:website/app/assets/index-BzOyQMjP.js

${De(p("simulation_input"))}

${De(p("simulation_trace"))}

@@ -64704,13 +67202,33 @@ ${l}`)}Ha=kD(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const `).map(P=>{const O=P.indexOf(xs);return O<0?H("div",{class:"ln"},P||" "):H("div",{class:"ln"},P.slice(0,O),I,P.slice(O+xs.length))}),T=H("button",{class:"primary"},p("web_learn_rescue_open")),C=H("div",{class:"learn-game-feedback",role:"status"}),M=()=>{const P=I.value.trim();if(P!==i.keyword){const A=P.toUpperCase()===i.keyword.toUpperCase();C.className="learn-game-feedback wrong",C.replaceChildren(H("p",{},p(A?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),I.select();return}I.disabled=T.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const O=H("button",{},p("web_game_again"));O.addEventListener("click",w),C.className="learn-game-feedback right",C.replaceChildren(H("p",{},p("web_learn_rescue_freed")),In("div",{class:"learn-game-explain"},i.end),O)};T.addEventListener("click",M),I.addEventListener("keydown",P=>{P.key==="Enter"&&M()}),c.replaceChildren(In("p",{},i.gateText),H("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...k),T,C),I.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),b(0)},z=H("button",{class:"primary"},p("web_game_start"));return z.addEventListener("click",w),c.append(In("p",{},i.intro),z),t}function CZ(i){const e=OD(i),t=new Map(i.solution.map((g,f)=>[`${g.row} ${g.col}`,f])),n=new Map;for(const g of i.words)n.set(`${g.row} ${g.col}`,g.number);const a=new Map,s=H("div",{class:"learn-cw-grid",dir:"ltr"});s.style.gridTemplateColumns=`repeat(${i.cols}, var(--cw-cell))`;let r=!0;const o=(g,f)=>i.words.filter(b=>b.across?b.row===g&&f>=b.col&&f=b.row&&g{var v;const x=r?`${g} ${f+b}`:`${g+b} ${f}`;(v=a.get(x))==null||v.focus()};e.forEach((g,f)=>g.forEach((b,x)=>{if(!b)return s.append(H("span",{class:"learn-cw-empty"}));const v=`${f} ${x}`,w=H("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,x+1)});w.disabled=!0,w.addEventListener("focus",()=>{const T=o(f,x);T.some(C=>C.across===r)||(r=T[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,x,1)}),w.addEventListener("keydown",T=>{if(T.key==="Backspace"&&!w.value)l(f,x,-1);else if(T.key==="ArrowRight"||T.key==="ArrowLeft")r=!0,l(f,x,T.key==="ArrowRight"?1:-1);else if(T.key==="ArrowDown"||T.key==="ArrowUp")r=!1,l(f,x,T.key==="ArrowDown"?1:-1);else return;T.preventDefault()}),a.set(v,w);const z=t.get(v),I=H("span",{class:`learn-cw-cell${z!==void 0?" key":""}`}),k=n.get(v);k&&I.append(H("small",{class:"learn-cw-number"},String(k))),z!==void 0&&I.append(H("small",{class:"learn-cw-keyindex"},String(z+1))),I.append(w),s.append(I)}));const u=g=>{const f=H("ol",{class:"learn-cw-clues"});for(const b of i.words.filter(x=>x.across===g).sort((x,v)=>x.number-v.number)){const x=In("li",{value:String(b.number)},`${b.clue} (${b.word.length})`);x.addEventListener("click",()=>{var v;r=b.across,(v=a.get(`${b.row} ${b.col}`))==null||v.focus()}),f.append(x)}return H("div",{},H("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>H("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=H("div",{class:"learn-cw"},H("div",{class:"learn-cw-board"},s,H("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,H("span",{class:"mono",dir:"ltr"},...m))),H("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,b){const x=a.get(`${g} ${f}`);x.value=b,x.parentElement.classList.add("given","arrived"),h.add(`${g} ${f}`),c()},unlock(){for(const[g,f]of a)f.disabled=h.has(g)},lock(){for(const g of a.values())g.disabled=!0},focusFirst(){var g;(g=[...a].find(([f])=>!h.has(f)))==null||g[1].focus({preventScroll:!0})},check(){let g=!0;for(const[f,b]of a){const[x,v]=f.split(" ").map(Number),w=b.value!==e[x][v];b.classList.toggle("wrong",w),w&&(g=!1)}return g},reset(){h.clear();for(const g of a.values())g.value="",g.disabled=!0,g.classList.remove("wrong"),g.parentElement.classList.remove("given","arrived");c()}}}function Tt(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function dm(i,e,t){const n=Tt(i,e);return n.innerHTML=Oe(t),n}function AZ(i){const e=Tt("section",{class:"learn-cloze"});e.append(Tt("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(dm("p",{},i.task)),e.append(Tt("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=Tt("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=Tt("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=Tt("input",{type:"text",class:"learn-cloze-gap mono",autocomplete:"off",autocapitalize:"off",autocorrect:"off",spellcheck:"false",enterkeyhint:"done","aria-label":`${t.length+1}`});f.style.width=`${Math.max(3,...g.answers.map(b=>b.length))+1}ch`,t.push({input:f,answers:g.answers}),h.append(f)}d.length||h.append(` `),c.append(h)}e.append(c)}const n=Tt("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?dm("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=Tt("button",{class:"learn-cloze-check"},p("web_learn_check")),r=Tt("button",{},p("web_learn_cloze_solution")),o=Tt("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=Tt("div",{class:"learn-cloze-actions"},s,r,o);e.append(l,n),a&&e.append(a);const u=()=>{var d;let m=0;for(const h of t){const g=LD(h.answers,h.input.value);h.input.classList.toggle("right",g),h.input.classList.toggle("wrong",!g),g&&m++}const c=m===t.length;n.textContent=c?p("web_learn_cloze_all_right"):p("web_learn_cloze_score_fmt",m,t.length),n.className=`learn-cloze-status ${c?"right":"wrong"}`,a&&(a.hidden=!c),c?(t.forEach(h=>h.input.disabled=!0),s.hidden=!0,o.hidden=!1):(r.hidden=!1,(d=t.find(h=>h.input.classList.contains("wrong")))==null||d.input.focus())};return s.addEventListener("click",u),r.addEventListener("click",()=>{for(const m of t)m.input.value=m.answers[0],m.input.classList.remove("right","wrong"),m.input.classList.add("shown"),m.input.disabled=!0;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!1),s.hidden=!0,r.hidden=!0,o.hidden=!1}),o.addEventListener("click",()=>{var m;for(const c of t)c.input.value="",c.input.classList.remove("right","wrong","shown"),c.input.disabled=!1;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!0),s.hidden=!1,r.hidden=!0,o.hidden=!0,(m=t[0])==null||m.input.focus()}),t.forEach((m,c)=>{m.input.addEventListener("input",()=>m.input.classList.remove("right","wrong")),m.input.addEventListener("keydown",d=>{d.key==="Enter"&&(d.preventDefault(),c1?12:13});return n.forEach((s,r)=>{const o=wt("tspan",{x:e.x,y:e.y+4.5+(r-(n.length-1)/2)*14});o.textContent=s,a.append(o)}),a}function da(i,e){return wt("polyline",{points:i.map(t=>t.join(",")).join(" "),fill:"none","marker-end":`url(#${e})`})}function hm(i,e,t,n){const a=wt("text",{x:e,y:t,"font-size":12,"font-weight":600,fill:n?"#248a3d":"#d70015"});return a.textContent=i,a}function PZ(i,e){const t=rg(e,110),n=Math.max(...t.map(u=>u.length)),a=Math.max(70,n*6.6+(i==="raute"?56:26)),s=i==="raute"?48:t.length>1?40:30,r=wt("svg",{viewBox:`0 0 ${a+4} ${s+4}`,width:a+4,height:s+4,"aria-hidden":"true"}),o={x:(a+4)/2,y:(s+4)/2,w:a,h:s},l=p0(i,o);return l.setAttribute("fill",g0[i]),l.setAttribute("stroke","#1c1c1e"),l.setAttribute("stroke-width","1.5"),r.append(l,yg(e,{...o,w:t.length>1?124:a},i)),r}function MZ(i){const e=[...Array(i).keys()];for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return i>1&&e.every((t,n)=>t===n)&&e.reverse(),e}function DZ(){const i=qe("dl",{class:"learn-pap-legend"}),e=[["oval","web_learn_pap_legend_oval"],["rechteck","web_learn_pap_legend_rect"],["raute","web_learn_pap_legend_diamond"],["parallelogramm","web_learn_pap_legend_para"]];for(const[t,n]of e){const a=t==="raute"?44:40,s=wt("svg",{viewBox:`0 0 ${a+4} 28`,width:a+4,height:28,"aria-hidden":"true"}),r=p0(t,{x:(a+4)/2,y:14,w:a,h:t==="raute"?24:18});r.setAttribute("fill",g0[t]),r.setAttribute("stroke","#1c1c1e"),r.setAttribute("stroke-width","1.5"),s.append(r),i.append(qe("dt",{},s),qe("dd",{},p(n)))}return i}function ZZ(i){const e=qe("section",{class:"learn-pap"});if(e.append(qe("strong",{class:"learn-pap-title"},i.title)),i.task){const F=qe("p");F.innerHTML=Oe(i.task),e.append(F)}e.append(qe("p",{class:"learn-pap-hint"},p("web_learn_pap_hint")));const{boxes:t,height:n}=HD(i),a=t.filter(Boolean),s=Math.min(...a.map(F=>F.x-F.w/2))-4,r=i.nodes.some(F=>F.shape==="raute"),o=Math.max(...a.map(F=>F.x+F.w/2),r?Math.max(...a.map(F=>F.x))+85+40:0)+4,l=wt("svg",{viewBox:`${s} 0 ${o-s} ${n}`,class:"learn-pap-plan",role:"group","aria-label":i.title}),u=`pap-arrow-${++OZ}`;l.innerHTML=``;const m=wt("g",{stroke:"#1c1c1e","stroke-width":2}),c=wt("g"),d=p("web_learn_pap_yes"),h=p("web_learn_pap_no"),g=F=>t[F].y-t[F].h/2,f=F=>t[F].y+t[F].h/2,b=i.nodes.map((F,j)=>j).filter(F=>!i.nodes[F].isSide);b.forEach((F,j)=>{const N=i.nodes[F],Q=t[F],Y=b[j+1];if(Y!==void 0&&(m.append(da([[Q.x,f(F)],[Q.x,g(Y)-2]],u)),N.shape==="raute"&&c.append(hm(N.sideExit==="nein"?d:h,Q.x+6,f(F)+13,N.sideExit==="nein"))),N.shape!=="raute")return;const ue=Q.x+Q.w/2;if(c.append(hm(N.sideExit==="ja"?d:h,ue+5,Q.y-6,N.sideExit==="ja")),N.backTo!==void 0){const X=g(N.backTo)-14;m.append(da([[ue,Q.y],[ue+22,Q.y],[ue+22,X],[Q.x,X]],u))}else if(N.side!==void 0){const X=t[N.side],me=g(F)-14;m.append(da([[ue,Q.y],[X.x-X.w/2-2,Q.y]],u)),m.append(da([[X.x,X.y-X.h/2],[X.x,me],[Q.x,me]],u))}}),l.append(m,c);const x=i.nodes.map(()=>{}),v=[],w=[];let z;const I=qe("p",{class:"learn-pap-status",role:"status"}),k=i.explanation?qe("p",{class:"learn-explanation"}):void 0;k&&(k.innerHTML=Oe(i.explanation),k.hidden=!0);let T=!1;const C=()=>{v.forEach(F=>F.classList.remove("right","wrong")),I.textContent="",I.className="learn-pap-status"},M=F=>{const j=v[F];j.replaceChildren();const N=i.nodes[F],Q=x[F],Y=p0(N.shape,t[F]);if(Y.setAttribute("class","learn-pap-shape"),Q===void 0)Y.setAttribute("fill","#f7f7f9"),Y.setAttribute("stroke-dasharray","6 4"),j.append(Y),j.setAttribute("aria-label",p("web_learn_pap_empty"));else{const ue=i.nodes[Q];Y.setAttribute("fill",g0[ue.shape]),j.append(Y,yg(ue.text,t[F],N.shape)),j.setAttribute("aria-label",ue.text)}},P=()=>{i.nodes.forEach((F,j)=>M(j)),w.forEach((F,j)=>{F.hidden=x.includes(j),F.classList.toggle("selected",z===j)})},O=(F,j)=>{if(T)return;const N=x.indexOf(j);N>=0&&(x[N]=void 0),x[F]=j,z=void 0,C(),P()};i.nodes.forEach((F,j)=>{const N=wt("g",{class:"learn-pap-slot","data-slot":j,tabindex:0,role:"button"}),Q=()=>{T||(z!==void 0?O(j,z):x[j]!==void 0&&(x[j]=void 0,C(),P()))};N.addEventListener("click",Q),N.addEventListener("keydown",Y=>{Y.key!=="Enter"&&Y.key!==" "||(Y.preventDefault(),Q())}),v.push(N),l.append(N)});const A=qe("div",{class:"learn-pap-tray"});let B=!1;for(const F of MZ(i.nodes.length)){const j=i.nodes[F],N=qe("button",{class:"learn-pap-card",type:"button","aria-label":j.text},PZ(j.shape,j.text));w[F]=N,N.addEventListener("click",()=>{B||T||(z=z===F?void 0:F,P())}),N.addEventListener("pointerdown",Q=>{if(T)return;B=!1;let Y;const ue=le=>{var Te;!Y&&Math.hypot(le.clientX-Q.clientX,le.clientY-Q.clientY)<6||(Y||(B=!0,Y=N.cloneNode(!0),Y.classList.add("learn-pap-ghost"),document.body.append(Y),N.classList.add("dragging")),Y.style.left=`${le.clientX}px`,Y.style.top=`${le.clientY}px`,v.forEach(Fe=>Fe.classList.remove("over")),(Te=X(le))==null||Te.classList.add("over"))},X=le=>{var Fe;Y&&(Y.style.display="none");const Te=(Fe=document.elementFromPoint(le.clientX,le.clientY))==null?void 0:Fe.closest("[data-slot]");return Y&&(Y.style.display=""),Te&&v.includes(Te)?Te:void 0},me=le=>{if(N.removeEventListener("pointermove",ue),N.removeEventListener("pointerup",me),N.removeEventListener("pointercancel",me),v.forEach(Fe=>Fe.classList.remove("over")),N.classList.remove("dragging"),!Y)return;const Te=le.type==="pointerup"?X(le):void 0;Y.remove(),Te&&O(Number(Te.getAttribute("data-slot")),F),setTimeout(()=>B=!1)};N.setPointerCapture(Q.pointerId),N.addEventListener("pointermove",ue),N.addEventListener("pointerup",me),N.addEventListener("pointercancel",me)}),A.append(N)}const E=qe("button",{class:"learn-pap-check"},p("web_learn_check")),U=qe("button",{},p("web_learn_cloze_solution")),ee=qe("button",{},p("web_learn_cloze_again"));U.hidden=!0,ee.hidden=!0;const ge=()=>{T=!0,E.hidden=!0,U.hidden=!0,ee.hidden=!1,A.hidden=!0,fe.classList.add("done"),k&&(k.hidden=!1)};E.addEventListener("click",()=>{const F=x.filter(Q=>Q===void 0).length;let j=0;x.forEach((Q,Y)=>{const ue=Q!==void 0&&ED(i,Y,Q);v[Y].classList.toggle("right",ue),v[Y].classList.toggle("wrong",Q!==void 0&&!ue),ue&&j++});const N=j===i.nodes.length;I.textContent=N?p("web_learn_pap_all_right"):F?p("web_learn_pap_missing_fmt",F):p("web_learn_pap_score_fmt",j,i.nodes.length),I.className=`learn-pap-status ${N?"right":"wrong"}`,N?ge():F||(U.hidden=!1)}),U.addEventListener("click",()=>{i.nodes.forEach((F,j)=>x[j]=j),z=void 0,P(),C(),v.forEach(F=>F.classList.add("shown")),ge()}),ee.addEventListener("click",()=>{i.nodes.forEach((F,j)=>x[j]=void 0),T=!1,z=void 0,v.forEach(F=>F.classList.remove("shown")),C(),P(),E.hidden=!1,ee.hidden=!0,A.hidden=!1,fe.classList.remove("done"),k&&(k.hidden=!0)}),P();const Ie=qe("div",{class:"learn-pap-left"});Ie.append(l),i.legend&&Ie.append(DZ());const fe=qe("div",{class:"learn-pap-work"},Ie,A);return e.append(fe,qe("div",{class:"learn-pap-actions"},E,U,ee),I),k&&e.append(k),e}const BZ="code, pre, a, button, h1, h2, h3, h4, strong, .term, .ui-pointer";function gm(i,e){var s;const t=[...i.querySelectorAll(".learn-text")],n=new Set;for(const r of t.flatMap(o=>[...o.querySelectorAll("strong")])){const o=Hu(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?Vu(e,l[0]):void 0;u&&n.add(u)}let a=e.filter(r=>!n.has(r));for(const r of t){const o=document.createTreeWalker(r,NodeFilter.SHOW_TEXT),l=[];for(;o.nextNode();){const u=o.currentNode;(s=u.parentElement)!=null&&s.closest(BZ)||l.push(u)}for(let u of l)for(;;){const m=Hu(a),c=m==null?void 0:m.exec(u.data),d=c?Vu(a,c[0]):void 0;if(!c||!d)break;const h=u.splitText(c.index);u=h.splitText(c[0].length);const g=document.createElement("span");g.className="term",g.tabIndex=0,g.setAttribute("role","button"),g.setAttribute("aria-describedby","term-tip"),g.dataset.term=d.term,g.dataset.text=d.text,h.replaceWith(g),g.append(h),a=a.filter(f=>f!==d)}}}function LZ(i){const e=document.createElement("div");e.id="term-tip",e.className="term-tip",e.setAttribute("role","tooltip"),e.hidden=!0,document.body.append(e);let t,n=!1;const a=o=>{t=o,e.replaceChildren();const l=document.createElement("strong");l.textContent=o.dataset.term??"",e.append(l,document.createTextNode(" "+(o.dataset.text??""))),e.hidden=!1;const u=o.getBoundingClientRect(),m=e.offsetWidth,c=e.offsetHeight,d=Math.max(8,Math.min(u.left,window.innerWidth-m-8)),h=u.bottom+6;e.style.left=`${d}px`,e.style.top=`${h+c>window.innerHeight-8?Math.max(8,u.top-c-6):h}px`,o.setAttribute("aria-expanded","true")},s=()=>{t==null||t.setAttribute("aria-expanded","false"),t=void 0,n=!1,e.hidden=!0},r=o=>{var l,u;return((u=(l=o.target)==null?void 0:l.closest)==null?void 0:u.call(l,".term"))??void 0};return i.addEventListener("pointerover",o=>{const l=r(o);l&&o.pointerType==="mouse"&&!n&&a(l)}),i.addEventListener("pointerout",o=>{r(o)&&o.pointerType==="mouse"&&!n&&s()}),i.addEventListener("click",o=>{const l=r(o);if(l){if(n&&t===l)return s();a(l),n=!0}}),i.addEventListener("focusin",o=>{const l=r(o);l&&!n&&a(l)}),i.addEventListener("focusout",o=>{r(o)&&!n&&s()}),i.addEventListener("keydown",o=>{const l=r(o);o.key==="Escape"&&t?s():l&&(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l.click())}),i.addEventListener("scroll",s,!0),document.addEventListener("pointerdown",o=>{t&&!r(o)&&!e.contains(o.target)&&s()}),{hide:s}}const wg={leiste:".topbar > .toolbar",editor:".editor-rail, .columns > .app",werkzeuge:".diagram-tools",dateien:".files-rail, .files",codelive:".live-rail, .livecode",ausfuehren:"[data-run=play]",konsole:".livecode .console",einzelschritt:"[data-run=step]",elemente:".palette",struktogramm:".canvas",objektinspektor:".inspector",reiter:".tabs",titel:".caption",neu:"[data-action=new]",oeffnen:"[data-action=open]",speichern:"[data-action=save]",exportieren:"[data-action=export]",rueckgaengig:"[data-action=undo]",loeschen:"[data-action=delete]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},zg=new Set(["editor","werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","loeschen","exportieren","code","simulation"]),Ig=new Set(["ausfuehren","konsole","einzelschritt"]);function Ks(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function pm(i){return i==="elemente"?["editor","palette"]:zg.has(i)?["editor"]:i==="codelive"||Ig.has(i)?["livecode"]:i==="dateien"?["files"]:[]}function WZ(i){return Ks(i,new Set(["elemente"]))}function EZ(i){return Ks(i,new Set(["dateien"]))}function NZ(i){return Ks(i,zg)}function JZ(i){return Ks(i,Ig)}function fm(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in wg))continue;const n=document.createElement("span");n.className="ui-pointer",n.tabIndex=0,n.setAttribute("role","button"),n.dataset.target=t,n.append(...e.childNodes),e.replaceWith(n)}}function FZ(i,e=()=>()=>{}){let t,n,a,s,r;const o=()=>{t==null||t.classList.remove("ui-spot"),t=void 0,window.clearTimeout(n)},l=(h,g)=>{o();const f=[...document.querySelectorAll(wg[h.dataset.target??""]??":not(*)")].find(b=>b.getClientRects().length>0);f&&(t=f,f.classList.add("ui-spot"),g&&(n=window.setTimeout(o,2500)))},u=(h,g)=>requestAnimationFrame(()=>{l(h,g),t==null||t.scrollIntoView({block:"nearest",inline:"nearest"})}),m=()=>{window.clearTimeout(s),window.clearTimeout(r),a==null||a(),a=void 0},c=h=>{window.clearTimeout(s),window.clearTimeout(r),a=void 0,e(pm(h.dataset.target??"")),l(h,!0),u(h,!0)},d=h=>{var g,f;return((f=(g=h.target)==null?void 0:g.closest)==null?void 0:f.call(g,".ui-pointer"))??void 0};return i.addEventListener("pointerover",h=>{const g=d(h);!g||h.pointerType!=="mouse"||(window.clearTimeout(r),l(g,!1),window.clearTimeout(s),s=window.setTimeout(()=>{if(a)return;const f=pm(g.dataset.target??"");f.length!==0&&(a=e(f),u(g,!1))},250))}),i.addEventListener("pointerout",h=>{!d(h)||h.pointerType!=="mouse"||(o(),window.clearTimeout(s),window.clearTimeout(r),r=window.setTimeout(m,400))}),i.addEventListener("click",h=>{const g=d(h);g&&c(g)}),i.addEventListener("focusin",h=>{const g=d(h);g&&l(g,!1)}),i.addEventListener("focusout",h=>{d(h)&&o()}),i.addEventListener("keydown",h=>{const g=d(h);g&&(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),c(g))}),{off:()=>{m(),o()}}}const Ct='',RZ=()=>{const i=[];for(const e of Pt){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function _(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function tt(i,e,t){const n=_(i,e);return n.innerHTML=t,n}const GZ=i=>p(`element_${S[i]}`);function HZ(i){return{caption:i,elements:[Ce(S.anweisung,{textLines:["ø"]})]}}function bm(i){const e=i.start?si(i.start):void 0;return e?{...e,caption:e.caption||i.title}:HZ(i.title)}class VZ{constructor(e){y(this,"element");y(this,"tab","lessons");y(this,"returnTo");y(this,"lessonId");y(this,"taskId");y(this,"body");y(this,"tips");y(this,"pointers");this.host=e,this.element=_("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=LZ(this.element),this.pointers=FZ(this.element,t=>this.host.reveal(t)),ys(Xu(r1())),this.restore()}restore(){const e=be.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=Pt.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=jn.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),ys(Xu(r1()));const e=_("div",{class:"segmented learn-tabs",role:"tablist"});for(const[a,s]of[["lessons",p("web_learn_lessons")],["tasks",p("web_learn_tasks")],["reference",p("web_learn_reference")]]){const r=_("button",{role:"tab","aria-pressed":String(this.tab===a),"data-learn-tab":a},s);r.addEventListener("click",()=>{this.tab===a&&(a==="lessons"&&(this.lessonId=void 0),a==="tasks"&&(this.taskId=void 0)),this.tab=a,this.persist(),this.render()}),e.append(r)}const t=tt("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},Ct);t.addEventListener("click",()=>this.host.collapse());const n=_("div",{class:"learn-head"},e,t);if(this.body=_("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=Pt.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=jn.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=Ha.map(r=>`- **${r.term}:** ${r.text}`).join(` `),s=tt("div",{class:"learn-text learn-reference"},_n(`${Ga} +======== + +

${Me(p("simulation_input"))}

+

${Me(p("simulation_trace"))}

+

${Me(p("simulation_variables"))}

+

${Me(p("simulation_output"))}

+ `;const e=a=>this.element.querySelector(a);this.buttons={play:e("[data-sim=play]"),pause:e("[data-sim=pause]"),step:e("[data-sim=step]"),stop:e("[data-sim=stop]")},this.buttons.play.addEventListener("click",()=>this.play()),this.buttons.pause.addEventListener("click",()=>this.pause()),this.buttons.step.addEventListener("click",()=>this.step()),this.buttons.stop.addEventListener("click",()=>this.reset()),this.editButton=e(".sim-edit"),this.editButton.addEventListener("click",()=>this.onEdit());const t=e("[data-sim=highlight]");t.value=this.highlightMode,t.addEventListener("change",()=>{this.highlightMode=t.value,om(rm,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,om(jr,this.delay)}),this.inputSection=e(".sim-input > div"),this.trace=e(".sim-trace"),this.variables=e(".sim-vars"),this.output=e(".sim-output"),this.notice=e(".sim-notice")}collectOutput(){const e=this.engine.state.outputLines;for(;this.printedr.localeCompare(o));if(n.length===0)this.variables.innerHTML=`

${Me(p("simulation_variables_placeholder"))}

`;else{const r=document.createElement("table");for(const o of n){const l=r.insertRow();l.insertCell().textContent=o;const u=e.variables.get(o),m=l.insertCell();u.kind==="grid"?m.append(xg(u)):m.textContent=_e(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

${Me(p("simulation_output_placeholder"))}

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...fg(e.files)),this.output.scrollTop=this.output.scrollHeight)}updateInput(){const e=this.engine.state.inputRequest,t=this.inputSection;if(t.parentElement.classList.toggle("active",!!e),!e){t.innerHTML=`

${Me(p("simulation_input_placeholder"))}

`;return}let n=t.querySelector("form");if(!n){n=document.createElement("form"),n.innerHTML=`

`;const l=n.querySelector("input");n.addEventListener("submit",u=>{u.preventDefault(),this.submitInput(l)}),t.replaceChildren(n),requestAnimationFrame(()=>l.focus())}const a=this.engine.state.outputLines;n.querySelector(".sim-prompt").textContent=e.prompt||(a[a.length-1]??"");const s=n.querySelector("input");s.inputMode=e.valueType==="string"||e.valueType==="boolean"?"text":"decimal";const r=this.engine.state.inputErrorNotice,o=n.querySelector(".sim-input-error");o.textContent=r?n1(r):"",o.hidden=!r}}function xg(i){const e=document.createElement("table");e.className="sim-grid";for(const t of i.value){const n=e.insertRow();for(const a of t){const s=n.insertCell();s.textContent=String(a),a===!0&&(s.className="sim-grid-true")}}return e}const y1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Hn=360/y1.length,iL="http://www.w3.org/2000/svg";function Je(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function bt(i,e={},t){const n=document.createElementNS(iL,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function aL(i,e){const t=(e%26+26)%26;return Array.from(i).map(n=>{const a=n.charCodeAt(0);return a>=65&&a<=90?String.fromCharCode((a-65+t)%26+65):a>=97&&a<=122?String.fromCharCode((a-97+t)%26+97):n}).join("")}function lm(i,e){const t=bt("g",{class:e}),n=y1.map((a,s)=>{const r=bt("g",{transform:`rotate(${s*Hn})`});return r.append(bt("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function sL(i,e){let t=i,n=!1,a=-t*Hn;const s=Je("section",{class:"learn-game learn-caesar"});s.append(Je("div",{class:"learn-game-head"},Je("strong",{},p("web_learn_caesar_title")))),s.append(Je("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=bt("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(bt("circle",{r:196,class:"outer-disc"})),r.append(bt("path",{d:rL(196,92,Hn/2),class:"window"}));const o=lm(168,"outer-letters");r.append(o.group);for(let C=0;C{o.cells.forEach((Z,E)=>Z.classList.toggle("marked",E===C)),u.cells.forEach((Z,E)=>Z.classList.toggle("marked",C!==void 0&&E===(C+t)%26))},T=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),b.textContent=p(n?"web_learn_caesar_secret":"web_learn_caesar_plain"),w.textContent=p(n?"web_learn_caesar_plain":"web_learn_caesar_secret"),f.classList.toggle("active",!n),x.classList.toggle("active",n),z.textContent=aL(v.value,n?-t:t)||" ";const C=Array.from(v.value.toUpperCase()).reverse().find(E=>y1.includes(E));if(C===void 0)return k();const Z=y1.indexOf(C);k(n?(Z-t+26)%26:Z)},j=C=>{t=(C%26+26)%26,a=-t*Hn,T()};c.addEventListener("click",()=>j(t-1)),d.addEventListener("click",()=>j(t+1)),f.addEventListener("click",()=>{var C;n&&(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!1,T()}),x.addEventListener("click",()=>{var C;n||(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!0,T()}),v.addEventListener("input",T),o.cells.forEach((C,Z)=>C.addEventListener("click",()=>k(Z)));let D;const O=C=>{const Z=r.getBoundingClientRect();return Math.atan2(C.clientY-(Z.top+Z.height/2),C.clientX-(Z.left+Z.width/2))*180/Math.PI};l.addEventListener("pointerdown",C=>{const Z=C;D=O(Z)-a,l.classList.add("dragging"),r.setPointerCapture(Z.pointerId),Z.preventDefault()}),r.addEventListener("pointermove",C=>{if(D===void 0)return;a=O(C)-D,l.setAttribute("transform",`rotate(${a})`);const Z=Math.round(-a/Hn);if((Z%26+26)%26!==t){t=(Z%26+26)%26;const E=a;T(),a=E,l.setAttribute("transform",`rotate(${a})`)}});const P=()=>{D!==void 0&&(D=void 0,l.classList.remove("dragging"),j(t))};return r.addEventListener("pointerup",P),r.addEventListener("pointercancel",P),T(),s}function rL(i,e,t){const n=(a,s)=>{const r=(s-90)*Math.PI/180;return`${(a*Math.cos(r)).toFixed(2)} ${(a*Math.sin(r)).toFixed(2)}`};return`M ${n(i,-t)} A ${i} ${i} 0 0 1 ${n(i,t)} L ${n(e,t)} A ${e} ${e} 0 0 0 ${n(e,-t)} Z`}const h0=i=>p(`web_visubot_part_${i}`),bg=new WeakMap;function vg(i,e,t,n){const a=document.createElement("div");a.className="visubot-model";const s=document.createElement("div");s.className="visubot-stage";const r=document.createElement("div");r.className="visubot-part-label",r.hidden=!0,s.append(r);const o=(c,d,h)=>{r.hidden=!1,r.textContent=h0(c),r.style.left=`${Math.min(d+12,s.clientWidth-140)}px`,r.style.top=`${h+12}px`},l=document.createElement("p");l.className="visubot-model-hint hint",l.textContent=p("web_visubot_tap_part"),l.hidden=!!n,a.append(s,l);const u=K(async()=>{const{Robot3D:c}=await import("./robot3d-DurEjQ1B.js");return{Robot3D:c}},[],import.meta.url).then(({Robot3D:c})=>{const d=new c(s);d.showcase(),d.highlight(i),i.includes("leds")&&d.setLed([40,90,255]),d.focusOn([],e==="unten"||e==="bottom"?"":e,!1,1),d.focusOn(i,e,t);let h;return s.addEventListener("pointerdown",g=>h={x:g.clientX,y:g.clientY}),s.addEventListener("pointerup",g=>{if(!h||Math.hypot(g.clientX-h.x,g.clientY-h.y)>5)return;const f=d.partAt(g.clientX,g.clientY);if(!f)return;if(n)return n(f);d.highlight(f);const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointermove",g=>{if(g.pointerType!=="mouse"||n)return;const f=d.partAt(g.clientX,g.clientY);if(r.hidden=!f,!f)return;const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointerleave",()=>r.hidden=!0),d}).catch(c=>{console.error(c),s.textContent=p("web_visubot_no_3d")}),m={box:a,ready:u,focus:i,view:e};return bg.set(a,m),m}function oL(i,e,t=!1){return vg(i,e,t).box}function lL(i){const e=i.querySelector(".visubot-model"),t=e&&bg.get(e);for(const n of i.querySelectorAll("[data-robot-part]")){const a=(n.dataset.robotPart??"").split(",").filter(Boolean);if(n.title=a.map(h0).join(", "),!t)continue;const s=()=>void t.ready.then(o=>o==null?void 0:o.highlight(a)),r=()=>void t.ready.then(o=>o==null?void 0:o.highlight(t.focus));n.addEventListener("mouseenter",s),n.addEventListener("focus",s),n.addEventListener("mouseleave",r),n.addEventListener("blur",r),n.addEventListener("click",()=>{t.ready.then(o=>{o==null||o.highlight(a),o==null||o.focusOn(a,t.view)}),t.box.scrollIntoView({block:"nearest",behavior:"smooth"})})}}function uL(i,e){let t=0;const n=document.createElement("div");n.className="visubot-quiz-question";const a=document.createElement("p");a.className="visubot-quiz-feedback",a.setAttribute("aria-live","polite");const s=()=>{n.innerHTML=_n(`**${t+1}/${i.length}** ${i[t].question}`)},r=vg([],void 0,!1,l=>{if(!(t>=i.length)){if(r.ready.then(u=>u==null?void 0:u.highlight(l)),l!==i[t].part){a.className="visubot-quiz-feedback wrong",a.textContent=p("web_visubot_quiz_wrong_fmt",h0(l));return}t++,a.className="visubot-quiz-feedback right",t{u.forEach(v=>{window.clearTimeout(v),window.clearInterval(v)}),u=[]},c=()=>{a.textContent=`${p("web_game_round_fmt",o+1,r)} · ${p("web_game_score_fmt",l)}`},d=()=>{const v=$("button",{class:"primary"},o+1{o++,o{const v=i.rounds[o],w=i.seconds,z=$("div",{class:"learn-bomb-fuse"},$("span",{})),I=$("span",{class:"learn-bomb-time"}),k=$("div",{class:"learn-bomb","aria-live":"polite"},$("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),I,z),T=$("div",{class:"learn-game-feedback",role:"status"}),j=v.code.split(` +`).map((E,U)=>{const ee=$("button",{class:"ln",type:"button"},E||" ");return ee.disabled=!E.trim(),ee.addEventListener("click",()=>C(U+1===v.wrongLine?"right":"wrong",ee)),ee}),D=$("div",{class:"learn-game-code learn-bomb-code mono",dir:"ltr"},...j),O=Date.now(),P=()=>{if(!t.isConnected&&Date.now()-O>1e3)return m();const E=Math.max(0,w-(Date.now()-O)/1e3);I.textContent=p("web_game_time_fmt",Math.ceil(E)),z.firstChild.style.width=`${E/w*100}%`,k.classList.toggle("hurry",E<=5),E<=0&&C("time")},C=(E,U)=>{m(),j.forEach((Ie,fe)=>{Ie.disabled=!0,fe+1===v.wrongLine&&Ie.classList.add("right")}),U&&E==="wrong"&&U.classList.add("wrong");const ee=E==="right";ee&&l++,c(),k.classList.add(ee?"defused":"boom"),k.firstChild.textContent=ee?"✂️":"💥",T.className=`learn-game-feedback ${ee?"right":"wrong"}`;const ge=d();T.replaceChildren($("p",{},p(ee?"web_game_defused":E==="time"?"web_game_boom_time":"web_game_boom_wrong")),Rn("div",{class:"learn-game-explain"},v.explanation),$("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,$("code",{},v.fix.trim())),ge),ge.focus({preventScroll:!0})};s.replaceChildren(k,Rn("p",{class:"learn-game-question"},v.question),D,T),P();const Z=window.setInterval(P,200);u.push(Z)},g=()=>{const v=i.rounds[o],w=[];v.code.trim()&&w.push(mm(v.code).element),w.push(Rn("p",{class:"learn-game-question"},v.question),$("p",{class:"learn-order-hint"},p("web_game_order_hint")));const z=$("div",{class:"learn-game-options learn-order"}),I=$("div",{class:"learn-game-feedback",role:"status"});let k=0;const T=cL(v.options.length).map(D=>{const O=$("span",{class:"learn-order-badge","aria-hidden":"true"}),P=$("span",{});P.innerHTML=Pe(v.options[D].text);const C=$("button",{},O,P);return C.addEventListener("click",()=>{if(D!==k)return C.classList.add("wrong"),j(!1);C.classList.add("right"),O.textContent=String(++k),C.disabled=!0,k===v.options.length&&j(!0)}),z.append(C),{k:D,b:C,badge:O}}),j=D=>{for(const{k:P,b:C,badge:Z}of[...T].sort((E,U)=>E.k-U.k))C.disabled=!0,Z.textContent=String(P+1),z.append(C);D&&l++,c(),I.className=`learn-game-feedback ${D?"right":"wrong"}`;const O=d();I.replaceChildren($("p",{},p(D?"web_game_right":"web_game_wrong_short")),Rn("div",{class:"learn-game-explain"},v.explanation),O),O.focus({preventScroll:!0})};s.replaceChildren(...w,z,I)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const v=i.rounds[o];c();const w=mm(v.code),z=[];let I;i.kind==="zuhoerer"?(I=dL(tg(v.code),w),z.push($("div",{class:"learn-swing-row"},w.element,I.element)),v.clicks.length&&z.push($("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...v.clicks.flatMap((O,P)=>[...P?[" → "]:[],$("code",{},O)])))):v.code.trim()&&z.push(w.element),z.push(Rn("p",{class:"learn-game-question"},v.question));const k=$("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),T=$("div",{class:"learn-game-feedback",role:"status"}),j=v.options.map(O=>{const P=$("button",{});return i.kind==="layout"?P.append(gL(O.text)):O.text.includes(` +`)?P.append(hL(O.text)):P.innerHTML=Pe(O.text),P.addEventListener("click",()=>D(O.right,P)),k.append(P),P}),D=(O,P)=>{j.forEach((Z,E)=>{Z.disabled=!0,v.options[E].right&&Z.classList.add("right")}),O||P.classList.add("wrong"),O&&l++,c(),T.className=`learn-game-feedback ${O?"right":"wrong"}`;const C=d();T.replaceChildren($("p",{},p(O?"web_game_right":"web_game_wrong_short")),Rn("div",{class:"learn-game-explain"},v.explanation)),T.append(C),I&&(u=I.replay(v.clicks,()=>C.before($("p",{class:"learn-swing-try"},p("web_game_try"))))),C.focus({preventScroll:!0})};s.replaceChildren(...z,k,T)},x=()=>{m(),a.textContent="";const v=$("button",{class:"primary"},p("web_game_again"));v.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren($("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),$("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),v)},b=$("button",{class:"primary"},p("web_game_start"));return b.addEventListener("click",f),s.append(Rn("p",{},i.intro),b),t}function cL(i){const e=[...Array(i).keys()];for(;e.every((t,n)=>t===n);)for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function mm(i){const e=i.split(` +`).map(n=>$("div",{class:"ln"},n||" "));return{element:$("pre",{class:"learn-game-code mono",dir:"ltr"},...e),highlight(n,a){e.forEach((s,r)=>s.classList.toggle("hit",n!==void 0&&r>=n&&r<=(a??n)))}}}function dL(i,e){const t=ng(i),n=$("div",{class:"learn-swing-window",dir:"ltr"});n.append($("div",{class:"learn-swing-title"},i.title||" "));const a=$("div",{class:"learn-swing-body"}),s=new Map;for(const c of i.labels){const d=$("div",{class:"learn-swing-label"},t.texts[c.name]);s.set(c.name,d),a.append(d)}const r=i.buttons.map(c=>{const d=$("button",{class:"learn-swing-button",disabled:""},t.texts[c.name]);return s.set(c.name,d),a.append(d),d}),o=$("p",{class:"learn-swing-event",role:"status"}),l=$("pre",{class:"learn-swing-console mono",hidden:""});n.append(a,o,l);const u=c=>{var h,g;const d=s.get(c.button);d.classList.add("pressed"),window.setTimeout(()=>d.classList.remove("pressed"),350),e.highlight((h=c.listener)==null?void 0:h.from,(g=c.listener)==null?void 0:g.to),o.textContent=c.listener?p("web_game_event_fmt",d.textContent??""):p("web_game_nobody"),o.className=`learn-swing-event ${c.listener?"heard":"nobody"}`;for(const[f,x]of Object.entries(c.texts)){const b=s.get(f);b&&b.textContent!==x&&(b.textContent=x,b.classList.remove("changed"),b.offsetWidth,b.classList.add("changed"))}c.console.length&&(l.hidden=!1,l.textContent+=c.console.map(f=>`${f} +`).join(""))},m=c=>u(ig(i,t,c));return{element:n,replay(c,d){const h=c.map((g,f)=>window.setTimeout(()=>m(g),(f+.3)*um));return h.push(window.setTimeout(()=>{i.buttons.forEach((g,f)=>{r[f].disabled=!1,r[f].addEventListener("click",()=>u(ag(i,t,g.name)))}),d()},(c.length+.3)*um)),h}}}function hL(i){return $("pre",{class:"learn-game-file mono",dir:"ltr"},i)}function gL(i){const e=eg(i),t=$("div",{class:"learn-layout-window",dir:"ltr"},$("div",{class:"learn-layout-title"})),n=$("div",{class:`learn-layout-body ${e.kind}`}),a=(s,r)=>$("span",{class:"learn-layout-cell",...r?{style:`grid-area:${r}`}:{}},s);if(e.kind==="border")for(const[s,r]of Object.entries(e.areas))n.append(a(r,s));else if(e.kind==="grid"){const s=Math.max(...e.rows.map(r=>r.length));n.style.gridTemplateColumns=`repeat(${s}, 1fr)`;for(const r of e.rows)for(let o=0;oa(r))));return t.append(n),t}function H(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function In(i,e,t){const n=H(i,e);return n.innerHTML=Pe(t),n}function cm(i){return H("pre",{class:"learn-game-code mono",dir:"ltr"},...i.split(` +`).map(e=>H("div",{class:"ln"},e||" ")))}function pL(i,e){const t=H("section",{class:"learn-game learn-rescue"}),n=H("div",{class:"learn-game-head"});n.append(H("img",{src:e,alt:"",width:"40",height:"40"}),H("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>H("span",{class:"learn-rescue-dot"})),r=H("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=H("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",H("span",{class:"learn-rescue-zora"},"🐐"),H("span",{class:"learn-rescue-fox"},"🦊")),l=H("span",{class:"learn-rescue-free"},"🐐"),u=H("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=H("p",{class:"learn-game-status"}),c=H("div",{class:"learn-game-stage"}),d=fL(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((I,k)=>I.classList.toggle("done",k{const I=[...i.alphabet].map((k,T)=>H("span",{class:"learn-rescue-letter"},H("b",{},k),H("small",{},String(T))));return{element:H("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...I),cells:I}},x=I=>{const k=i.stations[I];m.textContent=p("web_learn_rescue_station_fmt",I+1,a,k.name);const T=f(),j=H("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),D=H("button",{class:"primary"},p("web_learn_check")),O=H("div",{class:"learn-game-feedback",role:"status"}),P=()=>{const C=j.value.trim();if(!/^-?\d+$/.test(C)){O.className="learn-game-feedback wrong",O.replaceChildren(H("p",{},p("web_learn_rescue_not_number")));return}if(Number(C)!==k.answer){O.className="learn-game-feedback wrong",O.replaceChildren(H("p",{},p("web_learn_rescue_wrong")),...k.hint?[In("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${k.hint}`)]:[]),j.select();return}j.disabled=D.disabled=!0;const Z=i.alphabet.charAt(k.answer);T.cells[k.answer].classList.add("hit"),d.give(k.row,k.col,Z),h++,g();const E=I+1===a,U=H("button",{class:"primary"},p(E?"web_learn_rescue_to_crossword":"web_game_next"));U.addEventListener("click",()=>E?b():x(I+1)),O.className="learn-game-feedback right",O.replaceChildren(H("p",{},p("web_game_right")),H("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${k.answer})`,H("span",{"aria-hidden":"true"}," → "),H("code",{},`'${Z}'`)),In("div",{class:"learn-game-explain"},k.explanation),H("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),U),U.focus({preventScroll:!0})};D.addEventListener("click",P),j.addEventListener("keydown",C=>{C.key==="Enter"&&P()}),c.replaceChildren(cm(k.code),In("p",{class:"learn-game-question"},k.question),H("div",{class:"learn-rescue-answer"},j,D),O,H("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),cm(`String alphabet = "${i.alphabet}";`),T.element,d.element),j.focus({preventScroll:!0})},b=()=>{m.textContent=p("web_learn_rescue_crossword");const I=H("div",{class:"learn-game-feedback",role:"status"}),k=H("button",{class:"primary"},p("web_learn_check"));k.addEventListener("click",()=>{if(!d.check()){I.className="learn-game-feedback wrong",I.replaceChildren(H("p",{},p("web_learn_rescue_cw_wrong")));return}k.disabled=!0,d.lock();const T=H("button",{class:"primary"},p("web_learn_rescue_to_gate"));T.addEventListener("click",v),I.className="learn-game-feedback right",I.replaceChildren(H("p",{},p("web_learn_rescue_cw_done")),T),T.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(In("p",{},i.crosswordText),d.element,k,I),d.focusFirst()},v=()=>{m.textContent=p("web_learn_rescue_gate");const I=H("input",{type:"text",autocomplete:"off",autocapitalize:"off",spellcheck:"false",class:"learn-rescue-word mono",size:String(i.keyword.length+2),"aria-label":p("web_learn_rescue_word")}),k=i.gateCode.split(` +`).map(O=>{const P=O.indexOf(vs);return P<0?H("div",{class:"ln"},O||" "):H("div",{class:"ln"},O.slice(0,P),I,O.slice(P+vs.length))}),T=H("button",{class:"primary"},p("web_learn_rescue_open")),j=H("div",{class:"learn-game-feedback",role:"status"}),D=()=>{const O=I.value.trim();if(O!==i.keyword){const C=O.toUpperCase()===i.keyword.toUpperCase();j.className="learn-game-feedback wrong",j.replaceChildren(H("p",{},p(C?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),I.select();return}I.disabled=T.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const P=H("button",{},p("web_game_again"));P.addEventListener("click",w),j.className="learn-game-feedback right",j.replaceChildren(H("p",{},p("web_learn_rescue_freed")),In("div",{class:"learn-game-explain"},i.end),P)};T.addEventListener("click",D),I.addEventListener("keydown",O=>{O.key==="Enter"&&D()}),c.replaceChildren(In("p",{},i.gateText),H("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...k),T,j),I.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),x(0)},z=H("button",{class:"primary"},p("web_game_start"));return z.addEventListener("click",w),c.append(In("p",{},i.intro),z),t}function fL(i){const e=vZ(i),t=new Map(i.solution.map((g,f)=>[`${g.row} ${g.col}`,f])),n=new Map;for(const g of i.words)n.set(`${g.row} ${g.col}`,g.number);const a=new Map,s=H("div",{class:"learn-cw-grid",dir:"ltr"});s.style.gridTemplateColumns=`repeat(${i.cols}, var(--cw-cell))`;let r=!0;const o=(g,f)=>i.words.filter(x=>x.across?x.row===g&&f>=x.col&&f=x.row&&g{var v;const b=r?`${g} ${f+x}`:`${g+x} ${f}`;(v=a.get(b))==null||v.focus()};e.forEach((g,f)=>g.forEach((x,b)=>{if(!x)return s.append(H("span",{class:"learn-cw-empty"}));const v=`${f} ${b}`,w=H("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,b+1)});w.disabled=!0,w.addEventListener("focus",()=>{const T=o(f,b);T.some(j=>j.across===r)||(r=T[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,b,1)}),w.addEventListener("keydown",T=>{if(T.key==="Backspace"&&!w.value)l(f,b,-1);else if(T.key==="ArrowRight"||T.key==="ArrowLeft")r=!0,l(f,b,T.key==="ArrowRight"?1:-1);else if(T.key==="ArrowDown"||T.key==="ArrowUp")r=!1,l(f,b,T.key==="ArrowDown"?1:-1);else return;T.preventDefault()}),a.set(v,w);const z=t.get(v),I=H("span",{class:`learn-cw-cell${z!==void 0?" key":""}`}),k=n.get(v);k&&I.append(H("small",{class:"learn-cw-number"},String(k))),z!==void 0&&I.append(H("small",{class:"learn-cw-keyindex"},String(z+1))),I.append(w),s.append(I)}));const u=g=>{const f=H("ol",{class:"learn-cw-clues"});for(const x of i.words.filter(b=>b.across===g).sort((b,v)=>b.number-v.number)){const b=In("li",{value:String(x.number)},`${x.clue} (${x.word.length})`);b.addEventListener("click",()=>{var v;r=x.across,(v=a.get(`${x.row} ${x.col}`))==null||v.focus()}),f.append(b)}return H("div",{},H("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>H("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=H("div",{class:"learn-cw"},H("div",{class:"learn-cw-board"},s,H("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,H("span",{class:"mono",dir:"ltr"},...m))),H("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,x){const b=a.get(`${g} ${f}`);b.value=x,b.parentElement.classList.add("given","arrived"),h.add(`${g} ${f}`),c()},unlock(){for(const[g,f]of a)f.disabled=h.has(g)},lock(){for(const g of a.values())g.disabled=!0},focusFirst(){var g;(g=[...a].find(([f])=>!h.has(f)))==null||g[1].focus({preventScroll:!0})},check(){let g=!0;for(const[f,x]of a){const[b,v]=f.split(" ").map(Number),w=x.value!==e[b][v];x.classList.toggle("wrong",w),w&&(g=!1)}return g},reset(){h.clear();for(const g of a.values())g.value="",g.disabled=!0,g.classList.remove("wrong"),g.parentElement.classList.remove("given","arrived");c()}}}function Tt(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function dm(i,e,t){const n=Tt(i,e);return n.innerHTML=Pe(t),n}function xL(i){const e=Tt("section",{class:"learn-cloze"});e.append(Tt("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(dm("p",{},i.task)),e.append(Tt("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=Tt("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=Tt("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=Tt("input",{type:"text",class:"learn-cloze-gap mono",autocomplete:"off",autocapitalize:"off",autocorrect:"off",spellcheck:"false",enterkeyhint:"done","aria-label":`${t.length+1}`});f.style.width=`${Math.max(3,...g.answers.map(x=>x.length))+1}ch`,t.push({input:f,answers:g.answers}),h.append(f)}d.length||h.append(` +`),c.append(h)}e.append(c)}const n=Tt("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?dm("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=Tt("button",{class:"learn-cloze-check"},p("web_learn_check")),r=Tt("button",{},p("web_learn_cloze_solution")),o=Tt("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=Tt("div",{class:"learn-cloze-actions"},s,r,o);e.append(l,n),a&&e.append(a);const u=()=>{var d;let m=0;for(const h of t){const g=SZ(h.answers,h.input.value);h.input.classList.toggle("right",g),h.input.classList.toggle("wrong",!g),g&&m++}const c=m===t.length;n.textContent=c?p("web_learn_cloze_all_right"):p("web_learn_cloze_score_fmt",m,t.length),n.className=`learn-cloze-status ${c?"right":"wrong"}`,a&&(a.hidden=!c),c?(t.forEach(h=>h.input.disabled=!0),s.hidden=!0,o.hidden=!1):(r.hidden=!1,(d=t.find(h=>h.input.classList.contains("wrong")))==null||d.input.focus())};return s.addEventListener("click",u),r.addEventListener("click",()=>{for(const m of t)m.input.value=m.answers[0],m.input.classList.remove("right","wrong"),m.input.classList.add("shown"),m.input.disabled=!0;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!1),s.hidden=!0,r.hidden=!0,o.hidden=!1}),o.addEventListener("click",()=>{var m;for(const c of t)c.input.value="",c.input.classList.remove("right","wrong","shown"),c.input.disabled=!1;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!0),s.hidden=!1,r.hidden=!0,o.hidden=!0,(m=t[0])==null||m.input.focus()}),t.forEach((m,c)=>{m.input.addEventListener("input",()=>m.input.classList.remove("right","wrong")),m.input.addEventListener("keydown",d=>{d.key==="Enter"&&(d.preventDefault(),c1?12:13});return n.forEach((s,r)=>{const o=wt("tspan",{x:e.x,y:e.y+4.5+(r-(n.length-1)/2)*14});o.textContent=s,a.append(o)}),a}function da(i,e){return wt("polyline",{points:i.map(t=>t.join(",")).join(" "),fill:"none","marker-end":`url(#${e})`})}function hm(i,e,t,n){const a=wt("text",{x:e,y:t,"font-size":12,"font-weight":600,fill:n?"#248a3d":"#d70015"});return a.textContent=i,a}function yL(i,e){const t=rg(e,110),n=Math.max(...t.map(u=>u.length)),a=Math.max(70,n*6.6+(i==="raute"?56:26)),s=i==="raute"?48:t.length>1?40:30,r=wt("svg",{viewBox:`0 0 ${a+4} ${s+4}`,width:a+4,height:s+4,"aria-hidden":"true"}),o={x:(a+4)/2,y:(s+4)/2,w:a,h:s},l=p0(i,o);return l.setAttribute("fill",g0[i]),l.setAttribute("stroke","#1c1c1e"),l.setAttribute("stroke-width","1.5"),r.append(l,yg(e,{...o,w:t.length>1?124:a},i)),r}function wL(i){const e=[...Array(i).keys()];for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return i>1&&e.every((t,n)=>t===n)&&e.reverse(),e}function zL(){const i=qe("dl",{class:"learn-pap-legend"}),e=[["oval","web_learn_pap_legend_oval"],["rechteck","web_learn_pap_legend_rect"],["raute","web_learn_pap_legend_diamond"],["parallelogramm","web_learn_pap_legend_para"]];for(const[t,n]of e){const a=t==="raute"?44:40,s=wt("svg",{viewBox:`0 0 ${a+4} 28`,width:a+4,height:28,"aria-hidden":"true"}),r=p0(t,{x:(a+4)/2,y:14,w:a,h:t==="raute"?24:18});r.setAttribute("fill",g0[t]),r.setAttribute("stroke","#1c1c1e"),r.setAttribute("stroke-width","1.5"),s.append(r),i.append(qe("dt",{},s),qe("dd",{},p(n)))}return i}function IL(i){const e=qe("section",{class:"learn-pap"});if(e.append(qe("strong",{class:"learn-pap-title"},i.title)),i.task){const J=qe("p");J.innerHTML=Pe(i.task),e.append(J)}e.append(qe("p",{class:"learn-pap-hint"},p("web_learn_pap_hint")));const{boxes:t,height:n}=DZ(i),a=t.filter(Boolean),s=Math.min(...a.map(J=>J.x-J.w/2))-4,r=i.nodes.some(J=>J.shape==="raute"),o=Math.max(...a.map(J=>J.x+J.w/2),r?Math.max(...a.map(J=>J.x))+85+40:0)+4,l=wt("svg",{viewBox:`${s} 0 ${o-s} ${n}`,class:"learn-pap-plan",role:"group","aria-label":i.title}),u=`pap-arrow-${++vL}`;l.innerHTML=``;const m=wt("g",{stroke:"#1c1c1e","stroke-width":2}),c=wt("g"),d=p("web_learn_pap_yes"),h=p("web_learn_pap_no"),g=J=>t[J].y-t[J].h/2,f=J=>t[J].y+t[J].h/2,x=i.nodes.map((J,A)=>A).filter(J=>!i.nodes[J].isSide);x.forEach((J,A)=>{const N=i.nodes[J],Q=t[J],Y=x[A+1];if(Y!==void 0&&(m.append(da([[Q.x,f(J)],[Q.x,g(Y)-2]],u)),N.shape==="raute"&&c.append(hm(N.sideExit==="nein"?d:h,Q.x+6,f(J)+13,N.sideExit==="nein"))),N.shape!=="raute")return;const ue=Q.x+Q.w/2;if(c.append(hm(N.sideExit==="ja"?d:h,ue+5,Q.y-6,N.sideExit==="ja")),N.backTo!==void 0){const X=g(N.backTo)-14;m.append(da([[ue,Q.y],[ue+22,Q.y],[ue+22,X],[Q.x,X]],u))}else if(N.side!==void 0){const X=t[N.side],me=g(J)-14;m.append(da([[ue,Q.y],[X.x-X.w/2-2,Q.y]],u)),m.append(da([[X.x,X.y-X.h/2],[X.x,me],[Q.x,me]],u))}}),l.append(m,c);const b=i.nodes.map(()=>{}),v=[],w=[];let z;const I=qe("p",{class:"learn-pap-status",role:"status"}),k=i.explanation?qe("p",{class:"learn-explanation"}):void 0;k&&(k.innerHTML=Pe(i.explanation),k.hidden=!0);let T=!1;const j=()=>{v.forEach(J=>J.classList.remove("right","wrong")),I.textContent="",I.className="learn-pap-status"},D=J=>{const A=v[J];A.replaceChildren();const N=i.nodes[J],Q=b[J],Y=p0(N.shape,t[J]);if(Y.setAttribute("class","learn-pap-shape"),Q===void 0)Y.setAttribute("fill","#f7f7f9"),Y.setAttribute("stroke-dasharray","6 4"),A.append(Y),A.setAttribute("aria-label",p("web_learn_pap_empty"));else{const ue=i.nodes[Q];Y.setAttribute("fill",g0[ue.shape]),A.append(Y,yg(ue.text,t[J],N.shape)),A.setAttribute("aria-label",ue.text)}},O=()=>{i.nodes.forEach((J,A)=>D(A)),w.forEach((J,A)=>{J.hidden=b.includes(A),J.classList.toggle("selected",z===A)})},P=(J,A)=>{if(T)return;const N=b.indexOf(A);N>=0&&(b[N]=void 0),b[J]=A,z=void 0,j(),O()};i.nodes.forEach((J,A)=>{const N=wt("g",{class:"learn-pap-slot","data-slot":A,tabindex:0,role:"button"}),Q=()=>{T||(z!==void 0?P(A,z):b[A]!==void 0&&(b[A]=void 0,j(),O()))};N.addEventListener("click",Q),N.addEventListener("keydown",Y=>{Y.key!=="Enter"&&Y.key!==" "||(Y.preventDefault(),Q())}),v.push(N),l.append(N)});const C=qe("div",{class:"learn-pap-tray"});let Z=!1;for(const J of wL(i.nodes.length)){const A=i.nodes[J],N=qe("button",{class:"learn-pap-card",type:"button","aria-label":A.text},yL(A.shape,A.text));w[J]=N,N.addEventListener("click",()=>{Z||T||(z=z===J?void 0:J,O())}),N.addEventListener("pointerdown",Q=>{if(T)return;Z=!1;let Y;const ue=le=>{var Te;!Y&&Math.hypot(le.clientX-Q.clientX,le.clientY-Q.clientY)<6||(Y||(Z=!0,Y=N.cloneNode(!0),Y.classList.add("learn-pap-ghost"),document.body.append(Y),N.classList.add("dragging")),Y.style.left=`${le.clientX}px`,Y.style.top=`${le.clientY}px`,v.forEach(Fe=>Fe.classList.remove("over")),(Te=X(le))==null||Te.classList.add("over"))},X=le=>{var Fe;Y&&(Y.style.display="none");const Te=(Fe=document.elementFromPoint(le.clientX,le.clientY))==null?void 0:Fe.closest("[data-slot]");return Y&&(Y.style.display=""),Te&&v.includes(Te)?Te:void 0},me=le=>{if(N.removeEventListener("pointermove",ue),N.removeEventListener("pointerup",me),N.removeEventListener("pointercancel",me),v.forEach(Fe=>Fe.classList.remove("over")),N.classList.remove("dragging"),!Y)return;const Te=le.type==="pointerup"?X(le):void 0;Y.remove(),Te&&P(Number(Te.getAttribute("data-slot")),J),setTimeout(()=>Z=!1)};N.setPointerCapture(Q.pointerId),N.addEventListener("pointermove",ue),N.addEventListener("pointerup",me),N.addEventListener("pointercancel",me)}),C.append(N)}const E=qe("button",{class:"learn-pap-check"},p("web_learn_check")),U=qe("button",{},p("web_learn_cloze_solution")),ee=qe("button",{},p("web_learn_cloze_again"));U.hidden=!0,ee.hidden=!0;const ge=()=>{T=!0,E.hidden=!0,U.hidden=!0,ee.hidden=!1,C.hidden=!0,fe.classList.add("done"),k&&(k.hidden=!1)};E.addEventListener("click",()=>{const J=b.filter(Q=>Q===void 0).length;let A=0;b.forEach((Q,Y)=>{const ue=Q!==void 0&&_Z(i,Y,Q);v[Y].classList.toggle("right",ue),v[Y].classList.toggle("wrong",Q!==void 0&&!ue),ue&&A++});const N=A===i.nodes.length;I.textContent=N?p("web_learn_pap_all_right"):J?p("web_learn_pap_missing_fmt",J):p("web_learn_pap_score_fmt",A,i.nodes.length),I.className=`learn-pap-status ${N?"right":"wrong"}`,N?ge():J||(U.hidden=!1)}),U.addEventListener("click",()=>{i.nodes.forEach((J,A)=>b[A]=A),z=void 0,O(),j(),v.forEach(J=>J.classList.add("shown")),ge()}),ee.addEventListener("click",()=>{i.nodes.forEach((J,A)=>b[A]=void 0),T=!1,z=void 0,v.forEach(J=>J.classList.remove("shown")),j(),O(),E.hidden=!1,ee.hidden=!0,C.hidden=!1,fe.classList.remove("done"),k&&(k.hidden=!0)}),O();const Ie=qe("div",{class:"learn-pap-left"});Ie.append(l),i.legend&&Ie.append(zL());const fe=qe("div",{class:"learn-pap-work"},Ie,C);return e.append(fe,qe("div",{class:"learn-pap-actions"},E,U,ee),I),k&&e.append(k),e}const kL="code, pre, a, button, h1, h2, h3, h4, strong, .term, .ui-pointer";function gm(i,e){var s;const t=[...i.querySelectorAll(".learn-text")],n=new Set;for(const r of t.flatMap(o=>[...o.querySelectorAll("strong")])){const o=Hu(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?Vu(e,l[0]):void 0;u&&n.add(u)}let a=e.filter(r=>!n.has(r));for(const r of t){const o=document.createTreeWalker(r,NodeFilter.SHOW_TEXT),l=[];for(;o.nextNode();){const u=o.currentNode;(s=u.parentElement)!=null&&s.closest(kL)||l.push(u)}for(let u of l)for(;;){const m=Hu(a),c=m==null?void 0:m.exec(u.data),d=c?Vu(a,c[0]):void 0;if(!c||!d)break;const h=u.splitText(c.index);u=h.splitText(c[0].length);const g=document.createElement("span");g.className="term",g.tabIndex=0,g.setAttribute("role","button"),g.setAttribute("aria-describedby","term-tip"),g.dataset.term=d.term,g.dataset.text=d.text,h.replaceWith(g),g.append(h),a=a.filter(f=>f!==d)}}}function SL(i){const e=document.createElement("div");e.id="term-tip",e.className="term-tip",e.setAttribute("role","tooltip"),e.hidden=!0,document.body.append(e);let t,n=!1;const a=o=>{t=o,e.replaceChildren();const l=document.createElement("strong");l.textContent=o.dataset.term??"",e.append(l,document.createTextNode(" "+(o.dataset.text??""))),e.hidden=!1;const u=o.getBoundingClientRect(),m=e.offsetWidth,c=e.offsetHeight,d=Math.max(8,Math.min(u.left,window.innerWidth-m-8)),h=u.bottom+6;e.style.left=`${d}px`,e.style.top=`${h+c>window.innerHeight-8?Math.max(8,u.top-c-6):h}px`,o.setAttribute("aria-expanded","true")},s=()=>{t==null||t.setAttribute("aria-expanded","false"),t=void 0,n=!1,e.hidden=!0},r=o=>{var l,u;return((u=(l=o.target)==null?void 0:l.closest)==null?void 0:u.call(l,".term"))??void 0};return i.addEventListener("pointerover",o=>{const l=r(o);l&&o.pointerType==="mouse"&&!n&&a(l)}),i.addEventListener("pointerout",o=>{r(o)&&o.pointerType==="mouse"&&!n&&s()}),i.addEventListener("click",o=>{const l=r(o);if(l){if(n&&t===l)return s();a(l),n=!0}}),i.addEventListener("focusin",o=>{const l=r(o);l&&!n&&a(l)}),i.addEventListener("focusout",o=>{r(o)&&!n&&s()}),i.addEventListener("keydown",o=>{const l=r(o);o.key==="Escape"&&t?s():l&&(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l.click())}),i.addEventListener("scroll",s,!0),document.addEventListener("pointerdown",o=>{t&&!r(o)&&!e.contains(o.target)&&s()}),{hide:s}}const wg={leiste:".topbar > .toolbar",editor:".editor-rail, .columns > .app",werkzeuge:".diagram-tools",dateien:".files-rail, .files",codelive:".live-rail, .livecode",ausfuehren:"[data-run=play]",konsole:".livecode .console",einzelschritt:"[data-run=step]",elemente:".palette",struktogramm:".canvas",objektinspektor:".inspector",reiter:".tabs",titel:".caption",neu:"[data-action=new]",oeffnen:"[data-action=open]",speichern:"[data-action=save]",exportieren:"[data-action=export]",rueckgaengig:"[data-action=undo]",loeschen:"[data-action=delete]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},zg=new Set(["editor","werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","loeschen","exportieren","code","simulation"]),Ig=new Set(["ausfuehren","konsole","einzelschritt"]);function er(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function pm(i){return i==="elemente"?["editor","palette"]:zg.has(i)?["editor"]:i==="codelive"||Ig.has(i)?["livecode"]:i==="dateien"?["files"]:[]}function TL(i){return er(i,new Set(["elemente"]))}function _L(i){return er(i,new Set(["dateien"]))}function jL(i){return er(i,zg)}function CL(i){return er(i,Ig)}function fm(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in wg))continue;const n=document.createElement("span");n.className="ui-pointer",n.tabIndex=0,n.setAttribute("role","button"),n.dataset.target=t,n.append(...e.childNodes),e.replaceWith(n)}}function AL(i,e=()=>()=>{}){let t,n,a,s,r;const o=()=>{t==null||t.classList.remove("ui-spot"),t=void 0,window.clearTimeout(n)},l=(h,g)=>{o();const f=[...document.querySelectorAll(wg[h.dataset.target??""]??":not(*)")].find(x=>x.getClientRects().length>0);f&&(t=f,f.classList.add("ui-spot"),g&&(n=window.setTimeout(o,2500)))},u=(h,g)=>requestAnimationFrame(()=>{l(h,g),t==null||t.scrollIntoView({block:"nearest",inline:"nearest"})}),m=()=>{window.clearTimeout(s),window.clearTimeout(r),a==null||a(),a=void 0},c=h=>{window.clearTimeout(s),window.clearTimeout(r),a=void 0,e(pm(h.dataset.target??"")),l(h,!0),u(h,!0)},d=h=>{var g,f;return((f=(g=h.target)==null?void 0:g.closest)==null?void 0:f.call(g,".ui-pointer"))??void 0};return i.addEventListener("pointerover",h=>{const g=d(h);!g||h.pointerType!=="mouse"||(window.clearTimeout(r),l(g,!1),window.clearTimeout(s),s=window.setTimeout(()=>{if(a)return;const f=pm(g.dataset.target??"");f.length!==0&&(a=e(f),u(g,!1))},250))}),i.addEventListener("pointerout",h=>{!d(h)||h.pointerType!=="mouse"||(o(),window.clearTimeout(s),window.clearTimeout(r),r=window.setTimeout(m,400))}),i.addEventListener("click",h=>{const g=d(h);g&&c(g)}),i.addEventListener("focusin",h=>{const g=d(h);g&&l(g,!1)}),i.addEventListener("focusout",h=>{d(h)&&o()}),i.addEventListener("keydown",h=>{const g=d(h);g&&(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),c(g))}),{off:()=>{m(),o()}}}const jt='',PL=()=>{const i=[];for(const e of Ot){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function _(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function tt(i,e,t){const n=_(i,e);return n.innerHTML=t,n}const OL=i=>p(`element_${S[i]}`);function DL(i){return{caption:i,elements:[je(S.anweisung,{textLines:["ø"]})]}}function xm(i){const e=i.start?si(i.start):void 0;return e?{...e,caption:e.caption||i.title}:DL(i.title)}class ML{constructor(e){y(this,"element");y(this,"tab","lessons");y(this,"returnTo");y(this,"lessonId");y(this,"taskId");y(this,"body");y(this,"tips");y(this,"pointers");this.host=e,this.element=_("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=SL(this.element),this.pointers=AL(this.element,t=>this.host.reveal(t)),ws(Xu(r1())),this.restore()}restore(){const e=xe.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=Ot.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=An.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),ws(Xu(r1()));const e=_("div",{class:"segmented learn-tabs",role:"tablist"});for(const[a,s]of[["lessons",p("web_learn_lessons")],["tasks",p("web_learn_tasks")],["reference",p("web_learn_reference")]]){const r=_("button",{role:"tab","aria-pressed":String(this.tab===a),"data-learn-tab":a},s);r.addEventListener("click",()=>{this.tab===a&&(a==="lessons"&&(this.lessonId=void 0),a==="tasks"&&(this.taskId=void 0)),this.tab=a,this.persist(),this.render()}),e.append(r)}const t=tt("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},jt);t.addEventListener("click",()=>this.host.collapse());const n=_("div",{class:"learn-head"},e,t);if(this.body=_("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=Ot.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=An.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=Va.map(r=>`- **${r.term}:** ${r.text}`).join(` +`),s=tt("div",{class:"learn-text learn-reference"},_n(`${Ha} +>>>>>>>> 0a47d98 (Web 0.14.16: Groß- und Kleinschreibung, Übungen „Warum läuft das nicht?“, Glühbirne für Schreibweise):website/app/assets/index-D-WVwkMk.js ## ${p("web_learn_terms")} -${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="visustruct.reference.open";let n=[];try{n=JSON.parse(localStorage.getItem(t)??"[]")}catch{}for(const a of[...e.querySelectorAll("h2")]){const s=a.textContent??"",r=_("details",{class:"reference-group"});r.open=n.includes(s);const o=_("summary",{},s);for(a.replaceWith(r),r.append(o);r.nextSibling&&r.nextSibling.nodeName!=="H2";)r.append(r.nextSibling);r.addEventListener("toggle",()=>{n=r.open?[...new Set([...n,s])]:n.filter(l=>l!==s);try{localStorage.setItem(t,JSON.stringify(n))}catch{}})}}showReference(){this.tab="reference",this.persist(),this.render()}persist(){be.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(_("p",{class:"hint"},p("web_learn_intro")));for(const e of RZ()){this.body.append(_("h3",{class:"learn-section"},e.name));const t=_("ol",{class:"learn-list"});for(const n of e.lessons){const a=be.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=_("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},_("span",{class:"learn-num"},String(n.number)),_("span",{class:"learn-item-text"},_("strong",{},n.robot?`🤖 ${n.title}`:n.title),_("small",{},n.summary)),_("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(_("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var u;const t=be.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=_("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=_("nav",{class:"learn-progress","aria-label":p("web_learn_step_of_fmt",n+1,e.steps.length)});r.append(...e.steps.map((m,c)=>{const d=p("web_learn_step_fmt",c+1,m.title),h=cthis.goToStep(e,c)),g})),this.body.append(_("div",{class:"learn-lesson-head"},_("div",{class:"learn-head-row"},s,this.stepNav(e,n,t.done,"learn-nav learn-nav-top")),_("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),_("h2",{class:"learn-title"},_("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,_("h3",{class:"learn-step-title"},`${n+1}. ${a.title}`)));const o=((u=this.returnTo)==null?void 0:u.lesson)===e.id&&this.returnTo.step!==n?this.returnTo:void 0,l=()=>{const m=_("button",{class:"learn-return"},`↩ ${p("web_learn_back_to_checklist")}`);return m.addEventListener("click",()=>{this.returnTo=void 0,this.goToStep(e,o.step),this.body.scrollTop=o.scroll}),m};o&&this.body.append(l()),a.blocks.forEach((m,c)=>this.body.append(this.renderBlock(m,`${n}-${c}`,e))),fm(this.body),yZ(this.body),this.openNeededColumns(a.blocks),gm(this.body,Ha),this.body.append(this.stepNav(e,n,t.done,"learn-nav")),o&&this.body.append(l())}stepNav(e,t,n,a){const s=_("div",{class:a}),r=_("button",{},`← ${p("web_learn_back")}`);if(r.disabled=t===0,r.addEventListener("click",()=>this.goToStep(e,t-1)),s.append(r),tthis.goToStep(e,t+1)),s.append(o)}else{const o=_("button",{class:"primary"},n?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));o.addEventListener("click",()=>{be.updateLesson(e.id,{done:!0});const l=Pt.find(u=>u.number===e.number+1);this.openLesson(l==null?void 0:l.id)}),s.append(o)}return s}goToStep(e,t){be.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);NZ(this.body)?(this.host.showEditor(),WZ(this.body)&&this.host.reveal(["palette"])):EZ(this.body)?this.host.showFiles():t.some(n=>n.code!=="java")?this.host.showEditor():(t.length>0||this.body.querySelector(".lesson-code[data-lang=java]"))&&this.host.showJava(),JZ(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(_("p",{class:"hint"},p("web_learn_tasks_intro")));const e=_("ul",{class:"learn-list"});for(const t of jn){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>be.exercise(o.id).done),s=Pt.find(o=>o.number===t.after),r=_("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},_("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),_("span",{class:"learn-item-text"},_("strong",{},t.title),_("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),_("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(_("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=_("details",{class:"learn-teacher"},_("summary",{},p("web_learn_teacher")));if(am()){e.setAttribute("open","");const s=_("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{dZ(),this.render()}),e.append(_("p",{},p("web_learn_teacher_on")),s),e}const t=_("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=_("p",{class:"learn-result",role:"status"}),a=_("form",{class:"group"},t,_("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await cZ(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(_("p",{class:"hint"},p("web_learn_teacher_intro")),a,n),e}taskExercises(e){return e.blocks.flatMap(t=>t.kind==="exercise"?[t.exercise]:[])}renderTask(e){const t=_("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=Pt.find(a=>a.number===e.after);if(this.body.append(t,_("h2",{class:"learn-title"},e.title)),n){const a=_("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(_("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),fm(this.body),this.openNeededColumns(e.blocks),gm(this.body,Ha)}renderBlock(e,t,n){switch(e.kind){case"markdown":return this.withOpenButtons(tt("div",{class:"learn-text"},_n(e.text)));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);case"competences":return this.renderCompetences(e.items);case"checklist":return this.renderChecklist(e.items,t,n);case"quiz":return this.renderQuiz(e.questions,t,n);case"brag":return this.renderBrag(e.text,e.tip);case"images":return this.renderImages(e.files,e.caption);case"graphic":return this.renderGraphic(e.file,e.caption,e.labeled);case"game":return this.renderGame(e.game);case"roundGame":return zZ(e.game,ca);case"rescueGame":return _Z(e.game,ca);case"caesar":return bZ(e.key,e.text);case"cloze":return AZ(e.cloze);case"pap":return ZZ(e.pap);case"textFile":return pg(e.name,e.content);case"robotModel":return vZ(e.focus,e.view,e.spin);case"robotQuiz":return wZ(e.tasks,e.done)}}renderBrag(e,t=!1){const n=_("aside",{class:"learn-brag"});n.append(_("img",{src:ca,alt:"",width:"48",height:"48"}));const a=_("div",{},_("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(tt("div",{class:"learn-text"},_n(e))),n.append(a),n}renderGame(e){const n=_("section",{class:"learn-game"}),a=_("div",{class:"learn-game-head"});a.append(_("img",{src:ca,alt:"",width:"40",height:"40"}),_("strong",{},p("web_game_title")));const s=_("p",{class:"learn-game-status"}),r=_("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=Sx(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=_("div",{class:"learn-game-values mono"});for(const[w,z]of Tx(d))h.append(_("code",{},`${w} = ${z}`));const g=_("div",{class:"group learn-game-answers"}),f=_("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),b=_("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,b);const x=_("div",{class:"learn-game-feedback",role:"status"}),v=w=>{f.disabled=b.disabled=!0;const z=w===d.answer;z&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,x.className=`learn-game-feedback ${z?"right":"wrong"}`;const I=_("div",{class:"learn-game-steps mono"});Ix(d.condition,d.values).forEach((T,C)=>I.append(_("div",{},`${C?"→ ":""}${T}`)));const k=_("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));k.addEventListener("click",()=>{o++,o<10?u():m()}),x.replaceChildren(_("p",{},p(z?"web_game_right":"web_game_wrong")),I,k),k.focus()};f.addEventListener("click",()=>v(!0)),b.addEventListener("click",()=>v(!1)),r.replaceChildren(h,_("div",{class:"learn-game-condition mono"},d.condition),g,x)},m=()=>{s.textContent="";const d=_("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(_("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),_("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=_("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(_("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=_("figure",{class:"learn-figure"}),a=_("div",{class:"learn-images"});for(const s of e){const r=Tr(s);r&&a.append(_("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(tt("figcaption",{},Oe(t))),n}renderGraphic(e,t,n){const a=_("figure",{class:"learn-figure"}),s=Tr(e),r=n?Tr(n):void 0;if(s&&r){const o=_("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}),l=_("button",{class:"learn-graphic-toggle",type:"button",title:p("web_learn_graphic_labels"),"aria-pressed":"false"},o);l.addEventListener("click",()=>{const u=l.getAttribute("aria-pressed")!=="true";l.setAttribute("aria-pressed",String(u)),o.src=u?r:s}),a.append(l,_("p",{class:"learn-graphic-hint"},p("web_learn_graphic_labels")))}else s&&a.append(_("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}));return t&&a.append(tt("figcaption",{},Oe(t))),a}withOpenButtons(e){for(const t of e.querySelectorAll("pre.lesson-code[data-open=editor]")){const n=t.textContent??"",a=_("button",{class:"learn-open-code"},p("web_learn_open_in_editor"));a.addEventListener("click",()=>this.host.openJavaCode(n)),t.after(a)}return e}renderDiagram(e,t){const n=si(e),a=_("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(_("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(tt("figcaption",{},Oe(t)));const r=_("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=_("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>be.exercise(e.id),a=_("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(_("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),qZ(e),tt("div",{class:"learn-text"},_n(e.task)));const s=_("div",{class:"learn-result",role:"status"}),r=_("div",{class:"learn-hints"}),o=_("div",{class:"group"}),l=_("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=bm(e);if(c)try{d=Hl(c)}catch{}this.host.openExercise(e,d)});const u=_("button",{},p("web_learn_check"));if(u.addEventListener("click",()=>{const c=this.host.exerciseDocument(e.id);if(!c){s.className="learn-result info",s.textContent=p("web_learn_open_first");return}if(c.elements.every(Jl)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=xx(c,e.tests,this.host.subprogramsFor(e.id),Va),h=vx(c),g=e.requires.map(x=>x==="forZaehlSchleife"?"forSchleife":x).filter(x=>x in S&&!h.has(S[x])),f=e.loopDepth!==void 0&&Wo(c.elements)x.passed)&&g.length===0&&!f;this.showResult(s,d,g,b,f),b&&(be.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=_("button",{},p("web_learn_hint"));c.addEventListener("click",()=>{const d=r.children.length;if(d>=e.hints.length)return;const h=e.hints.length>1?`**${p("web_learn_hint_fmt",d+1,e.hints.length)}:** `:"";r.append(tt("aside",{class:"lesson-note"},_n(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=_("button",{class:"danger-text"},p("web_learn_reset"));if(m.addEventListener("click",()=>{if(m.dataset.confirm!=="1"){m.dataset.confirm="1",m.textContent=p("web_learn_reset_confirm"),setTimeout(()=>{m.dataset.confirm="",m.textContent=p("web_learn_reset")},4e3);return}be.resetExercise(e.id),this.host.resetExercise(e.id,bm(e)),a.hidden=!0,s.replaceChildren(),s.className="learn-result",m.dataset.confirm="",m.textContent=p("web_learn_reset")}),o.append(m),t.append(o,r,s),am()&&e.solution){const c=si(e.solution);if(c){const d=_("details",{class:"learn-solution"},_("summary",{},p("web_learn_solution")));d.addEventListener("toggle",()=>{if(!d.open||d.querySelector(".learn-preview"))return;const h=this.host.preview(c);h&&d.append(_("div",{class:"learn-preview",dir:"ltr"},h));const g=_("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const b=si(f);b&&this.host.openDiagram(b,f)}});for(const f of e.subprograms){const b=si(f),x=b&&this.host.preview(b);x&&d.append(_("div",{class:"learn-preview",dir:"ltr"},x))}d.append(g)}),t.append(d)}}return t}showResult(e,t,n,a,s){var o,l,u,m,c;e.className="learn-result "+(a?"ok":"fail"),e.replaceChildren(_("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(_("p",{},`✗ ${p("web_learn_missing_fmt",GZ(S[d]))}`));s&&e.append(_("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=_("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(x=>x.test.world).indexOf(d)+1:0,g=d.test.world?`🗺 ${p("web_visubot_world_fmt",h)}`:d.test.actions?`🤖 ${p("web_visubot_actions")}`:d.test.sensors?`🎛 ${Object.entries(d.test.sensors).map(([x,v])=>`mbot.${x}() = ${v.join(" → ")}`).join(", ")}`:d.test.drive?`🤖 ${p("web_visubot_drive")}`:d.test.inputs.length?p("web_learn_input_fmt",d.test.inputs.join(", ")):p("web_learn_no_input"),f=[`${d.passed?"✓":"✗"} ${g}`],b=_("div",{class:"learn-test-detail"});if(d.test.drive&&b.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},ni(d.test.drive)||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},ni(d.result.drive??[])||"–"))),d.test.actions&&b.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},ni(d.test.actions)||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},ni(d.result.actions??[])||"–"))),d.test.led!==void 0){const x=v=>p(v?"web_visubot_led_on":"web_visubot_led_off");b.append(_("span",{},`💡 ${p("web_learn_expected")}: ${x(d.test.led)} · ${p("web_learn_actual")}: ${x(d.result.led)}`))}if(d.test.tone!==void 0){const x=v=>p(v?"web_visubot_tone_yes":"web_visubot_tone_no");b.append(_("span",{},`🔊 ${p("web_learn_expected")}: ${x(d.test.tone)} · ${p("web_learn_actual")}: ${x(d.result.tone)}`))}d.test.screen!==void 0&&b.append(_("span",{},`📺 ${p("web_learn_expected")}: `,_("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,_("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=Va(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=Va(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&b.append(_("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&b.append(_("span",{class:"learn-error"},`⚠︎ ${p("web_visubot_bumps")}: ${d.result.bumps}`))),(!d.test.drive&&!d.test.world&&!d.test.sensors&&!d.test.actions||d.result.outputs.length)&&b.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},d.test.expected.join(" | ")||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},d.result.outputs.join(" | ")||"–")));for(const x of d.test.files??[])b.append(_("span",{},`📄 ${x.name}, ${p("web_learn_expected")}: `,_("code",{},x.lines.join(" | ")||"–")),_("span",{},`📄 ${x.name}, ${p("web_learn_actual")}: `,_("code",{},Kh((c=d.result.files)==null?void 0:c.get(x.name)).join(" | ")||"–")));d.result.error&&b.append(_("span",{class:"learn-error"},n1(d.result.error))),d.result.missingInput&&b.append(_("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&b.append(_("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&b.append(_("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(_("li",{class:d.passed?"ok":"fail"},...f,b))}e.append(r)}renderCompetences(e){const t=_("aside",{class:"learn-competences"},_("p",{class:"learn-competences-title"},p("web_learn_competences_intro"))),n=_("ul",{});for(const a of e)n.append(tt("li",{},Oe(a)));return t.append(n),t}renderChecklist(e,t,n){const a=[{value:"umbrella",icon:"☂️",label:p("web_learn_rating_umbrella")},{value:"cloud",icon:"⛅",label:p("web_learn_rating_cloud")},{value:"sun",icon:"☀️",label:p("web_learn_rating_sun")}],s=_("div",{class:"learn-checklist-wrap"}),r=_("p",{class:"learn-rating-legend"});for(const l of a)r.append(_("span",{},`${l.icon} ${l.label}`));const o=_("ul",{class:"learn-checklist"});return s.append(r,o),e.forEach((l,u)=>{var v;const m=`${t}-${u}`,c=n?(v=be.lesson(n.id).checks)==null?void 0:v[m]:void 0;let d=c===!0?"sun":c||void 0;const h=tt("span",{class:"learn-check-text"},Oe(l.text)),g=_("span",{class:"learn-rating",role:"group","aria-label":h.textContent??""}),f=a.map(w=>{const z=_("button",{class:"learn-rating-button",title:w.label,"aria-label":w.label},w.icon);return z.addEventListener("click",()=>{if(d=d===w.value?void 0:w.value,b(),!n)return;const I={...be.lesson(n.id).checks??{}};d?I[m]=d:delete I[m],be.updateLesson(n.id,{checks:Object.keys(I).length?I:void 0})}),z}),b=()=>{f.forEach((w,z)=>w.setAttribute("aria-pressed",String(a[z].value===d))),x.dataset.rating=d??""};g.append(...f);const x=_("li",{},h,g);if(n&&l.step!==void 0){const w=l.step,z=p("web_learn_step_fmt",w+1,n.steps[w].title),I=_("button",{class:"link-button learn-check-link",title:z,"aria-label":`${p("web_learn_review")}: ${z}`},p("web_learn_review"));I.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:be.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,w)}),x.append(I)}b(),o.append(x)}),s}renderQuiz(e,t,n){const a=_("div",{class:"learn-quiz"}),s=_("p",{class:"learn-score",role:"status"}),r=()=>n?be.lesson(n.id).quiz??{}:{},o=_("div",{class:"learn-review"}),l=()=>{const u=r(),m=(f,b)=>f.pairs?f.pairs.every((x,v)=>u[`${t}-${b}-${v}`]!==void 0):u[`${t}-${b}`]!==void 0,c=(f,b)=>{var x;return!!(f.pairs?f.pairs.every((v,w)=>xm(f)[u[`${t}-${b}-${w}`]]===f.pairs[w].right):(x=f.options[u[`${t}-${b}`]])!=null&&x.correct)},d=e.filter(m).length,h=e.filter(c).length,g=d===e.length;s.textContent=g?p("web_learn_score_fmt",h,e.length):"",o.replaceChildren(),g&&n&&this.fillChecklistReview(o,n,e,f=>c(e[f],f))};return e.forEach((u,m)=>{const c=`${t}-${m}`,d=_("fieldset",{},tt("legend",{},Oe(u.question))),h=tt("p",{class:"learn-explanation"},Oe(u.explanation??""));if(u.pairs){d.append(this.renderMatch(u,c,r,n,h,l),h),a.append(d);return}const g=f=>{d.querySelectorAll("button").forEach((b,x)=>{b.classList.toggle("right",f!==void 0&&u.options[x].correct),b.classList.toggle("wrong",f===x&&!u.options[x].correct),b.setAttribute("aria-pressed",String(f===x))}),h.hidden=f===void 0||!u.explanation};u.options.forEach((f,b)=>{const x=tt("button",{class:"learn-option"},Oe(f.text));x.addEventListener("click",()=>{n&&be.updateLesson(n.id,{quiz:{...r(),[c]:b}}),g(b),l()}),d.append(x)}),d.append(h),g(r()[c]),a.append(d)}),a.append(s,o),l(),a}fillChecklistReview(e,t,n,a){const s={sun:"☀️",cloud:"⛅",umbrella:"☂️"},r=be.lesson(t.id).checks??{},o=[];let l=0;t.steps.forEach((u,m)=>u.blocks.forEach((c,d)=>{c.kind==="checklist"&&c.items.forEach((h,g)=>{const f=r[`${m}-${d}-${g}`],b=f===!0?"sun":f||void 0,x=h.step===void 0?[]:n.map((k,T)=>k.step===h.step?T:-1).filter(k=>k>=0),v=x.filter(k=>!a(k));let w="";b==="sun"&&v.length?w=p("web_learn_review_overrated_fmt",v.map(k=>k+1).join(", ")):b&&b!=="sun"&&x.length&&!v.length&&(w=p("web_learn_review_underrated")),w&&l++;const z=_("li",{class:w?"learn-review-deviation":""}),I=tt("span",{class:"learn-check-text"},Oe(h.text));if(w&&I.append(_("br",{}),_("em",{},w)),z.append(I,_("span",{class:"learn-review-icon","aria-label":p(b?`web_learn_rating_${b}`:"web_learn_review_unrated")},b?s[b]:"–")),w&&b==="sun"&&h.step!==void 0){const k=h.step,T=_("button",{class:"link-button learn-check-link"},p("web_learn_review"));T.addEventListener("click",()=>{this.returnTo={lesson:t.id,step:be.lesson(t.id).step,scroll:this.body.scrollTop},this.goToStep(t,k)}),z.append(T)}o.push(z)})})),o.length&&e.append(_("p",{class:"learn-review-title"},`📋 ${p("web_learn_review_title")}`),_("p",{},p(l?"web_learn_review_hint":"web_learn_review_match")),_("ul",{class:"learn-checklist"},...o))}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=xm(e),u=_("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=b=>a?be.updateLesson(a.id,{quiz:b}):m=b,h=b=>c()[`${t}-${b}`],g=o.map(b=>{const x=_("select",{class:"learn-match-select"});x.append(_("option",{value:""},"–")),l.forEach((w,z)=>x.append(_("option",{value:String(z)},w)));const v=tt("label",{class:"learn-match-left"},Oe(b.left));return v.append(x),u.append(v),x}),f=()=>{const b=o.every((x,v)=>h(v)!==void 0);g.forEach((x,v)=>{const w=h(v);x.value=w===void 0?"":String(w),x.classList.toggle("right",b&&l[w]===o[v].right),x.classList.toggle("wrong",b&&l[w]!==o[v].right)}),s.hidden=!b||!e.explanation};return g.forEach((b,x)=>b.addEventListener("change",()=>{const v={...c()};b.value===""?delete v[`${t}-${x}`]:v[`${t}-${x}`]=Number(b.value),d(v),f(),r()})),f(),u}}function xm(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}function qZ(i){const e=og(i),t=e==="beide"?"web_learn_solve_in_both":e==="code"?"web_learn_solve_in_code":"web_learn_solve_in_editor",n={editor:p("web_editor_title"),code:p("web_live_title")},a=e==="beide"?["editor","code"]:[e==="code"?"code":"editor"],s=_("p",{class:`learn-where learn-where-${e}`});for(const r of p(t,...a).split(/(\u0001(?:editor|code))/))if(r==="editor"||r==="code"){const o=r.slice(1);s.append(_("span",{class:`area-name area-${o}`},n[o]))}else r&&s.append(r);return s}const QZ=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,er="visustruct.visubot";function tr(){try{return localStorage.getItem(er)}catch{return null}}function hi(){const i=tr();return i==="1"||i==="kurs"?"on":"off"}const kg=()=>tr()==="2";function Sg(){try{localStorage.setItem(er,"2")}catch{}}const Tg=()=>tr()==="3";function _g(){try{localStorage.setItem(er,"3")}catch{}}const UZ=()=>tr()!==null;function Ar(i){try{localStorage.setItem(er,i==="on"?"1":"0")}catch{}}const $Z=`VisuBot`,Vn=()=>hi()!=="off",vm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function Fo(){const i=kg()?"object":Tg()?"flow":hi(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint",flow:"web_visuflow_world_hint"}[i];return`
+${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="visustruct.reference.open";let n=[];try{n=JSON.parse(localStorage.getItem(t)??"[]")}catch{}for(const a of[...e.querySelectorAll("h2")]){const s=a.textContent??"",r=_("details",{class:"reference-group"});r.open=n.includes(s);const o=_("summary",{},s);for(a.replaceWith(r),r.append(o);r.nextSibling&&r.nextSibling.nodeName!=="H2";)r.append(r.nextSibling);r.addEventListener("toggle",()=>{n=r.open?[...new Set([...n,s])]:n.filter(l=>l!==s);try{localStorage.setItem(t,JSON.stringify(n))}catch{}})}}showReference(){this.tab="reference",this.persist(),this.render()}persist(){xe.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(_("p",{class:"hint"},p("web_learn_intro")));for(const e of PL()){this.body.append(_("h3",{class:"learn-section"},e.name));const t=_("ol",{class:"learn-list"});for(const n of e.lessons){const a=xe.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=_("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},_("span",{class:"learn-num"},String(n.number)),_("span",{class:"learn-item-text"},_("strong",{},n.robot?`🤖 ${n.title}`:n.title),_("small",{},n.summary)),_("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(_("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var u;const t=xe.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=_("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=_("nav",{class:"learn-progress","aria-label":p("web_learn_step_of_fmt",n+1,e.steps.length)});r.append(...e.steps.map((m,c)=>{const d=p("web_learn_step_fmt",c+1,m.title),h=cthis.goToStep(e,c)),g})),this.body.append(_("div",{class:"learn-lesson-head"},_("div",{class:"learn-head-row"},s,this.stepNav(e,n,t.done,"learn-nav learn-nav-top")),_("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),_("h2",{class:"learn-title"},_("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,_("h3",{class:"learn-step-title"},`${n+1}. ${a.title}`)));const o=((u=this.returnTo)==null?void 0:u.lesson)===e.id&&this.returnTo.step!==n?this.returnTo:void 0,l=()=>{const m=_("button",{class:"learn-return"},`↩ ${p("web_learn_back_to_checklist")}`);return m.addEventListener("click",()=>{this.returnTo=void 0,this.goToStep(e,o.step),this.body.scrollTop=o.scroll}),m};o&&this.body.append(l()),a.blocks.forEach((m,c)=>this.body.append(this.renderBlock(m,`${n}-${c}`,e))),fm(this.body),lL(this.body),this.openNeededColumns(a.blocks),gm(this.body,Va),this.body.append(this.stepNav(e,n,t.done,"learn-nav")),o&&this.body.append(l())}stepNav(e,t,n,a){const s=_("div",{class:a}),r=_("button",{},`← ${p("web_learn_back")}`);if(r.disabled=t===0,r.addEventListener("click",()=>this.goToStep(e,t-1)),s.append(r),tthis.goToStep(e,t+1)),s.append(o)}else{const o=_("button",{class:"primary"},n?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));o.addEventListener("click",()=>{xe.updateLesson(e.id,{done:!0});const l=Ot.find(u=>u.number===e.number+1);this.openLesson(l==null?void 0:l.id)}),s.append(o)}return s}goToStep(e,t){xe.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);jL(this.body)?(this.host.showEditor(),TL(this.body)&&this.host.reveal(["palette"])):_L(this.body)?this.host.showFiles():t.some(n=>n.code!=="java")?this.host.showEditor():(t.length>0||this.body.querySelector(".lesson-code[data-lang=java]"))&&this.host.showJava(),CL(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(_("p",{class:"hint"},p("web_learn_tasks_intro")));const e=_("ul",{class:"learn-list"});for(const t of An){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>xe.exercise(o.id).done),s=Ot.find(o=>o.number===t.after),r=_("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},_("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),_("span",{class:"learn-item-text"},_("strong",{},t.title),_("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),_("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(_("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=_("details",{class:"learn-teacher"},_("summary",{},p("web_learn_teacher")));if(am()){e.setAttribute("open","");const s=_("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{eL(),this.render()}),e.append(_("p",{},p("web_learn_teacher_on")),s),e}const t=_("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=_("p",{class:"learn-result",role:"status"}),a=_("form",{class:"group"},t,_("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await KZ(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(_("p",{class:"hint"},p("web_learn_teacher_intro")),a,n),e}taskExercises(e){return e.blocks.flatMap(t=>t.kind==="exercise"?[t.exercise]:[])}renderTask(e){const t=_("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=Ot.find(a=>a.number===e.after);if(this.body.append(t,_("h2",{class:"learn-title"},e.title)),n){const a=_("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(_("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),fm(this.body),this.openNeededColumns(e.blocks),gm(this.body,Va)}renderBlock(e,t,n){switch(e.kind){case"markdown":return this.withOpenButtons(tt("div",{class:"learn-text"},_n(e.text)));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);case"competences":return this.renderCompetences(e.items);case"checklist":return this.renderChecklist(e.items,t,n);case"quiz":return this.renderQuiz(e.questions,t,n);case"brag":return this.renderBrag(e.text,e.tip);case"images":return this.renderImages(e.files,e.caption);case"graphic":return this.renderGraphic(e.file,e.caption,e.labeled);case"game":return this.renderGame(e.game);case"roundGame":return mL(e.game,ca);case"rescueGame":return pL(e.game,ca);case"caesar":return sL(e.key,e.text);case"cloze":return xL(e.cloze);case"pap":return IL(e.pap);case"textFile":return pg(e.name,e.content);case"robotModel":return oL(e.focus,e.view,e.spin);case"robotQuiz":return uL(e.tasks,e.done)}}renderBrag(e,t=!1){const n=_("aside",{class:"learn-brag"});n.append(_("img",{src:ca,alt:"",width:"48",height:"48"}));const a=_("div",{},_("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(tt("div",{class:"learn-text"},_n(e))),n.append(a),n}renderGame(e){const n=_("section",{class:"learn-game"}),a=_("div",{class:"learn-game-head"});a.append(_("img",{src:ca,alt:"",width:"40",height:"40"}),_("strong",{},p("web_game_title")));const s=_("p",{class:"learn-game-status"}),r=_("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=Sb(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=_("div",{class:"learn-game-values mono"});for(const[w,z]of Tb(d))h.append(_("code",{},`${w} = ${z}`));const g=_("div",{class:"group learn-game-answers"}),f=_("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),x=_("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,x);const b=_("div",{class:"learn-game-feedback",role:"status"}),v=w=>{f.disabled=x.disabled=!0;const z=w===d.answer;z&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,b.className=`learn-game-feedback ${z?"right":"wrong"}`;const I=_("div",{class:"learn-game-steps mono"});Ib(d.condition,d.values).forEach((T,j)=>I.append(_("div",{},`${j?"→ ":""}${T}`)));const k=_("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));k.addEventListener("click",()=>{o++,o<10?u():m()}),b.replaceChildren(_("p",{},p(z?"web_game_right":"web_game_wrong")),I,k),k.focus()};f.addEventListener("click",()=>v(!0)),x.addEventListener("click",()=>v(!1)),r.replaceChildren(h,_("div",{class:"learn-game-condition mono"},d.condition),g,b)},m=()=>{s.textContent="";const d=_("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(_("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),_("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=_("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(_("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=_("figure",{class:"learn-figure"}),a=_("div",{class:"learn-images"});for(const s of e){const r=_r(s);r&&a.append(_("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(tt("figcaption",{},Pe(t))),n}renderGraphic(e,t,n){const a=_("figure",{class:"learn-figure"}),s=_r(e),r=n?_r(n):void 0;if(s&&r){const o=_("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}),l=_("button",{class:"learn-graphic-toggle",type:"button",title:p("web_learn_graphic_labels"),"aria-pressed":"false"},o);l.addEventListener("click",()=>{const u=l.getAttribute("aria-pressed")!=="true";l.setAttribute("aria-pressed",String(u)),o.src=u?r:s}),a.append(l,_("p",{class:"learn-graphic-hint"},p("web_learn_graphic_labels")))}else s&&a.append(_("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}));return t&&a.append(tt("figcaption",{},Pe(t))),a}withOpenButtons(e){for(const t of e.querySelectorAll("pre.lesson-code[data-open=editor]")){const n=t.textContent??"",a=_("button",{class:"learn-open-code"},p("web_learn_open_in_editor"));a.addEventListener("click",()=>this.host.openJavaCode(n)),t.after(a)}return e}renderDiagram(e,t){const n=si(e),a=_("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(_("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(tt("figcaption",{},Pe(t)));const r=_("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=_("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>xe.exercise(e.id),a=_("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(_("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),BL(e),tt("div",{class:"learn-text"},_n(e.task)));const s=_("div",{class:"learn-result",role:"status"}),r=_("div",{class:"learn-hints"}),o=_("div",{class:"group"}),l=_("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=xm(e);if(c)try{d=Hl(c)}catch{}this.host.openExercise(e,d)});const u=_("button",{},p("web_learn_check"));if(u.addEventListener("click",()=>{const c=this.host.exerciseDocument(e.id);if(!c){s.className="learn-result info",s.textContent=p("web_learn_open_first");return}if(c.elements.every(Fl)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=bb(c,e.tests,this.host.subprogramsFor(e.id),qa),h=vb(c),g=e.requires.map(b=>b==="forZaehlSchleife"?"forSchleife":b).filter(b=>b in S&&!h.has(S[b])),f=e.loopDepth!==void 0&&Wo(c.elements)b.passed)&&g.length===0&&!f;this.showResult(s,d,g,x,f),x&&(xe.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=_("button",{},p("web_learn_hint"));c.addEventListener("click",()=>{const d=r.children.length;if(d>=e.hints.length)return;const h=e.hints.length>1?`**${p("web_learn_hint_fmt",d+1,e.hints.length)}:** `:"";r.append(tt("aside",{class:"lesson-note"},_n(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=_("button",{class:"danger-text"},p("web_learn_reset"));if(m.addEventListener("click",()=>{if(m.dataset.confirm!=="1"){m.dataset.confirm="1",m.textContent=p("web_learn_reset_confirm"),setTimeout(()=>{m.dataset.confirm="",m.textContent=p("web_learn_reset")},4e3);return}xe.resetExercise(e.id),this.host.resetExercise(e.id,xm(e)),a.hidden=!0,s.replaceChildren(),s.className="learn-result",m.dataset.confirm="",m.textContent=p("web_learn_reset")}),o.append(m),t.append(o,r,s),am()&&e.solution){const c=si(e.solution);if(c){const d=_("details",{class:"learn-solution"},_("summary",{},p("web_learn_solution")));d.addEventListener("toggle",()=>{if(!d.open||d.querySelector(".learn-preview"))return;const h=this.host.preview(c);h&&d.append(_("div",{class:"learn-preview",dir:"ltr"},h));const g=_("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const x=si(f);x&&this.host.openDiagram(x,f)}});for(const f of e.subprograms){const x=si(f),b=x&&this.host.preview(x);b&&d.append(_("div",{class:"learn-preview",dir:"ltr"},b))}d.append(g)}),t.append(d)}}return t}showResult(e,t,n,a,s){var o,l,u,m,c;e.className="learn-result "+(a?"ok":"fail"),e.replaceChildren(_("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(_("p",{},`✗ ${p("web_learn_missing_fmt",OL(S[d]))}`));s&&e.append(_("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=_("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(b=>b.test.world).indexOf(d)+1:0,g=d.test.world?`🗺 ${p("web_visubot_world_fmt",h)}`:d.test.actions?`🤖 ${p("web_visubot_actions")}`:d.test.sensors?`🎛 ${Object.entries(d.test.sensors).map(([b,v])=>`mbot.${b}() = ${v.join(" → ")}`).join(", ")}`:d.test.drive?`🤖 ${p("web_visubot_drive")}`:d.test.inputs.length?p("web_learn_input_fmt",d.test.inputs.join(", ")):p("web_learn_no_input"),f=[`${d.passed?"✓":"✗"} ${g}`],x=_("div",{class:"learn-test-detail"});if(d.test.drive&&x.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},ii(d.test.drive)||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},ii(d.result.drive??[])||"–"))),d.test.actions&&x.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},ii(d.test.actions)||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},ii(d.result.actions??[])||"–"))),d.test.led!==void 0){const b=v=>p(v?"web_visubot_led_on":"web_visubot_led_off");x.append(_("span",{},`💡 ${p("web_learn_expected")}: ${b(d.test.led)} · ${p("web_learn_actual")}: ${b(d.result.led)}`))}if(d.test.tone!==void 0){const b=v=>p(v?"web_visubot_tone_yes":"web_visubot_tone_no");x.append(_("span",{},`🔊 ${p("web_learn_expected")}: ${b(d.test.tone)} · ${p("web_learn_actual")}: ${b(d.result.tone)}`))}d.test.screen!==void 0&&x.append(_("span",{},`📺 ${p("web_learn_expected")}: `,_("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,_("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=qa(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=qa(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&x.append(_("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&x.append(_("span",{class:"learn-error"},`⚠︎ ${p("web_visubot_bumps")}: ${d.result.bumps}`))),(!d.test.drive&&!d.test.world&&!d.test.sensors&&!d.test.actions||d.result.outputs.length)&&x.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},d.test.expected.join(" | ")||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},d.result.outputs.join(" | ")||"–")));for(const b of d.test.files??[])x.append(_("span",{},`📄 ${b.name}, ${p("web_learn_expected")}: `,_("code",{},b.lines.join(" | ")||"–")),_("span",{},`📄 ${b.name}, ${p("web_learn_actual")}: `,_("code",{},Kh((c=d.result.files)==null?void 0:c.get(b.name)).join(" | ")||"–")));d.result.error&&x.append(_("span",{class:"learn-error"},n1(d.result.error))),d.result.missingInput&&x.append(_("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&x.append(_("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&x.append(_("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(_("li",{class:d.passed?"ok":"fail"},...f,x))}e.append(r)}renderCompetences(e){const t=_("aside",{class:"learn-competences"},_("p",{class:"learn-competences-title"},p("web_learn_competences_intro"))),n=_("ul",{});for(const a of e)n.append(tt("li",{},Pe(a)));return t.append(n),t}renderChecklist(e,t,n){const a=[{value:"umbrella",icon:"☂️",label:p("web_learn_rating_umbrella")},{value:"cloud",icon:"⛅",label:p("web_learn_rating_cloud")},{value:"sun",icon:"☀️",label:p("web_learn_rating_sun")}],s=_("div",{class:"learn-checklist-wrap"}),r=_("p",{class:"learn-rating-legend"});for(const l of a)r.append(_("span",{},`${l.icon} ${l.label}`));const o=_("ul",{class:"learn-checklist"});return s.append(r,o),e.forEach((l,u)=>{var v;const m=`${t}-${u}`,c=n?(v=xe.lesson(n.id).checks)==null?void 0:v[m]:void 0;let d=c===!0?"sun":c||void 0;const h=tt("span",{class:"learn-check-text"},Pe(l.text)),g=_("span",{class:"learn-rating",role:"group","aria-label":h.textContent??""}),f=a.map(w=>{const z=_("button",{class:"learn-rating-button",title:w.label,"aria-label":w.label},w.icon);return z.addEventListener("click",()=>{if(d=d===w.value?void 0:w.value,x(),!n)return;const I={...xe.lesson(n.id).checks??{}};d?I[m]=d:delete I[m],xe.updateLesson(n.id,{checks:Object.keys(I).length?I:void 0})}),z}),x=()=>{f.forEach((w,z)=>w.setAttribute("aria-pressed",String(a[z].value===d))),b.dataset.rating=d??""};g.append(...f);const b=_("li",{},h,g);if(n&&l.step!==void 0){const w=l.step,z=p("web_learn_step_fmt",w+1,n.steps[w].title),I=_("button",{class:"link-button learn-check-link",title:z,"aria-label":`${p("web_learn_review")}: ${z}`},p("web_learn_review"));I.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:xe.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,w)}),b.append(I)}x(),o.append(b)}),s}renderQuiz(e,t,n){const a=_("div",{class:"learn-quiz"}),s=_("p",{class:"learn-score",role:"status"}),r=()=>n?xe.lesson(n.id).quiz??{}:{},o=_("div",{class:"learn-review"}),l=()=>{const u=r(),m=(f,x)=>f.pairs?f.pairs.every((b,v)=>u[`${t}-${x}-${v}`]!==void 0):u[`${t}-${x}`]!==void 0,c=(f,x)=>{var b;return!!(f.pairs?f.pairs.every((v,w)=>bm(f)[u[`${t}-${x}-${w}`]]===f.pairs[w].right):(b=f.options[u[`${t}-${x}`]])!=null&&b.correct)},d=e.filter(m).length,h=e.filter(c).length,g=d===e.length;s.textContent=g?p("web_learn_score_fmt",h,e.length):"",o.replaceChildren(),g&&n&&this.fillChecklistReview(o,n,e,f=>c(e[f],f))};return e.forEach((u,m)=>{const c=`${t}-${m}`,d=_("fieldset",{},tt("legend",{},Pe(u.question))),h=tt("p",{class:"learn-explanation"},Pe(u.explanation??""));if(u.pairs){d.append(this.renderMatch(u,c,r,n,h,l),h),a.append(d);return}const g=f=>{d.querySelectorAll("button").forEach((x,b)=>{x.classList.toggle("right",f!==void 0&&u.options[b].correct),x.classList.toggle("wrong",f===b&&!u.options[b].correct),x.setAttribute("aria-pressed",String(f===b))}),h.hidden=f===void 0||!u.explanation};u.options.forEach((f,x)=>{const b=tt("button",{class:"learn-option"},Pe(f.text));b.addEventListener("click",()=>{n&&xe.updateLesson(n.id,{quiz:{...r(),[c]:x}}),g(x),l()}),d.append(b)}),d.append(h),g(r()[c]),a.append(d)}),a.append(s,o),l(),a}fillChecklistReview(e,t,n,a){const s={sun:"☀️",cloud:"⛅",umbrella:"☂️"},r=xe.lesson(t.id).checks??{},o=[];let l=0;t.steps.forEach((u,m)=>u.blocks.forEach((c,d)=>{c.kind==="checklist"&&c.items.forEach((h,g)=>{const f=r[`${m}-${d}-${g}`],x=f===!0?"sun":f||void 0,b=h.step===void 0?[]:n.map((k,T)=>k.step===h.step?T:-1).filter(k=>k>=0),v=b.filter(k=>!a(k));let w="";x==="sun"&&v.length?w=p("web_learn_review_overrated_fmt",v.map(k=>k+1).join(", ")):x&&x!=="sun"&&b.length&&!v.length&&(w=p("web_learn_review_underrated")),w&&l++;const z=_("li",{class:w?"learn-review-deviation":""}),I=tt("span",{class:"learn-check-text"},Pe(h.text));if(w&&I.append(_("br",{}),_("em",{},w)),z.append(I,_("span",{class:"learn-review-icon","aria-label":p(x?`web_learn_rating_${x}`:"web_learn_review_unrated")},x?s[x]:"–")),w&&x==="sun"&&h.step!==void 0){const k=h.step,T=_("button",{class:"link-button learn-check-link"},p("web_learn_review"));T.addEventListener("click",()=>{this.returnTo={lesson:t.id,step:xe.lesson(t.id).step,scroll:this.body.scrollTop},this.goToStep(t,k)}),z.append(T)}o.push(z)})})),o.length&&e.append(_("p",{class:"learn-review-title"},`📋 ${p("web_learn_review_title")}`),_("p",{},p(l?"web_learn_review_hint":"web_learn_review_match")),_("ul",{class:"learn-checklist"},...o))}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=bm(e),u=_("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=x=>a?xe.updateLesson(a.id,{quiz:x}):m=x,h=x=>c()[`${t}-${x}`],g=o.map(x=>{const b=_("select",{class:"learn-match-select"});b.append(_("option",{value:""},"–")),l.forEach((w,z)=>b.append(_("option",{value:String(z)},w)));const v=tt("label",{class:"learn-match-left"},Pe(x.left));return v.append(b),u.append(v),b}),f=()=>{const x=o.every((b,v)=>h(v)!==void 0);g.forEach((b,v)=>{const w=h(v);b.value=w===void 0?"":String(w),b.classList.toggle("right",x&&l[w]===o[v].right),b.classList.toggle("wrong",x&&l[w]!==o[v].right)}),s.hidden=!x||!e.explanation};return g.forEach((x,b)=>x.addEventListener("change",()=>{const v={...c()};x.value===""?delete v[`${t}-${b}`]:v[`${t}-${b}`]=Number(x.value),d(v),f(),r()})),f(),u}}function bm(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}function BL(i){const e=og(i),t=e==="beide"?"web_learn_solve_in_both":e==="code"?"web_learn_solve_in_code":"web_learn_solve_in_editor",n={editor:p("web_editor_title"),code:p("web_live_title")},a=e==="beide"?["editor","code"]:[e==="code"?"code":"editor"],s=_("p",{class:`learn-where learn-where-${e}`});for(const r of p(t,...a).split(/(\u0001(?:editor|code))/))if(r==="editor"||r==="code"){const o=r.slice(1);s.append(_("span",{class:`area-name area-${o}`},n[o]))}else r&&s.append(r);return s}const ZL=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,tr="visustruct.visubot";function nr(){try{return localStorage.getItem(tr)}catch{return null}}function hi(){const i=nr();return i==="1"||i==="kurs"?"on":"off"}const kg=()=>nr()==="2";function Sg(){try{localStorage.setItem(tr,"2")}catch{}}const Tg=()=>nr()==="3";function _g(){try{localStorage.setItem(tr,"3")}catch{}}const LL=()=>nr()!==null;function Ar(i){try{localStorage.setItem(tr,i==="on"?"1":"0")}catch{}}const WL=`VisuBot`,Vn=()=>hi()!=="off",vm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function Jo(){const i=kg()?"object":Tg()?"flow":hi(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint",flow:"web_visuflow_world_hint"}[i];return`
${e("off","VisuStruct")}${e("on","VisuBot")}${e("object","VisuObject")}${e("flow","VisuFlow")}
+<<<<<<<< HEAD:website/app/assets/index-BzOyQMjP.js ${vm(p(t))}`}class YZ{constructor(e=Ci){y(this,"element");y(this,"world");y(this,"view");y(this,"loading");y(this,"status");y(this,"stage");y(this,"picker");y(this,"applied",0);y(this,"sent",0);y(this,"liveStatus");y(this,"viewport");y(this,"stopListening");y(this,"realSensors");y(this,"controls",{getBrightness:50,getLoudness:0,getPitch:0,getRoll:0});y(this,"pressTimers",new Map);y(this,"check");y(this,"checking",!1);y(this,"onWorldChange");this.world=new fs(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${XZ()}${KZ()}`,this.stage=this.element.querySelector(".visubot-stage"),this.picker=this.element.querySelector(".visubot-worlds"),this.status=this.element.querySelector(".visubot-status"),this.liveStatus=this.element.querySelector(".visubot-live"),this.viewport=this.element.querySelector(".visubot-viewport"),this.stopListening=pe.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=K(async()=>{const{Robot3D:e}=await import("./robot3d-DVT67rC6.js");return{Robot3D:e}},[],import.meta.url).then(({Robot3D:e})=>{this.view=new e(this.stage),this.view.setWorld(this.world.setup),this.view.place(this.world.pose,this.world.trail),this.view.setLeds(this.world.leds)}).catch(()=>{this.stage.textContent=p("web_visubot_no_3d")}))}restoreViewport(){this.viewport.parentElement!==this.element&&this.liveStatus.after(this.viewport)}setWorlds(e){this.picker.replaceChildren(),this.picker.hidden=e.length<2,e.forEach((t,n)=>{const a=document.createElement("button");a.textContent=p("web_visubot_world_fmt",n+1),a.addEventListener("click",()=>this.useWorld(t,a)),this.picker.append(a)}),this.useWorld(e[0]??Ci,this.picker.firstElementChild)}useWorld(e,t){var n,a,s,r,o;for(const l of this.picker.children)l.classList.toggle("active",l===t);e!==this.world.setup&&(this.world=new fs(e),this.applied=0,this.sent=0,(n=this.view)==null||n.setWorld(e),(a=this.view)==null||a.place(this.world.pose,this.world.trail),(s=this.view)==null||s.setLed(void 0),(r=this.view)==null||r.setScreen(void 0),this.updateStatus(),(o=this.onWorldChange)==null||o.call(this))}reset(){var e,t,n;this.world.reset(),this.applied=0,this.sent=0,this.realSensors=void 0,(e=this.view)==null||e.place(this.world.pose,this.world.trail),(t=this.view)==null||t.setLed(void 0),(n=this.view)==null||n.setScreen(void 0),this.updateStatus()}prepare(e){e.robotSensors={...this.controls,...this.world.sensors()}}setupControls(){for(const e of this.element.querySelectorAll(".visubot-controls input[type=range]")){const t=e.parentElement.querySelector("output"),n=()=>{this.controls[e.name]=Number(e.value),t.textContent=e.value};e.addEventListener("input",n),n()}for(const e of this.element.querySelectorAll(".visubot-controls button[name]"))e.addEventListener("click",()=>{const t=e.name;this.controls[t]=!0,e.classList.add("pressed"),window.clearTimeout(this.pressTimers.get(t)),this.pressTimers.set(t,window.setTimeout(()=>{this.controls[t]=!1,e.classList.remove("pressed")},1e3))})}setupCheck(){for(const e of this.check.querySelectorAll("button[data-py]"))e.addEventListener("click",()=>{const{after:t,wait:n}=e.dataset;pe.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>pe.run(t)):void 0).catch(a=>this.liveFailed(a))});this.check.addEventListener("toggle",()=>void this.readCheck())}async readCheck(){if(!this.checking){this.checking=!0;try{for(;this.check.open&&pe.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!pe.connected)break;const t=e.dataset.sensor,n=await pe.ask(At[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof At[t].simulated=="boolean"?n===!0||typeof n=="number"&&n!==0?"✓":"–":String(typeof n=="number"?Math.round(n*10)/10:n))}await new Promise(e=>setTimeout(e,200))}}finally{this.checking=!1}}}get live(){return pe.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await pe.ask(At[a].python);typeof At[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof At[a].simulated=="string"?n[a]=typeof s=="string"?s:String(At[a].simulated):n[a]=typeof s=="number"?a==="getDistance"?Math.round(s):s:0}this.realSensors=n,e.robotSensors={...this.controls,...this.world.sensors(),...n}}async drive(e){for(;this.sentsetTimeout(n,t.args[0]))}}liveFailed(e){pe.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=Ag(),this.liveStatus.classList.toggle("connected",pe.connected),this.check.hidden=!pe.connected,pe.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(m0),n&&((o=this.view)==null||o.moveTo(this.world.pose,this.world.trail,t)),this.updateStatus()}dispose(){var e;this.stopListening();for(const t of this.pressTimers.values())window.clearTimeout(t);(e=this.view)==null||e.dispose(),this.view=void 0,this.loading=void 0}updateStatus(){const e=this.world.lineState().toString(2).padStart(4,"0"),t=[`${p("web_visubot_distance")}: ${this.world.distance()} cm`,`${p("web_visubot_line")}: ${e}`];this.world.bumps>0&&t.push(`⚠︎ ${p("web_visubot_bumps")}: ${this.world.bumps}`),this.world.screen!==void 0&&t.push(`📺 ${this.world.screen}`),this.realSensors&&pe.connected&&t.push(`🤖 ${p("web_visubot_distance")}: ${this.realSensors.getDistance} cm · ${p("web_visubot_line")}: ${Number(this.realSensors.getLine).toString(2).padStart(4,"0")}`),this.status.textContent=t.join(" · ")}}let U1;function Cg(i,e){try{U1??(U1=new AudioContext);const t=U1.createOscillator(),n=U1.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(U1.destination);const a=U1.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function XZ(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")} +======== + ${vm(p(t))}`}class EL{constructor(e=ji){y(this,"element");y(this,"world");y(this,"view");y(this,"loading");y(this,"status");y(this,"stage");y(this,"picker");y(this,"applied",0);y(this,"sent",0);y(this,"liveStatus");y(this,"viewport");y(this,"stopListening");y(this,"realSensors");y(this,"controls",{getBrightness:50,getLoudness:0,getPitch:0,getRoll:0});y(this,"pressTimers",new Map);y(this,"check");y(this,"checking",!1);y(this,"onWorldChange");this.world=new xs(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${NL()}${FL()}`,this.stage=this.element.querySelector(".visubot-stage"),this.picker=this.element.querySelector(".visubot-worlds"),this.status=this.element.querySelector(".visubot-status"),this.liveStatus=this.element.querySelector(".visubot-live"),this.viewport=this.element.querySelector(".visubot-viewport"),this.stopListening=pe.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=K(async()=>{const{Robot3D:e}=await import("./robot3d-DurEjQ1B.js");return{Robot3D:e}},[],import.meta.url).then(({Robot3D:e})=>{this.view=new e(this.stage),this.view.setWorld(this.world.setup),this.view.place(this.world.pose,this.world.trail),this.view.setLeds(this.world.leds)}).catch(()=>{this.stage.textContent=p("web_visubot_no_3d")}))}restoreViewport(){this.viewport.parentElement!==this.element&&this.liveStatus.after(this.viewport)}setWorlds(e){this.picker.replaceChildren(),this.picker.hidden=e.length<2,e.forEach((t,n)=>{const a=document.createElement("button");a.textContent=p("web_visubot_world_fmt",n+1),a.addEventListener("click",()=>this.useWorld(t,a)),this.picker.append(a)}),this.useWorld(e[0]??ji,this.picker.firstElementChild)}useWorld(e,t){var n,a,s,r,o;for(const l of this.picker.children)l.classList.toggle("active",l===t);e!==this.world.setup&&(this.world=new xs(e),this.applied=0,this.sent=0,(n=this.view)==null||n.setWorld(e),(a=this.view)==null||a.place(this.world.pose,this.world.trail),(s=this.view)==null||s.setLed(void 0),(r=this.view)==null||r.setScreen(void 0),this.updateStatus(),(o=this.onWorldChange)==null||o.call(this))}reset(){var e,t,n;this.world.reset(),this.applied=0,this.sent=0,this.realSensors=void 0,(e=this.view)==null||e.place(this.world.pose,this.world.trail),(t=this.view)==null||t.setLed(void 0),(n=this.view)==null||n.setScreen(void 0),this.updateStatus()}prepare(e){e.robotSensors={...this.controls,...this.world.sensors()}}setupControls(){for(const e of this.element.querySelectorAll(".visubot-controls input[type=range]")){const t=e.parentElement.querySelector("output"),n=()=>{this.controls[e.name]=Number(e.value),t.textContent=e.value};e.addEventListener("input",n),n()}for(const e of this.element.querySelectorAll(".visubot-controls button[name]"))e.addEventListener("click",()=>{const t=e.name;this.controls[t]=!0,e.classList.add("pressed"),window.clearTimeout(this.pressTimers.get(t)),this.pressTimers.set(t,window.setTimeout(()=>{this.controls[t]=!1,e.classList.remove("pressed")},1e3))})}setupCheck(){for(const e of this.check.querySelectorAll("button[data-py]"))e.addEventListener("click",()=>{const{after:t,wait:n}=e.dataset;pe.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>pe.run(t)):void 0).catch(a=>this.liveFailed(a))});this.check.addEventListener("toggle",()=>void this.readCheck())}async readCheck(){if(!this.checking){this.checking=!0;try{for(;this.check.open&&pe.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!pe.connected)break;const t=e.dataset.sensor,n=await pe.ask(Ct[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof Ct[t].simulated=="boolean"?n===!0||typeof n=="number"&&n!==0?"✓":"–":String(typeof n=="number"?Math.round(n*10)/10:n))}await new Promise(e=>setTimeout(e,200))}}finally{this.checking=!1}}}get live(){return pe.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await pe.ask(Ct[a].python);typeof Ct[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof Ct[a].simulated=="string"?n[a]=typeof s=="string"?s:String(Ct[a].simulated):n[a]=typeof s=="number"?a==="getDistance"?Math.round(s):s:0}this.realSensors=n,e.robotSensors={...this.controls,...this.world.sensors(),...n}}async drive(e){for(;this.sentsetTimeout(n,t.args[0]))}}liveFailed(e){pe.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=Cg(),this.liveStatus.classList.toggle("connected",pe.connected),this.check.hidden=!pe.connected,pe.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(m0),n&&((o=this.view)==null||o.moveTo(this.world.pose,this.world.trail,t)),this.updateStatus()}dispose(){var e;this.stopListening();for(const t of this.pressTimers.values())window.clearTimeout(t);(e=this.view)==null||e.dispose(),this.view=void 0,this.loading=void 0}updateStatus(){const e=this.world.lineState().toString(2).padStart(4,"0"),t=[`${p("web_visubot_distance")}: ${this.world.distance()} cm`,`${p("web_visubot_line")}: ${e}`];this.world.bumps>0&&t.push(`⚠︎ ${p("web_visubot_bumps")}: ${this.world.bumps}`),this.world.screen!==void 0&&t.push(`📺 ${this.world.screen}`),this.realSensors&&pe.connected&&t.push(`🤖 ${p("web_visubot_distance")}: ${this.realSensors.getDistance} cm · ${p("web_visubot_line")}: ${Number(this.realSensors.getLine).toString(2).padStart(4,"0")}`),this.status.textContent=t.join(" · ")}}let $1;function jg(i,e){try{$1??($1=new AudioContext);const t=$1.createOscillator(),n=$1.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect($1.destination);const a=$1.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function NL(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")} +>>>>>>>> 0a47d98 (Web 0.14.16: Groß- und Kleinschreibung, Übungen „Warum läuft das nicht?“, Glühbirne für Schreibweise):website/app/assets/index-D-WVwkMk.js

${p("web_visubot_controls_hint")}

${i("getBrightness","web_visubot_sensor_brightness",0,100,50)} ${i("getLoudness","web_visubot_sensor_loudness",0,100,0)} @@ -64722,45 +67240,45 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis ${e("isJoystickLeft","←","web_visubot_sensor_joy_left")}${e("isJoystickRight","→","web_visubot_sensor_joy_right")} ${e("isShaken",`〰 ${p("web_visubot_shake")}`,"web_visubot_sensor_shake")}
- `}function KZ(){const i=a=>a.replace(/"/g,"""),e=(a,s,r,o=1e3)=>``,t="mbot2.EM_stop('ALL')",n=jg.map(a=>`${p(a.key)}…`).join("");return``}function FL(){const i=a=>a.replace(/"/g,"""),e=(a,s,r,o=1e3)=>``,t="mbot2.EM_stop('ALL')",n=Ag.map(a=>`${p(a.key)}…`).join("");return``}function Ag(){return pe.connecting?p("web_visubot_connecting"):pe.connected?`✓ ${p("web_visubot_connected")}`:pe.error?`⚠︎ ${p("web_visubot_link_error")}: ${pe.error}`:""}async function eB(){if(pe.connected||pe.connecting)return pe.disconnect();try{await pe.connect()}catch(i){await pe.disconnect(i.name==="NotFoundError"?void 0:i.message)}}const ht=i=>()=>Ce(S.anweisung,{textLines:[i]}),tB=[{key:"web_visubot_el_forward",group:"drive",type:S.anweisung,make:ht("mbot.forward()")},{key:"web_visubot_el_backward",group:"drive",type:S.anweisung,make:ht("mbot.backward()")},{key:"web_visubot_el_right",group:"drive",type:S.anweisung,make:ht("mbot.turnRight()")},{key:"web_visubot_el_left",group:"drive",type:S.anweisung,make:ht("mbot.turnLeft()")},{key:"web_visubot_el_drive",group:"wheels",type:S.anweisung,make:ht("mbot.drive(30, 30)")},{key:"web_visubot_el_stop",group:"wheels",type:S.anweisung,make:ht("mbot.stop()")},{key:"web_visubot_el_led",group:"output",type:S.anweisung,make:ht("mbot.setLed(255, 0, 0)")},{key:"web_visubot_el_led_off",group:"output",type:S.anweisung,make:ht("mbot.ledOff()")},{key:"web_visubot_el_led_color",group:"output",type:S.anweisung,make:ht('mbot.led(0).setColor("grün")')},{key:"web_visubot_el_tone",group:"output",type:S.anweisung,make:ht("mbot.playTone(440, 300)")},{key:"web_visubot_el_text",group:"output",type:S.anweisung,make:ht('mbot.showText("Hallo")')},{key:"web_visubot_el_wait",group:"wait",type:S.anweisung,make:ht("mbot.pause(100)")},{key:"web_visubot_el_emotion",group:"emotion",type:S.anweisung,make:ht('mbot.emotion("smile")')},{key:"web_visubot_el_timer",group:"wait",type:S.anweisung,make:ht("mbot.resetTimer()")}],jg=[{key:"web_visubot_sensor_distance",group:"distance",text:"mbot.getDistance()"},{key:"web_visubot_sensor_line",group:"line",text:"mbot.getLine()"},{key:"web_visubot_sensor_line_left",group:"line",text:"mbot.isLineLeft()"},{key:"web_visubot_sensor_line_right",group:"line",text:"mbot.isLineRight()"},{key:"web_visubot_sensor_color",group:"color",get text(){return`mbot.getColor().equals("${wh("red")}")`}},{key:"web_visubot_sensor_button_a",group:"buttons",text:"mbot.isButtonA()"},{key:"web_visubot_sensor_button_b",group:"buttons",text:"mbot.isButtonB()"},{key:"web_visubot_sensor_joy_up",group:"buttons",text:"mbot.isJoystickUp()"},{key:"web_visubot_sensor_joy_down",group:"buttons",text:"mbot.isJoystickDown()"},{key:"web_visubot_sensor_joy_left",group:"buttons",text:"mbot.isJoystickLeft()"},{key:"web_visubot_sensor_joy_right",group:"buttons",text:"mbot.isJoystickRight()"},{key:"web_visubot_sensor_brightness",group:"light",text:"mbot.getBrightness()"},{key:"web_visubot_sensor_loudness",group:"light",text:"mbot.getLoudness()"},{key:"web_visubot_sensor_pitch",group:"tilt",text:"mbot.getPitch()"},{key:"web_visubot_sensor_roll",group:"tilt",text:"mbot.getRoll()"},{key:"web_visubot_sensor_shake",group:"tilt",text:"mbot.isShaken()"},{key:"web_visubot_sensor_timer",group:"timer",text:"mbot.getTimer()"},{key:"web_visubot_sensor_battery",group:"timer",text:"mbot.getBattery()"}],ha=()=>typeof window.showDirectoryPicker=="function";class nr{constructor(e){this.handle=e}get name(){return this.handle.name}async list(){const e=[];for await(const t of this.handle.values())t.name.startsWith(".")||e.push({kind:t.kind,name:t.name});return e}async dir(e,t=!1){return new nr(await this.handle.getDirectoryHandle(e,{create:t}))}async read(e){return(await(await this.handle.getFileHandle(e)).getFile()).text()}async write(e,t){const a=await(await this.handle.getFileHandle(e,{create:!0})).createWritable();await a.write(t),await a.close()}async has(e){try{return await this.handle.getFileHandle(e),!0}catch{try{return await this.handle.getDirectoryHandle(e),!0}catch{return!1}}}async remove(e){await this.handle.removeEntry(e,{recursive:!0})}}const nB="visustruct-workspace";function iB(){return new Promise((i,e)=>{const t=indexedDB.open(nB,1);t.onupgradeneeded=()=>{t.result.createObjectStore("files"),t.result.createObjectStore("meta")},t.onsuccess=()=>i(t.result),t.onerror=()=>e(t.error)})}async function _t(i,e,t){const n=await iB();return new Promise((a,s)=>{const r=t(n.transaction(i,e).objectStore(i));r.onsuccess=()=>a(r.result),r.onerror=()=>s(r.error)})}class f0{constructor(e,t){this.name=e,this.path=t}key(e){return this.path+e}async list(){const e=await _t("files","readonly",n=>n.getAllKeys()),t=new Map;for(const n of e){if(!n.startsWith(this.path)||n===this.path)continue;const a=n.slice(this.path.length),s=a.indexOf("/"),r=s<0?a:a.slice(0,s);t.has(r)||t.set(r,{kind:s<0?"file":"directory",name:r})}return[...t.values()]}async dir(e,t=!1){const n=this.key(e)+"/";if(!(await _t("files","readonly",s=>s.count(n))>0)){if(!t)throw new DOMException(e,"NotFoundError");await _t("files","readwrite",s=>s.put("",n))}return new f0(e,n)}async read(e){const t=await _t("files","readonly",n=>n.get(this.key(e)));if(typeof t!="string")throw new DOMException(e,"NotFoundError");return t}async write(e,t){await _t("files","readwrite",n=>n.put(t,this.key(e)))}async has(e){const t=await _t("files","readonly",a=>a.count(this.key(e))),n=await _t("files","readonly",a=>a.count(this.key(e)+"/"));return t+n>0}async remove(e){const t=this.key(e);await _t("files","readwrite",n=>n.delete(t)),await _t("files","readwrite",n=>n.delete(IDBKeyRange.bound(t+"/",t+"/￿")))}}async function aB(i,e="folder"){const t=await window.showDirectoryPicker({id:e==="folder"?"visustruct-workspace":e,mode:"readwrite"}),n=i&&t.name!==i?await t.getDirectoryHandle(i,{create:!0}):t;return await _t("meta","readwrite",a=>a.put(n,e)),{kind:"folder",root:new nr(n)}}function ym(){return{kind:"browser",root:new f0("VisuStruct","")}}async function sB(i="folder"){var e;try{const t=await _t("meta","readonly",a=>a.get(i));if(!t)return;const n=await((e=t.queryPermission)==null?void 0:e.call(t,{mode:"readwrite"}))??"granted";return{handle:t,ready:n==="granted"}}catch{return}}async function wm(i){var t;return(await((t=i.requestPermission)==null?void 0:t.call(i,{mode:"readwrite"}))??"granted")==="granted"?{kind:"folder",root:new nr(i)}:void 0}async function rB(i="folder"){try{await _t("meta","readwrite",e=>e.delete(i))}catch{}}const ga="learnProgress.json",pa="lernstand.json",fa="visustruct.files.mode",zm="visustruct.files.expanded";function oB(i){try{const e=JSON.parse(Og(i)??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}catch{return[]}}function Og(i){try{return localStorage.getItem(i)}catch{return null}}function ba(i,e){try{e===null?localStorage.removeItem(i):localStorage.setItem(i,e)}catch{}}const te=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Im(i){return new Promise(e=>{const t=document.createElement("div");t.className="confirm";const n=(i.choices??[]).map(o=>``).join("");t.innerHTML=``;const a=t.querySelector("form"),s=a.querySelector("input"),r=o=>{t.remove(),e(o)};a.addEventListener("submit",o=>{if(o.preventDefault(),!s)return r("");s.value.trim()?r(s.value):s.focus()}),t.addEventListener("click",o=>{var m;const l=o.target,u=(m=l.closest("[data-choice]"))==null?void 0:m.dataset.choice;u!==void 0?r(u):(l===t||l.closest("[data-cancel]"))&&r(void 0)}),t.addEventListener("keydown",o=>o.key==="Escape"&&r(void 0)),document.body.append(t),(s??a.querySelector("[data-cancel]")).focus()})}class lB{constructor(e){y(this,"element");y(this,"body");y(this,"workspace");y(this,"pending");y(this,"expanded",new Set(oB(zm)));y(this,"rendering",0);y(this,"progressWorkspace");y(this,"hadWorkspace",!1);y(this,"progressTimer");this.host=e,this.element=document.createElement("aside"),this.element.className="files",this.build(),be.onChange(()=>this.progressChanged()),this.restore()}rememberExpanded(){ba(zm,JSON.stringify([...this.expanded]))}get ready(){return!!this.workspace}build(){this.element.innerHTML=` + `;const a=t.querySelector("form"),s=a.querySelector("input"),r=o=>{t.remove(),e(o)};a.addEventListener("submit",o=>{if(o.preventDefault(),!s)return r("");s.value.trim()?r(s.value):s.focus()}),t.addEventListener("click",o=>{var m;const l=o.target,u=(m=l.closest("[data-choice]"))==null?void 0:m.dataset.choice;u!==void 0?r(u):(l===t||l.closest("[data-cancel]"))&&r(void 0)}),t.addEventListener("keydown",o=>o.key==="Escape"&&r(void 0)),document.body.append(t),(s??a.querySelector("[data-cancel]")).focus()})}class $L{constructor(e){y(this,"element");y(this,"body");y(this,"workspace");y(this,"pending");y(this,"expanded",new Set(UL(zm)));y(this,"rendering",0);y(this,"progressWorkspace");y(this,"hadWorkspace",!1);y(this,"progressTimer");this.host=e,this.element=document.createElement("aside"),this.element.className="files",this.build(),xe.onChange(()=>this.progressChanged()),this.restore()}rememberExpanded(){xa(zm,JSON.stringify([...this.expanded]))}get ready(){return!!this.workspace}build(){this.element.innerHTML=`

${te(p("web_files_title"))}

- +
- `,this.body=this.element.querySelector(".files-body");const e=(t,n)=>this.element.querySelector(`[data-files=${t}]`).addEventListener("click",n);e("hide",()=>this.host.hide()),e("new-folder",()=>void this.newFolder()),e("switch",()=>void this.switchWorkspace()),this.body.addEventListener("click",t=>void this.onTreeClick(t)),this.render()}async restore(){if(Og(fa)==="browser")this.workspace=ym();else if(ha()){const e=await sB();e!=null&&e.ready?this.workspace=await wm(e.handle):this.pending=e==null?void 0:e.handle}await this.render(),this.workspace||this.startDialog()}async startDialog(){var r;const e=p("web_learn_start_folder"),t=(o,l,u=!1,m)=>`${m?`

${te(m)}

`:""}`,n=ha()?[this.pending?t("reconnect",`${se.open} ${te(p("web_learn_start_continue_fmt",this.pending.name))}`,!0):"",t("pick",`${se.open} ${te(p("web_learn_start_open"))}`,!this.pending),t("create",`${se.newFolder} ${te(p("web_learn_start_create_fmt",e))}`,!1,p("web_learn_start_create_hint"))]:[t("browser",te(p("web_files_browser")),!0,p("web_files_browser_hint"))],a=document.createElement("div");a.className="confirm",a.innerHTML=``)}}};try{await a(t.root,"",0)}catch(o){n.push(`

${te(o.message)}

`)}if(e!==this.rendering)return;const s=t.kind==="folder"?`📁 ${te(t.root.name)}`:te(p("web_files_in_browser")),r=p("web_files_save_hint_fmt",Bu());this.body.innerHTML=`

${s}

${n.join("")||`

${te(p("web_files_empty"))}

`}

${te(r)}

@@ -64768,38 +67286,38 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis `:ha()?`

${te(p("web_files_connect_hint"))}

`:`

${te(p("web_files_browser_hint"))}

- `}async onTreeClick(e){var r;const t=e.target,n=(r=t.closest("[data-start]"))==null?void 0:r.dataset.start;if(n==="pick")return this.connectFolder();if(n==="reconnect")return this.reconnect();if(n==="browser")return this.useBrowser();const a=t.closest(".files-row");if(!a||!this.workspace)return;const s=a.dataset.path;if(t.closest(".files-delete"))return this.remove(a);if(a.dataset.kind==="dir")return this.expanded.has(s)?this.expanded.delete(s):this.expanded.add(s),this.rememberExpanded(),this.render();if(a.dataset.kind==="program")return this.openProgram(s)}async locate(e){const t=e.split("/");let n=this.workspace.root;for(const a of t.slice(0,-1))n=await n.dir(a);return{dir:n,name:t.at(-1)}}async openProgram(e){try{const{dir:t,name:n}=await this.locate(e),a=n.replace(/\.(visustruct|java)$/i,""),s=await t.has(`${a}.visustruct`)?await t.read(`${a}.visustruct`):void 0,r=await t.has(`${a}.java`)?await t.read(`${a}.java`):void 0;if(s===void 0&&r===void 0)return;const o={dir:t,base:a,path:e.replace(/\.(visustruct|java)$/i,"")};this.host.open(s??"",o,r)}catch(t){this.host.message(t.message)}}async remove(e){const t=e.dataset.path,n=e.dataset.kind==="program",a=n?t.replace(/\.(visustruct|java)$/i,""):t;if(await Im({title:p("web_files_delete_confirm_fmt",a),ok:p("web_files_delete"),danger:!0})!==void 0){try{const{dir:s,name:r}=await this.locate(t);if(n){const o=r.replace(/\.(visustruct|java)$/i,"");for(const l of[".visustruct",".java"])await s.has(o+l)&&await s.remove(o+l)}else await s.remove(r)}catch(s){this.host.message(s.message)}await this.render()}}async newFolder(){if(!this.workspace)return;const e=ix(await Im({title:p("web_files_folder_prompt"),input:"",ok:p("web_files_create")})??"");if(e){try{await this.workspace.root.dir(e,!0)}catch(t){this.host.message(t.message)}await this.render()}}async save(e,t,n,a){const s=this.workspace;if(!s)return;let r=a;if(!r){const o=Zu(),l=await s.root.dir(o,!0),u=nx(tx(e,p("web_files_default_name")),(await l.list()).map(m=>m.name));r={dir:l,base:u,path:`${o}/${u}`},this.expanded.add(o),this.rememberExpanded()}return await r.dir.write(`${r.base}.visustruct`,t),n!==void 0&&await r.dir.write(`${r.base}.java`,n),await this.render(),r}}const Pg=["boolean","int","double","String","char","long","float","short","byte"],uB=new Set([...Pg,"Boolean","Integer","Double","Character","Long","Float","Short","Byte","var","void"]);function mB(i){if(uB.has(i))return;const e=i.toLowerCase();for(const t of Pg)if(cB(e,t.toLowerCase())<=(t.length>=6?2:1))return t}function cB(i,e){const t=Array.from({length:i.length+1},(n,a)=>Array.from({length:e.length+1},(s,r)=>a===0?r:r===0?a:0));for(let n=1;n<=i.length;n++)for(let a=1;a<=e.length;a++){const s=i[n-1]===e[a-1]?0:1;t[n][a]=Math.min(t[n-1][a]+1,t[n][a-1]+1,t[n-1][a-1]+s),n>1&&a>1&&i[n-1]===e[a-2]&&i[n-2]===e[a-1]&&(t[n][a]=Math.min(t[n][a],t[n-2][a-2]+1))}return t[i.length][e.length]}const dB=[">>>=","<<=",">>=",">>>","->","::","++","--","==","!=","<=",">=","&&","||","+=","-=","*=","/=","%=","&=","|=","^=","<<"];function hB(i,e){const t=[];let n=0,a=0;const s=(r,o,l,u)=>t.push({kind:r,text:i.slice(o,l),start:o,end:l,line:u});for(;n${te(p("web_files_browser"))}`}async onTreeClick(e){var r;const t=e.target,n=(r=t.closest("[data-start]"))==null?void 0:r.dataset.start;if(n==="pick")return this.connectFolder();if(n==="reconnect")return this.reconnect();if(n==="browser")return this.useBrowser();const a=t.closest(".files-row");if(!a||!this.workspace)return;const s=a.dataset.path;if(t.closest(".files-delete"))return this.remove(a);if(a.dataset.kind==="dir")return this.expanded.has(s)?this.expanded.delete(s):this.expanded.add(s),this.rememberExpanded(),this.render();if(a.dataset.kind==="program")return this.openProgram(s)}async locate(e){const t=e.split("/");let n=this.workspace.root;for(const a of t.slice(0,-1))n=await n.dir(a);return{dir:n,name:t.at(-1)}}async openProgram(e){try{const{dir:t,name:n}=await this.locate(e),a=n.replace(/\.(visustruct|java)$/i,""),s=await t.has(`${a}.visustruct`)?await t.read(`${a}.visustruct`):void 0,r=await t.has(`${a}.java`)?await t.read(`${a}.java`):void 0;if(s===void 0&&r===void 0)return;const o={dir:t,base:a,path:e.replace(/\.(visustruct|java)$/i,"")};this.host.open(s??"",o,r)}catch(t){this.host.message(t.message)}}async remove(e){const t=e.dataset.path,n=e.dataset.kind==="program",a=n?t.replace(/\.(visustruct|java)$/i,""):t;if(await Im({title:p("web_files_delete_confirm_fmt",a),ok:p("web_files_delete"),danger:!0})!==void 0){try{const{dir:s,name:r}=await this.locate(t);if(n){const o=r.replace(/\.(visustruct|java)$/i,"");for(const l of[".visustruct",".java"])await s.has(o+l)&&await s.remove(o+l)}else await s.remove(r)}catch(s){this.host.message(s.message)}await this.render()}}async newFolder(){if(!this.workspace)return;const e=ib(await Im({title:p("web_files_folder_prompt"),input:"",ok:p("web_files_create")})??"");if(e){try{await this.workspace.root.dir(e,!0)}catch(t){this.host.message(t.message)}await this.render()}}async save(e,t,n,a){const s=this.workspace;if(!s)return;let r=a;if(!r){const o=Bu(),l=await s.root.dir(o,!0),u=nb(tb(e,p("web_files_default_name")),(await l.list()).map(m=>m.name));r={dir:l,base:u,path:`${o}/${u}`},this.expanded.add(o),this.rememberExpanded()}return await r.dir.write(`${r.base}.visustruct`,t),n!==void 0&&await r.dir.write(`${r.base}.java`,n),await this.render(),r}}const Og=["boolean","int","double","String","char","long","float","short","byte"],YL=new Set([...Og,"Boolean","Integer","Double","Character","Long","Float","Short","Byte","var","void"]);function XL(i){if(YL.has(i))return;const e=i.toLowerCase();for(const t of Og)if(KL(e,t.toLowerCase())<=(t.length>=6?2:1))return t}function KL(i,e){const t=Array.from({length:i.length+1},(n,a)=>Array.from({length:e.length+1},(s,r)=>a===0?r:r===0?a:0));for(let n=1;n<=i.length;n++)for(let a=1;a<=e.length;a++){const s=i[n-1]===e[a-1]?0:1;t[n][a]=Math.min(t[n-1][a]+1,t[n][a-1]+1,t[n-1][a-1]+s),n>1&&a>1&&i[n-1]===e[a-2]&&i[n-2]===e[a-1]&&(t[n][a]=Math.min(t[n][a],t[n-2][a-2]+1))}return t[i.length][e.length]}const eW=[">>>=","<<=",">>=",">>>","->","::","++","--","==","!=","<=",">=","&&","||","+=","-=","*=","/=","%=","&=","|=","^=","<<"];function tW(i,e){const t=[];let n=0,a=0;const s=(r,o,l,u)=>t.push({kind:r,text:i.slice(o,l),start:o,end:l,line:u});for(;ni.startsWith(d,n))??r;n+=c.length,s("op",o,n,l)}return t}const jr=new Set(["if","else","for","while","do","switch","case","default","break","return","try"]),Or=new Set(["public","private","protected","static","final","abstract"]),km="(?:int|long|short|byte|float|double|boolean|char|String)";let gB=class{constructor(e,t,n){y(this,"toks");y(this,"comments");y(this,"i",0);y(this,"problems",[]);y(this,"placeholders",[]);y(this,"lines",new Map);y(this,"className");y(this,"imports",[]);y(this,"fileScanners",new Set);this.src=e,this.labels=t,this.opts=n;const a=hB(e,this.problems);this.toks=a.filter(s=>s.kind!=="comment"),this.comments=a.filter(s=>s.kind==="comment")}get tok(){return this.toks[this.i]}is(e,t=this.tok){return t!==void 0&&t.text===e&&t.kind!=="str"}next(){return this.toks[this.i++]}eat(e){return this.is(e)?this.next():void 0}prev(){return this.toks[this.i-1]}problem(e,t,n){const a=t??{start:this.src.length,end:this.src.length};this.problems.push({from:a.start,to:Math.max(a.end,a.start+1),key:e,arg:n})}missingAfter(e,t){const n=e?e.end:this.src.length;this.problems.push({from:Math.max(0,n-1),to:n,key:"web_parse_missing",arg:t})}text(e,t){let n="",a=e;for(const s of this.comments)s.end<=e||s.start>=t||(n+=this.src.slice(a,Math.max(a,s.start)),a=Math.max(a,s.end));return n+=this.src.slice(a,Math.max(a,t)),n.replace(/\s*\n\s*/g," ").trim()}slot(e,t,n){const a=this.text(e,t);if(a===n){const s=this.src.indexOf(n,e);return s>=0&&this.placeholders.push({from:s,to:s+n.length}),""}return a}record(e,t,n){return this.lines.set(e,[t,n]),{element:e,from:t,to:n}}lineOf(e){var t;return(e==null?void 0:e.line)??((t=this.toks[this.toks.length-1])==null?void 0:t.line)??0}checkImports(){const e=["File","PrintWriter","FileReader","FileWriter","BufferedReader","IOException","FileNotFoundException"].map(t=>[t,"java.io"]);for(const[t,n]of[["Scanner","java.util"],["Files","java.nio.file"],["Path","java.nio.file"],["Paths","java.nio.file"],...e]){const a=this.imports.some(r=>r===`import${n}.${t};`||r===`import${n}.*;`),s=this.toks.find((r,o)=>{var l;return r.kind==="id"&&r.text===t&&(n!=="java.nio.file"||((l=this.toks[o+1])==null?void 0:l.text)===".")});if(!a&&s){this.problem("web_parse_missing_import",s,n==="java.util"?`import ${n}.${t};`:`import ${n}.*;`);return}}}checkScanners(){var n;const e=new Set(["next","nextInt","nextDouble","nextLine","nextBoolean","nextLong","nextFloat","hasNext","hasNextInt","hasNextLine","hasNextDouble"]),t=a=>this.toks.some((s,r)=>{const o=this.toks[r-1];return s.kind==="id"&&s.text===a&&!!o&&(o.kind==="id"&&!jr.has(o.text)&&o.text!=="new"||o.text===">"||o.text==="]")});for(let a=0;a{var s;return((s=this.toks[a-1])==null?void 0:s.text)==="class"}).map(n=>n.text));for(let n=0;no.text).join(""));continue}const a=this.classStart();if(a!==void 0){this.className??(this.className=a.name),this.i=a.index;const r=this.parseClassBody();e.push(...r.elements),t??(t=r.caption);continue}const s=this.methodStart();if(s){n&&this.problem("web_parse_more_methods",this.tok);const r=this.parseMethod(s);n||(t=s.caption,e.push(...r)),n=!0;continue}if(this.is("}")){this.problem("web_parse_extra",this.next(),"}");continue}e.push(...this.parseStatement())}return{caption:t,elements:this.finishList(e)}}skipPast(e){for(;this.tok&&!this.is(e);)this.next();this.eat(e)}classStart(){var n,a;let e=this.i;for(;this.toks[e]&&Or.has(this.toks[e].text);)e++;if(((n=this.toks[e])==null?void 0:n.text)!=="class"||((a=this.toks[e+1])==null?void 0:a.kind)!=="id")return;const t=this.toks[e+1].text;for(e+=2;this.toks[e]&&this.toks[e].text!=="{";)e++;return{name:t,index:e+1}}parseClassBody(){let e,t,n=!1;const a=[];for(;this.tok&&!this.is("}");){const s=this.methodStart();if(!s){this.is("{")?a.push(...this.parseBlock().elements):a.push(...this.parseStatement());continue}const r=this.tok,o=this.parseMethod(s);s.name==="main"?e??(e=o):t?n=!0:t={caption:s.caption,body:o},(e&&t||n)&&this.problem("web_parse_more_methods",r)}return this.eat("}"),e?{elements:e}:a.length>0||!t?{elements:a}:{caption:t.caption,elements:t.body}}methodStart(){var g,f,b,x,v,w,z,I,k,T,C;let e=this.i,t=0;for(;this.toks[e]&&Or.has(this.toks[e].text);)e++,t++;const n=this.toks[e];if((n==null?void 0:n.kind)!=="id"||jr.has(n.text)||n.text==="new")return;for(e++;((g=this.toks[e])==null?void 0:g.text)==="["&&((f=this.toks[e+1])==null?void 0:f.text)==="]";)e+=2;const a=this.toks[e];if((a==null?void 0:a.kind)!=="id"||((b=this.toks[e+1])==null?void 0:b.text)!=="(")return;let s=0,r=e+1;for(;this.toks[r];r++){const M=this.toks[r].text;if(M==="(")s++;else{if(M===")"&&--s===0)break;if(M===";"||M==="{"||M==="}")break}}let o=r+1;if(((x=this.toks[r])==null?void 0:x.text)===")"&&((v=this.toks[o])==null?void 0:v.text)==="throws")for(o++;((w=this.toks[o])==null?void 0:w.kind)==="id"&&(((z=this.toks[o+1])==null?void 0:z.text)===","||((I=this.toks[o+1])==null?void 0:I.text)==="{"||((k=this.toks[o+1])==null?void 0:k.text)===".");)o+=this.toks[o+1].text==="{"?1:2;const l=this.toks[o],u=((T=this.toks[r])==null?void 0:T.text)===")"&&(l==null?void 0:l.text)==="{";if(!u&&!(t>0&&(l===void 0||this.toks[r]===void 0)))return;const m=((C=this.toks[r])==null?void 0:C.text)===")"?this.toks[r].start:this.src.length,c=this.text(this.toks[e+1].end,m),h=`${this.text(n.start,this.toks[e-1].end).replace(/\s+/g,"")} ${a.text}(${c.replace(/\s*,\s*/g,", ")})`;return this.i=Math.min(u?o:r+1,this.toks.length),{name:a.text,caption:a.text==="main"||!It(h)?void 0:h}}parseMethod(e){return this.is("{")?this.parseBlock().elements:(this.missingAfter(this.prev(),"{"),[])}parseBlock(){const e=this.next(),t=[];for(;this.tok&&!this.is("}")&&!(this.is("case")||this.is("default"));)t.push(...this.parseStatement());const n=this.eat("}");if(n||this.problem("web_parse_missing",e,"}"),t.length===0){const a=(n==null?void 0:n.start)??this.src.length,s=this.comments.find(r=>r.start>e.end&&r.startn.element)}parseStatement(){const e=this.tok;switch(e.kind==="id"?e.text:""){case"if":return[this.parseIf()];case"while":return[this.parseWhile()];case"do":return[this.parseDo()];case"for":return[this.parseFor()];case"switch":return[this.parseSwitch()];case"try":return this.parseTry();case"break":{this.next();const t=this.eat(";");t||this.missingAfter(e,";");const n=this.trailingComment(t??e);return[this.record(Ce(S.aussprung,{textLines:[n]}),e.line,e.line)]}case"else":return this.problem("web_parse_else_without_if",this.next()),[];case"case":case"default":for(this.problem("web_parse_case_outside_switch",this.next());this.tok&&!this.is(":")&&!this.is("->")&&!this.is(";");)this.next();return this.next(),[]}return this.is("{")?this.parseBlock().elements:this.is(";")?(this.next(),[this.record(Ce(S.anweisung),e.line,e.line)]):this.parseSimple()}parseTry(){const e=this.next();let t=e;const n=(r,o)=>{t=this.next();let u=1;for(;this.tok;){const m=this.next();if(t=m,m.kind!=="str"){if(m.text===r)u++;else if(m.text===o&&--u===0)return!0}}return this.missingAfter(t,o),!1};let a=!0;for(this.is("(")&&(a=n("(",")")),a&&this.is("{")?a=n("{","}"):a&&this.missingAfter(t,"{");a&&(this.is("catch")||this.is("finally"));){const r=this.next().text==="catch";t=this.prev(),r&&(this.is("(")?a=n("(",")"):this.missingAfter(t,"(")),a&&this.is("{")?a=n("{","}"):a&&this.missingAfter(t,"{")}const s=this.text(e.start,t.end).replace(/\s+/g," ");return[this.record(Ce(S.anweisung,{textLines:[s]}),e.line,t.line)]}trailingComment(e){const t=this.comments.find(a=>a.start>=e.end&&a.line===e.line),n=this.toks.find(a=>a.start>=e.end);return!t||n&&n.start1;)m.push("");const c=this.parseBody();return this.record(Ce(S.forSchleife,{textLines:m,loopBody:c.elements}),e.line,c.end)}parseSwitch(){const e=this.next(),t=this.parenthesized(e,this.labels.selector),n=[];let a=this.lineOf(this.prev());const s=this.eat("{");if(!s)this.missingAfter(this.prev(),"{");else{for(;this.tok&&!this.is("}");){if(!this.is("case")&&!this.is("default")){this.problem("web_parse_case_outside_switch",this.tok),this.parseStatement();continue}n.push(this.parseCase())}const o=this.eat("}");o||this.problem("web_parse_missing",s,"}"),a=this.lineOf(o??this.prev())}n.some(o=>o.isDefault)||n.push({name:"default",elements:[nn()],isDefault:!0});const r=[...n.filter(o=>!o.isDefault),...n.filter(o=>o.isDefault)].map(({name:o,elements:l})=>({name:o,elements:l}));return this.record(Ce(S.fallauswahl,{textLines:[t.text],cases:r}),e.line,a)}parseCase(){var l;const e=this.next(),t=e.text==="default",n=((l=this.tok)==null?void 0:l.start)??e.end;let a=n;for(;this.tok&&!this.is("->")&&!this.is(":")&&!this.is("{")&&!this.is("}");)a=this.next().end;const s=this.eat("->")??this.eat(":");s||this.missingAfter(this.prev(),"->");let r=t?"default":this.text(n,a),o=[];if((s==null?void 0:s.text)==="->")this.is("{")?(t&&(r=this.trailingComment(this.tok)||r),o=this.parseBlock().elements):this.tok&&!this.is("}")&&(o=this.parseStatement());else{for(t&&s&&(r=this.trailingComment(s)||r);this.tok&&!this.is("case")&&!this.is("default")&&!this.is("}");)o.push(...this.parseStatement());const u=o[o.length-1];(u==null?void 0:u.element.type)===S.aussprung&&u.element.textLines.every(m=>m==="")&&o.pop()}return{name:r,elements:this.finishList(o),isDefault:t}}parseSimple(){const e=this.next();let t=e;const n=e.text==="("||e.text==="["||e.text==="{"?[e.text]:[],a=()=>n.length>0&&n[n.length-1]==="{"&&e.text!=="{";let s;for(;this.tok;){const u=this.tok;if(u.text===";"&&u.kind==="op"&&!a()){s=this.next();break}if(u.line!==t.line&&!a()&&(n.length===0||u.kind==="id"&&jr.has(u.text)||u.text==="}")||u.text==="}"&&n.length===0)break;(u.text==="("||u.text==="["||u.text==="{")&&n.push(u.text),(u.text===")"||u.text==="]"||u.text==="}")&&n.pop(),t=this.next()}s||this.missingAfter(t,";"),this.checkBrackets(e,t);const r=this.text(e.start,t.end),o=this.simpleElement(r);if(!o)return[];const l=this.record(o.element,e.line,t.line);return l.prompt=o.prompt,[l]}checkBrackets(e,t){const n=[],a={")":"(","]":"[","}":"{"},s={"(":")","[":"]","{":"}"};for(let r=this.toks.indexOf(e);r>=0&&rCe(S.anweisung,{textLines:[u]}),a=/^System\.out\.println\s*\(([\s\S]*?)\)?$/.exec(e);if(a){const u=a[1].trim();if(u==="")return{element:n("output: ")};const m=/^"((?:[^"\\]|\\.)*)"$/.exec(u),c=m?pB(m[1]):void 0;return{element:n(`output: ${u}`),prompt:c!==void 0&&!c.includes('"')?c:void 0}}const s=new RegExp(`^(?:(${km})\\s+)?([A-Za-z_]\\w*(?:\\s*\\[[^\\]]+\\])*)\\s*=\\s*\\w+\\.(nextInt|nextDouble|nextLine|next|nextBoolean)\\s*\\(\\s*\\)$`).exec(e);if(s&&!this.fileScanners.has(e.replace(/^[\s\S]*=\s*(\w+)\.\w+\s*\(\s*\)$/,"$1"))){const u={nextInt:"int",nextDouble:"double",nextLine:"String",next:"String",nextBoolean:"boolean"}[s[3]],m=s[2].replace(/\s+/g,"");if((s[1]===u||!s[1]&&m.includes("["))&&u)return{element:n(`input: ${u} ${m}`)}}const r=new RegExp(`^final\\s+(${km}\\s+[\\s\\S]*)$`).exec(e);if(r)return{element:n(`const ${r[1]}`)};const o=/^(?:(?:\w+\s+)?\w+\s*=\s*)?([A-Za-z_]\w*)\s*\(/.exec(e);return o&&((l=this.opts.subprograms)!=null&&l.has(o[1]))?{element:Ce(S.aufruf,{textLines:[e]})}:{element:n(e)}}spansFor(e,t=[],n=[]){return e.forEach((a,s)=>{var l;const r=[...t,s],o=this.lines.get(a);o&&n.push({path:r,from:o[0],to:o[1]}),a.loopBody&&this.spansFor(a.loopBody,[...r,0],n),(l=a.cases)==null||l.forEach((u,m)=>this.spansFor(u.elements,[...r,m],n))}),n}isCodePlaceholder(e){return e.text.startsWith("//")&&e.text.slice(2).trim()===this.labels.code}markPlaceholderComments(){for(const e of this.comments)this.isCodePlaceholder(e)&&this.placeholders.push({from:e.start,to:e.end})}};function pB(i){return i.replace(/\\(.)/g,(e,t)=>({n:` -`,r:"\r",t:" "})[t]??t)}function Ro(i,e,t={}){const n=new gB(i,e,t),{caption:a,elements:s}=n.parseProgram();n.markPlaceholderComments(),n.checkImports(),n.checkScanners(),n.checkTypes();const r=n.spansFor(s),o=n.problems.sort((l,u)=>l.from-u.from);return{caption:a,className:n.className,elements:s,spans:r,placeholders:n.placeholders.sort((l,u)=>l.from-u.from),problems:o}}const b0={asClass:!1,withMain:!1},Sm=i=>/^import\s+[\w.]+(?:\.\*)?\s*;$/.test(i.trim()),Tm=i=>i.map(e=>e.trim()===""?"":" "+e);function Mg(i,e,t=b0){var u;const n=qh(i,"java",e);let a=n.text.replaceAll(Hi,"").replaceAll(r0,"").split(` -`),s=n.spans;const r=m=>s=s.map(c=>({...c,from:c.from+m,to:c.to+m})),o=It(i.caption)!==void 0,l=[];if(t.withMain&&!o||t.asClass){for(let m=a.findIndex(Sm);m>=0;m=a.findIndex(Sm))l.push(a[m].trim()),a.splice(m,1),s=s.map(c=>({...c,from:c.from>m?c.from-1:c.from,to:c.to>m?c.to-1:c.to}));l.length&&((u=a[0])==null?void 0:u.trim())===""&&(a.splice(0,1),s=s.map(m=>({...m,from:m.from>0?m.from-1:m.from,to:m.to>0?m.to-1:m.to}))),l.length&&l.push("")}return t.withMain&&!o&&(a=[`public static void main(String[] args)${jb(i)?" throws Exception":""} {`,...Tm(a),"}"],r(1)),t.asClass&&(a=[`public class ${Xs(o?"Main":i.caption)} {`,...Tm(a),"}"],r(1)),l.length&&(a=[...l,...a],r(l.length)),{text:a.join(` -`),spans:s}}function gi(i,e,t=b0){return Mg(i,e,t).text}function Pr(i){const e=Dg(i).code;return(e.trim()===""?i:e).replace(/\s+/g,"")}function Dg(i){let e="";for(let t=0;tnew Array(a+1).fill(0));for(let u=n-1;u>=0;u--)for(let m=a-1;m>=0;m--)s[u][m]=t(i[u],e[m])?s[u+1][m+1]+1:Math.max(s[u+1][m],s[u][m+1]);const r=[];let o=0,l=0;for(;o=s[o][l+1])?r.push({kind:"del",a:o++}):r.push({kind:"ins",b:l++});return r}function Cm(i,e,t,n,a={},s=b0){const r=gi(t,n,s),o=gi(e,n,s);if(i===o)return r;const l=o.split(` +`;)n+=i[n]==="\\"?2:1;i[n]===r?n++:e.push({from:o,to:Math.min(n,i.length),key:"web_parse_unclosed_string",arg:r}),s("str",o,Math.min(n,i.length),l);continue}const u=/^\d[\d_]*(?:\.\d+)?(?:[eE][+-]?\d+)?[lLfFdD]?/.exec(i.slice(n,n+64));if(u){n+=u[0].length,s("num",o,n,l);continue}const m=/^[\p{L}_$][\p{L}\p{N}_$]*/u.exec(i.slice(n,n+256));if(m){n+=m[0].length,s("id",o,n,l);continue}const c=eW.find(d=>i.startsWith(d,n))??r;n+=c.length,s("op",o,n,l)}return t}const ba=new Set(["if","else","for","while","do","switch","case","default","break","return","try"]),Pr=new Set(["public","private","protected","static","final","abstract"]),km="(?:int|long|short|byte|float|double|boolean|char|String)";let nW=class{constructor(e,t,n){y(this,"toks");y(this,"comments");y(this,"i",0);y(this,"problems",[]);y(this,"placeholders",[]);y(this,"lines",new Map);y(this,"className");y(this,"imports",[]);y(this,"fileScanners",new Set);this.src=e,this.labels=t,this.opts=n;const a=tW(e,this.problems);this.toks=a.filter(s=>s.kind!=="comment"),this.comments=a.filter(s=>s.kind==="comment")}get tok(){return this.toks[this.i]}is(e,t=this.tok){return t!==void 0&&t.text===e&&t.kind!=="str"}next(){return this.toks[this.i++]}eat(e){return this.is(e)?this.next():void 0}prev(){return this.toks[this.i-1]}problem(e,t,n){const a=t??{start:this.src.length,end:this.src.length};this.problems.push({from:a.start,to:Math.max(a.end,a.start+1),key:e,arg:n})}missingAfter(e,t){const n=e?e.end:this.src.length;this.problems.push({from:Math.max(0,n-1),to:n,key:"web_parse_missing",arg:t})}text(e,t){let n="",a=e;for(const s of this.comments)s.end<=e||s.start>=t||(n+=this.src.slice(a,Math.max(a,s.start)),a=Math.max(a,s.end));return n+=this.src.slice(a,Math.max(a,t)),n.replace(/\s*\n\s*/g," ").trim()}slot(e,t,n){const a=this.text(e,t);if(a===n){const s=this.src.indexOf(n,e);return s>=0&&this.placeholders.push({from:s,to:s+n.length}),""}return a}record(e,t,n){return this.lines.set(e,[t,n]),{element:e,from:t,to:n}}lineOf(e){var t;return(e==null?void 0:e.line)??((t=this.toks[this.toks.length-1])==null?void 0:t.line)??0}checkImports(){const e=["File","PrintWriter","FileReader","FileWriter","BufferedReader","IOException","FileNotFoundException"].map(t=>[t,"java.io"]);for(const[t,n]of[["Scanner","java.util"],["Files","java.nio.file"],["Path","java.nio.file"],["Paths","java.nio.file"],...e]){const a=this.imports.some(r=>r===`import${n}.${t};`||r===`import${n}.*;`),s=this.toks.find((r,o)=>{var l;return r.kind==="id"&&r.text===t&&(n!=="java.nio.file"||((l=this.toks[o+1])==null?void 0:l.text)===".")});if(!a&&s){this.problem("web_parse_missing_import",s,n==="java.util"?`import ${n}.${t};`:`import ${n}.*;`);return}}}checkScanners(){var n;const e=new Set(["next","nextInt","nextDouble","nextLine","nextBoolean","nextLong","nextFloat","hasNext","hasNextInt","hasNextLine","hasNextDouble"]),t=a=>this.toks.some((s,r)=>{const o=this.toks[r-1];return s.kind==="id"&&s.text===a&&!!o&&(o.kind==="id"&&!ba.has(o.text)&&o.text!=="new"||o.text===">"||o.text==="]")});for(let a=0;a{var s;return((s=this.toks[a-1])==null?void 0:s.text)==="class"}).map(n=>n.text));for(let n=0;nthis.toks.some((c,d)=>{var h;return c.text===m&&((h=this.toks[d-1])==null?void 0:h.kind)==="id"&&!ba.has(this.toks[d-1].text)}),n=["println","print","printf"],a=["length","charAt","substring","indexOf","equals","equalsIgnoreCase","compareTo","contains","startsWith","endsWith","toUpperCase","toLowerCase","trim","isEmpty","split","replace","sqrt","pow","abs","max","min","random","round","parseInt","parseDouble","nextInt","nextDouble","nextLine","next","hasNext","hasNextInt","hasNextLine"],s=(m,c)=>c.find(d=>d!==m&&d.toLowerCase()===m.toLowerCase());for(let m=0;mo.text).join(""));continue}const a=this.classStart();if(a!==void 0){this.className??(this.className=a.name),this.i=a.index;const r=this.parseClassBody();e.push(...r.elements),t??(t=r.caption);continue}const s=this.methodStart();if(s){n&&this.problem("web_parse_more_methods",this.tok);const r=this.parseMethod(s);n||(t=s.caption,e.push(...r)),n=!0;continue}if(this.is("}")){this.problem("web_parse_extra",this.next(),"}");continue}e.push(...this.parseStatement())}return{caption:t,elements:this.finishList(e)}}skipPast(e){for(;this.tok&&!this.is(e);)this.next();this.eat(e)}classStart(){var n,a;let e=this.i;for(;this.toks[e]&&Pr.has(this.toks[e].text);)e++;if(((n=this.toks[e])==null?void 0:n.text)!=="class"||((a=this.toks[e+1])==null?void 0:a.kind)!=="id")return;const t=this.toks[e+1].text;for(e+=2;this.toks[e]&&this.toks[e].text!=="{";)e++;return{name:t,index:e+1}}parseClassBody(){let e,t,n=!1;const a=[];for(;this.tok&&!this.is("}");){const s=this.methodStart();if(!s){this.is("{")?a.push(...this.parseBlock().elements):a.push(...this.parseStatement());continue}const r=this.tok,o=this.parseMethod(s);s.name==="main"?e??(e=o):t?n=!0:t={caption:s.caption,body:o},(e&&t||n)&&this.problem("web_parse_more_methods",r)}return this.eat("}"),e?{elements:e}:a.length>0||!t?{elements:a}:{caption:t.caption,elements:t.body}}methodStart(){var g,f,x,b,v,w,z,I,k,T,j;let e=this.i,t=0;for(;this.toks[e]&&Pr.has(this.toks[e].text);)e++,t++;const n=this.toks[e];if((n==null?void 0:n.kind)!=="id"||ba.has(n.text)||n.text==="new")return;for(e++;((g=this.toks[e])==null?void 0:g.text)==="["&&((f=this.toks[e+1])==null?void 0:f.text)==="]";)e+=2;const a=this.toks[e];if((a==null?void 0:a.kind)!=="id"||((x=this.toks[e+1])==null?void 0:x.text)!=="(")return;let s=0,r=e+1;for(;this.toks[r];r++){const D=this.toks[r].text;if(D==="(")s++;else{if(D===")"&&--s===0)break;if(D===";"||D==="{"||D==="}")break}}let o=r+1;if(((b=this.toks[r])==null?void 0:b.text)===")"&&((v=this.toks[o])==null?void 0:v.text)==="throws")for(o++;((w=this.toks[o])==null?void 0:w.kind)==="id"&&(((z=this.toks[o+1])==null?void 0:z.text)===","||((I=this.toks[o+1])==null?void 0:I.text)==="{"||((k=this.toks[o+1])==null?void 0:k.text)===".");)o+=this.toks[o+1].text==="{"?1:2;const l=this.toks[o],u=((T=this.toks[r])==null?void 0:T.text)===")"&&(l==null?void 0:l.text)==="{";if(!u&&!(t>0&&(l===void 0||this.toks[r]===void 0)))return;const m=((j=this.toks[r])==null?void 0:j.text)===")"?this.toks[r].start:this.src.length,c=this.text(this.toks[e+1].end,m),h=`${this.text(n.start,this.toks[e-1].end).replace(/\s+/g,"")} ${a.text}(${c.replace(/\s*,\s*/g,", ")})`;return this.i=Math.min(u?o:r+1,this.toks.length),{name:a.text,caption:a.text==="main"||!It(h)?void 0:h}}parseMethod(e){return this.is("{")?this.parseBlock().elements:(this.missingAfter(this.prev(),"{"),[])}parseBlock(){const e=this.next(),t=[];for(;this.tok&&!this.is("}")&&!(this.is("case")||this.is("default"));)t.push(...this.parseStatement());const n=this.eat("}");if(n||this.problem("web_parse_missing",e,"}"),t.length===0){const a=(n==null?void 0:n.start)??this.src.length,s=this.comments.find(r=>r.start>e.end&&r.startn.element)}parseStatement(){const e=this.tok;switch(e.kind==="id"?e.text:""){case"if":return[this.parseIf()];case"while":return[this.parseWhile()];case"do":return[this.parseDo()];case"for":return[this.parseFor()];case"switch":return[this.parseSwitch()];case"try":return this.parseTry();case"break":{this.next();const t=this.eat(";");t||this.missingAfter(e,";");const n=this.trailingComment(t??e);return[this.record(je(S.aussprung,{textLines:[n]}),e.line,e.line)]}case"else":return this.problem("web_parse_else_without_if",this.next()),[];case"case":case"default":for(this.problem("web_parse_case_outside_switch",this.next());this.tok&&!this.is(":")&&!this.is("->")&&!this.is(";");)this.next();return this.next(),[]}return this.is("{")?this.parseBlock().elements:this.is(";")?(this.next(),[this.record(je(S.anweisung),e.line,e.line)]):this.parseSimple()}parseTry(){const e=this.next();let t=e;const n=(r,o)=>{t=this.next();let u=1;for(;this.tok;){const m=this.next();if(t=m,m.kind!=="str"){if(m.text===r)u++;else if(m.text===o&&--u===0)return!0}}return this.missingAfter(t,o),!1};let a=!0;for(this.is("(")&&(a=n("(",")")),a&&this.is("{")?a=n("{","}"):a&&this.missingAfter(t,"{");a&&(this.is("catch")||this.is("finally"));){const r=this.next().text==="catch";t=this.prev(),r&&(this.is("(")?a=n("(",")"):this.missingAfter(t,"(")),a&&this.is("{")?a=n("{","}"):a&&this.missingAfter(t,"{")}const s=this.text(e.start,t.end).replace(/\s+/g," ");return[this.record(je(S.anweisung,{textLines:[s]}),e.line,t.line)]}trailingComment(e){const t=this.comments.find(a=>a.start>=e.end&&a.line===e.line),n=this.toks.find(a=>a.start>=e.end);return!t||n&&n.start1;)m.push("");const c=this.parseBody();return this.record(je(S.forSchleife,{textLines:m,loopBody:c.elements}),e.line,c.end)}parseSwitch(){const e=this.next(),t=this.parenthesized(e,this.labels.selector),n=[];let a=this.lineOf(this.prev());const s=this.eat("{");if(!s)this.missingAfter(this.prev(),"{");else{for(;this.tok&&!this.is("}");){if(!this.is("case")&&!this.is("default")){this.problem("web_parse_case_outside_switch",this.tok),this.parseStatement();continue}n.push(this.parseCase())}const o=this.eat("}");o||this.problem("web_parse_missing",s,"}"),a=this.lineOf(o??this.prev())}n.some(o=>o.isDefault)||n.push({name:"default",elements:[nn()],isDefault:!0});const r=[...n.filter(o=>!o.isDefault),...n.filter(o=>o.isDefault)].map(({name:o,elements:l})=>({name:o,elements:l}));return this.record(je(S.fallauswahl,{textLines:[t.text],cases:r}),e.line,a)}parseCase(){var l;const e=this.next(),t=e.text==="default",n=((l=this.tok)==null?void 0:l.start)??e.end;let a=n;for(;this.tok&&!this.is("->")&&!this.is(":")&&!this.is("{")&&!this.is("}");)a=this.next().end;const s=this.eat("->")??this.eat(":");s||this.missingAfter(this.prev(),"->");let r=t?"default":this.text(n,a),o=[];if((s==null?void 0:s.text)==="->")this.is("{")?(t&&(r=this.trailingComment(this.tok)||r),o=this.parseBlock().elements):this.tok&&!this.is("}")&&(o=this.parseStatement());else{for(t&&s&&(r=this.trailingComment(s)||r);this.tok&&!this.is("case")&&!this.is("default")&&!this.is("}");)o.push(...this.parseStatement());const u=o[o.length-1];(u==null?void 0:u.element.type)===S.aussprung&&u.element.textLines.every(m=>m==="")&&o.pop()}return{name:r,elements:this.finishList(o),isDefault:t}}parseSimple(){const e=this.next();let t=e;const n=e.text==="("||e.text==="["||e.text==="{"?[e.text]:[],a=()=>n.length>0&&n[n.length-1]==="{"&&e.text!=="{";let s;for(;this.tok;){const u=this.tok;if(u.text===";"&&u.kind==="op"&&!a()){s=this.next();break}if(u.line!==t.line&&!a()&&(n.length===0||u.kind==="id"&&ba.has(u.text)||u.text==="}")||u.text==="}"&&n.length===0)break;(u.text==="("||u.text==="["||u.text==="{")&&n.push(u.text),(u.text===")"||u.text==="]"||u.text==="}")&&n.pop(),t=this.next()}s||this.missingAfter(t,";"),this.checkBrackets(e,t);const r=this.text(e.start,t.end),o=this.simpleElement(r);if(!o)return[];const l=this.record(o.element,e.line,t.line);return l.prompt=o.prompt,[l]}checkBrackets(e,t){const n=[],a={")":"(","]":"[","}":"{"},s={"(":")","[":"]","{":"}"};for(let r=this.toks.indexOf(e);r>=0&&rje(S.anweisung,{textLines:[u]}),a=/^System\.out\.println\s*\(([\s\S]*?)\)?$/.exec(e);if(a){const u=a[1].trim();if(u==="")return{element:n("output: ")};const m=/^"((?:[^"\\]|\\.)*)"$/.exec(u),c=m?iW(m[1]):void 0;return{element:n(`output: ${u}`),prompt:c!==void 0&&!c.includes('"')?c:void 0}}const s=new RegExp(`^(?:(${km})\\s+)?([A-Za-z_]\\w*(?:\\s*\\[[^\\]]+\\])*)\\s*=\\s*\\w+\\.(nextInt|nextDouble|nextLine|next|nextBoolean)\\s*\\(\\s*\\)$`).exec(e);if(s&&!this.fileScanners.has(e.replace(/^[\s\S]*=\s*(\w+)\.\w+\s*\(\s*\)$/,"$1"))){const u={nextInt:"int",nextDouble:"double",nextLine:"String",next:"String",nextBoolean:"boolean"}[s[3]],m=s[2].replace(/\s+/g,"");if((s[1]===u||!s[1]&&m.includes("["))&&u)return{element:n(`input: ${u} ${m}`)}}const r=new RegExp(`^final\\s+(${km}\\s+[\\s\\S]*)$`).exec(e);if(r)return{element:n(`const ${r[1]}`)};const o=/^(?:(?:\w+\s+)?\w+\s*=\s*)?([A-Za-z_]\w*)\s*\(/.exec(e);return o&&((l=this.opts.subprograms)!=null&&l.has(o[1]))?{element:je(S.aufruf,{textLines:[e]})}:{element:n(e)}}spansFor(e,t=[],n=[]){return e.forEach((a,s)=>{var l;const r=[...t,s],o=this.lines.get(a);o&&n.push({path:r,from:o[0],to:o[1]}),a.loopBody&&this.spansFor(a.loopBody,[...r,0],n),(l=a.cases)==null||l.forEach((u,m)=>this.spansFor(u.elements,[...r,m],n))}),n}isCodePlaceholder(e){return e.text.startsWith("//")&&e.text.slice(2).trim()===this.labels.code}markPlaceholderComments(){for(const e of this.comments)this.isCodePlaceholder(e)&&this.placeholders.push({from:e.start,to:e.end})}};function iW(i){return i.replace(/\\(.)/g,(e,t)=>({n:` +`,r:"\r",t:" "})[t]??t)}function Ro(i,e,t={}){const n=new nW(i,e,t),{caption:a,elements:s}=n.parseProgram();n.markPlaceholderComments(),n.checkImports(),n.checkScanners(),n.checkTypes(),n.checkCase();const r=n.spansFor(s),o=n.problems.sort((l,u)=>l.from-u.from);return{caption:a,className:n.className,elements:s,spans:r,placeholders:n.placeholders.sort((l,u)=>l.from-u.from),problems:o}}const x0={asClass:!1,withMain:!1},Sm=i=>/^import\s+[\w.]+(?:\.\*)?\s*;$/.test(i.trim()),Tm=i=>i.map(e=>e.trim()===""?"":" "+e);function Dg(i,e,t=x0){var u;const n=qh(i,"java",e);let a=n.text.replaceAll(Hi,"").replaceAll(r0,"").split(` +`),s=n.spans;const r=m=>s=s.map(c=>({...c,from:c.from+m,to:c.to+m})),o=It(i.caption)!==void 0,l=[];if(t.withMain&&!o||t.asClass){for(let m=a.findIndex(Sm);m>=0;m=a.findIndex(Sm))l.push(a[m].trim()),a.splice(m,1),s=s.map(c=>({...c,from:c.from>m?c.from-1:c.from,to:c.to>m?c.to-1:c.to}));l.length&&((u=a[0])==null?void 0:u.trim())===""&&(a.splice(0,1),s=s.map(m=>({...m,from:m.from>0?m.from-1:m.from,to:m.to>0?m.to-1:m.to}))),l.length&&l.push("")}return t.withMain&&!o&&(a=[`public static void main(String[] args)${Ax(i)?" throws Exception":""} {`,...Tm(a),"}"],r(1)),t.asClass&&(a=[`public class ${Ks(o?"Main":i.caption)} {`,...Tm(a),"}"],r(1)),l.length&&(a=[...l,...a],r(l.length)),{text:a.join(` +`),spans:s}}function gi(i,e,t=x0){return Dg(i,e,t).text}function Or(i){const e=Mg(i).code;return(e.trim()===""?i:e).replace(/\s+/g,"")}function Mg(i){let e="";for(let t=0;tnew Array(a+1).fill(0));for(let u=n-1;u>=0;u--)for(let m=a-1;m>=0;m--)s[u][m]=t(i[u],e[m])?s[u+1][m+1]+1:Math.max(s[u+1][m],s[u][m+1]);const r=[];let o=0,l=0;for(;o=s[o][l+1])?r.push({kind:"del",a:o++}):r.push({kind:"ins",b:l++});return r}function jm(i,e,t,n,a={},s=x0){const r=gi(t,n,s),o=gi(e,n,s);if(i===o)return r;const l=o.split(` `),u=r.split(` `),m=i.split(` -`),c=new Array(l.length).fill(-1);for(const v of _m(l,m,(w,z)=>Pr(w)!==""&&Pr(w)===Pr(z)))v.kind==="keep"&&(c[v.a]=v.b);const d=[];let h=0,g="";const f=v=>{for(;hw===z))if(v.kind==="keep")c[v.a]>=0&&(f(c[v.a]+1),g="");else if(v.kind==="del"){const w=c[v.a];if(w<0)continue;f(w),g||(g=Dg(m[w]).comment),h=w+1}else{const w=u[v.b];d.push(g&&w.trim()!==""?`${w} ${g}`:w),w.trim()!==""&&(g="")}f(m.length);const b=d.join(` -`),x=Ro(b,n,a);return gi(Go(t,x),n,s)===r?b:r}function Go(i,e){let t=e.caption??(It(i.caption)?"":i.caption);return!e.caption&&e.className&&Xs(t)!==e.className&&(t=e.className),{...i,caption:t,elements:Ho(i.elements,e.elements)}}function Ho(i,e){return e.map((t,n)=>{const a=i[n];if(!a||a.type!==t.type)return t;const s={...t,zoomX:a.zoomX,zoomY:a.zoomY};return a.textColor&&(s.textColor=a.textColor),a.backgroundColor&&(s.backgroundColor=a.backgroundColor),t.loopBody&&(s.loopBody=Ho(a.loopBody??[],t.loopBody)),t.cases&&(s.cases=t.cases.map((r,o)=>{var l,u;return{...r,elements:Ho(((u=(l=a.cases)==null?void 0:l[o])==null?void 0:u.elements)??[],r.elements)}})),s})}let Vo=[],Zg=[];(()=>{let i="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,1n,9,16,o,,x,1i,3,,i,,7,a,2,t,3,1k,,,7,2,2,2,3,9,,a,2,q,,2,3,1k,,,5,4,2,2,3,3,,u,2,3,,b,3,1k,,,8,,3,,3,k,2,m,6,,3,1k,,,7,2,2,2,3,7,3,a,2,u,,1n,5,3,3,,4,9,,14,5,1j,,,7,,3,,4,7,2,b,2,t,3,1k,,,7,,3,,4,7,2,b,2,f,,c,4,1j,2,,7,,3,,4,9,,a,2,t,3,1y,,4,6,,,,8,i,2,1p,,,8,c,8,2q,,,a,b,7,21,2,r,,,,,,4,2,1d,k,,2,5,b,,10,9,,2u,b,,6,n,4,4,3,g,4,d,,,3,6,,f,,jj,3,qa,4,s,3,t,2,u,2,1s,w,9,,19,3,,,39,2,y,,3a,c,4,c,63,5,1l,a,,,,,2,o,2,,1c,1a,2,c,k,5,1b,h,12,9,c,3,u,d,1k,e,1c,k,48,3,,l,4,,6,,2,3,5i,1s,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,n,5,4,,2b,2,1e,i,q,i,d,,12,8,p,d,18,4,1b,e,10,,1v,e,c,,8,2,1a,,1f,,,3,2,2,5,2,,,15,5,5,2,6k,8,,2,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,1t,5,8t,2,25,6,1y,b,1d,4,3e,3,1h,f,15,,2,2,a,4,19,b,7,,1p,3,10,e,g,2,18,,c,3,1c,e,8,4,,2,2k,c,6,,2,,4d,c,l,4,1j,2,,7,2,2,2,3,9,,a,2,2,7,3,5,1v,9,,,2,,,4,,5,,,e,2,2a,i,n,,29,k,6j,7,2,9,r,2,2a,h,2y,d,2t,3,2,a,74,f,6t,6,,2,2,4,,,,2,3x,7,2,7,3,,s,a,14,7,,4,8,,9,b,1a,g,5i,8,5j,8,,8,2a,m,,e,3e,6,3,,,2,,7,,,1u,5,,2,,5,9n,4,9,2,,,1c,7,3,5,n,,44l,,6,f,8ug,i,1xc,5,1n,7,t4,,,1j,7,4,29,,b,2,f57,2,3mp,1a,2,n,f2,5,3,6,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,2s,,4g,7,af,,1p,4,e4,4,72,2,6r,,2,,7,2,5,,d6,7,31,7,240,5".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(i=Zg[n])e=n+1;else return!0;if(e==t)return!1}}function Am(i){return i>=127462&&i<=127487}const jm=8205;function bB(i,e,t=!0,n=!0){return(t?Bg:xB)(i,e,n)}function Bg(i,e,t){if(e==i.length)return e;e&&Lg(i.charCodeAt(e))&&Wg(i.charCodeAt(e-1))&&e--;let n=Mr(i,e);for(e+=Om(n);e=0&&Am(Mr(i,r));)s++,r-=2;if(s%2==0)break;e+=2}else break}return e}function xB(i,e,t){for(;e>1;){let n=Bg(i,e-2,t);if(n=56320&&i<57344}function Wg(i){return i>=55296&&i<56320}function Om(i){return i<65536?1:2}class oe{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,n){[e,t]=O1(this,e,t);let a=[];return this.decompose(0,e,a,2),n.length&&n.decompose(0,n.length,a,3),this.decompose(t,this.length,a,1),an.from(a,this.length-(t-e)+n.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=O1(this,e,t);let n=[];return this.decompose(e,t,n,0),an.from(n,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),n=this.length-this.scanIdentical(e,-1),a=new pi(this),s=new pi(e);for(let r=t,o=t;;){if(a.next(r),s.next(r),r=0,a.lineBreak!=s.lineBreak||a.done!=s.done||a.value!=s.value)return!1;if(o+=a.value.length,a.done||o>=n)return!0}}iter(e=1){return new pi(this,e)}iterRange(e,t=this.length){return new Eg(this,e,t)}iterLines(e,t){let n;if(e==null)n=this.iter();else{t==null&&(t=this.lines+1);let a=this.line(e).from;n=this.iterRange(a,Math.max(a,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Ng(n)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?oe.empty:e.length<=32?new Pe(e):an.from(Pe.split(e,[]))}}class Pe extends oe{constructor(e,t=vB(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,n,a){for(let s=0;;s++){let r=this.text[s],o=a+r.length;if((t?n:o)>=e)return new yB(a,o,n,r);a=o+1,n++}}decompose(e,t,n,a){let s=e<=0&&t>=this.length?this:new Pe(Pm(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(a&1){let r=n.pop(),o=qa(s.text,r.text.slice(),0,s.length);if(o.length<=32)n.push(new Pe(o,r.length+s.length));else{let l=o.length>>1;n.push(new Pe(o.slice(0,l)),new Pe(o.slice(l)))}}else n.push(s)}replace(e,t,n){if(!(n instanceof Pe))return super.replace(e,t,n);[e,t]=O1(this,e,t);let a=qa(this.text,qa(n.text,Pm(this.text,0,e)),t),s=this.length+n.length-(t-e);return a.length<=32?new Pe(a,s):an.from(Pe.split(a,[]),s)}sliceString(e,t=this.length,n=` -`){[e,t]=O1(this,e,t);let a="";for(let s=0,r=0;s<=t&&re&&r&&(a+=n),es&&(a+=o.slice(Math.max(0,e-s),t-s)),s=l+1}return a}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let n=[],a=-1;for(let s of e)n.push(s),a+=s.length+1,n.length==32&&(t.push(new Pe(n,a)),n=[],a=-1);return a>-1&&t.push(new Pe(n,a)),t}}class an extends oe{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let n of e)this.lines+=n.lines}lineInner(e,t,n,a){for(let s=0;;s++){let r=this.children[s],o=a+r.length,l=n+r.lines-1;if((t?l:o)>=e)return r.lineInner(e,t,n,a);a=o+1,n=l+1}}decompose(e,t,n,a){for(let s=0,r=0;r<=t&&s=r){let u=a&((r<=e?1:0)|(l>=t?2:0));r>=e&&l<=t&&!u?n.push(o):o.decompose(e-r,t-r,n,u)}r=l+1}}replace(e,t,n){if([e,t]=O1(this,e,t),n.lines=s&&t<=o){let l=r.replace(e-s,t-s,n),u=this.lines-r.lines+l.lines;if(l.lines>4&&l.lines>u>>6){let m=this.children.slice();return m[a]=l,new an(m,this.length-(t-e)+n.length)}return super.replace(s,o,l)}s=o+1}return super.replace(e,t,n)}sliceString(e,t=this.length,n=` -`){[e,t]=O1(this,e,t);let a="";for(let s=0,r=0;se&&s&&(a+=n),er&&(a+=o.sliceString(e-r,t-r,n)),r=l+1}return a}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof an))return 0;let n=0,[a,s,r,o]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;a+=t,s+=t){if(a==r||s==o)return n;let l=this.children[a],u=e.children[s];if(l!=u)return n+l.scanIdentical(u,t);n+=l.length+1}}static from(e,t=e.reduce((n,a)=>n+a.length+1,-1)){let n=0;for(let h of e)n+=h.lines;if(n<32){let h=[];for(let g of e)g.flatten(h);return new Pe(h,t)}let a=Math.max(32,n>>5),s=a<<1,r=a>>1,o=[],l=0,u=-1,m=[];function c(h){let g;if(h.lines>s&&h instanceof an)for(let f of h.children)c(f);else h.lines>r&&(l>r||!l)?(d(),o.push(h)):h instanceof Pe&&l&&(g=m[m.length-1])instanceof Pe&&h.lines+g.lines<=32?(l+=h.lines,u+=h.length+1,m[m.length-1]=new Pe(g.text.concat(h.text),g.length+1+h.length)):(l+h.lines>a&&d(),l+=h.lines,u+=h.length+1,m.push(h))}function d(){l!=0&&(o.push(m.length==1?m[0]:an.from(m,u)),u=-1,l=m.length=0)}for(let h of e)c(h);return d(),o.length==1?o[0]:new an(o,t)}}oe.empty=new Pe([""],0);function vB(i){let e=-1;for(let t of i)e+=t.length+1;return e}function qa(i,e,t=0,n=1e9){for(let a=0,s=0,r=!0;s=t&&(l>n&&(o=o.slice(0,n-a)),a0?1:(e instanceof Pe?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let n=this.nodes.length-1,a=this.nodes[n],s=this.offsets[n],r=s>>1,o=a instanceof Pe?a.text.length:a.children.length;if(r==(t>0?o:0)){if(n==0)return this.done=!0,this.value="",this;t>0&&this.offsets[n-1]++,this.nodes.pop(),this.offsets.pop()}else if((s&1)==(t>0?0:1)){if(this.offsets[n]+=t,e==0)return this.lineBreak=!0,this.value=` -`,this;e--}else if(a instanceof Pe){let l=a.text[r+(t<0?-1:0)];if(this.offsets[n]+=t,l.length>Math.max(0,e))return this.value=e==0?l:t>0?l.slice(e):l.slice(0,l.length-e),this;e-=l.length}else{let l=a.children[r+(t<0?-1:0)];e>l.length?(e-=l.length,this.offsets[n]+=t):(t<0&&this.offsets[n]--,this.nodes.push(l),this.offsets.push(t>0?1:(l instanceof Pe?l.text.length:l.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Eg{constructor(e,t,n){this.value="",this.done=!1,this.cursor=new pi(e,t>n?-1:1),this.pos=t>n?e.length:0,this.from=Math.min(t,n),this.to=Math.max(t,n)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let n=t<0?this.pos-this.from:this.to-this.pos;e>n&&(e=n),n-=e;let{value:a}=this.cursor.next(e);return this.pos+=(a.length+e)*t,this.value=a.length<=n?a:t<0?a.slice(a.length-n):a.slice(0,n),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class Ng{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:n,value:a}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):n?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=a,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(oe.prototype[Symbol.iterator]=function(){return this.iter()},pi.prototype[Symbol.iterator]=Eg.prototype[Symbol.iterator]=Ng.prototype[Symbol.iterator]=function(){return this});class yB{constructor(e,t,n,a){this.from=e,this.to=t,this.number=n,this.text=a}get length(){return this.to-this.from}}function O1(i,e,t){return e=Math.max(0,Math.min(i.length,e)),[e,Math.max(e,Math.min(i.length,t))]}function rt(i,e,t=!0,n=!0){return bB(i,e,t,n)}function wB(i){return i>=56320&&i<57344}function zB(i){return i>=55296&&i<56320}function jt(i,e){let t=i.charCodeAt(e);if(!zB(t)||e+1==i.length)return t;let n=i.charCodeAt(e+1);return wB(n)?(t-55296<<10)+(n-56320)+65536:t}function Jg(i){return i<=65535?String.fromCharCode(i):(i-=65536,String.fromCharCode((i>>10)+55296,(i&1023)+56320))}function hn(i){return i<65536?1:2}const qo=/\r\n?|\n/;var st=(function(i){return i[i.Simple=0]="Simple",i[i.TrackDel=1]="TrackDel",i[i.TrackBefore=2]="TrackBefore",i[i.TrackAfter=3]="TrackAfter",i})(st||(st={}));class pn{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return s+(e-a);s+=o}else{if(n!=st.Simple&&u>=e&&(n==st.TrackDel&&ae||n==st.TrackBefore&&ae))return null;if(u>e||u==e&&t<0&&!o)return e==a||t<0?s:s+l;s+=l}a=u}if(e>a)throw new RangeError(`Position ${e} is out of range for changeset of length ${a}`);return s}touchesRange(e,t=e){for(let n=0,a=0;n=0&&a<=t&&o>=e)return at?"cover":!0;a=o}return!1}toString(){let e="";for(let t=0;t=0?":"+a:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new pn(e)}static create(e){return new pn(e)}}class Ze extends pn{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Qo(this,(t,n,a,s,r)=>e=e.replace(a,a+(n-t),r),!1),e}mapDesc(e,t=!1){return Uo(this,e,t,!0)}invert(e){let t=this.sections.slice(),n=[];for(let a=0,s=0;a=0){t[a]=o,t[a+1]=r;let l=a>>1;for(;n.length0&&On(n,t,s.text),s.forward(m),o+=m}let u=e[r++];for(;o>1].toJSON()))}return e}static of(e,t,n){let a=[],s=[],r=0,o=null;function l(m=!1){if(!m&&!a.length)return;rd||c<0||d>t)throw new RangeError(`Invalid change range ${c} to ${d} (in doc of length ${t})`);let g=h?typeof h=="string"?oe.of(h.split(n||qo)):h:oe.empty,f=g.length;if(c==d&&f==0)return;cr&&at(a,c-r,-1),at(a,d-c,f),On(s,a,g),r=d}}return u(e),l(!o),o}static empty(e){return new Ze(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],n=[];for(let a=0;ao&&typeof r!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(s.length==1)t.push(s[0],0);else{for(;n.length=0&&t<=0&&t==i[a+1]?i[a]+=e:a>=0&&e==0&&i[a]==0?i[a+1]+=t:n?(i[a]+=e,i[a+1]+=t):i.push(e,t)}function On(i,e,t){if(t.length==0)return;let n=e.length-2>>1;if(n>1])),!(t||r==i.sections.length||i.sections[r+1]<0);)o=i.sections[r++],l=i.sections[r++];e(a,u,s,m,c),a=u,s=m}}}function Uo(i,e,t,n=!1){let a=[],s=n?[]:null,r=new ji(i),o=new ji(e);for(let l=-1;;){if(r.done&&o.len||o.done&&r.len)throw new Error("Mismatched change set lengths");if(r.ins==-1&&o.ins==-1){let u=Math.min(r.len,o.len);at(a,u,-1),r.forward(u),o.forward(u)}else if(o.ins>=0&&(r.ins<0||l==r.i||r.off==0&&(o.len=0&&l=0){let u=0,m=r.len;for(;m;)if(o.ins==-1){let c=Math.min(m,o.len);u+=c,m-=c,o.forward(c)}else if(o.ins==0&&o.lenl||r.ins>=0&&r.len>l)&&(o||n.length>u),s.forward2(l),r.forward(l)}}}}class ji{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?oe.empty:e[t]}textBit(e){let{inserted:t}=this.set,n=this.i-2>>1;return n>=t.length&&!e?oe.empty:t[n].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class Cn{constructor(e,t,n,a){this.from=e,this.to=t,this.flags=n,this.goalColumn=a}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(e,t=-1){let n,a;return this.empty?n=a=e.mapPos(this.from,t):(n=e.mapPos(this.from,1),a=e.mapPos(this.to,-1)),n==this.from&&a==this.to?this:new Cn(n,a,this.flags,this.goalColumn)}extend(e,t=e,n=0){if(e<=this.anchor&&t>=this.anchor)return D.range(e,t,void 0,void 0,n);let a=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return D.range(this.anchor,a,void 0,void 0,n)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return D.range(e.anchor,e.head)}static create(e,t,n,a){return new Cn(e,t,n,a)}}class D{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:D.create(this.ranges.map(n=>n.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let n=0;ne.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new D(e.ranges.map(t=>Cn.fromJSON(t)),e.main)}static single(e,t=e){return new D([D.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let n=0,a=0;aa.from-s.from),t=e.indexOf(n);for(let a=1;as.head?D.range(l,o):D.range(o,l))}}return new D(e,t)}}function Rg(i,e){for(let t of i.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let x0=0;class V{constructor(e,t,n,a,s){this.combine=e,this.compareInput=t,this.compare=n,this.isStatic=a,this.id=x0++,this.default=e([]),this.extensions=typeof s=="function"?s(this):s}get reader(){return this}static define(e={}){return new V(e.combine||(t=>t),e.compareInput||((t,n)=>t===n),e.compare||(e.combine?(t,n)=>t===n:v0),!!e.static,e.enables)}of(e){return new Qa([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Qa(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Qa(e,this,2,t)}from(e,t){return t||(t=n=>n),this.compute([e],n=>t(n.field(e)))}}function v0(i,e){return i==e||i.length==e.length&&i.every((t,n)=>t===e[n])}class Qa{constructor(e,t,n,a){this.dependencies=e,this.facet=t,this.type=n,this.value=a,this.id=x0++}dynamicSlot(e){var t;let n=this.value,a=this.facet.compareInput,s=this.id,r=e[s]>>1,o=this.type==2,l=!1,u=!1,m=[];for(let c of this.dependencies)c=="doc"?l=!0:c=="selection"?u=!0:(((t=e[c.id])!==null&&t!==void 0?t:1)&1)==0&&m.push(e[c.id]);return{create(c){return c.values[r]=n(c),1},update(c,d){if(l&&d.docChanged||u&&(d.docChanged||d.selection)||$o(c,m)){let h=n(c);if(o?!Mm(h,c.values[r],a):!a(h,c.values[r]))return c.values[r]=h,1}return 0},reconfigure:(c,d)=>{let h,g=d.config.address[s];if(g!=null){let f=zs(d,g);if(this.dependencies.every(b=>b instanceof V?d.facet(b)===c.facet(b):b instanceof Et?d.field(b,!1)==c.field(b,!1):!0)||(o?Mm(h=n(c),f,a):a(h=n(c),f)))return c.values[r]=f,0}else h=n(c);return c.values[r]=h,1}}}get extension(){return this}}function Mm(i,e,t){if(i.length!=e.length)return!1;for(let n=0;ni[l.id]),a=t.map(l=>l.type),s=n.filter(l=>!(l&1)),r=i[e.id]>>1;function o(l){let u=[];for(let m=0;mn===a),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(xa).find(n=>n.field==this);return((t==null?void 0:t.create)||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:n=>(n.values[t]=this.create(n),1),update:(n,a)=>{let s=n.values[t],r=this.updateF(s,a);return this.compareF(s,r)?0:(n.values[t]=r,1)},reconfigure:(n,a)=>{let s=n.facet(xa),r=a.facet(xa),o;return(o=s.find(l=>l.field==this))&&o!=r.find(l=>l.field==this)?(n.values[t]=o.create(n),1):a.config.address[this.id]!=null?(n.values[t]=a.field(this),0):(n.values[t]=this.create(n),1)}}}init(e){return[this,xa.of({field:this,create:e})]}get extension(){return this}}const Qn={lowest:4,low:3,default:2,high:1,highest:0};function $1(i){return e=>new Gg(e,i)}const u1={highest:$1(Qn.highest),high:$1(Qn.high),default:$1(Qn.default),low:$1(Qn.low),lowest:$1(Qn.lowest)};class Gg{constructor(e,t){this.inner=e,this.prec=t}get extension(){return this}}class Vi{of(e){return new Yo(this,e)}reconfigure(e){return Vi.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class Yo{constructor(e,t){this.compartment=e,this.inner=t}get extension(){return this}}class ws{constructor(e,t,n,a,s,r){for(this.base=e,this.compartments=t,this.dynamicSlots=n,this.address=a,this.staticValues=s,this.facets=r,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,n){let a=[],s=Object.create(null),r=new Map;for(let d of kB(e,t,r))d instanceof Et?a.push(d):(s[d.facet.id]||(s[d.facet.id]=[])).push(d);let o=Object.create(null),l=[],u=[];for(let d of a)o[d.id]=u.length<<1,u.push(h=>d.slot(h));let m=n==null?void 0:n.config.facets;for(let d in s){let h=s[d],g=h[0].facet,f=m&&m[d]||[];if(h.every(b=>b.type==0))if(o[g.id]=l.length<<1|1,v0(f,h))l.push(n.facet(g));else{let b=g.combine(h.map(x=>x.value));l.push(n&&g.compare(b,n.facet(g))?n.facet(g):b)}else{for(let b of h)b.type==0?(o[b.id]=l.length<<1|1,l.push(b.value)):(o[b.id]=u.length<<1,u.push(x=>b.dynamicSlot(x)));o[g.id]=u.length<<1,u.push(b=>IB(b,g,h))}}let c=u.map(d=>d(o));return new ws(e,r,c,o,l,s)}}function kB(i,e,t){let n=[[],[],[],[],[]],a=new Map;function s(r,o){let l=a.get(r);if(l!=null){if(l<=o)return;let u=n[l].indexOf(r);u>-1&&n[l].splice(u,1),r instanceof Yo&&t.delete(r.compartment)}if(a.set(r,o),Array.isArray(r))for(let u of r)s(u,o);else if(r instanceof Yo){if(t.has(r.compartment))throw new RangeError("Duplicate use of compartment in extensions");let u=e.get(r.compartment)||r.inner;t.set(r.compartment,u),s(u,o)}else if(r instanceof Gg)s(r.inner,r.prec);else if(r instanceof Et)n[o].push(r),r.provides&&s(r.provides,o);else if(r instanceof Qa)n[o].push(r),r.facet.extensions&&s(r.facet.extensions,Qn.default);else{let u=r.extension;if(!u)throw new Error(`Unrecognized extension value in extension set (${r}).`);if(u==r)throw new Error(`Unrecognized extension value in extension set (${r}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);s(u,o)}}return s(i,Qn.default),n.reduce((r,o)=>r.concat(o))}function fi(i,e){if(e&1)return 2;let t=e>>1,n=i.status[t];if(n==4)throw new Error("Cyclic dependency between fields and/or facets");if(n&2)return n;i.status[t]=4;let a=i.computeSlot(i,i.config.dynamicSlots[t]);return i.status[t]=2|a}function zs(i,e){return e&1?i.config.staticValues[e>>1]:i.values[e>>1]}const Hg=V.define(),Xo=V.define({combine:i=>i.some(e=>e),static:!0}),Vg=V.define({combine:i=>i.length?i[0]:void 0,static:!0}),qg=V.define(),Qg=V.define(),Ug=V.define(),$g=V.define({combine:i=>i.length?i[0]:!1});class Nn{constructor(e,t){this.type=e,this.value=t}static define(){return new SB}}class SB{of(e){return new Nn(this,e)}}class TB{constructor(e){this.map=e}of(e){return new de(this,e)}}class de{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new de(this.type,t)}is(e){return this.type==e}static define(e={}){return new TB(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let n=[];for(let a of e){let s=a.map(t);s&&n.push(s)}return n}}de.reconfigure=de.define();de.appendConfig=de.define();class $e{constructor(e,t,n,a,s,r){this.startState=e,this.changes=t,this.selection=n,this.effects=a,this.annotations=s,this.scrollIntoView=r,this._doc=null,this._state=null,n&&Rg(n,t.newLength),s.some(o=>o.type==$e.time)||(this.annotations=s.concat($e.time.of(Date.now())))}static create(e,t,n,a,s,r){return new $e(e,t,n,a,s,r)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation($e.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}$e.time=Nn.define();$e.userEvent=Nn.define();$e.addToHistory=Nn.define();$e.remote=Nn.define();function _B(i,e){let t=[];for(let n=0,a=0;;){let s,r;if(n=i[n]))s=i[n++],r=i[n++];else if(a=0;a--){let s=n[a](i);s instanceof $e?i=s:Array.isArray(s)&&s.length==1&&s[0]instanceof $e?i=s[0]:i=Xg(e,S1(s),!1)}return i}function AB(i){let e=i.startState,t=e.facet(Ug),n=i;for(let a=t.length-1;a>=0;a--){let s=t[a](i);s&&Object.keys(s).length&&(n=Yg(n,Ko(e,s,i.changes.newLength),!0))}return n==i?i:$e.create(e,i.changes,i.selection,n.effects,n.annotations,n.scrollIntoView)}const jB=[];function S1(i){return i==null?jB:Array.isArray(i)?i:[i]}var Dt=(function(i){return i[i.Word=0]="Word",i[i.Space=1]="Space",i[i.Other=2]="Other",i})(Dt||(Dt={}));const OB=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let el;try{el=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function PB(i){if(el)return el.test(i);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||OB.test(t)))return!0}return!1}function MB(i){return e=>{if(!/\S/.test(e))return Dt.Space;if(PB(e))return Dt.Word;for(let t=0;t-1)return Dt.Word;return Dt.Other}}class re{constructor(e,t,n,a,s,r){this.config=e,this.doc=t,this.selection=n,this.values=a,this.status=e.statusTemplate.slice(),this.computeSlot=s,r&&(r._state=this);for(let o=0;oa.set(u,l)),t=null),a.set(o.value.compartment,o.value.extension)):o.is(de.reconfigure)?(t=null,n=o.value):o.is(de.appendConfig)&&(t=null,n=S1(n).concat(o.value));let s;t?s=e.startState.values.slice():(t=ws.resolve(n,a,this),s=new re(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(l,u)=>u.reconfigure(l,this),null).values);let r=e.startState.facet(Xo)?e.newSelection:e.newSelection.asSingle();new re(t,e.newDoc,r,s,(o,l)=>l.update(o,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:D.cursor(t.from+e.length,-1)}))}changeByRange(e){let t=this.selection,n=e(t.ranges[0]),a=this.changes(n.changes),s=[n.range],r=S1(n.effects);for(let o=1;or.spec.fromJSON(o,l)))}}return re.create({doc:e.doc,selection:D.fromJSON(e.selection),extensions:t.extensions?a.concat([t.extensions]):a})}static create(e={}){let t=ws.resolve(e.extensions||[],new Map),n=e.doc instanceof oe?e.doc:oe.of((e.doc||"").split(t.staticFacet(re.lineSeparator)||qo)),a=e.selection?e.selection instanceof D?e.selection:D.single(e.selection.anchor,e.selection.head):D.single(0);return Rg(a,n.length),t.staticFacet(Xo)||(a=a.asSingle()),new re(t,n,a,t.dynamicSlots.map(()=>null),(s,r)=>r.create(s),null)}get tabSize(){return this.facet(re.tabSize)}get lineBreak(){return this.facet(re.lineSeparator)||` -`}get readOnly(){return this.facet($g)}phrase(e,...t){for(let n of this.facet(re.phrases))if(Object.prototype.hasOwnProperty.call(n,e)){e=n[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(n,a)=>{if(a=="$")return"$";let s=+(a||1);return!s||s>t.length?n:t[s-1]})),e}languageDataAt(e,t,n=-1){let a=[];for(let s of this.facet(Hg))for(let r of s(this,t,n))Object.prototype.hasOwnProperty.call(r,e)&&a.push(r[e]);return a}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return MB(t.length?t[0]:"")}wordAt(e){let{text:t,from:n,length:a}=this.doc.lineAt(e),s=this.charCategorizer(e),r=e-n,o=e-n;for(;r>0;){let l=rt(t,r,!1);if(s(t.slice(l,r))!=Dt.Word)break;r=l}for(;oi.length?i[0]:4});re.lineSeparator=Vg;re.readOnly=$g;re.phrases=V.define({compare(i,e){let t=Object.keys(i),n=Object.keys(e);return t.length==n.length&&t.every(a=>i[a]==e[a])}});re.languageData=Hg;re.changeFilter=qg;re.transactionFilter=Qg;re.transactionExtender=Ug;Vi.reconfigure=de.define();function y0(i,e,t={}){let n={};for(let a of i)for(let s of Object.keys(a)){let r=a[s],o=n[s];if(o===void 0)n[s]=r;else if(!(o===r||r===void 0))if(Object.hasOwnProperty.call(t,s))n[s]=t[s](o,r);else throw new Error("Config merge conflict for field "+s)}for(let a in e)n[a]===void 0&&(n[a]=e[a]);return n}class Zn{eq(e){return this==e}range(e,t=e){return tl.create(e,t,this)}}Zn.prototype.startSide=Zn.prototype.endSide=0;Zn.prototype.point=!1;Zn.prototype.mapMode=st.TrackDel;function w0(i,e){return i==e||i.constructor==e.constructor&&i.eq(e)}let tl=class Kg{constructor(e,t,n){this.from=e,this.to=t,this.value=n}static create(e,t,n){return new Kg(e,t,n)}};function nl(i,e){return i.from-e.from||i.value.startSide-e.value.startSide}class z0{constructor(e,t,n,a){this.from=e,this.to=t,this.value=n,this.maxPoint=a}get length(){return f1(this.to)}findIndex(e,t,n,a=0){let s=n?this.to:this.from;for(let r=a,o=s.length;;){if(r==o)return r;let l=r+o>>1,u=s[l]-e||(n?this.value[l].endSide:this.value[l].startSide)-t;if(l==r)return u>=0?r:o;u>=0?o=l:r=l+1}}between(e,t,n,a){for(let s=this.findIndex(t,-1e9,!0),r=this.findIndex(n,1e9,!1,s);sb||f==b&&d.startSide>0&&d.endSide<=0)continue;if(!((b-f||d.endSide-d.startSide)<0))if(u<0&&(u=f),d.point&&(m=Math.max(m,b-f)),(f-n||d.startSide-a)>=0)r.push(d),o.push(f-u),l.push(b-u),n=b,a=d.endSide;else{if(f==b)for(let x=r.length;x>0;x--){if((f-(l[x-1]+u)||d.startSide-r[x-1].endSide)>=0){r.splice(x,0,d),o.splice(x,0,f-u),l.splice(x,0,b-u);continue e}if((f-(o[x-1]+u)||d.endSide-r[x-1].startSide)>0)break}s(f,b,d)}}return{mapped:r.length?new z0(o,l,r,m):null,pos:u}}}class ie{constructor(e,t,n,a){this.chunkPos=e,this.chunk=t,this.nextLayer=n,this.maxPoint=a}static create(e,t,n,a){return new ie(e,t,n,a)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:n=!1,filterFrom:a=0,filterTo:s=this.length}=e,r=e.filter;if(t.length==0&&!r)return this;if(n&&(t=t.slice().sort(nl)),this.isEmpty)return t.length?ie.of(t):this;let o=new ep(this,null,-1).goto(0),l=0,u=[],m=new i1;for(;o.value||l=0){let c=t[l++];m.addInner(c.from,c.to,c.value,!1)||u.push(c)}else o.rangeIndex==1&&o.chunkIndexthis.chunkEnd(o.chunkIndex)||so.to||s{s||(s=new i1),s.addRange(l,u,m,!1)};for(let l=0;l=s&&e<=s+r.length&&r.between(s,e-s,t-s,n)===!1)return}this.nextLayer.between(e,t,n)}}iter(e=0){return Oi.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return Oi.from(e).goto(t)}static compare(e,t,n,a,s=-1){let r=e.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),o=t.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),l=Dm(r,o,n),u=new Y1(r,l,s),m=new Y1(o,l,s);n.iterGaps((c,d,h)=>Zm(u,c,m,d,h,a)),n.empty&&n.length==0&&Zm(u,0,m,0,0,a)}static eq(e,t,n=0,a){a==null&&(a=999999999);let s=e.filter(m=>!m.isEmpty&&t.indexOf(m)<0),r=t.filter(m=>!m.isEmpty&&e.indexOf(m)<0);if(s.length!=r.length)return!1;if(!s.length)return!0;let o=Dm(s,r),l=new Y1(s,o,0).goto(n),u=new Y1(r,o,0).goto(n);for(;;){if(l.to!=u.to||!il(l.active,u.active)||l.point&&(!u.point||!w0(l.point,u.point)))return!1;if(l.to>a)return!0;l.next(),u.next()}}static spans(e,t,n,a,s=-1){let r=new Y1(e,null,s).goto(t),o=t,l=r.openStart;for(;;){let u=Math.min(r.to,n);if(r.point){let m=r.activeForPoint(r.to),c=r.pointFromo&&(a.span(o,u,r.active,l),l=r.openEnd(u));if(r.to>n)return l+(r.point&&r.to>n?1:0);o=r.to,r.next()}}static of(e,t=!1){let n=new i1;for(let a of e instanceof tl?[e]:t?DB(e):e)n.add(a.from,a.to,a.value);return n.finish()}static join(e){if(!e.length)return ie.empty;let t=f1(e);for(let n=e.length-2;n>=0;n--)for(let a=e[n];a!=ie.empty;a=a.nextLayer)t=new ie(a.chunkPos,a.chunk,t,Math.max(a.maxPoint,t.maxPoint));return t}}ie.empty=new ie([],[],null,-1);function f1(i){return i[i.length-1]}function DB(i){if(i.length>1)for(let e=i[0],t=1;t0)return i.slice().sort(nl);e=n}return i}ie.empty.nextLayer=ie.empty;class i1{finishChunk(e){this.chunks.push(new z0(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,n){this.addRange(e,t,n,!0)}addRange(e,t,n,a){this.addInner(e,t,n,a)||(this.nextLayer||(this.nextLayer=new i1)).addRange(e,t,n,a)}addInner(e,t,n,a){let s=e-this.lastTo||n.startSide-this.last.endSide;if(a&&s<=0&&(e-this.lastFrom||n.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=n,this.lastFrom=e,this.lastTo=t,this.value.push(n),n.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let n=t.value.length-1;return this.last=t.value[n],this.lastFrom=t.from[n]+e,this.lastTo=t.to[n]+e,!0}finish(){return this.finishInner(ie.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=ie.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function Dm(i,e,t){let n=new Map;for(let s of i)for(let r=0;r=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=n&&a.push(new ep(r,t,n,s));return a.length==1?a[0]:new Oi(a)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let n of this.heap)n.goto(e,t);for(let n=this.heap.length>>1;n>=0;n--)Dr(this.heap,n);return this.next(),this}forward(e,t){for(let n of this.heap)n.forward(e,t);for(let n=this.heap.length>>1;n>=0;n--)Dr(this.heap,n);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Dr(this.heap,0)}}}function Dr(i,e){for(let t=i[e];;){let n=(e<<1)+1;if(n>=i.length)break;let a=i[n];if(n+1=0&&(a=i[n+1],n++),t.compare(a)<0)break;i[n]=t,i[e]=a,e=n}}class Y1{constructor(e,t,n){this.minPoint=n,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Oi.from(e,t,n)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){va(this.active,e),va(this.activeTo,e),va(this.activeRank,e),this.minActive=Bm(this.active,this.activeTo)}addActive(e){let t=0,{value:n,to:a,rank:s}=this.cursor;for(;t0;)t++;ya(this.active,t,n),ya(this.activeTo,t,a),ya(this.activeRank,t,s),e&&ya(e,t,this.cursor.from),this.minActive=Bm(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let n=this.openStart<0?[]:null;for(;;){let a=this.minActive;if(a>-1&&(this.activeTo[a]-this.cursor.from||this.active[a].endSide-this.cursor.startSide)<0){if(this.activeTo[a]>e){this.to=this.activeTo[a],this.endSide=this.active[a].endSide;break}this.removeActive(a),n&&va(n,a)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let s=this.cursor.value;if(!s.point)this.addActive(n),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&n[a]=0&&!(this.activeRank[n]e||this.activeTo[n]==e&&this.active[n].endSide>=this.point.endSide)&&t.push(this.active[n]);return t.reverse()}openEnd(e){let t=0;for(let n=this.activeTo.length-1;n>=0&&this.activeTo[n]>e;n--)t++;return t}}function Zm(i,e,t,n,a,s){i.goto(e),t.goto(n);let r=n+a,o=n,l=n-e,u=!!s.boundChange;for(let m=!1;;){let c=i.to+l-t.to,d=c||i.endSide-t.endSide,h=d<0?i.to+l:t.to,g=Math.min(h,r);if(i.point||t.point?(i.point&&t.point&&w0(i.point,t.point)&&il(i.activeForPoint(i.to),t.activeForPoint(t.to))||s.comparePoint(o,g,i.point,t.point),m=!1):(m&&(s.boundChange(o),m=!1),g>o&&!il(i.active,t.active)&&s.compareRange(o,g,i.active,t.active),u&&gr)break;o=h,d<=0&&i.next(),d>=0&&t.next()}}function il(i,e){if(i.length!=e.length)return!1;for(let t=0;t=e;n--)i[n+1]=i[n];i[e]=t}function Bm(i,e){let t=-1,n=1e9;for(let a=0;a=e)return a;if(a==i.length)break;s+=i.charCodeAt(a)==9?t-s%t:1,a=rt(i,a)}return i.length}const al="ͼ",Lm=typeof Symbol>"u"?"__"+al:Symbol.for(al),sl=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Wm=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class Bn{constructor(e,t){this.rules=[];let{finish:n}=t||{};function a(r){return/^@/.test(r)?[r]:r.split(/,\s*/)}function s(r,o,l,u){let m=[],c=/^@(\w+)\b/.exec(r[0]),d=c&&c[1]=="keyframes";if(c&&o==null)return l.push(r[0]+";");for(let h in o){let g=o[h];if(/&/.test(h))s(h.split(/,\s*/).map(f=>r.map(b=>f.replace(/&/,b))).reduce((f,b)=>f.concat(b)),g,l);else if(g&&typeof g=="object"){if(!c)throw new RangeError("The value of a property ("+h+") should be a primitive value.");s(a(h),g,m,d)}else g!=null&&m.push(h.replace(/_.*/,"").replace(/[A-Z]/g,f=>"-"+f.toLowerCase())+": "+g+";")}(m.length||d)&&l.push((n&&!c&&!u?r.map(n):r).join(", ")+" {"+m.join(" ")+"}")}for(let r in e)s(a(r),e[r],this.rules)}getRules(){return this.rules.join(` -`)}static newName(){let e=Wm[Lm]||1;return Wm[Lm]=e+1,al+e.toString(36)}static mount(e,t,n){let a=e[sl],s=n&&n.nonce;a?s&&a.setNonce(s):a=new BB(e,s),a.mount(Array.isArray(t)?t:[t],e)}}let Em=new Map;class BB{constructor(e,t){let n=e.ownerDocument||e,a=n.defaultView;if(!e.head&&e.adoptedStyleSheets&&a.CSSStyleSheet){let s=Em.get(n);if(s)return e[sl]=s;this.sheet=new a.CSSStyleSheet,Em.set(n,this)}else this.styleTag=n.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[sl]=this}mount(e,t){let n=this.sheet,a=0,s=0,r=!1;for(let o=0;o-1&&(this.modules.splice(u,1),r=!0,s--,u=-1),u==-1){if(this.modules.splice(s++,0,l),r=!0,n)for(let m=0;m",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},LB=typeof navigator<"u"&&/Mac/.test(navigator.platform),WB=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(var Ue=0;Ue<10;Ue++)Ln[48+Ue]=Ln[96+Ue]=String(Ue);for(var Ue=1;Ue<=24;Ue++)Ln[Ue+111]="F"+Ue;for(var Ue=65;Ue<=90;Ue++)Ln[Ue]=String.fromCharCode(Ue+32),Pi[Ue]=String.fromCharCode(Ue);for(var Zr in Ln)Pi.hasOwnProperty(Zr)||(Pi[Zr]=Ln[Zr]);function EB(i){var e=LB&&i.metaKey&&i.shiftKey&&!i.ctrlKey&&!i.altKey||WB&&i.shiftKey&&i.key&&i.key.length==1||i.key=="Unidentified",t=!e&&i.key||(i.shiftKey?Pi:Ln)[i.keyCode]||i.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}let ut=typeof navigator<"u"?navigator:{userAgent:"",vendor:"",platform:""},rl=typeof document<"u"?document:{documentElement:{style:{}}};const ol=/Edge\/(\d+)/.exec(ut.userAgent),tp=/MSIE \d/.test(ut.userAgent),ll=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(ut.userAgent),ir=!!(tp||ll||ol),Nm=!ir&&/gecko\/(\d+)/i.test(ut.userAgent),Br=!ir&&/Chrome\/(\d+)/.exec(ut.userAgent),Jm="webkitFontSmoothing"in rl.documentElement.style,ul=!ir&&/Apple Computer/.test(ut.vendor),Fm=ul&&(/Mobile\/\w+/.test(ut.userAgent)||ut.maxTouchPoints>2);var G={mac:Fm||/Mac/.test(ut.platform),windows:/Win/.test(ut.platform),linux:/Linux|X11/.test(ut.platform),ie:ir,ie_version:tp?rl.documentMode||6:ll?+ll[1]:ol?+ol[1]:0,gecko:Nm,gecko_version:Nm?+(/Firefox\/(\d+)/.exec(ut.userAgent)||[0,0])[1]:0,chrome:!!Br,chrome_version:Br?+Br[1]:0,ios:Fm,android:/Android\b/.test(ut.userAgent),webkit:Jm,webkit_version:Jm?+(/\bAppleWebKit\/(\d+)/.exec(ut.userAgent)||[0,0])[1]:0,safari:ul,safari_version:ul?+(/\bVersion\/(\d+(\.\d+)?)/.exec(ut.userAgent)||[0,0])[1]:0,tabSize:rl.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function I0(i,e){for(let t in i)t=="class"&&e.class?e.class+=" "+i.class:t=="style"&&e.style?e.style+=";"+i.style:e[t]=i[t];return e}const Is=Object.create(null);function k0(i,e,t){if(i==e)return!0;i||(i=Is),e||(e=Is);let n=Object.keys(i),a=Object.keys(e);if(n.length-0!=a.length-0)return!1;for(let s of n)if(s!=t&&(a.indexOf(s)==-1||i[s]!==e[s]))return!1;return!0}function NB(i,e){for(let t=i.attributes.length-1;t>=0;t--){let n=i.attributes[t].name;e[n]==null&&i.removeAttribute(n)}for(let t in e){let n=e[t];t=="style"?i.style.cssText=n:i.getAttribute(t)!=n&&i.setAttribute(t,n)}}function Rm(i,e,t){let n=!1;if(e)for(let a in e)t&&a in t||(n=!0,a=="style"?i.style.cssText="":i.removeAttribute(a));if(t)for(let a in t)e&&e[a]==t[a]||(n=!0,a=="style"?i.style.cssText=t[a]:i.setAttribute(a,t[a]));return n}function JB(i){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new o1(e,t,t,n,e.widget||null,!1)}static replace(e){let t=!!e.block,n,a;if(e.isBlockGap)n=-5e8,a=4e8;else{let{start:s,end:r}=np(e,t);n=(s?t?-3e8:-1:5e8)-1,a=(r?t?2e8:1:-6e8)+1}return new o1(e,n,a,t,e.widget||null,!0)}static line(e){return new Ui(e)}static set(e,t=!1){return ie.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}he.none=ie.empty;class Qi extends he{constructor(e){let{start:t,end:n}=np(e);super(t?-1:5e8,n?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?I0(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||Is}eq(e){return this==e||e instanceof Qi&&this.tagName==e.tagName&&k0(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}Qi.prototype.point=!1;class Ui extends he{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof Ui&&this.spec.class==e.spec.class&&k0(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}Ui.prototype.mapMode=st.TrackBefore;Ui.prototype.point=!0;class o1 extends he{constructor(e,t,n,a,s,r){super(t,n,s,e),this.block=a,this.isReplace=r,this.mapMode=a?t<=0?st.TrackBefore:st.TrackAfter:st.TrackDel}get type(){return this.startSide!=this.endSide?Ye.WidgetRange:this.startSide<=0?Ye.WidgetBefore:Ye.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof o1&&FB(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}o1.prototype.point=!0;function np(i,e=!1){let{inclusiveStart:t,inclusiveEnd:n}=i;return t==null&&(t=i.inclusive),n==null&&(n=i.inclusive),{start:t??e,end:n??e}}function FB(i,e){return i==e||!!(i&&e&&i.compare(e))}function T1(i,e,t,n=0){let a=t.length-1;a>=0&&t[a]+n>=i?t[a]=Math.max(t[a],e):t.push(i,e)}class Mi extends Zn{constructor(e,t,n){super(),this.tagName=e,this.attributes=t,this.rank=n}eq(e){return e==this||e instanceof Mi&&this.tagName==e.tagName&&k0(this.attributes,e.attributes)}static create(e){return new Mi(e.tagName,e.attributes||Is,e.rank==null?50:Math.max(0,Math.min(e.rank,100)))}static set(e,t=!1){return ie.of(e,t)}}Mi.prototype.startSide=Mi.prototype.endSide=-1;const He=i=>i.nodeType==1,P1=i=>i.nodeType==3;function Di(i){let e;return i.nodeType==11?e=i.getSelection?i:i.ownerDocument:e=i,e.getSelection()}function ml(i,e){return e?i==e||i.contains(e.nodeType!=1?e.parentNode:e):!1}function bi(i,e){if(!e.anchorNode)return!1;try{return ml(i,e.anchorNode)}catch{return!1}}function Ua(i){return P1(i)?Zi(i,0,i.nodeValue.length).getClientRects():He(i)?i.getClientRects():[]}function xi(i,e,t,n){return t?Gm(i,e,t,n,-1)||Gm(i,e,t,n,1):!1}function Wn(i){for(var e=0;;e++)if(i=i.previousSibling,!i)return e}function ks(i){return He(i)&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(i.nodeName)}function Gm(i,e,t,n,a){for(;;){if(i==t&&e==n)return!0;if(e==(a<0?0:vn(i))){if(i.nodeName=="DIV")return!1;let s=i.parentNode;if(!s||!He(s))return!1;e=Wn(i)+(a<0?0:1),i=s}else if(He(i)){if(i=i.childNodes[e+(a<0?-1:0)],He(i)&&(i.nodeName=="IMG"||i.nodeName=="BR"||i.contentEditable=="false"))return!1;e=a<0?vn(i):0}else return!1}}function vn(i){return P1(i)?i.nodeValue.length:i.childNodes.length}function Ss(i,e){let{left:t,right:n}=i;if(t==n)return i;let a=e?t:n;return{left:a,right:a,top:i.top,bottom:i.bottom}}function RB(i){let e=i.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:i.innerWidth,top:0,bottom:i.innerHeight}}function ip(i,e){let t=e.width/i.offsetWidth,n=e.height/i.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-i.offsetWidth)<1)&&(t=1),(n>.995&&n<1.005||!isFinite(n)||Math.abs(e.height-i.offsetHeight)<1)&&(n=1),{scaleX:t,scaleY:n}}function GB(i,e,t,n,a,s,r,o){let l=i.ownerDocument,u=l.defaultView||window;for(let m=i,c=!1;m&&!c;)if(He(m)){let d,h=m==l.body,g=1,f=1,b=!0,x=!0;if(h)d=RB(u);else{let z=getComputedStyle(m);if(/^(fixed|sticky)$/.test(z.position)&&(c=!0),(m.scrollHeight<=m.clientHeight||!/auto|scroll/.test(z.overflowY))&&(x=!1),(m.scrollWidth<=m.clientWidth||!/auto|scroll/.test(z.overflowX))&&(b=!1),!b&&!x){m=m.assignedSlot||m.parentNode;continue}let I=m.getBoundingClientRect();({scaleX:g,scaleY:f}=ip(m,I)),d={left:I.left,right:I.left+m.clientWidth*g,top:I.top,bottom:I.top+m.clientHeight*f}}let v=0,w=0;if(x)if(a=="nearest")e.top0&&e.bottom>d.bottom+w&&(w=e.bottom-d.bottom+r)):e.bottom>d.bottom-r&&(w=e.bottom-d.bottom+r,t<0&&e.top-w0&&e.right>d.right+v&&(v=e.right-d.right+s)):e.right>d.right-s&&(v=e.right-d.right+s,t<0&&e.leftd.bottom||e.leftd.right)&&(e={left:Math.max(e.left,d.left),right:Math.min(e.right,d.right),top:Math.max(e.top,d.top),bottom:Math.min(e.bottom,d.bottom)}),m=m.assignedSlot||m.parentNode}else if(m.nodeType==11)m=m.host;else break}function ap(i,e=!0){let t=i.ownerDocument,n=null,a=null;for(let s=i.parentNode;s&&!(s==t.body||(!e||n)&&a);)if(He(s))!a&&s.scrollHeight>s.clientHeight&&/scroll|auto/.test(getComputedStyle(s).overflowY)&&(a=s),e&&!n&&s.scrollWidth>s.clientWidth&&/scroll|auto/.test(getComputedStyle(s).overflowX)&&(n=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:n,y:a}}class HB{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:n}=e;this.set(t,Math.min(e.anchorOffset,t?vn(t):0),n,Math.min(e.focusOffset,n?vn(n):0))}set(e,t,n,a){this.anchorNode=e,this.anchorOffset=t,this.focusNode=n,this.focusOffset=a}}function sp(i){let e=[];for(let t=i;t;t=t.nodeType==11?t.host:t.parentNode)He(t)&&e.push({node:t,left:t.scrollLeft,top:t.scrollTop});return e}function rp(i,e=!0){for(let{node:t,left:n,top:a}of i)e&&t.scrollTop!=a&&(t.scrollTop=a),t.scrollLeft!=n&&(t.scrollLeft=n)}let qn=null;G.safari&&G.safari_version>=26&&(qn=!1);function op(i){if(i.setActive)return i.setActive();if(qn)return i.focus(qn);let e=sp(i);i.focus(qn==null?{get preventScroll(){return qn={preventScroll:!0},!0}}:void 0),qn||(qn=!1,rp(e))}let Hm;function Zi(i,e,t=e){let n=Hm||(Hm=document.createRange());return n.setEnd(i,t),n.setStart(i,e),n}function _1(i,e,t,n){let a={key:e,code:e,keyCode:t,which:t,cancelable:!0};n&&({altKey:a.altKey,ctrlKey:a.ctrlKey,shiftKey:a.shiftKey,metaKey:a.metaKey}=n);let s=new KeyboardEvent("keydown",a);s.synthetic=!0,i.dispatchEvent(s);let r=new KeyboardEvent("keyup",a);return r.synthetic=!0,i.dispatchEvent(r),s.defaultPrevented||r.defaultPrevented}function VB(i){for(;i;){if(i&&(i.nodeType==9||i.nodeType==11&&i.host))return i;i=i.assignedSlot||i.parentNode}return null}function qB(i,e){let t=e.focusNode,n=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=n)return!1;for(n=Math.min(n,vn(t));;)if(n){if(!He(t))return!1;let a=t.childNodes[n-1];a.contentEditable=="false"?n--:(t=a,n=vn(t))}else{if(t==i)return!0;n=Wn(t),t=t.parentNode}}function lp(i){return i instanceof Window?i.pageYOffset>Math.max(0,i.document.documentElement.scrollHeight-i.innerHeight-4):i.scrollTop>Math.max(1,i.scrollHeight-i.clientHeight-4)}function up(i,e){for(let t=i,n=e;;){if(P1(t)&&n>0)return{node:t,offset:n};if(He(t)&&n>0){if(t.contentEditable=="false")return null;t=t.childNodes[n-1],n=vn(t)}else if(t.parentNode&&!ks(t))n=Wn(t),t=t.parentNode;else return null}}function mp(i,e){for(let t=i,n=e;;){if(P1(t)&&n=t){if(o.level==n)return r;(s<0||(a!=0?a<0?o.fromt:e[s].level>o.level))&&(s=r)}}if(s<0)throw new RangeError("Index out of range");return s}}function hp(i,e){if(i.length!=e.length)return!1;for(let t=0;t=0;f-=3)if(Yt[f+1]==-h){let b=Yt[f+2],x=b&2?a:b&4?b&1?s:a:0;x&&(xe[c]=xe[Yt[f]]=x),o=f;break}}else{if(Yt.length==189)break;Yt[o++]=c,Yt[o++]=d,Yt[o++]=l}else if((g=xe[c])==2||g==1){let f=g==a;l=f?0:1;for(let b=o-3;b>=0;b-=3){let x=Yt[b+2];if(x&2)break;if(f)Yt[b+2]|=2;else{if(x&4)break;Yt[b+2]|=4}}}}}function KB(i,e,t,n){for(let a=0,s=n;a<=t.length;a++){let r=a?t[a-1].to:i,o=al;)g==b&&(g=t[--f].from,b=f?t[f-1].to:i),xe[--g]=h;l=m}else s=u,l++}}}function dl(i,e,t,n,a,s,r){let o=n%2?2:1;if(n%2==a%2)for(let l=e,u=0;ll&&r.push(new rn(l,f.from,h));let b=f.direction==M1!=!(h%2);hl(i,b?n+1:n,a,f.inner,f.from,f.to,r),l=f.to}g=f.to}else{if(g==t||(m?xe[g]!=o:xe[g]==o))break;g++}d?dl(i,l,g,n+1,a,d,r):le;){let m=!0,c=!1;if(!u||l>s[u-1].to){let f=xe[l-1];f!=o&&(m=!1,c=f==16)}let d=!m&&o==1?[]:null,h=m?n:n+1,g=l;e:for(;;)if(u&&g==s[u-1].to){if(c)break e;let f=s[--u];if(!m)for(let b=f.from,x=u;;){if(b==e)break e;if(x&&s[x-1].to==b)b=s[--x].from;else{if(xe[b-1]==o)break e;break}}if(d)d.push(f);else{f.toxe.length;)xe[xe.length]=256;let n=[],a=e==M1?0:1;return hl(i,a,a,t,0,i.length,n),n}function gp(i){return[new rn(0,i,0)]}let pp="";function tL(i,e,t,n,a){var s;if(!i.length)return null;let r=n.head-i.from,o;if(n.head==i.from&&n.assoc<0){if(!a)return null;r=e[o=0].side(!1,t)}else if(n.head==i.to&&n.assoc>0){if(a)return null;r=e[o=e.length-1].side(!0,t)}else o=rn.find(e,r,(s=n.bidiLevel)!==null&&s!==void 0?s:-1,n.assoc);let l=e[o],u=l.side(a,t);if(r==u){let d=o+=a?1:-1;if(d<0||d>=e.length)return null;l=e[o=d],r=l.side(!a,t),u=l.side(a,t)}let m=rt(i.text,r,l.forward(a,t));(ml.to)&&(m=u),pp=i.text.slice(Math.min(r,m),Math.max(r,m));let c=o==(a?e.length-1:0)?null:e[o+(a?1:-1)];if(m==u){if(!c)return a?D.cursor(i.to,1):D.cursor(i.from,-1);if(c.level+(a?0:1)i.some(e=>e)}),iL=V.define({combine:i=>i.some(e=>e)}),Ip=V.define();class C1{constructor(e,t,n,a,s,r=!1){this.range=e,this.y=t,this.x=n,this.yMargin=a,this.xMargin=s,this.isSnapshot=r}map(e){return e.empty?this:new C1(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new C1(D.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const wa=de.define({map:(i,e)=>i.map(e)}),kp=de.define();function zt(i,e,t){let n=i.facet(vp);n.length?n[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}const gn=V.define({combine:i=>i.length?i[0]:!0});let aL=0;const y1=V.define({combine(i){return i.filter((e,t)=>{for(let n=0;n{let l=[];return r&&l.push(ar.of(u=>{let m=u.plugin(o);return m?r(m):he.none})),s&&l.push(s(o)),l})}static fromClass(e,t){return Wt.define((n,a)=>new e(n,a),t)}}class Lr{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(n){if(zt(t.state,n,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){zt(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(n){zt(e.state,n,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const Sp=V.define(),C0=V.define(),ar=V.define(),Tp=V.define(),A0=V.define(),$i=V.define(),_p=V.define();function Vm(i,e){let t=i.state.facet(_p);if(!t.length)return t;let n=t.map(s=>s instanceof Function?s(i):s),a=[];return ie.spans(n,e.from,e.to,{point(){},span(s,r,o,l){let u=s-e.from,m=r-e.from,c=a;for(let d=o.length-1;d>=0;d--,l--){let h=o[d].spec.bidiIsolate,g;if(l>0&&c.length&&(g=c[c.length-1]).to==u&&g.direction==h)g.to=m,c=g.inner;else{let f={from:u,to:m,direction:h,inner:[]};c.push(f),c=f.inner}}}}),Cp(e.text,a)}function Cp(i,e){for(let t of e){if(t.direction==null){for(let n=t.from,a=0;n0;t--){let a=e[t-1];if(!(a.fromA>n.toA)){if(a.toAa.push(new Zt(s,r,o,l))),this.changedRanges=a}static create(e,t,n){return new Ts(e,t,n)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}const sL=[];class je{constructor(e,t,n=0){this.dom=e,this.length=t,this.flags=n,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return sL}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&NB(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let n=t;for(let a of this.children){if(a==e)return n;n+=a.length+a.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t,n){return null}domPosFor(e,t){let n=Wn(this.dom),a=this.length?e>0:t>0;return new Gt(this.parent.dom,n+(a?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof rr)return e;return null}static get(e){return e.cmTile}}class sr extends je{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,n=null,a,s=(e==null?void 0:e.node)==t?e:null,r=0;for(let o of this.children){if(o.sync(e),r+=o.length+o.breakAfter,a=n?n.nextSibling:t.firstChild,s&&a!=o.dom&&(s.written=!0),o.dom.parentNode==t)for(;a&&a!=o.dom;)a=qm(a);else t.insertBefore(o.dom,a);n=o.dom}for(a=n?n.nextSibling:t.firstChild,s&&a&&(s.written=!0);a;)a=qm(a);this.length=r}}function qm(i){let e=i.nextSibling;return i.parentNode.removeChild(i),e}class rr extends sr{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=je.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],n=this,a=0,s=0;;)if(a==n.children.length){if(!t.length)return;n=n.parent,n.breakAfter&&s++,a=t.pop()}else{let r=n.children[a++];if(r instanceof fn)t.push(a),n=r,a=0;else{let o=s+r.length,l=e(r,s);if(l!==void 0)return l;s=o+r.breakAfter}}}resolveBlock(e,t){let n,a=-1,s,r=-1;if(this.blockTiles((o,l)=>{let u=l+o.length;if(e>=l&&e<=u){if(o.isWidget()&&t>=-1&&t<=1){if(o.flags&32)return!0;o.flags&16&&(n=void 0)}(le||e==l&&(t>1?o.length:o.covers(-1)))&&(!s||!o.isWidget()&&s.isWidget())&&(s=o,r=e-l)}}),!n&&!s)throw new Error("No tile at position "+e);return n&&t<0||!s?{tile:n,offset:a}:{tile:s,offset:r}}}class fn extends sr{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let n=new fn(t||document.createElement(e.tagName),e);return t||(n.flags|=4),n}}class D1 extends sr{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,n){let a=new D1(t||document.createElement("div"),e);return(!t||!n)&&(a.flags|=4),a}get domAttrs(){return this.attrs}resolveInline(e,t,n=!1){let a=null,s=-1,r=null,o=-1;function l(m,c){for(let d=0,h=0;d=c&&(g.isComposite()?l(g,c-h):(!r||n&&r.isHidden&&(t>0&&!(r.flags&32)||n&&oL(r,g)))&&(f>c||g.flags&32&&t<=1)?(r=g,o=c-h):(h=-1)&&(a=g,s=c-h)),h=f}}l(this,e);let u=(t<0?a:r)||a||r;return u?{tile:u,offset:u==a?s:o}:null}coordsIn(e,t,n){let a=this.resolveInline(e,t,!0);return a?a.tile.coordsIn(Math.max(0,a.offset),t,n):rL(this)}domIn(e,t){let n=this.resolveInline(e,t);if(n){let{tile:a,offset:s}=n;if(this.dom.contains(a.dom))return a.isText()?new Gt(a.dom,Math.min(a.dom.nodeValue.length,s)):a.domPosFor(s,a.flags&16?1:a.flags&32?-1:t);let r=n.tile.parent,o=!1;for(let l of r.children){if(o)return new Gt(l.dom,0);l==n.tile&&(o=!0)}}return new Gt(this.dom,0)}}function rL(i){let e=i.dom.lastChild;if(!e)return i.dom.getBoundingClientRect();let t=Ua(e);return t[t.length-1]||null}function oL(i,e){let t=i.coordsIn(0,1),n=e.coordsIn(0,1);return t&&n&&n.topa&&(e=a);let s=e,r=e,o=0;e==0&&t<0||e==a&&t>=0?G.chrome||G.gecko||(e?(s--,o=1):r=0)?0:l.length-1];return G.safari&&!o&&u.width==0&&(u=Array.prototype.find.call(l,m=>m.width)||u),n==null?u:Ss(u,(o?o>0:t<0)==n)}static of(e,t){let n=new Yn(t||document.createTextNode(e),e);return t||(n.flags|=2),n}}class l1 extends je{constructor(e,t,n,a){super(e,t,a),this.widget=n}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,n){let a=this.widget.coordsAt(this.dom,e,t);if(a)return a;if(n)return Ss(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let s=this.dom.getClientRects(),r=null;if(!s.length)return null;let o=this.flags&16?!0:this.flags&32?!1:e>0;for(let l=o?s.length-1:0;r=s[l],!(e>0?l==0:l==s.length-1||r.top0==n)}}class lL{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,t,n){let{tile:a,index:s,beforeBreak:r,parents:o}=this;for(;e||t>0;)if(a.isComposite())if(r){if(!e)break;n&&n.break(),e--,r=!1}else if(s==a.children.length){if(!e&&!o.length)break;n&&n.leave(a),r=!!a.breakAfter,{tile:a,index:s}=o.pop(),s++}else{let l=a.children[s],u=l.breakAfter;(t>0?l.length<=e:l.length=0;o--){let l=t.marks[o],u=a.lastChild;if(u instanceof pt&&u.mark.eq(l.mark))u.dom!=l.dom&&u.setDOM(Wr(l.dom)),a=u;else{let{dom:m}=l;this.cache.reused.get(l)&&je.get(l.dom)&&(m=Wr(l.dom));let c=pt.of(l.mark,m);a.append(c),a=c}this.cache.reused.set(l,2)}let s=je.get(e.text);s&&this.cache.reused.set(s,2);let r=new Yn(e.text,e.text.nodeValue);r.flags|=8,this.pos=e.range.toB,a.append(r)}addInlineWidget(e,t,n){let a=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);a||this.flushBuffer();let s=this.ensureMarks(t,n);!a&&!(e.flags&16)&&s.append(this.getBuffer(1)),s.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,n){this.flushBuffer(),this.ensureMarks(t,n).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var n;e||(e=jp);let a=D1.start(e,t||((n=this.cache.find(D1))===null||n===void 0?void 0:n.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=a)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var n;let a=this.curLine;for(let s=e.length-1;s>=0;s--){let r=e[s],o;if(t>0&&(o=a.lastChild)&&o instanceof pt&&o.mark.eq(r))a=o,t--;else{let l=pt.of(r,(n=this.cache.find(pt,u=>u.mark.eq(r)))===null||n===void 0?void 0:n.dom);a.append(l),a=l,t=0}}return a}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!Qm(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(G.ios&&Qm(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(Er,0,32)||new l1(Er.toDOM(),0,Er,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=e.rank*102+e.value.rank,n=new uL(e.from,e.to,e.value,t),a=this.wrappers.length;for(;a>0&&(this.wrappers[a-1].rank-n.rank||this.wrappers[a-1].to-n.to)<0;)a--;this.wrappers.splice(a,0,n)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let n of this.wrappers){let a=t.lastChild;if(n.fromr.wrapper.eq(n.wrapper)))===null||e===void 0?void 0:e.dom);t.append(s),t=s}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),n=this.cache.find(_s,void 0,1);return n&&(n.flags=t),n||new _s(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}}class cL{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:a,lineBreak:s,done:r}=this.cursor.next(this.skipCount);if(this.skipCount=0,r)throw new Error("Ran out of text content when drawing inline views");this.text=a;let o=this.textOff=Math.min(e,a.length);return s?null:a.slice(0,o)}let t=Math.min(this.text.length,this.textOff+e),n=this.text.slice(this.textOff,t);return this.textOff=t,n}}const Cs=[l1,D1,Yn,pt,_s,fn,rr];for(let i=0;i[]),this.index=Cs.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,n=this.buckets[t];n.length<6?n.push(e):n[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,n=2){let a=e.bucket,s=this.buckets[a],r=this.index[a];for(let o=0;o{if(this.cache.add(r),r.isComposite())return!1},enter:r=>this.cache.add(r),leave:()=>{},break:()=>{}}}run(e,t){let n=t&&this.getCompositionContext(t.text);for(let a=0,s=0,r=0;;){let o=ra){let u=l-a;this.preserve(u,!r,!o),a=l,s+=u}if(!o)break;t&&o.fromA<=t.range.fromA&&o.toA>=t.range.toA?(this.forward(o.fromA,t.range.fromA,t.range.fromA{if(r.isWidget())if(this.openWidget)this.builder.continueWidget(l-o);else{let u=l>0||o{r.isLine()?this.builder.addLineStart(r.attrs,this.cache.maybeReuse(r)):(this.cache.add(r),r instanceof pt&&a.unshift(r.mark)),this.openWidget=!1},leave:r=>{r.isLine()?a.length&&(a.length=s=0):r instanceof pt&&(a.shift(),s=Math.min(s,a.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let n=null,a=this.builder,s=-1,r=ie.spans(this.decorations,e,t,{point:(o,l,u,m,c,d)=>{if(u instanceof o1){if(this.disallowBlockEffectsFor[d]){if(u.block)throw new RangeError("Block decorations may not be specified via plugins");if(l>this.view.state.doc.lineAt(o).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(s=m.length,c>m.length)a.continueWidget(l-o);else{let h=u.widget||(u.block?Z1.block:Z1.inline),g=gL(u),f=this.cache.findWidget(h,l-o,g)||l1.of(h,this.view,l-o,g);u.block?(u.startSide>0&&a.addLineStartIfNotCovered(n),a.addBlockWidget(f)):(a.ensureLine(n),a.addInlineWidget(f,m,c))}n=null}else n=pL(n,u);l>o&&this.text.skip(l-o)},span:(o,l,u,m)=>{for(let c=o;c-1&&(this.openWidget=r>s),this.openWidget||a.addLineStartIfNotCovered(n),this.openMarks=r}forward(e,t,n=1){t-e<=10?this.old.advance(t-e,n,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,n,this.reuseWalker))}getCompositionContext(e){let t=[],n=null;for(let a=e.parentNode;;a=a.parentNode){let s=je.get(a);if(a==this.view.contentDOM)break;s instanceof pt?t.push(s):s!=null&&s.isLine()?n=s:s instanceof fn||(a.nodeName=="DIV"&&!n?n=new D1(a,jp):n||t.push(pt.of(new Qi({tagName:a.nodeName.toLowerCase(),attributes:JB(a)}),a)))}return n?{line:n,marks:t}:null}}function Qm(i,e){let t=n=>{for(let a of n.children)if((e?a.isText():a.length)||t(a))return!0;return!1};return t(i)}function gL(i){let e=i.isReplace?(i.startSide<0?64:0)|(i.endSide>0?128:0):i.startSide>0?32:16;return i.block&&(e|=256),e}const jp={class:"cm-line"};function pL(i,e){let t=e.spec.attributes,n=e.spec.class;return!t&&!n||(i||(i={class:"cm-line"}),t&&I0(t,i),n&&(i.class+=" "+n)),i}function fL(i){let e=[];for(let t=i.parents.length;t>1;t--){let n=t==i.parents.length?i.tile:i.parents[t].tile;n instanceof pt&&e.push(n.mark)}return e}function Wr(i){let e=je.get(i);return e&&e.setDOM(i.cloneNode()),i}class Z1 extends N1{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}Z1.inline=new Z1("span");Z1.block=new Z1("div");const Er=new class extends N1{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}};class Um{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=he.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new rr(e,e.contentDOM),this.updateInner([new Zt(0,0,0,e.state.doc.length)],null)}update(e){var t;let n=e.changedRanges;this.minWidth>0&&n.length&&(n.every(({fromA:m,toA:c})=>cthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let a=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?a=this.domChanged.newSel.head:!SL(e.changes,this.hasComposition)&&!e.selectionSet&&(a=e.state.selection.main.head));let s=a>-1?xL(this.view,e.changes,a):null;if(this.domChanged=null,this.hasComposition){let{from:m,to:c}=this.hasComposition;n=new Zt(m,c,e.changes.mapPos(m,-1),e.changes.mapPos(c,1)).addToSet(n.slice())}this.hasComposition=s?{from:s.range.fromB,to:s.range.toB}:null,(G.ie||G.chrome)&&!s&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let r=this.decorations,o=this.blockWrappers;this.updateDeco();let l=wL(r,this.decorations,e.changes);l.length&&(n=Zt.extendWithRanges(n,l));let u=IL(o,this.blockWrappers,e.changes);return u.length&&(n=Zt.extendWithRanges(n,u)),s&&!n.some(m=>m.fromA<=s.range.fromA&&m.toA>=s.range.toA)&&(n=s.range.addToSet(n.slice())),this.tile.flags&2&&n.length==0?!1:(this.updateInner(n,s),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:n}=this.view;n.ignore(()=>{if(t||e.length){let r=this.tile,o=new hL(this.view,r,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&je.get(t.text)&&o.cache.reused.set(je.get(t.text),2),this.tile=o.run(e,t),pl(r,o.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let s=G.chrome||G.ios?{node:n.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(s),s&&(s.written||n.selectionRange.focusNode!=s.node||!this.tile.dom.contains(s.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let a=[];if(this.view.viewport.from||this.view.viewport.to-1)&&bi(n,this.view.observer.selectionRange)&&!(a&&n.contains(a));if(!(s||t||r))return;let o=this.forceSelection;this.forceSelection=!1;let l=this.view.state.selection.main,u,m;if(l.empty?m=u=this.inlineDOMNearPos(l.anchor,l.assoc||1):(m=this.inlineDOMNearPos(l.head,l.head==l.from?1:-1),u=this.inlineDOMNearPos(l.anchor,l.anchor==l.from?1:-1)),G.gecko&&l.empty&&!this.hasComposition&&bL(u)){let d=document.createTextNode("");this.view.observer.ignore(()=>u.node.insertBefore(d,u.node.childNodes[u.offset]||null)),u=m=new Gt(d,0),o=!0}let c=this.view.observer.selectionRange;(o||!c.focusNode||(!xi(u.node,u.offset,c.anchorNode,c.anchorOffset)||!xi(m.node,m.offset,c.focusNode,c.focusOffset))&&!this.suppressWidgetCursorChange(c,l))&&(this.view.observer.ignore(()=>{G.android&&G.chrome&&n.contains(c.focusNode)&&kL(c.focusNode,n)&&(n.blur(),n.focus({preventScroll:!0}));let d=Di(this.view.root);if(d)if(l.empty){if(G.gecko){let h=vL(u.node,u.offset);if(h&&h!=3){let g=(h==1?up:mp)(u.node,u.offset);g&&(u=new Gt(g.node,g.offset))}}d.collapse(u.node,u.offset),l.bidiLevel!=null&&d.caretBidiLevel!==void 0&&(d.caretBidiLevel=l.bidiLevel)}else if(d.extend){d.collapse(u.node,u.offset);try{d.extend(m.node,m.offset)}catch{}}else{let h=document.createRange();l.anchor>l.head&&([u,m]=[m,u]),h.setEnd(m.node,m.offset),h.setStart(u.node,u.offset),d.removeAllRanges(),d.addRange(h)}r&&this.view.root.activeElement==n&&(n.blur(),a&&a.focus())}),this.view.observer.setSelectionRange(u,m)),this.impreciseAnchor=u.precise?null:new Gt(c.anchorNode,c.anchorOffset),this.impreciseHead=m.precise?null:new Gt(c.focusNode,c.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&xi(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,n=Di(e.root),{anchorNode:a,anchorOffset:s}=e.observer.selectionRange;if(!n||!t.empty||!t.assoc||!n.modify)return;let r=this.lineAt(t.head,t.assoc);if(!r)return;let o=r.posAtStart;if(t.head==o||t.head==o+r.length)return;let l=this.coordsAt(t.head,-1),u=this.coordsAt(t.head,1);if(!l||!u||l.bottom>u.top)return;let m=this.domAtPos(t.head+t.assoc,t.assoc);n.collapse(m.node,m.offset),n.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let c=e.observer.selectionRange;e.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=t.from&&n.collapse(a,s)}posFromDOM(e,t){let n=this.tile.nearest(e);if(!n)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let a=n.posAtStart;if(n.isComposite()){let s;if(e==n.dom)s=n.dom.childNodes[t];else{let r=vn(e)==0?0:t==0?-1:1;for(;;){let o=e.parentNode;if(o==n.dom)break;r==0&&o.firstChild!=o.lastChild&&(e==o.firstChild?r=-1:r=1),e=o}r<0?s=e:s=e.nextSibling}if(s==n.dom.firstChild)return a;for(;s&&!je.get(s);)s=s.nextSibling;if(!s)return a+n.length;for(let r=0,o=a;;r++){let l=n.children[r];if(l.dom==s)return o;o+=l.length+l.breakAfter}}else return n.isText()?e==n.dom?a+t:a+(t?n.length:0):a}domAtPos(e,t){let{tile:n,offset:a}=this.tile.resolveBlock(e,t);return n.isWidget()?n.domPosFor(a,t):n.domIn(a,t)}inlineDOMNearPos(e,t){let n,a=-1,s=!1,r,o=-1,l=!1;return this.tile.blockTiles((u,m)=>{if(u.isWidget()){if(u.flags&32&&m>=e)return!0;u.flags&16&&(s=!0)}else{let c=m+u.length;if(m<=e&&(n=u,a=e-m,s=c=e&&!r&&(r=u,o=e-m,l=m>e),m>e&&r)return!0}}),!n&&!r?this.domAtPos(e,t):(s&&r?n=null:l&&n&&(r=null),n&&t<0||!r?n.domIn(a,t):r.domIn(o,t))}coordsAt(e,t,n){let{tile:a,offset:s}=this.tile.resolveBlock(e,t);return a.isWidget()?a.widget instanceof Nr?null:a.coordsInWidget(s,t,!0):a.coordsIn(s,t,n)}lineAt(e,t){let{tile:n}=this.tile.resolveBlock(e,t);return n.isLine()?n:null}coordsForChar(e){let{tile:t,offset:n}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function a(s,r){if(s.isComposite())for(let o of s.children){if(o.length>=r){let l=a(o,r);if(l)return l}if(r-=o.length,r<0)break}else if(s.isText()&&rMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,o=-1,l=this.view.textDirection==ye.LTR,u=0,m=(c,d,h)=>{for(let g=0;ga);g++){let f=c.children[g],b=d+f.length,x=f.dom.getBoundingClientRect(),{height:v}=x;if(h&&!g&&(u+=x.top-h.top),f instanceof fn)b>n&&m(f,d,x);else if(d>=n&&(u>0&&t.push(-u),t.push(v+u),u=0,r)){let w=f.dom.lastChild,z=w?Ua(w):[];if(z.length){let I=z[z.length-1],k=l?I.right-x.left:x.right-I.left;k>o&&(o=k,this.minWidth=s,this.minWidthFrom=d,this.minWidthTo=b)}}h&&g==c.children.length-1&&(u+=h.bottom-x.bottom),d=b+f.breakAfter}};return m(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?ye.RTL:ye.LTR}measureTextSize(){let e=this.tile.blockTiles(r=>{if(r.isLine()&&r.children.length&&r.length<=20){let o=0,l;for(let u of r.children){if(!u.isText()||/[^ -~]/.test(u.text))return;let m=Ua(u.dom);if(m.length!=1)return;o+=m[0].width,l=m[0].height}if(o)return{lineHeight:r.dom.getBoundingClientRect().height,charWidth:o/r.length,textHeight:l}}});if(e)return e;let t=document.createElement("div"),n,a,s;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let r=Ua(t.firstChild)[0];n=t.getBoundingClientRect().height,a=r&&r.width?r.width/27:7,s=r&&r.height?r.height:n,t.remove()}),{lineHeight:n,charWidth:a,textHeight:s}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let n=0,a=0;;a++){let s=a==t.viewports.length?null:t.viewports[a],r=s?s.from-1:this.view.state.doc.length;if(r>n){let o=(t.lineBlockAt(r).bottom-t.lineBlockAt(n).top)/this.view.scaleY;e.push(he.replace({widget:new Nr(o),block:!0,inclusive:!0,isBlockGap:!0}).range(n,r))}if(!s)break;n=s.to+1}return he.set(e)}updateDeco(){let e=1,t=this.view.state.facet(ar).map(s=>(this.dynamicDecorationMap[e++]=typeof s=="function")?s(this.view):s),n=!1,a=this.view.state.facet(A0).map((s,r)=>{let o=typeof s=="function";return o&&(n=!0),o?s(this.view):s});for(a.length&&(this.dynamicDecorationMap[e++]=n,t.push(ie.join(a))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof s=="function"?s(this.view):s)}scrollIntoView(e){if(e.isSnapshot){let u=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=u.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let u of this.view.state.facet(Ip))try{if(u(this.view,e.range,e))return!0}catch(m){zt(this.view.state,m,"scroll handler")}let{range:t}=e,n=this.coordsAt(t.head,t.assoc||(t.head>t.anchor?-1:1)),a;if(!n)return;!t.empty&&(a=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(n={left:Math.min(n.left,a.left),top:Math.min(n.top,a.top),right:Math.max(n.right,a.right),bottom:Math.max(n.bottom,a.bottom)});let s=j0(this.view),r={left:n.left-s.left,top:n.top-s.top,right:n.right+s.right,bottom:n.bottom+s.bottom},{offsetWidth:o,offsetHeight:l}=this.view.scrollDOM;if(GB(this.view.scrollDOM,r,t.head1&&(n.top>window.visualViewport.offsetTop+window.visualViewport.height||n.bottomn.isWidget()||n.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){pl(this.tile)}}function pl(i,e){let t=e==null?void 0:e.get(i);if(t!=1){t==null&&i.destroy();for(let n of i.children)pl(n,e)}}function bL(i){return He(i.node)&&i.node.firstChild&&(i.offset==0||i.node.childNodes[i.offset-1].contentEditable=="false")&&(i.offset==i.node.childNodes.length||i.node.childNodes[i.offset].contentEditable=="false")}function Op(i,e){let t=i.observer.selectionRange;if(!t.focusNode)return null;let n=up(t.focusNode,t.focusOffset),a=mp(t.focusNode,t.focusOffset),s=n||a;if(a&&n&&a.node!=n.node){let o=je.get(a.node);if(!o||o.isText()&&o.text!=a.node.nodeValue)s=a;else if(i.docView.lastCompositionAfterCursor){let l=je.get(n.node);!l||l.isText()&&l.text!=n.node.nodeValue||(s=a)}}if(i.docView.lastCompositionAfterCursor=s!=n,!s)return null;let r=e-s.offset;return{from:r,to:r+s.node.nodeValue.length,node:s.node}}function xL(i,e,t){let n=Op(i,t);if(!n)return null;let{node:a,from:s,to:r}=n,o=a.nodeValue;if(/[\n\r]/.test(o)||i.state.doc.sliceString(n.from,n.to)!=o)return null;let l=e.invertedDesc;return{range:new Zt(l.mapPos(s),l.mapPos(r),s,r),text:a}}function vL(i,e){return He(i)?(e&&i.childNodes[e-1].contentEditable=="false"?1:0)|(e{ne.from&&(t=!0)}),t}class Nr extends N1{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function TL(i,e,t=1){let n=i.charCategorizer(e),a=i.doc.lineAt(e),s=e-a.from;if(a.length==0)return D.cursor(e);s==0?t=1:s==a.length&&(t=-1);let r=s,o=s;t<0?r=rt(a.text,s,!1):o=rt(a.text,s);let l=n(a.text.slice(r,o));for(;r>0;){let u=rt(a.text,r,!1);if(n(a.text.slice(u,r))!=l)break;r=u}for(;oi.defaultLineHeight*1.5){let o=i.viewState.heightOracle.textHeight,l=Math.floor((a-t.top-(i.defaultLineHeight-o)*.5)/o);s+=l*i.viewState.heightOracle.lineLength}let r=i.state.sliceDoc(t.from,t.to);return t.from+ZB(r,s,i.state.tabSize)}function fl(i,e,t){let n=i.lineBlockAt(e);if(Array.isArray(n.type)){let a;for(let s of n.type){if(s.from>e)break;if(!(s.toe)return s;(!a||s.type==Ye.Text&&(a.type!=s.type||(t<0?s.frome)))&&(a=s)}}return a||n}return n}function CL(i,e,t,n){let a=fl(i,e.head,e.assoc||-1),s=!n||a.type!=Ye.Text||!(i.lineWrapping||a.widgetLineBreaks)?null:i.coordsAtPos(e.assoc<0&&e.head>a.from?e.head-1:e.head);if(s){let r=i.dom.getBoundingClientRect(),o=i.textDirectionAt(a.from),l=i.posAndSideAtCoords({x:t==(o==ye.LTR)?r.right-1:r.left+1,y:(s.top+s.bottom)/2});if(l)return D.cursor(l.pos,l.assoc)}return D.cursor(t?a.to:a.from,t?1:-1)}function $m(i,e,t,n){let a=i.state.doc.lineAt(e.head),s=i.bidiSpans(a),r=i.textDirectionAt(a.from);for(let o=e,l=null;;){let u=tL(a,s,r,o,t),m=pp;if(!u){if(a.number==(t?i.state.doc.lines:1))return o;m=` -`,a=i.state.doc.line(a.number+(t?1:-1)),s=i.bidiSpans(a),u=t?D.cursor(a.from,-1):D.cursor(a.to,1)}if(l){if(!l(m))return o}else{if(!n)return u;l=n(m)}o=u}}function AL(i,e,t){let n=i.state.charCategorizer(e),a=n(t);return s=>{let r=n(s);return a==Dt.Space&&(a=r),a==r}}function jL(i,e,t,n){let a=e.head,s=t?1:-1;if(a==(t?i.state.doc.length:0))return D.cursor(a,e.assoc);let r=e.goalColumn,o,l=i.contentDOM.getBoundingClientRect(),u=i.coordsAtPos(a,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),m=i.documentTop;if(u)r==null&&(r=u.left-l.left),o=s<0?u.top:u.bottom;else{let g=i.viewState.lineBlockAt(a);r==null&&(r=Math.min(l.right-l.left,i.defaultCharacterWidth*(a-g.from))),o=(s<0?g.top:g.bottom)+m}let c=l.left+r,d=i.viewState.heightOracle.textHeight>>1,h=n??d;for(let g=0;;g+=d){let f=o+(h+g)*s,b=bl(i,{x:c,y:f},!1,s);if(t?f>l.bottom:fo:v{if(e>s&&ea(i)),t.from,e.head>t.from?-1:1);return n==t.from?t:D.cursor(n,ni.viewState.docHeight)return new sn(i.state.doc.length,-1);if(u=i.elementAtHeight(l),n==null)break;if(u.type==Ye.Text){if(n<0?u.toi.viewport.to)break;let d=i.docView.coordsAt(n<0?u.from:u.to,n>0?-1:1);if(d&&(n<0?d.top<=l+s:d.bottom>=l+s))break}let c=i.viewState.heightOracle.textHeight/2;l=n>0?u.bottom+c:u.top-c}if(i.viewport.from>=u.to||i.viewport.to<=u.from){if(t)return null;if(u.type==Ye.Text){let c=_L(i,a,u,r,o);return new sn(c,c==u.from?1:-1)}}if(u.type!=Ye.Text)return l<(u.top+u.bottom)/2?new sn(u.from,1):new sn(u.to,-1);let m=i.docView.lineAt(u.from,2);return(!m||m.length!=u.length)&&(m=i.docView.lineAt(u.from,-2)),new OL(i,r,o,i.textDirectionAt(u.from)).scanTile(m,u.from)}class OL{constructor(e,t,n,a){this.view=e,this.x=t,this.y=n,this.baseDir=a,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||n.length&&(n[0].level!=this.baseDir||n[0].to+a.from>1;t:if(r.has(f)){for(let v=1;v=s&&(w-=g),!r.has(w)){f=w;break t}}break e}r.add(f);let b=t(f),x=0;if(b)for(let v=0;v1))if(w.bottomthis.y)(!u||u.top>w.top)&&(u=w),x=-1;else{let z=w.left>this.x?this.x-w.left:w.right(g+g+f)/3)return this.y=l.bottom-1,this.scan(e,t,!0);if(u&&u.top<(g+f+f)/3)return this.y=u.top+1,this.scan(e,t,!0)}let h=(o?this.dirAt(e[m],1):this.baseDir)==ye.LTR;return{i:m,after:this.x>(d.left+d.right)/2==h}}scanText(e,t){let n=[];for(let s=0;s{let r=n[s]-t,o=n[s+1]-t;return Zi(e.dom,r,o).getClientRects()});return a.after?new sn(n[a.i+1],-1):new sn(n[a.i],1)}scanTile(e,t){if(!e.length)return new sn(t,1);if(e.children.length==1){let o=e.children[0];if(o.isText())return this.scanText(o,t);if(o.isComposite())return this.scanTile(o,t)}let n=[t];for(let o=0,l=t;o{let l=e.children[o];return l.flags&48?null:(He(l.dom)?l.dom:Zi(l.dom,0,l.length)).getClientRects()}),s=e.children[a.i],r=n[a.i];return s.isText()?this.scanText(s,r):s.isComposite()?this.scanTile(s,r):a.after?new sn(n[a.i+1],-1):new sn(r,1)}}const b1="￿";class PL{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(re.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=b1}readRange(e,t){if(!e)return this;let n=e.parentNode;for(let a=e;;){this.findPointBefore(n,a);let s=this.text.length;this.readNode(a);let r=je.get(a),o=a.nextSibling;if(o==t){r!=null&&r.breakAfter&&!o&&n!=this.view.contentDOM&&this.lineBreak();break}let l=je.get(o);(r&&l?r.breakAfter:(r?r.breakAfter:ks(a))||ks(o)&&(a.nodeName!="BR"||r!=null&&r.isWidget())&&this.text.length>s)&&!DL(o,t)&&this.lineBreak(),a=o}return this.findPointBefore(n,t),this}readTextNode(e){let t=e.nodeValue;for(let n of this.points)n.node==e&&(n.pos=this.text.length+Math.min(n.offset,t.length));for(let n=0,a=this.lineSeparator?null:/\r\n?|\n/g;;){let s=-1,r=1,o;if(this.lineSeparator?(s=t.indexOf(this.lineSeparator,n),r=this.lineSeparator.length):(o=a.exec(t))&&(s=o.index,r=o[0].length),this.append(t.slice(n,s<0?t.length:s)),s<0)break;if(this.lineBreak(),r>1)for(let l of this.points)l.node==e&&l.pos>this.text.length&&(l.pos-=r-1);n=s+r}}readNode(e){let t=je.get(e),n=t&&t.overrideDOMText;if(n!=null){this.findPointInside(e,n.length);for(let a=n.iter();!a.next().done;)a.lineBreak?this.lineBreak():this.append(a.value)}else P1(e)?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():He(e)&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let n of this.points)n.node==e&&e.childNodes[n.offset]==t&&(n.pos=this.text.length)}findPointInside(e,t){for(let n of this.points)(P1(e)?n.node==e:e.contains(n.node))&&(n.pos=this.text.length+(ML(e,n.node,n.offset)?t:0))}}function ML(i,e,t){for(;;){if(!e||t-1;let{impreciseHead:s,impreciseAnchor:r}=e.docView,o=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=Mp(e.docView.tile,t,n,0))){let l=s||r?[]:LL(e),u=new PL(l,e);u.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=u.text,this.newSel=WL(l,this.bounds.from)}else{let l=e.observer.selectionRange,u=s&&s.node==l.focusNode&&s.offset==l.focusOffset||!ml(e.contentDOM,l.focusNode)?o.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),m=r&&r.node==l.anchorNode&&r.offset==l.anchorOffset||!ml(e.contentDOM,l.anchorNode)?o.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset),c=e.viewport;if((G.ios||G.chrome)&&u!=m&&Math.min(u,m)<=o.main.from&&Math.max(u,m)>=o.main.to&&(c.from>0||c.to-1&&o.ranges.length>1)this.newSel=o.replaceRange(D.range(m,u));else if(e.lineWrapping&&m==u&&!(o.main.empty&&o.main.head==u)&&e.inputState.lastTouchTime>Date.now()-100){let d=e.coordsAtPos(u,-1),h=0;d&&(h=e.inputState.lastTouchY<=d.bottom?-1:1),this.newSel=D.create([D.cursor(u,h)])}else this.newSel=D.single(m,u)}}}function Mp(i,e,t,n){if(i.isComposite()){let a=-1,s=-1,r=-1,o=-1;for(let l=0,u=n,m=n;lt)return Mp(c,e,t,u);if(d>=e&&a==-1&&(a=l,s=u),u>t&&c.dom.parentNode==i.dom){r=l,o=m;break}m=d,u=d+c.breakAfter}return{from:s,to:o<0?n+i.length:o,startDOM:(a?i.children[a-1].dom.nextSibling:null)||i.dom.firstChild,endDOM:r=0?i.children[r].dom:null}}else return i.isText()?{from:n,to:n+i.length,startDOM:i.dom,endDOM:i.dom.nextSibling}:null}function Dp(i,e){let t,{newSel:n}=e,{state:a}=i,s=a.selection.main,r=i.inputState.lastKeyTime>Date.now()-100?i.inputState.lastKeyCode:-1;if(e.bounds){let{from:o,to:l}=e.bounds,u=s.from,m=null;(r===8||G.android&&e.text.length=o&&s.to<=l&&(e.typeOver||c!=e.text)&&c.slice(0,s.from-o)==e.text.slice(0,s.from-o)&&c.slice(s.to-o)==e.text.slice(d=e.text.length-(c.length-(s.to-o)))?t={from:s.from,to:s.to,insert:oe.of(e.text.slice(s.from-o,d).split(b1))}:(h=Zp(c,e.text,u-o,m))&&(G.chrome&&r==13&&h.toB==h.from+2&&e.text.slice(h.from,h.toB)==b1+b1&&h.toB--,t={from:o+h.from,to:o+h.toA,insert:oe.of(e.text.slice(h.from,h.toB).split(b1))})}else n&&(!i.hasFocus&&a.facet(gn)||xl(n,s))&&(n=null);if(!t&&!n)return!1;if((G.mac||G.android)&&t&&t.from==t.to&&t.from==s.head-1&&/^\. ?$/.test(t.insert.toString())&&i.contentDOM.getAttribute("autocorrect")=="off"?(n&&t.insert.length==2&&(n=D.single(n.main.anchor-1,n.main.head-1)),t={from:t.from,to:t.to,insert:oe.of([t.insert.toString().replace("."," ")])}):a.doc.lineAt(s.from).toDate.now()-50?t={from:s.from,to:s.to,insert:a.toText(i.inputState.insertingText)}:G.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==` - `&&i.lineWrapping&&(n&&(n=D.single(n.main.anchor-1,n.main.head-1)),t={from:s.from,to:s.to,insert:oe.of([" "])}),t)return O0(i,t,n,r);if(n&&!xl(n,s)){let o=!1,l="select";return i.inputState.lastSelectionTime>Date.now()-50&&(i.inputState.lastSelectionOrigin=="select"&&(o=!0),l=i.inputState.lastSelectionOrigin,l=="select.pointer"&&(n=Pp(a.facet($i).map(u=>u(i)),n))),i.dispatch({selection:n,scrollIntoView:o,userEvent:l}),!0}else return!1}function O0(i,e,t,n=-1){if(G.ios&&i.inputState.flushIOSKey(e))return!0;let a=i.state.selection.main;if(G.android&&(e.to==a.to&&(e.from==a.from||e.from==a.from-1&&i.state.sliceDoc(e.from,a.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&_1(i.contentDOM,"Enter",13)||(e.from==a.from-1&&e.to==a.to&&e.insert.length==0||n==8&&e.insert.lengtha.head)&&_1(i.contentDOM,"Backspace",8)||e.from==a.from&&e.to==a.to+1&&e.insert.length==0&&_1(i.contentDOM,"Delete",46)))return!0;let s=e.insert.toString();i.inputState.composing>=0&&i.inputState.composing++;let r,o=()=>r||(r=BL(i,e,t));return i.state.facet(yp).some(l=>l(i,e.from,e.to,s,o))||i.dispatch(o()),!0}function BL(i,e,t){let n,a=i.state,s=a.selection.main,r=-1;if(e.from==e.to&&e.froms.to){let l=e.fromc(i)),u,l);e.from==m&&(r=m)}if(r>-1)n={changes:e,selection:D.cursor(e.from+e.insert.length,-1)};else if(e.from>=s.from&&e.to<=s.to&&e.to-e.from>=(s.to-s.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&i.inputState.composing<0){let l=s.frome.to?a.sliceDoc(e.to,s.to):"";n=a.replaceSelection(i.state.toText(l+e.insert.sliceString(0,void 0,i.state.lineBreak)+u))}else{let l=a.changes(e),u=t&&t.main.to<=l.newLength?t.main:void 0;if(a.selection.ranges.length>1&&(i.inputState.composing>=0||i.inputState.compositionPendingChange)&&e.to<=s.to+10&&e.to>=s.to-10){let m=i.state.sliceDoc(e.from,e.to),c,d=t&&Op(i,t.main.head);if(d){let g=e.insert.length-(e.to-e.from);c={from:d.from,to:d.to-g}}else c=i.state.doc.lineAt(s.head);let h=s.to-e.to;n=a.changeByRange(g=>{if(g.from==s.from&&g.to==s.to)return{changes:l,range:u||g.map(l)};let f=g.to-h,b=f-m.length;if(i.state.sliceDoc(b,f)!=m||f>=c.from&&b<=c.to)return{range:g};let x=a.changes({from:b,to:f,insert:e.insert}),v=g.to-s.to;return{changes:x,range:u?D.range(Math.max(0,u.anchor+v),Math.max(0,u.head+v)):g.map(x)}})}else n={changes:l,selection:u&&a.selection.replaceRange(u)}}let o="input.type";return(i.composing||i.inputState.compositionPendingChange&&i.inputState.compositionEndedAt>Date.now()-50)&&(i.inputState.compositionPendingChange=!1,o+=".compose",i.inputState.compositionFirstChange&&(o+=".start",i.inputState.compositionFirstChange=!1)),a.update(n,{userEvent:o,scrollIntoView:!0})}function Zp(i,e,t,n){let a=Math.min(i.length,e.length),s=0;for(;s0&&o>0&&i.charCodeAt(r-1)==e.charCodeAt(o-1);)r--,o--;if(n=="end"){let l=Math.max(0,s-Math.min(r,o));t-=r+l-s}if(r=r?s-t:0;s-=l,o=s+(o-r),r=s}else if(o=o?s-t:0;s-=l,r=s+(r-o),o=s}return{from:s,toA:r,toB:o}}function LL(i){let e=[];if(i.root.activeElement!=i.contentDOM)return e;let{anchorNode:t,anchorOffset:n,focusNode:a,focusOffset:s}=i.observer.selectionRange;return t&&(e.push(new Ym(t,n)),(a!=t||s!=n)&&e.push(new Ym(a,s))),e}function WL(i,e){if(i.length==0)return null;let t=i[0].pos,n=i.length==2?i[1].pos:t;return t<0||n<0?null:t==n?D.create([D.cursor(n+e,-1)]):D.single(t+e,n+e)}function xl(i,e){return e.head==i.main.head&&e.anchor==i.main.anchor}class EL{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.touchActive=!1,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.lastIOSMomentumScroll=0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,G.safari&&e.contentDOM.addEventListener("input",()=>null),G.gecko&&tW(e.contentDOM.ownerDocument)}handleEvent(e){!QL(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let n=this.handlers[e];if(n){for(let a of n.observers)a(this.view,t);for(let a of n.handlers){if(t.defaultPrevented)break;if(a(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=JL(e),n=this.handlers,a=this.view.contentDOM;for(let s in t)if(s!="scroll"){let r=!t[s].handlers.length,o=n[s];o&&r!=!o.handlers.length&&(a.removeEventListener(s,this.handleEvent),o=null),o||a.addEventListener(s,this.handleEvent,{passive:r})}for(let s in n)s!="scroll"&&!t[s]&&a.removeEventListener(s,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Lp.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),G.android&&G.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;if(G.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&(Bp.some(t=>t.keyCode==e.keyCode)&&!e.ctrlKey||FL.indexOf(e.key)>-1&&e.ctrlKey)){let t={ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey,shiftKey:e.shiftKey};t.shiftKey&&G.ios&&!/^(off|none)$/.test(this.view.contentDOM.autocapitalize)&&NL(this.view.win)&&(t.shiftKey=!1);let n=this.pendingIOSKey={key:e.key,keyCode:e.keyCode,mods:t};return setTimeout(()=>{this.pendingIOSKey==n&&this.flushIOSKey()},50),!0}return e.keyCode!=229&&this.view.observer.forceFlush(),!1}flushIOSKey(e){let t=this.pendingIOSKey;return!t||this.view.observer.pendingRecords().length||t.key=="Enter"&&e&&e.from0?!0:G.safari&&!G.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function NL(i){return i.visualViewport?i.visualViewport.height*i.visualViewport.scale/i.document.documentElement.clientHeight<.85:!1}function Xm(i,e){return(t,n)=>{try{return e.call(i,n,t)}catch(a){zt(t.state,a)}}}function JL(i){let e=Object.create(null);function t(n){return e[n]||(e[n]={observers:[],handlers:[]})}for(let n of i){let a=n.spec,s=a&&a.plugin.domEventHandlers,r=a&&a.plugin.domEventObservers;if(s)for(let o in s){let l=s[o];l&&t(o).handlers.push(Xm(n.value,l))}if(r)for(let o in r){let l=r[o];l&&t(o).observers.push(Xm(n.value,l))}}for(let n in Vt)t(n).handlers.push(Vt[n]);for(let n in ct)t(n).observers.push(ct[n]);return e}const Bp=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],FL="dthko",Lp=[16,17,18,20,91,92,224,225],za=6;function Ia(i){return Math.max(0,i)*.7+8}function RL(i,e){return Math.max(Math.abs(i.clientX-e.clientX),Math.abs(i.clientY-e.clientY))}class GL{constructor(e,t,n,a){this.view=e,this.startEvent=t,this.style=n,this.mustSelect=a,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=ap(e.contentDOM),this.atoms=e.state.facet($i).map(r=>r(e));let s=e.contentDOM.ownerDocument;s.addEventListener("mousemove",this.move=this.move.bind(this)),s.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(re.allowMultipleSelections)&&HL(e,t),this.dragging=qL(e,t)&&Np(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&RL(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,n=0,a=0,s=0,r=this.view.win.innerWidth,o=this.view.win.innerHeight;this.scrollParents.x&&({left:a,right:r}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:s,bottom:o}=this.scrollParents.y.getBoundingClientRect());let l=j0(this.view);e.clientX-l.left<=a+za?t=-Ia(a-e.clientX):e.clientX+l.right>=r-za&&(t=Ia(e.clientX-r)),e.clientY-l.top<=s+za?n=-Ia(s-e.clientY):e.clientY+l.bottom>=o-za&&(n=Ia(e.clientY-o)),this.setScrollSpeed(t,n)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,n=Pp(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!n.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:n,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function HL(i,e){let t=i.state.facet(fp);return t.length?t[0](e):G.mac?e.metaKey:e.ctrlKey}function VL(i,e){let t=i.state.facet(bp);return t.length?t[0](e):G.mac?!e.altKey:!e.ctrlKey}function qL(i,e){let{main:t}=i.state.selection;if(t.empty)return!1;let n=Di(i.root);if(!n||n.rangeCount==0)return!0;let a=n.getRangeAt(0).getClientRects();for(let s=0;s=e.clientX&&r.top<=e.clientY&&r.bottom>=e.clientY)return!0}return!1}function QL(i,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,n;t!=i.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(n=je.get(t))&&n.isWidget()&&!n.isHidden&&n.widget.ignoreEvent(e))return!1;return!0}const Vt=Object.create(null),ct=Object.create(null),Wp=G.ie&&G.ie_version<15||G.ios&&G.webkit_version<604;function UL(i){let e=i.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{i.focus(),t.remove(),Ep(i,t.value)},50)}function or(i,e,t){for(let n of i.facet(e))t=n(t,i);return t}function Ep(i,e){e=or(i.state,T0,e);let{state:t}=i,n,a=1,s=t.toText(e),r=s.lines==t.selection.ranges.length;if(vl!=null&&t.selection.ranges.every(l=>l.empty)&&vl==s.toString()){let l=-1;n=t.changeByRange(u=>{let m=t.doc.lineAt(u.from);if(m.from==l)return{range:u};l=m.from;let c=t.toText((r?s.line(a++).text:e)+t.lineBreak);return{changes:{from:m.from,insert:c},range:D.cursor(u.from+c.length,-1)}})}else r?n=t.changeByRange(l=>{let u=s.line(a++);return{changes:{from:l.from,to:l.to,insert:u.text},range:D.cursor(l.from+u.length,-1)}}):n=t.replaceSelection(s);i.dispatch(n,{userEvent:"input.paste",scrollIntoView:!0})}ct.scroll=i=>{let e=i.inputState;e.lastScrollTop=i.scrollDOM.scrollTop,e.lastScrollLeft=i.scrollDOM.scrollLeft,G.ios&&!e.touchActive&&(e.lastIOSMomentumScroll=Date.now())};ct.wheel=ct.mousewheel=i=>{i.inputState.lastWheelEvent=Date.now()};Vt.keydown=(i,e)=>(i.inputState.setSelectionOrigin("select"),e.keyCode==27&&i.inputState.tabFocusMode!=0&&(i.inputState.tabFocusMode=Date.now()+2e3),!1);ct.touchstart=(i,e)=>{let t=i.inputState,n=e.targetTouches[0];t.touchActive=!0,t.lastTouchTime=Date.now(),n&&(t.lastTouchX=n.clientX,t.lastTouchY=n.clientY),t.setSelectionOrigin("select.pointer")};ct.touchmove=i=>{i.inputState.setSelectionOrigin("select.pointer")};ct.touchend=(i,e)=>{i.inputState.touchActive=!1};Vt.mousedown=(i,e)=>{if(i.observer.flush(),i.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let n of i.state.facet(xp))if(t=n(i,e),t)break;if(!t&&e.button==0&&(t=YL(i,e)),t){let n=!i.hasFocus;i.inputState.startMouseSelection(new GL(i,e,t,n)),n&&i.observer.ignore(()=>{op(i.contentDOM);let s=i.root.activeElement;s&&!s.contains(i.contentDOM)&&s.blur()});let a=i.inputState.mouseSelection;if(a)return a.start(e),a.dragging===!1}else i.inputState.setSelectionOrigin("select.pointer");return!1};function Km(i,e,t,n){if(n==1)return D.cursor(e,t);if(n==2)return TL(i.state,e,t);{let a=i.docView.lineAt(e,t),s=i.state.doc.lineAt(a?a.posAtEnd:e),r=a?a.posAtStart:s.from,o=a?a.posAtEnd:s.to;return oDate.now()-400&&Math.abs(e.clientX-i.clientX)<2&&Math.abs(e.clientY-i.clientY)<2?(tc+1)%3:1}function YL(i,e){let t=i.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),n=Np(e),a=i.state.selection;return{update(s){s.docChanged&&(t.pos=s.changes.mapPos(t.pos),a=a.map(s.changes))},get(s,r,o){let l=i.posAndSideAtCoords({x:s.clientX,y:s.clientY},!1),u,m=Km(i,l.pos,l.assoc,n);if(t.pos!=l.pos&&!r){let c=Km(i,t.pos,t.assoc,n),d=Math.min(c.from,m.from),h=Math.max(c.to,m.to);m=d1&&(u=XL(a,l.pos))?u:o?a.addRange(m):D.create([m])}}}function XL(i,e){for(let t=0;t=e)return D.create(i.ranges.slice(0,t).concat(i.ranges.slice(t+1)),i.mainIndex==t?0:i.mainIndex-(i.mainIndex>t?1:0))}return null}Vt.dragstart=(i,e)=>{let{selection:{main:t}}=i.state;if(e.target.draggable){let a=i.docView.tile.nearest(e.target);if(a&&a.isWidget()){let s=a.posAtStart,r=s+a.length;(s>=t.to||r<=t.from)&&(t=D.undirectionalRange(s,r))}}let{inputState:n}=i;return n.mouseSelection&&(n.mouseSelection.dragging=!0),n.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",or(i.state,_0,i.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Vt.dragend=i=>(i.inputState.draggedContent=null,!1);function ic(i,e,t,n){if(t=or(i.state,T0,t),!t)return;let a=i.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:s}=i.inputState,r=n&&s&&VL(i,e)?{from:s.from,to:s.to}:null,o={from:a,insert:t},l=i.state.changes(r?[r,o]:o);i.focus(),i.dispatch({changes:l,selection:{anchor:l.mapPos(a,-1),head:l.mapPos(a,1)},userEvent:r?"move.drop":"input.drop"}),i.inputState.draggedContent=null}Vt.drop=(i,e)=>{if(!e.dataTransfer)return!1;if(i.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let n=Array(t.length),a=0,s=()=>{++a==t.length&&ic(i,e,n.filter(r=>r!=null).join(i.state.lineBreak),!1)};for(let r=0;r{/[\x00-\x08\x0e-\x1f]{2}/.test(o.result)||(n[r]=o.result),s()},o.readAsText(t[r])}return!0}else{let n=e.dataTransfer.getData("Text");if(n)return ic(i,e,n,!0),!0}return!1};Vt.paste=(i,e)=>{if(i.state.readOnly)return!0;i.observer.flush();let t=Wp?null:e.clipboardData;return t?(Ep(i,t.getData("text/plain")||t.getData("text/uri-list")),!0):(UL(i),!1)};function KL(i,e){let t=i.dom.parentNode;if(!t)return;let n=t.appendChild(document.createElement("textarea"));n.style.cssText="position: fixed; left: -10000px; top: 10px",n.value=e,n.focus(),n.selectionEnd=e.length,n.selectionStart=0,setTimeout(()=>{n.remove(),i.focus()},50)}function eW(i){let e=[],t=[],n=!1;for(let a of i.selection.ranges)a.empty||(e.push(i.sliceDoc(a.from,a.to)),t.push(a));if(!e.length){let a=-1;for(let{from:s}of i.selection.ranges){let r=i.doc.lineAt(s);r.number>a&&(e.push(r.text),t.push({from:r.from,to:Math.min(i.doc.length,r.to+1)})),a=r.number}n=!0}return{text:or(i,_0,e.join(i.lineBreak)),ranges:t,linewise:n}}let vl=null;Vt.copy=Vt.cut=(i,e)=>{if(!bi(i.contentDOM,i.observer.selectionRange))return!1;let{text:t,ranges:n,linewise:a}=eW(i.state);if(!t&&!a)return!1;vl=a?t:null,e.type=="cut"&&!i.state.readOnly&&i.dispatch({changes:n,scrollIntoView:!0,userEvent:"delete.cut"});let s=Wp?null:e.clipboardData;return s?(s.clearData(),s.setData("text/plain",t),!0):(KL(i,t),!1)};const Jp=Nn.define();function Fp(i,e){let t=[];for(let n of i.facet(wp)){let a=n(i,e);a&&t.push(a)}return t.length?i.update({effects:t,annotations:Jp.of(!0)}):null}function Rp(i){setTimeout(()=>{let e=i.hasFocus;if(e!=i.inputState.notifiedFocused){let t=Fp(i.state,e);t?i.dispatch(t):i.update([])}},10)}ct.focus=i=>{i.inputState.lastFocusTime=Date.now(),!i.scrollDOM.scrollTop&&(i.inputState.lastScrollTop||i.inputState.lastScrollLeft)&&(i.scrollDOM.scrollTop=i.inputState.lastScrollTop,i.scrollDOM.scrollLeft=i.inputState.lastScrollLeft),Rp(i)};ct.blur=i=>{i.observer.clearSelectionRange(),Rp(i)};ct.compositionstart=ct.compositionupdate=(i,e)=>{if(!i.observer.editContext&&(i.inputState.compositionFirstChange==null&&(i.inputState.compositionFirstChange=!0),i.inputState.composing<0)){let{main:t}=i.state.selection;!t.empty&&i.lineBlockAt(t.from).from!=i.lineBlockAt(t.to).from&&!i.state.readOnly&&i.dispatch({changes:i.state.selection.ranges.filter(n=>!n.empty).map(n=>({from:n.from,to:n.to})),userEvent:"input"}),i.inputState.composing=0}};ct.compositionend=i=>{i.observer.editContext||(i.inputState.composing=-1,i.inputState.compositionEndedAt=Date.now(),i.inputState.compositionPendingKey=!0,i.inputState.compositionPendingChange=i.observer.pendingRecords().length>0,i.inputState.compositionFirstChange=null,G.chrome&&G.android?i.observer.flushSoon():i.inputState.compositionPendingChange?Promise.resolve().then(()=>i.observer.flush()):setTimeout(()=>{i.inputState.composing<0&&i.docView.hasComposition&&i.update([])},50))};ct.contextmenu=i=>{i.inputState.lastContextMenu=Date.now()};Vt.beforeinput=(i,e)=>{var t,n;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(i.inputState.insertingText=e.data,i.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&i.observer.editContext){let s=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),r=e.getTargetRanges();if(s&&r.length){let o=r[0],l=i.posAtDOM(o.startContainer,o.startOffset),u=i.posAtDOM(o.endContainer,o.endOffset);return O0(i,{from:l,to:u,insert:i.state.toText(s)},null),!0}}let a;if(G.chrome&&G.android&&(a=Bp.find(s=>s.inputType==e.inputType))&&(i.observer.delayAndroidKey(a.key,a.keyCode),a.key=="Backspace"||a.key=="Delete")){let s=((n=window.visualViewport)===null||n===void 0?void 0:n.height)||0;setTimeout(()=>{var r;(((r=window.visualViewport)===null||r===void 0?void 0:r.height)||0)>s+10&&i.hasFocus&&(i.contentDOM.blur(),i.focus())},100)}return G.ios&&e.inputType=="deleteContentForward"&&i.observer.flushSoon(),G.safari&&e.inputType=="insertText"&&i.inputState.composing>=0&&setTimeout(()=>ct.compositionend(i,e),20),!1};const ac=new Set;function tW(i){ac.has(i)||(ac.add(i),i.addEventListener("copy",()=>{}),i.addEventListener("cut",()=>{}))}const sc=["pre-wrap","normal","pre-line","break-spaces"];let B1=!1;function rc(){B1=!1}class nW{constructor(e){this.lineWrapping=e,this.doc=oe.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let n=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(n+=Math.max(0,Math.ceil((t-e-n*this.lineLength*.5)/this.lineLength))),this.lineHeight*n}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return sc.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let n=0;n-1,l=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=o;if(this.lineWrapping=o,this.lineHeight=t,this.charWidth=n,this.textHeight=a,this.lineLength=s,l){this.heightSamples={};for(let u=0;u0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>$a&&(B1=!0),this.height=e)}replace(e,t,n){return mt.of(n)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,n,a){let s=this,r=n.doc;for(let o=a.length-1;o>=0;o--){let{fromA:l,toA:u,fromB:m,toB:c}=a[o],d=s.lineAt(l,we.ByPosNoHeight,n.setDoc(t),0,0),h=d.to>=u?d:s.lineAt(u,we.ByPosNoHeight,n,0,0);for(c+=h.to-u,u=h.to;o>0&&d.from<=a[o-1].toA;)l=a[o-1].fromA,m=a[o-1].fromB,o--,ls*2){let o=e[t-1];o.break?e.splice(--t,1,o.left,null,o.right):e.splice(--t,1,o.left,o.right),n+=1+o.break,a-=o.size}else if(s>a*2){let o=e[n];o.break?e.splice(n,1,o.left,null,o.right):e.splice(n,1,o.left,o.right),n+=2+o.break,s-=o.size}else break;else if(a=s&&r(this.lineAt(0,we.ByPos,n,a,s))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,n=!1,a){return a&&a.from<=t&&a.more&&this.setMeasuredHeight(a),this.outdated=!1,this}toString(){return`block(${this.length})`}}class yt extends Gp{constructor(e,t,n){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=n}mainBlock(e,t){return new Rt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,n){let a=n[0];return n.length==1&&(a instanceof yt||a instanceof Qe&&a.flags&4)&&Math.abs(this.length-a.length)<10?(a instanceof Qe?a=new yt(a.length,this.height,this.spaceAbove):a.height=this.height,this.outdated||(a.outdated=!1),a):mt.of(n)}updateHeight(e,t=0,n=!1,a){return a&&a.from<=t&&a.more?this.setMeasuredHeight(a):(n||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class Qe extends mt{constructor(e){super(e,0)}heightMetrics(e,t){let n=e.doc.lineAt(t).number,a=e.doc.lineAt(t+this.length).number,s=a-n+1,r,o=0;if(e.lineWrapping){let l=Math.min(this.height,e.lineHeight*s);r=l/s,this.length>s+1&&(o=(this.height-l)/(this.length-s-1))}else r=this.height/s;return{firstLine:n,lastLine:a,perLine:r,perChar:o}}blockAt(e,t,n,a){let{firstLine:s,lastLine:r,perLine:o,perChar:l}=this.heightMetrics(t,a);if(t.lineWrapping){let u=a+(e0){let s=n[n.length-1];s instanceof Qe?n[n.length-1]=new Qe(s.length+a):n.push(null,new Qe(a-1))}if(e>0){let s=n[0];s instanceof Qe?n[0]=new Qe(e+s.length):n.unshift(new Qe(e-1),null)}return mt.of(n)}decomposeLeft(e,t){t.push(new Qe(e-1),null)}decomposeRight(e,t){t.push(null,new Qe(this.length-e-1))}updateHeight(e,t=0,n=!1,a){let s=t+this.length;if(a&&a.from<=t+this.length&&a.more){let r=[],o=Math.max(t,a.from),l=-1;for(a.from>t&&r.push(new Qe(a.from-t-1).updateHeight(e,t));o<=s&&a.more;){let m=e.doc.lineAt(o).length;r.length&&r.push(null);let c=a.heights[a.index++],d=0;c<0&&(d=-c,c=a.heights[a.index++]),l==-1?l=c:Math.abs(c-l)>=$a&&(l=-2);let h=new yt(m,c,d);h.outdated=!1,r.push(h),o+=m+1}o<=s&&r.push(null,new Qe(s-o).updateHeight(e,o));let u=mt.of(r);return(l<0||Math.abs(u.height-this.height)>=$a||Math.abs(l-this.heightMetrics(e,t).perLine)>=$a)&&(B1=!0),As(this,u)}else(n||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class sW extends mt{constructor(e,t,n){super(e.length+(t?1:0)+n.length,e.height+n.height,(t?1:0)|(e.outdated||n.outdated?2:0)),this.left=e,this.right=n,this.size=e.size+n.size}get break(){return this.flags&1}blockAt(e,t,n,a){let s=n+this.left.height;return eo))return u;let m=t==we.ByPosNoHeight?we.ByPosNoHeight:we.ByPos;return l?u.join(this.right.lineAt(o,m,n,r,o)):this.left.lineAt(o,m,n,a,s).join(u)}forEachLine(e,t,n,a,s,r){let o=a+this.left.height,l=s+this.left.length+this.break;if(this.break)e=l&&this.right.forEachLine(e,t,n,o,l,r);else{let u=this.lineAt(l,we.ByPos,n,a,s);e=e&&u.from<=t&&r(u),t>u.to&&this.right.forEachLine(Math.max(e,u.to+1),t,n,o,l,r)}}replace(e,t,n){let a=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-a,t-a,n));let s=[];e>0&&this.decomposeLeft(e,s);let r=s.length;for(let o of n)s.push(o);if(e>0&&oc(s,r-1),t=n&&t.push(null)),e>n&&this.right.decomposeLeft(e-n,t)}decomposeRight(e,t){let n=this.left.length,a=n+this.break;if(e>=a)return this.right.decomposeRight(e-a,t);e2*t.size||t.size>2*e.size?mt.of(this.break?[e,null,t]:[e,t]):(this.left=As(this.left,e),this.right=As(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,n=!1,a){let{left:s,right:r}=this,o=t+s.length+this.break,l=null;return a&&a.from<=t+s.length&&a.more?l=s=s.updateHeight(e,t,n,a):s.updateHeight(e,t,n),a&&a.from<=o+r.length&&a.more?l=r=r.updateHeight(e,o,n,a):r.updateHeight(e,o,n),l?this.balanced(s,r):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function oc(i,e){let t,n;i[e]==null&&(t=i[e-1])instanceof Qe&&(n=i[e+1])instanceof Qe&&i.splice(e-1,3,new Qe(t.length+1+n.length))}const rW=5;class P0{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let n=Math.min(t,this.lineEnd),a=this.nodes[this.nodes.length-1];a instanceof yt?a.length+=n-this.pos:(n>this.pos||!this.isCovered)&&this.nodes.push(new yt(n-this.pos,-1,0)),this.writtenTo=n,t>n&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,n){if(e=rW)&&this.addLineDeco(a,s,r)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new yt(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let n=new Qe(t-e);return this.oracle.doc.lineAt(e).to==t&&(n.flags|=4),n}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof yt)return e;let t=new yt(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,n){let a=this.ensureLine();a.length+=n,a.collapsed+=n,a.widgetHeight=Math.max(a.widgetHeight,e),a.breaks+=t,this.writtenTo=this.pos=this.pos+n}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof yt)&&!this.isCovered?this.nodes.push(new yt(0,-1,0)):(this.writtenTou.clientHeight||u.scrollWidth>u.clientWidth)&&m.overflow!="visible"){let c=u.getBoundingClientRect();s=Math.max(s,c.left),r=Math.min(r,c.right),o=Math.max(o,c.top),l=Math.min(u==i.parentNode?a.innerHeight:l,c.bottom)}u=m.position=="absolute"||m.position=="fixed"?u.offsetParent:u.parentNode}else if(u.nodeType==11)u=u.host;else break;return{left:s-t.left,right:Math.max(s,r)-t.left,top:o-(t.top+e),bottom:Math.max(o,l)-(t.top+e)}}function mW(i){let e=i.getBoundingClientRect(),t=i.ownerDocument.defaultView||window;return e.left0&&e.top0}function cW(i,e){let t=i.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class Fr{constructor(e,t,n,a){this.from=e,this.to=t,this.size=n,this.displaySize=a}static same(e,t){if(e.length!=t.length)return!1;for(let n=0;ntypeof a!="function"&&a.class=="cm-lineWrapping");this.heightOracle=new nW(n),this.stateDeco=uc(t),this.heightMap=mt.empty().applyChanges(this.stateDeco,oe.empty,this.heightOracle.setDoc(t.doc),[new Zt(0,0,0,t.doc.length)]);for(let a=0;a<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());a++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=he.set(this.lineGaps.map(a=>a.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let n=0;n<=1;n++){let a=n?t.head:t.anchor;if(!e.some(({from:s,to:r})=>a>=s&&a<=r)){let{from:s,to:r}=this.lineBlockAt(a);e.push(new ka(s,r))}}return this.viewports=e.sort((n,a)=>n.from-a.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?yl:js.get(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(oi(e,this.scaler))})}update(e,t=null){this.state=e.state;let n=this.stateDeco;this.stateDeco=uc(this.state);let a=e.changedRanges,s=Zt.extendWithRanges(a,oW(n,this.stateDeco,e?e.changes:Ze.empty(this.state.doc.length))),r=this.heightMap.height,o=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);rc(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),s),(this.heightMap.height!=r||B1)&&(e.flags|=2),o?(this.scrollAnchorPos=e.changes.mapPos(o.from,-1),this.scrollAnchorHeight=o.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=r);let l=s.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.headl.to)||!this.viewportIsAppropriate(l))&&(l=this.getViewport(0,t));let u=l.from!=this.viewport.from||l.to!=this.viewport.to;this.viewport=l,e.flags|=this.updateForViewport(),(u||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(iL)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,n=window.getComputedStyle(t),a=this.heightOracle,s=n.whiteSpace;this.defaultTextDirection=n.direction=="rtl"?ye.RTL:ye.LTR;let r=this.heightOracle.mustRefreshForWrapping(s)||this.mustMeasureContent==="refresh",o=t.getBoundingClientRect(),l=r||this.mustMeasureContent||this.contentDOMHeight!=o.height;this.contentDOMHeight=o.height,this.mustMeasureContent=!1;let u=0,m=0;if(o.width&&o.height){let{scaleX:I,scaleY:k}=ip(t,o);(I>.005&&Math.abs(this.scaleX-I)>.005||k>.005&&Math.abs(this.scaleY-k)>.005)&&(this.scaleX=I,this.scaleY=k,u|=16,r=l=!0)}let c=(parseInt(n.paddingTop)||0)*this.scaleY,d=(parseInt(n.paddingBottom)||0)*this.scaleY;(this.paddingTop!=c||this.paddingBottom!=d)&&(this.paddingTop=c,this.paddingBottom=d,u|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(a.lineWrapping&&(l=!0),this.editorWidth=e.scrollDOM.clientWidth,u|=16);let h=ap(this.view.contentDOM,!1).y;h!=this.scrollParent&&(this.scrollParent=h,this.scrollAnchorHeight=-1,this.scrollOffset=0);let g=this.getScrollOffset();this.scrollOffset!=g&&(this.scrollAnchorHeight=-1,this.scrollOffset=g),this.scrolledToBottom=lp(this.scrollParent||e.win);let f=(this.printing?cW:uW)(t,this.paddingTop),b=f.top-this.pixelViewport.top,x=f.bottom-this.pixelViewport.bottom;this.pixelViewport=f;let v=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(v!=this.inView&&(this.inView=v,v&&(l=!0)),!this.inView&&!this.scrollTarget&&!mW(e.dom))return 0;let w=o.width;if((this.contentDOMWidth!=w||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=o.width,this.editorHeight=e.scrollDOM.clientHeight,u|=16),l){let I=e.docView.measureVisibleLineHeights(this.viewport);if(a.mustRefreshForHeights(I)&&(r=!0),r||a.lineWrapping&&Math.abs(w-this.contentDOMWidth)>a.charWidth){let{lineHeight:k,charWidth:T,textHeight:C}=e.docView.measureTextSize();r=k>0&&a.refresh(s,k,T,C,Math.max(5,w/T),I),r&&(e.docView.minWidth=0,u|=16)}b>0&&x>0?m=Math.max(b,x):b<0&&x<0&&(m=Math.min(b,x)),rc();for(let k of this.viewports){let T=k.from==this.viewport.from?I:e.docView.measureVisibleLineHeights(k);this.heightMap=(r?mt.empty().applyChanges(this.stateDeco,oe.empty,this.heightOracle,[new Zt(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(a,0,r,new iW(k.from,T))}B1&&(u|=2)}let z=!this.viewportIsAppropriate(this.viewport,m)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return z&&(u&2&&(u|=this.updateScaler()),this.viewport=this.getViewport(m,this.scrollTarget),u|=this.updateForViewport()),(u&2||z)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(r?[]:this.lineGaps,e)),u|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),u}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let n=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),a=this.heightMap,s=this.heightOracle,{visibleTop:r,visibleBottom:o}=this,l=new ka(a.lineAt(r-n*1e3,we.ByHeight,s,0,0).from,a.lineAt(o+(1-n)*1e3,we.ByHeight,s,0,0).to);if(t){let{head:u}=t.range;if(ul.to){let m=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),c=a.lineAt(u,we.ByPos,s,0,0),d;t.y=="center"?d=(c.top+c.bottom)/2-m/2:t.y=="start"||t.y=="nearest"&&u=o+Math.max(10,Math.min(n,250)))&&a>r-2*1e3&&s>1,r=a<<1;if(this.defaultTextDirection!=ye.LTR&&!n)return[];let o=[],l=(m,c,d,h)=>{if(c-mm&&xx.from>=d.from&&x.to<=d.to&&Math.abs(x.from-m)x.fromv));if(!b){if(cw.from<=c&&w.to>=c)){let w=t.moveToLineBoundary(D.cursor(c),!1,!0).head;w>m&&(c=w)}let x=this.gapSize(d,m,c,h),v=n||x<2e6?x:2e6;b=new Fr(m,c,x,v)}o.push(b)},u=m=>{if(m.length2e6)for(let k of e)k.from>=m.from&&k.fromm.from&&l(m.from,h,m,c),gt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let n=[];ie.spans(t,this.viewport.from,this.viewport.to,{span(s,r){n.push({from:s,to:r})},point(){}},20);let a=0;if(n.length!=this.visibleRanges.length)a=12;else for(let s=0;s=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||oi(this.heightMap.lineAt(e,we.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||oi(this.heightMap.lineAt(this.scaler.fromDOM(e),we.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop*this.scaleY:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+12-this.paddingTop);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return oi(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class ka{constructor(e,t){this.from=e,this.to=t}}function hW(i,e,t){let n=[],a=i,s=0;return ie.spans(t,i,e,{span(){},point(r,o){r>a&&(n.push({from:a,to:r}),s+=r-a),a=o}},20),a=1)return e[e.length-1].to;let n=Math.floor(i*t);for(let a=0;;a++){let{from:s,to:r}=e[a],o=r-s;if(n<=o)return s+n;n-=o}}function Ta(i,e){let t=0;for(let{from:n,to:a}of i.ranges){if(e<=a){t+=e-n;break}t+=a-n}return t/i.total}function gW(i,e){for(let t of i)if(e(t))return t}const yl={toDOM(i){return i},fromDOM(i){return i},scale:1,eq(i){return i==this}};function uc(i){let e=i.facet(ar).filter(n=>typeof n!="function"),t=i.facet(A0).filter(n=>typeof n!="function");return t.length&&e.push(ie.join(t)),e}class js{constructor(e,t){this.scale=e,this.viewports=t}static get(e,t,n){let a=0,s=0,r=0,o=n.map(({from:u,to:m})=>{let c=t.lineAt(u,we.ByPos,e,0,0).top,d=t.lineAt(m,we.ByPos,e,0,0).bottom;return a+=d-c,{from:u,to:m,top:c,bottom:d,domTop:0,domBottom:0}});if(t.height-a<10)return yl;let l=(7e6-a)/(t.height-a);for(let u of o)u.domTop=r+(u.top-s)*l,r=u.domBottom=u.domTop+(u.bottom-u.top),s=u.bottom;return new js(l,o)}toDOM(e){for(let t=0,n=0,a=0;;t++){let s=tt.from==e.viewports[n].from&&t.to==e.viewports[n].to):!1}}function oi(i,e){if(e.scale==1)return i;let t=e.toDOM(i.top),n=e.toDOM(i.bottom);return new Rt(i.from,i.length,t,n-t,Array.isArray(i._content)?i._content.map(a=>oi(a,e)):i._content)}const _a=V.define({combine:i=>i.join(" ")}),wl=V.define({combine:i=>i.indexOf(!0)>-1}),zl=Bn.newName(),Hp=Bn.newName(),Vp=Bn.newName(),qp={"&light":"."+Hp,"&dark":"."+Vp};function Il(i,e,t){return new Bn(e,{finish(n){return/&/.test(n)?n.replace(/&\w*/,a=>{if(a=="&")return i;if(!t||!t[a])throw new RangeError(`Unsupported selector: ${a}`);return t[a]}):i+" "+n}})}const pW=Il("."+zl,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{userSelect:"none",position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},".cm-panels-top":{top:"0"},".cm-panels-bottom":{bottom:"0"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"baseline",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{background:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 0) no-repeat",backgroundSize:".4em",backgroundPosition:"calc(min(50%, 0px)) center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},qp),fW={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Rr=G.ie&&G.ie_version<=11;class bW{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new HB,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let n of t)this.queue.push(n);(G.ie&&G.ie_version<=11||G.ios&&e.composing)&&t.some(n=>n.type=="childList"&&n.removedNodes.length||n.type=="characterData"&&n.oldValue.length>n.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&G.android&&e.constructor.EDIT_CONTEXT!==!1&&!(G.chrome&&G.chrome_version<126)&&(this.editContext=new vW(e),e.state.facet(gn)&&(e.contentDOM.editContext=this.editContext.editContext)),Rr&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(this.pendingRecords().length>0),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,n)=>t!=e[n]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:n}=this,a=this.selectionRange;if(n.state.facet(gn)?n.root.activeElement!=this.dom:!bi(this.dom,a))return;let s=a.anchorNode&&n.docView.tile.nearest(a.anchorNode);if(s&&s.isWidget()&&s.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(G.ie&&G.ie_version<=11||G.android&&G.chrome)&&!n.state.selection.main.empty&&a.focusNode&&xi(a.focusNode,a.focusOffset,a.anchorNode,a.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=Di(e.root);if(!t)return!1;let n=G.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&xW(this.view,t)||t;if(!n||this.selectionRange.eq(n))return!1;let a=bi(this.dom,n);return a&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let s=this.delayedAndroidKey;s&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=s.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&s.force&&_1(this.dom,s.key,s.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(a)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,n=-1,a=!1;for(let s of e){let r=this.readMutation(s);r&&(r.typeOver&&(a=!0),t==-1?{from:t,to:n}=r:(t=Math.min(r.from,t),n=Math.max(r.to,n)))}return{from:t,to:n,typeOver:a}}readChange(){let{from:e,to:t,typeOver:n}=this.processRecords(),a=this.selectionChanged&&bi(this.dom,this.selectionRange);if(e<0&&!a)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let s=new ZL(this.view,e,t,n);return this.view.docView.domChanged={newSel:s.newSel?s.newSel.main:null},s}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.selectionChanged,n=this.readChange();if(!n)return this.view.requestMeasure(),!1;let a=this.view.state,s=Dp(this.view,n);return this.view.state==a&&(n.domChanged||t)&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let n=mc(t,e.previousSibling||e.target.previousSibling,-1),a=mc(t,e.nextSibling||e.target.nextSibling,1);return{from:n?t.posAfter(n):t.posAtStart,to:a?t.posBefore(a):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(gn)!=e.state.facet(gn)&&(e.view.contentDOM.editContext=e.state.facet(gn)?this.editContext.editContext:null))}destroy(){var e,t,n;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(n=this.resizeScroll)===null||n===void 0||n.disconnect();for(let a of this.scrollTargets)a.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function mc(i,e,t){for(;e;){let n=je.get(e);if(n&&n.parent==i)return n;let a=e.parentNode;e=a!=i.dom?a:t>0?e.nextSibling:e.previousSibling}return null}function cc(i,e){let t=e.startContainer,n=e.startOffset,a=e.endContainer,s=e.endOffset,r=i.docView.domAtPos(i.state.selection.main.anchor,1);return xi(r.node,r.offset,a,s)&&([t,n,a,s]=[a,s,t,n]),{anchorNode:t,anchorOffset:n,focusNode:a,focusOffset:s}}function xW(i,e){if(e.getComposedRanges){let a=e.getComposedRanges(i.root)[0];if(a)return cc(i,a)}let t=null;function n(a){a.preventDefault(),a.stopImmediatePropagation(),t=a.getTargetRanges()[0]}return i.contentDOM.addEventListener("beforeinput",n,!0),i.dom.ownerDocument.execCommand("indent"),i.contentDOM.removeEventListener("beforeinput",n,!0),t?cc(i,t):null}class vW{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=n=>{let a=e.state.selection.main,{anchor:s,head:r}=a,o=this.toEditorPos(n.updateRangeStart),l=this.toEditorPos(n.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:n.updateRangeStart,editorBase:o,drifted:!1});let u=l-o>n.text.length;o==this.from&&sthis.to&&(l=s);let m=Zp(e.state.sliceDoc(o,l),n.text,(u?a.from:a.to)-o,u?"end":null);if(!m){let d=D.single(this.toEditorPos(n.selectionStart),this.toEditorPos(n.selectionEnd));xl(d,a)||e.dispatch({selection:d,userEvent:"select"});return}let c={from:m.from+o,to:m.toA+o,insert:oe.of(n.text.slice(m.from,m.toB).split(` -`))};if((G.mac||G.android)&&c.from==r-1&&/^\. ?$/.test(n.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(c={from:o,to:l,insert:oe.of([n.text.replace("."," ")])}),this.pendingContextChange=c,!e.state.readOnly){let d=this.to-this.from+(c.to-c.from+c.insert.length);O0(e,c,D.single(this.toEditorPos(n.selectionStart,d),this.toEditorPos(n.selectionEnd,d)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),c.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,n.updateRangeStart-1),Math.min(t.text.length,n.updateRangeStart+1)))&&this.handlers.compositionend(n)},this.handlers.characterboundsupdate=n=>{let a=[],s=null;for(let r=this.toEditorPos(n.rangeStart),o=this.toEditorPos(n.rangeEnd);r{let a=[];for(let s of n.getTextFormats()){let r=s.underlineStyle,o=s.underlineThickness;if(!/none/i.test(r)&&!/none/i.test(o)){let l=this.toEditorPos(s.rangeStart),u=this.toEditorPos(s.rangeEnd);if(l{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:n}=this.composing;this.composing=null,n&&this.reset(e.state)}};for(let n in this.handlers)t.addEventListener(n,this.handlers[n]);this.measureReq={read:n=>{let a=Di(n.root);a&&a.rangeCount&&this.editContext.updateSelectionBounds(a.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,n=!1,a=this.pendingContextChange;return e.changes.iterChanges((s,r,o,l,u)=>{if(n)return;let m=u.length-(r-s);if(a&&r>=a.to)if(a.from==s&&a.to==r&&a.insert.eq(u)){a=this.pendingContextChange=null,t+=m,this.to+=m;return}else a=null,this.revertPending(e.state);if(s+=t,r+=t,r<=this.from)this.from+=m,this.to+=m;else if(sthis.to||this.to-this.from+u.length>3e4){n=!0;return}this.editContext.updateText(this.toContextPos(s),this.toContextPos(r),u.toString()),this.to+=m}t+=m}),a&&!n&&this.revertPending(e.state),!n}update(e){let t=this.pendingContextChange,n=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(n.from,n.to)&&e.transactions.some(a=>!a.isUserEvent("input.type")&&a.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,n=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),a=this.toContextPos(t.head);(this.editContext.selectionStart!=n||this.editContext.selectionEnd!=a)&&this.editContext.updateSelection(n,a)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let n=this.composing;return n&&n.drifted?n.editorBase+(e-n.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class q{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.clearAnnouncement=-1,this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:n}=e;this.dispatchTransactions=e.dispatchTransactions||n&&(a=>a.forEach(s=>n(s,this)))||(a=>this.update(a)),this.dispatch=this.dispatch.bind(this),this._root=e.root||VB(e.parent)||document,this.viewState=new lc(this,e.state||re.create(e)),e.scrollTo&&e.scrollTo.is(wa)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(y1).map(a=>new Lr(a));for(let a of this.plugins)a.update(this);this.observer=new bW(this),this.inputState=new EL(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Um(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof $e?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,n=!1,a,s=this.state;for(let d of e){if(d.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=d.state}if(this.destroyed){this.viewState.state=s;return}let r=this.hasFocus,o=0,l=null;e.some(d=>d.annotation(Jp))?(this.inputState.notifiedFocused=r,o=1):r!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=r,l=Fp(s,r),l||(o=1));let u=this.observer.delayedAndroidKey,m=null;if(u?(this.observer.clearDelayedAndroidKey(),m=this.observer.readChange(),(m&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(m=null)):this.observer.clear(),s.facet(re.phrases)!=this.state.facet(re.phrases))return this.setState(s);a=Ts.create(this,s,e),a.flags|=o;let c=this.viewState.scrollTarget;try{this.updateState=2;for(let d of e){if(c&&(c=c.map(d.changes)),d.scrollIntoView){let{main:h}=d.state.selection,{x:g,y:f}=this.state.facet(q.cursorScrollMargin);c=new C1(h.empty?h:D.cursor(h.head,h.head>h.anchor?-1:1),"nearest","nearest",f,g)}for(let h of d.effects)h.is(wa)&&(c=h.value.clip(this.state))}this.viewState.update(a,c),this.bidiCache=Os.update(this.bidiCache,a.changes),a.empty||(this.updatePlugins(a),this.inputState.update(a)),t=this.docView.update(a),this.state.facet(ri)!=this.styleModules&&this.mountStyles(),n=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(d=>d.isUserEvent("select.pointer")))}finally{this.updateState=0}if(a.startState.facet(_a)!=a.state.facet(_a)&&(this.viewState.mustMeasureContent=!0),(t||n||c||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!a.empty)for(let d of this.state.facet(gl))try{d(a)}catch(h){zt(this.state,h,"update listener")}(l||m)&&Promise.resolve().then(()=>{l&&this.state==l.startState&&this.dispatch(l),m&&!Dp(this,m)&&u.force&&_1(this.contentDOM,u.key,u.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let n of this.plugins)n.destroy(this);this.viewState=new lc(this,e),this.plugins=e.facet(y1).map(n=>new Lr(n)),this.pluginMap.clear();for(let n of this.plugins)n.update(this);this.docView.destroy(),this.docView=new Um(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(y1),n=e.state.facet(y1);if(t!=n){let a=[];for(let s of n){let r=t.indexOf(s);if(r<0)a.push(new Lr(s));else{let o=this.plugins[r];o.mustUpdate=e,a.push(o)}}for(let s of this.plugins)s.mustUpdate!=e&&s.destroy(this);this.plugins=a,this.pluginMap.clear()}else for(let a of this.plugins)a.mustUpdate=e;for(let a=0;a-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,n=this.viewState.scrollParent,a=this.viewState.getScrollOffset(),{scrollAnchorPos:s,scrollAnchorHeight:r,scaleY:o}=this.viewState;Math.abs(a-this.viewState.scrollOffset)>1&&(r=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(r<0){if(lp(n||this.win))s=-1,r=this.viewState.heightMap.height/this.viewState.scaleY;else{let g=this.viewState.scrollAnchorAt(a);s=g.from,r=g.top}o=this.viewState.scaleY}this.updateState=1;let u=this.viewState.measure();if(!u&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let m=[];u&4||([this.measureRequests,m]=[m,this.measureRequests]);let c=m.map(g=>{try{return g.read(this)}catch(f){return zt(this.state,f),dc}}),d=Ts.create(this,this.state,[]),h=!1;d.flags|=u,t?t.flags|=u:t=d,this.updateState=2,d.empty||(this.updatePlugins(d),this.inputState.update(d),this.updateAttrs(),h=this.docView.update(d),h&&this.docViewUpdate());for(let g=0;g1||f<-1)&&!(G.ios&&this.inputState.lastIOSMomentumScroll>Date.now()-100)&&(n==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){a=a+f,n?s<0?n.scrollTop=n.scrollHeight:n.scrollTop+=f:this.win.scrollBy(0,f),r=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(gl))l(t)}get themeClasses(){return zl+" "+(this.state.facet(wl)?Vp:Hp)+" "+this.state.facet(_a)}updateAttrs(){let e=hc(this,Sp,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(gn)?"true":"false",class:"cm-content",style:`${G.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),hc(this,C0,t);let n=this.observer.ignore(()=>{let a=Rm(this.contentDOM,this.contentAttrs,t),s=Rm(this.dom,this.editorAttrs,e);return a||s});return this.editorAttrs=e,this.contentAttrs=t,n}showAnnouncements(e){let t=!0;for(let n of e)for(let a of n.effects)if(a.is(q.announce)){t&&(this.announceDOM.textContent="",this.win.clearTimeout(this.clearAnnouncement),this.clearAnnouncement=this.win.setTimeout(()=>{this.announceDOM.textContent=" "},200),t=!1);let s=this.announceDOM.appendChild(document.createElement("div"));s.textContent=a.value}}mountStyles(){this.styleModules=this.state.facet(ri);let e=this.state.facet(q.cspNonce);Bn.mount(this.root,this.styleModules.concat(pW).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;tn.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,n){return Jr(this,e,$m(this,e,t,n))}moveByGroup(e,t){return Jr(this,e,$m(this,e,t,n=>AL(this,e.head,n)))}visualLineSide(e,t){return t?D.cursor(e.to,1):D.cursor(e.from,-1)}moveToLineBoundary(e,t,n=!0){return CL(this,e,t,n)}moveVertically(e,t,n){return Jr(this,e,jL(this,e,t,n))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let n=bl(this,e,t);return n&&n.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),bl(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let n=this.state.doc.lineAt(e),a=this.bidiSpans(n),s=a[rn.find(a,e-n.from,-1,t)];return n.length&&(e==n.from&&t<0||e==n.to&&t>0)&&s.dir!=this.textDirectionAt(n.from)&&(e==n.to?(e=n.from+s.from,t=1):(e=n.from+s.to,t=-1)),this.docView.coordsAt(e,t,s.dir==ye.RTL)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(zp)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>yW)return gp(e.length);let t=this.textDirectionAt(e.from),n;for(let s of this.bidiCache)if(s.from==e.from&&s.dir==t&&(s.fresh||hp(s.isolates,n=Vm(this,e))))return s.order;n||(n=Vm(this,e));let a=eL(e.text,t,n);return this.bidiCache.push(new Os(e.from,e.to,t,n,!0,a)),a}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||G.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{op(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.win.clearTimeout(this.clearAnnouncement),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var n,a,s,r;return wa.of(new C1(typeof e=="number"?D.cursor(e):e,(n=t.y)!==null&&n!==void 0?n:"nearest",(a=t.x)!==null&&a!==void 0?a:"nearest",(s=t.yMargin)!==null&&s!==void 0?s:5,(r=t.xMargin)!==null&&r!==void 0?r:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,n=this.viewState.scrollAnchorAt(e);return wa.of(new C1(D.cursor(n.from),"start","start",n.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return Wt.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return Wt.define(()=>({}),{eventObservers:e})}static theme(e,t){let n=Bn.newName(),a=[_a.of(n),ri.of(Il(`.${n}`,e))];return t&&t.dark&&a.push(wl.of(!0)),a}static baseTheme(e){return u1.lowest(ri.of(Il("."+zl,e,qp)))}static findFromDOM(e){var t;let n=e.querySelector(".cm-content"),a=n&&je.get(n)||je.get(e);return((t=a==null?void 0:a.root)===null||t===void 0?void 0:t.view)||null}}q.styleModule=ri;q.inputHandler=yp;q.clipboardInputFilter=T0;q.clipboardOutputFilter=_0;q.scrollHandler=Ip;q.focusChangeEffect=wp;q.perLineTextDirection=zp;q.exceptionSink=vp;q.updateListener=gl;q.editable=gn;q.mouseSelectionStyle=xp;q.dragMovesSelection=bp;q.clickAddsSelectionRange=fp;q.decorations=ar;q.blockWrappers=Tp;q.outerDecorations=A0;q.atomicRanges=$i;q.bidiIsolatedRanges=_p;q.cursorScrollMargin=V.define({combine:i=>{let e=5,t=5;for(let n of i)typeof n=="number"?e=t=n:{x:e,y:t}=n;return{x:e,y:t}}});q.scrollMargins=Ap;q.darkTheme=wl;q.cspNonce=V.define({combine:i=>i.length?i[0]:""});q.contentAttributes=C0;q.editorAttributes=Sp;q.lineWrapping=q.contentAttributes.of({class:"cm-lineWrapping"});q.announce=de.define();const yW=4096,dc={};class Os{constructor(e,t,n,a,s,r){this.from=e,this.to=t,this.dir=n,this.isolates=a,this.fresh=s,this.order=r}static update(e,t){if(t.empty&&!e.some(s=>s.fresh))return e;let n=[],a=e.length?e[e.length-1].dir:ye.LTR;for(let s=Math.max(0,e.length-10);s=0;a--){let s=n[a],r=typeof s=="function"?s(i):s;r&&I0(r,t)}return t}const wW=G.mac?"mac":G.windows?"win":G.linux?"linux":"key";function zW(i,e){const t=i.split(/-(?!$)/);let n=t[t.length-1];n=="Space"&&(n=" ");let a,s,r,o;for(let l=0;ln.concat(a),[]))),t}let An=null;const SW=4e3;function TW(i,e=wW){let t=Object.create(null),n=Object.create(null),a=(r,o)=>{let l=n[r];if(l==null)n[r]=o;else if(l!=o)throw new Error("Key binding "+r+" is used both as a regular binding and as a multi-stroke prefix")},s=(r,o,l,u,m)=>{var c,d;let h=t[r]||(t[r]=Object.create(null)),g=o.split(/ (?!$)/).map(x=>zW(x,e));for(let x=1;x{let z=An={view:w,prefix:v,scope:r};return setTimeout(()=>{An==z&&(An=null)},SW),!0}]})}let f=g.join(" ");a(f,!1);let b=h[f]||(h[f]={preventDefault:!1,stopPropagation:!1,run:((d=(c=h._any)===null||c===void 0?void 0:c.run)===null||d===void 0?void 0:d.slice())||[]});l&&b.run.push(l),u&&(b.preventDefault=!0),m&&(b.stopPropagation=!0)};for(let r of i){let o=r.scope?r.scope.split(" "):["editor"];if(r.any)for(let u of o){let m=t[u]||(t[u]=Object.create(null));m._any||(m._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:c}=r;for(let d in m)m[d].run.push(h=>c(h,kl))}let l=r[e]||r.key;if(l)for(let u of o)s(u,l,r.run,r.preventDefault,r.stopPropagation),r.shift&&s(u,"Shift-"+l,r.shift,r.preventDefault,r.stopPropagation)}return t}let kl=null;function _W(i,e,t,n){kl=e;let a=EB(e),s=jt(a,0),r=hn(s)==a.length&&a!=" ",o="",l=!1,u=!1,m=!1;An&&An.view==t&&An.scope==n&&(o=An.prefix+" ",Lp.indexOf(e.keyCode)<0&&(u=!0,An=null));let c=new Set,d=b=>{if(b){for(let x of b.run)if(!c.has(x)&&(c.add(x),x(t)))return b.stopPropagation&&(m=!0),!0;b.preventDefault&&(b.stopPropagation&&(m=!0),u=!0)}return!1},h=i[n],g,f;return h&&(d(h[o+Ca(a,e,!r)])?l=!0:r&&(e.altKey||e.metaKey||e.ctrlKey)&&!(G.windows&&e.ctrlKey&&e.altKey)&&!(G.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(g=Ln[e.keyCode])&&g!=a?(d(h[o+Ca(g,e,!0)])||e.shiftKey&&(f=Pi[e.keyCode])!=a&&f!=g&&d(h[o+Ca(f,e,!1)]))&&(l=!0):r&&e.shiftKey&&d(h[o+Ca(a,e,!0)])&&(l=!0),!l&&d(h._any)&&(l=!0)),u&&(l=!0),l&&m&&e.stopPropagation(),kl=null,l}class lr{constructor(e,t,n,a,s){this.className=e,this.left=t,this.top=n,this.width=a,this.height=s}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,n){if(n.empty){let a=e.coordsAtPos(n.head,n.assoc||1);if(!a)return[];let s=Qp(e);return[new lr(t,a.left-s.left,a.top-s.top,null,a.bottom-a.top)]}else return CW(e,t,n)}}function Qp(i){let e=i.scrollDOM.getBoundingClientRect();return{left:(i.textDirection==ye.LTR?e.left:e.right-i.scrollDOM.clientWidth*i.scaleX)-i.scrollDOM.scrollLeft*i.scaleX,top:e.top-i.scrollDOM.scrollTop*i.scaleY}}function pc(i,e,t,n){let a=i.coordsAtPos(e,t*2);if(!a)return n;let s=i.dom.getBoundingClientRect(),r=(a.top+a.bottom)/2,o=i.posAtCoords({x:s.left+1,y:r}),l=i.posAtCoords({x:s.right-1,y:r});return o==null||l==null?n:{from:Math.max(n.from,Math.min(o,l)),to:Math.min(n.to,Math.max(o,l))}}function CW(i,e,t){if(t.to<=i.viewport.from||t.from>=i.viewport.to)return[];let n=Math.max(t.from,i.viewport.from),a=Math.min(t.to,i.viewport.to),s=i.textDirection==ye.LTR,r=i.contentDOM,o=r.getBoundingClientRect(),l=Qp(i),u=r.querySelector(".cm-line"),m=u&&window.getComputedStyle(u),c=o.left+(m?parseInt(m.paddingLeft)+Math.min(0,parseInt(m.textIndent)):0),d=o.right-(m?parseInt(m.paddingRight):0),h=fl(i,n,1),g=fl(i,a,-1),f=h.type==Ye.Text?h:null,b=g.type==Ye.Text?g:null;if(f&&(i.lineWrapping||h.widgetLineBreaks)&&(f=pc(i,n,1,f)),b&&(i.lineWrapping||g.widgetLineBreaks)&&(b=pc(i,a,-1,b)),f&&b&&f.from==b.from&&f.to==b.to)return v(w(t.from,t.to,f));{let I=f?w(t.from,null,f):z(h,!1),k=b?w(null,t.to,b):z(g,!0),T=[];return(f||h).to<(b||g).from-(f&&b?1:0)||h.widgetLineBreaks>1&&I.bottom+i.defaultLineHeight/2A&&E.from=ee)break;F>U&&O(Math.max(fe,U),I==null&&fe<=A,Math.min(F,ee),k==null&&F>=B,Ie.dir)}if(U=ge.to+1,U>=ee)break}return P.length==0&&O(A,I==null,B,k==null,i.textDirection),{top:C,bottom:M,horizontal:P}}function z(I,k){let T=o.top+(k?I.top:I.bottom);return{top:T,bottom:T,horizontal:[]}}}function AW(i,e){return i.constructor==e.constructor&&i.eq(e)}class jW{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(Ya)!=e.state.facet(Ya)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,n=e.facet(Ya);for(;t!AW(t,this.drawn[n]))){let t=this.dom.firstChild,n=0;for(let a of e)a.update&&t&&a.constructor&&this.drawn[n].constructor&&a.update(t,this.drawn[n])?(t=t.nextSibling,n++):this.dom.insertBefore(a.draw(),t);for(;t;){let a=t.nextSibling;t.remove(),t=a}this.drawn=e,G.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const Ya=V.define();function OW(i){return[Wt.define(e=>new jW(e,i)),Ya.of(i)]}const Aa="-10000px";class PW{constructor(e,t,n,a){this.facet=t,this.createTooltipView=n,this.removeTooltipView=a,this.input=e.state.facet(t),this.tooltips=this.input.filter(r=>r);let s=null;this.tooltipViews=this.tooltips.map(r=>s=n(r,s))}update(e,t){var n;let a=e.state.facet(this.facet),s=a.filter(l=>l);if(a===this.input){for(let l of this.tooltipViews)l.update&&l.update(e);return!1}let r=[],o=t?[]:null;for(let l=0;lt[u]=l),t.length=o.length),this.input=a,this.tooltips=s,this.tooltipViews=r,!0}}function Up(i){let e=i.dom.ownerDocument.documentElement,t=e.clientWidth,n=getComputedStyle(e);if(!/stable/.test(n.scrollbarGutter||""))return{left:0,right:t};let a=e.getBoundingClientRect(),s=i.win.scrollX;return{left:Math.max(0,a.left+s-parseFloat(n.marginLeft)),right:Math.min(t,a.right+s+parseFloat(n.marginRight))}}function MW(i){let{left:e,right:t}=Up(i);return{top:0,left:e,right:t,bottom:i.dom.ownerDocument.documentElement.clientHeight}}const Gr=V.define({combine:i=>{var e,t,n;return{position:G.ios?"absolute":((e=i.find(a=>a.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=i.find(a=>a.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((n=i.find(a=>a.tooltipSpace))===null||n===void 0?void 0:n.tooltipSpace)||MW}}}),fc=new WeakMap,$p=Wt.fromClass(class{constructor(i){this.view=i,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=i.state.facet(Gr);this.position=e.position,this.parent=e.parent,this.classes=i.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new PW(i,Yp,(t,n)=>this.createTooltip(t,n),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),i.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let i of this.manager.tooltipViews)this.intersectionObserver.observe(i.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(i){i.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(i,this.above);e&&this.observeIntersection();let t=e||i.geometryChanged,n=i.state.facet(Gr);if(n.position!=this.position&&!this.madeAbsolute){this.position=n.position;for(let a of this.manager.tooltipViews)a.dom.style.position=this.position;t=!0}if(n.parent!=this.parent){this.parent&&this.container.remove(),this.parent=n.parent,this.createContainer();for(let a of this.manager.tooltipViews)this.container.appendChild(a.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(i,e){let t=i.create(this.view),n=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),i.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let a=document.createElement("div");a.className="cm-tooltip-arrow",t.dom.appendChild(a)}return t.dom.style.position=this.position,t.dom.style.top=Aa,t.dom.style.left="0px",this.container.insertBefore(t.dom,n),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var i,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let n of this.manager.tooltipViews)n.dom.remove(),(i=n.destroy)===null||i===void 0||i.call(n);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let i=1,e=1,t=!1,n=0;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:r}=this.manager.tooltipViews[0];if(G.safari){let o=r.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!r.offsetParent&&r.offsetParent!=this.container.ownerDocument.body}if(t||this.position=="absolute")if(this.parent){let r=this.parent.getBoundingClientRect();r.width&&r.height&&(i=r.width/this.parent.offsetWidth,e=r.height/this.parent.offsetHeight)}else({scaleX:i,scaleY:e}=this.view.viewState);else n=Up(this.view).left;let a=this.view.scrollDOM.getBoundingClientRect(),s=j0(this.view);return{visible:{left:a.left+s.left,top:a.top+s.top,right:a.right-s.right,bottom:a.bottom-s.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((r,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(r.pos):this.view.coordsAtPos(r.pos)}),size:this.manager.tooltipViews.map(({dom:r})=>r.getBoundingClientRect()),space:this.view.state.facet(Gr).tooltipSpace(this.view),scaleX:i,scaleY:e,makeAbsolute:t,fixedLeft:n}}writeMeasure(i){var e;if(i.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let o of this.manager.tooltipViews)o.dom.style.position="absolute"}let{visible:t,space:n,scaleX:a,scaleY:s}=i,r=[];for(let o=0;o=Math.min(t.bottom,n.bottom)||c.rightMath.min(t.right,n.right)+.1)){m.style.top=Aa;continue}let h=l.arrow?u.dom.querySelector(".cm-tooltip-arrow"):null,g=h?7:0,f=d.right-d.left,b=(e=fc.get(u))!==null&&e!==void 0?e:d.bottom-d.top,x=u.offset||ZW,v=this.view.textDirection==ye.LTR,w=d.width>n.right-n.left?v?n.left:n.right-d.width:v?Math.max(n.left,Math.min(c.left-(h?14:0)+x.x,n.right-f)):Math.min(Math.max(n.left,c.left-f+(h?14:0)-x.x),n.right-f),z=this.above[o];!l.strictSide&&(z?c.top-b-g-x.yn.bottom)&&z==n.bottom-c.bottom>c.top-n.top&&(z=this.above[o]=!z);let I=(z?c.top-n.top:n.bottom-c.bottom)-g;if(Iw&&C.topk&&(k=z?C.top-b-2-g:C.bottom+g+2);if(this.position=="absolute"?(m.style.top=(k-i.parent.top)/s+"px",bc(m,(w-i.parent.left)/a)):(m.style.top=k/s+"px",bc(m,(w-i.fixedLeft)/a)),h){let C=c.left+(v?x.x:-x.x)-(w+14-7);h.style.left=C/a+"px"}u.overlap!==!0&&r.push({left:w,top:k,right:T,bottom:k+b}),m.classList.toggle("cm-tooltip-above",z),m.classList.toggle("cm-tooltip-below",!z),u.positioned&&u.positioned(i.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let i of this.manager.tooltipViews)i.dom.style.top=Aa}},{eventObservers:{scroll(){this.maybeMeasure()}}});function bc(i,e){let t=parseInt(i.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(i.style.left=e+"px")}const DW=q.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),ZW={x:0,y:0},Yp=V.define({enables:[$p,DW]});function Xp(i,e){let t=i.plugin($p);if(!t)return null;let n=t.manager.tooltips.indexOf(e);return n<0?null:t.manager.tooltipViews[n]}class un extends Zn{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}un.prototype.elementClass="";un.prototype.toDOM=void 0;un.prototype.mapMode=st.TrackBefore;un.prototype.startSide=un.prototype.endSide=-1;un.prototype.point=!0;const yi=V.define(),BW=V.define(),LW={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>ie.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},wi=V.define();function WW(i){return[Kp(),wi.of({...LW,...i})]}const xc=V.define({combine:i=>i.some(e=>e)});function Kp(i){return[EW]}const EW=Wt.fromClass(class{constructor(i){this.view=i,this.domAfter=null,this.prevViewport=i.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=i.state.facet(wi).map(e=>new yc(i,e)),this.fixed=!i.state.facet(xc);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),i.scrollDOM.insertBefore(this.dom,i.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(i){if(this.updateGutters(i)){let e=this.prevViewport,t=i.view.viewport,n=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(n<(t.to-t.from)*.8)}if(i.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(xc)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=i.view.viewport}syncGutters(i){let e=this.dom.nextSibling;i&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=ie.iter(this.view.state.facet(yi),this.view.viewport.from),n=[],a=this.gutters.map(s=>new NW(s,this.view.viewport,-this.view.documentPadding.top));for(let s of this.view.viewportLineBlocks)if(n.length&&(n=[]),Array.isArray(s.type)){let r=!0;for(let o of s.type)if(o.type==Ye.Text&&r){Sl(t,n,o.from);for(let l of a)l.line(this.view,o,n);r=!1}else if(o.widget)for(let l of a)l.widget(this.view,o)}else if(s.type==Ye.Text){Sl(t,n,s.from);for(let r of a)r.line(this.view,s,n)}else if(s.widget)for(let r of a)r.widget(this.view,s);for(let s of a)s.finish();i&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(i){let e=i.startState.facet(wi),t=i.state.facet(wi),n=i.docChanged||i.heightChanged||i.viewportChanged||!ie.eq(i.startState.facet(yi),i.state.facet(yi),i.view.viewport.from,i.view.viewport.to);if(e==t)for(let a of this.gutters)a.update(i)&&(n=!0);else{n=!0;let a=[];for(let s of t){let r=e.indexOf(s);r<0?a.push(new yc(this.view,s)):(this.gutters[r].update(i),a.push(this.gutters[r]))}for(let s of this.gutters)s.dom.remove(),a.indexOf(s)<0&&s.destroy();for(let s of a)s.config.side=="after"?this.getDOMAfter().appendChild(s.dom):this.dom.appendChild(s.dom);this.gutters=a}return n}destroy(){for(let i of this.gutters)i.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:i=>q.scrollMargins.of(e=>{let t=e.plugin(i);if(!t||t.gutters.length==0||!t.fixed)return null;let n=t.dom.offsetWidth*e.scaleX,a=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==ye.LTR?{left:n,right:a}:{right:n,left:a}})});function vc(i){return Array.isArray(i)?i:[i]}function Sl(i,e,t){for(;i.value&&i.from<=t;)i.from==t&&e.push(i.value),i.next()}class NW{constructor(e,t,n){this.gutter=e,this.height=n,this.i=0,this.cursor=ie.iter(e.markers,t.from)}addElement(e,t,n){let{gutter:a}=this,s=(t.top-this.height)/e.scaleY,r=t.height/e.scaleY;if(this.i==a.elements.length){let o=new ef(e,r,s,n);a.elements.push(o),a.dom.appendChild(o.dom)}else a.elements[this.i].update(e,r,s,n);this.height=t.bottom,this.i++}line(e,t,n){let a=[];Sl(this.cursor,a,t.from),n.length&&(a=a.concat(n));let s=this.gutter.config.lineMarker(e,t,a);s&&a.unshift(s);let r=this.gutter;a.length==0&&!r.config.renderEmptyElements||this.addElement(e,t,a)}widget(e,t){let n=this.gutter.config.widgetMarker(e,t.widget,t),a=n?[n]:null;for(let s of e.state.facet(BW)){let r=s(e,t.widget,t);r&&(a||(a=[])).push(r)}a&&this.addElement(e,t,a)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class yc{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let n in t.domEventHandlers)this.dom.addEventListener(n,a=>{let s=a.target,r;if(s!=this.dom&&this.dom.contains(s)){for(;s.parentNode!=this.dom;)s=s.parentNode;let l=s.getBoundingClientRect();r=(l.top+l.bottom)/2}else r=a.clientY;let o=e.lineBlockAtHeight(r-e.documentTop);t.domEventHandlers[n](e,o,a)&&a.preventDefault()});this.markers=vc(t.markers(e)),t.initialSpacer&&(this.spacer=new ef(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=vc(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let a=this.config.updateSpacer(this.spacer.markers[0],e);a!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[a])}let n=e.view.viewport;return!ie.eq(this.markers,t,n.from,n.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class ef{constructor(e,t,n,a){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,n,a)}update(e,t,n,a){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=n&&(this.dom.style.marginTop=(this.above=n)?n+"px":""),JW(this.markers,a)||this.setMarkers(e,a)}setMarkers(e,t){let n="cm-gutterElement",a=this.dom.firstChild;for(let s=0,r=0;;){let o=r,l=ss(o,l,u)||r(o,l,u):r}return n}})}});class Hr extends un{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function Vr(i,e){return i.state.facet(w1).formatNumber(e,i.state)}const GW=wi.compute([w1],i=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(FW)},lineMarker(e,t,n){return n.some(a=>a.toDOM)?null:new Hr(Vr(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,n)=>{for(let a of e.state.facet(RW)){let s=a(e,t,n);if(s)return s}return null},lineMarkerChange:e=>e.startState.facet(w1)!=e.state.facet(w1),initialSpacer(e){return new Hr(Vr(e,wc(e.state.doc.lines)))},updateSpacer(e,t){let n=Vr(t.view,wc(t.view.state.doc.lines));return n==e.number?e:new Hr(n)},domEventHandlers:i.facet(w1).domEventHandlers,side:"before"}));function HW(i={}){return[w1.of(i),Kp(),GW]}function wc(i){let e=9;for(;e{let e=[],t=-1;for(let n of i.selection.ranges){let a=i.doc.lineAt(n.head).from;a>t&&(t=a,e.push(VW.range(a)))}return ie.of(e)});function QW(){return qW}const tf=1024;let UW=0;class qr{constructor(e,t){this.from=e,this.to=t}}class ae{constructor(e={}){this.id=UW++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=ft.match(e)),t=>{let n=e(t);return n===void 0?null:[this,n]}}}ae.closedBy=new ae({deserialize:i=>i.split(" ")});ae.openedBy=new ae({deserialize:i=>i.split(" ")});ae.group=new ae({deserialize:i=>i.split(" ")});ae.isolate=new ae({deserialize:i=>{if(i&&i!="rtl"&&i!="ltr"&&i!="auto")throw new RangeError("Invalid value for isolate: "+i);return i||"auto"}});ae.contextHash=new ae({perNode:!0});ae.lookAhead=new ae({perNode:!0});ae.mounted=new ae({perNode:!0});class zi{constructor(e,t,n,a=!1){this.tree=e,this.overlay=t,this.parser=n,this.bracketed=a}static get(e){return e&&e.props&&e.props[ae.mounted.id]}}const $W=Object.create(null);class ft{constructor(e,t,n,a=0){this.name=e,this.props=t,this.id=n,this.flags=a}static define(e){let t=e.props&&e.props.length?Object.create(null):$W,n=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),a=new ft(e.name||"",t,e.id,n);if(e.props){for(let s of e.props)if(Array.isArray(s)||(s=s(a)),s){if(s[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[s[0].id]=s[1]}}return a}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(ae.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let n in e)for(let a of n.split(" "))t[a]=e[n];return n=>{for(let a=n.prop(ae.group),s=-1;s<(a?a.length:0);s++){let r=t[s<0?n.name:a[s]];if(r)return r}}}}ft.none=new ft("",Object.create(null),0,8);class M0{constructor(e){this.types=e;for(let t=0;t0;for(let l=this.cursor(r|Ae.IncludeAnonymous);;){let u=!1;if(l.from<=s&&l.to>=a&&(!o&&l.type.isAnonymous||t(l)!==!1)){if(l.firstChild())continue;u=!0}for(;u&&n&&(o||!l.type.isAnonymous)&&n(l),!l.nextSibling();){if(!l.parent())return;u=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:B0(ft.none,this.children,this.positions,0,this.children.length,0,this.length,(t,n,a)=>new Le(this.type,t,n,a,this.propValues),e.makeTree||((t,n,a)=>new Le(ft.none,t,n,a)))}static build(e){return eE(e)}}Le.empty=new Le(ft.none,[],[],0);class D0{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new D0(this.buffer,this.index)}}class En{constructor(e,t,n){this.buffer=e,this.length=t,this.set=n}get type(){return ft.none}toString(){let e=[];for(let t=0;t0));l=r[l+3]);return o}slice(e,t,n){let a=this.buffer,s=new Uint16Array(t-e),r=0;for(let o=e,l=0;o=e&&te;case 1:return t<=e&&n>e;case 2:return n>e;case 4:return!0}}function Li(i,e,t,n){for(var a;i.from==i.to||(t<1?i.from>=e:i.from>e)||(t>-1?i.to<=e:i.to0?o.length:-1;e!=u;e+=t){let m=o[e],c=l[e]+r.from,d;if(!(!(s&Ae.EnterBracketed&&m instanceof Le&&(d=zi.get(m))&&!d.overlay&&d.bracketed&&n>=c&&n<=c+m.length)&&!nf(a,n,c,c+m.length))){if(m instanceof En){if(s&Ae.ExcludeBuffers)continue;let h=m.findChild(0,m.buffer.length,t,n-c,a);if(h>-1)return new Pn(new YW(r,m,e,c),null,h)}else if(s&Ae.IncludeAnonymous||!m.type.isAnonymous||Z0(m)){let h;if(!(s&Ae.IgnoreMounts)&&(h=zi.get(m))&&!h.overlay)return new Lt(h.tree,c,e,r);let g=new Lt(m,c,e,r);return s&Ae.IncludeAnonymous||!g.type.isAnonymous?g:g.nextChild(t<0?m.children.length-1:0,t,n,a,s)}}}if(s&Ae.IncludeAnonymous||!r.type.isAnonymous||(r.index>=0?e=r.index+t:e=t<0?-1:r._parent._tree.children.length,r=r._parent,!r))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,n=0){let a;if(!(n&Ae.IgnoreOverlays)&&(a=zi.get(this._tree))&&a.overlay){let s=e-this.from,r=n&Ae.EnterBracketed&&a.bracketed;for(let{from:o,to:l}of a.overlay)if((t>0||r?o<=s:o=s:l>s))return new Lt(a.tree,a.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,n)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function Ic(i,e,t,n){let a=i.cursor(),s=[];if(!a.firstChild())return s;if(t!=null){for(let r=!1;!r;)if(r=a.type.is(t),!a.nextSibling())return s}for(;;){if(n!=null&&a.type.is(n))return s;if(a.type.is(e)&&s.push(a.node),!a.nextSibling())return n==null?s:[]}}function Tl(i,e,t=e.length-1){for(let n=i;t>=0;n=n.parent){if(!n)return!1;if(!n.type.isAnonymous){if(e[t]&&e[t]!=n.name)return!1;t--}}return!0}class YW{constructor(e,t,n,a){this.parent=e,this.buffer=t,this.index=n,this.start=a}}class Pn extends af{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,n){super(),this.context=e,this._parent=t,this.index=n,this.type=e.buffer.set.types[e.buffer.buffer[n]]}child(e,t,n){let{buffer:a}=this.context,s=a.findChild(this.index+4,a.buffer[this.index+3],e,t-this.context.start,n);return s<0?null:new Pn(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,n=0){if(n&Ae.ExcludeBuffers)return null;let{buffer:a}=this.context,s=a.findChild(this.index+4,a.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return s<0?null:new Pn(this.context,this,s)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new Pn(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new Pn(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:n}=this.context,a=this.index+4,s=n.buffer[this.index+3];if(s>a){let r=n.buffer[this.index+1];e.push(n.slice(a,s,r)),t.push(0)}return new Le(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function sf(i){if(!i.length)return null;let e=0,t=i[0];for(let s=1;st.from||r.to=e){let o=new Lt(r.tree,r.overlay[0].from+s.from,-1,s);(a||(a=[n])).push(Li(o,e,t,!1))}}return a?sf(a):n}class _l{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~Ae.EnterBracketed,e instanceof Lt)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let n=e._parent;n;n=n._parent)this.stack.unshift(n.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:n,buffer:a}=this.buffer;return this.type=t||a.set.types[a.buffer[e]],this.from=n+a.buffer[e+1],this.to=n+a.buffer[e+2],!0}yield(e){return e?e instanceof Lt?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,n){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,n,this.mode));let{buffer:a}=this.buffer,s=a.findChild(this.index+4,a.buffer[this.index+3],e,t-this.buffer.start,n);return s<0?!1:(this.stack.push(this.index),this.yieldBuf(s))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,n=this.mode){return this.buffer?n&Ae.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,n))}parent(){if(!this.buffer)return this.yieldNode(this.mode&Ae.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&Ae.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,n=this.stack.length-1;if(e<0){let a=n<0?0:this.stack[n]+4;if(this.index!=a)return this.yieldBuf(t.findChild(a,this.index,-1,0,4))}else{let a=t.buffer[this.index+3];if(a<(n<0?t.buffer.length:t.buffer[this.stack[n]+3]))return this.yieldBuf(a)}return n<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,n,{buffer:a}=this;if(a){if(e>0){if(this.index-1)for(let s=t+e,r=e<0?-1:n._tree.children.length;s!=r;s+=e){let o=n._tree.children[s];if(this.mode&Ae.IncludeAnonymous||o instanceof En||!o.type.isAnonymous||Z0(o))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let r=e;r;r=r._parent)if(r.index==a){if(a==this.index)return r;t=r,n=s+1;break e}a=this.stack[--s]}for(let a=n;a=0;s--){if(s<0)return Tl(this._tree,e,a);let r=n[t.buffer[this.stack[s]]];if(!r.isAnonymous){if(e[a]&&e[a]!=r.name)return!1;a--}}return!0}}function Z0(i){return i.children.some(e=>e instanceof En||!e.type.isAnonymous||Z0(e))}function eE(i){var e;let{buffer:t,nodeSet:n,maxBufferLength:a=tf,reused:s=[],minRepeatType:r=n.types.length}=i,o=Array.isArray(t)?new D0(t,t.length):t,l=n.types,u=0,m=0;function c(I,k,T,C,M,P){let{id:O,start:A,end:B,size:E}=o,U=m,ee=u;if(E<0)if(o.next(),E==-1){let j=s[O];T.push(j),C.push(A-I);return}else if(E==-3){u=O;return}else if(E==-4){m=O;return}else throw new RangeError(`Unrecognized record size: ${E}`);let ge=l[O],Ie,fe,F=A-I;if(B-A<=a&&(fe=b(o.pos-k,M))){let j=new Uint16Array(fe.size-fe.skip),N=o.pos-fe.size,Q=j.length;for(;o.pos>N;)Q=x(fe.start,j,Q);Ie=new En(j,B-fe.start,n),F=fe.start-I}else{let j=o.pos-E;o.next();let N=[],Q=[],Y=O>=r?O:-1,ue=0,X=B,me=U;for(;o.pos>j;)Y>=0&&o.id==Y&&o.size>=0?(o.end<=X-a&&(g(N,Q,A,ue,o.end,X,Y,me,ee),ue=N.length,X=o.end,me=m),o.next()):P>2500?d(A,j,N,Q):c(A,j,N,Q,Y,P+1);if(Y>=0&&ue>0&&ue-1&&ue>0){let le=h(ge,ee);Ie=B0(ge,N,Q,0,N.length,0,B-A,le,le)}else Ie=f(ge,N,Q,B-A,U-B,ee)}T.push(Ie),C.push(F)}function d(I,k,T,C){let M=[],P=0,O=-1;for(;o.pos>k;){let{id:A,start:B,end:E,size:U}=o;if(U>4)o.next();else{if(O>-1&&B=0;E-=3)A[U++]=M[E],A[U++]=M[E+1]-B,A[U++]=M[E+2]-B,A[U++]=U;T.push(new En(A,M[2]-B,n)),C.push(B-I)}}function h(I,k){return(T,C,M)=>{let P=0,O=T.length-1,A,B;if(O>=0&&(A=T[O])instanceof Le){if(!O&&A.type==I&&A.length==M)return A;(B=A.prop(ae.lookAhead))&&(P=C[O]+A.length+B-M)}return f(I,T,C,M,P,k)}}function g(I,k,T,C,M,P,O,A,B){let E=[],U=[];for(;I.length>C;)E.push(I.pop()),U.push(k.pop()+T-M);I.push(f(n.types[O],E,U,P-M,A-P,B)),k.push(M-T)}function f(I,k,T,C,M,P,O){if(P){let A=[ae.contextHash,P];O=O?[A].concat(O):[A]}if(M>25){let A=[ae.lookAhead,M];O=O?[A].concat(O):[A]}return new Le(I,k,T,C,O)}function b(I,k){let T=o.fork(),C=0,M=0,P=0,O=T.end-a,A={size:0,start:0,skip:0};e:for(let B=T.pos-I;T.pos>B;){let E=T.size;if(T.id==k&&E>=0){A.size=C,A.start=M,A.skip=P,P+=4,C+=4,T.next();continue}let U=T.pos-E;if(E<0||U=r?4:0,ge=T.start;for(T.next();T.pos>U;){if(T.size<0)if(T.size==-3||T.size==-4)ee+=4;else break e;else T.id>=r&&(ee+=4);T.next()}M=ge,C+=E,P+=ee}return(k<0||C==I)&&(A.size=C,A.start=M,A.skip=P),A.size>4?A:void 0}function x(I,k,T){let{id:C,start:M,end:P,size:O}=o;if(o.next(),O>=0&&C4){let B=o.pos-(O-4);for(;o.pos>B;)T=x(I,k,T)}k[--T]=A,k[--T]=P-I,k[--T]=M-I,k[--T]=C}else O==-3?u=C:O==-4&&(m=C);return T}let v=[],w=[];for(;o.pos>0;)c(i.start||0,i.bufferStart||0,v,w,-1,0);let z=(e=i.length)!==null&&e!==void 0?e:v.length?w[0]+v[0].length:0;return new Le(l[i.topID],v.reverse(),w.reverse(),z)}const kc=new WeakMap;function Xa(i,e){if(!i.isAnonymous||e instanceof En||e.type!=i)return 1;let t=kc.get(e);if(t==null){t=1;for(let n of e.children){if(n.type!=i||!(n instanceof Le)){t=1;break}t+=Xa(i,n)}kc.set(e,t)}return t}function B0(i,e,t,n,a,s,r,o,l){let u=0;for(let g=n;g=m)break;k+=T}if(w==z+1){if(k>m){let T=g[z];h(T.children,T.positions,0,T.children.length,f[z]+v);continue}c.push(g[z])}else{let T=f[w-1]+g[w-1].length-I;c.push(B0(i,g,f,z,w,I,T,null,l))}d.push(I+v-s)}}return h(e,t,n,a,0),(o||l)(c,d,r)}class a1{constructor(e,t,n,a,s=!1,r=!1){this.from=e,this.to=t,this.tree=n,this.offset=a,this.open=(s?1:0)|(r?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],n=!1){let a=[new a1(0,e.length,e,0,!1,n)];for(let s of t)s.to>e.length&&a.push(s);return a}static applyChanges(e,t,n=128){if(!t.length)return e;let a=[],s=1,r=e.length?e[0]:null;for(let o=0,l=0,u=0;;o++){let m=o=n)for(;r&&r.from=d.from||c<=d.to||u){let h=Math.max(d.from,l)-u,g=Math.min(d.to,c)-u;d=h>=g?null:new a1(h,g,d.tree,d.offset+u,o>0,!!m)}if(d&&a.push(d),r.to>c)break;r=snew qr(a.from,a.to)):[new qr(0,0)]:[new qr(0,e.length)],this.createParse(e,t||[],n)}parse(e,t,n){let a=this.startParse(e,t,n);for(;;){let s=a.advance();if(s)return s}}}class tE{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new ae({perNode:!0});let nE=0;class Ot{constructor(e,t,n,a){this.name=e,this.set=t,this.base=n,this.modified=a,this.id=nE++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let n=typeof e=="string"?e:"?";if(e instanceof Ot&&(t=e),t!=null&&t.base)throw new Error("Can not derive from a modified tag");let a=new Ot(n,[],null,[]);if(a.set.push(a),t)for(let s of t.set)a.set.push(s);return a}static defineModifier(e){let t=new Ps(e);return n=>n.modified.indexOf(t)>-1?n:Ps.get(n.base||n,n.modified.concat(t).sort((a,s)=>a.id-s.id))}}let iE=0;class Ps{constructor(e){this.name=e,this.instances=[],this.id=iE++}static get(e,t){if(!t.length)return e;let n=t[0].instances.find(o=>o.base==e&&aE(t,o.modified));if(n)return n;let a=[],s=new Ot(e.name,a,e,t);for(let o of t)o.instances.push(s);let r=sE(t);for(let o of e.set)if(!o.modified.length)for(let l of r)a.push(Ps.get(o,l));return s}}function aE(i,e){return i.length==e.length&&i.every((t,n)=>t==e[n])}function sE(i){let e=[[]];for(let t=0;tn.length-t.length)}function of(i){let e=Object.create(null);for(let t in i){let n=i[t];Array.isArray(n)||(n=[n]);for(let a of t.split(" "))if(a){let s=[],r=2,o=a;for(let c=0;;){if(o=="..."&&c>0&&c+3==a.length){r=1;break}let d=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(o);if(!d)throw new RangeError("Invalid path: "+a);if(s.push(d[0]=="*"?"":d[0][0]=='"'?JSON.parse(d[0]):d[0]),c+=d[0].length,c==a.length)break;let h=a[c++];if(c==a.length&&h=="!"){r=0;break}if(h!="/")throw new RangeError("Invalid path: "+a);o=a.slice(c)}let l=s.length-1,u=s[l];if(!u)throw new RangeError("Invalid path: "+a);let m=new Wi(n,r,l>0?s.slice(0,l):null);e[u]=m.sort(e[u])}}return lf.add(e)}const lf=new ae({combine(i,e){let t,n,a;for(;i||e;){if(!i||e&&i.depth<=e.depth?(a=e,e=e.next):(a=i,i=i.next),t&&t.mode==a.mode&&!a.context&&!t.context)continue;let s=new Wi(a.tags,a.mode,a.context);t?t.next=s:n=s,t=s}return n}});class Wi{constructor(e,t,n,a){this.tags=e,this.mode=t,this.context=n,this.next=a}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let r=a;for(let o of s)for(let l of o.set){let u=t[l.id];if(u){r=r?r+" "+u:u;break}}return r},scope:n}}function rE(i,e){let t=null;for(let n of i){let a=n.style(e);a&&(t=t?t+" "+a:a)}return t}function oE(i,e,t,n=0,a=i.length){let s=new lE(n,Array.isArray(e)?e:[e],t);s.highlightRange(i.cursor(),n,a,"",s.highlighters),s.flush(a)}class lE{constructor(e,t,n){this.at=e,this.highlighters=t,this.span=n,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,n,a,s){let{type:r,from:o,to:l}=e;if(o>=n||l<=t)return;r.isTop&&(s=this.highlighters.filter(h=>!h.scope||h.scope(r)));let u=a,m=uE(e)||Wi.empty,c=rE(s,m.tags);if(c&&(u&&(u+=" "),u+=c,m.mode==1&&(a+=(a?" ":"")+c)),this.startSpan(Math.max(t,o),u),m.opaque)return;let d=e.tree&&e.tree.prop(ae.mounted);if(d&&d.overlay){let h=e.node.enter(d.overlay[0].from+o,1),g=this.highlighters.filter(b=>!b.scope||b.scope(d.tree.type)),f=e.firstChild();for(let b=0,x=o;;b++){let v=b=w||!e.nextSibling())););if(!v||w>n)break;x=v.to+o,x>t&&(this.highlightRange(h.cursor(),Math.max(t,v.from+o),Math.min(n,x),"",g),this.startSpan(Math.min(n,x),u))}f&&e.parent()}else if(e.firstChild()){d&&(a="");do if(!(e.to<=t)){if(e.from>=n)break;this.highlightRange(e,t,n,a,s),this.startSpan(Math.min(n,e.to),u)}while(e.nextSibling());e.parent()}}}function uE(i){let e=i.type.prop(lf);for(;e&&e.context&&!i.matchContext(e.context);)e=e.next;return e||null}const J=Ot.define,Oa=J(),Sn=J(),Sc=J(Sn),Tc=J(Sn),Tn=J(),Pa=J(Tn),Qr=J(Tn),en=J(),Gn=J(en),Xt=J(),Kt=J(),Cl=J(),X1=J(Cl),Ma=J(),W={comment:Oa,lineComment:J(Oa),blockComment:J(Oa),docComment:J(Oa),name:Sn,variableName:J(Sn),typeName:Sc,tagName:J(Sc),propertyName:Tc,attributeName:J(Tc),className:J(Sn),labelName:J(Sn),namespace:J(Sn),macroName:J(Sn),literal:Tn,string:Pa,docString:J(Pa),character:J(Pa),attributeValue:J(Pa),number:Qr,integer:J(Qr),float:J(Qr),bool:J(Tn),regexp:J(Tn),escape:J(Tn),color:J(Tn),url:J(Tn),keyword:Xt,self:J(Xt),null:J(Xt),atom:J(Xt),unit:J(Xt),modifier:J(Xt),operatorKeyword:J(Xt),controlKeyword:J(Xt),definitionKeyword:J(Xt),moduleKeyword:J(Xt),operator:Kt,derefOperator:J(Kt),arithmeticOperator:J(Kt),logicOperator:J(Kt),bitwiseOperator:J(Kt),compareOperator:J(Kt),updateOperator:J(Kt),definitionOperator:J(Kt),typeOperator:J(Kt),controlOperator:J(Kt),punctuation:Cl,separator:J(Cl),bracket:X1,angleBracket:J(X1),squareBracket:J(X1),paren:J(X1),brace:J(X1),content:en,heading:Gn,heading1:J(Gn),heading2:J(Gn),heading3:J(Gn),heading4:J(Gn),heading5:J(Gn),heading6:J(Gn),contentSeparator:J(en),list:J(en),quote:J(en),emphasis:J(en),strong:J(en),link:J(en),monospace:J(en),strikethrough:J(en),inserted:J(),deleted:J(),changed:J(),invalid:J(),meta:Ma,documentMeta:J(Ma),annotation:J(Ma),processingInstruction:J(Ma),definition:Ot.defineModifier("definition"),constant:Ot.defineModifier("constant"),function:Ot.defineModifier("function"),standard:Ot.defineModifier("standard"),local:Ot.defineModifier("local"),special:Ot.defineModifier("special")};for(let i in W){let e=W[i];e instanceof Ot&&(e.name=i)}uf([{tag:W.link,class:"tok-link"},{tag:W.heading,class:"tok-heading"},{tag:W.emphasis,class:"tok-emphasis"},{tag:W.strong,class:"tok-strong"},{tag:W.keyword,class:"tok-keyword"},{tag:W.atom,class:"tok-atom"},{tag:W.bool,class:"tok-bool"},{tag:W.url,class:"tok-url"},{tag:W.labelName,class:"tok-labelName"},{tag:W.inserted,class:"tok-inserted"},{tag:W.deleted,class:"tok-deleted"},{tag:W.literal,class:"tok-literal"},{tag:W.string,class:"tok-string"},{tag:W.number,class:"tok-number"},{tag:[W.regexp,W.escape,W.special(W.string)],class:"tok-string2"},{tag:W.variableName,class:"tok-variableName"},{tag:W.local(W.variableName),class:"tok-variableName tok-local"},{tag:W.definition(W.variableName),class:"tok-variableName tok-definition"},{tag:W.special(W.variableName),class:"tok-variableName2"},{tag:W.definition(W.propertyName),class:"tok-propertyName tok-definition"},{tag:W.typeName,class:"tok-typeName"},{tag:W.namespace,class:"tok-namespace"},{tag:W.className,class:"tok-className"},{tag:W.macroName,class:"tok-macroName"},{tag:W.propertyName,class:"tok-propertyName"},{tag:W.operator,class:"tok-operator"},{tag:W.comment,class:"tok-comment"},{tag:W.meta,class:"tok-meta"},{tag:W.invalid,class:"tok-invalid"},{tag:W.punctuation,class:"tok-punctuation"}]);var Ur;const z1=new ae;function mE(i){return V.define({combine:i?e=>e.concat(i):void 0})}const cE=new ae;class Ht{constructor(e,t,n=[],a=""){this.data=e,this.name=a,re.prototype.hasOwnProperty("tree")||Object.defineProperty(re.prototype,"tree",{get(){return Xe(this)}}),this.parser=t,this.extension=[W1.of(this),re.languageData.of((s,r,o)=>{let l=_c(s,r,o),u=l.type.prop(z1);if(!u)return[];let m=s.facet(u),c=l.type.prop(cE);if(c){let d=l.resolve(r-l.from,o);for(let h of c)if(h.test(d,s)){let g=s.facet(h.facet);return h.type=="replace"?g:g.concat(m)}}return m})].concat(n)}isActiveAt(e,t,n=-1){return _c(e,t,n).type.prop(z1)==this.data}findRegions(e){let t=e.facet(W1);if((t==null?void 0:t.data)==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let n=[],a=(s,r)=>{if(s.prop(z1)==this.data){n.push({from:r,to:r+s.length});return}let o=s.prop(ae.mounted);if(o){if(o.tree.prop(z1)==this.data){if(o.overlay)for(let l of o.overlay)n.push({from:l.from+r,to:l.to+r});else n.push({from:r,to:r+s.length});return}else if(o.overlay){let l=n.length;if(a(o.tree,o.overlay[0].from+r),n.length>l)return}}for(let l=0;ln.isTop?t:void 0)]}),e.name)}configure(e,t){return new Ms(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function Xe(i){let e=i.field(Ht.state,!1);return e?e.tree:Le.empty}class dE{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let n=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-n,t-n)}}let K1=null;class Ds{constructor(e,t,n=[],a,s,r,o,l){this.parser=e,this.state=t,this.fragments=n,this.tree=a,this.treeLen=s,this.viewport=r,this.skipped=o,this.scheduleOn=l,this.parse=null,this.tempSkipped=[]}static create(e,t,n){return new Ds(e,t,[],Le.empty,0,n,[],null)}startParse(){return this.parser.startParse(new dE(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=Le.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var n;if(typeof e=="number"){let a=Date.now()+e;e=()=>Date.now()>a}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(a1.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=K1;K1=this;try{return e()}finally{K1=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=Cc(e,t.from,t.to);return e}changes(e,t){let{fragments:n,tree:a,treeLen:s,viewport:r,skipped:o}=this;if(this.takeTree(),!e.empty){let l=[];if(e.iterChangedRanges((u,m,c,d)=>l.push({fromA:u,toA:m,fromB:c,toB:d})),n=a1.applyChanges(n,l),a=Le.empty,s=0,r={from:e.mapPos(r.from,-1),to:e.mapPos(r.to,1)},this.skipped.length){o=[];for(let u of this.skipped){let m=e.mapPos(u.from,1),c=e.mapPos(u.to,-1);me.from&&(this.fragments=Cc(this.fragments,a,s),this.skipped.splice(n--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends rf{createParse(t,n,a){let s=a[0].from,r=a[a.length-1].to;return{parsedPos:s,advance(){let l=K1;if(l){for(let u of a)l.tempSkipped.push(u);e&&(l.scheduleOn=l.scheduleOn?Promise.all([l.scheduleOn,e]):e)}return this.parsedPos=r,new Le(ft.none,[],[],r-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return K1}}function Cc(i,e,t){return a1.applyChanges(i,[{fromA:e,toA:t,fromB:e,toB:t}])}class L1{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),n=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,n)||t.takeTree(),new L1(t)}static init(e){let t=Math.min(3e3,e.doc.length),n=Ds.create(e.facet(W1).parser,e,{from:0,to:t});return n.work(20,t)||n.takeTree(),new L1(n)}}Ht.state=Et.define({create:L1.init,update(i,e){for(let t of e.effects)if(t.is(Ht.setState))return t.value;return e.startState.facet(W1)!=e.state.facet(W1)?L1.init(e.state):i.apply(e)}});let mf=i=>{let e=setTimeout(()=>i(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(mf=i=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(i,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const $r=typeof navigator<"u"&&(!((Ur=navigator.scheduling)===null||Ur===void 0)&&Ur.isInputPending)?()=>navigator.scheduling.isInputPending():null,hE=Wt.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(Ht.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(Ht.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=mf(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnda+1e3,l=s.context.work(()=>$r&&$r()||Date.now()>r,a+(o?0:1e5));this.chunkBudget-=Date.now()-t,(l||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:Ht.setState.of(new L1(s.context))})),this.chunkBudget>0&&!(l&&!o)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>zt(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),W1=V.define({combine(i){return i.length?i[0]:null},enables:i=>[Ht.state,hE,q.contentAttributes.compute([i],e=>{let t=e.facet(i);return t&&t.name?{"data-language":t.name}:{}})]});class gE{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const pE=V.define(),Yi=V.define({combine:i=>{if(!i.length)return" ";let e=i[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(i[0]));return e}});function Zs(i){let e=i.facet(Yi);return e.charCodeAt(0)==9?i.tabSize*e.length:e.length}function Ei(i,e){let t="",n=i.tabSize,a=i.facet(Yi)[0];if(a==" "){for(;e>=n;)t+=" ",e-=n;a=" "}for(let s=0;s=e?fE(i,t,e):null}class ur{constructor(e,t={}){this.state=e,this.options=t,this.unit=Zs(e)}lineAt(e,t=1){let n=this.state.doc.lineAt(e),{simulateBreak:a,simulateDoubleBreak:s}=this.options;return a!=null&&a>=n.from&&a<=n.to?s&&a==e?{text:"",from:e}:(t<0?a-1&&(s+=r-this.countColumn(n,n.search(/\S|$/))),s}countColumn(e,t=e.length){return qi(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:n,from:a}=this.lineAt(e,t),s=this.options.overrideIndentation;if(s){let r=s(a);if(r>-1)return r}return this.countColumn(n,n.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const cf=new ae;function fE(i,e,t){let n=e.resolveStack(t),a=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(a!=n.node){let s=[];for(let r=a;r&&!(r.fromn.node.to||r.from==n.node.from&&r.type==n.node.type);r=r.parent)s.push(r);for(let r=s.length-1;r>=0;r--)n={node:s[r],next:n}}return df(n,i,t)}function df(i,e,t){for(let n=i;n;n=n.next){let a=xE(n.node);if(a)return a(W0.create(e,t,n))}return 0}function bE(i){return i.pos==i.options.simulateBreak&&i.options.simulateDoubleBreak}function xE(i){let e=i.type.prop(cf);if(e)return e;let t=i.firstChild,n;if(t&&(n=t.type.prop(ae.closedBy))){let a=i.lastChild,s=a&&n.indexOf(a.name)>-1;return r=>hf(r,!0,1,void 0,s&&!bE(r)?a.from:void 0)}return i.parent==null?vE:null}function vE(){return 0}class W0 extends ur{constructor(e,t,n){super(e.state,e.options),this.base=e,this.pos=t,this.context=n}get node(){return this.context.node}static create(e,t,n){return new W0(e,t,n)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let n=e.resolve(t.from);for(;n.parent&&n.parent.from==n.from;)n=n.parent;if(yE(n,e))break;t=this.state.doc.lineAt(n.from)}return this.lineIndent(t.from)}continue(){return df(this.context.next,this.base,this.pos)}}function yE(i,e){for(let t=e;t;t=t.parent)if(i==t)return!0;return!1}function wE(i){let e=i.node,t=e.childAfter(e.from),n=e.lastChild;if(!t)return null;let a=i.options.simulateBreak,s=i.state.doc.lineAt(t.from),r=a==null||a<=s.from?s.to:Math.min(s.to,a);for(let o=t.to;;){let l=e.childAfter(o);if(!l||l==n)return null;if(!l.type.isSkipped){if(l.from>=r)return null;let u=/^ */.exec(s.text.slice(t.to-s.from))[0].length;return{from:t.from,to:t.to+u}}o=l.to}}function zE({closing:i,align:e=!0,units:t=1}){return n=>hf(n,e,t,i)}function hf(i,e,t,n,a){let s=i.textAfter,r=s.match(/^\s*/)[0].length,o=n&&s.slice(r,r+n.length)==n||a==i.pos+r,l=e?wE(i):null;return l?o?i.column(l.from):i.column(l.to):i.baseIndent+(o?0:i.unit*t)}const IE=i=>i.baseIndent;function Yr({except:i,units:e=1}={}){return t=>{let n=i&&i.test(t.textAfter);return t.baseIndent+(n?0:e*t.unit)}}const kE=200;function SE(){return re.transactionFilter.of(i=>{if(!i.docChanged||!i.isUserEvent("input.type")&&!i.isUserEvent("input.complete"))return i;let e=i.startState.languageDataAt("indentOnInput",i.startState.selection.main.head);if(!e.length)return i;let t=i.newDoc,{head:n}=i.newSelection.main,a=t.lineAt(n);if(n>a.from+kE)return i;let s=t.sliceString(a.from,n);if(!e.some(u=>u.test(s)))return i;let{state:r}=i,o=-1,l=[];for(let{head:u}of r.selection.ranges){let m=r.doc.lineAt(u);if(m.from==o)continue;o=m.from;let c=L0(r,m.from);if(c==null)continue;let d=/^\s*/.exec(m.text)[0],h=Ei(r,c);d!=h&&l.push({from:m.from,to:m.from+d.length,insert:h})}return l.length?[i,{changes:l,sequential:!0}]:i})}const TE=new ae;function _E(i){let e=i.firstChild,t=i.lastChild;return e&&e.too.prop(z1)==r.data:r?o=>o==r:void 0,this.style=uf(e.map(o=>({tag:o.tag,class:o.class||a(Object.assign({},o,{tag:null}))})),{all:s}).style,this.module=n?new Bn(n):null,this.themeType=t.themeType}static define(e,t){return new mr(e,t||{})}}const Al=V.define(),CE=V.define({combine(i){return i.length?[i[0]]:null}});function Xr(i){let e=i.facet(Al);return e.length?e:i.facet(CE)}function AE(i,e){let t=[OE],n;return i instanceof mr&&(i.module&&t.push(q.styleModule.of(i.module)),n=i.themeType),n?t.push(Al.computeN([q.darkTheme],a=>a.facet(q.darkTheme)==(n=="dark")?[i]:[])):t.push(Al.of(i)),t}class jE{constructor(e){this.markCache=Object.create(null),this.tree=Xe(e.state),this.decorations=this.buildDeco(e,Xr(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Xe(e.state),n=Xr(e.state),a=n!=Xr(e.startState),{viewport:s}=e.view,r=e.changes.mapPos(this.decoratedTo,1);t.length=s.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=r):(t!=this.tree||e.viewportChanged||a)&&(this.tree=t,this.decorations=this.buildDeco(e.view,n),this.decoratedTo=s.to)}buildDeco(e,t){if(!t||!this.tree.length)return he.none;let n=new i1;for(let{from:a,to:s}of e.visibleRanges)oE(this.tree,t,(r,o,l)=>{n.add(r,o,this.markCache[l]||(this.markCache[l]=he.mark({class:l})))},a,s);return n.finish()}}const OE=u1.high(Wt.fromClass(jE,{decorations:i=>i.decorations})),PE=q.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),gf=1e4,pf="()[]{}",ff=V.define({combine(i){return y0(i,{afterCursor:!0,brackets:pf,maxScanDistance:gf,renderMatch:ZE})}}),ME=he.mark({class:"cm-matchingBracket"}),DE=he.mark({class:"cm-nonmatchingBracket"});function ZE(i){let e=[],t=i.matched?ME:DE;return e.push(t.range(i.start.from,i.start.to)),i.end&&e.push(t.range(i.end.from,i.end.to)),e}function Ac(i){let e=[],t=i.facet(ff);for(let n of i.selection.ranges){if(!n.empty)continue;let a=on(i,n.head,-1,t)||n.head>0&&on(i,n.head-1,1,t)||t.afterCursor&&(on(i,n.head,1,t)||n.headi.decorations}),LE=[BE,PE];function WE(i={}){return[ff.of(i),LE]}const EE=new ae;function jl(i,e,t){let n=i.prop(e<0?ae.openedBy:ae.closedBy);if(n)return n;if(i.name.length==1){let a=t.indexOf(i.name);if(a>-1&&a%2==(e<0?1:0))return[t[a+e]]}return null}function Ol(i){let e=i.type.prop(EE);return e?e(i.node):i}function on(i,e,t,n={}){let a=n.maxScanDistance||gf,s=n.brackets||pf,r=Xe(i),o=r.resolveInner(e,t);for(let l=o;l;l=l.parent){let u=jl(l.type,t,s);if(u&&l.from0?e>=m.from&&em.from&&e<=m.to))return NE(i,e,t,l,m,u,s)}}return JE(i,e,t,r,o.type,a,s)}function NE(i,e,t,n,a,s,r){let o=n.parent,l={from:a.from,to:a.to},u=0,m=o==null?void 0:o.cursor();if(m&&(t<0?m.childBefore(n.from):m.childAfter(n.to)))do if(t<0?m.to<=n.from:m.from>=n.to){if(u==0&&s.indexOf(m.type.name)>-1&&m.from0)return null;let u={from:t<0?e-1:e,to:t>0?e+1:e},m=i.doc.iterRange(e,t>0?i.doc.length:0),c=0;for(let d=0;!m.next().done&&d<=s;){let h=m.value;t<0&&(d+=h.length);let g=e+d*t;for(let f=t>0?0:h.length-1,b=t>0?h.length:-1;f!=b;f+=t){let x=r.indexOf(h[f]);if(!(x<0||n.resolveInner(g+f,1).type!=a))if(x%2==0==t>0)c++;else{if(c==1)return{start:u,end:{from:g+f,to:g+f+1},matched:x>>1==l>>1};c--}}t>0&&(d+=h.length)}return m.done?{start:u,matched:!1}:null}const FE=Object.create(null),jc=[ft.none],Oc=[],Pc=Object.create(null),RE=Object.create(null);for(let[i,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])RE[i]=GE(FE,e);function Kr(i,e){Oc.indexOf(i)>-1||(Oc.push(i),console.warn(e))}function GE(i,e){let t=[];for(let o of e.split(" ")){let l=[];for(let u of o.split(".")){let m=i[u]||W[u];m?typeof m=="function"?l.length?l=l.map(m):Kr(u,`Modifier ${u} used at start of tag`):l.length?Kr(u,`Tag ${u} used as modifier`):l=Array.isArray(m)?m:[m]:Kr(u,`Unknown highlighting tag ${u}`)}for(let u of l)t.push(u)}if(!t.length)return 0;let n=e.replace(/ /g,"_"),a=n+" "+t.map(o=>o.id),s=Pc[a];if(s)return s.id;let r=Pc[a]=ft.define({id:jc.length,name:n,props:[of({[n]:t})]});return jc.push(r),r.id}ye.RTL,ye.LTR;class bf{constructor(e,t,n,a){this.state=e,this.pos=t,this.explicit=n,this.view=a,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=Xe(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),n=Math.max(t.from,this.pos-250),a=t.text.slice(n-t.from,this.pos-t.from),s=a.search(xf(e,!1));return s<0?null:{from:n+s,to:this.pos,text:a.slice(s)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,n){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),n&&n.onDocChange&&(this.abortOnDocChange=!0))}}function Mc(i){let e=Object.keys(i).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function HE(i){let e=Object.create(null),t=Object.create(null);for(let{label:a}of i){e[a[0]]=!0;for(let s=1;stypeof a=="string"?{label:a}:a),[t,n]=e.every(a=>/^\w+$/.test(a.label))?[/\w*$/,/\w+$/]:HE(e);return a=>{let s=a.matchBefore(n);return s||a.explicit?{from:s?s.from:a.pos,options:e,validFor:t}:null}}class Dc{constructor(e,t,n,a){this.completion=e,this.source=t,this.match=n,this.score=a}}function s1(i){return i.selection.main.from}function xf(i,e){var t;let{source:n}=i,a=e&&n[0]!="^",s=n[n.length-1]!="$";return!a&&!s?i:new RegExp(`${a?"^":""}(?:${n})${s?"$":""}`,(t=i.flags)!==null&&t!==void 0?t:i.ignoreCase?"i":"")}const E0=Nn.define();function qE(i,e,t,n){let{main:a}=i.selection,s=t-a.from,r=n-a.from;return{...i.changeByRange(o=>{if(o!=a&&t!=n&&i.sliceDoc(o.from+s,o.from+r)!=i.sliceDoc(t,n))return{range:o};let l=i.toText(e);return{changes:{from:o.from+s,to:n==a.from?o.to:o.from+r,insert:l},range:D.cursor(o.from+s+l.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const Zc=new WeakMap;function QE(i){if(!Array.isArray(i))return i;let e=Zc.get(i);return e||Zc.set(i,e=VE(i)),e}const Bs=de.define(),Ni=de.define();class UE{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&I<=57||I>=97&&I<=122?2:I>=65&&I<=90?1:0:(k=Jg(I))!=k.toLowerCase()?1:k!=k.toUpperCase()?2:0;(!v||T==1&&b||z==0&&T!=0)&&(t[c]==I||n[c]==I&&(d=!0)?r[c++]=v:r.length&&(x=!1)),z=T,v+=hn(I)}return c==l&&r[0]==0&&x?this.result(-100+(d?-200:0),r,e):h==l&&g==0?this.ret(-200-e.length+(f==e.length?0:-100),[0,f]):o>-1?this.ret(-700-e.length,[o,o+this.pattern.length]):h==l?this.ret(-900-e.length,[g,f]):c==l?this.result(-100+(d?-200:0)+-700+(x?0:-1100),r,e):t.length==2?null:this.result((a[0]?-700:0)+-200+-1100,a,e)}result(e,t,n){let a=[],s=0;for(let r of t){let o=r+(this.astral?hn(jt(n,r)):1);s&&a[s-1]==r?a[s-1]=o:(a[s++]=r,a[s++]=o)}return this.ret(e-n.length,a)}}class $E{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:YE,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>n=>Bc(e(n),t(n)),optionClass:(e,t)=>n=>Bc(e(n),t(n)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function Bc(i,e){return i?e?i+" "+e:i:e}function YE(i,e,t,n,a,s){let r=i.textDirection==ye.RTL,o=r,l=!1,u="top",m,c,d=e.left-a.left,h=a.right-e.right,g=n.right-n.left,f=n.bottom-n.top;if(o&&d=f||v>e.top?m=t.bottom-e.top:(u="bottom",m=e.bottom-t.top)}let b=(e.bottom-e.top)/s.offsetHeight,x=(e.right-e.left)/s.offsetWidth;return{style:`${u}: ${m/b}px; max-width: ${c/x}px`,class:"cm-completionInfo-"+(l?r?"left-narrow":"right-narrow":o?"left":"right")}}const N0=de.define();function XE(i){let e=i.addToOptions.slice();return i.icons&&e.push({render(t){let n=document.createElement("div");return n.classList.add("cm-completionIcon"),t.type&&n.classList.add(...t.type.split(/\s+/g).map(a=>"cm-completionIcon-"+a)),n.setAttribute("aria-hidden","true"),n},position:20}),e.push({render(t,n,a,s){let r=document.createElement("span");r.className="cm-completionLabel";let o=t.displayLabel||t.label,l=0;for(let u=0;ul&&r.appendChild(document.createTextNode(o.slice(l,m)));let d=r.appendChild(document.createElement("span"));d.appendChild(document.createTextNode(o.slice(m,c))),d.className="cm-completionMatchedText",l=c}return lt.position-n.position).map(t=>t.render)}function eo(i,e,t){if(i<=t)return{from:0,to:i};if(e<0&&(e=0),e<=i>>1){let a=Math.floor(e/t);return{from:a*t,to:(a+1)*t}}let n=Math.ceil((i-e)/t);return{from:i-n*t,to:i-(n-1)*t}}class KE{constructor(e,t,n){this.view=e,this.stateField=t,this.applyCompletion=n,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:l=>this.placeInfo(l),key:this},this.space=null,this.currentClass="";let a=e.state.field(t),{options:s,selected:r}=a.open,o=e.state.facet(Ge);this.optionContent=XE(o),this.optionClass=o.optionClass,this.tooltipClass=o.tooltipClass,this.range=eo(s.length,r,o.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",l=>{let{options:u}=e.state.field(t).open;for(let m=l.target,c;m&&m!=this.dom;m=m.parentNode)if(m.nodeName=="LI"&&(c=/-(\d+)$/.exec(m.id))&&+c[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;m!=null&&(e.dispatch({effects:N0.of(m)}),l.preventDefault())}}),this.dom.addEventListener("focusout",l=>{let u=e.state.field(this.stateField,!1);u&&u.tooltip&&e.state.facet(Ge).closeOnBlur&&l.relatedTarget!=e.contentDOM&&e.dispatch({effects:Ni.of(null)})}),this.showOptions(s,a.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let n=e.state.field(this.stateField),a=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),n!=a){let{options:s,selected:r,disabled:o}=n.open;(!a.open||a.open.options!=s)&&(this.range=eo(s.length,r,e.state.facet(Ge).maxRenderedOptions),this.showOptions(s,n.id)),this.updateSel(),o!=((t=a.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!o)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let n of this.currentClass.split(" "))n&&this.dom.classList.remove(n);for(let n of t.split(" "))n&&this.dom.classList.add(n);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected=this.range.to)&&(this.range=eo(t.options.length,t.selected,this.view.state.facet(Ge).maxRenderedOptions),this.showOptions(t.options,e.id));let n=this.updateSelectedOption(t.selected);if(n){this.destroyInfo();let{completion:a}=t.options[t.selected],{info:s}=a;if(!s)return;let r=typeof s=="string"?document.createTextNode(s):s(a);if(!r)return;"then"in r?r.then(o=>{o&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(o,a)}).catch(o=>zt(this.view.state,o,"completion info")):(this.addInfoPane(r,a),n.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let n=this.info=document.createElement("div");if(n.className="cm-tooltip cm-completionInfo",n.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)n.appendChild(e),this.infoDestroy=null;else{let{dom:a,destroy:s}=e;n.appendChild(a),this.infoDestroy=s||null}this.dom.appendChild(n),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let n=this.list.firstChild,a=this.range.from;n;n=n.nextSibling,a++)n.nodeName!="LI"||!n.id?a--:a==e?n.hasAttribute("aria-selected")||(n.setAttribute("aria-selected","true"),t=n):n.hasAttribute("aria-selected")&&(n.removeAttribute("aria-selected"),n.removeAttribute("aria-describedby"));return t&&tN(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),n=this.info.getBoundingClientRect(),a=e.getBoundingClientRect(),s=this.space;if(!s){let r=this.dom.ownerDocument.documentElement;s={left:0,top:0,right:r.clientWidth,bottom:r.clientHeight}}return a.top>Math.min(s.bottom,t.bottom)-10||a.bottom{r.target==a&&r.preventDefault()});let s=null;for(let r=n.from;rn.from||n.from==0))if(s=d,typeof u!="string"&&u.header)a.appendChild(u.header(u));else{let h=a.appendChild(document.createElement("completion-section"));h.textContent=d}}const m=a.appendChild(document.createElement("li"));m.id=t+"-"+r,m.setAttribute("role","option");let c=this.optionClass(o);c&&(m.className=c);for(let d of this.optionContent){let h=d(o,this.view.state,this.view,l);h&&m.appendChild(h)}}return n.from&&a.classList.add("cm-completionListIncompleteTop"),n.tonew KE(t,i,e)}function tN(i,e){let t=i.getBoundingClientRect(),n=e.getBoundingClientRect(),a=t.height/i.offsetHeight;n.topt.bottom&&(i.scrollTop+=(n.bottom-t.bottom)/a)}function Lc(i){return(i.boost||0)*100+(i.apply?10:0)+(i.info?5:0)+(i.type?1:0)}function nN(i,e){let t=[],n=null,a=null,s=m=>{t.push(m);let{section:c}=m.completion;if(c){n||(n=[]);let d=typeof c=="string"?c:c.name;n.some(h=>h.name==d)||n.push(typeof c=="string"?{name:d}:c)}},r=e.facet(Ge);for(let m of i)if(m.hasResult()){let c=m.result.getMatch;if(m.result.filter===!1)for(let d of m.result.options)s(new Dc(d,m.source,c?c(d):[],1e9-t.length));else{let d=e.sliceDoc(m.from,m.to),h,g=r.filterStrict?new $E(d):new UE(d);for(let f of m.result.options)if(h=g.match(f.label)){let b=f.displayLabel?c?c(f,h.matched):[]:h.matched,x=h.score+(f.boost||0);if(s(new Dc(f,m.source,b,x)),typeof f.section=="object"&&f.section.rank==="dynamic"){let{name:v}=f.section;a||(a=Object.create(null)),a[v]=Math.max(x,a[v]||-1e9)}}}}if(n){let m=Object.create(null),c=0,d=(h,g)=>(h.rank==="dynamic"&&g.rank==="dynamic"?a[g.name]-a[h.name]:0)||(typeof h.rank=="number"?h.rank:1e9)-(typeof g.rank=="number"?g.rank:1e9)||(h.named.score-c.score||u(c.completion,d.completion))){let c=m.completion;!l||l.label!=c.label||l.detail!=c.detail||l.type!=null&&c.type!=null&&l.type!=c.type||l.apply!=c.apply||l.boost!=c.boost?o.push(m):Lc(m.completion)>Lc(l)&&(o[o.length-1]=m),l=m.completion}return o}class I1{constructor(e,t,n,a,s,r){this.options=e,this.attrs=t,this.tooltip=n,this.timestamp=a,this.selected=s,this.disabled=r}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new I1(this.options,Wc(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,n,a,s,r){if(a&&!r&&e.some(u=>u.isPending))return a.setDisabled();let o=nN(e,t);if(!o.length)return a&&e.some(u=>u.isPending)?a.setDisabled():null;let l=t.facet(Ge).selectOnOpen?0:-1;if(a&&a.selected!=l&&a.selected!=-1){let u=a.options[a.selected].completion;for(let m=0;mm.hasResult()?Math.min(u,m.from):u,1e8),create:lN,above:s.aboveCursor},a?a.timestamp:Date.now(),l,!1)}map(e){return new I1(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new I1(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Ls{constructor(e,t,n){this.active=e,this.id=t,this.open=n}static start(){return new Ls(rN,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,n=t.facet(Ge),s=(n.override||t.languageDataAt("autocomplete",s1(t)).map(QE)).map(l=>(this.active.find(m=>m.source==l)||new Bt(l,this.active.some(m=>m.state!=0)?1:0)).update(e,n));s.length==this.active.length&&s.every((l,u)=>l==this.active[u])&&(s=this.active);let r=this.open,o=e.effects.some(l=>l.is(J0));r&&e.docChanged&&(r=r.map(e.changes)),e.selection||s.some(l=>l.hasResult()&&e.changes.touchesRange(l.from,l.to))||!iN(s,this.active)||o?r=I1.build(s,t,this.id,r,n,o):r&&r.disabled&&!s.some(l=>l.isPending)&&(r=null),!r&&s.every(l=>!l.isPending)&&s.some(l=>l.hasResult())&&(s=s.map(l=>l.hasResult()?new Bt(l.source,0):l));for(let l of e.effects)l.is(N0)&&(r=r&&r.setSelected(l.value,this.id));return s==this.active&&r==this.open?this:new Ls(s,this.id,r)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?aN:sN}}function iN(i,e){if(i==e)return!0;for(let t=0,n=0;;){for(;t-1&&(t["aria-activedescendant"]=i+"-"+e),t}const rN=[];function vf(i,e){if(i.isUserEvent("input.complete")){let n=i.annotation(E0);if(n&&e.activateOnCompletion(n))return 12}let t=i.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:i.isUserEvent("delete.backward")?2:i.selection?8:i.docChanged?16:0}class Bt{constructor(e,t,n=!1){this.source=e,this.state=t,this.explicit=n}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let n=vf(e,t),a=this;(n&8||n&16&&this.touches(e))&&(a=new Bt(a.source,0)),n&4&&a.state==0&&(a=new Bt(this.source,1)),a=a.updateFor(e,n);for(let s of e.effects)if(s.is(Bs))a=new Bt(a.source,1,s.value);else if(s.is(Ni))a=new Bt(a.source,0);else if(s.is(J0))for(let r of s.value)r.source==a.source&&(a=r);return a}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(s1(e.state))}}class A1 extends Bt{constructor(e,t,n,a,s,r){super(e,3,t),this.limit=n,this.result=a,this.from=s,this.to=r}hasResult(){return!0}updateFor(e,t){var n;if(!(t&3))return this.map(e.changes);let a=this.result;a.map&&!e.changes.empty&&(a=a.map(a,e.changes));let s=e.changes.mapPos(this.from),r=e.changes.mapPos(this.to,1),o=s1(e.state);if(o>r||!a||t&2&&(s1(e.startState)==this.from||ot.map(e))}}),gt=Et.define({create(){return Ls.start()},update(i,e){return i.update(e)},provide:i=>[Yp.from(i,e=>e.tooltip),q.contentAttributes.from(i,e=>e.attrs)]});function F0(i,e){const t=e.completion.apply||e.completion.label;let n=i.state.field(gt).active.find(a=>a.source==e.source);return n instanceof A1?(typeof t=="string"?i.dispatch({...qE(i.state,t,n.from,n.to),annotations:E0.of(e.completion)}):t(i,e.completion,n.from,n.to),!0):!1}const lN=eN(gt,F0);function Da(i,e="option"){return t=>{let n=t.state.field(gt,!1);if(!n||!n.open||n.open.disabled||Date.now()-n.open.timestamp-1?n.open.selected+a*(i?1:-1):i?0:r-1;return o<0?o=e=="page"?0:r-1:o>=r&&(o=e=="page"?r-1:0),t.dispatch({effects:N0.of(o)}),!0}}const uN=i=>{let e=i.state.field(gt,!1);return i.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampi.state.field(gt,!1)?(i.dispatch({effects:Bs.of(!0)}),!0):!1,mN=i=>{let e=i.state.field(gt,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(i.dispatch({effects:Ni.of(null)}),!0)};class cN{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const dN=50,hN=1e3,gN=Wt.fromClass(class{constructor(i){this.view=i,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of i.state.field(gt).active)e.isPending&&this.startQuery(e)}update(i){let e=i.state.field(gt),t=i.state.facet(Ge);if(!i.selectionSet&&!i.docChanged&&i.startState.field(gt)==e)return;let n=i.transactions.some(s=>{let r=vf(s,t);return r&8||(s.selection||s.docChanged)&&!(r&3)});for(let s=0;sdN&&Date.now()-r.time>hN){for(let o of r.context.abortListeners)try{o()}catch(l){zt(this.view.state,l)}r.context.abortListeners=null,this.running.splice(s--,1)}else r.updates.push(...i.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),i.transactions.some(s=>s.effects.some(r=>r.is(Bs)))&&(this.pendingStart=!0);let a=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(s=>s.isPending&&!this.running.some(r=>r.active.source==s.source))?setTimeout(()=>this.startUpdate(),a):-1,this.composing!=0)for(let s of i.transactions)s.isUserEvent("input.type")?this.composing=2:this.composing==2&&s.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:i}=this.view,e=i.field(gt);for(let t of e.active)t.isPending&&!this.running.some(n=>n.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ge).updateSyncTime))}startQuery(i){let{state:e}=this.view,t=s1(e),n=new bf(e,t,i.explicit,this.view),a=new cN(i,n);this.running.push(a),Promise.resolve(i.source(n)).then(s=>{a.context.aborted||(a.done=s||null,this.scheduleAccept())},s=>{this.view.dispatch({effects:Ni.of(null)}),zt(this.view.state,s)})}scheduleAccept(){this.running.every(i=>i.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ge).updateSyncTime))}accept(){var i;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(Ge),n=this.view.state.field(gt);for(let a=0;ao.source==s.active.source);if(r&&r.isPending)if(s.done==null){let o=new Bt(s.active.source,0);for(let l of s.updates)o=o.update(l,t);o.isPending||e.push(o)}else this.startQuery(r)}(e.length||n.open&&n.open.disabled)&&this.view.dispatch({effects:J0.of(e)})}},{eventHandlers:{blur(i){let e=this.view.state.field(gt,!1);if(e&&e.tooltip&&this.view.state.facet(Ge).closeOnBlur){let t=e.open&&Xp(this.view,e.open.tooltip);(!t||!t.dom.contains(i.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:Ni.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:Bs.of(!1)}),20),this.composing=0}}}),pN=typeof navigator=="object"&&/Win/.test(navigator.platform),fN=u1.highest(q.domEventHandlers({keydown(i,e){let t=e.state.field(gt,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||!i.key||i.key.length>1||i.ctrlKey&&!(pN&&i.altKey)||i.metaKey)return!1;let n=t.open.options[t.open.selected],a=t.active.find(r=>r.source==n.source),s=n.completion.commitCharacters||a.result.commitCharacters;return s&&s.indexOf(i.key)>-1&&F0(e,n),!1}})),yf=q.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center",cursor:"pointer"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class bN{constructor(e,t,n,a){this.field=e,this.line=t,this.from=n,this.to=a}}class R0{constructor(e,t,n){this.field=e,this.from=t,this.to=n}map(e){let t=e.mapPos(this.from,-1,st.TrackDel),n=e.mapPos(this.to,1,st.TrackDel);return t==null||n==null?null:new R0(this.field,t,n)}}class G0{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let n=[],a=[t],s=e.doc.lineAt(t),r=/^\s*/.exec(s.text)[0];for(let l of this.lines){if(n.length){let u=r,m=/^\t*/.exec(l)[0].length;for(let c=0;cnew R0(l.field,a[l.line]+l.from,a[l.line]+l.to));return{text:n,ranges:o}}static parse(e){let t=[],n=[],a=[],s;for(let r of e.split(/\r\n?|\n/)){for(;s=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(r);){let o=s[1]?+s[1]:null,l=s[2]||s[3]||"",u=-1;o===0&&(o=1e9);let m=l.replace(/\\[{}]/g,c=>c[1]);for(let c=0;c=u&&d.field++}for(let c of a)if(c.line==n.length&&c.from>s.index){let d=s[2]?3+(s[1]||"").length:2;c.from-=d,c.to-=d}a.push(new bN(u,n.length,s.index,s.index+m.length)),r=r.slice(0,s.index)+l+r.slice(s.index+s[0].length)}r=r.replace(/\\([{}])/g,(o,l,u)=>{for(let m of a)m.line==n.length&&m.from>u&&(m.from--,m.to--);return l}),n.push(r)}return new G0(n,a)}}let xN=he.widget({widget:new class extends N1{toDOM(){let i=document.createElement("span");return i.className="cm-snippetFieldPosition",i}ignoreEvent(){return!1}}}),vN=he.mark({class:"cm-snippetField"});class J1{constructor(e,t){this.ranges=e,this.active=t,this.deco=he.set(e.map(n=>(n.from==n.to?xN:vN).range(n.from,n.to)),!0)}map(e){let t=[];for(let n of this.ranges){let a=n.map(e);if(!a)return null;t.push(a)}return new J1(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(n=>n.field==this.active&&n.from<=t.from&&n.to>=t.to))}}const Xi=de.define({map(i,e){return i&&i.map(e)}}),yN=de.define(),Ji=Et.define({create(){return null},update(i,e){for(let t of e.effects){if(t.is(Xi))return t.value;if(t.is(yN)&&i)return new J1(i.ranges,t.value)}return i&&e.docChanged&&(i=i.map(e.changes)),i&&e.selection&&!i.selectionInsideField(e.selection)&&(i=null),i},provide:i=>q.decorations.from(i,e=>e?e.deco:he.none)});function H0(i,e){return D.create(i.filter(t=>t.field==e).map(t=>D.range(t.from,t.to)))}function wN(i){let e=G0.parse(i);return(t,n,a,s)=>{let{text:r,ranges:o}=e.instantiate(t.state,a),{main:l}=t.state.selection,u={changes:{from:a,to:s==l.from?l.to:s,insert:oe.of(r)},scrollIntoView:!0,annotations:n?[E0.of(n),$e.userEvent.of("input.complete")]:void 0};if(o.length&&(u.selection=H0(o,0)),o.some(m=>m.field>0)){let m=new J1(o,0),c=u.effects=[Xi.of(m)];t.state.field(Ji,!1)===void 0&&c.push(de.appendConfig.of([Ji,TN,_N,yf]))}t.dispatch(t.state.update(u))}}function wf(i){return({state:e,dispatch:t})=>{let n=e.field(Ji,!1);if(!n||i<0&&n.active==0)return!1;let a=n.active+i,s=i>0&&!n.ranges.some(r=>r.field==a+i);return t(e.update({selection:H0(n.ranges,a),effects:Xi.of(s?null:new J1(n.ranges,a)),scrollIntoView:!0})),!0}}const zN=({state:i,dispatch:e})=>i.field(Ji,!1)?(e(i.update({effects:Xi.of(null)})),!0):!1,IN=wf(1),kN=wf(-1),SN=[{key:"Tab",run:IN,shift:kN},{key:"Escape",run:zN}],Ec=V.define({combine(i){return i.length?i[0]:SN}}),TN=u1.highest(Bi.compute([Ec],i=>i.facet(Ec)));function V0(i,e){return{...e,apply:wN(i)}}const _N=q.domEventHandlers({mousedown(i,e){let t=e.state.field(Ji,!1),n;if(!t||(n=e.posAtCoords({x:i.clientX,y:i.clientY}))==null)return!1;let a=t.ranges.find(s=>s.from<=n&&s.to>=n);return!a||a.field==t.active?!1:(e.dispatch({selection:H0(t.ranges,a.field),effects:Xi.of(t.ranges.some(s=>s.field>a.field)?new J1(t.ranges,a.field):null),scrollIntoView:!0}),!0)}}),Fi={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Xn=de.define({map(i,e){let t=e.mapPos(i,-1,st.TrackAfter);return t??void 0}}),q0=new class extends Zn{};q0.startSide=1;q0.endSide=-1;const zf=Et.define({create(){return ie.empty},update(i,e){if(i=i.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);i=i.update({filter:n=>n>=t.from&&n<=t.to})}for(let t of e.effects)t.is(Xn)&&(i=i.update({add:[q0.range(t.value,t.value+1)]}));return i}});function CN(){return[jN,zf]}const no="()[]{}<>«»»«[]{}";function If(i){for(let e=0;e{if((AN?i.composing:i.compositionStarted)||i.state.readOnly)return!1;let a=i.state.selection.main;if(n.length>2||n.length==2&&hn(jt(n,0))==1||e!=a.from||t!=a.to)return!1;let s=MN(i.state,n);return s?(i.dispatch(s),!0):!1}),ON=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let n=kf(i,i.selection.main.head).brackets||Fi.brackets,a=null,s=i.changeByRange(r=>{if(r.empty){let o=DN(i.doc,r.head);for(let l of n)if(l==o&&cr(i.doc,r.head)==If(jt(l,0)))return{changes:{from:r.head-l.length,to:r.head+l.length},range:D.cursor(r.head-l.length)}}return{range:a=r}});return a||e(i.update(s,{scrollIntoView:!0,userEvent:"delete.backward"})),!a},PN=[{key:"Backspace",run:ON}];function MN(i,e){let t=kf(i,i.selection.main.head),n=t.brackets||Fi.brackets;for(let a of n){let s=If(jt(a,0));if(e==a)return s==a?LN(i,a,n.indexOf(a+a+a)>-1,t):ZN(i,a,s,t.before||Fi.before);if(e==s&&Sf(i,i.selection.main.from))return BN(i,a,s)}return null}function Sf(i,e){let t=!1;return i.field(zf).between(0,i.doc.length,n=>{n==e&&(t=!0)}),t}function cr(i,e){let t=i.sliceString(e,e+2);return t.slice(0,hn(jt(t,0)))}function DN(i,e){let t=i.sliceString(e-2,e);return hn(jt(t,0))==t.length?t:t.slice(1)}function ZN(i,e,t,n){let a=null,s=i.changeByRange(r=>{if(!r.empty)return{changes:[{insert:e,from:r.from},{insert:t,from:r.to}],effects:Xn.of(r.to+e.length),range:D.range(r.anchor+e.length,r.head+e.length)};let o=cr(i.doc,r.head);return!o||/\s/.test(o)||n.indexOf(o)>-1?{changes:{insert:e+t,from:r.head},effects:Xn.of(r.head+e.length),range:D.cursor(r.head+e.length)}:{range:a=r}});return a?null:i.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function BN(i,e,t){let n=null,a=i.changeByRange(s=>s.empty&&cr(i.doc,s.head)==t?{changes:{from:s.head,to:s.head+t.length,insert:t},range:D.cursor(s.head+t.length)}:n={range:s});return n?null:i.update(a,{scrollIntoView:!0,userEvent:"input.type"})}function LN(i,e,t,n){let a=n.stringPrefixes||Fi.stringPrefixes,s=null,r=i.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:e,from:o.to}],effects:Xn.of(o.to+e.length),range:D.range(o.anchor+e.length,o.head+e.length)};let l=o.head,u=cr(i.doc,l),m;if(u==e){if(Nc(i,l))return{changes:{insert:e+e,from:l},effects:Xn.of(l+e.length),range:D.cursor(l+e.length)};if(Sf(i,l)){let d=t&&i.sliceDoc(l,l+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:l,to:l+d.length,insert:d},range:D.cursor(l+d.length)}}}else{if(t&&i.sliceDoc(l-2*e.length,l)==e+e&&(m=Jc(i,l-2*e.length,a))>-1&&Nc(i,m))return{changes:{insert:e+e+e+e,from:l},effects:Xn.of(l+e.length),range:D.cursor(l+e.length)};if(i.charCategorizer(l)(u)!=Dt.Word&&Jc(i,l,a)>-1&&!WN(i,l,e,a))return{changes:{insert:e+e,from:l},effects:Xn.of(l+e.length),range:D.cursor(l+e.length)}}return{range:s=o}});return s?null:i.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function Nc(i,e){let t=Xe(i).resolveInner(e+1);return t.parent&&t.from==e}function WN(i,e,t,n){let a=Xe(i).resolveInner(e,-1),s=n.reduce((r,o)=>Math.max(r,o.length),0);for(let r=0;r<5;r++){let o=i.sliceDoc(a.from,Math.min(a.to,a.from+t.length+s)),l=o.indexOf(t);if(!l||l>-1&&n.indexOf(o.slice(0,l))>-1){let m=a.firstChild;for(;m&&m.from==a.from&&m.to-m.from>t.length+l;){if(i.sliceDoc(m.to-t.length,m.to)==t)return!1;m=m.firstChild}return!0}let u=a.to==e&&a.parent;if(!u)break;a=u}return!1}function Jc(i,e,t){let n=i.charCategorizer(e);if(n(i.sliceDoc(e-1,e))!=Dt.Word)return e;for(let a of t){let s=e-a.length;if(i.sliceDoc(s,e)==a&&n(i.sliceDoc(s-1,s))!=Dt.Word)return s}return-1}function EN(i={}){return[fN,gt,Ge.of(i),gN,NN,yf]}const Tf=[{key:"Ctrl-Space",run:to},{mac:"Alt-`",run:to},{mac:"Alt-i",run:to},{key:"Escape",run:mN},{key:"ArrowDown",run:Da(!0)},{key:"ArrowUp",run:Da(!1)},{key:"PageDown",run:Da(!0,"page")},{key:"PageUp",run:Da(!1,"page")},{key:"Enter",run:uN}],NN=u1.highest(Bi.computeN([Ge],i=>i.facet(Ge).defaultKeymap?[Tf]:[])),JN=i=>{let{state:e}=i,t=e.doc.lineAt(e.selection.main.from),n=U0(i.state,t.from);return n.line?FN(i):n.block?GN(i):!1};function Q0(i,e){return({state:t,dispatch:n})=>{if(t.readOnly)return!1;let a=i(e,t);return a?(n(t.update(a)),!0):!1}}const FN=Q0(qN,0),RN=Q0(_f,0),GN=Q0((i,e)=>_f(i,e,VN(e)),0);function U0(i,e){let t=i.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}const ei=50;function HN(i,{open:e,close:t},n,a){let s=i.sliceDoc(n-ei,n),r=i.sliceDoc(a,a+ei),o=/\s*$/.exec(s)[0].length,l=/^\s*/.exec(r)[0].length,u=s.length-o;if(s.slice(u-e.length,u)==e&&r.slice(l,l+t.length)==t)return{open:{pos:n-o,margin:o&&1},close:{pos:a+l,margin:l&&1}};let m,c;a-n<=2*ei?m=c=i.sliceDoc(n,a):(m=i.sliceDoc(n,n+ei),c=i.sliceDoc(a-ei,a));let d=/^\s*/.exec(m)[0].length,h=/\s*$/.exec(c)[0].length,g=c.length-h-t.length;return m.slice(d,d+e.length)==e&&c.slice(g,g+t.length)==t?{open:{pos:n+d+e.length,margin:/\s/.test(m.charAt(d+e.length))?1:0},close:{pos:a-h-t.length,margin:/\s/.test(c.charAt(g-1))?1:0}}:null}function VN(i){let e=[];for(let t of i.selection.ranges){let n=i.doc.lineAt(t.from),a=t.to<=n.to?n:i.doc.lineAt(t.to);a.from>n.from&&a.from==t.to&&(a=t.to==n.to+1?n:i.doc.lineAt(t.to-1));let s=e.length-1;s>=0&&e[s].to>n.from?e[s].to=a.to:e.push({from:n.from+/^\s*/.exec(n.text)[0].length,to:a.to})}return e}function _f(i,e,t=e.selection.ranges){let n=t.map(s=>U0(e,s.from).block);if(!n.every(s=>s))return null;let a=t.map((s,r)=>HN(e,n[r],s.from,s.to));if(i!=2&&!a.every(s=>s))return{changes:e.changes(t.map((s,r)=>a[r]?[]:[{from:s.from,insert:n[r].open+" "},{from:s.to,insert:" "+n[r].close}]))};if(i!=1&&a.some(s=>s)){let s=[];for(let r=0,o;ra&&(s==r||r>c.from)){a=c.from;let d=/^\s*/.exec(c.text)[0].length,h=d==c.length,g=c.text.slice(d,d+u.length)==u?d:-1;ds.comment<0&&(!s.empty||s.single))){let s=[];for(let{line:o,token:l,indent:u,empty:m,single:c}of n)(c||!m)&&s.push({from:o.from+u,insert:l+" "});let r=e.changes(s);return{changes:r,selection:e.selection.map(r,1)}}else if(i!=1&&n.some(s=>s.comment>=0)){let s=[];for(let{line:r,comment:o,token:l}of n)if(o>=0){let u=r.from+o,m=u+l.length;r.text[m-r.from]==" "&&m++,s.push({from:u,to:m})}return{changes:s}}return null}function F1(i,e){return D.create(i.ranges.map(e),i.mainIndex)}function Qt(i,e){return i.update({selection:e,scrollIntoView:!0,userEvent:"select"})}function Ut({state:i,dispatch:e},t){let n=F1(i.selection,t);return n.eq(i.selection,!0)?!1:(e(Qt(i,n)),!0)}function dr(i,e){return D.cursor(e?i.to:i.from)}function Cf(i,e){return Ut(i,t=>t.empty?i.moveByChar(t,e):dr(t,e))}function ot(i){return i.textDirectionAt(i.state.selection.main.head)==ye.LTR}const Af=i=>Cf(i,!ot(i)),jf=i=>Cf(i,ot(i));function Of(i,e){return Ut(i,t=>t.empty?i.moveByGroup(t,e):dr(t,e))}const QN=i=>Of(i,!ot(i)),UN=i=>Of(i,ot(i));function $N(i,e,t){if(e.type.prop(t))return!0;let n=e.to-e.from;return n&&(n>2||/[^\s,.;:]/.test(i.sliceDoc(e.from,e.to)))||e.firstChild}function hr(i,e,t){let n=Xe(i).resolveInner(e.head),a=t?ae.closedBy:ae.openedBy;for(let l=e.head;;){let u=t?n.childAfter(l):n.childBefore(l);if(!u)break;$N(i,u,a)?n=u:l=t?u.to:u.from}let s=n.type.prop(a),r,o;return s&&(r=t?on(i,n.from,1):on(i,n.to,-1))&&r.matched?o=t?r.end.to:r.end.from:o=t?n.to:n.from,D.cursor(o,t?-1:1)}const YN=i=>Ut(i,e=>hr(i.state,e,!ot(i))),XN=i=>Ut(i,e=>hr(i.state,e,ot(i)));function Pf(i,e){return Ut(i,t=>{if(!t.empty)return dr(t,e);let n=i.moveVertically(t,e);return n.head!=t.head?n:i.moveToLineBoundary(t,e)})}const Mf=i=>Pf(i,!1),Df=i=>Pf(i,!0);function Zf(i){let e=i.scrollDOM.clientHeightr.empty?i.moveVertically(r,e,t.height):dr(r,e));if(a.eq(n.selection))return!1;let s;if(t.selfScroll){let r=i.coordsAtPos(n.selection.main.head),o=i.scrollDOM.getBoundingClientRect(),l=o.top+t.marginTop,u=o.bottom-t.marginBottom;r&&r.top>l&&r.bottomBf(i,!1),Pl=i=>Bf(i,!0);function Jn(i,e,t){let n=i.lineBlockAt(e.head),a=i.moveToLineBoundary(e,t);if(a.head==e.head&&a.head!=(t?n.to:n.from)&&(a=i.moveToLineBoundary(e,t,!1)),!t&&a.head==n.from&&n.length){let s=/^\s*/.exec(i.state.sliceDoc(n.from,Math.min(n.from+100,n.to)))[0].length;s&&e.head!=n.from+s&&(a=D.cursor(n.from+s))}return a}const KN=i=>Ut(i,e=>Jn(i,e,!0)),eJ=i=>Ut(i,e=>Jn(i,e,!1)),tJ=i=>Ut(i,e=>Jn(i,e,!ot(i))),nJ=i=>Ut(i,e=>Jn(i,e,ot(i))),iJ=i=>Ut(i,e=>i.moveToLineBoundary(e,!1,!1)),aJ=i=>Ut(i,e=>i.moveToLineBoundary(e,!0,!1));function sJ(i,e,t){let n=!1,a=F1(i.selection,s=>{let r=on(i,s.head,-1)||on(i,s.head,1)||s.head>0&&on(i,s.head-1,1)||s.headsJ(i,e);function Nt(i,e,t){let n=F1(i.state.selection,a=>{a.undirectional&&a.head>=a.anchor!=e&&(a=D.range(a.head,a.anchor));let s=t(a);return D.range(a.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return n.eq(i.state.selection)?!1:(i.dispatch(Qt(i.state,n)),!0)}function Lf(i,e){return Nt(i,e,t=>i.moveByChar(t,e))}const Wf=i=>Lf(i,!ot(i)),Ef=i=>Lf(i,ot(i));function Nf(i,e){return Nt(i,e,t=>i.moveByGroup(t,e))}const oJ=i=>Nf(i,!ot(i)),lJ=i=>Nf(i,ot(i)),uJ=i=>{let e=!ot(i);return Nt(i,e,t=>hr(i.state,t,e))},mJ=i=>{let e=ot(i);return Nt(i,e,t=>hr(i.state,t,e))};function Jf(i,e){return Nt(i,e,t=>i.moveVertically(t,e))}const Ff=i=>Jf(i,!1),Rf=i=>Jf(i,!0);function Gf(i,e){return Nt(i,e,t=>i.moveVertically(t,e,Zf(i).height))}const Rc=i=>Gf(i,!1),Gc=i=>Gf(i,!0),cJ=i=>Nt(i,!0,e=>Jn(i,e,!0)),dJ=i=>Nt(i,!1,e=>Jn(i,e,!1)),hJ=i=>{let e=!ot(i);return Nt(i,e,t=>Jn(i,t,e))},gJ=i=>{let e=ot(i);return Nt(i,e,t=>Jn(i,t,e))},pJ=i=>Nt(i,!1,e=>D.cursor(i.lineBlockAt(e.head).from)),fJ=i=>Nt(i,!0,e=>D.cursor(i.lineBlockAt(e.head).to)),Hc=({state:i,dispatch:e})=>(e(Qt(i,{anchor:0})),!0),Vc=({state:i,dispatch:e})=>(e(Qt(i,{anchor:i.doc.length})),!0),qc=({state:i,dispatch:e})=>(e(Qt(i,{anchor:i.selection.main.anchor,head:0})),!0),Qc=({state:i,dispatch:e})=>(e(Qt(i,{anchor:i.selection.main.anchor,head:i.doc.length})),!0),bJ=({state:i,dispatch:e})=>(e(i.update({selection:{anchor:0,head:i.doc.length},userEvent:"select"})),!0),xJ=({state:i,dispatch:e})=>{let t=gr(i).map(({from:n,to:a})=>D.undirectionalRange(n,Math.min(a+1,i.doc.length)));return e(i.update({selection:D.create(t),userEvent:"select"})),!0},vJ=({state:i,dispatch:e})=>{let t=F1(i.selection,n=>{let a=Xe(i),s=a.resolveStack(n.from,1);if(n.empty){let r=a.resolveStack(n.from,-1);r.node.from>=s.node.from&&r.node.to<=s.node.to&&(s=r)}for(let r=s;r;r=r.next){let{node:o}=r;if((o.from=n.to||o.to>n.to&&o.from<=n.from)&&r.next)return D.undirectionalRange(o.from,o.to)}return n});return t.eq(i.selection)?!1:(e(Qt(i,t)),!0)};function Hf(i,e){let{state:t}=i,n=t.selection,a=t.selection.ranges.slice();for(let s of t.selection.ranges){let r=t.doc.lineAt(s.head);if(e?r.to0)for(let o=s;;){let l=i.moveVertically(o,e);if(l.headr.to){a.some(u=>u.head==l.head)||a.push(l);break}else{if(l.head==o.head)break;o=l}}}return a.length==n.ranges.length?!1:(i.dispatch(Qt(t,D.create(a,a.length-1))),!0)}const yJ=i=>Hf(i,!1),wJ=i=>Hf(i,!0),zJ=({state:i,dispatch:e})=>{let t=i.selection,n=null;return t.ranges.length>1?n=D.create([t.main]):t.main.empty||(n=D.create([D.cursor(t.main.head)])),n?(e(Qt(i,n)),!0):!1};function Ki(i,e){if(i.state.readOnly)return!1;let t="delete.selection",{state:n}=i,a=n.changeByRange(s=>{let{from:r,to:o}=s;if(r==o){let l=e(s);lr&&(t="delete.forward",l=Za(i,l,!0)),r=Math.min(r,l),o=Math.max(o,l)}else r=Za(i,r,!1),o=Za(i,o,!0);return r==o?{range:s}:{changes:{from:r,to:o},range:D.cursor(r,ra(i)))n.between(e,e,(a,s)=>{ae&&(e=t?s:a)});return e}const Vf=(i,e,t)=>Ki(i,n=>{let a=n.from,{state:s}=i,r=s.doc.lineAt(a),o,l;if(t&&!e&&a>r.from&&aVf(i,!1,!0),qf=i=>Vf(i,!0,!1),Qf=(i,e)=>Ki(i,t=>{let n=t.head,{state:a}=i,s=a.doc.lineAt(n),r=a.charCategorizer(n);for(let o=null;;){if(n==(e?s.to:s.from)){n==t.head&&s.number!=(e?a.doc.lines:1)&&(n+=e?1:-1);break}let l=rt(s.text,n-s.from,e)+s.from,u=s.text.slice(Math.min(n,l)-s.from,Math.max(n,l)-s.from),m=r(u);if(o!=null&&m!=o)break;(u!=" "||n!=t.head)&&(o=m),n=l}return n}),Uf=i=>Qf(i,!1),IJ=i=>Qf(i,!0),kJ=i=>Ki(i,e=>{let t=i.lineBlockAt(e.head).to;return e.headKi(i,e=>{let t=i.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),TJ=i=>Ki(i,e=>{let t=i.moveToLineBoundary(e,!0).head;return e.head{if(i.readOnly)return!1;let t=i.changeByRange(n=>({changes:{from:n.from,to:n.to,insert:oe.of(["",""])},range:D.cursor(n.from)}));return e(i.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},CJ=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=i.changeByRange(n=>{if(!n.empty||n.from==0||n.from==i.doc.length)return{range:n};let a=n.from,s=i.doc.lineAt(a),r=a==s.from?a-1:rt(s.text,a-s.from,!1)+s.from,o=a==s.to?a+1:rt(s.text,a-s.from,!0)+s.from;return{changes:{from:r,to:o,insert:i.doc.slice(a,o).append(i.doc.slice(r,a))},range:D.cursor(o)}});return t.changes.empty?!1:(e(i.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function gr(i){let e=[],t=-1;for(let n of i.selection.ranges){let a=i.doc.lineAt(n.from),s=i.doc.lineAt(n.to);if(!n.empty&&n.to==s.from&&(s=i.doc.lineAt(n.to-1)),t>=a.number){let r=e[e.length-1];r.to=s.to,r.ranges.push(n)}else e.push({from:a.from,to:s.to,ranges:[n]});t=s.number+1}return e}function $f(i,e,t){if(i.readOnly)return!1;let n=[],a=[];for(let s of gr(i)){if(t?s.to==i.doc.length:s.from==0)continue;let r=i.doc.lineAt(t?s.to+1:s.from-1),o=r.length+1;if(t){n.push({from:s.to,to:r.to},{from:s.from,insert:r.text+i.lineBreak});for(let l of s.ranges)a.push(D.range(Math.min(i.doc.length,l.anchor+o),Math.min(i.doc.length,l.head+o)))}else{n.push({from:r.from,to:s.from},{from:s.to,insert:i.lineBreak+r.text});for(let l of s.ranges)a.push(D.range(l.anchor-o,l.head-o))}}return n.length?(e(i.update({changes:n,scrollIntoView:!0,selection:D.create(a,i.selection.mainIndex),userEvent:"move.line"})),!0):!1}const AJ=({state:i,dispatch:e})=>$f(i,e,!1),jJ=({state:i,dispatch:e})=>$f(i,e,!0);function Yf(i,e,t){if(i.readOnly)return!1;let n=[];for(let s of gr(i))t?n.push({from:s.from,insert:i.doc.slice(s.from,s.to)+i.lineBreak}):n.push({from:s.to,insert:i.lineBreak+i.doc.slice(s.from,s.to)});let a=i.changes(n);return e(i.update({changes:a,selection:i.selection.map(a,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}const OJ=({state:i,dispatch:e})=>Yf(i,e,!1),PJ=({state:i,dispatch:e})=>Yf(i,e,!0),MJ=i=>{if(i.state.readOnly)return!1;let{state:e}=i,t=e.changes(gr(e).map(({from:a,to:s})=>(a>0?a--:s{let s;if(i.lineWrapping){let r=i.lineBlockAt(a.head),o=i.coordsAtPos(a.head,a.assoc||1);o&&(s=r.bottom+i.documentTop-o.bottom+i.defaultLineHeight/2)}return i.moveVertically(a,!0,s)}).map(t);return i.dispatch({changes:t,selection:n,scrollIntoView:!0,userEvent:"delete.line"}),!0};function DJ(i,e){if(/\(\)|\[\]|\{\}/.test(i.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Xe(i).resolveInner(e),n=t.childBefore(e),a=t.childAfter(e),s;return n&&a&&n.to<=e&&a.from>=e&&(s=n.type.prop(ae.closedBy))&&s.indexOf(a.name)>-1&&i.doc.lineAt(n.to).from==i.doc.lineAt(a.from).from&&!/\S/.test(i.sliceDoc(n.to,a.from))?{from:n.to,to:a.from}:null}const Uc=Xf(!1),ZJ=Xf(!0);function Xf(i){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=e.changeByRange(a=>{let{from:s,to:r}=a,o=e.doc.lineAt(s),l=!i&&s==r&&DJ(e,s);i&&(s=r=(r<=o.to?o:e.doc.lineAt(r)).to);let u=new ur(e,{simulateBreak:s,simulateDoubleBreak:!!l}),m=L0(u,s);for(m==null&&(m=qi(/^\s*/.exec(e.doc.lineAt(s).text)[0],e.tabSize));ro.from&&s{let a=[];for(let r=n.from;r<=n.to;){let o=i.doc.lineAt(r);o.number>t&&(n.empty||n.to>o.from)&&(e(o,a,n),t=o.number),r=o.to+1}let s=i.changes(a);return{changes:a,range:D.range(s.mapPos(n.anchor,1),s.mapPos(n.head,1))}})}const BJ=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=Object.create(null),n=new ur(i,{overrideIndentation:s=>{let r=t[s];return r??-1}}),a=$0(i,(s,r,o)=>{let l=L0(n,s.from);if(l==null)return;/\S/.test(s.text)||(l=0);let u=/^\s*/.exec(s.text)[0],m=Ei(i,l);(u!=m||o.fromi.readOnly?!1:(e(i.update($0(i,(t,n)=>{n.push({from:t.from,insert:i.facet(Yi)})}),{userEvent:"input.indent"})),!0),e2=({state:i,dispatch:e})=>i.readOnly?!1:(e(i.update($0(i,(t,n)=>{let a=/^\s*/.exec(t.text)[0];if(!a)return;let s=qi(a,i.tabSize),r=0,o=Ei(i,Math.max(0,s-Zs(i)));for(;r(i.setTabFocusMode(),!0),WJ=[{key:"Ctrl-b",run:Af,shift:Wf,preventDefault:!0},{key:"Ctrl-f",run:jf,shift:Ef},{key:"Ctrl-p",run:Mf,shift:Ff},{key:"Ctrl-n",run:Df,shift:Rf},{key:"Ctrl-a",run:iJ,shift:pJ},{key:"Ctrl-e",run:aJ,shift:fJ},{key:"Ctrl-d",run:qf},{key:"Ctrl-h",run:Ml},{key:"Ctrl-k",run:kJ},{key:"Ctrl-Alt-h",run:Uf},{key:"Ctrl-o",run:_J},{key:"Ctrl-t",run:CJ},{key:"Ctrl-v",run:Pl}],EJ=[{key:"ArrowLeft",run:Af,shift:Wf,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:QN,shift:oJ,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:tJ,shift:hJ,preventDefault:!0},{key:"ArrowRight",run:jf,shift:Ef,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:UN,shift:lJ,preventDefault:!0},{mac:"Cmd-ArrowRight",run:nJ,shift:gJ,preventDefault:!0},{key:"ArrowUp",run:Mf,shift:Ff,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Hc,shift:qc},{mac:"Ctrl-ArrowUp",run:Fc,shift:Rc},{key:"ArrowDown",run:Df,shift:Rf,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Vc,shift:Qc},{mac:"Ctrl-ArrowDown",run:Pl,shift:Gc},{key:"PageUp",run:Fc,shift:Rc},{key:"PageDown",run:Pl,shift:Gc},{key:"Home",run:eJ,shift:dJ,preventDefault:!0},{key:"Mod-Home",run:Hc,shift:qc},{key:"End",run:KN,shift:cJ,preventDefault:!0},{key:"Mod-End",run:Vc,shift:Qc},{key:"Enter",run:Uc,shift:Uc},{key:"Mod-a",run:bJ},{key:"Backspace",run:Ml,shift:Ml,preventDefault:!0},{key:"Delete",run:qf,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Uf,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:IJ,preventDefault:!0},{mac:"Mod-Backspace",run:SJ,preventDefault:!0},{mac:"Mod-Delete",run:TJ,preventDefault:!0}].concat(WJ.map(i=>({mac:i.key,run:i.run,shift:i.shift}))),NJ=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:YN,shift:uJ},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:XN,shift:mJ},{key:"Alt-ArrowUp",run:AJ},{key:"Shift-Alt-ArrowUp",run:OJ},{key:"Alt-ArrowDown",run:jJ},{key:"Shift-Alt-ArrowDown",run:PJ},{key:"Mod-Alt-ArrowUp",run:yJ},{key:"Mod-Alt-ArrowDown",run:wJ},{key:"Escape",run:zJ},{key:"Mod-Enter",run:ZJ},{key:"Alt-l",mac:"Ctrl-l",run:xJ},{key:"Mod-i",run:vJ,preventDefault:!0},{key:"Mod-[",run:e2},{key:"Mod-]",run:Kf},{key:"Mod-Alt-\\",run:BJ},{key:"Shift-Mod-k",run:MJ},{key:"Shift-Mod-\\",run:rJ},{key:"Mod-/",run:JN},{key:"Alt-A",mac:"Ctrl-A",run:RN},{key:"Ctrl-m",mac:"Shift-Alt-m",run:LJ}].concat(EJ),JJ={key:"Tab",run:Kf,shift:e2};var $c={};class Ws{constructor(e,t,n,a,s,r,o,l,u,m=0,c){this.p=e,this.stack=t,this.state=n,this.reducePos=a,this.pos=s,this.score=r,this.buffer=o,this.bufferBase=l,this.curContext=u,this.lookAhead=m,this.parent=c}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,n=0){let a=e.parser.context;return new Ws(e,[],t,n,n,0,[],0,a?new Yc(a,a.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let n=e>>19,a=e&65535,{parser:s}=this.p,r=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[a])===null||t===void 0)&&t.isAnonymous)&&(u==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=m):this.p.lastBigReductionSizel;)this.stack.pop();this.reduceContext(a,u)}storeNode(e,t,n,a=4,s=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[r-4]==0&&this.buffer[r-1]>-1){if(t==n)return;if(this.buffer[r-2]>=t){this.buffer[r-2]=n;return}}}if(!s||this.pos==n)this.buffer.push(e,t,n,a);else{let r=this.buffer.length;if(r>0&&(this.buffer[r-4]!=0||this.buffer[r-1]<0)){let o=!1;for(let l=r;l>0&&this.buffer[l-2]>n;l-=4)if(this.buffer[l-1]>=0){o=!0;break}if(o)for(;r>0&&this.buffer[r-2]>n;)this.buffer[r]=this.buffer[r-4],this.buffer[r+1]=this.buffer[r-3],this.buffer[r+2]=this.buffer[r-2],this.buffer[r+3]=this.buffer[r-1],r-=4,a>4&&(a-=4)}this.buffer[r]=e,this.buffer[r+1]=t,this.buffer[r+2]=n,this.buffer[r+3]=a}}shift(e,t,n,a){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let s=e,{parser:r}=this.p;this.pos=a;let o=r.stateFlag(s,1);!o&&(a>n||t<=r.maxNode)&&(this.reducePos=a),this.pushState(s,o?n:Math.min(n,this.reducePos)),this.shiftContext(t,n),t<=r.maxNode&&this.buffer.push(t,n,a,4)}else this.pos=a,this.shiftContext(t,n),t<=this.p.parser.maxNode&&this.buffer.push(t,n,a,4)}apply(e,t,n,a){e&65536?this.reduce(e):this.shift(e,t,n,a)}useNode(e,t,n){let a=this.p.reused.length-1;(a<0||this.p.reused[a]!=e)&&(this.p.reused.push(e),a++);let s=this.reducePos=this.pos=n+e.length;this.pushState(t,n),this.buffer.push(a,n,s,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(t&&e.buffer[t-4]==0&&(t-=4);t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let n=e.buffer.slice(t),a=e.bufferBase+t;for(;e&&a==e.bufferBase;)e=e.parent;return new Ws(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,n,a,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let n=e<=this.p.parser.maxNode;n&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,n?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new FJ(this);;){let n=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(n==0)return!1;if((n&65536)==0)return!0;t.reduce(n)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let a=[];for(let s=0,r;sl&1&&o==r)||a.push(t[s],r)}t=a}let n=[];for(let a=0;a>19,a=t&65535,s=this.stack.length-n*3;if(s<0||e.getGoto(this.stack[s],a,!1)<0){let r=this.findForcedReduction();if(r==null)return!1;t=r}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],n=(a,s)=>{if(!t.includes(a))return t.push(a),e.allActions(a,r=>{if(!(r&393216))if(r&65536){let o=(r>>19)-s;if(o>1){let l=r&65535,u=this.stack.length-o*3;if(u>=0&&e.getGoto(this.stack[u],l,!1)>=0)return o<<19|65536|l}}else{let o=n(r,s+1);if(o!=null)return o}})};return n(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t0&&this.emitLookAhead()}}class Yc{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}}class FJ{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,n=e>>19;n==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(n-1)*3;let a=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=a}}class Es{constructor(e,t,n){this.stack=e,this.pos=t,this.index=n,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new Es(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new Es(this.stack,this.pos,this.index)}}function Ba(i,e=Uint16Array){if(typeof i!="string")return i;let t=null;for(let n=0,a=0;n=92&&r--,r>=34&&r--;let l=r-32;if(l>=46&&(l-=46,o=!0),s+=l,o)break;s*=46}t?t[a++]=s:t=new e(s)}return t}class Ka{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const Xc=new Ka;class RJ{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=Xc,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let n=this.range,a=this.rangeIndex,s=this.pos+e;for(;sn.to:s>=n.to;){if(a==this.ranges.length-1)return null;let r=this.ranges[++a];s+=r.from-n.to,n=r}return s}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,n,a;if(t>=0&&t=this.chunk2Pos&&no.to&&(this.chunk2=this.chunk2.slice(0,o.to-n)),a=this.chunk2.charCodeAt(0)}}return n>=this.token.lookAhead&&(this.token.lookAhead=n+1),a}acceptToken(e,t=0){let n=t?this.resolveOffset(t,-1):this.pos;if(n==null||n=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=Xc,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let n="";for(let a of this.ranges){if(a.from>=t)break;a.to>e&&(n+=this.input.read(Math.max(a.from,e),Math.min(a.to,t)))}return n}}class j1{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:n}=t.p;GJ(this.data,e,t,this.id,n.data,n.tokenPrecTable)}}j1.prototype.contextual=j1.prototype.fallback=j1.prototype.extend=!1;j1.prototype.fallback=j1.prototype.extend=!1;function GJ(i,e,t,n,a,s){let r=0,o=1<0){let g=i[h];if(l.allows(g)&&(e.token.value==-1||e.token.value==g||HJ(g,e.token.value,a,s))){e.acceptToken(g);break}}let m=e.next,c=0,d=i[r+2];if(e.next<0&&d>c&&i[u+d*3-3]==65535){r=i[u+d*3-1];continue e}for(;c>1,g=u+h+(h<<1),f=i[g],b=i[g+1]||65536;if(m=b)c=h+1;else{r=i[g+2],e.advance();continue e}}break}}function Kc(i,e,t){for(let n=e,a;(a=i[n])!=65535;n++)if(a==t)return n-e;return-1}function HJ(i,e,t,n){let a=Kc(t,n,e);return a<0||Kc(t,n,i)e)&&!n.type.isError)return t<0?Math.max(0,Math.min(n.to-1,e-25)):Math.min(i.length,Math.max(n.from+1,e+25));if(t<0?n.prevSibling():n.nextSibling())break;if(!n.parent())return t<0?0:i.length}}class VJ{constructor(e,t){this.fragments=e,this.minRepeat=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.lastRepeat=null,this.lastRepeatPos=-1,this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?ed(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?ed(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=r,null;if(s instanceof Le){let o=r>this.lastRepeatPos&&s.type.id>=this.minRepeat;if(r==e||o){let l=r+s.length,u;if(r>=this.safeFrom&&l<=this.safeTo&&(!(u=s.prop(ae.lookAhead))||l+u=Math.max(this.safeFrom,e)&&(this.trees.push(s),this.start.push(r),this.index.push(0))}else this.index[t]++,this.nextStart=r+s.length}}}class qJ{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(n=>new Ka)}getActions(e){let t=0,n=null,{parser:a}=e.p,{tokenizers:s}=a,r=a.stateSlot(e.state,3),o=e.curContext?e.curContext.hash:0,l=0;for(let u=0;uc.end+25&&(l=Math.max(c.lookAhead,l)),c.value!=0)){let d=t;if(c.extended>-1&&(t=this.addActions(e,c.extended,c.end,t)),t=this.addActions(e,c.value,c.end,t),!m.extend&&(n=c,t>d))break}}for(;this.actions.length>t;)this.actions.pop();return l&&e.setLookAhead(l),!n&&e.pos==this.stream.end&&(n=new Ka,n.value=e.p.parser.eofTerm,n.start=n.end=e.pos,t=this.addActions(e,n.value,n.end,t)),this.mainToken=n,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new Ka,{pos:n,p:a}=e;return t.start=n,t.end=Math.min(n+1,a.stream.end),t.value=n==a.stream.end?a.parser.eofTerm:0,t}updateCachedToken(e,t,n){let a=this.stream.clipPos(n.pos);if(t.token(this.stream.reset(a,e),n),e.value>-1){let{parser:s}=n.p;for(let r=0;r=0&&n.p.parser.dialect.allows(o>>1)){(o&1)==0?e.value=o>>1:e.extended=o>>1;break}}}else e.value=0,e.end=this.stream.clipPos(a+1)}putAction(e,t,n,a){for(let s=0;se.bufferLength*4?new VJ(n,e.minRepeatTerm):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,n=this.stacks=[],a,s;if(this.bigReductionCount>300&&e.length==1){let[r]=e;for(;r.forceReduce()&&r.stack.length&&r.stack[r.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let r=0;rt)n.push(o);else{if(this.advanceStack(o,n,e))continue;{a||(a=[],s=[]),a.push(o);let l=this.tokens.getMainToken(o);s.push(l.value,l.end)}}break}}if(!n.length){let r=a&&$J(a);if(r)return bt&&console.log("Finish with "+this.stackID(r)),this.stackToTree(r);if(this.parser.strict)throw bt&&a&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&a){let r=this.stoppedAt!=null&&a[0].pos>this.stoppedAt?a[0]:this.runRecovery(a,s,n);if(r)return bt&&console.log("Force-finish "+this.stackID(r)),this.stackToTree(r.forceAll())}if(this.recovering){let r=this.recovering==1?1:this.recovering*3;if(n.length>r)for(n.sort((o,l)=>l.score-o.score);n.length>r;)n.pop();n.some(o=>o.reducePos>t)&&this.recovering--}else if(n.length>1){e:for(let r=0;r500&&u.buffer.length>500)if((o.score-u.score||o.buffer.length-u.buffer.length)>0)n.splice(l--,1);else{n.splice(r--,1);continue e}}}n.length>12&&(n.sort((r,o)=>o.score-r.score),n.splice(12,n.length-12))}this.minStackPos=n[0].pos;for(let r=1;r-1&&n.length&&(!s||(n.prop(ae.contextHash)||0)==r))return e.useNode(n,o,t),n;if(n.children.length==0||n.positions[0]>0)break;let l=n.children[0];if(l instanceof Le&&(!a||l.type.id>=this.parser.minRepeatTerm))n=l;else break}return null}advanceStack(e,t,n){let a=e.pos,{parser:s}=this,r=bt?this.stackID(e)+" -> ":"";if(this.stoppedAt!=null&&a>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let u=e.reducePos0)return e.reduce(o),bt&&console.log(r+this.stackID(e)+` (via always-reduce ${s.getName(o&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let l=this.tokens.getActions(e);for(let u=0;ua?t.push(g):n.push(g)}return!1}advanceFully(e,t){let n=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>n)return td(e,t),!0}}runRecovery(e,t,n){let a=null,s=!1;for(let r=0;r ":"";if(o.deadEnd&&(s||(s=!0,o.restart(),bt&&console.log(m+this.stackID(o)+" (restarted)"),this.advanceFully(o,n))))continue;let c=o.split(),d=m;for(let h=0;h<10&&c.forceReduce()&&(bt&&console.log(d+this.stackID(c)+" (via force-reduce)"),!this.advanceFully(c,n));h++)bt&&(d=this.stackID(c)+" -> ");for(let h of o.recoverByInsert(l))bt&&console.log(m+this.stackID(h)+" (via recover-insert)"),this.advanceFully(h,n);this.stream.end>o.pos?(u==o.pos&&(u++,l=0),o.recoverByDelete(l,u),bt&&console.log(m+this.stackID(o)+` (via recover-delete ${this.parser.getName(l)})`),td(o,n)):(!a||a.scoree.topRules[o][1]),a=[];for(let o=0;o=0)s(m,l,o[u++]);else{let c=o[u+-m];for(let d=-m;d>0;d--)s(o[u++],l,c);u++}}}this.nodeSet=new M0(t.map((o,l)=>ft.define({name:l>=this.minRepeatTerm?void 0:o,id:l,props:a[l],top:n.indexOf(l)>-1,error:l==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(l)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=tf;let r=Ba(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let o=0;otypeof o=="number"?new j1(r,o):o),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,n){let a=new QJ(this,e,t,n);for(let s of this.wrappers)a=s(a,e,t,n);return a}getGoto(e,t,n=!1){let a=this.goto;if(t>=a[0])return-1;for(let s=a[t+1];;){let r=a[s++],o=r&1,l=a[s++];if(o&&n)return l;for(let u=s+(r>>1);s0}validAction(e,t){return!!this.allActions(e,n=>n==t?!0:null)}allActions(e,t){let n=this.stateSlot(e,4),a=n?t(n):void 0;for(let s=this.stateSlot(e,1);a==null;s+=3){if(this.data[s]==65535)if(this.data[s+1]==1)s=dn(this.data,s+2);else break;a=t(dn(this.data,s+1))}return a}nextStates(e){let t=[];for(let n=this.stateSlot(e,1);;n+=3){if(this.data[n]==65535)if(this.data[n+1]==1)n=dn(this.data,n+2);else break;if((this.data[n+2]&1)==0){let a=this.data[n+1];t.some((s,r)=>r&1&&s==a)||t.push(this.data[n],a)}}return t}configure(e){let t=Object.assign(Object.create(Ns.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let n=this.topRules[e.top];if(!n)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=n}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(n=>{let a=e.tokenizers.find(s=>s.from==n);return a?a.to:n})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((n,a)=>{let s=e.specializers.find(o=>o.from==n.external);if(!s)return n;let r=Object.assign(Object.assign({},n),{external:s.to});return t.specializers[a]=nd(r),r})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),n=t.map(()=>!1);if(e)for(let s of e.split(" ")){let r=t.indexOf(s);r>=0&&(n[r]=!0)}let a=null;for(let s=0;sn)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scorei.external(t,n)<<1|e}return i.get}const YJ=of({null:W.null,instanceof:W.operatorKeyword,this:W.self,"new super assert open to with void":W.keyword,"class interface extends implements enum var":W.definitionKeyword,"module package import":W.moduleKeyword,"switch while for if else case default do break continue return try catch finally throw":W.controlKeyword,"requires exports opens uses provides public private protected static transitive abstract final strictfp synchronized native transient volatile throws":W.modifier,IntegerLiteral:W.integer,FloatingPointLiteral:W.float,"StringLiteral TextBlock":W.string,CharacterLiteral:W.character,LineComment:W.lineComment,BlockComment:W.blockComment,BooleanLiteral:W.bool,PrimitiveType:W.standard(W.typeName),TypeName:W.typeName,Identifier:W.variableName,"MethodName/Identifier":W.function(W.variableName),Definition:W.definition(W.variableName),ArithOp:W.arithmeticOperator,LogicOp:W.logicOperator,BitOp:W.bitwiseOperator,CompareOp:W.compareOperator,AssignOp:W.definitionOperator,UpdateOp:W.updateOperator,Asterisk:W.punctuation,Label:W.labelName,"( )":W.paren,"[ ]":W.squareBracket,"{ }":W.brace,".":W.derefOperator,", ;":W.separator}),XJ={__proto__:null,void:34,byte:36,short:36,int:36,long:36,char:36,float:36,double:36,boolean:36,extends:50,super:52,this:64,public:70,protected:72,private:74,abstract:76,static:78,final:80,strictfp:82,default:84,synchronized:86,native:88,transient:90,volatile:92,sealed:95,non:97,instanceof:140,true:158,false:158,null:166,class:170,new:176,throws:196,implements:204,permits:211,record:215,interface:226,enum:236,open:289,module:291,requires:296,transitive:298,exports:300,to:302,opens:304,uses:306,provides:308,with:310,package:314,import:318,if:330,else:332,while:336,for:340,var:347,assert:354,switch:358,case:366,throw:370,do:374,break:378,continue:382,return:386,try:392,catch:396,finally:404},KJ=Ns.deserialize({version:14,states:"#5QQ]QPOOQ%QQPOOO(wQQO'#HlO+OQQO'#CbOOQO'#Cb'#CbO+VQPO'#CaOOQO'#Co'#CoO,{QPO'#DOO-iQQO'#HvOOQO'#Hv'#HvO0^QQO'#HqO0eQQO'#HqOOQO'#Hq'#HqOOQO'#Hp'#HpOOQO'#Hz'#HzO0lQPO'#GwO2`QPO'#DOO2gQPO'#CkO4vQPO'#DfO4}QPO'#CiO6ZQQO'#FsO6bQPO'#DyO7rOSO'#EQOOQO'#IW'#IWO+VQPO'#EzO8iQPO'#EzOOQO'#EV'#EVO:QQQO'#ITOnQPO'#HzO>uQPO'#EcO>uQPO'#EjO>uQPO'#EuO>uQPO'#EpO>}QPO'#I[O?cQQO'#FRO+VQPO'#C`O?kQPO'#C`O+VQPO'#FnO?pQPO'#FpO@OQPO'#FvO@OQPO'#FyO>uQPO'#GOO@TQPO'#F{O6bQPO'#GSO6bQPO'#G[O@OQPO'#GUO]QPO'#G^O@YQPO'#G`O@eQPO'#GbO@pQPO'#GdO@wQPO'#GgOAeQQO'#CjOBTQQO'#CjOB_QPO'#I`OCzQPO'#DOODbQPO'#E]OBbQPO'#E^OESQPO'#I`OEeQPO'#E]OEmQPO'#IhOErQPO'#FOOOQO'#I^'#I^OOQO'#G}'#G}Q%QQPOOOGhQPO'#HzOOQO'#Hl'#HlOHZQQO,58{OOQO'#Hj'#HjOOQO'#Hr'#HrOJtQPO,59_OLSQPO,59jOOQO-E:r-E:rO+VQPO,58zOLyQPO,58zO+VQPO,5uQPO,5:}O>uQPO,5;UO>uQPO,5;aO>uQPO,5;[O>uQPO,5gO6bQPO'#EUO@zQPO,5=QO!0rQPO,5:}O!1TQPO,5;UO!1]QPO,5;aO!1eQPO,5;[O!-SQPO,5>vO!1sQPO,5>vO!-SQPO,5>vO!2OQPO,5;mO!2aQQO,58zO!2iQQO,5zOB_QPO,5:vO!;WQPO,5:wOErQPO,5;jO!;`QPO'#E_OBbQPO'#E_O!;kQPO'#IaO!;sQPO,5:xOB_QPO,5>zO!-SQPO,5>zOEmQPO,5?SOOQO,5:w,5:wO!+VQPO'#CkOOQO,5?S,5?SO!?pQPO'#FPOOQO,5;j,5;jO!?wQPO,5;jO!-SQPO'#EaOOQO-E:{-E:{OOQO,5;i,5;iO+VQPO,58}O!?|QPO'#ChOOQO1G.k1G.kO!2aQQO1G.fO+VQPO1G.fO!@WQQO1G1tOOQO,59f,59fO!@`QPO,59fOOQO-E:t-E:tO!@eQPO,5>iO!@|QPO,59zO>uQPO'#HOO!ATQPO,5>yOOQO1G2U1G2UOOQO1G0Y1G0YO!AnQPO'#CsO!B^QPO'#HvO!BkQPO'#CtO!ByQPO'#HuO!CRQPO,59^OOQO1G.v1G.vO!#aQPO1G.vO!CiQPO,59_O!CvQQO'#HlO!DXQQO'#CbO!DjQPO,59yOOQO,59i,59iO>uQPO,59yOOQO,59W,59WO!DuQQO,59WO!DzQPO,59iO!,oQPO'#GyO!E]QPO,5>eOOQO1G.q1G.qO!EeQPO'#C}O!EvQPO1G.qO>uQPO'#GzO!E{QPO,5>mOOQO1G/k1G/kOOQO1G0[1G0[O!-SQPO'#HPO!FTQPO1G1cO6bQPO1G1cOOQO1G/l1G/lO!F]QQO1G.oOOQO1G.o1G.oO!HZQQO1G/mO!IxQQO1G/mO!KgQQO1G/mO!KnQQO1G/mO!KuQQO1G/mO!MdQQO1G/mO!MkQQO1G/mO# YQQO1G/mO# aQQO1G/mO# kQQO1G/mO# rQQO1G/|O!)dQPO'#DOO# yQQO'#HvO!*jQPO'#DuOOQO1G/y1G/yO##`QQO1G1dOOOO-E:y-E:yOOQO1G0W1G0WO##vQPO'#E{OOQO1G1Q1G1QO#$jQPO1G2UO!-{QPO1G1QO!0rQPO1G0iO!1TQPO1G0pO!1]QPO1G0{O!1eQPO1G0vOOQO1G0]1G0]O#$oQQO1G1XO}QPO'#I[OOQO1G1X1G1XO#&iQQO1G1XO#&qQQO1G1YOOQO1G1]1G1]O#&xQPO1G1]O#'TQQO'#I]O#'bQPO,5:sOOQO1G1z1G1zOOQO1G4R1G4ROOQO1G2l1G2lO#'gQPO'#EYO!-SQPO'#EdO!-SQPO'#EeO!-SQPO'#EhOOQO1G0i1G0iO#'nQPO1G0iO#'sQPO1G0iO#'{QPO1G0iO#(WQPO1G0iO#(fQPO'#ElO#(|QPO1G0pO#)UQPO1G0pO#)ZQPO'#EwOOQO1G0{1G0{O#)nQPO1G0{O#)sQPO'#EsO!-SQPO'#ErOOQO1G0v1G0vO#*pQPO1G0vO#*uQPO1G0vO#*}QPO1G0vO!1sQPO1G4bO#+YQPO'#FXO#+aQPO'#FXOOQO'#HX'#HXO#+iQQO1G1^O#-fQQO1G4bO!-SQPO1G4bO|OOQO1G0b1G0bOOQO1G4f1G4fO#DXQPO1G0bOOQO1G0c1G0cOOQO1G1U1G1UO!?wQPO1G1UOOQO,5:y,5:yO!-SQPO'#E`O#D^QPO,5:yOBbQPO'#HQO#DiQPO,5>{OOQO1G0d1G0dOEmQPO'#IbO#DqQPO1G4fOB_QPO1G4fOOQO1G4n1G4nO!)tQPO'#C}O!)dQPO'#DOOOQO,5;k,5;kO#D|QPO,5;kO#ETQPO,5;kO#E[QQO'#ITO#EcQQO'#IVO#EjQQO'#FQO#EuQPO'#FQO#E}QPO'#IcOOQO,5:{,5:{OOQO1G.i1G.iO#F]QQO'#HnO#FmQQO'#FUO#HTQPO'#F`OOQO'#Hn'#HnO#H_QPO'#HnO#H|QPO'#IkO#IUQPO,59SOOQO7+$Q7+$QO!2aQQO7+$QOOQO7+'`7+'`OOQO1G/Q1G/QO#IZQPO'#DdO#IeQQO'#IPOOQO'#IP'#IPOOQO1G/f1G/fOOQO,5=j,5=jOOQO-E:|-E:|O#IuQWO,58{O#I|QPO,59`OOQO,59`,59`O!-SQPO'#HxO!!tQPO'#GuO#J[QPO,5>aOOQO1G.x1G.xOOQO7+$b7+$bOOQO1G.r1G.rO#JdQQO1G.rO>uQPO1G/eOOQO1G/e1G/eO#JiQPO1G.rO#JnQPO1G/eOOQO1G/T1G/TOOQO,5=e,5=eOOQO-E:w-E:wOOQO7+$]7+$]OOQO,5=f,5=fOOQO-E:x-E:xOOQO,5=k,5=kOOQO-E:}-E:}O6bQPO7+&}O#JyQQO7+&}O6bQPO7+%hO#LgQQO,59_OOQO,5:a,5:aOB_QPO,5:aO#MvQPO'#EtO#NUQPO'#EtOOQO'#HW'#HWO#NpQPO,5;gOOQO,5;g,5;gOOQO7+'p7+'pOOQO7+&l7+&lOOQO7+&T7+&TO#'nQPO7+&TO#'sQPO7+&TO#'{QPO7+&TO#(WQPO7+&TO#(|QPO7+&[O#)UQPO7+&[OOQO7+&g7+&gO#)nQPO7+&gOOQO7+&b7+&bO#*pQPO7+&bO#*uQPO7+&bO#*}QPO7+&bOOQO7+&u7+&uOOQO'#FU'#FUOvOvO$ dQPO7+&sO$ rQPO7+&wOOQO7+&t7+&tOOQO7+&w7+&wO6bQPO'#G|O$!QQPO,5>wOOQO1G0_1G0_O$!]QPO,5:tOOQO,5:t,5:tOOQO,5;O,5;OOOQO'#Eg'#EgOOQO,5;P,5;POOQO,5;S,5;SO$!dQPO'#EmO!*jQPO'#EmO$!uQPO'#IdO$!}QPO,5;WO$#SQPO'#EnOOQO7+&[7+&[O$#ZQPO7+&[O$#`QPO'#ExO>uQPO'#ExO$#qQPO'#IfO$#|QPO,5;cOB_QPO'#I`O!-SQPO'#I`O$$UQPO'#E]OOQO'#HU'#HUO$$]QPO,5;_OOQO,5;_,5;_OOQO,5;^,5;^O$%YQQO7+&xO$'VQQO7+)|O$)PQQO,5;sOOQO,5;s,5;sO$)WQPO,5;sOOQO-E;V-E;VOOQO7+&x7+&xOOQO7+)|7+)|O}O$4VQPO,5;{O$4^QPO'#IjO$4fQPO,5;zO+VQPO'#HZO$4kQPO,5?VOOQO1G.n1G.nOOQO<d,5>dOOQO,5=a,5=aOOQO-E:s-E:sO$5QQPO7+$^OOQO7+%P7+%POOQO7+$^7+$^O>uQPO7+%PO$5VQQO<uQPO,5;XOOQO,5;X,5;XO$;zQPO,5;XO!,oQPO'#HSO$<]QPO,5?OOOQO1G0r1G0rODbQPO'#E]O$WQPO'#EyOOQO1G0}1G0}O$>_QPO1G0}OB_QPO,5;`OOQO-E;S-E;SOOQO1G0y1G0yOOQO<dQQO1G1_O$>kQQO<uQPO,5=VO!*jQPO,5=VOOQO1G2o1G2oOOQO<lOOQO1G/j1G/jOOQO<uQPO1G0sOOQO1G0s1G0sO$HSQPO1G0sOOQO,5=n,5=nOOQO-E;Q-E;QO$uQPO1G2qOOQO<uQPO7+&_OOQO1G0u1G0uOOQO7+&j7+&jOOQO7+'V7+'VO+VQPO'#H^O$JtQPO,5?XO$J|QPO7+'VO$KRQQO'#InOOQOAN@yAN@yO$K^QQOAN@yOOQOAN@uAN@uO$KeQPOAN@uO$KjQQO<`!>cP!=^!>{!=^P!=^P!?O!?R!?VP!{#?U#?XP0oP#?]!)]PPP#Ae#Cm#C|#DY#Dr#ET#EW#Ed#El#Eo#EsP#EvP#FU#FX#F[#F`#Ff#FiwuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u)usOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%q%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h)r){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-[-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u/}0T0j0u1S1V1Z1]1^1j2Q2R2X2Z2[2e2i2k2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n$xlOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nv!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rQ$ShS&_#`)dQ'V$UU']$[$n-VQ'd$^W(w%U,n/i1]U)o%p(^,]Q)q%qS*[&W-RU+U'_.W/vQ+]'eQ-s*oQ.T+YQ.X+ZQ0Q-_Q0]-tR0g.Yw!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rT%r!s*R${rOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n$OcObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3n^!lP!h!p'k+a.p0u|#RW!Y#`$T$Z%{&]&`&d(d(u)d*]*o+g,`,m-l-t.a/n1aS#ea3mQ$g|Q$h}Q$i!OQ$j!PW%Y!f%]+r.sS%`!i)]Q%f!jQ'W$VQ'X$WQ'Y$XQ'Z$YQ)[%aS)`%d)bQ*e&fQ*m&|S+n'w.nQ-o*nS.f+k.iQ.m+oQ0i._Q0m.eQ1r0hQ2^1sw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nU%i!l.f0mS)R%Y)`Q)c%fw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3iV#da%h3m'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ&U#YQ*Y&VX/k,s/o1^2R'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/k,s/o1^2R'fZOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/l,s/o1^2RS#XY/kS$m!Q'`S'_$[$nQ'e$^S)l%j)hQ.W+YQ.Y+ZR/v-V%mXOabepy![!]!_!b#W#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|$]$_$b$e$t$u$v$w$x%U%j%m%q%z&j&l'l'm'n'{(R(f(k(m)Z)g)h)r){*U*V*i*k+^+},^,b,c,g,j,n-T-U-Y-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ&S#WR-g*V'c]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n!w#PW!f!v#Q#R#`$O$T%X%Y%]%d%y&Q&W&`&d&|(d(u)R)b)d*l*n*o+g+r,`,m,x-R-t.a.s/m1j2Q2X2[2e2kW#ba#d%h3mR*b&aviOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u[!hP!p'k+a.p0uY#aa#d%h&a3mQ&}#{Q(e$vW(y%U,n/i1]S*p'S*rS+h't.bS+o'w.nS+t'z+vS.e+k.iR/o,sh#TW!Y!f$T$Z%](d*o+r,`-t.sQ*P%{Q*^&]Q-j*]R0X-lU)}%z){0TQ,P(UR.v+y$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3ivwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uQ%V!cQ%g!kQ%o!qS&o#k2wQ'j$fQ)Q%WQ)V%^Q,u)OQ/p,tQ0n.fQ1W/^R1t0m${qOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n!^#od#g$y$z%S&n&p&r&s&t&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lg2y/b3U3V3X3Y3Z3[3]3a3e3f!Y#rd#g$y$z%S&n&r&s&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lc2|/b3U3X3Y3[3]3a3e3fR'O#{%TgOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%ToOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%SoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ$f{Q$t!WQ$u!XQ${!^R,k(oQ$`mS(V$l+XQ+T'^S+z(Q(XS-W)j)kQ.S+VQ.l+nQ.z,RQ/y-XQ0e.VQ0r.mQ1d/wQ1q0fR2V1cQ'o$gY*v'W'p'q'r'sQ,Q(VW-w*w*x*y*zQ.k+nQ.w+zU0^-x-y-zS0q.l.mQ0x.zS1m0_0`Q1u0rR2]1na!nP!p'k+a+k.i.p0u`!nP!p'k+a+k.i.p0uT+u'z+vd!jP!h!p'k+a+k.e.i.p0uQ's$gQ'v$hQ(P$jQ*z'WQ*|'XQ+S'ZV+s'z+t+vQ%b!iR,})]Q)Y%`R,|)[Q%l!mQ)T%[Q)X%_Q-P)aR/s-QvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uS*q'S*rT+u'z+vQ'r$gS*y'W'sR-z*zQ'q$gQ'y$iU*x'W'r'sQ+O'YQ+m'uS-y*y*zQ-|*{Q0`-zR0b-}Q+e'mQ+f'nR+x'{Q'p$gQ'}$jW*w'W'q'r'sU+Q'Z(O(PU-x*x*y*zS.Q+R+SS0_-y-zQ0d.RR1n0`Q'u$hS*{'X'vR-}*|Q+i'tR0k.bQ+l'uS-{*{+mS0a-|-}R1o0bT.g+k.iQ(O$jS+R'Z(PR.R+SQ'|$jW+P'Z'}(O(PU.P+Q+R+SS0c.Q.RR1p0dvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uT+u'z+vQ'x$iS*}'Y'yR.O+OQ+p'wR0s.nR.r+qQ'T$SR*u'VT*q'S*rQ%k!mS)W%_%lR,z)XQ)g%jR-U)h$zoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nX(x%U,n/i1]%SmOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nU'^$[$n-VS+V'_/vQ.V+YR0f.WX(T$l(Q(U+y_)s%q)r-[/}2Z2i2nQ)u%qR0R-_Q([$oQ)w%sR-b)xT,S(Z,TvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR1W/^wwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uvvOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uQ%P!`R%R!aR$w!ZvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR(f$vR$x!ZR(n${T,f(m,gT,e(m,gX({%V(|)Q,vR,t(}Q/n,sR1a/oQ)P%VQ,r(|Q,w)QR/q,vR%W!cQ(z%UV/g,n/i1]QyOQ#jbY$cy#j)h-T/uQ)h%jQ-T)gR/u-UvVOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uv!gP!p#d&a'S'k't'w'z*r+a+k+v,s.b.i.n.p0u|!xV!g#O#Z#_#}$k%a%e&P&V&Z&{(S(W)e*`+W.^0j2R3`!f#OW!f!v#R$O$T%Y%]%d%y&Q&W&|(d(u)R)b*l*n*o+r,`,m,x-R-t.s/m1j2Q2X2[2e2kQ#Z_S#_a3m$`#}ep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%m%q%z&j&l'l'm'n'{(R(f(k)Z)r){*U*i*k+^+},b,c,j-Y-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$k!QS%a!i)]S%e!j+sS&P#W*VQ&V#YU&Z#`&d)dQ&{#{W(S$l(Q(U+yQ(W$mQ)e%hQ*`&`Q+W'`Q.^+gQ0j.aQ2R1^Z3`$v%U,n/i1]Q*W&SR-h*W^#QW#`$O&|(d(u*l!Q%X!f!v$T%]%d&Q&W&`&d)b)d*n*o+g+r,`,m-R-t.a.s/m2Q2e[%x#Q%X%y,x2X2kS%y#R%YQ,x)RQ2X1jR2k2[#Q`OPaby!_!p#d#j#{$b$t$u$v$w$x%U%h%j&a'S'k't'w'z(m)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3m[!wV!g#_&{)e3`T#[`!wQ0U-cR1i0UQ&b#bR*c&bQ&g#eR*f&gQ$QfR'Q$QQ+_'fS.[+_1XR1X/bQ!pPU%n!p+a0uQ+a'kR0u.pQ%|#TR*Q%|Q&k#hU*h&k/r3kQ/r,{R3k3jQ)^%bR-O)^Q-Z)mR/{-ZQ.c+iR0l.cQ.i+kR0o.iQ+v'zR.t+vQ.o+pR0t.oQ*r'SR-u*rQ(U$lQ+y(QT,O(U+yQ0O-]R1g0OQ-`)uR0S-`Q,T(ZR.{,TQ/P,VR0{/PQ1x0|S2`1x2bR2b1zQ,g(mR/`,gQ(|%VS,q(|,vR,v)QQ1_/mR2S1_Q,o(zR/j,odxOby#j%j)g)h-T-U/uQ$|!_Q'h$bQ(b$tQ(c$uQ(h$wQ(i$xS,f(m,gR/V,^)ftOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u0T0j0u1S1V1Z1]1^1j2Q2R2X2[2e2k2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n_)t%q)r-[/}2Z2i2nQ!sTQ$o!SQ$p!UQ$q!VQ%s!yQ%u!{Q(`$rQ(a$sQ)x%tQ*R2rS.},V,XQ/R,WQ/S,YQ0z/PS0|/R1OQ1z1PR2_1w&{SOTabehpy!S!U!V![!]!_!b!y!{#`#j#k#n#o#p#q#r#s#t#u#v#w#x#|$U$[$]$^$_$b$e$n$r$s$t$u$v$w$x%U%j%p%q%t%z&W&l'_'e(R(^(f(k(m)d)g)h)r){*i*k*o+Y+Z+^+},V,W,X,Y,],^,b,c,g,j,n-R-T-U-V-[-_-t.W.Y/P/R/W/Y/^/e/i/u/v/}0T1O1P1S1V1Z1]1w2Z2i2n2r2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ)v%qQ-])rQ/|-[Q1f/}Q2j2ZQ2l2iR2p2nxdOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/^/uU#ga$e3mS#ye3hS$ap3iQ$y![Q$z!]Q%S!bQ&n#kQ&p#nQ&q#oQ&r#pQ&s#qQ&t#rQ&u#sQ&v#tQ&w#uS&x#v3QQ&y#wQ&z#xQ'P#|Q'c$]Y'f$_$v,b/Y1V^)p%q)r-[/}2Z2i2nU)|%z){0TS*j&l3TQ+{(RQ,a(fQ,d(kS-m*i3bQ-n*kQ.Z+^Q.y+}Q/[,cQ/b,jQ1R/WQ1Y/eQ1|1SQ2P1ZQ3U2wQ3V2xQ3W2yQ3X2zQ3Y2{Q3Z2|Q3[2}Q3]3OQ3^3PQ3_3RQ3a3SQ3e3cQ3f3dR3l3nvWOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!fP!p'k+a+k.i.p0uW!vV#}&P3`S#`a3m#|$Oep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%q%z&l(R(f(k)r){*i*k+^+},b,c,j-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$TiS%]!h.eS%d!j+sf&Q#W%m&j'l'm'n'{)Z*U*V-YQ&W#_Q&`#aS&d#d&aQ&|#{Q(d$vW(u%U,n/i1]Q)b%eQ)d%hQ*l&{Q*n&}S*o'S*rS+g't.bS+r'z+vQ,`(eQ,m(yQ-R)eQ-t*pQ.a+hQ.s+tS/m,s/oQ2Q1^R2e2R'b]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ$l!QQ(Q$kS(X$m+WQ+X'`R,R(W'sUOPVabeipy!Q![!]!_!b!h!j!p#W#Y#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&V&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nR&T#W%OnObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ#haQ&S#WQ'O#{W)m%m'm'n'{Q*g&jQ+c'lQ,{)ZQ-f*UQ-g*VQ/z-YR3j3mQ*T&RR-e*SU#ca%h3mR&e#d#c_OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3m#c^OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3ml#SW!Y!f$T$Z%]%{&]*]*o+r-l-t.sU&[#`&d)dQ*a&`Q,_(dQ,l(uQ.`+gQ/X,`Q/f,mQ0i.aQ1`/nR2U1aQ*O%zQ-c){R1h0TR-d){T#fa3m$vkOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%q%z&l(R(f(k(m)g)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nW(v%U,n/i1]T)i%j)h%SjOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nT'[$[-VQ'g$_Q(g$vQ/Z,bQ1T/YR2O1V[!oP!p'k+a.p0uT.g+k.iU#UW!Y(dQ%Z!fU'U$T$Z,`Q)U%]S-r*o+rT0[-t.sd!kP!p'k'z+a+k+v.i.p0uV%^!h+t.eR%c!iW%[!f%]+r.sQ)a%dR-Q)bQ)n%mV+d'm'n'{R+j'tT.h+k.iR+q'w`!mP!p'k+a+k.i.p0uT%_!h.eR-^)rR)v%qT/O,V/PQ0}/RR1y1OR1y1PR/c,j",nodeNames:"⚠ LineComment BlockComment Program ModuleDeclaration MarkerAnnotation Identifier ScopedIdentifier . Annotation ) ( AnnotationArgumentList LambdaExpression Definition FormalParameters ReceiverParameter void PrimitiveType TypeName ScopedTypeName GenericType TypeArguments AnnotatedType Wildcard extends super , ArrayType ] Dimension [ this FormalParameter Modifiers public protected private abstract static final strictfp default synchronized native transient volatile sealed non SpreadParameter VariableDeclarator AssignOp } { ArrayInitializer InferredParameters Block BinaryExpression CompareOp CompareOp CompareOp LogicOp LogicOp BitOp BitOp BitOp ArithOp ArithOp BitOp InstanceofExpression instanceof TypePattern TernaryExpression LogicOp : UpdateExpression UpdateOp IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral TextBlock null ClassLiteral class ParenthesizedExpression ObjectCreationExpression new ArgumentList ClassBody ; FieldDeclaration MethodDeclaration TypeParameters TypeParameter TypeBound Throws throws ClassDeclaration Superclass SuperInterfaces implements InterfaceTypeList Permits permits RecordDeclaration record RecordHeader RecordComponent RecordBody CompactConstructorDeclaration InterfaceDeclaration interface ExtendsInterfaces InterfaceBody ConstantDeclaration EnumDeclaration enum EnumBody EnumConstant EnumBodyDeclarations AnnotationTypeDeclaration AnnotationTypeBody AnnotationTypeElementDeclaration StaticInitializer ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation FieldAccess ArrayAccess MethodInvocation MethodName MethodReference ArrayCreationExpression Dimension UnaryExpression LogicOp BitOp CastExpression AssignmentExpression AssignOp ElementValueArrayInitializer ElementValuePair open module ModuleBody ModuleDirective requires transitive exports to opens uses provides with PackageDeclaration package ImportDeclaration import Asterisk ExpressionStatement LabeledStatement Label IfStatement if else WhileStatement while ForStatement for ForSpec LocalVariableDeclaration var EnhancedForStatement ForSpec AssertStatement assert SwitchStatement switch SwitchBlock SwitchRule SwitchLabel case ThrowStatement throw DoStatement do BreakStatement break ContinueStatement continue ReturnStatement return SynchronizedStatement TryStatement try CatchClause catch CatchFormalParameter CatchType FinallyClause finally TryWithResourcesStatement ResourceSpecification Resource ClassContent",maxTerm:296,nodeProps:[["isolate",-4,1,2,80,81,""],["group",-27,4,56,91,99,106,112,117,122,156,158,161,162,164,167,169,172,174,176,178,184,186,188,190,192,194,195,203,"Statement",-25,6,13,32,57,69,72,75,77,78,79,80,81,82,83,84,86,87,129,130,131,133,134,136,139,140,"Expression",-7,17,18,19,20,21,23,28,"Type"],["openedBy",10,"(",52,"{"],["closedBy",11,")",53,"}"]],propSources:[YJ],skippedNodes:[0,1,2],repeatNodeCount:30,tokenData:"#$g_R!_OX%QXY'fYZ)bZ^'f^p%Qpq'fqr*|rs,^st%Qtu2zuv4avw5qwx7Xxy?pyz@^z{@z{|Ap|}CW}!OCt!O!PEa!P!QNZ!Q!R!+P!R![!.k![!]!;T!]!^!osw<}wx9}x#O<}#O#P&Z#P;'S<};'S;=`?d<%lO<}P>rVOY>oZw>owx?Xx#O>o#P;'S>o;'S;=`?^<%lO>oP?^O!rPP?aP;=`<%l>oT?gP;=`<%l<}T?mP;=`<%l8P_?wVZZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV@eVYR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVATX$fP&}S!eQOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVAwZ!dR&}SOY%QYZ%lZr%Qrs%qs{%Q{|Bj|!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVBqV!nR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVC_VkR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_C}[&pW!dR&}SOY%QYZ%lZr%Qrs%qs}%Q}!OBj!O!_%Q!_!`5T!`!aDs!a;'S%Q;'S;=`&s<%lO%QVDzV&vR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_EhZWY&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PFZ!P!Q%Q!Q![Gi![;'S%Q;'S;=`&s<%lO%QVF`X&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PF{!P;'S%Q;'S;=`&s<%lO%QVGSV&rR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTGpc&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#R%Q#R#SMc#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTISV&}S!pPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTIn]&}SOY%QYZ%lZr%Qrs%qs{%Q{|Jg|}%Q}!OJg!O!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTJlX&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTK`c&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![!f%Q!f!gH{!g!h%Q!h!iH{!i#R%Q#R#SLk#S#W%Q#W#XH{#X#Y%Q#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTLpZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![#R%Q#R#SLk#S;'S%Q;'S;=`&s<%lO%QTMhZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![#R%Q#R#SMc#S;'S%Q;'S;=`&s<%lO%Q_Nb]&}S!eQOY%QYZ%lZr%Qrs%qsz%Qz{! Z{!P%Q!P!Q!'|!Q!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%Q_! `X&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!!QT&}SOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!dTOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!vVOz!!az{!!s{!P!!a!P!Q!#]!Q;'S!!a;'S;=`!#b<%lO!!aZ!#bOQZZ!#eP;=`<%l!!a_!#kXOY!$WYZ! {Zr!$Wrs!&bsz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!$ZXOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!${Z&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!%uV&}SQZOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!&_P;=`<%l! Z_!&eXOY!$WYZ! {Zr!$Wrs!!asz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!'TZOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!'yP;=`<%l!$W_!(TV&}SPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!(oVPZOY!)UYZ%lZr!)Urs!)vs;'S!)U;'S;=`!*y<%lO!)U_!)ZVPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!)sP;=`<%l!'|_!){VPZOY!)UYZ%lZr!)Urs!*bs;'S!)U;'S;=`!*y<%lO!)UZ!*gSPZOY!*bZ;'S!*b;'S;=`!*s<%lO!*bZ!*vP;=`<%l!*b_!*|P;=`<%l!)UT!+Wq&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!d%Q!d!e!1u!e!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o!z%Q!z!{!3s!{#R%Q#R#S!0}#S#U%Q#U#V!1u#V#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a#l%Q#l#m!3s#m;'S%Q;'S;=`&s<%lO%QT!-fa&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QT!.ri&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o#R%Q#R#S!0}#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!0hV&}S!oPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT!1SZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!.k![#R%Q#R#S!0}#S;'S%Q;'S;=`&s<%lO%QT!1zY&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S;'S%Q;'S;=`&s<%lO%QT!2q`&}S!oPOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S!n%Q!n!o!0a!o#R%Q#R#S!1u#S#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!3x_&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!P!4w!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QT!4|]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i#T%Q#T#Z!5u#Z;'S%Q;'S;=`&s<%lO%QT!5zc&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#R%Q#R#S!4w#S#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!7^i&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!8{!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i!n%Q!n!o!0a!o!r%Q!r!sIi!s#R%Q#R#S!:V#S#T%Q#T#Z!7V#Z#`%Q#`#a!0a#a#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!9Qa&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!:[]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QV!;[X!lR&}SOY%QYZ%lZr%Qrs%qs![%Q![!]!;w!];'S%Q;'S;=`&s<%lO%QV!l!`;'S%Q;'S;=`&s<%lO%QU!>PX!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QU!>sV!]Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!?aX!TR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QV!@TY&gR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`!>l!`!a!@s!a;'S%Q;'S;=`&s<%lO%QU!@zY!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`!a!=x!a;'S%Q;'S;=`&s<%lO%Q_!AsV&kX!kQ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!BaX&]Z&}SOY%QYZ%lZr%Qrs%qs#]%Q#]#^!B|#^;'S%Q;'S;=`&s<%lO%QV!CRX&}SOY%QYZ%lZr%Qrs%qs#b%Q#b#c!Cn#c;'S%Q;'S;=`&s<%lO%QV!CsX&}SOY%QYZ%lZr%Qrs%qs#h%Q#h#i!D`#i;'S%Q;'S;=`&s<%lO%QV!DeX&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!EQ#Y;'S%Q;'S;=`&s<%lO%QV!EVX&}SOY%QYZ%lZr%Qrs%qs#f%Q#f#g!Er#g;'S%Q;'S;=`&s<%lO%QV!EwX&}SOY%QYZ%lZr%Qrs%qs#Y%Q#Y#Z!Fd#Z;'S%Q;'S;=`&s<%lO%QV!FiX&}SOY%QYZ%lZr%Qrs%qs#T%Q#T#U!GU#U;'S%Q;'S;=`&s<%lO%QV!GZX&}SOY%QYZ%lZr%Qrs%qs#V%Q#V#W!Gv#W;'S%Q;'S;=`&s<%lO%QV!G{X&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!Hh#Y;'S%Q;'S;=`&s<%lO%QV!HoV'ZR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!I]b&aZ&}SOY%QYZ%lZr%Qrs%qst%Qtu!IUu!Q%Q!Q![!IU![!c%Q!c!}!IU!}#R%Q#R#S!IU#S#T%Q#T#o!IU#o$g%Q$g;'S!IU;'S;=`!Je<%lO!IU_!JhP;=`<%l!IU_!JrVoZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!K`VmR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QU!K|X!cQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QV!LpV!VR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!M`Z'dX!bQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`#p%Q#p#q!NR#q;'S%Q;'S;=`&s<%lO%QU!NYV!`Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!NvV!UR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT# dV$OP&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_#!Su&}S&XZ&_ZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qst%Qtu2zu!Q%Q!Q![2z![!c%Q!c!}2z!}#R%Q#R#S2z#S#T%Q#T#o2z#o#y%Q#y#z'f#z$f%Q$f$g'f$g#BY2z#BY#BZ# y#BZ$IS2z$IS$I_# y$I_$I|2z$I|$JO# y$JO$JT2z$JT$JU# y$JU$KV2z$KV$KW# y$KW&FU2z&FU&FV# y&FV;'S2z;'S;=`4Z<%lO2z",tokenizers:[0,1,2,3],topRules:{Program:[0,3],ClassContent:[1,206]},dynamicPrecedences:{21:1,246:-1,252:-1},specialized:[{term:245,get:i=>XJ[i]||-1}],tokenPrec:9164}),eF=Ms.define({name:"java",parser:KJ.configure({props:[cf.add({IfStatement:Yr({except:/^\s*({|else\b)/}),TryStatement:Yr({except:/^\s*({|catch|finally)\b/}),LabeledStatement:IE,SwitchBlock:i=>{let e=i.textAfter,t=/^\s*\}/.test(e),n=/^\s*(case|default)\b/.test(e);return i.baseIndent+(t?0:n?1:2)*i.unit},Block:zE({closing:"}"}),BlockComment:()=>null,Statement:Yr({except:/^{/})}),TE.add({"Block SwitchBlock ClassBody ElementValueArrayInitializer ModuleBody EnumBody ConstructorBody InterfaceBody ArrayInitializer":_E,BlockComment(i){return{from:i.from+2,to:i.to-2}}})]}),languageData:{commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\})$/}});function tF(){return new gE(eF)}const nF=" ";function iF(i,e){let t="",n=e;for(let a=0;a{var b,x;const o=s.trim(),l=a,{chars:u,comment:m}=iF(s,a);a=m;const c=l?0:((b=/^[}\])\s]*/.exec(o)[0].match(/[}\])]/g))==null?void 0:b.length)??0,d=n.slice(0,Math.max(0,n.length-c));sF.test(o)&&((x=d.at(-1))!=null&&x.inCase)&&(d.at(-1).inCase=!1);const h=aF(d);for(const v of u)"{[(".includes(v)?n.push({line:r,char:v}):n.pop();const g=n.at(-1);(g==null?void 0:g.line)===r&&g.char==="{"&&/^switch\b/.test(o)&&(g.char="switch"),(g==null?void 0:g.char)==="switch"&&rF.test(o)&&(g.inCase=!0);const f=r+1;return ft||l&&!o.startsWith("*")?s:o===""?"":nF.repeat(h)+(l?" ":"")+o}).join(` -`)}const oF=[">>>=","<<=",">>=","...","->","::","++","--","&&","||","==","!=","<=",">=","+=","-=","*=","/=","%=","&=","|=","^=","<<"],lF=new Set(["=","==","!=","<=",">=","&&","||","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=",">>>=","->","&","|","^","<<"]),uF=new Set(["+","-","*","/","%"]),mF=new Set(["return","case","throw","new","else","do","yield","assert","instanceof"]),cF=new Set(["byte","short","int","long","float","double","char","boolean"]),dF=new Set(["if","for","while","switch","catch","synchronized","try"]),hF=new Set(["else","catch","finally"]);function gF(i){const e=[];let t=1,n=0;const a=(s,r)=>{e.push({kind:s,text:i.slice(n,r),from:n,to:r,line:t});for(let o=n;oOr(w)!==""&&Or(w)===Or(z)))v.kind==="keep"&&(c[v.a]=v.b);const d=[];let h=0,g="";const f=v=>{for(;hw===z))if(v.kind==="keep")c[v.a]>=0&&(f(c[v.a]+1),g="");else if(v.kind==="del"){const w=c[v.a];if(w<0)continue;f(w),g||(g=Mg(m[w]).comment),h=w+1}else{const w=u[v.b];d.push(g&&w.trim()!==""?`${w} ${g}`:w),w.trim()!==""&&(g="")}f(m.length);const x=d.join(` +`),b=Ro(x,n,a);return gi(Go(t,b),n,s)===r?x:r}function Go(i,e){let t=e.caption??(It(i.caption)?"":i.caption);return!e.caption&&e.className&&Ks(t)!==e.className&&(t=e.className),{...i,caption:t,elements:Ho(i.elements,e.elements)}}function Ho(i,e){return e.map((t,n)=>{const a=i[n];if(!a||a.type!==t.type)return t;const s={...t,zoomX:a.zoomX,zoomY:a.zoomY};return a.textColor&&(s.textColor=a.textColor),a.backgroundColor&&(s.backgroundColor=a.backgroundColor),t.loopBody&&(s.loopBody=Ho(a.loopBody??[],t.loopBody)),t.cases&&(s.cases=t.cases.map((r,o)=>{var l,u;return{...r,elements:Ho(((u=(l=a.cases)==null?void 0:l[o])==null?void 0:u.elements)??[],r.elements)}})),s})}let Vo=[],Bg=[];(()=>{let i="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,1n,9,16,o,,x,1i,3,,i,,7,a,2,t,3,1k,,,7,2,2,2,3,9,,a,2,q,,2,3,1k,,,5,4,2,2,3,3,,u,2,3,,b,3,1k,,,8,,3,,3,k,2,m,6,,3,1k,,,7,2,2,2,3,7,3,a,2,u,,1n,5,3,3,,4,9,,14,5,1j,,,7,,3,,4,7,2,b,2,t,3,1k,,,7,,3,,4,7,2,b,2,f,,c,4,1j,2,,7,,3,,4,9,,a,2,t,3,1y,,4,6,,,,8,i,2,1p,,,8,c,8,2q,,,a,b,7,21,2,r,,,,,,4,2,1d,k,,2,5,b,,10,9,,2u,b,,6,n,4,4,3,g,4,d,,,3,6,,f,,jj,3,qa,4,s,3,t,2,u,2,1s,w,9,,19,3,,,39,2,y,,3a,c,4,c,63,5,1l,a,,,,,2,o,2,,1c,1a,2,c,k,5,1b,h,12,9,c,3,u,d,1k,e,1c,k,48,3,,l,4,,6,,2,3,5i,1s,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,n,5,4,,2b,2,1e,i,q,i,d,,12,8,p,d,18,4,1b,e,10,,1v,e,c,,8,2,1a,,1f,,,3,2,2,5,2,,,15,5,5,2,6k,8,,2,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,1t,5,8t,2,25,6,1y,b,1d,4,3e,3,1h,f,15,,2,2,a,4,19,b,7,,1p,3,10,e,g,2,18,,c,3,1c,e,8,4,,2,2k,c,6,,2,,4d,c,l,4,1j,2,,7,2,2,2,3,9,,a,2,2,7,3,5,1v,9,,,2,,,4,,5,,,e,2,2a,i,n,,29,k,6j,7,2,9,r,2,2a,h,2y,d,2t,3,2,a,74,f,6t,6,,2,2,4,,,,2,3x,7,2,7,3,,s,a,14,7,,4,8,,9,b,1a,g,5i,8,5j,8,,8,2a,m,,e,3e,6,3,,,2,,7,,,1u,5,,2,,5,9n,4,9,2,,,1c,7,3,5,n,,44l,,6,f,8ug,i,1xc,5,1n,7,t4,,,1j,7,4,29,,b,2,f57,2,3mp,1a,2,n,f2,5,3,6,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,2s,,4g,7,af,,1p,4,e4,4,72,2,6r,,2,,7,2,5,,d6,7,31,7,240,5".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(i=Bg[n])e=n+1;else return!0;if(e==t)return!1}}function Cm(i){return i>=127462&&i<=127487}const Am=8205;function sW(i,e,t=!0,n=!0){return(t?Zg:rW)(i,e,n)}function Zg(i,e,t){if(e==i.length)return e;e&&Lg(i.charCodeAt(e))&&Wg(i.charCodeAt(e-1))&&e--;let n=Dr(i,e);for(e+=Pm(n);e=0&&Cm(Dr(i,r));)s++,r-=2;if(s%2==0)break;e+=2}else break}return e}function rW(i,e,t){for(;e>1;){let n=Zg(i,e-2,t);if(n=56320&&i<57344}function Wg(i){return i>=55296&&i<56320}function Pm(i){return i<65536?1:2}class oe{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,n){[e,t]=O1(this,e,t);let a=[];return this.decompose(0,e,a,2),n.length&&n.decompose(0,n.length,a,3),this.decompose(t,this.length,a,1),an.from(a,this.length-(t-e)+n.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=O1(this,e,t);let n=[];return this.decompose(e,t,n,0),an.from(n,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),n=this.length-this.scanIdentical(e,-1),a=new pi(this),s=new pi(e);for(let r=t,o=t;;){if(a.next(r),s.next(r),r=0,a.lineBreak!=s.lineBreak||a.done!=s.done||a.value!=s.value)return!1;if(o+=a.value.length,a.done||o>=n)return!0}}iter(e=1){return new pi(this,e)}iterRange(e,t=this.length){return new Eg(this,e,t)}iterLines(e,t){let n;if(e==null)n=this.iter();else{t==null&&(t=this.lines+1);let a=this.line(e).from;n=this.iterRange(a,Math.max(a,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Ng(n)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?oe.empty:e.length<=32?new Oe(e):an.from(Oe.split(e,[]))}}class Oe extends oe{constructor(e,t=oW(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,n,a){for(let s=0;;s++){let r=this.text[s],o=a+r.length;if((t?n:o)>=e)return new lW(a,o,n,r);a=o+1,n++}}decompose(e,t,n,a){let s=e<=0&&t>=this.length?this:new Oe(Om(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(a&1){let r=n.pop(),o=Qa(s.text,r.text.slice(),0,s.length);if(o.length<=32)n.push(new Oe(o,r.length+s.length));else{let l=o.length>>1;n.push(new Oe(o.slice(0,l)),new Oe(o.slice(l)))}}else n.push(s)}replace(e,t,n){if(!(n instanceof Oe))return super.replace(e,t,n);[e,t]=O1(this,e,t);let a=Qa(this.text,Qa(n.text,Om(this.text,0,e)),t),s=this.length+n.length-(t-e);return a.length<=32?new Oe(a,s):an.from(Oe.split(a,[]),s)}sliceString(e,t=this.length,n=` +`){[e,t]=O1(this,e,t);let a="";for(let s=0,r=0;s<=t&&re&&r&&(a+=n),es&&(a+=o.slice(Math.max(0,e-s),t-s)),s=l+1}return a}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let n=[],a=-1;for(let s of e)n.push(s),a+=s.length+1,n.length==32&&(t.push(new Oe(n,a)),n=[],a=-1);return a>-1&&t.push(new Oe(n,a)),t}}class an extends oe{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let n of e)this.lines+=n.lines}lineInner(e,t,n,a){for(let s=0;;s++){let r=this.children[s],o=a+r.length,l=n+r.lines-1;if((t?l:o)>=e)return r.lineInner(e,t,n,a);a=o+1,n=l+1}}decompose(e,t,n,a){for(let s=0,r=0;r<=t&&s=r){let u=a&((r<=e?1:0)|(l>=t?2:0));r>=e&&l<=t&&!u?n.push(o):o.decompose(e-r,t-r,n,u)}r=l+1}}replace(e,t,n){if([e,t]=O1(this,e,t),n.lines=s&&t<=o){let l=r.replace(e-s,t-s,n),u=this.lines-r.lines+l.lines;if(l.lines>4&&l.lines>u>>6){let m=this.children.slice();return m[a]=l,new an(m,this.length-(t-e)+n.length)}return super.replace(s,o,l)}s=o+1}return super.replace(e,t,n)}sliceString(e,t=this.length,n=` +`){[e,t]=O1(this,e,t);let a="";for(let s=0,r=0;se&&s&&(a+=n),er&&(a+=o.sliceString(e-r,t-r,n)),r=l+1}return a}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof an))return 0;let n=0,[a,s,r,o]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;a+=t,s+=t){if(a==r||s==o)return n;let l=this.children[a],u=e.children[s];if(l!=u)return n+l.scanIdentical(u,t);n+=l.length+1}}static from(e,t=e.reduce((n,a)=>n+a.length+1,-1)){let n=0;for(let h of e)n+=h.lines;if(n<32){let h=[];for(let g of e)g.flatten(h);return new Oe(h,t)}let a=Math.max(32,n>>5),s=a<<1,r=a>>1,o=[],l=0,u=-1,m=[];function c(h){let g;if(h.lines>s&&h instanceof an)for(let f of h.children)c(f);else h.lines>r&&(l>r||!l)?(d(),o.push(h)):h instanceof Oe&&l&&(g=m[m.length-1])instanceof Oe&&h.lines+g.lines<=32?(l+=h.lines,u+=h.length+1,m[m.length-1]=new Oe(g.text.concat(h.text),g.length+1+h.length)):(l+h.lines>a&&d(),l+=h.lines,u+=h.length+1,m.push(h))}function d(){l!=0&&(o.push(m.length==1?m[0]:an.from(m,u)),u=-1,l=m.length=0)}for(let h of e)c(h);return d(),o.length==1?o[0]:new an(o,t)}}oe.empty=new Oe([""],0);function oW(i){let e=-1;for(let t of i)e+=t.length+1;return e}function Qa(i,e,t=0,n=1e9){for(let a=0,s=0,r=!0;s=t&&(l>n&&(o=o.slice(0,n-a)),a0?1:(e instanceof Oe?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let n=this.nodes.length-1,a=this.nodes[n],s=this.offsets[n],r=s>>1,o=a instanceof Oe?a.text.length:a.children.length;if(r==(t>0?o:0)){if(n==0)return this.done=!0,this.value="",this;t>0&&this.offsets[n-1]++,this.nodes.pop(),this.offsets.pop()}else if((s&1)==(t>0?0:1)){if(this.offsets[n]+=t,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(a instanceof Oe){let l=a.text[r+(t<0?-1:0)];if(this.offsets[n]+=t,l.length>Math.max(0,e))return this.value=e==0?l:t>0?l.slice(e):l.slice(0,l.length-e),this;e-=l.length}else{let l=a.children[r+(t<0?-1:0)];e>l.length?(e-=l.length,this.offsets[n]+=t):(t<0&&this.offsets[n]--,this.nodes.push(l),this.offsets.push(t>0?1:(l instanceof Oe?l.text.length:l.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Eg{constructor(e,t,n){this.value="",this.done=!1,this.cursor=new pi(e,t>n?-1:1),this.pos=t>n?e.length:0,this.from=Math.min(t,n),this.to=Math.max(t,n)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let n=t<0?this.pos-this.from:this.to-this.pos;e>n&&(e=n),n-=e;let{value:a}=this.cursor.next(e);return this.pos+=(a.length+e)*t,this.value=a.length<=n?a:t<0?a.slice(a.length-n):a.slice(0,n),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class Ng{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:n,value:a}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):n?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=a,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(oe.prototype[Symbol.iterator]=function(){return this.iter()},pi.prototype[Symbol.iterator]=Eg.prototype[Symbol.iterator]=Ng.prototype[Symbol.iterator]=function(){return this});class lW{constructor(e,t,n,a){this.from=e,this.to=t,this.number=n,this.text=a}get length(){return this.to-this.from}}function O1(i,e,t){return e=Math.max(0,Math.min(i.length,e)),[e,Math.max(e,Math.min(i.length,t))]}function rt(i,e,t=!0,n=!0){return sW(i,e,t,n)}function uW(i){return i>=56320&&i<57344}function mW(i){return i>=55296&&i<56320}function At(i,e){let t=i.charCodeAt(e);if(!mW(t)||e+1==i.length)return t;let n=i.charCodeAt(e+1);return uW(n)?(t-55296<<10)+(n-56320)+65536:t}function Fg(i){return i<=65535?String.fromCharCode(i):(i-=65536,String.fromCharCode((i>>10)+55296,(i&1023)+56320))}function hn(i){return i<65536?1:2}const qo=/\r\n?|\n/;var st=(function(i){return i[i.Simple=0]="Simple",i[i.TrackDel=1]="TrackDel",i[i.TrackBefore=2]="TrackBefore",i[i.TrackAfter=3]="TrackAfter",i})(st||(st={}));class pn{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return s+(e-a);s+=o}else{if(n!=st.Simple&&u>=e&&(n==st.TrackDel&&ae||n==st.TrackBefore&&ae))return null;if(u>e||u==e&&t<0&&!o)return e==a||t<0?s:s+l;s+=l}a=u}if(e>a)throw new RangeError(`Position ${e} is out of range for changeset of length ${a}`);return s}touchesRange(e,t=e){for(let n=0,a=0;n=0&&a<=t&&o>=e)return at?"cover":!0;a=o}return!1}toString(){let e="";for(let t=0;t=0?":"+a:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new pn(e)}static create(e){return new pn(e)}}class Be extends pn{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Qo(this,(t,n,a,s,r)=>e=e.replace(a,a+(n-t),r),!1),e}mapDesc(e,t=!1){return Uo(this,e,t,!0)}invert(e){let t=this.sections.slice(),n=[];for(let a=0,s=0;a=0){t[a]=o,t[a+1]=r;let l=a>>1;for(;n.length0&&Pn(n,t,s.text),s.forward(m),o+=m}let u=e[r++];for(;o>1].toJSON()))}return e}static of(e,t,n){let a=[],s=[],r=0,o=null;function l(m=!1){if(!m&&!a.length)return;rd||c<0||d>t)throw new RangeError(`Invalid change range ${c} to ${d} (in doc of length ${t})`);let g=h?typeof h=="string"?oe.of(h.split(n||qo)):h:oe.empty,f=g.length;if(c==d&&f==0)return;cr&&at(a,c-r,-1),at(a,d-c,f),Pn(s,a,g),r=d}}return u(e),l(!o),o}static empty(e){return new Be(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],n=[];for(let a=0;ao&&typeof r!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(s.length==1)t.push(s[0],0);else{for(;n.length=0&&t<=0&&t==i[a+1]?i[a]+=e:a>=0&&e==0&&i[a]==0?i[a+1]+=t:n?(i[a]+=e,i[a+1]+=t):i.push(e,t)}function Pn(i,e,t){if(t.length==0)return;let n=e.length-2>>1;if(n>1])),!(t||r==i.sections.length||i.sections[r+1]<0);)o=i.sections[r++],l=i.sections[r++];e(a,u,s,m,c),a=u,s=m}}}function Uo(i,e,t,n=!1){let a=[],s=n?[]:null,r=new Ai(i),o=new Ai(e);for(let l=-1;;){if(r.done&&o.len||o.done&&r.len)throw new Error("Mismatched change set lengths");if(r.ins==-1&&o.ins==-1){let u=Math.min(r.len,o.len);at(a,u,-1),r.forward(u),o.forward(u)}else if(o.ins>=0&&(r.ins<0||l==r.i||r.off==0&&(o.len=0&&l=0){let u=0,m=r.len;for(;m;)if(o.ins==-1){let c=Math.min(m,o.len);u+=c,m-=c,o.forward(c)}else if(o.ins==0&&o.lenl||r.ins>=0&&r.len>l)&&(o||n.length>u),s.forward2(l),r.forward(l)}}}}class Ai{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?oe.empty:e[t]}textBit(e){let{inserted:t}=this.set,n=this.i-2>>1;return n>=t.length&&!e?oe.empty:t[n].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class jn{constructor(e,t,n,a){this.from=e,this.to=t,this.flags=n,this.goalColumn=a}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(e,t=-1){let n,a;return this.empty?n=a=e.mapPos(this.from,t):(n=e.mapPos(this.from,1),a=e.mapPos(this.to,-1)),n==this.from&&a==this.to?this:new jn(n,a,this.flags,this.goalColumn)}extend(e,t=e,n=0){if(e<=this.anchor&&t>=this.anchor)return M.range(e,t,void 0,void 0,n);let a=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return M.range(this.anchor,a,void 0,void 0,n)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return M.range(e.anchor,e.head)}static create(e,t,n,a){return new jn(e,t,n,a)}}class M{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:M.create(this.ranges.map(n=>n.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let n=0;ne.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new M(e.ranges.map(t=>jn.fromJSON(t)),e.main)}static single(e,t=e){return new M([M.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let n=0,a=0;aa.from-s.from),t=e.indexOf(n);for(let a=1;as.head?M.range(l,o):M.range(o,l))}}return new M(e,t)}}function Rg(i,e){for(let t of i.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let b0=0;class V{constructor(e,t,n,a,s){this.combine=e,this.compareInput=t,this.compare=n,this.isStatic=a,this.id=b0++,this.default=e([]),this.extensions=typeof s=="function"?s(this):s}get reader(){return this}static define(e={}){return new V(e.combine||(t=>t),e.compareInput||((t,n)=>t===n),e.compare||(e.combine?(t,n)=>t===n:v0),!!e.static,e.enables)}of(e){return new Ua([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Ua(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Ua(e,this,2,t)}from(e,t){return t||(t=n=>n),this.compute([e],n=>t(n.field(e)))}}function v0(i,e){return i==e||i.length==e.length&&i.every((t,n)=>t===e[n])}class Ua{constructor(e,t,n,a){this.dependencies=e,this.facet=t,this.type=n,this.value=a,this.id=b0++}dynamicSlot(e){var t;let n=this.value,a=this.facet.compareInput,s=this.id,r=e[s]>>1,o=this.type==2,l=!1,u=!1,m=[];for(let c of this.dependencies)c=="doc"?l=!0:c=="selection"?u=!0:(((t=e[c.id])!==null&&t!==void 0?t:1)&1)==0&&m.push(e[c.id]);return{create(c){return c.values[r]=n(c),1},update(c,d){if(l&&d.docChanged||u&&(d.docChanged||d.selection)||$o(c,m)){let h=n(c);if(o?!Dm(h,c.values[r],a):!a(h,c.values[r]))return c.values[r]=h,1}return 0},reconfigure:(c,d)=>{let h,g=d.config.address[s];if(g!=null){let f=Is(d,g);if(this.dependencies.every(x=>x instanceof V?d.facet(x)===c.facet(x):x instanceof Et?d.field(x,!1)==c.field(x,!1):!0)||(o?Dm(h=n(c),f,a):a(h=n(c),f)))return c.values[r]=f,0}else h=n(c);return c.values[r]=h,1}}}get extension(){return this}}function Dm(i,e,t){if(i.length!=e.length)return!1;for(let n=0;ni[l.id]),a=t.map(l=>l.type),s=n.filter(l=>!(l&1)),r=i[e.id]>>1;function o(l){let u=[];for(let m=0;mn===a),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(va).find(n=>n.field==this);return((t==null?void 0:t.create)||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:n=>(n.values[t]=this.create(n),1),update:(n,a)=>{let s=n.values[t],r=this.updateF(s,a);return this.compareF(s,r)?0:(n.values[t]=r,1)},reconfigure:(n,a)=>{let s=n.facet(va),r=a.facet(va),o;return(o=s.find(l=>l.field==this))&&o!=r.find(l=>l.field==this)?(n.values[t]=o.create(n),1):a.config.address[this.id]!=null?(n.values[t]=a.field(this),0):(n.values[t]=this.create(n),1)}}}init(e){return[this,va.of({field:this,create:e})]}get extension(){return this}}const Qn={lowest:4,low:3,default:2,high:1,highest:0};function Y1(i){return e=>new Gg(e,i)}const u1={highest:Y1(Qn.highest),high:Y1(Qn.high),default:Y1(Qn.default),low:Y1(Qn.low),lowest:Y1(Qn.lowest)};class Gg{constructor(e,t){this.inner=e,this.prec=t}get extension(){return this}}class Vi{of(e){return new Yo(this,e)}reconfigure(e){return Vi.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class Yo{constructor(e,t){this.compartment=e,this.inner=t}get extension(){return this}}class zs{constructor(e,t,n,a,s,r){for(this.base=e,this.compartments=t,this.dynamicSlots=n,this.address=a,this.staticValues=s,this.facets=r,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,n){let a=[],s=Object.create(null),r=new Map;for(let d of dW(e,t,r))d instanceof Et?a.push(d):(s[d.facet.id]||(s[d.facet.id]=[])).push(d);let o=Object.create(null),l=[],u=[];for(let d of a)o[d.id]=u.length<<1,u.push(h=>d.slot(h));let m=n==null?void 0:n.config.facets;for(let d in s){let h=s[d],g=h[0].facet,f=m&&m[d]||[];if(h.every(x=>x.type==0))if(o[g.id]=l.length<<1|1,v0(f,h))l.push(n.facet(g));else{let x=g.combine(h.map(b=>b.value));l.push(n&&g.compare(x,n.facet(g))?n.facet(g):x)}else{for(let x of h)x.type==0?(o[x.id]=l.length<<1|1,l.push(x.value)):(o[x.id]=u.length<<1,u.push(b=>x.dynamicSlot(b)));o[g.id]=u.length<<1,u.push(x=>cW(x,g,h))}}let c=u.map(d=>d(o));return new zs(e,r,c,o,l,s)}}function dW(i,e,t){let n=[[],[],[],[],[]],a=new Map;function s(r,o){let l=a.get(r);if(l!=null){if(l<=o)return;let u=n[l].indexOf(r);u>-1&&n[l].splice(u,1),r instanceof Yo&&t.delete(r.compartment)}if(a.set(r,o),Array.isArray(r))for(let u of r)s(u,o);else if(r instanceof Yo){if(t.has(r.compartment))throw new RangeError("Duplicate use of compartment in extensions");let u=e.get(r.compartment)||r.inner;t.set(r.compartment,u),s(u,o)}else if(r instanceof Gg)s(r.inner,r.prec);else if(r instanceof Et)n[o].push(r),r.provides&&s(r.provides,o);else if(r instanceof Ua)n[o].push(r),r.facet.extensions&&s(r.facet.extensions,Qn.default);else{let u=r.extension;if(!u)throw new Error(`Unrecognized extension value in extension set (${r}).`);if(u==r)throw new Error(`Unrecognized extension value in extension set (${r}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);s(u,o)}}return s(i,Qn.default),n.reduce((r,o)=>r.concat(o))}function fi(i,e){if(e&1)return 2;let t=e>>1,n=i.status[t];if(n==4)throw new Error("Cyclic dependency between fields and/or facets");if(n&2)return n;i.status[t]=4;let a=i.computeSlot(i,i.config.dynamicSlots[t]);return i.status[t]=2|a}function Is(i,e){return e&1?i.config.staticValues[e>>1]:i.values[e>>1]}const Hg=V.define(),Xo=V.define({combine:i=>i.some(e=>e),static:!0}),Vg=V.define({combine:i=>i.length?i[0]:void 0,static:!0}),qg=V.define(),Qg=V.define(),Ug=V.define(),$g=V.define({combine:i=>i.length?i[0]:!1});class Nn{constructor(e,t){this.type=e,this.value=t}static define(){return new hW}}class hW{of(e){return new Nn(this,e)}}class gW{constructor(e){this.map=e}of(e){return new de(this,e)}}class de{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new de(this.type,t)}is(e){return this.type==e}static define(e={}){return new gW(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let n=[];for(let a of e){let s=a.map(t);s&&n.push(s)}return n}}de.reconfigure=de.define();de.appendConfig=de.define();class $e{constructor(e,t,n,a,s,r){this.startState=e,this.changes=t,this.selection=n,this.effects=a,this.annotations=s,this.scrollIntoView=r,this._doc=null,this._state=null,n&&Rg(n,t.newLength),s.some(o=>o.type==$e.time)||(this.annotations=s.concat($e.time.of(Date.now())))}static create(e,t,n,a,s,r){return new $e(e,t,n,a,s,r)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation($e.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}$e.time=Nn.define();$e.userEvent=Nn.define();$e.addToHistory=Nn.define();$e.remote=Nn.define();function pW(i,e){let t=[];for(let n=0,a=0;;){let s,r;if(n=i[n]))s=i[n++],r=i[n++];else if(a=0;a--){let s=n[a](i);s instanceof $e?i=s:Array.isArray(s)&&s.length==1&&s[0]instanceof $e?i=s[0]:i=Xg(e,T1(s),!1)}return i}function xW(i){let e=i.startState,t=e.facet(Ug),n=i;for(let a=t.length-1;a>=0;a--){let s=t[a](i);s&&Object.keys(s).length&&(n=Yg(n,Ko(e,s,i.changes.newLength),!0))}return n==i?i:$e.create(e,i.changes,i.selection,n.effects,n.annotations,n.scrollIntoView)}const bW=[];function T1(i){return i==null?bW:Array.isArray(i)?i:[i]}var Mt=(function(i){return i[i.Word=0]="Word",i[i.Space=1]="Space",i[i.Other=2]="Other",i})(Mt||(Mt={}));const vW=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let el;try{el=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function yW(i){if(el)return el.test(i);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||vW.test(t)))return!0}return!1}function wW(i){return e=>{if(!/\S/.test(e))return Mt.Space;if(yW(e))return Mt.Word;for(let t=0;t-1)return Mt.Word;return Mt.Other}}class re{constructor(e,t,n,a,s,r){this.config=e,this.doc=t,this.selection=n,this.values=a,this.status=e.statusTemplate.slice(),this.computeSlot=s,r&&(r._state=this);for(let o=0;oa.set(u,l)),t=null),a.set(o.value.compartment,o.value.extension)):o.is(de.reconfigure)?(t=null,n=o.value):o.is(de.appendConfig)&&(t=null,n=T1(n).concat(o.value));let s;t?s=e.startState.values.slice():(t=zs.resolve(n,a,this),s=new re(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(l,u)=>u.reconfigure(l,this),null).values);let r=e.startState.facet(Xo)?e.newSelection:e.newSelection.asSingle();new re(t,e.newDoc,r,s,(o,l)=>l.update(o,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:M.cursor(t.from+e.length,-1)}))}changeByRange(e){let t=this.selection,n=e(t.ranges[0]),a=this.changes(n.changes),s=[n.range],r=T1(n.effects);for(let o=1;or.spec.fromJSON(o,l)))}}return re.create({doc:e.doc,selection:M.fromJSON(e.selection),extensions:t.extensions?a.concat([t.extensions]):a})}static create(e={}){let t=zs.resolve(e.extensions||[],new Map),n=e.doc instanceof oe?e.doc:oe.of((e.doc||"").split(t.staticFacet(re.lineSeparator)||qo)),a=e.selection?e.selection instanceof M?e.selection:M.single(e.selection.anchor,e.selection.head):M.single(0);return Rg(a,n.length),t.staticFacet(Xo)||(a=a.asSingle()),new re(t,n,a,t.dynamicSlots.map(()=>null),(s,r)=>r.create(s),null)}get tabSize(){return this.facet(re.tabSize)}get lineBreak(){return this.facet(re.lineSeparator)||` +`}get readOnly(){return this.facet($g)}phrase(e,...t){for(let n of this.facet(re.phrases))if(Object.prototype.hasOwnProperty.call(n,e)){e=n[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(n,a)=>{if(a=="$")return"$";let s=+(a||1);return!s||s>t.length?n:t[s-1]})),e}languageDataAt(e,t,n=-1){let a=[];for(let s of this.facet(Hg))for(let r of s(this,t,n))Object.prototype.hasOwnProperty.call(r,e)&&a.push(r[e]);return a}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return wW(t.length?t[0]:"")}wordAt(e){let{text:t,from:n,length:a}=this.doc.lineAt(e),s=this.charCategorizer(e),r=e-n,o=e-n;for(;r>0;){let l=rt(t,r,!1);if(s(t.slice(l,r))!=Mt.Word)break;r=l}for(;oi.length?i[0]:4});re.lineSeparator=Vg;re.readOnly=$g;re.phrases=V.define({compare(i,e){let t=Object.keys(i),n=Object.keys(e);return t.length==n.length&&t.every(a=>i[a]==e[a])}});re.languageData=Hg;re.changeFilter=qg;re.transactionFilter=Qg;re.transactionExtender=Ug;Vi.reconfigure=de.define();function y0(i,e,t={}){let n={};for(let a of i)for(let s of Object.keys(a)){let r=a[s],o=n[s];if(o===void 0)n[s]=r;else if(!(o===r||r===void 0))if(Object.hasOwnProperty.call(t,s))n[s]=t[s](o,r);else throw new Error("Config merge conflict for field "+s)}for(let a in e)n[a]===void 0&&(n[a]=e[a]);return n}class Bn{eq(e){return this==e}range(e,t=e){return tl.create(e,t,this)}}Bn.prototype.startSide=Bn.prototype.endSide=0;Bn.prototype.point=!1;Bn.prototype.mapMode=st.TrackDel;function w0(i,e){return i==e||i.constructor==e.constructor&&i.eq(e)}let tl=class Kg{constructor(e,t,n){this.from=e,this.to=t,this.value=n}static create(e,t,n){return new Kg(e,t,n)}};function nl(i,e){return i.from-e.from||i.value.startSide-e.value.startSide}class z0{constructor(e,t,n,a){this.from=e,this.to=t,this.value=n,this.maxPoint=a}get length(){return x1(this.to)}findIndex(e,t,n,a=0){let s=n?this.to:this.from;for(let r=a,o=s.length;;){if(r==o)return r;let l=r+o>>1,u=s[l]-e||(n?this.value[l].endSide:this.value[l].startSide)-t;if(l==r)return u>=0?r:o;u>=0?o=l:r=l+1}}between(e,t,n,a){for(let s=this.findIndex(t,-1e9,!0),r=this.findIndex(n,1e9,!1,s);sx||f==x&&d.startSide>0&&d.endSide<=0)continue;if(!((x-f||d.endSide-d.startSide)<0))if(u<0&&(u=f),d.point&&(m=Math.max(m,x-f)),(f-n||d.startSide-a)>=0)r.push(d),o.push(f-u),l.push(x-u),n=x,a=d.endSide;else{if(f==x)for(let b=r.length;b>0;b--){if((f-(l[b-1]+u)||d.startSide-r[b-1].endSide)>=0){r.splice(b,0,d),o.splice(b,0,f-u),l.splice(b,0,x-u);continue e}if((f-(o[b-1]+u)||d.endSide-r[b-1].startSide)>0)break}s(f,x,d)}}return{mapped:r.length?new z0(o,l,r,m):null,pos:u}}}class ie{constructor(e,t,n,a){this.chunkPos=e,this.chunk=t,this.nextLayer=n,this.maxPoint=a}static create(e,t,n,a){return new ie(e,t,n,a)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:n=!1,filterFrom:a=0,filterTo:s=this.length}=e,r=e.filter;if(t.length==0&&!r)return this;if(n&&(t=t.slice().sort(nl)),this.isEmpty)return t.length?ie.of(t):this;let o=new ep(this,null,-1).goto(0),l=0,u=[],m=new i1;for(;o.value||l=0){let c=t[l++];m.addInner(c.from,c.to,c.value,!1)||u.push(c)}else o.rangeIndex==1&&o.chunkIndexthis.chunkEnd(o.chunkIndex)||so.to||s{s||(s=new i1),s.addRange(l,u,m,!1)};for(let l=0;l=s&&e<=s+r.length&&r.between(s,e-s,t-s,n)===!1)return}this.nextLayer.between(e,t,n)}}iter(e=0){return Pi.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return Pi.from(e).goto(t)}static compare(e,t,n,a,s=-1){let r=e.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),o=t.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),l=Mm(r,o,n),u=new X1(r,l,s),m=new X1(o,l,s);n.iterGaps((c,d,h)=>Bm(u,c,m,d,h,a)),n.empty&&n.length==0&&Bm(u,0,m,0,0,a)}static eq(e,t,n=0,a){a==null&&(a=999999999);let s=e.filter(m=>!m.isEmpty&&t.indexOf(m)<0),r=t.filter(m=>!m.isEmpty&&e.indexOf(m)<0);if(s.length!=r.length)return!1;if(!s.length)return!0;let o=Mm(s,r),l=new X1(s,o,0).goto(n),u=new X1(r,o,0).goto(n);for(;;){if(l.to!=u.to||!il(l.active,u.active)||l.point&&(!u.point||!w0(l.point,u.point)))return!1;if(l.to>a)return!0;l.next(),u.next()}}static spans(e,t,n,a,s=-1){let r=new X1(e,null,s).goto(t),o=t,l=r.openStart;for(;;){let u=Math.min(r.to,n);if(r.point){let m=r.activeForPoint(r.to),c=r.pointFromo&&(a.span(o,u,r.active,l),l=r.openEnd(u));if(r.to>n)return l+(r.point&&r.to>n?1:0);o=r.to,r.next()}}static of(e,t=!1){let n=new i1;for(let a of e instanceof tl?[e]:t?zW(e):e)n.add(a.from,a.to,a.value);return n.finish()}static join(e){if(!e.length)return ie.empty;let t=x1(e);for(let n=e.length-2;n>=0;n--)for(let a=e[n];a!=ie.empty;a=a.nextLayer)t=new ie(a.chunkPos,a.chunk,t,Math.max(a.maxPoint,t.maxPoint));return t}}ie.empty=new ie([],[],null,-1);function x1(i){return i[i.length-1]}function zW(i){if(i.length>1)for(let e=i[0],t=1;t0)return i.slice().sort(nl);e=n}return i}ie.empty.nextLayer=ie.empty;class i1{finishChunk(e){this.chunks.push(new z0(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,n){this.addRange(e,t,n,!0)}addRange(e,t,n,a){this.addInner(e,t,n,a)||(this.nextLayer||(this.nextLayer=new i1)).addRange(e,t,n,a)}addInner(e,t,n,a){let s=e-this.lastTo||n.startSide-this.last.endSide;if(a&&s<=0&&(e-this.lastFrom||n.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=n,this.lastFrom=e,this.lastTo=t,this.value.push(n),n.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let n=t.value.length-1;return this.last=t.value[n],this.lastFrom=t.from[n]+e,this.lastTo=t.to[n]+e,!0}finish(){return this.finishInner(ie.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=ie.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function Mm(i,e,t){let n=new Map;for(let s of i)for(let r=0;r=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=n&&a.push(new ep(r,t,n,s));return a.length==1?a[0]:new Pi(a)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let n of this.heap)n.goto(e,t);for(let n=this.heap.length>>1;n>=0;n--)Mr(this.heap,n);return this.next(),this}forward(e,t){for(let n of this.heap)n.forward(e,t);for(let n=this.heap.length>>1;n>=0;n--)Mr(this.heap,n);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Mr(this.heap,0)}}}function Mr(i,e){for(let t=i[e];;){let n=(e<<1)+1;if(n>=i.length)break;let a=i[n];if(n+1=0&&(a=i[n+1],n++),t.compare(a)<0)break;i[n]=t,i[e]=a,e=n}}class X1{constructor(e,t,n){this.minPoint=n,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Pi.from(e,t,n)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){ya(this.active,e),ya(this.activeTo,e),ya(this.activeRank,e),this.minActive=Zm(this.active,this.activeTo)}addActive(e){let t=0,{value:n,to:a,rank:s}=this.cursor;for(;t0;)t++;wa(this.active,t,n),wa(this.activeTo,t,a),wa(this.activeRank,t,s),e&&wa(e,t,this.cursor.from),this.minActive=Zm(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let n=this.openStart<0?[]:null;for(;;){let a=this.minActive;if(a>-1&&(this.activeTo[a]-this.cursor.from||this.active[a].endSide-this.cursor.startSide)<0){if(this.activeTo[a]>e){this.to=this.activeTo[a],this.endSide=this.active[a].endSide;break}this.removeActive(a),n&&ya(n,a)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let s=this.cursor.value;if(!s.point)this.addActive(n),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&n[a]=0&&!(this.activeRank[n]e||this.activeTo[n]==e&&this.active[n].endSide>=this.point.endSide)&&t.push(this.active[n]);return t.reverse()}openEnd(e){let t=0;for(let n=this.activeTo.length-1;n>=0&&this.activeTo[n]>e;n--)t++;return t}}function Bm(i,e,t,n,a,s){i.goto(e),t.goto(n);let r=n+a,o=n,l=n-e,u=!!s.boundChange;for(let m=!1;;){let c=i.to+l-t.to,d=c||i.endSide-t.endSide,h=d<0?i.to+l:t.to,g=Math.min(h,r);if(i.point||t.point?(i.point&&t.point&&w0(i.point,t.point)&&il(i.activeForPoint(i.to),t.activeForPoint(t.to))||s.comparePoint(o,g,i.point,t.point),m=!1):(m&&(s.boundChange(o),m=!1),g>o&&!il(i.active,t.active)&&s.compareRange(o,g,i.active,t.active),u&&gr)break;o=h,d<=0&&i.next(),d>=0&&t.next()}}function il(i,e){if(i.length!=e.length)return!1;for(let t=0;t=e;n--)i[n+1]=i[n];i[e]=t}function Zm(i,e){let t=-1,n=1e9;for(let a=0;a=e)return a;if(a==i.length)break;s+=i.charCodeAt(a)==9?t-s%t:1,a=rt(i,a)}return i.length}const al="ͼ",Lm=typeof Symbol>"u"?"__"+al:Symbol.for(al),sl=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Wm=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class Zn{constructor(e,t){this.rules=[];let{finish:n}=t||{};function a(r){return/^@/.test(r)?[r]:r.split(/,\s*/)}function s(r,o,l,u){let m=[],c=/^@(\w+)\b/.exec(r[0]),d=c&&c[1]=="keyframes";if(c&&o==null)return l.push(r[0]+";");for(let h in o){let g=o[h];if(/&/.test(h))s(h.split(/,\s*/).map(f=>r.map(x=>f.replace(/&/,x))).reduce((f,x)=>f.concat(x)),g,l);else if(g&&typeof g=="object"){if(!c)throw new RangeError("The value of a property ("+h+") should be a primitive value.");s(a(h),g,m,d)}else g!=null&&m.push(h.replace(/_.*/,"").replace(/[A-Z]/g,f=>"-"+f.toLowerCase())+": "+g+";")}(m.length||d)&&l.push((n&&!c&&!u?r.map(n):r).join(", ")+" {"+m.join(" ")+"}")}for(let r in e)s(a(r),e[r],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=Wm[Lm]||1;return Wm[Lm]=e+1,al+e.toString(36)}static mount(e,t,n){let a=e[sl],s=n&&n.nonce;a?s&&a.setNonce(s):a=new kW(e,s),a.mount(Array.isArray(t)?t:[t],e)}}let Em=new Map;class kW{constructor(e,t){let n=e.ownerDocument||e,a=n.defaultView;if(!e.head&&e.adoptedStyleSheets&&a.CSSStyleSheet){let s=Em.get(n);if(s)return e[sl]=s;this.sheet=new a.CSSStyleSheet,Em.set(n,this)}else this.styleTag=n.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[sl]=this}mount(e,t){let n=this.sheet,a=0,s=0,r=!1;for(let o=0;o-1&&(this.modules.splice(u,1),r=!0,s--,u=-1),u==-1){if(this.modules.splice(s++,0,l),r=!0,n)for(let m=0;m",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},SW=typeof navigator<"u"&&/Mac/.test(navigator.platform),TW=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(var Ue=0;Ue<10;Ue++)Ln[48+Ue]=Ln[96+Ue]=String(Ue);for(var Ue=1;Ue<=24;Ue++)Ln[Ue+111]="F"+Ue;for(var Ue=65;Ue<=90;Ue++)Ln[Ue]=String.fromCharCode(Ue+32),Oi[Ue]=String.fromCharCode(Ue);for(var Br in Ln)Oi.hasOwnProperty(Br)||(Oi[Br]=Ln[Br]);function _W(i){var e=SW&&i.metaKey&&i.shiftKey&&!i.ctrlKey&&!i.altKey||TW&&i.shiftKey&&i.key&&i.key.length==1||i.key=="Unidentified",t=!e&&i.key||(i.shiftKey?Oi:Ln)[i.keyCode]||i.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}let ut=typeof navigator<"u"?navigator:{userAgent:"",vendor:"",platform:""},rl=typeof document<"u"?document:{documentElement:{style:{}}};const ol=/Edge\/(\d+)/.exec(ut.userAgent),tp=/MSIE \d/.test(ut.userAgent),ll=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(ut.userAgent),ar=!!(tp||ll||ol),Nm=!ar&&/gecko\/(\d+)/i.test(ut.userAgent),Zr=!ar&&/Chrome\/(\d+)/.exec(ut.userAgent),Fm="webkitFontSmoothing"in rl.documentElement.style,ul=!ar&&/Apple Computer/.test(ut.vendor),Jm=ul&&(/Mobile\/\w+/.test(ut.userAgent)||ut.maxTouchPoints>2);var G={mac:Jm||/Mac/.test(ut.platform),windows:/Win/.test(ut.platform),linux:/Linux|X11/.test(ut.platform),ie:ar,ie_version:tp?rl.documentMode||6:ll?+ll[1]:ol?+ol[1]:0,gecko:Nm,gecko_version:Nm?+(/Firefox\/(\d+)/.exec(ut.userAgent)||[0,0])[1]:0,chrome:!!Zr,chrome_version:Zr?+Zr[1]:0,ios:Jm,android:/Android\b/.test(ut.userAgent),webkit:Fm,webkit_version:Fm?+(/\bAppleWebKit\/(\d+)/.exec(ut.userAgent)||[0,0])[1]:0,safari:ul,safari_version:ul?+(/\bVersion\/(\d+(\.\d+)?)/.exec(ut.userAgent)||[0,0])[1]:0,tabSize:rl.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function I0(i,e){for(let t in i)t=="class"&&e.class?e.class+=" "+i.class:t=="style"&&e.style?e.style+=";"+i.style:e[t]=i[t];return e}const ks=Object.create(null);function k0(i,e,t){if(i==e)return!0;i||(i=ks),e||(e=ks);let n=Object.keys(i),a=Object.keys(e);if(n.length-0!=a.length-0)return!1;for(let s of n)if(s!=t&&(a.indexOf(s)==-1||i[s]!==e[s]))return!1;return!0}function jW(i,e){for(let t=i.attributes.length-1;t>=0;t--){let n=i.attributes[t].name;e[n]==null&&i.removeAttribute(n)}for(let t in e){let n=e[t];t=="style"?i.style.cssText=n:i.getAttribute(t)!=n&&i.setAttribute(t,n)}}function Rm(i,e,t){let n=!1;if(e)for(let a in e)t&&a in t||(n=!0,a=="style"?i.style.cssText="":i.removeAttribute(a));if(t)for(let a in t)e&&e[a]==t[a]||(n=!0,a=="style"?i.style.cssText=t[a]:i.setAttribute(a,t[a]));return n}function CW(i){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new o1(e,t,t,n,e.widget||null,!1)}static replace(e){let t=!!e.block,n,a;if(e.isBlockGap)n=-5e8,a=4e8;else{let{start:s,end:r}=np(e,t);n=(s?t?-3e8:-1:5e8)-1,a=(r?t?2e8:1:-6e8)+1}return new o1(e,n,a,t,e.widget||null,!0)}static line(e){return new Ui(e)}static set(e,t=!1){return ie.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}he.none=ie.empty;class Qi extends he{constructor(e){let{start:t,end:n}=np(e);super(t?-1:5e8,n?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?I0(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||ks}eq(e){return this==e||e instanceof Qi&&this.tagName==e.tagName&&k0(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}Qi.prototype.point=!1;class Ui extends he{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof Ui&&this.spec.class==e.spec.class&&k0(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}Ui.prototype.mapMode=st.TrackBefore;Ui.prototype.point=!0;class o1 extends he{constructor(e,t,n,a,s,r){super(t,n,s,e),this.block=a,this.isReplace=r,this.mapMode=a?t<=0?st.TrackBefore:st.TrackAfter:st.TrackDel}get type(){return this.startSide!=this.endSide?Ye.WidgetRange:this.startSide<=0?Ye.WidgetBefore:Ye.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof o1&&AW(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}o1.prototype.point=!0;function np(i,e=!1){let{inclusiveStart:t,inclusiveEnd:n}=i;return t==null&&(t=i.inclusive),n==null&&(n=i.inclusive),{start:t??e,end:n??e}}function AW(i,e){return i==e||!!(i&&e&&i.compare(e))}function _1(i,e,t,n=0){let a=t.length-1;a>=0&&t[a]+n>=i?t[a]=Math.max(t[a],e):t.push(i,e)}class Di extends Bn{constructor(e,t,n){super(),this.tagName=e,this.attributes=t,this.rank=n}eq(e){return e==this||e instanceof Di&&this.tagName==e.tagName&&k0(this.attributes,e.attributes)}static create(e){return new Di(e.tagName,e.attributes||ks,e.rank==null?50:Math.max(0,Math.min(e.rank,100)))}static set(e,t=!1){return ie.of(e,t)}}Di.prototype.startSide=Di.prototype.endSide=-1;const He=i=>i.nodeType==1,D1=i=>i.nodeType==3;function Mi(i){let e;return i.nodeType==11?e=i.getSelection?i:i.ownerDocument:e=i,e.getSelection()}function ml(i,e){return e?i==e||i.contains(e.nodeType!=1?e.parentNode:e):!1}function xi(i,e){if(!e.anchorNode)return!1;try{return ml(i,e.anchorNode)}catch{return!1}}function $a(i){return D1(i)?Bi(i,0,i.nodeValue.length).getClientRects():He(i)?i.getClientRects():[]}function bi(i,e,t,n){return t?Gm(i,e,t,n,-1)||Gm(i,e,t,n,1):!1}function Wn(i){for(var e=0;;e++)if(i=i.previousSibling,!i)return e}function Ss(i){return He(i)&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(i.nodeName)}function Gm(i,e,t,n,a){for(;;){if(i==t&&e==n)return!0;if(e==(a<0?0:vn(i))){if(i.nodeName=="DIV")return!1;let s=i.parentNode;if(!s||!He(s))return!1;e=Wn(i)+(a<0?0:1),i=s}else if(He(i)){if(i=i.childNodes[e+(a<0?-1:0)],He(i)&&(i.nodeName=="IMG"||i.nodeName=="BR"||i.contentEditable=="false"))return!1;e=a<0?vn(i):0}else return!1}}function vn(i){return D1(i)?i.nodeValue.length:i.childNodes.length}function Ts(i,e){let{left:t,right:n}=i;if(t==n)return i;let a=e?t:n;return{left:a,right:a,top:i.top,bottom:i.bottom}}function PW(i){let e=i.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:i.innerWidth,top:0,bottom:i.innerHeight}}function ip(i,e){let t=e.width/i.offsetWidth,n=e.height/i.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-i.offsetWidth)<1)&&(t=1),(n>.995&&n<1.005||!isFinite(n)||Math.abs(e.height-i.offsetHeight)<1)&&(n=1),{scaleX:t,scaleY:n}}function OW(i,e,t,n,a,s,r,o){let l=i.ownerDocument,u=l.defaultView||window;for(let m=i,c=!1;m&&!c;)if(He(m)){let d,h=m==l.body,g=1,f=1,x=!0,b=!0;if(h)d=PW(u);else{let z=getComputedStyle(m);if(/^(fixed|sticky)$/.test(z.position)&&(c=!0),(m.scrollHeight<=m.clientHeight||!/auto|scroll/.test(z.overflowY))&&(b=!1),(m.scrollWidth<=m.clientWidth||!/auto|scroll/.test(z.overflowX))&&(x=!1),!x&&!b){m=m.assignedSlot||m.parentNode;continue}let I=m.getBoundingClientRect();({scaleX:g,scaleY:f}=ip(m,I)),d={left:I.left,right:I.left+m.clientWidth*g,top:I.top,bottom:I.top+m.clientHeight*f}}let v=0,w=0;if(b)if(a=="nearest")e.top0&&e.bottom>d.bottom+w&&(w=e.bottom-d.bottom+r)):e.bottom>d.bottom-r&&(w=e.bottom-d.bottom+r,t<0&&e.top-w0&&e.right>d.right+v&&(v=e.right-d.right+s)):e.right>d.right-s&&(v=e.right-d.right+s,t<0&&e.leftd.bottom||e.leftd.right)&&(e={left:Math.max(e.left,d.left),right:Math.min(e.right,d.right),top:Math.max(e.top,d.top),bottom:Math.min(e.bottom,d.bottom)}),m=m.assignedSlot||m.parentNode}else if(m.nodeType==11)m=m.host;else break}function ap(i,e=!0){let t=i.ownerDocument,n=null,a=null;for(let s=i.parentNode;s&&!(s==t.body||(!e||n)&&a);)if(He(s))!a&&s.scrollHeight>s.clientHeight&&/scroll|auto/.test(getComputedStyle(s).overflowY)&&(a=s),e&&!n&&s.scrollWidth>s.clientWidth&&/scroll|auto/.test(getComputedStyle(s).overflowX)&&(n=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:n,y:a}}class DW{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:n}=e;this.set(t,Math.min(e.anchorOffset,t?vn(t):0),n,Math.min(e.focusOffset,n?vn(n):0))}set(e,t,n,a){this.anchorNode=e,this.anchorOffset=t,this.focusNode=n,this.focusOffset=a}}function sp(i){let e=[];for(let t=i;t;t=t.nodeType==11?t.host:t.parentNode)He(t)&&e.push({node:t,left:t.scrollLeft,top:t.scrollTop});return e}function rp(i,e=!0){for(let{node:t,left:n,top:a}of i)e&&t.scrollTop!=a&&(t.scrollTop=a),t.scrollLeft!=n&&(t.scrollLeft=n)}let qn=null;G.safari&&G.safari_version>=26&&(qn=!1);function op(i){if(i.setActive)return i.setActive();if(qn)return i.focus(qn);let e=sp(i);i.focus(qn==null?{get preventScroll(){return qn={preventScroll:!0},!0}}:void 0),qn||(qn=!1,rp(e))}let Hm;function Bi(i,e,t=e){let n=Hm||(Hm=document.createRange());return n.setEnd(i,t),n.setStart(i,e),n}function j1(i,e,t,n){let a={key:e,code:e,keyCode:t,which:t,cancelable:!0};n&&({altKey:a.altKey,ctrlKey:a.ctrlKey,shiftKey:a.shiftKey,metaKey:a.metaKey}=n);let s=new KeyboardEvent("keydown",a);s.synthetic=!0,i.dispatchEvent(s);let r=new KeyboardEvent("keyup",a);return r.synthetic=!0,i.dispatchEvent(r),s.defaultPrevented||r.defaultPrevented}function MW(i){for(;i;){if(i&&(i.nodeType==9||i.nodeType==11&&i.host))return i;i=i.assignedSlot||i.parentNode}return null}function BW(i,e){let t=e.focusNode,n=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=n)return!1;for(n=Math.min(n,vn(t));;)if(n){if(!He(t))return!1;let a=t.childNodes[n-1];a.contentEditable=="false"?n--:(t=a,n=vn(t))}else{if(t==i)return!0;n=Wn(t),t=t.parentNode}}function lp(i){return i instanceof Window?i.pageYOffset>Math.max(0,i.document.documentElement.scrollHeight-i.innerHeight-4):i.scrollTop>Math.max(1,i.scrollHeight-i.clientHeight-4)}function up(i,e){for(let t=i,n=e;;){if(D1(t)&&n>0)return{node:t,offset:n};if(He(t)&&n>0){if(t.contentEditable=="false")return null;t=t.childNodes[n-1],n=vn(t)}else if(t.parentNode&&!Ss(t))n=Wn(t),t=t.parentNode;else return null}}function mp(i,e){for(let t=i,n=e;;){if(D1(t)&&n=t){if(o.level==n)return r;(s<0||(a!=0?a<0?o.fromt:e[s].level>o.level))&&(s=r)}}if(s<0)throw new RangeError("Index out of range");return s}}function hp(i,e){if(i.length!=e.length)return!1;for(let t=0;t=0;f-=3)if(Yt[f+1]==-h){let x=Yt[f+2],b=x&2?a:x&4?x&1?s:a:0;b&&(be[c]=be[Yt[f]]=b),o=f;break}}else{if(Yt.length==189)break;Yt[o++]=c,Yt[o++]=d,Yt[o++]=l}else if((g=be[c])==2||g==1){let f=g==a;l=f?0:1;for(let x=o-3;x>=0;x-=3){let b=Yt[x+2];if(b&2)break;if(f)Yt[x+2]|=2;else{if(b&4)break;Yt[x+2]|=4}}}}}function FW(i,e,t,n){for(let a=0,s=n;a<=t.length;a++){let r=a?t[a-1].to:i,o=al;)g==x&&(g=t[--f].from,x=f?t[f-1].to:i),be[--g]=h;l=m}else s=u,l++}}}function dl(i,e,t,n,a,s,r){let o=n%2?2:1;if(n%2==a%2)for(let l=e,u=0;ll&&r.push(new rn(l,f.from,h));let x=f.direction==M1!=!(h%2);hl(i,x?n+1:n,a,f.inner,f.from,f.to,r),l=f.to}g=f.to}else{if(g==t||(m?be[g]!=o:be[g]==o))break;g++}d?dl(i,l,g,n+1,a,d,r):le;){let m=!0,c=!1;if(!u||l>s[u-1].to){let f=be[l-1];f!=o&&(m=!1,c=f==16)}let d=!m&&o==1?[]:null,h=m?n:n+1,g=l;e:for(;;)if(u&&g==s[u-1].to){if(c)break e;let f=s[--u];if(!m)for(let x=f.from,b=u;;){if(x==e)break e;if(b&&s[b-1].to==x)x=s[--b].from;else{if(be[x-1]==o)break e;break}}if(d)d.push(f);else{f.tobe.length;)be[be.length]=256;let n=[],a=e==M1?0:1;return hl(i,a,a,t,0,i.length,n),n}function gp(i){return[new rn(0,i,0)]}let pp="";function RW(i,e,t,n,a){var s;if(!i.length)return null;let r=n.head-i.from,o;if(n.head==i.from&&n.assoc<0){if(!a)return null;r=e[o=0].side(!1,t)}else if(n.head==i.to&&n.assoc>0){if(a)return null;r=e[o=e.length-1].side(!0,t)}else o=rn.find(e,r,(s=n.bidiLevel)!==null&&s!==void 0?s:-1,n.assoc);let l=e[o],u=l.side(a,t);if(r==u){let d=o+=a?1:-1;if(d<0||d>=e.length)return null;l=e[o=d],r=l.side(!a,t),u=l.side(a,t)}let m=rt(i.text,r,l.forward(a,t));(ml.to)&&(m=u),pp=i.text.slice(Math.min(r,m),Math.max(r,m));let c=o==(a?e.length-1:0)?null:e[o+(a?1:-1)];if(m==u){if(!c)return a?M.cursor(i.to,1):M.cursor(i.from,-1);if(c.level+(a?0:1)i.some(e=>e)}),HW=V.define({combine:i=>i.some(e=>e)}),Ip=V.define();class C1{constructor(e,t,n,a,s,r=!1){this.range=e,this.y=t,this.x=n,this.yMargin=a,this.xMargin=s,this.isSnapshot=r}map(e){return e.empty?this:new C1(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new C1(M.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const za=de.define({map:(i,e)=>i.map(e)}),kp=de.define();function zt(i,e,t){let n=i.facet(vp);n.length?n[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}const gn=V.define({combine:i=>i.length?i[0]:!0});let VW=0;const w1=V.define({combine(i){return i.filter((e,t)=>{for(let n=0;n{let l=[];return r&&l.push(sr.of(u=>{let m=u.plugin(o);return m?r(m):he.none})),s&&l.push(s(o)),l})}static fromClass(e,t){return Wt.define((n,a)=>new e(n,a),t)}}class Lr{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(n){if(zt(t.state,n,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){zt(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(n){zt(e.state,n,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const Sp=V.define(),j0=V.define(),sr=V.define(),Tp=V.define(),C0=V.define(),$i=V.define(),_p=V.define();function Vm(i,e){let t=i.state.facet(_p);if(!t.length)return t;let n=t.map(s=>s instanceof Function?s(i):s),a=[];return ie.spans(n,e.from,e.to,{point(){},span(s,r,o,l){let u=s-e.from,m=r-e.from,c=a;for(let d=o.length-1;d>=0;d--,l--){let h=o[d].spec.bidiIsolate,g;if(l>0&&c.length&&(g=c[c.length-1]).to==u&&g.direction==h)g.to=m,c=g.inner;else{let f={from:u,to:m,direction:h,inner:[]};c.push(f),c=f.inner}}}}),jp(e.text,a)}function jp(i,e){for(let t of e){if(t.direction==null){for(let n=t.from,a=0;n0;t--){let a=e[t-1];if(!(a.fromA>n.toA)){if(a.toAa.push(new Bt(s,r,o,l))),this.changedRanges=a}static create(e,t,n){return new _s(e,t,n)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}const qW=[];class Ae{constructor(e,t,n=0){this.dom=e,this.length=t,this.flags=n,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return qW}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&jW(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let n=t;for(let a of this.children){if(a==e)return n;n+=a.length+a.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t,n){return null}domPosFor(e,t){let n=Wn(this.dom),a=this.length?e>0:t>0;return new Gt(this.parent.dom,n+(a?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof or)return e;return null}static get(e){return e.cmTile}}class rr extends Ae{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,n=null,a,s=(e==null?void 0:e.node)==t?e:null,r=0;for(let o of this.children){if(o.sync(e),r+=o.length+o.breakAfter,a=n?n.nextSibling:t.firstChild,s&&a!=o.dom&&(s.written=!0),o.dom.parentNode==t)for(;a&&a!=o.dom;)a=qm(a);else t.insertBefore(o.dom,a);n=o.dom}for(a=n?n.nextSibling:t.firstChild,s&&a&&(s.written=!0);a;)a=qm(a);this.length=r}}function qm(i){let e=i.nextSibling;return i.parentNode.removeChild(i),e}class or extends rr{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=Ae.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],n=this,a=0,s=0;;)if(a==n.children.length){if(!t.length)return;n=n.parent,n.breakAfter&&s++,a=t.pop()}else{let r=n.children[a++];if(r instanceof fn)t.push(a),n=r,a=0;else{let o=s+r.length,l=e(r,s);if(l!==void 0)return l;s=o+r.breakAfter}}}resolveBlock(e,t){let n,a=-1,s,r=-1;if(this.blockTiles((o,l)=>{let u=l+o.length;if(e>=l&&e<=u){if(o.isWidget()&&t>=-1&&t<=1){if(o.flags&32)return!0;o.flags&16&&(n=void 0)}(le||e==l&&(t>1?o.length:o.covers(-1)))&&(!s||!o.isWidget()&&s.isWidget())&&(s=o,r=e-l)}}),!n&&!s)throw new Error("No tile at position "+e);return n&&t<0||!s?{tile:n,offset:a}:{tile:s,offset:r}}}class fn extends rr{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let n=new fn(t||document.createElement(e.tagName),e);return t||(n.flags|=4),n}}class B1 extends rr{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,n){let a=new B1(t||document.createElement("div"),e);return(!t||!n)&&(a.flags|=4),a}get domAttrs(){return this.attrs}resolveInline(e,t,n=!1){let a=null,s=-1,r=null,o=-1;function l(m,c){for(let d=0,h=0;d=c&&(g.isComposite()?l(g,c-h):(!r||n&&r.isHidden&&(t>0&&!(r.flags&32)||n&&UW(r,g)))&&(f>c||g.flags&32&&t<=1)?(r=g,o=c-h):(h=-1)&&(a=g,s=c-h)),h=f}}l(this,e);let u=(t<0?a:r)||a||r;return u?{tile:u,offset:u==a?s:o}:null}coordsIn(e,t,n){let a=this.resolveInline(e,t,!0);return a?a.tile.coordsIn(Math.max(0,a.offset),t,n):QW(this)}domIn(e,t){let n=this.resolveInline(e,t);if(n){let{tile:a,offset:s}=n;if(this.dom.contains(a.dom))return a.isText()?new Gt(a.dom,Math.min(a.dom.nodeValue.length,s)):a.domPosFor(s,a.flags&16?1:a.flags&32?-1:t);let r=n.tile.parent,o=!1;for(let l of r.children){if(o)return new Gt(l.dom,0);l==n.tile&&(o=!0)}}return new Gt(this.dom,0)}}function QW(i){let e=i.dom.lastChild;if(!e)return i.dom.getBoundingClientRect();let t=$a(e);return t[t.length-1]||null}function UW(i,e){let t=i.coordsIn(0,1),n=e.coordsIn(0,1);return t&&n&&n.topa&&(e=a);let s=e,r=e,o=0;e==0&&t<0||e==a&&t>=0?G.chrome||G.gecko||(e?(s--,o=1):r=0)?0:l.length-1];return G.safari&&!o&&u.width==0&&(u=Array.prototype.find.call(l,m=>m.width)||u),n==null?u:Ts(u,(o?o>0:t<0)==n)}static of(e,t){let n=new Yn(t||document.createTextNode(e),e);return t||(n.flags|=2),n}}class l1 extends Ae{constructor(e,t,n,a){super(e,t,a),this.widget=n}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,n){let a=this.widget.coordsAt(this.dom,e,t);if(a)return a;if(n)return Ts(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let s=this.dom.getClientRects(),r=null;if(!s.length)return null;let o=this.flags&16?!0:this.flags&32?!1:e>0;for(let l=o?s.length-1:0;r=s[l],!(e>0?l==0:l==s.length-1||r.top0==n)}}class $W{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,t,n){let{tile:a,index:s,beforeBreak:r,parents:o}=this;for(;e||t>0;)if(a.isComposite())if(r){if(!e)break;n&&n.break(),e--,r=!1}else if(s==a.children.length){if(!e&&!o.length)break;n&&n.leave(a),r=!!a.breakAfter,{tile:a,index:s}=o.pop(),s++}else{let l=a.children[s],u=l.breakAfter;(t>0?l.length<=e:l.length=0;o--){let l=t.marks[o],u=a.lastChild;if(u instanceof pt&&u.mark.eq(l.mark))u.dom!=l.dom&&u.setDOM(Wr(l.dom)),a=u;else{let{dom:m}=l;this.cache.reused.get(l)&&Ae.get(l.dom)&&(m=Wr(l.dom));let c=pt.of(l.mark,m);a.append(c),a=c}this.cache.reused.set(l,2)}let s=Ae.get(e.text);s&&this.cache.reused.set(s,2);let r=new Yn(e.text,e.text.nodeValue);r.flags|=8,this.pos=e.range.toB,a.append(r)}addInlineWidget(e,t,n){let a=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);a||this.flushBuffer();let s=this.ensureMarks(t,n);!a&&!(e.flags&16)&&s.append(this.getBuffer(1)),s.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,n){this.flushBuffer(),this.ensureMarks(t,n).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var n;e||(e=Ap);let a=B1.start(e,t||((n=this.cache.find(B1))===null||n===void 0?void 0:n.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=a)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var n;let a=this.curLine;for(let s=e.length-1;s>=0;s--){let r=e[s],o;if(t>0&&(o=a.lastChild)&&o instanceof pt&&o.mark.eq(r))a=o,t--;else{let l=pt.of(r,(n=this.cache.find(pt,u=>u.mark.eq(r)))===null||n===void 0?void 0:n.dom);a.append(l),a=l,t=0}}return a}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!Qm(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(G.ios&&Qm(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(Er,0,32)||new l1(Er.toDOM(),0,Er,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=e.rank*102+e.value.rank,n=new YW(e.from,e.to,e.value,t),a=this.wrappers.length;for(;a>0&&(this.wrappers[a-1].rank-n.rank||this.wrappers[a-1].to-n.to)<0;)a--;this.wrappers.splice(a,0,n)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let n of this.wrappers){let a=t.lastChild;if(n.fromr.wrapper.eq(n.wrapper)))===null||e===void 0?void 0:e.dom);t.append(s),t=s}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),n=this.cache.find(js,void 0,1);return n&&(n.flags=t),n||new js(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}}class KW{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:a,lineBreak:s,done:r}=this.cursor.next(this.skipCount);if(this.skipCount=0,r)throw new Error("Ran out of text content when drawing inline views");this.text=a;let o=this.textOff=Math.min(e,a.length);return s?null:a.slice(0,o)}let t=Math.min(this.text.length,this.textOff+e),n=this.text.slice(this.textOff,t);return this.textOff=t,n}}const Cs=[l1,B1,Yn,pt,js,fn,or];for(let i=0;i[]),this.index=Cs.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,n=this.buckets[t];n.length<6?n.push(e):n[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,n=2){let a=e.bucket,s=this.buckets[a],r=this.index[a];for(let o=0;o{if(this.cache.add(r),r.isComposite())return!1},enter:r=>this.cache.add(r),leave:()=>{},break:()=>{}}}run(e,t){let n=t&&this.getCompositionContext(t.text);for(let a=0,s=0,r=0;;){let o=ra){let u=l-a;this.preserve(u,!r,!o),a=l,s+=u}if(!o)break;t&&o.fromA<=t.range.fromA&&o.toA>=t.range.toA?(this.forward(o.fromA,t.range.fromA,t.range.fromA{if(r.isWidget())if(this.openWidget)this.builder.continueWidget(l-o);else{let u=l>0||o{r.isLine()?this.builder.addLineStart(r.attrs,this.cache.maybeReuse(r)):(this.cache.add(r),r instanceof pt&&a.unshift(r.mark)),this.openWidget=!1},leave:r=>{r.isLine()?a.length&&(a.length=s=0):r instanceof pt&&(a.shift(),s=Math.min(s,a.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let n=null,a=this.builder,s=-1,r=ie.spans(this.decorations,e,t,{point:(o,l,u,m,c,d)=>{if(u instanceof o1){if(this.disallowBlockEffectsFor[d]){if(u.block)throw new RangeError("Block decorations may not be specified via plugins");if(l>this.view.state.doc.lineAt(o).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(s=m.length,c>m.length)a.continueWidget(l-o);else{let h=u.widget||(u.block?Z1.block:Z1.inline),g=nE(u),f=this.cache.findWidget(h,l-o,g)||l1.of(h,this.view,l-o,g);u.block?(u.startSide>0&&a.addLineStartIfNotCovered(n),a.addBlockWidget(f)):(a.ensureLine(n),a.addInlineWidget(f,m,c))}n=null}else n=iE(n,u);l>o&&this.text.skip(l-o)},span:(o,l,u,m)=>{for(let c=o;c-1&&(this.openWidget=r>s),this.openWidget||a.addLineStartIfNotCovered(n),this.openMarks=r}forward(e,t,n=1){t-e<=10?this.old.advance(t-e,n,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,n,this.reuseWalker))}getCompositionContext(e){let t=[],n=null;for(let a=e.parentNode;;a=a.parentNode){let s=Ae.get(a);if(a==this.view.contentDOM)break;s instanceof pt?t.push(s):s!=null&&s.isLine()?n=s:s instanceof fn||(a.nodeName=="DIV"&&!n?n=new B1(a,Ap):n||t.push(pt.of(new Qi({tagName:a.nodeName.toLowerCase(),attributes:CW(a)}),a)))}return n?{line:n,marks:t}:null}}function Qm(i,e){let t=n=>{for(let a of n.children)if((e?a.isText():a.length)||t(a))return!0;return!1};return t(i)}function nE(i){let e=i.isReplace?(i.startSide<0?64:0)|(i.endSide>0?128:0):i.startSide>0?32:16;return i.block&&(e|=256),e}const Ap={class:"cm-line"};function iE(i,e){let t=e.spec.attributes,n=e.spec.class;return!t&&!n||(i||(i={class:"cm-line"}),t&&I0(t,i),n&&(i.class+=" "+n)),i}function aE(i){let e=[];for(let t=i.parents.length;t>1;t--){let n=t==i.parents.length?i.tile:i.parents[t].tile;n instanceof pt&&e.push(n.mark)}return e}function Wr(i){let e=Ae.get(i);return e&&e.setDOM(i.cloneNode()),i}class Z1 extends F1{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}Z1.inline=new Z1("span");Z1.block=new Z1("div");const Er=new class extends F1{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}};class Um{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=he.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new or(e,e.contentDOM),this.updateInner([new Bt(0,0,0,e.state.doc.length)],null)}update(e){var t;let n=e.changedRanges;this.minWidth>0&&n.length&&(n.every(({fromA:m,toA:c})=>cthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let a=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?a=this.domChanged.newSel.head:!hE(e.changes,this.hasComposition)&&!e.selectionSet&&(a=e.state.selection.main.head));let s=a>-1?rE(this.view,e.changes,a):null;if(this.domChanged=null,this.hasComposition){let{from:m,to:c}=this.hasComposition;n=new Bt(m,c,e.changes.mapPos(m,-1),e.changes.mapPos(c,1)).addToSet(n.slice())}this.hasComposition=s?{from:s.range.fromB,to:s.range.toB}:null,(G.ie||G.chrome)&&!s&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let r=this.decorations,o=this.blockWrappers;this.updateDeco();let l=uE(r,this.decorations,e.changes);l.length&&(n=Bt.extendWithRanges(n,l));let u=cE(o,this.blockWrappers,e.changes);return u.length&&(n=Bt.extendWithRanges(n,u)),s&&!n.some(m=>m.fromA<=s.range.fromA&&m.toA>=s.range.toA)&&(n=s.range.addToSet(n.slice())),this.tile.flags&2&&n.length==0?!1:(this.updateInner(n,s),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:n}=this.view;n.ignore(()=>{if(t||e.length){let r=this.tile,o=new tE(this.view,r,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&Ae.get(t.text)&&o.cache.reused.set(Ae.get(t.text),2),this.tile=o.run(e,t),pl(r,o.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let s=G.chrome||G.ios?{node:n.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(s),s&&(s.written||n.selectionRange.focusNode!=s.node||!this.tile.dom.contains(s.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let a=[];if(this.view.viewport.from||this.view.viewport.to-1)&&xi(n,this.view.observer.selectionRange)&&!(a&&n.contains(a));if(!(s||t||r))return;let o=this.forceSelection;this.forceSelection=!1;let l=this.view.state.selection.main,u,m;if(l.empty?m=u=this.inlineDOMNearPos(l.anchor,l.assoc||1):(m=this.inlineDOMNearPos(l.head,l.head==l.from?1:-1),u=this.inlineDOMNearPos(l.anchor,l.anchor==l.from?1:-1)),G.gecko&&l.empty&&!this.hasComposition&&sE(u)){let d=document.createTextNode("");this.view.observer.ignore(()=>u.node.insertBefore(d,u.node.childNodes[u.offset]||null)),u=m=new Gt(d,0),o=!0}let c=this.view.observer.selectionRange;(o||!c.focusNode||(!bi(u.node,u.offset,c.anchorNode,c.anchorOffset)||!bi(m.node,m.offset,c.focusNode,c.focusOffset))&&!this.suppressWidgetCursorChange(c,l))&&(this.view.observer.ignore(()=>{G.android&&G.chrome&&n.contains(c.focusNode)&&dE(c.focusNode,n)&&(n.blur(),n.focus({preventScroll:!0}));let d=Mi(this.view.root);if(d)if(l.empty){if(G.gecko){let h=oE(u.node,u.offset);if(h&&h!=3){let g=(h==1?up:mp)(u.node,u.offset);g&&(u=new Gt(g.node,g.offset))}}d.collapse(u.node,u.offset),l.bidiLevel!=null&&d.caretBidiLevel!==void 0&&(d.caretBidiLevel=l.bidiLevel)}else if(d.extend){d.collapse(u.node,u.offset);try{d.extend(m.node,m.offset)}catch{}}else{let h=document.createRange();l.anchor>l.head&&([u,m]=[m,u]),h.setEnd(m.node,m.offset),h.setStart(u.node,u.offset),d.removeAllRanges(),d.addRange(h)}r&&this.view.root.activeElement==n&&(n.blur(),a&&a.focus())}),this.view.observer.setSelectionRange(u,m)),this.impreciseAnchor=u.precise?null:new Gt(c.anchorNode,c.anchorOffset),this.impreciseHead=m.precise?null:new Gt(c.focusNode,c.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&bi(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,n=Mi(e.root),{anchorNode:a,anchorOffset:s}=e.observer.selectionRange;if(!n||!t.empty||!t.assoc||!n.modify)return;let r=this.lineAt(t.head,t.assoc);if(!r)return;let o=r.posAtStart;if(t.head==o||t.head==o+r.length)return;let l=this.coordsAt(t.head,-1),u=this.coordsAt(t.head,1);if(!l||!u||l.bottom>u.top)return;let m=this.domAtPos(t.head+t.assoc,t.assoc);n.collapse(m.node,m.offset),n.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let c=e.observer.selectionRange;e.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=t.from&&n.collapse(a,s)}posFromDOM(e,t){let n=this.tile.nearest(e);if(!n)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let a=n.posAtStart;if(n.isComposite()){let s;if(e==n.dom)s=n.dom.childNodes[t];else{let r=vn(e)==0?0:t==0?-1:1;for(;;){let o=e.parentNode;if(o==n.dom)break;r==0&&o.firstChild!=o.lastChild&&(e==o.firstChild?r=-1:r=1),e=o}r<0?s=e:s=e.nextSibling}if(s==n.dom.firstChild)return a;for(;s&&!Ae.get(s);)s=s.nextSibling;if(!s)return a+n.length;for(let r=0,o=a;;r++){let l=n.children[r];if(l.dom==s)return o;o+=l.length+l.breakAfter}}else return n.isText()?e==n.dom?a+t:a+(t?n.length:0):a}domAtPos(e,t){let{tile:n,offset:a}=this.tile.resolveBlock(e,t);return n.isWidget()?n.domPosFor(a,t):n.domIn(a,t)}inlineDOMNearPos(e,t){let n,a=-1,s=!1,r,o=-1,l=!1;return this.tile.blockTiles((u,m)=>{if(u.isWidget()){if(u.flags&32&&m>=e)return!0;u.flags&16&&(s=!0)}else{let c=m+u.length;if(m<=e&&(n=u,a=e-m,s=c=e&&!r&&(r=u,o=e-m,l=m>e),m>e&&r)return!0}}),!n&&!r?this.domAtPos(e,t):(s&&r?n=null:l&&n&&(r=null),n&&t<0||!r?n.domIn(a,t):r.domIn(o,t))}coordsAt(e,t,n){let{tile:a,offset:s}=this.tile.resolveBlock(e,t);return a.isWidget()?a.widget instanceof Nr?null:a.coordsInWidget(s,t,!0):a.coordsIn(s,t,n)}lineAt(e,t){let{tile:n}=this.tile.resolveBlock(e,t);return n.isLine()?n:null}coordsForChar(e){let{tile:t,offset:n}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function a(s,r){if(s.isComposite())for(let o of s.children){if(o.length>=r){let l=a(o,r);if(l)return l}if(r-=o.length,r<0)break}else if(s.isText()&&rMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,o=-1,l=this.view.textDirection==ye.LTR,u=0,m=(c,d,h)=>{for(let g=0;ga);g++){let f=c.children[g],x=d+f.length,b=f.dom.getBoundingClientRect(),{height:v}=b;if(h&&!g&&(u+=b.top-h.top),f instanceof fn)x>n&&m(f,d,b);else if(d>=n&&(u>0&&t.push(-u),t.push(v+u),u=0,r)){let w=f.dom.lastChild,z=w?$a(w):[];if(z.length){let I=z[z.length-1],k=l?I.right-b.left:b.right-I.left;k>o&&(o=k,this.minWidth=s,this.minWidthFrom=d,this.minWidthTo=x)}}h&&g==c.children.length-1&&(u+=h.bottom-b.bottom),d=x+f.breakAfter}};return m(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?ye.RTL:ye.LTR}measureTextSize(){let e=this.tile.blockTiles(r=>{if(r.isLine()&&r.children.length&&r.length<=20){let o=0,l;for(let u of r.children){if(!u.isText()||/[^ -~]/.test(u.text))return;let m=$a(u.dom);if(m.length!=1)return;o+=m[0].width,l=m[0].height}if(o)return{lineHeight:r.dom.getBoundingClientRect().height,charWidth:o/r.length,textHeight:l}}});if(e)return e;let t=document.createElement("div"),n,a,s;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let r=$a(t.firstChild)[0];n=t.getBoundingClientRect().height,a=r&&r.width?r.width/27:7,s=r&&r.height?r.height:n,t.remove()}),{lineHeight:n,charWidth:a,textHeight:s}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let n=0,a=0;;a++){let s=a==t.viewports.length?null:t.viewports[a],r=s?s.from-1:this.view.state.doc.length;if(r>n){let o=(t.lineBlockAt(r).bottom-t.lineBlockAt(n).top)/this.view.scaleY;e.push(he.replace({widget:new Nr(o),block:!0,inclusive:!0,isBlockGap:!0}).range(n,r))}if(!s)break;n=s.to+1}return he.set(e)}updateDeco(){let e=1,t=this.view.state.facet(sr).map(s=>(this.dynamicDecorationMap[e++]=typeof s=="function")?s(this.view):s),n=!1,a=this.view.state.facet(C0).map((s,r)=>{let o=typeof s=="function";return o&&(n=!0),o?s(this.view):s});for(a.length&&(this.dynamicDecorationMap[e++]=n,t.push(ie.join(a))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof s=="function"?s(this.view):s)}scrollIntoView(e){if(e.isSnapshot){let u=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=u.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let u of this.view.state.facet(Ip))try{if(u(this.view,e.range,e))return!0}catch(m){zt(this.view.state,m,"scroll handler")}let{range:t}=e,n=this.coordsAt(t.head,t.assoc||(t.head>t.anchor?-1:1)),a;if(!n)return;!t.empty&&(a=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(n={left:Math.min(n.left,a.left),top:Math.min(n.top,a.top),right:Math.max(n.right,a.right),bottom:Math.max(n.bottom,a.bottom)});let s=A0(this.view),r={left:n.left-s.left,top:n.top-s.top,right:n.right+s.right,bottom:n.bottom+s.bottom},{offsetWidth:o,offsetHeight:l}=this.view.scrollDOM;if(OW(this.view.scrollDOM,r,t.head1&&(n.top>window.visualViewport.offsetTop+window.visualViewport.height||n.bottomn.isWidget()||n.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){pl(this.tile)}}function pl(i,e){let t=e==null?void 0:e.get(i);if(t!=1){t==null&&i.destroy();for(let n of i.children)pl(n,e)}}function sE(i){return He(i.node)&&i.node.firstChild&&(i.offset==0||i.node.childNodes[i.offset-1].contentEditable=="false")&&(i.offset==i.node.childNodes.length||i.node.childNodes[i.offset].contentEditable=="false")}function Pp(i,e){let t=i.observer.selectionRange;if(!t.focusNode)return null;let n=up(t.focusNode,t.focusOffset),a=mp(t.focusNode,t.focusOffset),s=n||a;if(a&&n&&a.node!=n.node){let o=Ae.get(a.node);if(!o||o.isText()&&o.text!=a.node.nodeValue)s=a;else if(i.docView.lastCompositionAfterCursor){let l=Ae.get(n.node);!l||l.isText()&&l.text!=n.node.nodeValue||(s=a)}}if(i.docView.lastCompositionAfterCursor=s!=n,!s)return null;let r=e-s.offset;return{from:r,to:r+s.node.nodeValue.length,node:s.node}}function rE(i,e,t){let n=Pp(i,t);if(!n)return null;let{node:a,from:s,to:r}=n,o=a.nodeValue;if(/[\n\r]/.test(o)||i.state.doc.sliceString(n.from,n.to)!=o)return null;let l=e.invertedDesc;return{range:new Bt(l.mapPos(s),l.mapPos(r),s,r),text:a}}function oE(i,e){return He(i)?(e&&i.childNodes[e-1].contentEditable=="false"?1:0)|(e{ne.from&&(t=!0)}),t}class Nr extends F1{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function gE(i,e,t=1){let n=i.charCategorizer(e),a=i.doc.lineAt(e),s=e-a.from;if(a.length==0)return M.cursor(e);s==0?t=1:s==a.length&&(t=-1);let r=s,o=s;t<0?r=rt(a.text,s,!1):o=rt(a.text,s);let l=n(a.text.slice(r,o));for(;r>0;){let u=rt(a.text,r,!1);if(n(a.text.slice(u,r))!=l)break;r=u}for(;oi.defaultLineHeight*1.5){let o=i.viewState.heightOracle.textHeight,l=Math.floor((a-t.top-(i.defaultLineHeight-o)*.5)/o);s+=l*i.viewState.heightOracle.lineLength}let r=i.state.sliceDoc(t.from,t.to);return t.from+IW(r,s,i.state.tabSize)}function fl(i,e,t){let n=i.lineBlockAt(e);if(Array.isArray(n.type)){let a;for(let s of n.type){if(s.from>e)break;if(!(s.toe)return s;(!a||s.type==Ye.Text&&(a.type!=s.type||(t<0?s.frome)))&&(a=s)}}return a||n}return n}function fE(i,e,t,n){let a=fl(i,e.head,e.assoc||-1),s=!n||a.type!=Ye.Text||!(i.lineWrapping||a.widgetLineBreaks)?null:i.coordsAtPos(e.assoc<0&&e.head>a.from?e.head-1:e.head);if(s){let r=i.dom.getBoundingClientRect(),o=i.textDirectionAt(a.from),l=i.posAndSideAtCoords({x:t==(o==ye.LTR)?r.right-1:r.left+1,y:(s.top+s.bottom)/2});if(l)return M.cursor(l.pos,l.assoc)}return M.cursor(t?a.to:a.from,t?1:-1)}function $m(i,e,t,n){let a=i.state.doc.lineAt(e.head),s=i.bidiSpans(a),r=i.textDirectionAt(a.from);for(let o=e,l=null;;){let u=RW(a,s,r,o,t),m=pp;if(!u){if(a.number==(t?i.state.doc.lines:1))return o;m=` +`,a=i.state.doc.line(a.number+(t?1:-1)),s=i.bidiSpans(a),u=t?M.cursor(a.from,-1):M.cursor(a.to,1)}if(l){if(!l(m))return o}else{if(!n)return u;l=n(m)}o=u}}function xE(i,e,t){let n=i.state.charCategorizer(e),a=n(t);return s=>{let r=n(s);return a==Mt.Space&&(a=r),a==r}}function bE(i,e,t,n){let a=e.head,s=t?1:-1;if(a==(t?i.state.doc.length:0))return M.cursor(a,e.assoc);let r=e.goalColumn,o,l=i.contentDOM.getBoundingClientRect(),u=i.coordsAtPos(a,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),m=i.documentTop;if(u)r==null&&(r=u.left-l.left),o=s<0?u.top:u.bottom;else{let g=i.viewState.lineBlockAt(a);r==null&&(r=Math.min(l.right-l.left,i.defaultCharacterWidth*(a-g.from))),o=(s<0?g.top:g.bottom)+m}let c=l.left+r,d=i.viewState.heightOracle.textHeight>>1,h=n??d;for(let g=0;;g+=d){let f=o+(h+g)*s,x=xl(i,{x:c,y:f},!1,s);if(t?f>l.bottom:fo:v{if(e>s&&ea(i)),t.from,e.head>t.from?-1:1);return n==t.from?t:M.cursor(n,ni.viewState.docHeight)return new sn(i.state.doc.length,-1);if(u=i.elementAtHeight(l),n==null)break;if(u.type==Ye.Text){if(n<0?u.toi.viewport.to)break;let d=i.docView.coordsAt(n<0?u.from:u.to,n>0?-1:1);if(d&&(n<0?d.top<=l+s:d.bottom>=l+s))break}let c=i.viewState.heightOracle.textHeight/2;l=n>0?u.bottom+c:u.top-c}if(i.viewport.from>=u.to||i.viewport.to<=u.from){if(t)return null;if(u.type==Ye.Text){let c=pE(i,a,u,r,o);return new sn(c,c==u.from?1:-1)}}if(u.type!=Ye.Text)return l<(u.top+u.bottom)/2?new sn(u.from,1):new sn(u.to,-1);let m=i.docView.lineAt(u.from,2);return(!m||m.length!=u.length)&&(m=i.docView.lineAt(u.from,-2)),new vE(i,r,o,i.textDirectionAt(u.from)).scanTile(m,u.from)}class vE{constructor(e,t,n,a){this.view=e,this.x=t,this.y=n,this.baseDir=a,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||n.length&&(n[0].level!=this.baseDir||n[0].to+a.from>1;t:if(r.has(f)){for(let v=1;v=s&&(w-=g),!r.has(w)){f=w;break t}}break e}r.add(f);let x=t(f),b=0;if(x)for(let v=0;v1))if(w.bottomthis.y)(!u||u.top>w.top)&&(u=w),b=-1;else{let z=w.left>this.x?this.x-w.left:w.right(g+g+f)/3)return this.y=l.bottom-1,this.scan(e,t,!0);if(u&&u.top<(g+f+f)/3)return this.y=u.top+1,this.scan(e,t,!0)}let h=(o?this.dirAt(e[m],1):this.baseDir)==ye.LTR;return{i:m,after:this.x>(d.left+d.right)/2==h}}scanText(e,t){let n=[];for(let s=0;s{let r=n[s]-t,o=n[s+1]-t;return Bi(e.dom,r,o).getClientRects()});return a.after?new sn(n[a.i+1],-1):new sn(n[a.i],1)}scanTile(e,t){if(!e.length)return new sn(t,1);if(e.children.length==1){let o=e.children[0];if(o.isText())return this.scanText(o,t);if(o.isComposite())return this.scanTile(o,t)}let n=[t];for(let o=0,l=t;o{let l=e.children[o];return l.flags&48?null:(He(l.dom)?l.dom:Bi(l.dom,0,l.length)).getClientRects()}),s=e.children[a.i],r=n[a.i];return s.isText()?this.scanText(s,r):s.isComposite()?this.scanTile(s,r):a.after?new sn(n[a.i+1],-1):new sn(r,1)}}const b1="￿";class yE{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(re.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=b1}readRange(e,t){if(!e)return this;let n=e.parentNode;for(let a=e;;){this.findPointBefore(n,a);let s=this.text.length;this.readNode(a);let r=Ae.get(a),o=a.nextSibling;if(o==t){r!=null&&r.breakAfter&&!o&&n!=this.view.contentDOM&&this.lineBreak();break}let l=Ae.get(o);(r&&l?r.breakAfter:(r?r.breakAfter:Ss(a))||Ss(o)&&(a.nodeName!="BR"||r!=null&&r.isWidget())&&this.text.length>s)&&!zE(o,t)&&this.lineBreak(),a=o}return this.findPointBefore(n,t),this}readTextNode(e){let t=e.nodeValue;for(let n of this.points)n.node==e&&(n.pos=this.text.length+Math.min(n.offset,t.length));for(let n=0,a=this.lineSeparator?null:/\r\n?|\n/g;;){let s=-1,r=1,o;if(this.lineSeparator?(s=t.indexOf(this.lineSeparator,n),r=this.lineSeparator.length):(o=a.exec(t))&&(s=o.index,r=o[0].length),this.append(t.slice(n,s<0?t.length:s)),s<0)break;if(this.lineBreak(),r>1)for(let l of this.points)l.node==e&&l.pos>this.text.length&&(l.pos-=r-1);n=s+r}}readNode(e){let t=Ae.get(e),n=t&&t.overrideDOMText;if(n!=null){this.findPointInside(e,n.length);for(let a=n.iter();!a.next().done;)a.lineBreak?this.lineBreak():this.append(a.value)}else D1(e)?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():He(e)&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let n of this.points)n.node==e&&e.childNodes[n.offset]==t&&(n.pos=this.text.length)}findPointInside(e,t){for(let n of this.points)(D1(e)?n.node==e:e.contains(n.node))&&(n.pos=this.text.length+(wE(e,n.node,n.offset)?t:0))}}function wE(i,e,t){for(;;){if(!e||t-1;let{impreciseHead:s,impreciseAnchor:r}=e.docView,o=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=Dp(e.docView.tile,t,n,0))){let l=s||r?[]:SE(e),u=new yE(l,e);u.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=u.text,this.newSel=TE(l,this.bounds.from)}else{let l=e.observer.selectionRange,u=s&&s.node==l.focusNode&&s.offset==l.focusOffset||!ml(e.contentDOM,l.focusNode)?o.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),m=r&&r.node==l.anchorNode&&r.offset==l.anchorOffset||!ml(e.contentDOM,l.anchorNode)?o.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset),c=e.viewport;if((G.ios||G.chrome)&&u!=m&&Math.min(u,m)<=o.main.from&&Math.max(u,m)>=o.main.to&&(c.from>0||c.to-1&&o.ranges.length>1)this.newSel=o.replaceRange(M.range(m,u));else if(e.lineWrapping&&m==u&&!(o.main.empty&&o.main.head==u)&&e.inputState.lastTouchTime>Date.now()-100){let d=e.coordsAtPos(u,-1),h=0;d&&(h=e.inputState.lastTouchY<=d.bottom?-1:1),this.newSel=M.create([M.cursor(u,h)])}else this.newSel=M.single(m,u)}}}function Dp(i,e,t,n){if(i.isComposite()){let a=-1,s=-1,r=-1,o=-1;for(let l=0,u=n,m=n;lt)return Dp(c,e,t,u);if(d>=e&&a==-1&&(a=l,s=u),u>t&&c.dom.parentNode==i.dom){r=l,o=m;break}m=d,u=d+c.breakAfter}return{from:s,to:o<0?n+i.length:o,startDOM:(a?i.children[a-1].dom.nextSibling:null)||i.dom.firstChild,endDOM:r=0?i.children[r].dom:null}}else return i.isText()?{from:n,to:n+i.length,startDOM:i.dom,endDOM:i.dom.nextSibling}:null}function Mp(i,e){let t,{newSel:n}=e,{state:a}=i,s=a.selection.main,r=i.inputState.lastKeyTime>Date.now()-100?i.inputState.lastKeyCode:-1;if(e.bounds){let{from:o,to:l}=e.bounds,u=s.from,m=null;(r===8||G.android&&e.text.length=o&&s.to<=l&&(e.typeOver||c!=e.text)&&c.slice(0,s.from-o)==e.text.slice(0,s.from-o)&&c.slice(s.to-o)==e.text.slice(d=e.text.length-(c.length-(s.to-o)))?t={from:s.from,to:s.to,insert:oe.of(e.text.slice(s.from-o,d).split(b1))}:(h=Bp(c,e.text,u-o,m))&&(G.chrome&&r==13&&h.toB==h.from+2&&e.text.slice(h.from,h.toB)==b1+b1&&h.toB--,t={from:o+h.from,to:o+h.toA,insert:oe.of(e.text.slice(h.from,h.toB).split(b1))})}else n&&(!i.hasFocus&&a.facet(gn)||bl(n,s))&&(n=null);if(!t&&!n)return!1;if((G.mac||G.android)&&t&&t.from==t.to&&t.from==s.head-1&&/^\. ?$/.test(t.insert.toString())&&i.contentDOM.getAttribute("autocorrect")=="off"?(n&&t.insert.length==2&&(n=M.single(n.main.anchor-1,n.main.head-1)),t={from:t.from,to:t.to,insert:oe.of([t.insert.toString().replace("."," ")])}):a.doc.lineAt(s.from).toDate.now()-50?t={from:s.from,to:s.to,insert:a.toText(i.inputState.insertingText)}:G.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==` + `&&i.lineWrapping&&(n&&(n=M.single(n.main.anchor-1,n.main.head-1)),t={from:s.from,to:s.to,insert:oe.of([" "])}),t)return P0(i,t,n,r);if(n&&!bl(n,s)){let o=!1,l="select";return i.inputState.lastSelectionTime>Date.now()-50&&(i.inputState.lastSelectionOrigin=="select"&&(o=!0),l=i.inputState.lastSelectionOrigin,l=="select.pointer"&&(n=Op(a.facet($i).map(u=>u(i)),n))),i.dispatch({selection:n,scrollIntoView:o,userEvent:l}),!0}else return!1}function P0(i,e,t,n=-1){if(G.ios&&i.inputState.flushIOSKey(e))return!0;let a=i.state.selection.main;if(G.android&&(e.to==a.to&&(e.from==a.from||e.from==a.from-1&&i.state.sliceDoc(e.from,a.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&j1(i.contentDOM,"Enter",13)||(e.from==a.from-1&&e.to==a.to&&e.insert.length==0||n==8&&e.insert.lengtha.head)&&j1(i.contentDOM,"Backspace",8)||e.from==a.from&&e.to==a.to+1&&e.insert.length==0&&j1(i.contentDOM,"Delete",46)))return!0;let s=e.insert.toString();i.inputState.composing>=0&&i.inputState.composing++;let r,o=()=>r||(r=kE(i,e,t));return i.state.facet(yp).some(l=>l(i,e.from,e.to,s,o))||i.dispatch(o()),!0}function kE(i,e,t){let n,a=i.state,s=a.selection.main,r=-1;if(e.from==e.to&&e.froms.to){let l=e.fromc(i)),u,l);e.from==m&&(r=m)}if(r>-1)n={changes:e,selection:M.cursor(e.from+e.insert.length,-1)};else if(e.from>=s.from&&e.to<=s.to&&e.to-e.from>=(s.to-s.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&i.inputState.composing<0){let l=s.frome.to?a.sliceDoc(e.to,s.to):"";n=a.replaceSelection(i.state.toText(l+e.insert.sliceString(0,void 0,i.state.lineBreak)+u))}else{let l=a.changes(e),u=t&&t.main.to<=l.newLength?t.main:void 0;if(a.selection.ranges.length>1&&(i.inputState.composing>=0||i.inputState.compositionPendingChange)&&e.to<=s.to+10&&e.to>=s.to-10){let m=i.state.sliceDoc(e.from,e.to),c,d=t&&Pp(i,t.main.head);if(d){let g=e.insert.length-(e.to-e.from);c={from:d.from,to:d.to-g}}else c=i.state.doc.lineAt(s.head);let h=s.to-e.to;n=a.changeByRange(g=>{if(g.from==s.from&&g.to==s.to)return{changes:l,range:u||g.map(l)};let f=g.to-h,x=f-m.length;if(i.state.sliceDoc(x,f)!=m||f>=c.from&&x<=c.to)return{range:g};let b=a.changes({from:x,to:f,insert:e.insert}),v=g.to-s.to;return{changes:b,range:u?M.range(Math.max(0,u.anchor+v),Math.max(0,u.head+v)):g.map(b)}})}else n={changes:l,selection:u&&a.selection.replaceRange(u)}}let o="input.type";return(i.composing||i.inputState.compositionPendingChange&&i.inputState.compositionEndedAt>Date.now()-50)&&(i.inputState.compositionPendingChange=!1,o+=".compose",i.inputState.compositionFirstChange&&(o+=".start",i.inputState.compositionFirstChange=!1)),a.update(n,{userEvent:o,scrollIntoView:!0})}function Bp(i,e,t,n){let a=Math.min(i.length,e.length),s=0;for(;s0&&o>0&&i.charCodeAt(r-1)==e.charCodeAt(o-1);)r--,o--;if(n=="end"){let l=Math.max(0,s-Math.min(r,o));t-=r+l-s}if(r=r?s-t:0;s-=l,o=s+(o-r),r=s}else if(o=o?s-t:0;s-=l,r=s+(r-o),o=s}return{from:s,toA:r,toB:o}}function SE(i){let e=[];if(i.root.activeElement!=i.contentDOM)return e;let{anchorNode:t,anchorOffset:n,focusNode:a,focusOffset:s}=i.observer.selectionRange;return t&&(e.push(new Ym(t,n)),(a!=t||s!=n)&&e.push(new Ym(a,s))),e}function TE(i,e){if(i.length==0)return null;let t=i[0].pos,n=i.length==2?i[1].pos:t;return t<0||n<0?null:t==n?M.create([M.cursor(n+e,-1)]):M.single(t+e,n+e)}function bl(i,e){return e.head==i.main.head&&e.anchor==i.main.anchor}class _E{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.touchActive=!1,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.lastIOSMomentumScroll=0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,G.safari&&e.contentDOM.addEventListener("input",()=>null),G.gecko&&RE(e.contentDOM.ownerDocument)}handleEvent(e){!ZE(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let n=this.handlers[e];if(n){for(let a of n.observers)a(this.view,t);for(let a of n.handlers){if(t.defaultPrevented)break;if(a(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=CE(e),n=this.handlers,a=this.view.contentDOM;for(let s in t)if(s!="scroll"){let r=!t[s].handlers.length,o=n[s];o&&r!=!o.handlers.length&&(a.removeEventListener(s,this.handleEvent),o=null),o||a.addEventListener(s,this.handleEvent,{passive:r})}for(let s in n)s!="scroll"&&!t[s]&&a.removeEventListener(s,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Lp.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),G.android&&G.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;if(G.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&(Zp.some(t=>t.keyCode==e.keyCode)&&!e.ctrlKey||AE.indexOf(e.key)>-1&&e.ctrlKey)){let t={ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey,shiftKey:e.shiftKey};t.shiftKey&&G.ios&&!/^(off|none)$/.test(this.view.contentDOM.autocapitalize)&&jE(this.view.win)&&(t.shiftKey=!1);let n=this.pendingIOSKey={key:e.key,keyCode:e.keyCode,mods:t};return setTimeout(()=>{this.pendingIOSKey==n&&this.flushIOSKey()},50),!0}return e.keyCode!=229&&this.view.observer.forceFlush(),!1}flushIOSKey(e){let t=this.pendingIOSKey;return!t||this.view.observer.pendingRecords().length||t.key=="Enter"&&e&&e.from0?!0:G.safari&&!G.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function jE(i){return i.visualViewport?i.visualViewport.height*i.visualViewport.scale/i.document.documentElement.clientHeight<.85:!1}function Xm(i,e){return(t,n)=>{try{return e.call(i,n,t)}catch(a){zt(t.state,a)}}}function CE(i){let e=Object.create(null);function t(n){return e[n]||(e[n]={observers:[],handlers:[]})}for(let n of i){let a=n.spec,s=a&&a.plugin.domEventHandlers,r=a&&a.plugin.domEventObservers;if(s)for(let o in s){let l=s[o];l&&t(o).handlers.push(Xm(n.value,l))}if(r)for(let o in r){let l=r[o];l&&t(o).observers.push(Xm(n.value,l))}}for(let n in Vt)t(n).handlers.push(Vt[n]);for(let n in ct)t(n).observers.push(ct[n]);return e}const Zp=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],AE="dthko",Lp=[16,17,18,20,91,92,224,225],Ia=6;function ka(i){return Math.max(0,i)*.7+8}function PE(i,e){return Math.max(Math.abs(i.clientX-e.clientX),Math.abs(i.clientY-e.clientY))}class OE{constructor(e,t,n,a){this.view=e,this.startEvent=t,this.style=n,this.mustSelect=a,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=ap(e.contentDOM),this.atoms=e.state.facet($i).map(r=>r(e));let s=e.contentDOM.ownerDocument;s.addEventListener("mousemove",this.move=this.move.bind(this)),s.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(re.allowMultipleSelections)&&DE(e,t),this.dragging=BE(e,t)&&Np(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&PE(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,n=0,a=0,s=0,r=this.view.win.innerWidth,o=this.view.win.innerHeight;this.scrollParents.x&&({left:a,right:r}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:s,bottom:o}=this.scrollParents.y.getBoundingClientRect());let l=A0(this.view);e.clientX-l.left<=a+Ia?t=-ka(a-e.clientX):e.clientX+l.right>=r-Ia&&(t=ka(e.clientX-r)),e.clientY-l.top<=s+Ia?n=-ka(s-e.clientY):e.clientY+l.bottom>=o-Ia&&(n=ka(e.clientY-o)),this.setScrollSpeed(t,n)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,n=Op(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!n.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:n,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function DE(i,e){let t=i.state.facet(fp);return t.length?t[0](e):G.mac?e.metaKey:e.ctrlKey}function ME(i,e){let t=i.state.facet(xp);return t.length?t[0](e):G.mac?!e.altKey:!e.ctrlKey}function BE(i,e){let{main:t}=i.state.selection;if(t.empty)return!1;let n=Mi(i.root);if(!n||n.rangeCount==0)return!0;let a=n.getRangeAt(0).getClientRects();for(let s=0;s=e.clientX&&r.top<=e.clientY&&r.bottom>=e.clientY)return!0}return!1}function ZE(i,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,n;t!=i.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(n=Ae.get(t))&&n.isWidget()&&!n.isHidden&&n.widget.ignoreEvent(e))return!1;return!0}const Vt=Object.create(null),ct=Object.create(null),Wp=G.ie&&G.ie_version<15||G.ios&&G.webkit_version<604;function LE(i){let e=i.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{i.focus(),t.remove(),Ep(i,t.value)},50)}function lr(i,e,t){for(let n of i.facet(e))t=n(t,i);return t}function Ep(i,e){e=lr(i.state,T0,e);let{state:t}=i,n,a=1,s=t.toText(e),r=s.lines==t.selection.ranges.length;if(vl!=null&&t.selection.ranges.every(l=>l.empty)&&vl==s.toString()){let l=-1;n=t.changeByRange(u=>{let m=t.doc.lineAt(u.from);if(m.from==l)return{range:u};l=m.from;let c=t.toText((r?s.line(a++).text:e)+t.lineBreak);return{changes:{from:m.from,insert:c},range:M.cursor(u.from+c.length,-1)}})}else r?n=t.changeByRange(l=>{let u=s.line(a++);return{changes:{from:l.from,to:l.to,insert:u.text},range:M.cursor(l.from+u.length,-1)}}):n=t.replaceSelection(s);i.dispatch(n,{userEvent:"input.paste",scrollIntoView:!0})}ct.scroll=i=>{let e=i.inputState;e.lastScrollTop=i.scrollDOM.scrollTop,e.lastScrollLeft=i.scrollDOM.scrollLeft,G.ios&&!e.touchActive&&(e.lastIOSMomentumScroll=Date.now())};ct.wheel=ct.mousewheel=i=>{i.inputState.lastWheelEvent=Date.now()};Vt.keydown=(i,e)=>(i.inputState.setSelectionOrigin("select"),e.keyCode==27&&i.inputState.tabFocusMode!=0&&(i.inputState.tabFocusMode=Date.now()+2e3),!1);ct.touchstart=(i,e)=>{let t=i.inputState,n=e.targetTouches[0];t.touchActive=!0,t.lastTouchTime=Date.now(),n&&(t.lastTouchX=n.clientX,t.lastTouchY=n.clientY),t.setSelectionOrigin("select.pointer")};ct.touchmove=i=>{i.inputState.setSelectionOrigin("select.pointer")};ct.touchend=(i,e)=>{i.inputState.touchActive=!1};Vt.mousedown=(i,e)=>{if(i.observer.flush(),i.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let n of i.state.facet(bp))if(t=n(i,e),t)break;if(!t&&e.button==0&&(t=EE(i,e)),t){let n=!i.hasFocus;i.inputState.startMouseSelection(new OE(i,e,t,n)),n&&i.observer.ignore(()=>{op(i.contentDOM);let s=i.root.activeElement;s&&!s.contains(i.contentDOM)&&s.blur()});let a=i.inputState.mouseSelection;if(a)return a.start(e),a.dragging===!1}else i.inputState.setSelectionOrigin("select.pointer");return!1};function Km(i,e,t,n){if(n==1)return M.cursor(e,t);if(n==2)return gE(i.state,e,t);{let a=i.docView.lineAt(e,t),s=i.state.doc.lineAt(a?a.posAtEnd:e),r=a?a.posAtStart:s.from,o=a?a.posAtEnd:s.to;return oDate.now()-400&&Math.abs(e.clientX-i.clientX)<2&&Math.abs(e.clientY-i.clientY)<2?(tc+1)%3:1}function EE(i,e){let t=i.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),n=Np(e),a=i.state.selection;return{update(s){s.docChanged&&(t.pos=s.changes.mapPos(t.pos),a=a.map(s.changes))},get(s,r,o){let l=i.posAndSideAtCoords({x:s.clientX,y:s.clientY},!1),u,m=Km(i,l.pos,l.assoc,n);if(t.pos!=l.pos&&!r){let c=Km(i,t.pos,t.assoc,n),d=Math.min(c.from,m.from),h=Math.max(c.to,m.to);m=d1&&(u=NE(a,l.pos))?u:o?a.addRange(m):M.create([m])}}}function NE(i,e){for(let t=0;t=e)return M.create(i.ranges.slice(0,t).concat(i.ranges.slice(t+1)),i.mainIndex==t?0:i.mainIndex-(i.mainIndex>t?1:0))}return null}Vt.dragstart=(i,e)=>{let{selection:{main:t}}=i.state;if(e.target.draggable){let a=i.docView.tile.nearest(e.target);if(a&&a.isWidget()){let s=a.posAtStart,r=s+a.length;(s>=t.to||r<=t.from)&&(t=M.undirectionalRange(s,r))}}let{inputState:n}=i;return n.mouseSelection&&(n.mouseSelection.dragging=!0),n.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",lr(i.state,_0,i.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Vt.dragend=i=>(i.inputState.draggedContent=null,!1);function ic(i,e,t,n){if(t=lr(i.state,T0,t),!t)return;let a=i.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:s}=i.inputState,r=n&&s&&ME(i,e)?{from:s.from,to:s.to}:null,o={from:a,insert:t},l=i.state.changes(r?[r,o]:o);i.focus(),i.dispatch({changes:l,selection:{anchor:l.mapPos(a,-1),head:l.mapPos(a,1)},userEvent:r?"move.drop":"input.drop"}),i.inputState.draggedContent=null}Vt.drop=(i,e)=>{if(!e.dataTransfer)return!1;if(i.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let n=Array(t.length),a=0,s=()=>{++a==t.length&&ic(i,e,n.filter(r=>r!=null).join(i.state.lineBreak),!1)};for(let r=0;r{/[\x00-\x08\x0e-\x1f]{2}/.test(o.result)||(n[r]=o.result),s()},o.readAsText(t[r])}return!0}else{let n=e.dataTransfer.getData("Text");if(n)return ic(i,e,n,!0),!0}return!1};Vt.paste=(i,e)=>{if(i.state.readOnly)return!0;i.observer.flush();let t=Wp?null:e.clipboardData;return t?(Ep(i,t.getData("text/plain")||t.getData("text/uri-list")),!0):(LE(i),!1)};function FE(i,e){let t=i.dom.parentNode;if(!t)return;let n=t.appendChild(document.createElement("textarea"));n.style.cssText="position: fixed; left: -10000px; top: 10px",n.value=e,n.focus(),n.selectionEnd=e.length,n.selectionStart=0,setTimeout(()=>{n.remove(),i.focus()},50)}function JE(i){let e=[],t=[],n=!1;for(let a of i.selection.ranges)a.empty||(e.push(i.sliceDoc(a.from,a.to)),t.push(a));if(!e.length){let a=-1;for(let{from:s}of i.selection.ranges){let r=i.doc.lineAt(s);r.number>a&&(e.push(r.text),t.push({from:r.from,to:Math.min(i.doc.length,r.to+1)})),a=r.number}n=!0}return{text:lr(i,_0,e.join(i.lineBreak)),ranges:t,linewise:n}}let vl=null;Vt.copy=Vt.cut=(i,e)=>{if(!xi(i.contentDOM,i.observer.selectionRange))return!1;let{text:t,ranges:n,linewise:a}=JE(i.state);if(!t&&!a)return!1;vl=a?t:null,e.type=="cut"&&!i.state.readOnly&&i.dispatch({changes:n,scrollIntoView:!0,userEvent:"delete.cut"});let s=Wp?null:e.clipboardData;return s?(s.clearData(),s.setData("text/plain",t),!0):(FE(i,t),!1)};const Fp=Nn.define();function Jp(i,e){let t=[];for(let n of i.facet(wp)){let a=n(i,e);a&&t.push(a)}return t.length?i.update({effects:t,annotations:Fp.of(!0)}):null}function Rp(i){setTimeout(()=>{let e=i.hasFocus;if(e!=i.inputState.notifiedFocused){let t=Jp(i.state,e);t?i.dispatch(t):i.update([])}},10)}ct.focus=i=>{i.inputState.lastFocusTime=Date.now(),!i.scrollDOM.scrollTop&&(i.inputState.lastScrollTop||i.inputState.lastScrollLeft)&&(i.scrollDOM.scrollTop=i.inputState.lastScrollTop,i.scrollDOM.scrollLeft=i.inputState.lastScrollLeft),Rp(i)};ct.blur=i=>{i.observer.clearSelectionRange(),Rp(i)};ct.compositionstart=ct.compositionupdate=(i,e)=>{if(!i.observer.editContext&&(i.inputState.compositionFirstChange==null&&(i.inputState.compositionFirstChange=!0),i.inputState.composing<0)){let{main:t}=i.state.selection;!t.empty&&i.lineBlockAt(t.from).from!=i.lineBlockAt(t.to).from&&!i.state.readOnly&&i.dispatch({changes:i.state.selection.ranges.filter(n=>!n.empty).map(n=>({from:n.from,to:n.to})),userEvent:"input"}),i.inputState.composing=0}};ct.compositionend=i=>{i.observer.editContext||(i.inputState.composing=-1,i.inputState.compositionEndedAt=Date.now(),i.inputState.compositionPendingKey=!0,i.inputState.compositionPendingChange=i.observer.pendingRecords().length>0,i.inputState.compositionFirstChange=null,G.chrome&&G.android?i.observer.flushSoon():i.inputState.compositionPendingChange?Promise.resolve().then(()=>i.observer.flush()):setTimeout(()=>{i.inputState.composing<0&&i.docView.hasComposition&&i.update([])},50))};ct.contextmenu=i=>{i.inputState.lastContextMenu=Date.now()};Vt.beforeinput=(i,e)=>{var t,n;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(i.inputState.insertingText=e.data,i.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&i.observer.editContext){let s=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),r=e.getTargetRanges();if(s&&r.length){let o=r[0],l=i.posAtDOM(o.startContainer,o.startOffset),u=i.posAtDOM(o.endContainer,o.endOffset);return P0(i,{from:l,to:u,insert:i.state.toText(s)},null),!0}}let a;if(G.chrome&&G.android&&(a=Zp.find(s=>s.inputType==e.inputType))&&(i.observer.delayAndroidKey(a.key,a.keyCode),a.key=="Backspace"||a.key=="Delete")){let s=((n=window.visualViewport)===null||n===void 0?void 0:n.height)||0;setTimeout(()=>{var r;(((r=window.visualViewport)===null||r===void 0?void 0:r.height)||0)>s+10&&i.hasFocus&&(i.contentDOM.blur(),i.focus())},100)}return G.ios&&e.inputType=="deleteContentForward"&&i.observer.flushSoon(),G.safari&&e.inputType=="insertText"&&i.inputState.composing>=0&&setTimeout(()=>ct.compositionend(i,e),20),!1};const ac=new Set;function RE(i){ac.has(i)||(ac.add(i),i.addEventListener("copy",()=>{}),i.addEventListener("cut",()=>{}))}const sc=["pre-wrap","normal","pre-line","break-spaces"];let L1=!1;function rc(){L1=!1}class GE{constructor(e){this.lineWrapping=e,this.doc=oe.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let n=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(n+=Math.max(0,Math.ceil((t-e-n*this.lineLength*.5)/this.lineLength))),this.lineHeight*n}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return sc.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let n=0;n-1,l=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=o;if(this.lineWrapping=o,this.lineHeight=t,this.charWidth=n,this.textHeight=a,this.lineLength=s,l){this.heightSamples={};for(let u=0;u0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>Ya&&(L1=!0),this.height=e)}replace(e,t,n){return mt.of(n)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,n,a){let s=this,r=n.doc;for(let o=a.length-1;o>=0;o--){let{fromA:l,toA:u,fromB:m,toB:c}=a[o],d=s.lineAt(l,we.ByPosNoHeight,n.setDoc(t),0,0),h=d.to>=u?d:s.lineAt(u,we.ByPosNoHeight,n,0,0);for(c+=h.to-u,u=h.to;o>0&&d.from<=a[o-1].toA;)l=a[o-1].fromA,m=a[o-1].fromB,o--,ls*2){let o=e[t-1];o.break?e.splice(--t,1,o.left,null,o.right):e.splice(--t,1,o.left,o.right),n+=1+o.break,a-=o.size}else if(s>a*2){let o=e[n];o.break?e.splice(n,1,o.left,null,o.right):e.splice(n,1,o.left,o.right),n+=2+o.break,s-=o.size}else break;else if(a=s&&r(this.lineAt(0,we.ByPos,n,a,s))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,n=!1,a){return a&&a.from<=t&&a.more&&this.setMeasuredHeight(a),this.outdated=!1,this}toString(){return`block(${this.length})`}}class yt extends Gp{constructor(e,t,n){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=n}mainBlock(e,t){return new Rt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,n){let a=n[0];return n.length==1&&(a instanceof yt||a instanceof Qe&&a.flags&4)&&Math.abs(this.length-a.length)<10?(a instanceof Qe?a=new yt(a.length,this.height,this.spaceAbove):a.height=this.height,this.outdated||(a.outdated=!1),a):mt.of(n)}updateHeight(e,t=0,n=!1,a){return a&&a.from<=t&&a.more?this.setMeasuredHeight(a):(n||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class Qe extends mt{constructor(e){super(e,0)}heightMetrics(e,t){let n=e.doc.lineAt(t).number,a=e.doc.lineAt(t+this.length).number,s=a-n+1,r,o=0;if(e.lineWrapping){let l=Math.min(this.height,e.lineHeight*s);r=l/s,this.length>s+1&&(o=(this.height-l)/(this.length-s-1))}else r=this.height/s;return{firstLine:n,lastLine:a,perLine:r,perChar:o}}blockAt(e,t,n,a){let{firstLine:s,lastLine:r,perLine:o,perChar:l}=this.heightMetrics(t,a);if(t.lineWrapping){let u=a+(e0){let s=n[n.length-1];s instanceof Qe?n[n.length-1]=new Qe(s.length+a):n.push(null,new Qe(a-1))}if(e>0){let s=n[0];s instanceof Qe?n[0]=new Qe(e+s.length):n.unshift(new Qe(e-1),null)}return mt.of(n)}decomposeLeft(e,t){t.push(new Qe(e-1),null)}decomposeRight(e,t){t.push(null,new Qe(this.length-e-1))}updateHeight(e,t=0,n=!1,a){let s=t+this.length;if(a&&a.from<=t+this.length&&a.more){let r=[],o=Math.max(t,a.from),l=-1;for(a.from>t&&r.push(new Qe(a.from-t-1).updateHeight(e,t));o<=s&&a.more;){let m=e.doc.lineAt(o).length;r.length&&r.push(null);let c=a.heights[a.index++],d=0;c<0&&(d=-c,c=a.heights[a.index++]),l==-1?l=c:Math.abs(c-l)>=Ya&&(l=-2);let h=new yt(m,c,d);h.outdated=!1,r.push(h),o+=m+1}o<=s&&r.push(null,new Qe(s-o).updateHeight(e,o));let u=mt.of(r);return(l<0||Math.abs(u.height-this.height)>=Ya||Math.abs(l-this.heightMetrics(e,t).perLine)>=Ya)&&(L1=!0),As(this,u)}else(n||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class qE extends mt{constructor(e,t,n){super(e.length+(t?1:0)+n.length,e.height+n.height,(t?1:0)|(e.outdated||n.outdated?2:0)),this.left=e,this.right=n,this.size=e.size+n.size}get break(){return this.flags&1}blockAt(e,t,n,a){let s=n+this.left.height;return eo))return u;let m=t==we.ByPosNoHeight?we.ByPosNoHeight:we.ByPos;return l?u.join(this.right.lineAt(o,m,n,r,o)):this.left.lineAt(o,m,n,a,s).join(u)}forEachLine(e,t,n,a,s,r){let o=a+this.left.height,l=s+this.left.length+this.break;if(this.break)e=l&&this.right.forEachLine(e,t,n,o,l,r);else{let u=this.lineAt(l,we.ByPos,n,a,s);e=e&&u.from<=t&&r(u),t>u.to&&this.right.forEachLine(Math.max(e,u.to+1),t,n,o,l,r)}}replace(e,t,n){let a=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-a,t-a,n));let s=[];e>0&&this.decomposeLeft(e,s);let r=s.length;for(let o of n)s.push(o);if(e>0&&oc(s,r-1),t=n&&t.push(null)),e>n&&this.right.decomposeLeft(e-n,t)}decomposeRight(e,t){let n=this.left.length,a=n+this.break;if(e>=a)return this.right.decomposeRight(e-a,t);e2*t.size||t.size>2*e.size?mt.of(this.break?[e,null,t]:[e,t]):(this.left=As(this.left,e),this.right=As(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,n=!1,a){let{left:s,right:r}=this,o=t+s.length+this.break,l=null;return a&&a.from<=t+s.length&&a.more?l=s=s.updateHeight(e,t,n,a):s.updateHeight(e,t,n),a&&a.from<=o+r.length&&a.more?l=r=r.updateHeight(e,o,n,a):r.updateHeight(e,o,n),l?this.balanced(s,r):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function oc(i,e){let t,n;i[e]==null&&(t=i[e-1])instanceof Qe&&(n=i[e+1])instanceof Qe&&i.splice(e-1,3,new Qe(t.length+1+n.length))}const QE=5;class O0{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let n=Math.min(t,this.lineEnd),a=this.nodes[this.nodes.length-1];a instanceof yt?a.length+=n-this.pos:(n>this.pos||!this.isCovered)&&this.nodes.push(new yt(n-this.pos,-1,0)),this.writtenTo=n,t>n&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,n){if(e=QE)&&this.addLineDeco(a,s,r)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new yt(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let n=new Qe(t-e);return this.oracle.doc.lineAt(e).to==t&&(n.flags|=4),n}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof yt)return e;let t=new yt(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,n){let a=this.ensureLine();a.length+=n,a.collapsed+=n,a.widgetHeight=Math.max(a.widgetHeight,e),a.breaks+=t,this.writtenTo=this.pos=this.pos+n}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof yt)&&!this.isCovered?this.nodes.push(new yt(0,-1,0)):(this.writtenTou.clientHeight||u.scrollWidth>u.clientWidth)&&m.overflow!="visible"){let c=u.getBoundingClientRect();s=Math.max(s,c.left),r=Math.min(r,c.right),o=Math.max(o,c.top),l=Math.min(u==i.parentNode?a.innerHeight:l,c.bottom)}u=m.position=="absolute"||m.position=="fixed"?u.offsetParent:u.parentNode}else if(u.nodeType==11)u=u.host;else break;return{left:s-t.left,right:Math.max(s,r)-t.left,top:o-(t.top+e),bottom:Math.max(o,l)-(t.top+e)}}function XE(i){let e=i.getBoundingClientRect(),t=i.ownerDocument.defaultView||window;return e.left0&&e.top0}function KE(i,e){let t=i.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class Jr{constructor(e,t,n,a){this.from=e,this.to=t,this.size=n,this.displaySize=a}static same(e,t){if(e.length!=t.length)return!1;for(let n=0;ntypeof a!="function"&&a.class=="cm-lineWrapping");this.heightOracle=new GE(n),this.stateDeco=uc(t),this.heightMap=mt.empty().applyChanges(this.stateDeco,oe.empty,this.heightOracle.setDoc(t.doc),[new Bt(0,0,0,t.doc.length)]);for(let a=0;a<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());a++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=he.set(this.lineGaps.map(a=>a.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let n=0;n<=1;n++){let a=n?t.head:t.anchor;if(!e.some(({from:s,to:r})=>a>=s&&a<=r)){let{from:s,to:r}=this.lineBlockAt(a);e.push(new Sa(s,r))}}return this.viewports=e.sort((n,a)=>n.from-a.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?yl:Ps.get(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(oi(e,this.scaler))})}update(e,t=null){this.state=e.state;let n=this.stateDeco;this.stateDeco=uc(this.state);let a=e.changedRanges,s=Bt.extendWithRanges(a,UE(n,this.stateDeco,e?e.changes:Be.empty(this.state.doc.length))),r=this.heightMap.height,o=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);rc(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),s),(this.heightMap.height!=r||L1)&&(e.flags|=2),o?(this.scrollAnchorPos=e.changes.mapPos(o.from,-1),this.scrollAnchorHeight=o.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=r);let l=s.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.headl.to)||!this.viewportIsAppropriate(l))&&(l=this.getViewport(0,t));let u=l.from!=this.viewport.from||l.to!=this.viewport.to;this.viewport=l,e.flags|=this.updateForViewport(),(u||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(HW)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,n=window.getComputedStyle(t),a=this.heightOracle,s=n.whiteSpace;this.defaultTextDirection=n.direction=="rtl"?ye.RTL:ye.LTR;let r=this.heightOracle.mustRefreshForWrapping(s)||this.mustMeasureContent==="refresh",o=t.getBoundingClientRect(),l=r||this.mustMeasureContent||this.contentDOMHeight!=o.height;this.contentDOMHeight=o.height,this.mustMeasureContent=!1;let u=0,m=0;if(o.width&&o.height){let{scaleX:I,scaleY:k}=ip(t,o);(I>.005&&Math.abs(this.scaleX-I)>.005||k>.005&&Math.abs(this.scaleY-k)>.005)&&(this.scaleX=I,this.scaleY=k,u|=16,r=l=!0)}let c=(parseInt(n.paddingTop)||0)*this.scaleY,d=(parseInt(n.paddingBottom)||0)*this.scaleY;(this.paddingTop!=c||this.paddingBottom!=d)&&(this.paddingTop=c,this.paddingBottom=d,u|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(a.lineWrapping&&(l=!0),this.editorWidth=e.scrollDOM.clientWidth,u|=16);let h=ap(this.view.contentDOM,!1).y;h!=this.scrollParent&&(this.scrollParent=h,this.scrollAnchorHeight=-1,this.scrollOffset=0);let g=this.getScrollOffset();this.scrollOffset!=g&&(this.scrollAnchorHeight=-1,this.scrollOffset=g),this.scrolledToBottom=lp(this.scrollParent||e.win);let f=(this.printing?KE:YE)(t,this.paddingTop),x=f.top-this.pixelViewport.top,b=f.bottom-this.pixelViewport.bottom;this.pixelViewport=f;let v=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(v!=this.inView&&(this.inView=v,v&&(l=!0)),!this.inView&&!this.scrollTarget&&!XE(e.dom))return 0;let w=o.width;if((this.contentDOMWidth!=w||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=o.width,this.editorHeight=e.scrollDOM.clientHeight,u|=16),l){let I=e.docView.measureVisibleLineHeights(this.viewport);if(a.mustRefreshForHeights(I)&&(r=!0),r||a.lineWrapping&&Math.abs(w-this.contentDOMWidth)>a.charWidth){let{lineHeight:k,charWidth:T,textHeight:j}=e.docView.measureTextSize();r=k>0&&a.refresh(s,k,T,j,Math.max(5,w/T),I),r&&(e.docView.minWidth=0,u|=16)}x>0&&b>0?m=Math.max(x,b):x<0&&b<0&&(m=Math.min(x,b)),rc();for(let k of this.viewports){let T=k.from==this.viewport.from?I:e.docView.measureVisibleLineHeights(k);this.heightMap=(r?mt.empty().applyChanges(this.stateDeco,oe.empty,this.heightOracle,[new Bt(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(a,0,r,new HE(k.from,T))}L1&&(u|=2)}let z=!this.viewportIsAppropriate(this.viewport,m)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return z&&(u&2&&(u|=this.updateScaler()),this.viewport=this.getViewport(m,this.scrollTarget),u|=this.updateForViewport()),(u&2||z)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(r?[]:this.lineGaps,e)),u|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),u}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let n=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),a=this.heightMap,s=this.heightOracle,{visibleTop:r,visibleBottom:o}=this,l=new Sa(a.lineAt(r-n*1e3,we.ByHeight,s,0,0).from,a.lineAt(o+(1-n)*1e3,we.ByHeight,s,0,0).to);if(t){let{head:u}=t.range;if(ul.to){let m=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),c=a.lineAt(u,we.ByPos,s,0,0),d;t.y=="center"?d=(c.top+c.bottom)/2-m/2:t.y=="start"||t.y=="nearest"&&u=o+Math.max(10,Math.min(n,250)))&&a>r-2*1e3&&s>1,r=a<<1;if(this.defaultTextDirection!=ye.LTR&&!n)return[];let o=[],l=(m,c,d,h)=>{if(c-mm&&bb.from>=d.from&&b.to<=d.to&&Math.abs(b.from-m)b.fromv));if(!x){if(cw.from<=c&&w.to>=c)){let w=t.moveToLineBoundary(M.cursor(c),!1,!0).head;w>m&&(c=w)}let b=this.gapSize(d,m,c,h),v=n||b<2e6?b:2e6;x=new Jr(m,c,b,v)}o.push(x)},u=m=>{if(m.length2e6)for(let k of e)k.from>=m.from&&k.fromm.from&&l(m.from,h,m,c),gt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let n=[];ie.spans(t,this.viewport.from,this.viewport.to,{span(s,r){n.push({from:s,to:r})},point(){}},20);let a=0;if(n.length!=this.visibleRanges.length)a=12;else for(let s=0;s=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||oi(this.heightMap.lineAt(e,we.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||oi(this.heightMap.lineAt(this.scaler.fromDOM(e),we.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop*this.scaleY:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+12-this.paddingTop);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return oi(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class Sa{constructor(e,t){this.from=e,this.to=t}}function tN(i,e,t){let n=[],a=i,s=0;return ie.spans(t,i,e,{span(){},point(r,o){r>a&&(n.push({from:a,to:r}),s+=r-a),a=o}},20),a=1)return e[e.length-1].to;let n=Math.floor(i*t);for(let a=0;;a++){let{from:s,to:r}=e[a],o=r-s;if(n<=o)return s+n;n-=o}}function _a(i,e){let t=0;for(let{from:n,to:a}of i.ranges){if(e<=a){t+=e-n;break}t+=a-n}return t/i.total}function nN(i,e){for(let t of i)if(e(t))return t}const yl={toDOM(i){return i},fromDOM(i){return i},scale:1,eq(i){return i==this}};function uc(i){let e=i.facet(sr).filter(n=>typeof n!="function"),t=i.facet(C0).filter(n=>typeof n!="function");return t.length&&e.push(ie.join(t)),e}class Ps{constructor(e,t){this.scale=e,this.viewports=t}static get(e,t,n){let a=0,s=0,r=0,o=n.map(({from:u,to:m})=>{let c=t.lineAt(u,we.ByPos,e,0,0).top,d=t.lineAt(m,we.ByPos,e,0,0).bottom;return a+=d-c,{from:u,to:m,top:c,bottom:d,domTop:0,domBottom:0}});if(t.height-a<10)return yl;let l=(7e6-a)/(t.height-a);for(let u of o)u.domTop=r+(u.top-s)*l,r=u.domBottom=u.domTop+(u.bottom-u.top),s=u.bottom;return new Ps(l,o)}toDOM(e){for(let t=0,n=0,a=0;;t++){let s=tt.from==e.viewports[n].from&&t.to==e.viewports[n].to):!1}}function oi(i,e){if(e.scale==1)return i;let t=e.toDOM(i.top),n=e.toDOM(i.bottom);return new Rt(i.from,i.length,t,n-t,Array.isArray(i._content)?i._content.map(a=>oi(a,e)):i._content)}const ja=V.define({combine:i=>i.join(" ")}),wl=V.define({combine:i=>i.indexOf(!0)>-1}),zl=Zn.newName(),Hp=Zn.newName(),Vp=Zn.newName(),qp={"&light":"."+Hp,"&dark":"."+Vp};function Il(i,e,t){return new Zn(e,{finish(n){return/&/.test(n)?n.replace(/&\w*/,a=>{if(a=="&")return i;if(!t||!t[a])throw new RangeError(`Unsupported selector: ${a}`);return t[a]}):i+" "+n}})}const iN=Il("."+zl,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{userSelect:"none",position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},".cm-panels-top":{top:"0"},".cm-panels-bottom":{bottom:"0"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"baseline",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{background:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 0) no-repeat",backgroundSize:".4em",backgroundPosition:"calc(min(50%, 0px)) center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},qp),aN={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Rr=G.ie&&G.ie_version<=11;class sN{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new DW,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let n of t)this.queue.push(n);(G.ie&&G.ie_version<=11||G.ios&&e.composing)&&t.some(n=>n.type=="childList"&&n.removedNodes.length||n.type=="characterData"&&n.oldValue.length>n.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&G.android&&e.constructor.EDIT_CONTEXT!==!1&&!(G.chrome&&G.chrome_version<126)&&(this.editContext=new oN(e),e.state.facet(gn)&&(e.contentDOM.editContext=this.editContext.editContext)),Rr&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(this.pendingRecords().length>0),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,n)=>t!=e[n]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:n}=this,a=this.selectionRange;if(n.state.facet(gn)?n.root.activeElement!=this.dom:!xi(this.dom,a))return;let s=a.anchorNode&&n.docView.tile.nearest(a.anchorNode);if(s&&s.isWidget()&&s.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(G.ie&&G.ie_version<=11||G.android&&G.chrome)&&!n.state.selection.main.empty&&a.focusNode&&bi(a.focusNode,a.focusOffset,a.anchorNode,a.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=Mi(e.root);if(!t)return!1;let n=G.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&rN(this.view,t)||t;if(!n||this.selectionRange.eq(n))return!1;let a=xi(this.dom,n);return a&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let s=this.delayedAndroidKey;s&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=s.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&s.force&&j1(this.dom,s.key,s.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(a)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,n=-1,a=!1;for(let s of e){let r=this.readMutation(s);r&&(r.typeOver&&(a=!0),t==-1?{from:t,to:n}=r:(t=Math.min(r.from,t),n=Math.max(r.to,n)))}return{from:t,to:n,typeOver:a}}readChange(){let{from:e,to:t,typeOver:n}=this.processRecords(),a=this.selectionChanged&&xi(this.dom,this.selectionRange);if(e<0&&!a)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let s=new IE(this.view,e,t,n);return this.view.docView.domChanged={newSel:s.newSel?s.newSel.main:null},s}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.selectionChanged,n=this.readChange();if(!n)return this.view.requestMeasure(),!1;let a=this.view.state,s=Mp(this.view,n);return this.view.state==a&&(n.domChanged||t)&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let n=mc(t,e.previousSibling||e.target.previousSibling,-1),a=mc(t,e.nextSibling||e.target.nextSibling,1);return{from:n?t.posAfter(n):t.posAtStart,to:a?t.posBefore(a):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(gn)!=e.state.facet(gn)&&(e.view.contentDOM.editContext=e.state.facet(gn)?this.editContext.editContext:null))}destroy(){var e,t,n;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(n=this.resizeScroll)===null||n===void 0||n.disconnect();for(let a of this.scrollTargets)a.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function mc(i,e,t){for(;e;){let n=Ae.get(e);if(n&&n.parent==i)return n;let a=e.parentNode;e=a!=i.dom?a:t>0?e.nextSibling:e.previousSibling}return null}function cc(i,e){let t=e.startContainer,n=e.startOffset,a=e.endContainer,s=e.endOffset,r=i.docView.domAtPos(i.state.selection.main.anchor,1);return bi(r.node,r.offset,a,s)&&([t,n,a,s]=[a,s,t,n]),{anchorNode:t,anchorOffset:n,focusNode:a,focusOffset:s}}function rN(i,e){if(e.getComposedRanges){let a=e.getComposedRanges(i.root)[0];if(a)return cc(i,a)}let t=null;function n(a){a.preventDefault(),a.stopImmediatePropagation(),t=a.getTargetRanges()[0]}return i.contentDOM.addEventListener("beforeinput",n,!0),i.dom.ownerDocument.execCommand("indent"),i.contentDOM.removeEventListener("beforeinput",n,!0),t?cc(i,t):null}class oN{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=n=>{let a=e.state.selection.main,{anchor:s,head:r}=a,o=this.toEditorPos(n.updateRangeStart),l=this.toEditorPos(n.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:n.updateRangeStart,editorBase:o,drifted:!1});let u=l-o>n.text.length;o==this.from&&sthis.to&&(l=s);let m=Bp(e.state.sliceDoc(o,l),n.text,(u?a.from:a.to)-o,u?"end":null);if(!m){let d=M.single(this.toEditorPos(n.selectionStart),this.toEditorPos(n.selectionEnd));bl(d,a)||e.dispatch({selection:d,userEvent:"select"});return}let c={from:m.from+o,to:m.toA+o,insert:oe.of(n.text.slice(m.from,m.toB).split(` +`))};if((G.mac||G.android)&&c.from==r-1&&/^\. ?$/.test(n.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(c={from:o,to:l,insert:oe.of([n.text.replace("."," ")])}),this.pendingContextChange=c,!e.state.readOnly){let d=this.to-this.from+(c.to-c.from+c.insert.length);P0(e,c,M.single(this.toEditorPos(n.selectionStart,d),this.toEditorPos(n.selectionEnd,d)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),c.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,n.updateRangeStart-1),Math.min(t.text.length,n.updateRangeStart+1)))&&this.handlers.compositionend(n)},this.handlers.characterboundsupdate=n=>{let a=[],s=null;for(let r=this.toEditorPos(n.rangeStart),o=this.toEditorPos(n.rangeEnd);r{let a=[];for(let s of n.getTextFormats()){let r=s.underlineStyle,o=s.underlineThickness;if(!/none/i.test(r)&&!/none/i.test(o)){let l=this.toEditorPos(s.rangeStart),u=this.toEditorPos(s.rangeEnd);if(l{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:n}=this.composing;this.composing=null,n&&this.reset(e.state)}};for(let n in this.handlers)t.addEventListener(n,this.handlers[n]);this.measureReq={read:n=>{let a=Mi(n.root);a&&a.rangeCount&&this.editContext.updateSelectionBounds(a.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,n=!1,a=this.pendingContextChange;return e.changes.iterChanges((s,r,o,l,u)=>{if(n)return;let m=u.length-(r-s);if(a&&r>=a.to)if(a.from==s&&a.to==r&&a.insert.eq(u)){a=this.pendingContextChange=null,t+=m,this.to+=m;return}else a=null,this.revertPending(e.state);if(s+=t,r+=t,r<=this.from)this.from+=m,this.to+=m;else if(sthis.to||this.to-this.from+u.length>3e4){n=!0;return}this.editContext.updateText(this.toContextPos(s),this.toContextPos(r),u.toString()),this.to+=m}t+=m}),a&&!n&&this.revertPending(e.state),!n}update(e){let t=this.pendingContextChange,n=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(n.from,n.to)&&e.transactions.some(a=>!a.isUserEvent("input.type")&&a.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,n=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),a=this.toContextPos(t.head);(this.editContext.selectionStart!=n||this.editContext.selectionEnd!=a)&&this.editContext.updateSelection(n,a)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let n=this.composing;return n&&n.drifted?n.editorBase+(e-n.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class q{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.clearAnnouncement=-1,this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:n}=e;this.dispatchTransactions=e.dispatchTransactions||n&&(a=>a.forEach(s=>n(s,this)))||(a=>this.update(a)),this.dispatch=this.dispatch.bind(this),this._root=e.root||MW(e.parent)||document,this.viewState=new lc(this,e.state||re.create(e)),e.scrollTo&&e.scrollTo.is(za)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(w1).map(a=>new Lr(a));for(let a of this.plugins)a.update(this);this.observer=new sN(this),this.inputState=new _E(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Um(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof $e?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,n=!1,a,s=this.state;for(let d of e){if(d.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=d.state}if(this.destroyed){this.viewState.state=s;return}let r=this.hasFocus,o=0,l=null;e.some(d=>d.annotation(Fp))?(this.inputState.notifiedFocused=r,o=1):r!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=r,l=Jp(s,r),l||(o=1));let u=this.observer.delayedAndroidKey,m=null;if(u?(this.observer.clearDelayedAndroidKey(),m=this.observer.readChange(),(m&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(m=null)):this.observer.clear(),s.facet(re.phrases)!=this.state.facet(re.phrases))return this.setState(s);a=_s.create(this,s,e),a.flags|=o;let c=this.viewState.scrollTarget;try{this.updateState=2;for(let d of e){if(c&&(c=c.map(d.changes)),d.scrollIntoView){let{main:h}=d.state.selection,{x:g,y:f}=this.state.facet(q.cursorScrollMargin);c=new C1(h.empty?h:M.cursor(h.head,h.head>h.anchor?-1:1),"nearest","nearest",f,g)}for(let h of d.effects)h.is(za)&&(c=h.value.clip(this.state))}this.viewState.update(a,c),this.bidiCache=Os.update(this.bidiCache,a.changes),a.empty||(this.updatePlugins(a),this.inputState.update(a)),t=this.docView.update(a),this.state.facet(ri)!=this.styleModules&&this.mountStyles(),n=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(d=>d.isUserEvent("select.pointer")))}finally{this.updateState=0}if(a.startState.facet(ja)!=a.state.facet(ja)&&(this.viewState.mustMeasureContent=!0),(t||n||c||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!a.empty)for(let d of this.state.facet(gl))try{d(a)}catch(h){zt(this.state,h,"update listener")}(l||m)&&Promise.resolve().then(()=>{l&&this.state==l.startState&&this.dispatch(l),m&&!Mp(this,m)&&u.force&&j1(this.contentDOM,u.key,u.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let n of this.plugins)n.destroy(this);this.viewState=new lc(this,e),this.plugins=e.facet(w1).map(n=>new Lr(n)),this.pluginMap.clear();for(let n of this.plugins)n.update(this);this.docView.destroy(),this.docView=new Um(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(w1),n=e.state.facet(w1);if(t!=n){let a=[];for(let s of n){let r=t.indexOf(s);if(r<0)a.push(new Lr(s));else{let o=this.plugins[r];o.mustUpdate=e,a.push(o)}}for(let s of this.plugins)s.mustUpdate!=e&&s.destroy(this);this.plugins=a,this.pluginMap.clear()}else for(let a of this.plugins)a.mustUpdate=e;for(let a=0;a-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,n=this.viewState.scrollParent,a=this.viewState.getScrollOffset(),{scrollAnchorPos:s,scrollAnchorHeight:r,scaleY:o}=this.viewState;Math.abs(a-this.viewState.scrollOffset)>1&&(r=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(r<0){if(lp(n||this.win))s=-1,r=this.viewState.heightMap.height/this.viewState.scaleY;else{let g=this.viewState.scrollAnchorAt(a);s=g.from,r=g.top}o=this.viewState.scaleY}this.updateState=1;let u=this.viewState.measure();if(!u&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let m=[];u&4||([this.measureRequests,m]=[m,this.measureRequests]);let c=m.map(g=>{try{return g.read(this)}catch(f){return zt(this.state,f),dc}}),d=_s.create(this,this.state,[]),h=!1;d.flags|=u,t?t.flags|=u:t=d,this.updateState=2,d.empty||(this.updatePlugins(d),this.inputState.update(d),this.updateAttrs(),h=this.docView.update(d),h&&this.docViewUpdate());for(let g=0;g1||f<-1)&&!(G.ios&&this.inputState.lastIOSMomentumScroll>Date.now()-100)&&(n==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){a=a+f,n?s<0?n.scrollTop=n.scrollHeight:n.scrollTop+=f:this.win.scrollBy(0,f),r=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(gl))l(t)}get themeClasses(){return zl+" "+(this.state.facet(wl)?Vp:Hp)+" "+this.state.facet(ja)}updateAttrs(){let e=hc(this,Sp,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(gn)?"true":"false",class:"cm-content",style:`${G.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),hc(this,j0,t);let n=this.observer.ignore(()=>{let a=Rm(this.contentDOM,this.contentAttrs,t),s=Rm(this.dom,this.editorAttrs,e);return a||s});return this.editorAttrs=e,this.contentAttrs=t,n}showAnnouncements(e){let t=!0;for(let n of e)for(let a of n.effects)if(a.is(q.announce)){t&&(this.announceDOM.textContent="",this.win.clearTimeout(this.clearAnnouncement),this.clearAnnouncement=this.win.setTimeout(()=>{this.announceDOM.textContent=" "},200),t=!1);let s=this.announceDOM.appendChild(document.createElement("div"));s.textContent=a.value}}mountStyles(){this.styleModules=this.state.facet(ri);let e=this.state.facet(q.cspNonce);Zn.mount(this.root,this.styleModules.concat(iN).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;tn.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,n){return Fr(this,e,$m(this,e,t,n))}moveByGroup(e,t){return Fr(this,e,$m(this,e,t,n=>xE(this,e.head,n)))}visualLineSide(e,t){return t?M.cursor(e.to,1):M.cursor(e.from,-1)}moveToLineBoundary(e,t,n=!0){return fE(this,e,t,n)}moveVertically(e,t,n){return Fr(this,e,bE(this,e,t,n))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let n=xl(this,e,t);return n&&n.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),xl(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let n=this.state.doc.lineAt(e),a=this.bidiSpans(n),s=a[rn.find(a,e-n.from,-1,t)];return n.length&&(e==n.from&&t<0||e==n.to&&t>0)&&s.dir!=this.textDirectionAt(n.from)&&(e==n.to?(e=n.from+s.from,t=1):(e=n.from+s.to,t=-1)),this.docView.coordsAt(e,t,s.dir==ye.RTL)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(zp)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>lN)return gp(e.length);let t=this.textDirectionAt(e.from),n;for(let s of this.bidiCache)if(s.from==e.from&&s.dir==t&&(s.fresh||hp(s.isolates,n=Vm(this,e))))return s.order;n||(n=Vm(this,e));let a=JW(e.text,t,n);return this.bidiCache.push(new Os(e.from,e.to,t,n,!0,a)),a}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||G.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{op(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.win.clearTimeout(this.clearAnnouncement),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var n,a,s,r;return za.of(new C1(typeof e=="number"?M.cursor(e):e,(n=t.y)!==null&&n!==void 0?n:"nearest",(a=t.x)!==null&&a!==void 0?a:"nearest",(s=t.yMargin)!==null&&s!==void 0?s:5,(r=t.xMargin)!==null&&r!==void 0?r:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,n=this.viewState.scrollAnchorAt(e);return za.of(new C1(M.cursor(n.from),"start","start",n.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return Wt.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return Wt.define(()=>({}),{eventObservers:e})}static theme(e,t){let n=Zn.newName(),a=[ja.of(n),ri.of(Il(`.${n}`,e))];return t&&t.dark&&a.push(wl.of(!0)),a}static baseTheme(e){return u1.lowest(ri.of(Il("."+zl,e,qp)))}static findFromDOM(e){var t;let n=e.querySelector(".cm-content"),a=n&&Ae.get(n)||Ae.get(e);return((t=a==null?void 0:a.root)===null||t===void 0?void 0:t.view)||null}}q.styleModule=ri;q.inputHandler=yp;q.clipboardInputFilter=T0;q.clipboardOutputFilter=_0;q.scrollHandler=Ip;q.focusChangeEffect=wp;q.perLineTextDirection=zp;q.exceptionSink=vp;q.updateListener=gl;q.editable=gn;q.mouseSelectionStyle=bp;q.dragMovesSelection=xp;q.clickAddsSelectionRange=fp;q.decorations=sr;q.blockWrappers=Tp;q.outerDecorations=C0;q.atomicRanges=$i;q.bidiIsolatedRanges=_p;q.cursorScrollMargin=V.define({combine:i=>{let e=5,t=5;for(let n of i)typeof n=="number"?e=t=n:{x:e,y:t}=n;return{x:e,y:t}}});q.scrollMargins=Cp;q.darkTheme=wl;q.cspNonce=V.define({combine:i=>i.length?i[0]:""});q.contentAttributes=j0;q.editorAttributes=Sp;q.lineWrapping=q.contentAttributes.of({class:"cm-lineWrapping"});q.announce=de.define();const lN=4096,dc={};class Os{constructor(e,t,n,a,s,r){this.from=e,this.to=t,this.dir=n,this.isolates=a,this.fresh=s,this.order=r}static update(e,t){if(t.empty&&!e.some(s=>s.fresh))return e;let n=[],a=e.length?e[e.length-1].dir:ye.LTR;for(let s=Math.max(0,e.length-10);s=0;a--){let s=n[a],r=typeof s=="function"?s(i):s;r&&I0(r,t)}return t}const uN=G.mac?"mac":G.windows?"win":G.linux?"linux":"key";function mN(i,e){const t=i.split(/-(?!$)/);let n=t[t.length-1];n=="Space"&&(n=" ");let a,s,r,o;for(let l=0;ln.concat(a),[]))),t}let Cn=null;const hN=4e3;function gN(i,e=uN){let t=Object.create(null),n=Object.create(null),a=(r,o)=>{let l=n[r];if(l==null)n[r]=o;else if(l!=o)throw new Error("Key binding "+r+" is used both as a regular binding and as a multi-stroke prefix")},s=(r,o,l,u,m)=>{var c,d;let h=t[r]||(t[r]=Object.create(null)),g=o.split(/ (?!$)/).map(b=>mN(b,e));for(let b=1;b{let z=Cn={view:w,prefix:v,scope:r};return setTimeout(()=>{Cn==z&&(Cn=null)},hN),!0}]})}let f=g.join(" ");a(f,!1);let x=h[f]||(h[f]={preventDefault:!1,stopPropagation:!1,run:((d=(c=h._any)===null||c===void 0?void 0:c.run)===null||d===void 0?void 0:d.slice())||[]});l&&x.run.push(l),u&&(x.preventDefault=!0),m&&(x.stopPropagation=!0)};for(let r of i){let o=r.scope?r.scope.split(" "):["editor"];if(r.any)for(let u of o){let m=t[u]||(t[u]=Object.create(null));m._any||(m._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:c}=r;for(let d in m)m[d].run.push(h=>c(h,kl))}let l=r[e]||r.key;if(l)for(let u of o)s(u,l,r.run,r.preventDefault,r.stopPropagation),r.shift&&s(u,"Shift-"+l,r.shift,r.preventDefault,r.stopPropagation)}return t}let kl=null;function pN(i,e,t,n){kl=e;let a=_W(e),s=At(a,0),r=hn(s)==a.length&&a!=" ",o="",l=!1,u=!1,m=!1;Cn&&Cn.view==t&&Cn.scope==n&&(o=Cn.prefix+" ",Lp.indexOf(e.keyCode)<0&&(u=!0,Cn=null));let c=new Set,d=x=>{if(x){for(let b of x.run)if(!c.has(b)&&(c.add(b),b(t)))return x.stopPropagation&&(m=!0),!0;x.preventDefault&&(x.stopPropagation&&(m=!0),u=!0)}return!1},h=i[n],g,f;return h&&(d(h[o+Ca(a,e,!r)])?l=!0:r&&(e.altKey||e.metaKey||e.ctrlKey)&&!(G.windows&&e.ctrlKey&&e.altKey)&&!(G.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(g=Ln[e.keyCode])&&g!=a?(d(h[o+Ca(g,e,!0)])||e.shiftKey&&(f=Oi[e.keyCode])!=a&&f!=g&&d(h[o+Ca(f,e,!1)]))&&(l=!0):r&&e.shiftKey&&d(h[o+Ca(a,e,!0)])&&(l=!0),!l&&d(h._any)&&(l=!0)),u&&(l=!0),l&&m&&e.stopPropagation(),kl=null,l}class ur{constructor(e,t,n,a,s){this.className=e,this.left=t,this.top=n,this.width=a,this.height=s}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,n){if(n.empty){let a=e.coordsAtPos(n.head,n.assoc||1);if(!a)return[];let s=Qp(e);return[new ur(t,a.left-s.left,a.top-s.top,null,a.bottom-a.top)]}else return fN(e,t,n)}}function Qp(i){let e=i.scrollDOM.getBoundingClientRect();return{left:(i.textDirection==ye.LTR?e.left:e.right-i.scrollDOM.clientWidth*i.scaleX)-i.scrollDOM.scrollLeft*i.scaleX,top:e.top-i.scrollDOM.scrollTop*i.scaleY}}function pc(i,e,t,n){let a=i.coordsAtPos(e,t*2);if(!a)return n;let s=i.dom.getBoundingClientRect(),r=(a.top+a.bottom)/2,o=i.posAtCoords({x:s.left+1,y:r}),l=i.posAtCoords({x:s.right-1,y:r});return o==null||l==null?n:{from:Math.max(n.from,Math.min(o,l)),to:Math.min(n.to,Math.max(o,l))}}function fN(i,e,t){if(t.to<=i.viewport.from||t.from>=i.viewport.to)return[];let n=Math.max(t.from,i.viewport.from),a=Math.min(t.to,i.viewport.to),s=i.textDirection==ye.LTR,r=i.contentDOM,o=r.getBoundingClientRect(),l=Qp(i),u=r.querySelector(".cm-line"),m=u&&window.getComputedStyle(u),c=o.left+(m?parseInt(m.paddingLeft)+Math.min(0,parseInt(m.textIndent)):0),d=o.right-(m?parseInt(m.paddingRight):0),h=fl(i,n,1),g=fl(i,a,-1),f=h.type==Ye.Text?h:null,x=g.type==Ye.Text?g:null;if(f&&(i.lineWrapping||h.widgetLineBreaks)&&(f=pc(i,n,1,f)),x&&(i.lineWrapping||g.widgetLineBreaks)&&(x=pc(i,a,-1,x)),f&&x&&f.from==x.from&&f.to==x.to)return v(w(t.from,t.to,f));{let I=f?w(t.from,null,f):z(h,!1),k=x?w(null,t.to,x):z(g,!0),T=[];return(f||h).to<(x||g).from-(f&&x?1:0)||h.widgetLineBreaks>1&&I.bottom+i.defaultLineHeight/2C&&E.from=ee)break;J>U&&P(Math.max(fe,U),I==null&&fe<=C,Math.min(J,ee),k==null&&J>=Z,Ie.dir)}if(U=ge.to+1,U>=ee)break}return O.length==0&&P(C,I==null,Z,k==null,i.textDirection),{top:j,bottom:D,horizontal:O}}function z(I,k){let T=o.top+(k?I.top:I.bottom);return{top:T,bottom:T,horizontal:[]}}}function xN(i,e){return i.constructor==e.constructor&&i.eq(e)}class bN{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(Xa)!=e.state.facet(Xa)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,n=e.facet(Xa);for(;t!xN(t,this.drawn[n]))){let t=this.dom.firstChild,n=0;for(let a of e)a.update&&t&&a.constructor&&this.drawn[n].constructor&&a.update(t,this.drawn[n])?(t=t.nextSibling,n++):this.dom.insertBefore(a.draw(),t);for(;t;){let a=t.nextSibling;t.remove(),t=a}this.drawn=e,G.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const Xa=V.define();function vN(i){return[Wt.define(e=>new bN(e,i)),Xa.of(i)]}const Aa="-10000px";class yN{constructor(e,t,n,a){this.facet=t,this.createTooltipView=n,this.removeTooltipView=a,this.input=e.state.facet(t),this.tooltips=this.input.filter(r=>r);let s=null;this.tooltipViews=this.tooltips.map(r=>s=n(r,s))}update(e,t){var n;let a=e.state.facet(this.facet),s=a.filter(l=>l);if(a===this.input){for(let l of this.tooltipViews)l.update&&l.update(e);return!1}let r=[],o=t?[]:null;for(let l=0;lt[u]=l),t.length=o.length),this.input=a,this.tooltips=s,this.tooltipViews=r,!0}}function Up(i){let e=i.dom.ownerDocument.documentElement,t=e.clientWidth,n=getComputedStyle(e);if(!/stable/.test(n.scrollbarGutter||""))return{left:0,right:t};let a=e.getBoundingClientRect(),s=i.win.scrollX;return{left:Math.max(0,a.left+s-parseFloat(n.marginLeft)),right:Math.min(t,a.right+s+parseFloat(n.marginRight))}}function wN(i){let{left:e,right:t}=Up(i);return{top:0,left:e,right:t,bottom:i.dom.ownerDocument.documentElement.clientHeight}}const Gr=V.define({combine:i=>{var e,t,n;return{position:G.ios?"absolute":((e=i.find(a=>a.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=i.find(a=>a.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((n=i.find(a=>a.tooltipSpace))===null||n===void 0?void 0:n.tooltipSpace)||wN}}}),fc=new WeakMap,$p=Wt.fromClass(class{constructor(i){this.view=i,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=i.state.facet(Gr);this.position=e.position,this.parent=e.parent,this.classes=i.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new yN(i,Yp,(t,n)=>this.createTooltip(t,n),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),i.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let i of this.manager.tooltipViews)this.intersectionObserver.observe(i.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(i){i.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(i,this.above);e&&this.observeIntersection();let t=e||i.geometryChanged,n=i.state.facet(Gr);if(n.position!=this.position&&!this.madeAbsolute){this.position=n.position;for(let a of this.manager.tooltipViews)a.dom.style.position=this.position;t=!0}if(n.parent!=this.parent){this.parent&&this.container.remove(),this.parent=n.parent,this.createContainer();for(let a of this.manager.tooltipViews)this.container.appendChild(a.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(i,e){let t=i.create(this.view),n=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),i.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let a=document.createElement("div");a.className="cm-tooltip-arrow",t.dom.appendChild(a)}return t.dom.style.position=this.position,t.dom.style.top=Aa,t.dom.style.left="0px",this.container.insertBefore(t.dom,n),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var i,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let n of this.manager.tooltipViews)n.dom.remove(),(i=n.destroy)===null||i===void 0||i.call(n);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let i=1,e=1,t=!1,n=0;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:r}=this.manager.tooltipViews[0];if(G.safari){let o=r.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!r.offsetParent&&r.offsetParent!=this.container.ownerDocument.body}if(t||this.position=="absolute")if(this.parent){let r=this.parent.getBoundingClientRect();r.width&&r.height&&(i=r.width/this.parent.offsetWidth,e=r.height/this.parent.offsetHeight)}else({scaleX:i,scaleY:e}=this.view.viewState);else n=Up(this.view).left;let a=this.view.scrollDOM.getBoundingClientRect(),s=A0(this.view);return{visible:{left:a.left+s.left,top:a.top+s.top,right:a.right-s.right,bottom:a.bottom-s.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((r,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(r.pos):this.view.coordsAtPos(r.pos)}),size:this.manager.tooltipViews.map(({dom:r})=>r.getBoundingClientRect()),space:this.view.state.facet(Gr).tooltipSpace(this.view),scaleX:i,scaleY:e,makeAbsolute:t,fixedLeft:n}}writeMeasure(i){var e;if(i.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let o of this.manager.tooltipViews)o.dom.style.position="absolute"}let{visible:t,space:n,scaleX:a,scaleY:s}=i,r=[];for(let o=0;o=Math.min(t.bottom,n.bottom)||c.rightMath.min(t.right,n.right)+.1)){m.style.top=Aa;continue}let h=l.arrow?u.dom.querySelector(".cm-tooltip-arrow"):null,g=h?7:0,f=d.right-d.left,x=(e=fc.get(u))!==null&&e!==void 0?e:d.bottom-d.top,b=u.offset||IN,v=this.view.textDirection==ye.LTR,w=d.width>n.right-n.left?v?n.left:n.right-d.width:v?Math.max(n.left,Math.min(c.left-(h?14:0)+b.x,n.right-f)):Math.min(Math.max(n.left,c.left-f+(h?14:0)-b.x),n.right-f),z=this.above[o];!l.strictSide&&(z?c.top-x-g-b.yn.bottom)&&z==n.bottom-c.bottom>c.top-n.top&&(z=this.above[o]=!z);let I=(z?c.top-n.top:n.bottom-c.bottom)-g;if(Iw&&j.topk&&(k=z?j.top-x-2-g:j.bottom+g+2);if(this.position=="absolute"?(m.style.top=(k-i.parent.top)/s+"px",xc(m,(w-i.parent.left)/a)):(m.style.top=k/s+"px",xc(m,(w-i.fixedLeft)/a)),h){let j=c.left+(v?b.x:-b.x)-(w+14-7);h.style.left=j/a+"px"}u.overlap!==!0&&r.push({left:w,top:k,right:T,bottom:k+x}),m.classList.toggle("cm-tooltip-above",z),m.classList.toggle("cm-tooltip-below",!z),u.positioned&&u.positioned(i.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let i of this.manager.tooltipViews)i.dom.style.top=Aa}},{eventObservers:{scroll(){this.maybeMeasure()}}});function xc(i,e){let t=parseInt(i.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(i.style.left=e+"px")}const zN=q.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),IN={x:0,y:0},Yp=V.define({enables:[$p,zN]});function Xp(i,e){let t=i.plugin($p);if(!t)return null;let n=t.manager.tooltips.indexOf(e);return n<0?null:t.manager.tooltipViews[n]}class un extends Bn{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}un.prototype.elementClass="";un.prototype.toDOM=void 0;un.prototype.mapMode=st.TrackBefore;un.prototype.startSide=un.prototype.endSide=-1;un.prototype.point=!0;const yi=V.define(),kN=V.define(),SN={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>ie.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},wi=V.define();function TN(i){return[Kp(),wi.of({...SN,...i})]}const bc=V.define({combine:i=>i.some(e=>e)});function Kp(i){return[_N]}const _N=Wt.fromClass(class{constructor(i){this.view=i,this.domAfter=null,this.prevViewport=i.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=i.state.facet(wi).map(e=>new yc(i,e)),this.fixed=!i.state.facet(bc);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),i.scrollDOM.insertBefore(this.dom,i.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(i){if(this.updateGutters(i)){let e=this.prevViewport,t=i.view.viewport,n=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(n<(t.to-t.from)*.8)}if(i.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(bc)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=i.view.viewport}syncGutters(i){let e=this.dom.nextSibling;i&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=ie.iter(this.view.state.facet(yi),this.view.viewport.from),n=[],a=this.gutters.map(s=>new jN(s,this.view.viewport,-this.view.documentPadding.top));for(let s of this.view.viewportLineBlocks)if(n.length&&(n=[]),Array.isArray(s.type)){let r=!0;for(let o of s.type)if(o.type==Ye.Text&&r){Sl(t,n,o.from);for(let l of a)l.line(this.view,o,n);r=!1}else if(o.widget)for(let l of a)l.widget(this.view,o)}else if(s.type==Ye.Text){Sl(t,n,s.from);for(let r of a)r.line(this.view,s,n)}else if(s.widget)for(let r of a)r.widget(this.view,s);for(let s of a)s.finish();i&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(i){let e=i.startState.facet(wi),t=i.state.facet(wi),n=i.docChanged||i.heightChanged||i.viewportChanged||!ie.eq(i.startState.facet(yi),i.state.facet(yi),i.view.viewport.from,i.view.viewport.to);if(e==t)for(let a of this.gutters)a.update(i)&&(n=!0);else{n=!0;let a=[];for(let s of t){let r=e.indexOf(s);r<0?a.push(new yc(this.view,s)):(this.gutters[r].update(i),a.push(this.gutters[r]))}for(let s of this.gutters)s.dom.remove(),a.indexOf(s)<0&&s.destroy();for(let s of a)s.config.side=="after"?this.getDOMAfter().appendChild(s.dom):this.dom.appendChild(s.dom);this.gutters=a}return n}destroy(){for(let i of this.gutters)i.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:i=>q.scrollMargins.of(e=>{let t=e.plugin(i);if(!t||t.gutters.length==0||!t.fixed)return null;let n=t.dom.offsetWidth*e.scaleX,a=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==ye.LTR?{left:n,right:a}:{right:n,left:a}})});function vc(i){return Array.isArray(i)?i:[i]}function Sl(i,e,t){for(;i.value&&i.from<=t;)i.from==t&&e.push(i.value),i.next()}class jN{constructor(e,t,n){this.gutter=e,this.height=n,this.i=0,this.cursor=ie.iter(e.markers,t.from)}addElement(e,t,n){let{gutter:a}=this,s=(t.top-this.height)/e.scaleY,r=t.height/e.scaleY;if(this.i==a.elements.length){let o=new ef(e,r,s,n);a.elements.push(o),a.dom.appendChild(o.dom)}else a.elements[this.i].update(e,r,s,n);this.height=t.bottom,this.i++}line(e,t,n){let a=[];Sl(this.cursor,a,t.from),n.length&&(a=a.concat(n));let s=this.gutter.config.lineMarker(e,t,a);s&&a.unshift(s);let r=this.gutter;a.length==0&&!r.config.renderEmptyElements||this.addElement(e,t,a)}widget(e,t){let n=this.gutter.config.widgetMarker(e,t.widget,t),a=n?[n]:null;for(let s of e.state.facet(kN)){let r=s(e,t.widget,t);r&&(a||(a=[])).push(r)}a&&this.addElement(e,t,a)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class yc{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let n in t.domEventHandlers)this.dom.addEventListener(n,a=>{let s=a.target,r;if(s!=this.dom&&this.dom.contains(s)){for(;s.parentNode!=this.dom;)s=s.parentNode;let l=s.getBoundingClientRect();r=(l.top+l.bottom)/2}else r=a.clientY;let o=e.lineBlockAtHeight(r-e.documentTop);t.domEventHandlers[n](e,o,a)&&a.preventDefault()});this.markers=vc(t.markers(e)),t.initialSpacer&&(this.spacer=new ef(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=vc(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let a=this.config.updateSpacer(this.spacer.markers[0],e);a!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[a])}let n=e.view.viewport;return!ie.eq(this.markers,t,n.from,n.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class ef{constructor(e,t,n,a){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,n,a)}update(e,t,n,a){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=n&&(this.dom.style.marginTop=(this.above=n)?n+"px":""),CN(this.markers,a)||this.setMarkers(e,a)}setMarkers(e,t){let n="cm-gutterElement",a=this.dom.firstChild;for(let s=0,r=0;;){let o=r,l=ss(o,l,u)||r(o,l,u):r}return n}})}});class Hr extends un{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function Vr(i,e){return i.state.facet(z1).formatNumber(e,i.state)}const ON=wi.compute([z1],i=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(AN)},lineMarker(e,t,n){return n.some(a=>a.toDOM)?null:new Hr(Vr(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,n)=>{for(let a of e.state.facet(PN)){let s=a(e,t,n);if(s)return s}return null},lineMarkerChange:e=>e.startState.facet(z1)!=e.state.facet(z1),initialSpacer(e){return new Hr(Vr(e,wc(e.state.doc.lines)))},updateSpacer(e,t){let n=Vr(t.view,wc(t.view.state.doc.lines));return n==e.number?e:new Hr(n)},domEventHandlers:i.facet(z1).domEventHandlers,side:"before"}));function DN(i={}){return[z1.of(i),Kp(),ON]}function wc(i){let e=9;for(;e{let e=[],t=-1;for(let n of i.selection.ranges){let a=i.doc.lineAt(n.head).from;a>t&&(t=a,e.push(MN.range(a)))}return ie.of(e)});function ZN(){return BN}const tf=1024;let LN=0;class qr{constructor(e,t){this.from=e,this.to=t}}class ae{constructor(e={}){this.id=LN++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=ft.match(e)),t=>{let n=e(t);return n===void 0?null:[this,n]}}}ae.closedBy=new ae({deserialize:i=>i.split(" ")});ae.openedBy=new ae({deserialize:i=>i.split(" ")});ae.group=new ae({deserialize:i=>i.split(" ")});ae.isolate=new ae({deserialize:i=>{if(i&&i!="rtl"&&i!="ltr"&&i!="auto")throw new RangeError("Invalid value for isolate: "+i);return i||"auto"}});ae.contextHash=new ae({perNode:!0});ae.lookAhead=new ae({perNode:!0});ae.mounted=new ae({perNode:!0});class zi{constructor(e,t,n,a=!1){this.tree=e,this.overlay=t,this.parser=n,this.bracketed=a}static get(e){return e&&e.props&&e.props[ae.mounted.id]}}const WN=Object.create(null);class ft{constructor(e,t,n,a=0){this.name=e,this.props=t,this.id=n,this.flags=a}static define(e){let t=e.props&&e.props.length?Object.create(null):WN,n=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),a=new ft(e.name||"",t,e.id,n);if(e.props){for(let s of e.props)if(Array.isArray(s)||(s=s(a)),s){if(s[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[s[0].id]=s[1]}}return a}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(ae.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let n in e)for(let a of n.split(" "))t[a]=e[n];return n=>{for(let a=n.prop(ae.group),s=-1;s<(a?a.length:0);s++){let r=t[s<0?n.name:a[s]];if(r)return r}}}}ft.none=new ft("",Object.create(null),0,8);class D0{constructor(e){this.types=e;for(let t=0;t0;for(let l=this.cursor(r|Ce.IncludeAnonymous);;){let u=!1;if(l.from<=s&&l.to>=a&&(!o&&l.type.isAnonymous||t(l)!==!1)){if(l.firstChild())continue;u=!0}for(;u&&n&&(o||!l.type.isAnonymous)&&n(l),!l.nextSibling();){if(!l.parent())return;u=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Z0(ft.none,this.children,this.positions,0,this.children.length,0,this.length,(t,n,a)=>new Le(this.type,t,n,a,this.propValues),e.makeTree||((t,n,a)=>new Le(ft.none,t,n,a)))}static build(e){return JN(e)}}Le.empty=new Le(ft.none,[],[],0);class M0{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new M0(this.buffer,this.index)}}class En{constructor(e,t,n){this.buffer=e,this.length=t,this.set=n}get type(){return ft.none}toString(){let e=[];for(let t=0;t0));l=r[l+3]);return o}slice(e,t,n){let a=this.buffer,s=new Uint16Array(t-e),r=0;for(let o=e,l=0;o=e&&te;case 1:return t<=e&&n>e;case 2:return n>e;case 4:return!0}}function Li(i,e,t,n){for(var a;i.from==i.to||(t<1?i.from>=e:i.from>e)||(t>-1?i.to<=e:i.to0?o.length:-1;e!=u;e+=t){let m=o[e],c=l[e]+r.from,d;if(!(!(s&Ce.EnterBracketed&&m instanceof Le&&(d=zi.get(m))&&!d.overlay&&d.bracketed&&n>=c&&n<=c+m.length)&&!nf(a,n,c,c+m.length))){if(m instanceof En){if(s&Ce.ExcludeBuffers)continue;let h=m.findChild(0,m.buffer.length,t,n-c,a);if(h>-1)return new On(new EN(r,m,e,c),null,h)}else if(s&Ce.IncludeAnonymous||!m.type.isAnonymous||B0(m)){let h;if(!(s&Ce.IgnoreMounts)&&(h=zi.get(m))&&!h.overlay)return new Lt(h.tree,c,e,r);let g=new Lt(m,c,e,r);return s&Ce.IncludeAnonymous||!g.type.isAnonymous?g:g.nextChild(t<0?m.children.length-1:0,t,n,a,s)}}}if(s&Ce.IncludeAnonymous||!r.type.isAnonymous||(r.index>=0?e=r.index+t:e=t<0?-1:r._parent._tree.children.length,r=r._parent,!r))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,n=0){let a;if(!(n&Ce.IgnoreOverlays)&&(a=zi.get(this._tree))&&a.overlay){let s=e-this.from,r=n&Ce.EnterBracketed&&a.bracketed;for(let{from:o,to:l}of a.overlay)if((t>0||r?o<=s:o=s:l>s))return new Lt(a.tree,a.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,n)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function Ic(i,e,t,n){let a=i.cursor(),s=[];if(!a.firstChild())return s;if(t!=null){for(let r=!1;!r;)if(r=a.type.is(t),!a.nextSibling())return s}for(;;){if(n!=null&&a.type.is(n))return s;if(a.type.is(e)&&s.push(a.node),!a.nextSibling())return n==null?s:[]}}function Tl(i,e,t=e.length-1){for(let n=i;t>=0;n=n.parent){if(!n)return!1;if(!n.type.isAnonymous){if(e[t]&&e[t]!=n.name)return!1;t--}}return!0}class EN{constructor(e,t,n,a){this.parent=e,this.buffer=t,this.index=n,this.start=a}}class On extends af{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,n){super(),this.context=e,this._parent=t,this.index=n,this.type=e.buffer.set.types[e.buffer.buffer[n]]}child(e,t,n){let{buffer:a}=this.context,s=a.findChild(this.index+4,a.buffer[this.index+3],e,t-this.context.start,n);return s<0?null:new On(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,n=0){if(n&Ce.ExcludeBuffers)return null;let{buffer:a}=this.context,s=a.findChild(this.index+4,a.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return s<0?null:new On(this.context,this,s)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new On(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new On(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:n}=this.context,a=this.index+4,s=n.buffer[this.index+3];if(s>a){let r=n.buffer[this.index+1];e.push(n.slice(a,s,r)),t.push(0)}return new Le(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function sf(i){if(!i.length)return null;let e=0,t=i[0];for(let s=1;st.from||r.to=e){let o=new Lt(r.tree,r.overlay[0].from+s.from,-1,s);(a||(a=[n])).push(Li(o,e,t,!1))}}return a?sf(a):n}class _l{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~Ce.EnterBracketed,e instanceof Lt)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let n=e._parent;n;n=n._parent)this.stack.unshift(n.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:n,buffer:a}=this.buffer;return this.type=t||a.set.types[a.buffer[e]],this.from=n+a.buffer[e+1],this.to=n+a.buffer[e+2],!0}yield(e){return e?e instanceof Lt?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,n){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,n,this.mode));let{buffer:a}=this.buffer,s=a.findChild(this.index+4,a.buffer[this.index+3],e,t-this.buffer.start,n);return s<0?!1:(this.stack.push(this.index),this.yieldBuf(s))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,n=this.mode){return this.buffer?n&Ce.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,n))}parent(){if(!this.buffer)return this.yieldNode(this.mode&Ce.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&Ce.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,n=this.stack.length-1;if(e<0){let a=n<0?0:this.stack[n]+4;if(this.index!=a)return this.yieldBuf(t.findChild(a,this.index,-1,0,4))}else{let a=t.buffer[this.index+3];if(a<(n<0?t.buffer.length:t.buffer[this.stack[n]+3]))return this.yieldBuf(a)}return n<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,n,{buffer:a}=this;if(a){if(e>0){if(this.index-1)for(let s=t+e,r=e<0?-1:n._tree.children.length;s!=r;s+=e){let o=n._tree.children[s];if(this.mode&Ce.IncludeAnonymous||o instanceof En||!o.type.isAnonymous||B0(o))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let r=e;r;r=r._parent)if(r.index==a){if(a==this.index)return r;t=r,n=s+1;break e}a=this.stack[--s]}for(let a=n;a=0;s--){if(s<0)return Tl(this._tree,e,a);let r=n[t.buffer[this.stack[s]]];if(!r.isAnonymous){if(e[a]&&e[a]!=r.name)return!1;a--}}return!0}}function B0(i){return i.children.some(e=>e instanceof En||!e.type.isAnonymous||B0(e))}function JN(i){var e;let{buffer:t,nodeSet:n,maxBufferLength:a=tf,reused:s=[],minRepeatType:r=n.types.length}=i,o=Array.isArray(t)?new M0(t,t.length):t,l=n.types,u=0,m=0;function c(I,k,T,j,D,O){let{id:P,start:C,end:Z,size:E}=o,U=m,ee=u;if(E<0)if(o.next(),E==-1){let A=s[P];T.push(A),j.push(C-I);return}else if(E==-3){u=P;return}else if(E==-4){m=P;return}else throw new RangeError(`Unrecognized record size: ${E}`);let ge=l[P],Ie,fe,J=C-I;if(Z-C<=a&&(fe=x(o.pos-k,D))){let A=new Uint16Array(fe.size-fe.skip),N=o.pos-fe.size,Q=A.length;for(;o.pos>N;)Q=b(fe.start,A,Q);Ie=new En(A,Z-fe.start,n),J=fe.start-I}else{let A=o.pos-E;o.next();let N=[],Q=[],Y=P>=r?P:-1,ue=0,X=Z,me=U;for(;o.pos>A;)Y>=0&&o.id==Y&&o.size>=0?(o.end<=X-a&&(g(N,Q,C,ue,o.end,X,Y,me,ee),ue=N.length,X=o.end,me=m),o.next()):O>2500?d(C,A,N,Q):c(C,A,N,Q,Y,O+1);if(Y>=0&&ue>0&&ue-1&&ue>0){let le=h(ge,ee);Ie=Z0(ge,N,Q,0,N.length,0,Z-C,le,le)}else Ie=f(ge,N,Q,Z-C,U-Z,ee)}T.push(Ie),j.push(J)}function d(I,k,T,j){let D=[],O=0,P=-1;for(;o.pos>k;){let{id:C,start:Z,end:E,size:U}=o;if(U>4)o.next();else{if(P>-1&&Z=0;E-=3)C[U++]=D[E],C[U++]=D[E+1]-Z,C[U++]=D[E+2]-Z,C[U++]=U;T.push(new En(C,D[2]-Z,n)),j.push(Z-I)}}function h(I,k){return(T,j,D)=>{let O=0,P=T.length-1,C,Z;if(P>=0&&(C=T[P])instanceof Le){if(!P&&C.type==I&&C.length==D)return C;(Z=C.prop(ae.lookAhead))&&(O=j[P]+C.length+Z-D)}return f(I,T,j,D,O,k)}}function g(I,k,T,j,D,O,P,C,Z){let E=[],U=[];for(;I.length>j;)E.push(I.pop()),U.push(k.pop()+T-D);I.push(f(n.types[P],E,U,O-D,C-O,Z)),k.push(D-T)}function f(I,k,T,j,D,O,P){if(O){let C=[ae.contextHash,O];P=P?[C].concat(P):[C]}if(D>25){let C=[ae.lookAhead,D];P=P?[C].concat(P):[C]}return new Le(I,k,T,j,P)}function x(I,k){let T=o.fork(),j=0,D=0,O=0,P=T.end-a,C={size:0,start:0,skip:0};e:for(let Z=T.pos-I;T.pos>Z;){let E=T.size;if(T.id==k&&E>=0){C.size=j,C.start=D,C.skip=O,O+=4,j+=4,T.next();continue}let U=T.pos-E;if(E<0||U=r?4:0,ge=T.start;for(T.next();T.pos>U;){if(T.size<0)if(T.size==-3||T.size==-4)ee+=4;else break e;else T.id>=r&&(ee+=4);T.next()}D=ge,j+=E,O+=ee}return(k<0||j==I)&&(C.size=j,C.start=D,C.skip=O),C.size>4?C:void 0}function b(I,k,T){let{id:j,start:D,end:O,size:P}=o;if(o.next(),P>=0&&j4){let Z=o.pos-(P-4);for(;o.pos>Z;)T=b(I,k,T)}k[--T]=C,k[--T]=O-I,k[--T]=D-I,k[--T]=j}else P==-3?u=j:P==-4&&(m=j);return T}let v=[],w=[];for(;o.pos>0;)c(i.start||0,i.bufferStart||0,v,w,-1,0);let z=(e=i.length)!==null&&e!==void 0?e:v.length?w[0]+v[0].length:0;return new Le(l[i.topID],v.reverse(),w.reverse(),z)}const kc=new WeakMap;function Ka(i,e){if(!i.isAnonymous||e instanceof En||e.type!=i)return 1;let t=kc.get(e);if(t==null){t=1;for(let n of e.children){if(n.type!=i||!(n instanceof Le)){t=1;break}t+=Ka(i,n)}kc.set(e,t)}return t}function Z0(i,e,t,n,a,s,r,o,l){let u=0;for(let g=n;g=m)break;k+=T}if(w==z+1){if(k>m){let T=g[z];h(T.children,T.positions,0,T.children.length,f[z]+v);continue}c.push(g[z])}else{let T=f[w-1]+g[w-1].length-I;c.push(Z0(i,g,f,z,w,I,T,null,l))}d.push(I+v-s)}}return h(e,t,n,a,0),(o||l)(c,d,r)}class a1{constructor(e,t,n,a,s=!1,r=!1){this.from=e,this.to=t,this.tree=n,this.offset=a,this.open=(s?1:0)|(r?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],n=!1){let a=[new a1(0,e.length,e,0,!1,n)];for(let s of t)s.to>e.length&&a.push(s);return a}static applyChanges(e,t,n=128){if(!t.length)return e;let a=[],s=1,r=e.length?e[0]:null;for(let o=0,l=0,u=0;;o++){let m=o=n)for(;r&&r.from=d.from||c<=d.to||u){let h=Math.max(d.from,l)-u,g=Math.min(d.to,c)-u;d=h>=g?null:new a1(h,g,d.tree,d.offset+u,o>0,!!m)}if(d&&a.push(d),r.to>c)break;r=snew qr(a.from,a.to)):[new qr(0,0)]:[new qr(0,e.length)],this.createParse(e,t||[],n)}parse(e,t,n){let a=this.startParse(e,t,n);for(;;){let s=a.advance();if(s)return s}}}class RN{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new ae({perNode:!0});let GN=0;class Pt{constructor(e,t,n,a){this.name=e,this.set=t,this.base=n,this.modified=a,this.id=GN++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let n=typeof e=="string"?e:"?";if(e instanceof Pt&&(t=e),t!=null&&t.base)throw new Error("Can not derive from a modified tag");let a=new Pt(n,[],null,[]);if(a.set.push(a),t)for(let s of t.set)a.set.push(s);return a}static defineModifier(e){let t=new Ds(e);return n=>n.modified.indexOf(t)>-1?n:Ds.get(n.base||n,n.modified.concat(t).sort((a,s)=>a.id-s.id))}}let HN=0;class Ds{constructor(e){this.name=e,this.instances=[],this.id=HN++}static get(e,t){if(!t.length)return e;let n=t[0].instances.find(o=>o.base==e&&VN(t,o.modified));if(n)return n;let a=[],s=new Pt(e.name,a,e,t);for(let o of t)o.instances.push(s);let r=qN(t);for(let o of e.set)if(!o.modified.length)for(let l of r)a.push(Ds.get(o,l));return s}}function VN(i,e){return i.length==e.length&&i.every((t,n)=>t==e[n])}function qN(i){let e=[[]];for(let t=0;tn.length-t.length)}function of(i){let e=Object.create(null);for(let t in i){let n=i[t];Array.isArray(n)||(n=[n]);for(let a of t.split(" "))if(a){let s=[],r=2,o=a;for(let c=0;;){if(o=="..."&&c>0&&c+3==a.length){r=1;break}let d=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(o);if(!d)throw new RangeError("Invalid path: "+a);if(s.push(d[0]=="*"?"":d[0][0]=='"'?JSON.parse(d[0]):d[0]),c+=d[0].length,c==a.length)break;let h=a[c++];if(c==a.length&&h=="!"){r=0;break}if(h!="/")throw new RangeError("Invalid path: "+a);o=a.slice(c)}let l=s.length-1,u=s[l];if(!u)throw new RangeError("Invalid path: "+a);let m=new Wi(n,r,l>0?s.slice(0,l):null);e[u]=m.sort(e[u])}}return lf.add(e)}const lf=new ae({combine(i,e){let t,n,a;for(;i||e;){if(!i||e&&i.depth<=e.depth?(a=e,e=e.next):(a=i,i=i.next),t&&t.mode==a.mode&&!a.context&&!t.context)continue;let s=new Wi(a.tags,a.mode,a.context);t?t.next=s:n=s,t=s}return n}});class Wi{constructor(e,t,n,a){this.tags=e,this.mode=t,this.context=n,this.next=a}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let r=a;for(let o of s)for(let l of o.set){let u=t[l.id];if(u){r=r?r+" "+u:u;break}}return r},scope:n}}function QN(i,e){let t=null;for(let n of i){let a=n.style(e);a&&(t=t?t+" "+a:a)}return t}function UN(i,e,t,n=0,a=i.length){let s=new $N(n,Array.isArray(e)?e:[e],t);s.highlightRange(i.cursor(),n,a,"",s.highlighters),s.flush(a)}class $N{constructor(e,t,n){this.at=e,this.highlighters=t,this.span=n,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,n,a,s){let{type:r,from:o,to:l}=e;if(o>=n||l<=t)return;r.isTop&&(s=this.highlighters.filter(h=>!h.scope||h.scope(r)));let u=a,m=YN(e)||Wi.empty,c=QN(s,m.tags);if(c&&(u&&(u+=" "),u+=c,m.mode==1&&(a+=(a?" ":"")+c)),this.startSpan(Math.max(t,o),u),m.opaque)return;let d=e.tree&&e.tree.prop(ae.mounted);if(d&&d.overlay){let h=e.node.enter(d.overlay[0].from+o,1),g=this.highlighters.filter(x=>!x.scope||x.scope(d.tree.type)),f=e.firstChild();for(let x=0,b=o;;x++){let v=x=w||!e.nextSibling())););if(!v||w>n)break;b=v.to+o,b>t&&(this.highlightRange(h.cursor(),Math.max(t,v.from+o),Math.min(n,b),"",g),this.startSpan(Math.min(n,b),u))}f&&e.parent()}else if(e.firstChild()){d&&(a="");do if(!(e.to<=t)){if(e.from>=n)break;this.highlightRange(e,t,n,a,s),this.startSpan(Math.min(n,e.to),u)}while(e.nextSibling());e.parent()}}}function YN(i){let e=i.type.prop(lf);for(;e&&e.context&&!i.matchContext(e.context);)e=e.next;return e||null}const F=Pt.define,Oa=F(),Sn=F(),Sc=F(Sn),Tc=F(Sn),Tn=F(),Da=F(Tn),Qr=F(Tn),en=F(),Gn=F(en),Xt=F(),Kt=F(),jl=F(),K1=F(jl),Ma=F(),W={comment:Oa,lineComment:F(Oa),blockComment:F(Oa),docComment:F(Oa),name:Sn,variableName:F(Sn),typeName:Sc,tagName:F(Sc),propertyName:Tc,attributeName:F(Tc),className:F(Sn),labelName:F(Sn),namespace:F(Sn),macroName:F(Sn),literal:Tn,string:Da,docString:F(Da),character:F(Da),attributeValue:F(Da),number:Qr,integer:F(Qr),float:F(Qr),bool:F(Tn),regexp:F(Tn),escape:F(Tn),color:F(Tn),url:F(Tn),keyword:Xt,self:F(Xt),null:F(Xt),atom:F(Xt),unit:F(Xt),modifier:F(Xt),operatorKeyword:F(Xt),controlKeyword:F(Xt),definitionKeyword:F(Xt),moduleKeyword:F(Xt),operator:Kt,derefOperator:F(Kt),arithmeticOperator:F(Kt),logicOperator:F(Kt),bitwiseOperator:F(Kt),compareOperator:F(Kt),updateOperator:F(Kt),definitionOperator:F(Kt),typeOperator:F(Kt),controlOperator:F(Kt),punctuation:jl,separator:F(jl),bracket:K1,angleBracket:F(K1),squareBracket:F(K1),paren:F(K1),brace:F(K1),content:en,heading:Gn,heading1:F(Gn),heading2:F(Gn),heading3:F(Gn),heading4:F(Gn),heading5:F(Gn),heading6:F(Gn),contentSeparator:F(en),list:F(en),quote:F(en),emphasis:F(en),strong:F(en),link:F(en),monospace:F(en),strikethrough:F(en),inserted:F(),deleted:F(),changed:F(),invalid:F(),meta:Ma,documentMeta:F(Ma),annotation:F(Ma),processingInstruction:F(Ma),definition:Pt.defineModifier("definition"),constant:Pt.defineModifier("constant"),function:Pt.defineModifier("function"),standard:Pt.defineModifier("standard"),local:Pt.defineModifier("local"),special:Pt.defineModifier("special")};for(let i in W){let e=W[i];e instanceof Pt&&(e.name=i)}uf([{tag:W.link,class:"tok-link"},{tag:W.heading,class:"tok-heading"},{tag:W.emphasis,class:"tok-emphasis"},{tag:W.strong,class:"tok-strong"},{tag:W.keyword,class:"tok-keyword"},{tag:W.atom,class:"tok-atom"},{tag:W.bool,class:"tok-bool"},{tag:W.url,class:"tok-url"},{tag:W.labelName,class:"tok-labelName"},{tag:W.inserted,class:"tok-inserted"},{tag:W.deleted,class:"tok-deleted"},{tag:W.literal,class:"tok-literal"},{tag:W.string,class:"tok-string"},{tag:W.number,class:"tok-number"},{tag:[W.regexp,W.escape,W.special(W.string)],class:"tok-string2"},{tag:W.variableName,class:"tok-variableName"},{tag:W.local(W.variableName),class:"tok-variableName tok-local"},{tag:W.definition(W.variableName),class:"tok-variableName tok-definition"},{tag:W.special(W.variableName),class:"tok-variableName2"},{tag:W.definition(W.propertyName),class:"tok-propertyName tok-definition"},{tag:W.typeName,class:"tok-typeName"},{tag:W.namespace,class:"tok-namespace"},{tag:W.className,class:"tok-className"},{tag:W.macroName,class:"tok-macroName"},{tag:W.propertyName,class:"tok-propertyName"},{tag:W.operator,class:"tok-operator"},{tag:W.comment,class:"tok-comment"},{tag:W.meta,class:"tok-meta"},{tag:W.invalid,class:"tok-invalid"},{tag:W.punctuation,class:"tok-punctuation"}]);var Ur;const I1=new ae;function XN(i){return V.define({combine:i?e=>e.concat(i):void 0})}const KN=new ae;class Ht{constructor(e,t,n=[],a=""){this.data=e,this.name=a,re.prototype.hasOwnProperty("tree")||Object.defineProperty(re.prototype,"tree",{get(){return Xe(this)}}),this.parser=t,this.extension=[E1.of(this),re.languageData.of((s,r,o)=>{let l=_c(s,r,o),u=l.type.prop(I1);if(!u)return[];let m=s.facet(u),c=l.type.prop(KN);if(c){let d=l.resolve(r-l.from,o);for(let h of c)if(h.test(d,s)){let g=s.facet(h.facet);return h.type=="replace"?g:g.concat(m)}}return m})].concat(n)}isActiveAt(e,t,n=-1){return _c(e,t,n).type.prop(I1)==this.data}findRegions(e){let t=e.facet(E1);if((t==null?void 0:t.data)==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let n=[],a=(s,r)=>{if(s.prop(I1)==this.data){n.push({from:r,to:r+s.length});return}let o=s.prop(ae.mounted);if(o){if(o.tree.prop(I1)==this.data){if(o.overlay)for(let l of o.overlay)n.push({from:l.from+r,to:l.to+r});else n.push({from:r,to:r+s.length});return}else if(o.overlay){let l=n.length;if(a(o.tree,o.overlay[0].from+r),n.length>l)return}}for(let l=0;ln.isTop?t:void 0)]}),e.name)}configure(e,t){return new Ms(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function Xe(i){let e=i.field(Ht.state,!1);return e?e.tree:Le.empty}class eF{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let n=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-n,t-n)}}let ei=null;class Bs{constructor(e,t,n=[],a,s,r,o,l){this.parser=e,this.state=t,this.fragments=n,this.tree=a,this.treeLen=s,this.viewport=r,this.skipped=o,this.scheduleOn=l,this.parse=null,this.tempSkipped=[]}static create(e,t,n){return new Bs(e,t,[],Le.empty,0,n,[],null)}startParse(){return this.parser.startParse(new eF(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=Le.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var n;if(typeof e=="number"){let a=Date.now()+e;e=()=>Date.now()>a}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(a1.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=ei;ei=this;try{return e()}finally{ei=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=jc(e,t.from,t.to);return e}changes(e,t){let{fragments:n,tree:a,treeLen:s,viewport:r,skipped:o}=this;if(this.takeTree(),!e.empty){let l=[];if(e.iterChangedRanges((u,m,c,d)=>l.push({fromA:u,toA:m,fromB:c,toB:d})),n=a1.applyChanges(n,l),a=Le.empty,s=0,r={from:e.mapPos(r.from,-1),to:e.mapPos(r.to,1)},this.skipped.length){o=[];for(let u of this.skipped){let m=e.mapPos(u.from,1),c=e.mapPos(u.to,-1);me.from&&(this.fragments=jc(this.fragments,a,s),this.skipped.splice(n--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends rf{createParse(t,n,a){let s=a[0].from,r=a[a.length-1].to;return{parsedPos:s,advance(){let l=ei;if(l){for(let u of a)l.tempSkipped.push(u);e&&(l.scheduleOn=l.scheduleOn?Promise.all([l.scheduleOn,e]):e)}return this.parsedPos=r,new Le(ft.none,[],[],r-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return ei}}function jc(i,e,t){return a1.applyChanges(i,[{fromA:e,toA:t,fromB:e,toB:t}])}class W1{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),n=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,n)||t.takeTree(),new W1(t)}static init(e){let t=Math.min(3e3,e.doc.length),n=Bs.create(e.facet(E1).parser,e,{from:0,to:t});return n.work(20,t)||n.takeTree(),new W1(n)}}Ht.state=Et.define({create:W1.init,update(i,e){for(let t of e.effects)if(t.is(Ht.setState))return t.value;return e.startState.facet(E1)!=e.state.facet(E1)?W1.init(e.state):i.apply(e)}});let mf=i=>{let e=setTimeout(()=>i(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(mf=i=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(i,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const $r=typeof navigator<"u"&&(!((Ur=navigator.scheduling)===null||Ur===void 0)&&Ur.isInputPending)?()=>navigator.scheduling.isInputPending():null,tF=Wt.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(Ht.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(Ht.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=mf(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnda+1e3,l=s.context.work(()=>$r&&$r()||Date.now()>r,a+(o?0:1e5));this.chunkBudget-=Date.now()-t,(l||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:Ht.setState.of(new W1(s.context))})),this.chunkBudget>0&&!(l&&!o)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>zt(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),E1=V.define({combine(i){return i.length?i[0]:null},enables:i=>[Ht.state,tF,q.contentAttributes.compute([i],e=>{let t=e.facet(i);return t&&t.name?{"data-language":t.name}:{}})]});class nF{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const iF=V.define(),Yi=V.define({combine:i=>{if(!i.length)return" ";let e=i[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(i[0]));return e}});function Zs(i){let e=i.facet(Yi);return e.charCodeAt(0)==9?i.tabSize*e.length:e.length}function Ei(i,e){let t="",n=i.tabSize,a=i.facet(Yi)[0];if(a==" "){for(;e>=n;)t+=" ",e-=n;a=" "}for(let s=0;s=e?aF(i,t,e):null}class mr{constructor(e,t={}){this.state=e,this.options=t,this.unit=Zs(e)}lineAt(e,t=1){let n=this.state.doc.lineAt(e),{simulateBreak:a,simulateDoubleBreak:s}=this.options;return a!=null&&a>=n.from&&a<=n.to?s&&a==e?{text:"",from:e}:(t<0?a-1&&(s+=r-this.countColumn(n,n.search(/\S|$/))),s}countColumn(e,t=e.length){return qi(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:n,from:a}=this.lineAt(e,t),s=this.options.overrideIndentation;if(s){let r=s(a);if(r>-1)return r}return this.countColumn(n,n.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const cf=new ae;function aF(i,e,t){let n=e.resolveStack(t),a=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(a!=n.node){let s=[];for(let r=a;r&&!(r.fromn.node.to||r.from==n.node.from&&r.type==n.node.type);r=r.parent)s.push(r);for(let r=s.length-1;r>=0;r--)n={node:s[r],next:n}}return df(n,i,t)}function df(i,e,t){for(let n=i;n;n=n.next){let a=rF(n.node);if(a)return a(W0.create(e,t,n))}return 0}function sF(i){return i.pos==i.options.simulateBreak&&i.options.simulateDoubleBreak}function rF(i){let e=i.type.prop(cf);if(e)return e;let t=i.firstChild,n;if(t&&(n=t.type.prop(ae.closedBy))){let a=i.lastChild,s=a&&n.indexOf(a.name)>-1;return r=>hf(r,!0,1,void 0,s&&!sF(r)?a.from:void 0)}return i.parent==null?oF:null}function oF(){return 0}class W0 extends mr{constructor(e,t,n){super(e.state,e.options),this.base=e,this.pos=t,this.context=n}get node(){return this.context.node}static create(e,t,n){return new W0(e,t,n)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let n=e.resolve(t.from);for(;n.parent&&n.parent.from==n.from;)n=n.parent;if(lF(n,e))break;t=this.state.doc.lineAt(n.from)}return this.lineIndent(t.from)}continue(){return df(this.context.next,this.base,this.pos)}}function lF(i,e){for(let t=e;t;t=t.parent)if(i==t)return!0;return!1}function uF(i){let e=i.node,t=e.childAfter(e.from),n=e.lastChild;if(!t)return null;let a=i.options.simulateBreak,s=i.state.doc.lineAt(t.from),r=a==null||a<=s.from?s.to:Math.min(s.to,a);for(let o=t.to;;){let l=e.childAfter(o);if(!l||l==n)return null;if(!l.type.isSkipped){if(l.from>=r)return null;let u=/^ */.exec(s.text.slice(t.to-s.from))[0].length;return{from:t.from,to:t.to+u}}o=l.to}}function mF({closing:i,align:e=!0,units:t=1}){return n=>hf(n,e,t,i)}function hf(i,e,t,n,a){let s=i.textAfter,r=s.match(/^\s*/)[0].length,o=n&&s.slice(r,r+n.length)==n||a==i.pos+r,l=e?uF(i):null;return l?o?i.column(l.from):i.column(l.to):i.baseIndent+(o?0:i.unit*t)}const cF=i=>i.baseIndent;function Yr({except:i,units:e=1}={}){return t=>{let n=i&&i.test(t.textAfter);return t.baseIndent+(n?0:e*t.unit)}}const dF=200;function hF(){return re.transactionFilter.of(i=>{if(!i.docChanged||!i.isUserEvent("input.type")&&!i.isUserEvent("input.complete"))return i;let e=i.startState.languageDataAt("indentOnInput",i.startState.selection.main.head);if(!e.length)return i;let t=i.newDoc,{head:n}=i.newSelection.main,a=t.lineAt(n);if(n>a.from+dF)return i;let s=t.sliceString(a.from,n);if(!e.some(u=>u.test(s)))return i;let{state:r}=i,o=-1,l=[];for(let{head:u}of r.selection.ranges){let m=r.doc.lineAt(u);if(m.from==o)continue;o=m.from;let c=L0(r,m.from);if(c==null)continue;let d=/^\s*/.exec(m.text)[0],h=Ei(r,c);d!=h&&l.push({from:m.from,to:m.from+d.length,insert:h})}return l.length?[i,{changes:l,sequential:!0}]:i})}const gF=new ae;function pF(i){let e=i.firstChild,t=i.lastChild;return e&&e.too.prop(I1)==r.data:r?o=>o==r:void 0,this.style=uf(e.map(o=>({tag:o.tag,class:o.class||a(Object.assign({},o,{tag:null}))})),{all:s}).style,this.module=n?new Zn(n):null,this.themeType=t.themeType}static define(e,t){return new cr(e,t||{})}}const Cl=V.define(),fF=V.define({combine(i){return i.length?[i[0]]:null}});function Xr(i){let e=i.facet(Cl);return e.length?e:i.facet(fF)}function xF(i,e){let t=[vF],n;return i instanceof cr&&(i.module&&t.push(q.styleModule.of(i.module)),n=i.themeType),n?t.push(Cl.computeN([q.darkTheme],a=>a.facet(q.darkTheme)==(n=="dark")?[i]:[])):t.push(Cl.of(i)),t}class bF{constructor(e){this.markCache=Object.create(null),this.tree=Xe(e.state),this.decorations=this.buildDeco(e,Xr(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Xe(e.state),n=Xr(e.state),a=n!=Xr(e.startState),{viewport:s}=e.view,r=e.changes.mapPos(this.decoratedTo,1);t.length=s.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=r):(t!=this.tree||e.viewportChanged||a)&&(this.tree=t,this.decorations=this.buildDeco(e.view,n),this.decoratedTo=s.to)}buildDeco(e,t){if(!t||!this.tree.length)return he.none;let n=new i1;for(let{from:a,to:s}of e.visibleRanges)UN(this.tree,t,(r,o,l)=>{n.add(r,o,this.markCache[l]||(this.markCache[l]=he.mark({class:l})))},a,s);return n.finish()}}const vF=u1.high(Wt.fromClass(bF,{decorations:i=>i.decorations})),yF=q.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),gf=1e4,pf="()[]{}",ff=V.define({combine(i){return y0(i,{afterCursor:!0,brackets:pf,maxScanDistance:gf,renderMatch:IF})}}),wF=he.mark({class:"cm-matchingBracket"}),zF=he.mark({class:"cm-nonmatchingBracket"});function IF(i){let e=[],t=i.matched?wF:zF;return e.push(t.range(i.start.from,i.start.to)),i.end&&e.push(t.range(i.end.from,i.end.to)),e}function Cc(i){let e=[],t=i.facet(ff);for(let n of i.selection.ranges){if(!n.empty)continue;let a=on(i,n.head,-1,t)||n.head>0&&on(i,n.head-1,1,t)||t.afterCursor&&(on(i,n.head,1,t)||n.headi.decorations}),SF=[kF,yF];function TF(i={}){return[ff.of(i),SF]}const _F=new ae;function Al(i,e,t){let n=i.prop(e<0?ae.openedBy:ae.closedBy);if(n)return n;if(i.name.length==1){let a=t.indexOf(i.name);if(a>-1&&a%2==(e<0?1:0))return[t[a+e]]}return null}function Pl(i){let e=i.type.prop(_F);return e?e(i.node):i}function on(i,e,t,n={}){let a=n.maxScanDistance||gf,s=n.brackets||pf,r=Xe(i),o=r.resolveInner(e,t);for(let l=o;l;l=l.parent){let u=Al(l.type,t,s);if(u&&l.from0?e>=m.from&&em.from&&e<=m.to))return jF(i,e,t,l,m,u,s)}}return CF(i,e,t,r,o.type,a,s)}function jF(i,e,t,n,a,s,r){let o=n.parent,l={from:a.from,to:a.to},u=0,m=o==null?void 0:o.cursor();if(m&&(t<0?m.childBefore(n.from):m.childAfter(n.to)))do if(t<0?m.to<=n.from:m.from>=n.to){if(u==0&&s.indexOf(m.type.name)>-1&&m.from0)return null;let u={from:t<0?e-1:e,to:t>0?e+1:e},m=i.doc.iterRange(e,t>0?i.doc.length:0),c=0;for(let d=0;!m.next().done&&d<=s;){let h=m.value;t<0&&(d+=h.length);let g=e+d*t;for(let f=t>0?0:h.length-1,x=t>0?h.length:-1;f!=x;f+=t){let b=r.indexOf(h[f]);if(!(b<0||n.resolveInner(g+f,1).type!=a))if(b%2==0==t>0)c++;else{if(c==1)return{start:u,end:{from:g+f,to:g+f+1},matched:b>>1==l>>1};c--}}t>0&&(d+=h.length)}return m.done?{start:u,matched:!1}:null}const AF=Object.create(null),Ac=[ft.none],Pc=[],Oc=Object.create(null),PF=Object.create(null);for(let[i,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])PF[i]=OF(AF,e);function Kr(i,e){Pc.indexOf(i)>-1||(Pc.push(i),console.warn(e))}function OF(i,e){let t=[];for(let o of e.split(" ")){let l=[];for(let u of o.split(".")){let m=i[u]||W[u];m?typeof m=="function"?l.length?l=l.map(m):Kr(u,`Modifier ${u} used at start of tag`):l.length?Kr(u,`Tag ${u} used as modifier`):l=Array.isArray(m)?m:[m]:Kr(u,`Unknown highlighting tag ${u}`)}for(let u of l)t.push(u)}if(!t.length)return 0;let n=e.replace(/ /g,"_"),a=n+" "+t.map(o=>o.id),s=Oc[a];if(s)return s.id;let r=Oc[a]=ft.define({id:Ac.length,name:n,props:[of({[n]:t})]});return Ac.push(r),r.id}ye.RTL,ye.LTR;class xf{constructor(e,t,n,a){this.state=e,this.pos=t,this.explicit=n,this.view=a,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=Xe(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),n=Math.max(t.from,this.pos-250),a=t.text.slice(n-t.from,this.pos-t.from),s=a.search(bf(e,!1));return s<0?null:{from:n+s,to:this.pos,text:a.slice(s)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,n){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),n&&n.onDocChange&&(this.abortOnDocChange=!0))}}function Dc(i){let e=Object.keys(i).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function DF(i){let e=Object.create(null),t=Object.create(null);for(let{label:a}of i){e[a[0]]=!0;for(let s=1;stypeof a=="string"?{label:a}:a),[t,n]=e.every(a=>/^\w+$/.test(a.label))?[/\w*$/,/\w+$/]:DF(e);return a=>{let s=a.matchBefore(n);return s||a.explicit?{from:s?s.from:a.pos,options:e,validFor:t}:null}}class Mc{constructor(e,t,n,a){this.completion=e,this.source=t,this.match=n,this.score=a}}function s1(i){return i.selection.main.from}function bf(i,e){var t;let{source:n}=i,a=e&&n[0]!="^",s=n[n.length-1]!="$";return!a&&!s?i:new RegExp(`${a?"^":""}(?:${n})${s?"$":""}`,(t=i.flags)!==null&&t!==void 0?t:i.ignoreCase?"i":"")}const E0=Nn.define();function BF(i,e,t,n){let{main:a}=i.selection,s=t-a.from,r=n-a.from;return{...i.changeByRange(o=>{if(o!=a&&t!=n&&i.sliceDoc(o.from+s,o.from+r)!=i.sliceDoc(t,n))return{range:o};let l=i.toText(e);return{changes:{from:o.from+s,to:n==a.from?o.to:o.from+r,insert:l},range:M.cursor(o.from+s+l.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const Bc=new WeakMap;function ZF(i){if(!Array.isArray(i))return i;let e=Bc.get(i);return e||Bc.set(i,e=MF(i)),e}const Ls=de.define(),Ni=de.define();class LF{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&I<=57||I>=97&&I<=122?2:I>=65&&I<=90?1:0:(k=Fg(I))!=k.toLowerCase()?1:k!=k.toUpperCase()?2:0;(!v||T==1&&x||z==0&&T!=0)&&(t[c]==I||n[c]==I&&(d=!0)?r[c++]=v:r.length&&(b=!1)),z=T,v+=hn(I)}return c==l&&r[0]==0&&b?this.result(-100+(d?-200:0),r,e):h==l&&g==0?this.ret(-200-e.length+(f==e.length?0:-100),[0,f]):o>-1?this.ret(-700-e.length,[o,o+this.pattern.length]):h==l?this.ret(-900-e.length,[g,f]):c==l?this.result(-100+(d?-200:0)+-700+(b?0:-1100),r,e):t.length==2?null:this.result((a[0]?-700:0)+-200+-1100,a,e)}result(e,t,n){let a=[],s=0;for(let r of t){let o=r+(this.astral?hn(At(n,r)):1);s&&a[s-1]==r?a[s-1]=o:(a[s++]=r,a[s++]=o)}return this.ret(e-n.length,a)}}class WF{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:EF,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>n=>Zc(e(n),t(n)),optionClass:(e,t)=>n=>Zc(e(n),t(n)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function Zc(i,e){return i?e?i+" "+e:i:e}function EF(i,e,t,n,a,s){let r=i.textDirection==ye.RTL,o=r,l=!1,u="top",m,c,d=e.left-a.left,h=a.right-e.right,g=n.right-n.left,f=n.bottom-n.top;if(o&&d=f||v>e.top?m=t.bottom-e.top:(u="bottom",m=e.bottom-t.top)}let x=(e.bottom-e.top)/s.offsetHeight,b=(e.right-e.left)/s.offsetWidth;return{style:`${u}: ${m/x}px; max-width: ${c/b}px`,class:"cm-completionInfo-"+(l?r?"left-narrow":"right-narrow":o?"left":"right")}}const N0=de.define();function NF(i){let e=i.addToOptions.slice();return i.icons&&e.push({render(t){let n=document.createElement("div");return n.classList.add("cm-completionIcon"),t.type&&n.classList.add(...t.type.split(/\s+/g).map(a=>"cm-completionIcon-"+a)),n.setAttribute("aria-hidden","true"),n},position:20}),e.push({render(t,n,a,s){let r=document.createElement("span");r.className="cm-completionLabel";let o=t.displayLabel||t.label,l=0;for(let u=0;ul&&r.appendChild(document.createTextNode(o.slice(l,m)));let d=r.appendChild(document.createElement("span"));d.appendChild(document.createTextNode(o.slice(m,c))),d.className="cm-completionMatchedText",l=c}return lt.position-n.position).map(t=>t.render)}function eo(i,e,t){if(i<=t)return{from:0,to:i};if(e<0&&(e=0),e<=i>>1){let a=Math.floor(e/t);return{from:a*t,to:(a+1)*t}}let n=Math.ceil((i-e)/t);return{from:i-n*t,to:i-(n-1)*t}}class FF{constructor(e,t,n){this.view=e,this.stateField=t,this.applyCompletion=n,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:l=>this.placeInfo(l),key:this},this.space=null,this.currentClass="";let a=e.state.field(t),{options:s,selected:r}=a.open,o=e.state.facet(Ge);this.optionContent=NF(o),this.optionClass=o.optionClass,this.tooltipClass=o.tooltipClass,this.range=eo(s.length,r,o.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",l=>{let{options:u}=e.state.field(t).open;for(let m=l.target,c;m&&m!=this.dom;m=m.parentNode)if(m.nodeName=="LI"&&(c=/-(\d+)$/.exec(m.id))&&+c[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;m!=null&&(e.dispatch({effects:N0.of(m)}),l.preventDefault())}}),this.dom.addEventListener("focusout",l=>{let u=e.state.field(this.stateField,!1);u&&u.tooltip&&e.state.facet(Ge).closeOnBlur&&l.relatedTarget!=e.contentDOM&&e.dispatch({effects:Ni.of(null)})}),this.showOptions(s,a.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let n=e.state.field(this.stateField),a=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),n!=a){let{options:s,selected:r,disabled:o}=n.open;(!a.open||a.open.options!=s)&&(this.range=eo(s.length,r,e.state.facet(Ge).maxRenderedOptions),this.showOptions(s,n.id)),this.updateSel(),o!=((t=a.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!o)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let n of this.currentClass.split(" "))n&&this.dom.classList.remove(n);for(let n of t.split(" "))n&&this.dom.classList.add(n);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected=this.range.to)&&(this.range=eo(t.options.length,t.selected,this.view.state.facet(Ge).maxRenderedOptions),this.showOptions(t.options,e.id));let n=this.updateSelectedOption(t.selected);if(n){this.destroyInfo();let{completion:a}=t.options[t.selected],{info:s}=a;if(!s)return;let r=typeof s=="string"?document.createTextNode(s):s(a);if(!r)return;"then"in r?r.then(o=>{o&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(o,a)}).catch(o=>zt(this.view.state,o,"completion info")):(this.addInfoPane(r,a),n.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let n=this.info=document.createElement("div");if(n.className="cm-tooltip cm-completionInfo",n.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)n.appendChild(e),this.infoDestroy=null;else{let{dom:a,destroy:s}=e;n.appendChild(a),this.infoDestroy=s||null}this.dom.appendChild(n),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let n=this.list.firstChild,a=this.range.from;n;n=n.nextSibling,a++)n.nodeName!="LI"||!n.id?a--:a==e?n.hasAttribute("aria-selected")||(n.setAttribute("aria-selected","true"),t=n):n.hasAttribute("aria-selected")&&(n.removeAttribute("aria-selected"),n.removeAttribute("aria-describedby"));return t&&RF(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),n=this.info.getBoundingClientRect(),a=e.getBoundingClientRect(),s=this.space;if(!s){let r=this.dom.ownerDocument.documentElement;s={left:0,top:0,right:r.clientWidth,bottom:r.clientHeight}}return a.top>Math.min(s.bottom,t.bottom)-10||a.bottom{r.target==a&&r.preventDefault()});let s=null;for(let r=n.from;rn.from||n.from==0))if(s=d,typeof u!="string"&&u.header)a.appendChild(u.header(u));else{let h=a.appendChild(document.createElement("completion-section"));h.textContent=d}}const m=a.appendChild(document.createElement("li"));m.id=t+"-"+r,m.setAttribute("role","option");let c=this.optionClass(o);c&&(m.className=c);for(let d of this.optionContent){let h=d(o,this.view.state,this.view,l);h&&m.appendChild(h)}}return n.from&&a.classList.add("cm-completionListIncompleteTop"),n.tonew FF(t,i,e)}function RF(i,e){let t=i.getBoundingClientRect(),n=e.getBoundingClientRect(),a=t.height/i.offsetHeight;n.topt.bottom&&(i.scrollTop+=(n.bottom-t.bottom)/a)}function Lc(i){return(i.boost||0)*100+(i.apply?10:0)+(i.info?5:0)+(i.type?1:0)}function GF(i,e){let t=[],n=null,a=null,s=m=>{t.push(m);let{section:c}=m.completion;if(c){n||(n=[]);let d=typeof c=="string"?c:c.name;n.some(h=>h.name==d)||n.push(typeof c=="string"?{name:d}:c)}},r=e.facet(Ge);for(let m of i)if(m.hasResult()){let c=m.result.getMatch;if(m.result.filter===!1)for(let d of m.result.options)s(new Mc(d,m.source,c?c(d):[],1e9-t.length));else{let d=e.sliceDoc(m.from,m.to),h,g=r.filterStrict?new WF(d):new LF(d);for(let f of m.result.options)if(h=g.match(f.label)){let x=f.displayLabel?c?c(f,h.matched):[]:h.matched,b=h.score+(f.boost||0);if(s(new Mc(f,m.source,x,b)),typeof f.section=="object"&&f.section.rank==="dynamic"){let{name:v}=f.section;a||(a=Object.create(null)),a[v]=Math.max(b,a[v]||-1e9)}}}}if(n){let m=Object.create(null),c=0,d=(h,g)=>(h.rank==="dynamic"&&g.rank==="dynamic"?a[g.name]-a[h.name]:0)||(typeof h.rank=="number"?h.rank:1e9)-(typeof g.rank=="number"?g.rank:1e9)||(h.named.score-c.score||u(c.completion,d.completion))){let c=m.completion;!l||l.label!=c.label||l.detail!=c.detail||l.type!=null&&c.type!=null&&l.type!=c.type||l.apply!=c.apply||l.boost!=c.boost?o.push(m):Lc(m.completion)>Lc(l)&&(o[o.length-1]=m),l=m.completion}return o}class k1{constructor(e,t,n,a,s,r){this.options=e,this.attrs=t,this.tooltip=n,this.timestamp=a,this.selected=s,this.disabled=r}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new k1(this.options,Wc(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,n,a,s,r){if(a&&!r&&e.some(u=>u.isPending))return a.setDisabled();let o=GF(e,t);if(!o.length)return a&&e.some(u=>u.isPending)?a.setDisabled():null;let l=t.facet(Ge).selectOnOpen?0:-1;if(a&&a.selected!=l&&a.selected!=-1){let u=a.options[a.selected].completion;for(let m=0;mm.hasResult()?Math.min(u,m.from):u,1e8),create:$F,above:s.aboveCursor},a?a.timestamp:Date.now(),l,!1)}map(e){return new k1(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new k1(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Ws{constructor(e,t,n){this.active=e,this.id=t,this.open=n}static start(){return new Ws(QF,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,n=t.facet(Ge),s=(n.override||t.languageDataAt("autocomplete",s1(t)).map(ZF)).map(l=>(this.active.find(m=>m.source==l)||new Zt(l,this.active.some(m=>m.state!=0)?1:0)).update(e,n));s.length==this.active.length&&s.every((l,u)=>l==this.active[u])&&(s=this.active);let r=this.open,o=e.effects.some(l=>l.is(F0));r&&e.docChanged&&(r=r.map(e.changes)),e.selection||s.some(l=>l.hasResult()&&e.changes.touchesRange(l.from,l.to))||!HF(s,this.active)||o?r=k1.build(s,t,this.id,r,n,o):r&&r.disabled&&!s.some(l=>l.isPending)&&(r=null),!r&&s.every(l=>!l.isPending)&&s.some(l=>l.hasResult())&&(s=s.map(l=>l.hasResult()?new Zt(l.source,0):l));for(let l of e.effects)l.is(N0)&&(r=r&&r.setSelected(l.value,this.id));return s==this.active&&r==this.open?this:new Ws(s,this.id,r)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?VF:qF}}function HF(i,e){if(i==e)return!0;for(let t=0,n=0;;){for(;t-1&&(t["aria-activedescendant"]=i+"-"+e),t}const QF=[];function vf(i,e){if(i.isUserEvent("input.complete")){let n=i.annotation(E0);if(n&&e.activateOnCompletion(n))return 12}let t=i.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:i.isUserEvent("delete.backward")?2:i.selection?8:i.docChanged?16:0}class Zt{constructor(e,t,n=!1){this.source=e,this.state=t,this.explicit=n}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let n=vf(e,t),a=this;(n&8||n&16&&this.touches(e))&&(a=new Zt(a.source,0)),n&4&&a.state==0&&(a=new Zt(this.source,1)),a=a.updateFor(e,n);for(let s of e.effects)if(s.is(Ls))a=new Zt(a.source,1,s.value);else if(s.is(Ni))a=new Zt(a.source,0);else if(s.is(F0))for(let r of s.value)r.source==a.source&&(a=r);return a}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(s1(e.state))}}class A1 extends Zt{constructor(e,t,n,a,s,r){super(e,3,t),this.limit=n,this.result=a,this.from=s,this.to=r}hasResult(){return!0}updateFor(e,t){var n;if(!(t&3))return this.map(e.changes);let a=this.result;a.map&&!e.changes.empty&&(a=a.map(a,e.changes));let s=e.changes.mapPos(this.from),r=e.changes.mapPos(this.to,1),o=s1(e.state);if(o>r||!a||t&2&&(s1(e.startState)==this.from||ot.map(e))}}),gt=Et.define({create(){return Ws.start()},update(i,e){return i.update(e)},provide:i=>[Yp.from(i,e=>e.tooltip),q.contentAttributes.from(i,e=>e.attrs)]});function J0(i,e){const t=e.completion.apply||e.completion.label;let n=i.state.field(gt).active.find(a=>a.source==e.source);return n instanceof A1?(typeof t=="string"?i.dispatch({...BF(i.state,t,n.from,n.to),annotations:E0.of(e.completion)}):t(i,e.completion,n.from,n.to),!0):!1}const $F=JF(gt,J0);function Ba(i,e="option"){return t=>{let n=t.state.field(gt,!1);if(!n||!n.open||n.open.disabled||Date.now()-n.open.timestamp-1?n.open.selected+a*(i?1:-1):i?0:r-1;return o<0?o=e=="page"?0:r-1:o>=r&&(o=e=="page"?r-1:0),t.dispatch({effects:N0.of(o)}),!0}}const YF=i=>{let e=i.state.field(gt,!1);return i.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampi.state.field(gt,!1)?(i.dispatch({effects:Ls.of(!0)}),!0):!1,XF=i=>{let e=i.state.field(gt,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(i.dispatch({effects:Ni.of(null)}),!0)};class KF{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const eJ=50,tJ=1e3,nJ=Wt.fromClass(class{constructor(i){this.view=i,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of i.state.field(gt).active)e.isPending&&this.startQuery(e)}update(i){let e=i.state.field(gt),t=i.state.facet(Ge);if(!i.selectionSet&&!i.docChanged&&i.startState.field(gt)==e)return;let n=i.transactions.some(s=>{let r=vf(s,t);return r&8||(s.selection||s.docChanged)&&!(r&3)});for(let s=0;seJ&&Date.now()-r.time>tJ){for(let o of r.context.abortListeners)try{o()}catch(l){zt(this.view.state,l)}r.context.abortListeners=null,this.running.splice(s--,1)}else r.updates.push(...i.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),i.transactions.some(s=>s.effects.some(r=>r.is(Ls)))&&(this.pendingStart=!0);let a=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(s=>s.isPending&&!this.running.some(r=>r.active.source==s.source))?setTimeout(()=>this.startUpdate(),a):-1,this.composing!=0)for(let s of i.transactions)s.isUserEvent("input.type")?this.composing=2:this.composing==2&&s.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:i}=this.view,e=i.field(gt);for(let t of e.active)t.isPending&&!this.running.some(n=>n.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ge).updateSyncTime))}startQuery(i){let{state:e}=this.view,t=s1(e),n=new xf(e,t,i.explicit,this.view),a=new KF(i,n);this.running.push(a),Promise.resolve(i.source(n)).then(s=>{a.context.aborted||(a.done=s||null,this.scheduleAccept())},s=>{this.view.dispatch({effects:Ni.of(null)}),zt(this.view.state,s)})}scheduleAccept(){this.running.every(i=>i.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ge).updateSyncTime))}accept(){var i;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(Ge),n=this.view.state.field(gt);for(let a=0;ao.source==s.active.source);if(r&&r.isPending)if(s.done==null){let o=new Zt(s.active.source,0);for(let l of s.updates)o=o.update(l,t);o.isPending||e.push(o)}else this.startQuery(r)}(e.length||n.open&&n.open.disabled)&&this.view.dispatch({effects:F0.of(e)})}},{eventHandlers:{blur(i){let e=this.view.state.field(gt,!1);if(e&&e.tooltip&&this.view.state.facet(Ge).closeOnBlur){let t=e.open&&Xp(this.view,e.open.tooltip);(!t||!t.dom.contains(i.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:Ni.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:Ls.of(!1)}),20),this.composing=0}}}),iJ=typeof navigator=="object"&&/Win/.test(navigator.platform),aJ=u1.highest(q.domEventHandlers({keydown(i,e){let t=e.state.field(gt,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||!i.key||i.key.length>1||i.ctrlKey&&!(iJ&&i.altKey)||i.metaKey)return!1;let n=t.open.options[t.open.selected],a=t.active.find(r=>r.source==n.source),s=n.completion.commitCharacters||a.result.commitCharacters;return s&&s.indexOf(i.key)>-1&&J0(e,n),!1}})),yf=q.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center",cursor:"pointer"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class sJ{constructor(e,t,n,a){this.field=e,this.line=t,this.from=n,this.to=a}}class R0{constructor(e,t,n){this.field=e,this.from=t,this.to=n}map(e){let t=e.mapPos(this.from,-1,st.TrackDel),n=e.mapPos(this.to,1,st.TrackDel);return t==null||n==null?null:new R0(this.field,t,n)}}class G0{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let n=[],a=[t],s=e.doc.lineAt(t),r=/^\s*/.exec(s.text)[0];for(let l of this.lines){if(n.length){let u=r,m=/^\t*/.exec(l)[0].length;for(let c=0;cnew R0(l.field,a[l.line]+l.from,a[l.line]+l.to));return{text:n,ranges:o}}static parse(e){let t=[],n=[],a=[],s;for(let r of e.split(/\r\n?|\n/)){for(;s=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(r);){let o=s[1]?+s[1]:null,l=s[2]||s[3]||"",u=-1;o===0&&(o=1e9);let m=l.replace(/\\[{}]/g,c=>c[1]);for(let c=0;c=u&&d.field++}for(let c of a)if(c.line==n.length&&c.from>s.index){let d=s[2]?3+(s[1]||"").length:2;c.from-=d,c.to-=d}a.push(new sJ(u,n.length,s.index,s.index+m.length)),r=r.slice(0,s.index)+l+r.slice(s.index+s[0].length)}r=r.replace(/\\([{}])/g,(o,l,u)=>{for(let m of a)m.line==n.length&&m.from>u&&(m.from--,m.to--);return l}),n.push(r)}return new G0(n,a)}}let rJ=he.widget({widget:new class extends F1{toDOM(){let i=document.createElement("span");return i.className="cm-snippetFieldPosition",i}ignoreEvent(){return!1}}}),oJ=he.mark({class:"cm-snippetField"});class J1{constructor(e,t){this.ranges=e,this.active=t,this.deco=he.set(e.map(n=>(n.from==n.to?rJ:oJ).range(n.from,n.to)),!0)}map(e){let t=[];for(let n of this.ranges){let a=n.map(e);if(!a)return null;t.push(a)}return new J1(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(n=>n.field==this.active&&n.from<=t.from&&n.to>=t.to))}}const Xi=de.define({map(i,e){return i&&i.map(e)}}),lJ=de.define(),Fi=Et.define({create(){return null},update(i,e){for(let t of e.effects){if(t.is(Xi))return t.value;if(t.is(lJ)&&i)return new J1(i.ranges,t.value)}return i&&e.docChanged&&(i=i.map(e.changes)),i&&e.selection&&!i.selectionInsideField(e.selection)&&(i=null),i},provide:i=>q.decorations.from(i,e=>e?e.deco:he.none)});function H0(i,e){return M.create(i.filter(t=>t.field==e).map(t=>M.range(t.from,t.to)))}function uJ(i){let e=G0.parse(i);return(t,n,a,s)=>{let{text:r,ranges:o}=e.instantiate(t.state,a),{main:l}=t.state.selection,u={changes:{from:a,to:s==l.from?l.to:s,insert:oe.of(r)},scrollIntoView:!0,annotations:n?[E0.of(n),$e.userEvent.of("input.complete")]:void 0};if(o.length&&(u.selection=H0(o,0)),o.some(m=>m.field>0)){let m=new J1(o,0),c=u.effects=[Xi.of(m)];t.state.field(Fi,!1)===void 0&&c.push(de.appendConfig.of([Fi,gJ,pJ,yf]))}t.dispatch(t.state.update(u))}}function wf(i){return({state:e,dispatch:t})=>{let n=e.field(Fi,!1);if(!n||i<0&&n.active==0)return!1;let a=n.active+i,s=i>0&&!n.ranges.some(r=>r.field==a+i);return t(e.update({selection:H0(n.ranges,a),effects:Xi.of(s?null:new J1(n.ranges,a)),scrollIntoView:!0})),!0}}const mJ=({state:i,dispatch:e})=>i.field(Fi,!1)?(e(i.update({effects:Xi.of(null)})),!0):!1,cJ=wf(1),dJ=wf(-1),hJ=[{key:"Tab",run:cJ,shift:dJ},{key:"Escape",run:mJ}],Ec=V.define({combine(i){return i.length?i[0]:hJ}}),gJ=u1.highest(Zi.compute([Ec],i=>i.facet(Ec)));function V0(i,e){return{...e,apply:uJ(i)}}const pJ=q.domEventHandlers({mousedown(i,e){let t=e.state.field(Fi,!1),n;if(!t||(n=e.posAtCoords({x:i.clientX,y:i.clientY}))==null)return!1;let a=t.ranges.find(s=>s.from<=n&&s.to>=n);return!a||a.field==t.active?!1:(e.dispatch({selection:H0(t.ranges,a.field),effects:Xi.of(t.ranges.some(s=>s.field>a.field)?new J1(t.ranges,a.field):null),scrollIntoView:!0}),!0)}}),Ji={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Xn=de.define({map(i,e){let t=e.mapPos(i,-1,st.TrackAfter);return t??void 0}}),q0=new class extends Bn{};q0.startSide=1;q0.endSide=-1;const zf=Et.define({create(){return ie.empty},update(i,e){if(i=i.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);i=i.update({filter:n=>n>=t.from&&n<=t.to})}for(let t of e.effects)t.is(Xn)&&(i=i.update({add:[q0.range(t.value,t.value+1)]}));return i}});function fJ(){return[bJ,zf]}const no="()[]{}<>«»»«[]{}";function If(i){for(let e=0;e{if((xJ?i.composing:i.compositionStarted)||i.state.readOnly)return!1;let a=i.state.selection.main;if(n.length>2||n.length==2&&hn(At(n,0))==1||e!=a.from||t!=a.to)return!1;let s=wJ(i.state,n);return s?(i.dispatch(s),!0):!1}),vJ=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let n=kf(i,i.selection.main.head).brackets||Ji.brackets,a=null,s=i.changeByRange(r=>{if(r.empty){let o=zJ(i.doc,r.head);for(let l of n)if(l==o&&dr(i.doc,r.head)==If(At(l,0)))return{changes:{from:r.head-l.length,to:r.head+l.length},range:M.cursor(r.head-l.length)}}return{range:a=r}});return a||e(i.update(s,{scrollIntoView:!0,userEvent:"delete.backward"})),!a},yJ=[{key:"Backspace",run:vJ}];function wJ(i,e){let t=kf(i,i.selection.main.head),n=t.brackets||Ji.brackets;for(let a of n){let s=If(At(a,0));if(e==a)return s==a?SJ(i,a,n.indexOf(a+a+a)>-1,t):IJ(i,a,s,t.before||Ji.before);if(e==s&&Sf(i,i.selection.main.from))return kJ(i,a,s)}return null}function Sf(i,e){let t=!1;return i.field(zf).between(0,i.doc.length,n=>{n==e&&(t=!0)}),t}function dr(i,e){let t=i.sliceString(e,e+2);return t.slice(0,hn(At(t,0)))}function zJ(i,e){let t=i.sliceString(e-2,e);return hn(At(t,0))==t.length?t:t.slice(1)}function IJ(i,e,t,n){let a=null,s=i.changeByRange(r=>{if(!r.empty)return{changes:[{insert:e,from:r.from},{insert:t,from:r.to}],effects:Xn.of(r.to+e.length),range:M.range(r.anchor+e.length,r.head+e.length)};let o=dr(i.doc,r.head);return!o||/\s/.test(o)||n.indexOf(o)>-1?{changes:{insert:e+t,from:r.head},effects:Xn.of(r.head+e.length),range:M.cursor(r.head+e.length)}:{range:a=r}});return a?null:i.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function kJ(i,e,t){let n=null,a=i.changeByRange(s=>s.empty&&dr(i.doc,s.head)==t?{changes:{from:s.head,to:s.head+t.length,insert:t},range:M.cursor(s.head+t.length)}:n={range:s});return n?null:i.update(a,{scrollIntoView:!0,userEvent:"input.type"})}function SJ(i,e,t,n){let a=n.stringPrefixes||Ji.stringPrefixes,s=null,r=i.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:e,from:o.to}],effects:Xn.of(o.to+e.length),range:M.range(o.anchor+e.length,o.head+e.length)};let l=o.head,u=dr(i.doc,l),m;if(u==e){if(Nc(i,l))return{changes:{insert:e+e,from:l},effects:Xn.of(l+e.length),range:M.cursor(l+e.length)};if(Sf(i,l)){let d=t&&i.sliceDoc(l,l+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:l,to:l+d.length,insert:d},range:M.cursor(l+d.length)}}}else{if(t&&i.sliceDoc(l-2*e.length,l)==e+e&&(m=Fc(i,l-2*e.length,a))>-1&&Nc(i,m))return{changes:{insert:e+e+e+e,from:l},effects:Xn.of(l+e.length),range:M.cursor(l+e.length)};if(i.charCategorizer(l)(u)!=Mt.Word&&Fc(i,l,a)>-1&&!TJ(i,l,e,a))return{changes:{insert:e+e,from:l},effects:Xn.of(l+e.length),range:M.cursor(l+e.length)}}return{range:s=o}});return s?null:i.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function Nc(i,e){let t=Xe(i).resolveInner(e+1);return t.parent&&t.from==e}function TJ(i,e,t,n){let a=Xe(i).resolveInner(e,-1),s=n.reduce((r,o)=>Math.max(r,o.length),0);for(let r=0;r<5;r++){let o=i.sliceDoc(a.from,Math.min(a.to,a.from+t.length+s)),l=o.indexOf(t);if(!l||l>-1&&n.indexOf(o.slice(0,l))>-1){let m=a.firstChild;for(;m&&m.from==a.from&&m.to-m.from>t.length+l;){if(i.sliceDoc(m.to-t.length,m.to)==t)return!1;m=m.firstChild}return!0}let u=a.to==e&&a.parent;if(!u)break;a=u}return!1}function Fc(i,e,t){let n=i.charCategorizer(e);if(n(i.sliceDoc(e-1,e))!=Mt.Word)return e;for(let a of t){let s=e-a.length;if(i.sliceDoc(s,e)==a&&n(i.sliceDoc(s-1,s))!=Mt.Word)return s}return-1}function _J(i={}){return[aJ,gt,Ge.of(i),nJ,jJ,yf]}const Tf=[{key:"Ctrl-Space",run:to},{mac:"Alt-`",run:to},{mac:"Alt-i",run:to},{key:"Escape",run:XF},{key:"ArrowDown",run:Ba(!0)},{key:"ArrowUp",run:Ba(!1)},{key:"PageDown",run:Ba(!0,"page")},{key:"PageUp",run:Ba(!1,"page")},{key:"Enter",run:YF}],jJ=u1.highest(Zi.computeN([Ge],i=>i.facet(Ge).defaultKeymap?[Tf]:[])),CJ=i=>{let{state:e}=i,t=e.doc.lineAt(e.selection.main.from),n=U0(i.state,t.from);return n.line?AJ(i):n.block?OJ(i):!1};function Q0(i,e){return({state:t,dispatch:n})=>{if(t.readOnly)return!1;let a=i(e,t);return a?(n(t.update(a)),!0):!1}}const AJ=Q0(BJ,0),PJ=Q0(_f,0),OJ=Q0((i,e)=>_f(i,e,MJ(e)),0);function U0(i,e){let t=i.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}const ti=50;function DJ(i,{open:e,close:t},n,a){let s=i.sliceDoc(n-ti,n),r=i.sliceDoc(a,a+ti),o=/\s*$/.exec(s)[0].length,l=/^\s*/.exec(r)[0].length,u=s.length-o;if(s.slice(u-e.length,u)==e&&r.slice(l,l+t.length)==t)return{open:{pos:n-o,margin:o&&1},close:{pos:a+l,margin:l&&1}};let m,c;a-n<=2*ti?m=c=i.sliceDoc(n,a):(m=i.sliceDoc(n,n+ti),c=i.sliceDoc(a-ti,a));let d=/^\s*/.exec(m)[0].length,h=/\s*$/.exec(c)[0].length,g=c.length-h-t.length;return m.slice(d,d+e.length)==e&&c.slice(g,g+t.length)==t?{open:{pos:n+d+e.length,margin:/\s/.test(m.charAt(d+e.length))?1:0},close:{pos:a-h-t.length,margin:/\s/.test(c.charAt(g-1))?1:0}}:null}function MJ(i){let e=[];for(let t of i.selection.ranges){let n=i.doc.lineAt(t.from),a=t.to<=n.to?n:i.doc.lineAt(t.to);a.from>n.from&&a.from==t.to&&(a=t.to==n.to+1?n:i.doc.lineAt(t.to-1));let s=e.length-1;s>=0&&e[s].to>n.from?e[s].to=a.to:e.push({from:n.from+/^\s*/.exec(n.text)[0].length,to:a.to})}return e}function _f(i,e,t=e.selection.ranges){let n=t.map(s=>U0(e,s.from).block);if(!n.every(s=>s))return null;let a=t.map((s,r)=>DJ(e,n[r],s.from,s.to));if(i!=2&&!a.every(s=>s))return{changes:e.changes(t.map((s,r)=>a[r]?[]:[{from:s.from,insert:n[r].open+" "},{from:s.to,insert:" "+n[r].close}]))};if(i!=1&&a.some(s=>s)){let s=[];for(let r=0,o;ra&&(s==r||r>c.from)){a=c.from;let d=/^\s*/.exec(c.text)[0].length,h=d==c.length,g=c.text.slice(d,d+u.length)==u?d:-1;ds.comment<0&&(!s.empty||s.single))){let s=[];for(let{line:o,token:l,indent:u,empty:m,single:c}of n)(c||!m)&&s.push({from:o.from+u,insert:l+" "});let r=e.changes(s);return{changes:r,selection:e.selection.map(r,1)}}else if(i!=1&&n.some(s=>s.comment>=0)){let s=[];for(let{line:r,comment:o,token:l}of n)if(o>=0){let u=r.from+o,m=u+l.length;r.text[m-r.from]==" "&&m++,s.push({from:u,to:m})}return{changes:s}}return null}function R1(i,e){return M.create(i.ranges.map(e),i.mainIndex)}function Qt(i,e){return i.update({selection:e,scrollIntoView:!0,userEvent:"select"})}function Ut({state:i,dispatch:e},t){let n=R1(i.selection,t);return n.eq(i.selection,!0)?!1:(e(Qt(i,n)),!0)}function hr(i,e){return M.cursor(e?i.to:i.from)}function jf(i,e){return Ut(i,t=>t.empty?i.moveByChar(t,e):hr(t,e))}function ot(i){return i.textDirectionAt(i.state.selection.main.head)==ye.LTR}const Cf=i=>jf(i,!ot(i)),Af=i=>jf(i,ot(i));function Pf(i,e){return Ut(i,t=>t.empty?i.moveByGroup(t,e):hr(t,e))}const ZJ=i=>Pf(i,!ot(i)),LJ=i=>Pf(i,ot(i));function WJ(i,e,t){if(e.type.prop(t))return!0;let n=e.to-e.from;return n&&(n>2||/[^\s,.;:]/.test(i.sliceDoc(e.from,e.to)))||e.firstChild}function gr(i,e,t){let n=Xe(i).resolveInner(e.head),a=t?ae.closedBy:ae.openedBy;for(let l=e.head;;){let u=t?n.childAfter(l):n.childBefore(l);if(!u)break;WJ(i,u,a)?n=u:l=t?u.to:u.from}let s=n.type.prop(a),r,o;return s&&(r=t?on(i,n.from,1):on(i,n.to,-1))&&r.matched?o=t?r.end.to:r.end.from:o=t?n.to:n.from,M.cursor(o,t?-1:1)}const EJ=i=>Ut(i,e=>gr(i.state,e,!ot(i))),NJ=i=>Ut(i,e=>gr(i.state,e,ot(i)));function Of(i,e){return Ut(i,t=>{if(!t.empty)return hr(t,e);let n=i.moveVertically(t,e);return n.head!=t.head?n:i.moveToLineBoundary(t,e)})}const Df=i=>Of(i,!1),Mf=i=>Of(i,!0);function Bf(i){let e=i.scrollDOM.clientHeightr.empty?i.moveVertically(r,e,t.height):hr(r,e));if(a.eq(n.selection))return!1;let s;if(t.selfScroll){let r=i.coordsAtPos(n.selection.main.head),o=i.scrollDOM.getBoundingClientRect(),l=o.top+t.marginTop,u=o.bottom-t.marginBottom;r&&r.top>l&&r.bottomZf(i,!1),Ol=i=>Zf(i,!0);function Fn(i,e,t){let n=i.lineBlockAt(e.head),a=i.moveToLineBoundary(e,t);if(a.head==e.head&&a.head!=(t?n.to:n.from)&&(a=i.moveToLineBoundary(e,t,!1)),!t&&a.head==n.from&&n.length){let s=/^\s*/.exec(i.state.sliceDoc(n.from,Math.min(n.from+100,n.to)))[0].length;s&&e.head!=n.from+s&&(a=M.cursor(n.from+s))}return a}const FJ=i=>Ut(i,e=>Fn(i,e,!0)),JJ=i=>Ut(i,e=>Fn(i,e,!1)),RJ=i=>Ut(i,e=>Fn(i,e,!ot(i))),GJ=i=>Ut(i,e=>Fn(i,e,ot(i))),HJ=i=>Ut(i,e=>i.moveToLineBoundary(e,!1,!1)),VJ=i=>Ut(i,e=>i.moveToLineBoundary(e,!0,!1));function qJ(i,e,t){let n=!1,a=R1(i.selection,s=>{let r=on(i,s.head,-1)||on(i,s.head,1)||s.head>0&&on(i,s.head-1,1)||s.headqJ(i,e);function Nt(i,e,t){let n=R1(i.state.selection,a=>{a.undirectional&&a.head>=a.anchor!=e&&(a=M.range(a.head,a.anchor));let s=t(a);return M.range(a.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return n.eq(i.state.selection)?!1:(i.dispatch(Qt(i.state,n)),!0)}function Lf(i,e){return Nt(i,e,t=>i.moveByChar(t,e))}const Wf=i=>Lf(i,!ot(i)),Ef=i=>Lf(i,ot(i));function Nf(i,e){return Nt(i,e,t=>i.moveByGroup(t,e))}const UJ=i=>Nf(i,!ot(i)),$J=i=>Nf(i,ot(i)),YJ=i=>{let e=!ot(i);return Nt(i,e,t=>gr(i.state,t,e))},XJ=i=>{let e=ot(i);return Nt(i,e,t=>gr(i.state,t,e))};function Ff(i,e){return Nt(i,e,t=>i.moveVertically(t,e))}const Jf=i=>Ff(i,!1),Rf=i=>Ff(i,!0);function Gf(i,e){return Nt(i,e,t=>i.moveVertically(t,e,Bf(i).height))}const Rc=i=>Gf(i,!1),Gc=i=>Gf(i,!0),KJ=i=>Nt(i,!0,e=>Fn(i,e,!0)),eR=i=>Nt(i,!1,e=>Fn(i,e,!1)),tR=i=>{let e=!ot(i);return Nt(i,e,t=>Fn(i,t,e))},nR=i=>{let e=ot(i);return Nt(i,e,t=>Fn(i,t,e))},iR=i=>Nt(i,!1,e=>M.cursor(i.lineBlockAt(e.head).from)),aR=i=>Nt(i,!0,e=>M.cursor(i.lineBlockAt(e.head).to)),Hc=({state:i,dispatch:e})=>(e(Qt(i,{anchor:0})),!0),Vc=({state:i,dispatch:e})=>(e(Qt(i,{anchor:i.doc.length})),!0),qc=({state:i,dispatch:e})=>(e(Qt(i,{anchor:i.selection.main.anchor,head:0})),!0),Qc=({state:i,dispatch:e})=>(e(Qt(i,{anchor:i.selection.main.anchor,head:i.doc.length})),!0),sR=({state:i,dispatch:e})=>(e(i.update({selection:{anchor:0,head:i.doc.length},userEvent:"select"})),!0),rR=({state:i,dispatch:e})=>{let t=pr(i).map(({from:n,to:a})=>M.undirectionalRange(n,Math.min(a+1,i.doc.length)));return e(i.update({selection:M.create(t),userEvent:"select"})),!0},oR=({state:i,dispatch:e})=>{let t=R1(i.selection,n=>{let a=Xe(i),s=a.resolveStack(n.from,1);if(n.empty){let r=a.resolveStack(n.from,-1);r.node.from>=s.node.from&&r.node.to<=s.node.to&&(s=r)}for(let r=s;r;r=r.next){let{node:o}=r;if((o.from=n.to||o.to>n.to&&o.from<=n.from)&&r.next)return M.undirectionalRange(o.from,o.to)}return n});return t.eq(i.selection)?!1:(e(Qt(i,t)),!0)};function Hf(i,e){let{state:t}=i,n=t.selection,a=t.selection.ranges.slice();for(let s of t.selection.ranges){let r=t.doc.lineAt(s.head);if(e?r.to0)for(let o=s;;){let l=i.moveVertically(o,e);if(l.headr.to){a.some(u=>u.head==l.head)||a.push(l);break}else{if(l.head==o.head)break;o=l}}}return a.length==n.ranges.length?!1:(i.dispatch(Qt(t,M.create(a,a.length-1))),!0)}const lR=i=>Hf(i,!1),uR=i=>Hf(i,!0),mR=({state:i,dispatch:e})=>{let t=i.selection,n=null;return t.ranges.length>1?n=M.create([t.main]):t.main.empty||(n=M.create([M.cursor(t.main.head)])),n?(e(Qt(i,n)),!0):!1};function Ki(i,e){if(i.state.readOnly)return!1;let t="delete.selection",{state:n}=i,a=n.changeByRange(s=>{let{from:r,to:o}=s;if(r==o){let l=e(s);lr&&(t="delete.forward",l=Za(i,l,!0)),r=Math.min(r,l),o=Math.max(o,l)}else r=Za(i,r,!1),o=Za(i,o,!0);return r==o?{range:s}:{changes:{from:r,to:o},range:M.cursor(r,ra(i)))n.between(e,e,(a,s)=>{ae&&(e=t?s:a)});return e}const Vf=(i,e,t)=>Ki(i,n=>{let a=n.from,{state:s}=i,r=s.doc.lineAt(a),o,l;if(t&&!e&&a>r.from&&aVf(i,!1,!0),qf=i=>Vf(i,!0,!1),Qf=(i,e)=>Ki(i,t=>{let n=t.head,{state:a}=i,s=a.doc.lineAt(n),r=a.charCategorizer(n);for(let o=null;;){if(n==(e?s.to:s.from)){n==t.head&&s.number!=(e?a.doc.lines:1)&&(n+=e?1:-1);break}let l=rt(s.text,n-s.from,e)+s.from,u=s.text.slice(Math.min(n,l)-s.from,Math.max(n,l)-s.from),m=r(u);if(o!=null&&m!=o)break;(u!=" "||n!=t.head)&&(o=m),n=l}return n}),Uf=i=>Qf(i,!1),cR=i=>Qf(i,!0),dR=i=>Ki(i,e=>{let t=i.lineBlockAt(e.head).to;return e.headKi(i,e=>{let t=i.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),gR=i=>Ki(i,e=>{let t=i.moveToLineBoundary(e,!0).head;return e.head{if(i.readOnly)return!1;let t=i.changeByRange(n=>({changes:{from:n.from,to:n.to,insert:oe.of(["",""])},range:M.cursor(n.from)}));return e(i.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},fR=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=i.changeByRange(n=>{if(!n.empty||n.from==0||n.from==i.doc.length)return{range:n};let a=n.from,s=i.doc.lineAt(a),r=a==s.from?a-1:rt(s.text,a-s.from,!1)+s.from,o=a==s.to?a+1:rt(s.text,a-s.from,!0)+s.from;return{changes:{from:r,to:o,insert:i.doc.slice(a,o).append(i.doc.slice(r,a))},range:M.cursor(o)}});return t.changes.empty?!1:(e(i.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function pr(i){let e=[],t=-1;for(let n of i.selection.ranges){let a=i.doc.lineAt(n.from),s=i.doc.lineAt(n.to);if(!n.empty&&n.to==s.from&&(s=i.doc.lineAt(n.to-1)),t>=a.number){let r=e[e.length-1];r.to=s.to,r.ranges.push(n)}else e.push({from:a.from,to:s.to,ranges:[n]});t=s.number+1}return e}function $f(i,e,t){if(i.readOnly)return!1;let n=[],a=[];for(let s of pr(i)){if(t?s.to==i.doc.length:s.from==0)continue;let r=i.doc.lineAt(t?s.to+1:s.from-1),o=r.length+1;if(t){n.push({from:s.to,to:r.to},{from:s.from,insert:r.text+i.lineBreak});for(let l of s.ranges)a.push(M.range(Math.min(i.doc.length,l.anchor+o),Math.min(i.doc.length,l.head+o)))}else{n.push({from:r.from,to:s.from},{from:s.to,insert:i.lineBreak+r.text});for(let l of s.ranges)a.push(M.range(l.anchor-o,l.head-o))}}return n.length?(e(i.update({changes:n,scrollIntoView:!0,selection:M.create(a,i.selection.mainIndex),userEvent:"move.line"})),!0):!1}const xR=({state:i,dispatch:e})=>$f(i,e,!1),bR=({state:i,dispatch:e})=>$f(i,e,!0);function Yf(i,e,t){if(i.readOnly)return!1;let n=[];for(let s of pr(i))t?n.push({from:s.from,insert:i.doc.slice(s.from,s.to)+i.lineBreak}):n.push({from:s.to,insert:i.lineBreak+i.doc.slice(s.from,s.to)});let a=i.changes(n);return e(i.update({changes:a,selection:i.selection.map(a,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}const vR=({state:i,dispatch:e})=>Yf(i,e,!1),yR=({state:i,dispatch:e})=>Yf(i,e,!0),wR=i=>{if(i.state.readOnly)return!1;let{state:e}=i,t=e.changes(pr(e).map(({from:a,to:s})=>(a>0?a--:s{let s;if(i.lineWrapping){let r=i.lineBlockAt(a.head),o=i.coordsAtPos(a.head,a.assoc||1);o&&(s=r.bottom+i.documentTop-o.bottom+i.defaultLineHeight/2)}return i.moveVertically(a,!0,s)}).map(t);return i.dispatch({changes:t,selection:n,scrollIntoView:!0,userEvent:"delete.line"}),!0};function zR(i,e){if(/\(\)|\[\]|\{\}/.test(i.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Xe(i).resolveInner(e),n=t.childBefore(e),a=t.childAfter(e),s;return n&&a&&n.to<=e&&a.from>=e&&(s=n.type.prop(ae.closedBy))&&s.indexOf(a.name)>-1&&i.doc.lineAt(n.to).from==i.doc.lineAt(a.from).from&&!/\S/.test(i.sliceDoc(n.to,a.from))?{from:n.to,to:a.from}:null}const Uc=Xf(!1),IR=Xf(!0);function Xf(i){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=e.changeByRange(a=>{let{from:s,to:r}=a,o=e.doc.lineAt(s),l=!i&&s==r&&zR(e,s);i&&(s=r=(r<=o.to?o:e.doc.lineAt(r)).to);let u=new mr(e,{simulateBreak:s,simulateDoubleBreak:!!l}),m=L0(u,s);for(m==null&&(m=qi(/^\s*/.exec(e.doc.lineAt(s).text)[0],e.tabSize));ro.from&&s{let a=[];for(let r=n.from;r<=n.to;){let o=i.doc.lineAt(r);o.number>t&&(n.empty||n.to>o.from)&&(e(o,a,n),t=o.number),r=o.to+1}let s=i.changes(a);return{changes:a,range:M.range(s.mapPos(n.anchor,1),s.mapPos(n.head,1))}})}const kR=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=Object.create(null),n=new mr(i,{overrideIndentation:s=>{let r=t[s];return r??-1}}),a=$0(i,(s,r,o)=>{let l=L0(n,s.from);if(l==null)return;/\S/.test(s.text)||(l=0);let u=/^\s*/.exec(s.text)[0],m=Ei(i,l);(u!=m||o.fromi.readOnly?!1:(e(i.update($0(i,(t,n)=>{n.push({from:t.from,insert:i.facet(Yi)})}),{userEvent:"input.indent"})),!0),e2=({state:i,dispatch:e})=>i.readOnly?!1:(e(i.update($0(i,(t,n)=>{let a=/^\s*/.exec(t.text)[0];if(!a)return;let s=qi(a,i.tabSize),r=0,o=Ei(i,Math.max(0,s-Zs(i)));for(;r(i.setTabFocusMode(),!0),TR=[{key:"Ctrl-b",run:Cf,shift:Wf,preventDefault:!0},{key:"Ctrl-f",run:Af,shift:Ef},{key:"Ctrl-p",run:Df,shift:Jf},{key:"Ctrl-n",run:Mf,shift:Rf},{key:"Ctrl-a",run:HJ,shift:iR},{key:"Ctrl-e",run:VJ,shift:aR},{key:"Ctrl-d",run:qf},{key:"Ctrl-h",run:Dl},{key:"Ctrl-k",run:dR},{key:"Ctrl-Alt-h",run:Uf},{key:"Ctrl-o",run:pR},{key:"Ctrl-t",run:fR},{key:"Ctrl-v",run:Ol}],_R=[{key:"ArrowLeft",run:Cf,shift:Wf,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:ZJ,shift:UJ,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:RJ,shift:tR,preventDefault:!0},{key:"ArrowRight",run:Af,shift:Ef,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:LJ,shift:$J,preventDefault:!0},{mac:"Cmd-ArrowRight",run:GJ,shift:nR,preventDefault:!0},{key:"ArrowUp",run:Df,shift:Jf,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Hc,shift:qc},{mac:"Ctrl-ArrowUp",run:Jc,shift:Rc},{key:"ArrowDown",run:Mf,shift:Rf,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Vc,shift:Qc},{mac:"Ctrl-ArrowDown",run:Ol,shift:Gc},{key:"PageUp",run:Jc,shift:Rc},{key:"PageDown",run:Ol,shift:Gc},{key:"Home",run:JJ,shift:eR,preventDefault:!0},{key:"Mod-Home",run:Hc,shift:qc},{key:"End",run:FJ,shift:KJ,preventDefault:!0},{key:"Mod-End",run:Vc,shift:Qc},{key:"Enter",run:Uc,shift:Uc},{key:"Mod-a",run:sR},{key:"Backspace",run:Dl,shift:Dl,preventDefault:!0},{key:"Delete",run:qf,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Uf,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:cR,preventDefault:!0},{mac:"Mod-Backspace",run:hR,preventDefault:!0},{mac:"Mod-Delete",run:gR,preventDefault:!0}].concat(TR.map(i=>({mac:i.key,run:i.run,shift:i.shift}))),jR=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:EJ,shift:YJ},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:NJ,shift:XJ},{key:"Alt-ArrowUp",run:xR},{key:"Shift-Alt-ArrowUp",run:vR},{key:"Alt-ArrowDown",run:bR},{key:"Shift-Alt-ArrowDown",run:yR},{key:"Mod-Alt-ArrowUp",run:lR},{key:"Mod-Alt-ArrowDown",run:uR},{key:"Escape",run:mR},{key:"Mod-Enter",run:IR},{key:"Alt-l",mac:"Ctrl-l",run:rR},{key:"Mod-i",run:oR,preventDefault:!0},{key:"Mod-[",run:e2},{key:"Mod-]",run:Kf},{key:"Mod-Alt-\\",run:kR},{key:"Shift-Mod-k",run:wR},{key:"Shift-Mod-\\",run:QJ},{key:"Mod-/",run:CJ},{key:"Alt-A",mac:"Ctrl-A",run:PJ},{key:"Ctrl-m",mac:"Shift-Alt-m",run:SR}].concat(_R),CR={key:"Tab",run:Kf,shift:e2};var $c={};class Es{constructor(e,t,n,a,s,r,o,l,u,m=0,c){this.p=e,this.stack=t,this.state=n,this.reducePos=a,this.pos=s,this.score=r,this.buffer=o,this.bufferBase=l,this.curContext=u,this.lookAhead=m,this.parent=c}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,n=0){let a=e.parser.context;return new Es(e,[],t,n,n,0,[],0,a?new Yc(a,a.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let n=e>>19,a=e&65535,{parser:s}=this.p,r=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[a])===null||t===void 0)&&t.isAnonymous)&&(u==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=m):this.p.lastBigReductionSizel;)this.stack.pop();this.reduceContext(a,u)}storeNode(e,t,n,a=4,s=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[r-4]==0&&this.buffer[r-1]>-1){if(t==n)return;if(this.buffer[r-2]>=t){this.buffer[r-2]=n;return}}}if(!s||this.pos==n)this.buffer.push(e,t,n,a);else{let r=this.buffer.length;if(r>0&&(this.buffer[r-4]!=0||this.buffer[r-1]<0)){let o=!1;for(let l=r;l>0&&this.buffer[l-2]>n;l-=4)if(this.buffer[l-1]>=0){o=!0;break}if(o)for(;r>0&&this.buffer[r-2]>n;)this.buffer[r]=this.buffer[r-4],this.buffer[r+1]=this.buffer[r-3],this.buffer[r+2]=this.buffer[r-2],this.buffer[r+3]=this.buffer[r-1],r-=4,a>4&&(a-=4)}this.buffer[r]=e,this.buffer[r+1]=t,this.buffer[r+2]=n,this.buffer[r+3]=a}}shift(e,t,n,a){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let s=e,{parser:r}=this.p;this.pos=a;let o=r.stateFlag(s,1);!o&&(a>n||t<=r.maxNode)&&(this.reducePos=a),this.pushState(s,o?n:Math.min(n,this.reducePos)),this.shiftContext(t,n),t<=r.maxNode&&this.buffer.push(t,n,a,4)}else this.pos=a,this.shiftContext(t,n),t<=this.p.parser.maxNode&&this.buffer.push(t,n,a,4)}apply(e,t,n,a){e&65536?this.reduce(e):this.shift(e,t,n,a)}useNode(e,t,n){let a=this.p.reused.length-1;(a<0||this.p.reused[a]!=e)&&(this.p.reused.push(e),a++);let s=this.reducePos=this.pos=n+e.length;this.pushState(t,n),this.buffer.push(a,n,s,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(t&&e.buffer[t-4]==0&&(t-=4);t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let n=e.buffer.slice(t),a=e.bufferBase+t;for(;e&&a==e.bufferBase;)e=e.parent;return new Es(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,n,a,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let n=e<=this.p.parser.maxNode;n&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,n?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new AR(this);;){let n=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(n==0)return!1;if((n&65536)==0)return!0;t.reduce(n)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let a=[];for(let s=0,r;sl&1&&o==r)||a.push(t[s],r)}t=a}let n=[];for(let a=0;a>19,a=t&65535,s=this.stack.length-n*3;if(s<0||e.getGoto(this.stack[s],a,!1)<0){let r=this.findForcedReduction();if(r==null)return!1;t=r}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],n=(a,s)=>{if(!t.includes(a))return t.push(a),e.allActions(a,r=>{if(!(r&393216))if(r&65536){let o=(r>>19)-s;if(o>1){let l=r&65535,u=this.stack.length-o*3;if(u>=0&&e.getGoto(this.stack[u],l,!1)>=0)return o<<19|65536|l}}else{let o=n(r,s+1);if(o!=null)return o}})};return n(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t0&&this.emitLookAhead()}}class Yc{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}}class AR{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,n=e>>19;n==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(n-1)*3;let a=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=a}}class Ns{constructor(e,t,n){this.stack=e,this.pos=t,this.index=n,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new Ns(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new Ns(this.stack,this.pos,this.index)}}function La(i,e=Uint16Array){if(typeof i!="string")return i;let t=null;for(let n=0,a=0;n=92&&r--,r>=34&&r--;let l=r-32;if(l>=46&&(l-=46,o=!0),s+=l,o)break;s*=46}t?t[a++]=s:t=new e(s)}return t}class es{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const Xc=new es;class PR{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=Xc,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let n=this.range,a=this.rangeIndex,s=this.pos+e;for(;sn.to:s>=n.to;){if(a==this.ranges.length-1)return null;let r=this.ranges[++a];s+=r.from-n.to,n=r}return s}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,n,a;if(t>=0&&t=this.chunk2Pos&&no.to&&(this.chunk2=this.chunk2.slice(0,o.to-n)),a=this.chunk2.charCodeAt(0)}}return n>=this.token.lookAhead&&(this.token.lookAhead=n+1),a}acceptToken(e,t=0){let n=t?this.resolveOffset(t,-1):this.pos;if(n==null||n=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=Xc,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let n="";for(let a of this.ranges){if(a.from>=t)break;a.to>e&&(n+=this.input.read(Math.max(a.from,e),Math.min(a.to,t)))}return n}}class P1{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:n}=t.p;OR(this.data,e,t,this.id,n.data,n.tokenPrecTable)}}P1.prototype.contextual=P1.prototype.fallback=P1.prototype.extend=!1;P1.prototype.fallback=P1.prototype.extend=!1;function OR(i,e,t,n,a,s){let r=0,o=1<0){let g=i[h];if(l.allows(g)&&(e.token.value==-1||e.token.value==g||DR(g,e.token.value,a,s))){e.acceptToken(g);break}}let m=e.next,c=0,d=i[r+2];if(e.next<0&&d>c&&i[u+d*3-3]==65535){r=i[u+d*3-1];continue e}for(;c>1,g=u+h+(h<<1),f=i[g],x=i[g+1]||65536;if(m=x)c=h+1;else{r=i[g+2],e.advance();continue e}}break}}function Kc(i,e,t){for(let n=e,a;(a=i[n])!=65535;n++)if(a==t)return n-e;return-1}function DR(i,e,t,n){let a=Kc(t,n,e);return a<0||Kc(t,n,i)e)&&!n.type.isError)return t<0?Math.max(0,Math.min(n.to-1,e-25)):Math.min(i.length,Math.max(n.from+1,e+25));if(t<0?n.prevSibling():n.nextSibling())break;if(!n.parent())return t<0?0:i.length}}class MR{constructor(e,t){this.fragments=e,this.minRepeat=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.lastRepeat=null,this.lastRepeatPos=-1,this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?ed(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?ed(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=r,null;if(s instanceof Le){let o=r>this.lastRepeatPos&&s.type.id>=this.minRepeat;if(r==e||o){let l=r+s.length,u;if(r>=this.safeFrom&&l<=this.safeTo&&(!(u=s.prop(ae.lookAhead))||l+u=Math.max(this.safeFrom,e)&&(this.trees.push(s),this.start.push(r),this.index.push(0))}else this.index[t]++,this.nextStart=r+s.length}}}class BR{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(n=>new es)}getActions(e){let t=0,n=null,{parser:a}=e.p,{tokenizers:s}=a,r=a.stateSlot(e.state,3),o=e.curContext?e.curContext.hash:0,l=0;for(let u=0;uc.end+25&&(l=Math.max(c.lookAhead,l)),c.value!=0)){let d=t;if(c.extended>-1&&(t=this.addActions(e,c.extended,c.end,t)),t=this.addActions(e,c.value,c.end,t),!m.extend&&(n=c,t>d))break}}for(;this.actions.length>t;)this.actions.pop();return l&&e.setLookAhead(l),!n&&e.pos==this.stream.end&&(n=new es,n.value=e.p.parser.eofTerm,n.start=n.end=e.pos,t=this.addActions(e,n.value,n.end,t)),this.mainToken=n,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new es,{pos:n,p:a}=e;return t.start=n,t.end=Math.min(n+1,a.stream.end),t.value=n==a.stream.end?a.parser.eofTerm:0,t}updateCachedToken(e,t,n){let a=this.stream.clipPos(n.pos);if(t.token(this.stream.reset(a,e),n),e.value>-1){let{parser:s}=n.p;for(let r=0;r=0&&n.p.parser.dialect.allows(o>>1)){(o&1)==0?e.value=o>>1:e.extended=o>>1;break}}}else e.value=0,e.end=this.stream.clipPos(a+1)}putAction(e,t,n,a){for(let s=0;se.bufferLength*4?new MR(n,e.minRepeatTerm):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,n=this.stacks=[],a,s;if(this.bigReductionCount>300&&e.length==1){let[r]=e;for(;r.forceReduce()&&r.stack.length&&r.stack[r.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let r=0;rt)n.push(o);else{if(this.advanceStack(o,n,e))continue;{a||(a=[],s=[]),a.push(o);let l=this.tokens.getMainToken(o);s.push(l.value,l.end)}}break}}if(!n.length){let r=a&&WR(a);if(r)return xt&&console.log("Finish with "+this.stackID(r)),this.stackToTree(r);if(this.parser.strict)throw xt&&a&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&a){let r=this.stoppedAt!=null&&a[0].pos>this.stoppedAt?a[0]:this.runRecovery(a,s,n);if(r)return xt&&console.log("Force-finish "+this.stackID(r)),this.stackToTree(r.forceAll())}if(this.recovering){let r=this.recovering==1?1:this.recovering*3;if(n.length>r)for(n.sort((o,l)=>l.score-o.score);n.length>r;)n.pop();n.some(o=>o.reducePos>t)&&this.recovering--}else if(n.length>1){e:for(let r=0;r500&&u.buffer.length>500)if((o.score-u.score||o.buffer.length-u.buffer.length)>0)n.splice(l--,1);else{n.splice(r--,1);continue e}}}n.length>12&&(n.sort((r,o)=>o.score-r.score),n.splice(12,n.length-12))}this.minStackPos=n[0].pos;for(let r=1;r-1&&n.length&&(!s||(n.prop(ae.contextHash)||0)==r))return e.useNode(n,o,t),n;if(n.children.length==0||n.positions[0]>0)break;let l=n.children[0];if(l instanceof Le&&(!a||l.type.id>=this.parser.minRepeatTerm))n=l;else break}return null}advanceStack(e,t,n){let a=e.pos,{parser:s}=this,r=xt?this.stackID(e)+" -> ":"";if(this.stoppedAt!=null&&a>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let u=e.reducePos0)return e.reduce(o),xt&&console.log(r+this.stackID(e)+` (via always-reduce ${s.getName(o&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let l=this.tokens.getActions(e);for(let u=0;ua?t.push(g):n.push(g)}return!1}advanceFully(e,t){let n=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>n)return td(e,t),!0}}runRecovery(e,t,n){let a=null,s=!1;for(let r=0;r ":"";if(o.deadEnd&&(s||(s=!0,o.restart(),xt&&console.log(m+this.stackID(o)+" (restarted)"),this.advanceFully(o,n))))continue;let c=o.split(),d=m;for(let h=0;h<10&&c.forceReduce()&&(xt&&console.log(d+this.stackID(c)+" (via force-reduce)"),!this.advanceFully(c,n));h++)xt&&(d=this.stackID(c)+" -> ");for(let h of o.recoverByInsert(l))xt&&console.log(m+this.stackID(h)+" (via recover-insert)"),this.advanceFully(h,n);this.stream.end>o.pos?(u==o.pos&&(u++,l=0),o.recoverByDelete(l,u),xt&&console.log(m+this.stackID(o)+` (via recover-delete ${this.parser.getName(l)})`),td(o,n)):(!a||a.scoree.topRules[o][1]),a=[];for(let o=0;o=0)s(m,l,o[u++]);else{let c=o[u+-m];for(let d=-m;d>0;d--)s(o[u++],l,c);u++}}}this.nodeSet=new D0(t.map((o,l)=>ft.define({name:l>=this.minRepeatTerm?void 0:o,id:l,props:a[l],top:n.indexOf(l)>-1,error:l==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(l)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=tf;let r=La(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let o=0;otypeof o=="number"?new P1(r,o):o),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,n){let a=new ZR(this,e,t,n);for(let s of this.wrappers)a=s(a,e,t,n);return a}getGoto(e,t,n=!1){let a=this.goto;if(t>=a[0])return-1;for(let s=a[t+1];;){let r=a[s++],o=r&1,l=a[s++];if(o&&n)return l;for(let u=s+(r>>1);s0}validAction(e,t){return!!this.allActions(e,n=>n==t?!0:null)}allActions(e,t){let n=this.stateSlot(e,4),a=n?t(n):void 0;for(let s=this.stateSlot(e,1);a==null;s+=3){if(this.data[s]==65535)if(this.data[s+1]==1)s=dn(this.data,s+2);else break;a=t(dn(this.data,s+1))}return a}nextStates(e){let t=[];for(let n=this.stateSlot(e,1);;n+=3){if(this.data[n]==65535)if(this.data[n+1]==1)n=dn(this.data,n+2);else break;if((this.data[n+2]&1)==0){let a=this.data[n+1];t.some((s,r)=>r&1&&s==a)||t.push(this.data[n],a)}}return t}configure(e){let t=Object.assign(Object.create(Fs.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let n=this.topRules[e.top];if(!n)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=n}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(n=>{let a=e.tokenizers.find(s=>s.from==n);return a?a.to:n})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((n,a)=>{let s=e.specializers.find(o=>o.from==n.external);if(!s)return n;let r=Object.assign(Object.assign({},n),{external:s.to});return t.specializers[a]=nd(r),r})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),n=t.map(()=>!1);if(e)for(let s of e.split(" ")){let r=t.indexOf(s);r>=0&&(n[r]=!0)}let a=null;for(let s=0;sn)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scorei.external(t,n)<<1|e}return i.get}const ER=of({null:W.null,instanceof:W.operatorKeyword,this:W.self,"new super assert open to with void":W.keyword,"class interface extends implements enum var":W.definitionKeyword,"module package import":W.moduleKeyword,"switch while for if else case default do break continue return try catch finally throw":W.controlKeyword,"requires exports opens uses provides public private protected static transitive abstract final strictfp synchronized native transient volatile throws":W.modifier,IntegerLiteral:W.integer,FloatingPointLiteral:W.float,"StringLiteral TextBlock":W.string,CharacterLiteral:W.character,LineComment:W.lineComment,BlockComment:W.blockComment,BooleanLiteral:W.bool,PrimitiveType:W.standard(W.typeName),TypeName:W.typeName,Identifier:W.variableName,"MethodName/Identifier":W.function(W.variableName),Definition:W.definition(W.variableName),ArithOp:W.arithmeticOperator,LogicOp:W.logicOperator,BitOp:W.bitwiseOperator,CompareOp:W.compareOperator,AssignOp:W.definitionOperator,UpdateOp:W.updateOperator,Asterisk:W.punctuation,Label:W.labelName,"( )":W.paren,"[ ]":W.squareBracket,"{ }":W.brace,".":W.derefOperator,", ;":W.separator}),NR={__proto__:null,void:34,byte:36,short:36,int:36,long:36,char:36,float:36,double:36,boolean:36,extends:50,super:52,this:64,public:70,protected:72,private:74,abstract:76,static:78,final:80,strictfp:82,default:84,synchronized:86,native:88,transient:90,volatile:92,sealed:95,non:97,instanceof:140,true:158,false:158,null:166,class:170,new:176,throws:196,implements:204,permits:211,record:215,interface:226,enum:236,open:289,module:291,requires:296,transitive:298,exports:300,to:302,opens:304,uses:306,provides:308,with:310,package:314,import:318,if:330,else:332,while:336,for:340,var:347,assert:354,switch:358,case:366,throw:370,do:374,break:378,continue:382,return:386,try:392,catch:396,finally:404},FR=Fs.deserialize({version:14,states:"#5QQ]QPOOQ%QQPOOO(wQQO'#HlO+OQQO'#CbOOQO'#Cb'#CbO+VQPO'#CaOOQO'#Co'#CoO,{QPO'#DOO-iQQO'#HvOOQO'#Hv'#HvO0^QQO'#HqO0eQQO'#HqOOQO'#Hq'#HqOOQO'#Hp'#HpOOQO'#Hz'#HzO0lQPO'#GwO2`QPO'#DOO2gQPO'#CkO4vQPO'#DfO4}QPO'#CiO6ZQQO'#FsO6bQPO'#DyO7rOSO'#EQOOQO'#IW'#IWO+VQPO'#EzO8iQPO'#EzOOQO'#EV'#EVO:QQQO'#ITOnQPO'#HzO>uQPO'#EcO>uQPO'#EjO>uQPO'#EuO>uQPO'#EpO>}QPO'#I[O?cQQO'#FRO+VQPO'#C`O?kQPO'#C`O+VQPO'#FnO?pQPO'#FpO@OQPO'#FvO@OQPO'#FyO>uQPO'#GOO@TQPO'#F{O6bQPO'#GSO6bQPO'#G[O@OQPO'#GUO]QPO'#G^O@YQPO'#G`O@eQPO'#GbO@pQPO'#GdO@wQPO'#GgOAeQQO'#CjOBTQQO'#CjOB_QPO'#I`OCzQPO'#DOODbQPO'#E]OBbQPO'#E^OESQPO'#I`OEeQPO'#E]OEmQPO'#IhOErQPO'#FOOOQO'#I^'#I^OOQO'#G}'#G}Q%QQPOOOGhQPO'#HzOOQO'#Hl'#HlOHZQQO,58{OOQO'#Hj'#HjOOQO'#Hr'#HrOJtQPO,59_OLSQPO,59jOOQO-E:r-E:rO+VQPO,58zOLyQPO,58zO+VQPO,5uQPO,5:}O>uQPO,5;UO>uQPO,5;aO>uQPO,5;[O>uQPO,5gO6bQPO'#EUO@zQPO,5=QO!0rQPO,5:}O!1TQPO,5;UO!1]QPO,5;aO!1eQPO,5;[O!-SQPO,5>vO!1sQPO,5>vO!-SQPO,5>vO!2OQPO,5;mO!2aQQO,58zO!2iQQO,5zOB_QPO,5:vO!;WQPO,5:wOErQPO,5;jO!;`QPO'#E_OBbQPO'#E_O!;kQPO'#IaO!;sQPO,5:xOB_QPO,5>zO!-SQPO,5>zOEmQPO,5?SOOQO,5:w,5:wO!+VQPO'#CkOOQO,5?S,5?SO!?pQPO'#FPOOQO,5;j,5;jO!?wQPO,5;jO!-SQPO'#EaOOQO-E:{-E:{OOQO,5;i,5;iO+VQPO,58}O!?|QPO'#ChOOQO1G.k1G.kO!2aQQO1G.fO+VQPO1G.fO!@WQQO1G1tOOQO,59f,59fO!@`QPO,59fOOQO-E:t-E:tO!@eQPO,5>iO!@|QPO,59zO>uQPO'#HOO!ATQPO,5>yOOQO1G2U1G2UOOQO1G0Y1G0YO!AnQPO'#CsO!B^QPO'#HvO!BkQPO'#CtO!ByQPO'#HuO!CRQPO,59^OOQO1G.v1G.vO!#aQPO1G.vO!CiQPO,59_O!CvQQO'#HlO!DXQQO'#CbO!DjQPO,59yOOQO,59i,59iO>uQPO,59yOOQO,59W,59WO!DuQQO,59WO!DzQPO,59iO!,oQPO'#GyO!E]QPO,5>eOOQO1G.q1G.qO!EeQPO'#C}O!EvQPO1G.qO>uQPO'#GzO!E{QPO,5>mOOQO1G/k1G/kOOQO1G0[1G0[O!-SQPO'#HPO!FTQPO1G1cO6bQPO1G1cOOQO1G/l1G/lO!F]QQO1G.oOOQO1G.o1G.oO!HZQQO1G/mO!IxQQO1G/mO!KgQQO1G/mO!KnQQO1G/mO!KuQQO1G/mO!MdQQO1G/mO!MkQQO1G/mO# YQQO1G/mO# aQQO1G/mO# kQQO1G/mO# rQQO1G/|O!)dQPO'#DOO# yQQO'#HvO!*jQPO'#DuOOQO1G/y1G/yO##`QQO1G1dOOOO-E:y-E:yOOQO1G0W1G0WO##vQPO'#E{OOQO1G1Q1G1QO#$jQPO1G2UO!-{QPO1G1QO!0rQPO1G0iO!1TQPO1G0pO!1]QPO1G0{O!1eQPO1G0vOOQO1G0]1G0]O#$oQQO1G1XO}QPO'#I[OOQO1G1X1G1XO#&iQQO1G1XO#&qQQO1G1YOOQO1G1]1G1]O#&xQPO1G1]O#'TQQO'#I]O#'bQPO,5:sOOQO1G1z1G1zOOQO1G4R1G4ROOQO1G2l1G2lO#'gQPO'#EYO!-SQPO'#EdO!-SQPO'#EeO!-SQPO'#EhOOQO1G0i1G0iO#'nQPO1G0iO#'sQPO1G0iO#'{QPO1G0iO#(WQPO1G0iO#(fQPO'#ElO#(|QPO1G0pO#)UQPO1G0pO#)ZQPO'#EwOOQO1G0{1G0{O#)nQPO1G0{O#)sQPO'#EsO!-SQPO'#ErOOQO1G0v1G0vO#*pQPO1G0vO#*uQPO1G0vO#*}QPO1G0vO!1sQPO1G4bO#+YQPO'#FXO#+aQPO'#FXOOQO'#HX'#HXO#+iQQO1G1^O#-fQQO1G4bO!-SQPO1G4bO|OOQO1G0b1G0bOOQO1G4f1G4fO#DXQPO1G0bOOQO1G0c1G0cOOQO1G1U1G1UO!?wQPO1G1UOOQO,5:y,5:yO!-SQPO'#E`O#D^QPO,5:yOBbQPO'#HQO#DiQPO,5>{OOQO1G0d1G0dOEmQPO'#IbO#DqQPO1G4fOB_QPO1G4fOOQO1G4n1G4nO!)tQPO'#C}O!)dQPO'#DOOOQO,5;k,5;kO#D|QPO,5;kO#ETQPO,5;kO#E[QQO'#ITO#EcQQO'#IVO#EjQQO'#FQO#EuQPO'#FQO#E}QPO'#IcOOQO,5:{,5:{OOQO1G.i1G.iO#F]QQO'#HnO#FmQQO'#FUO#HTQPO'#F`OOQO'#Hn'#HnO#H_QPO'#HnO#H|QPO'#IkO#IUQPO,59SOOQO7+$Q7+$QO!2aQQO7+$QOOQO7+'`7+'`OOQO1G/Q1G/QO#IZQPO'#DdO#IeQQO'#IPOOQO'#IP'#IPOOQO1G/f1G/fOOQO,5=j,5=jOOQO-E:|-E:|O#IuQWO,58{O#I|QPO,59`OOQO,59`,59`O!-SQPO'#HxO!!tQPO'#GuO#J[QPO,5>aOOQO1G.x1G.xOOQO7+$b7+$bOOQO1G.r1G.rO#JdQQO1G.rO>uQPO1G/eOOQO1G/e1G/eO#JiQPO1G.rO#JnQPO1G/eOOQO1G/T1G/TOOQO,5=e,5=eOOQO-E:w-E:wOOQO7+$]7+$]OOQO,5=f,5=fOOQO-E:x-E:xOOQO,5=k,5=kOOQO-E:}-E:}O6bQPO7+&}O#JyQQO7+&}O6bQPO7+%hO#LgQQO,59_OOQO,5:a,5:aOB_QPO,5:aO#MvQPO'#EtO#NUQPO'#EtOOQO'#HW'#HWO#NpQPO,5;gOOQO,5;g,5;gOOQO7+'p7+'pOOQO7+&l7+&lOOQO7+&T7+&TO#'nQPO7+&TO#'sQPO7+&TO#'{QPO7+&TO#(WQPO7+&TO#(|QPO7+&[O#)UQPO7+&[OOQO7+&g7+&gO#)nQPO7+&gOOQO7+&b7+&bO#*pQPO7+&bO#*uQPO7+&bO#*}QPO7+&bOOQO7+&u7+&uOOQO'#FU'#FUOvOvO$ dQPO7+&sO$ rQPO7+&wOOQO7+&t7+&tOOQO7+&w7+&wO6bQPO'#G|O$!QQPO,5>wOOQO1G0_1G0_O$!]QPO,5:tOOQO,5:t,5:tOOQO,5;O,5;OOOQO'#Eg'#EgOOQO,5;P,5;POOQO,5;S,5;SO$!dQPO'#EmO!*jQPO'#EmO$!uQPO'#IdO$!}QPO,5;WO$#SQPO'#EnOOQO7+&[7+&[O$#ZQPO7+&[O$#`QPO'#ExO>uQPO'#ExO$#qQPO'#IfO$#|QPO,5;cOB_QPO'#I`O!-SQPO'#I`O$$UQPO'#E]OOQO'#HU'#HUO$$]QPO,5;_OOQO,5;_,5;_OOQO,5;^,5;^O$%YQQO7+&xO$'VQQO7+)|O$)PQQO,5;sOOQO,5;s,5;sO$)WQPO,5;sOOQO-E;V-E;VOOQO7+&x7+&xOOQO7+)|7+)|O}O$4VQPO,5;{O$4^QPO'#IjO$4fQPO,5;zO+VQPO'#HZO$4kQPO,5?VOOQO1G.n1G.nOOQO<d,5>dOOQO,5=a,5=aOOQO-E:s-E:sO$5QQPO7+$^OOQO7+%P7+%POOQO7+$^7+$^O>uQPO7+%PO$5VQQO<uQPO,5;XOOQO,5;X,5;XO$;zQPO,5;XO!,oQPO'#HSO$<]QPO,5?OOOQO1G0r1G0rODbQPO'#E]O$WQPO'#EyOOQO1G0}1G0}O$>_QPO1G0}OB_QPO,5;`OOQO-E;S-E;SOOQO1G0y1G0yOOQO<dQQO1G1_O$>kQQO<uQPO,5=VO!*jQPO,5=VOOQO1G2o1G2oOOQO<lOOQO1G/j1G/jOOQO<uQPO1G0sOOQO1G0s1G0sO$HSQPO1G0sOOQO,5=n,5=nOOQO-E;Q-E;QO$uQPO1G2qOOQO<uQPO7+&_OOQO1G0u1G0uOOQO7+&j7+&jOOQO7+'V7+'VO+VQPO'#H^O$JtQPO,5?XO$J|QPO7+'VO$KRQQO'#InOOQOAN@yAN@yO$K^QQOAN@yOOQOAN@uAN@uO$KeQPOAN@uO$KjQQO<`!>cP!=^!>{!=^P!=^P!?O!?R!?VP!{#?U#?XP0oP#?]!)]PPP#Ae#Cm#C|#DY#Dr#ET#EW#Ed#El#Eo#EsP#EvP#FU#FX#F[#F`#Ff#FiwuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u)usOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%q%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h)r){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-[-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u/}0T0j0u1S1V1Z1]1^1j2Q2R2X2Z2[2e2i2k2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n$xlOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nv!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rQ$ShS&_#`)dQ'V$UU']$[$n-VQ'd$^W(w%U,n/i1]U)o%p(^,]Q)q%qS*[&W-RU+U'_.W/vQ+]'eQ-s*oQ.T+YQ.X+ZQ0Q-_Q0]-tR0g.Yw!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rT%r!s*R${rOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n$OcObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3n^!lP!h!p'k+a.p0u|#RW!Y#`$T$Z%{&]&`&d(d(u)d*]*o+g,`,m-l-t.a/n1aS#ea3mQ$g|Q$h}Q$i!OQ$j!PW%Y!f%]+r.sS%`!i)]Q%f!jQ'W$VQ'X$WQ'Y$XQ'Z$YQ)[%aS)`%d)bQ*e&fQ*m&|S+n'w.nQ-o*nS.f+k.iQ.m+oQ0i._Q0m.eQ1r0hQ2^1sw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nU%i!l.f0mS)R%Y)`Q)c%fw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3iV#da%h3m'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ&U#YQ*Y&VX/k,s/o1^2R'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/k,s/o1^2R'fZOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/l,s/o1^2RS#XY/kS$m!Q'`S'_$[$nQ'e$^S)l%j)hQ.W+YQ.Y+ZR/v-V%mXOabepy![!]!_!b#W#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|$]$_$b$e$t$u$v$w$x%U%j%m%q%z&j&l'l'm'n'{(R(f(k(m)Z)g)h)r){*U*V*i*k+^+},^,b,c,g,j,n-T-U-Y-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ&S#WR-g*V'c]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n!w#PW!f!v#Q#R#`$O$T%X%Y%]%d%y&Q&W&`&d&|(d(u)R)b)d*l*n*o+g+r,`,m,x-R-t.a.s/m1j2Q2X2[2e2kW#ba#d%h3mR*b&aviOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u[!hP!p'k+a.p0uY#aa#d%h&a3mQ&}#{Q(e$vW(y%U,n/i1]S*p'S*rS+h't.bS+o'w.nS+t'z+vS.e+k.iR/o,sh#TW!Y!f$T$Z%](d*o+r,`-t.sQ*P%{Q*^&]Q-j*]R0X-lU)}%z){0TQ,P(UR.v+y$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3ivwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uQ%V!cQ%g!kQ%o!qS&o#k2wQ'j$fQ)Q%WQ)V%^Q,u)OQ/p,tQ0n.fQ1W/^R1t0m${qOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n!^#od#g$y$z%S&n&p&r&s&t&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lg2y/b3U3V3X3Y3Z3[3]3a3e3f!Y#rd#g$y$z%S&n&r&s&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lc2|/b3U3X3Y3[3]3a3e3fR'O#{%TgOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%ToOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%SoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ$f{Q$t!WQ$u!XQ${!^R,k(oQ$`mS(V$l+XQ+T'^S+z(Q(XS-W)j)kQ.S+VQ.l+nQ.z,RQ/y-XQ0e.VQ0r.mQ1d/wQ1q0fR2V1cQ'o$gY*v'W'p'q'r'sQ,Q(VW-w*w*x*y*zQ.k+nQ.w+zU0^-x-y-zS0q.l.mQ0x.zS1m0_0`Q1u0rR2]1na!nP!p'k+a+k.i.p0u`!nP!p'k+a+k.i.p0uT+u'z+vd!jP!h!p'k+a+k.e.i.p0uQ's$gQ'v$hQ(P$jQ*z'WQ*|'XQ+S'ZV+s'z+t+vQ%b!iR,})]Q)Y%`R,|)[Q%l!mQ)T%[Q)X%_Q-P)aR/s-QvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uS*q'S*rT+u'z+vQ'r$gS*y'W'sR-z*zQ'q$gQ'y$iU*x'W'r'sQ+O'YQ+m'uS-y*y*zQ-|*{Q0`-zR0b-}Q+e'mQ+f'nR+x'{Q'p$gQ'}$jW*w'W'q'r'sU+Q'Z(O(PU-x*x*y*zS.Q+R+SS0_-y-zQ0d.RR1n0`Q'u$hS*{'X'vR-}*|Q+i'tR0k.bQ+l'uS-{*{+mS0a-|-}R1o0bT.g+k.iQ(O$jS+R'Z(PR.R+SQ'|$jW+P'Z'}(O(PU.P+Q+R+SS0c.Q.RR1p0dvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uT+u'z+vQ'x$iS*}'Y'yR.O+OQ+p'wR0s.nR.r+qQ'T$SR*u'VT*q'S*rQ%k!mS)W%_%lR,z)XQ)g%jR-U)h$zoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nX(x%U,n/i1]%SmOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nU'^$[$n-VS+V'_/vQ.V+YR0f.WX(T$l(Q(U+y_)s%q)r-[/}2Z2i2nQ)u%qR0R-_Q([$oQ)w%sR-b)xT,S(Z,TvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR1W/^wwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uvvOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uQ%P!`R%R!aR$w!ZvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR(f$vR$x!ZR(n${T,f(m,gT,e(m,gX({%V(|)Q,vR,t(}Q/n,sR1a/oQ)P%VQ,r(|Q,w)QR/q,vR%W!cQ(z%UV/g,n/i1]QyOQ#jbY$cy#j)h-T/uQ)h%jQ-T)gR/u-UvVOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uv!gP!p#d&a'S'k't'w'z*r+a+k+v,s.b.i.n.p0u|!xV!g#O#Z#_#}$k%a%e&P&V&Z&{(S(W)e*`+W.^0j2R3`!f#OW!f!v#R$O$T%Y%]%d%y&Q&W&|(d(u)R)b*l*n*o+r,`,m,x-R-t.s/m1j2Q2X2[2e2kQ#Z_S#_a3m$`#}ep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%m%q%z&j&l'l'm'n'{(R(f(k)Z)r){*U*i*k+^+},b,c,j-Y-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$k!QS%a!i)]S%e!j+sS&P#W*VQ&V#YU&Z#`&d)dQ&{#{W(S$l(Q(U+yQ(W$mQ)e%hQ*`&`Q+W'`Q.^+gQ0j.aQ2R1^Z3`$v%U,n/i1]Q*W&SR-h*W^#QW#`$O&|(d(u*l!Q%X!f!v$T%]%d&Q&W&`&d)b)d*n*o+g+r,`,m-R-t.a.s/m2Q2e[%x#Q%X%y,x2X2kS%y#R%YQ,x)RQ2X1jR2k2[#Q`OPaby!_!p#d#j#{$b$t$u$v$w$x%U%h%j&a'S'k't'w'z(m)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3m[!wV!g#_&{)e3`T#[`!wQ0U-cR1i0UQ&b#bR*c&bQ&g#eR*f&gQ$QfR'Q$QQ+_'fS.[+_1XR1X/bQ!pPU%n!p+a0uQ+a'kR0u.pQ%|#TR*Q%|Q&k#hU*h&k/r3kQ/r,{R3k3jQ)^%bR-O)^Q-Z)mR/{-ZQ.c+iR0l.cQ.i+kR0o.iQ+v'zR.t+vQ.o+pR0t.oQ*r'SR-u*rQ(U$lQ+y(QT,O(U+yQ0O-]R1g0OQ-`)uR0S-`Q,T(ZR.{,TQ/P,VR0{/PQ1x0|S2`1x2bR2b1zQ,g(mR/`,gQ(|%VS,q(|,vR,v)QQ1_/mR2S1_Q,o(zR/j,odxOby#j%j)g)h-T-U/uQ$|!_Q'h$bQ(b$tQ(c$uQ(h$wQ(i$xS,f(m,gR/V,^)ftOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u0T0j0u1S1V1Z1]1^1j2Q2R2X2[2e2k2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n_)t%q)r-[/}2Z2i2nQ!sTQ$o!SQ$p!UQ$q!VQ%s!yQ%u!{Q(`$rQ(a$sQ)x%tQ*R2rS.},V,XQ/R,WQ/S,YQ0z/PS0|/R1OQ1z1PR2_1w&{SOTabehpy!S!U!V![!]!_!b!y!{#`#j#k#n#o#p#q#r#s#t#u#v#w#x#|$U$[$]$^$_$b$e$n$r$s$t$u$v$w$x%U%j%p%q%t%z&W&l'_'e(R(^(f(k(m)d)g)h)r){*i*k*o+Y+Z+^+},V,W,X,Y,],^,b,c,g,j,n-R-T-U-V-[-_-t.W.Y/P/R/W/Y/^/e/i/u/v/}0T1O1P1S1V1Z1]1w2Z2i2n2r2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ)v%qQ-])rQ/|-[Q1f/}Q2j2ZQ2l2iR2p2nxdOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/^/uU#ga$e3mS#ye3hS$ap3iQ$y![Q$z!]Q%S!bQ&n#kQ&p#nQ&q#oQ&r#pQ&s#qQ&t#rQ&u#sQ&v#tQ&w#uS&x#v3QQ&y#wQ&z#xQ'P#|Q'c$]Y'f$_$v,b/Y1V^)p%q)r-[/}2Z2i2nU)|%z){0TS*j&l3TQ+{(RQ,a(fQ,d(kS-m*i3bQ-n*kQ.Z+^Q.y+}Q/[,cQ/b,jQ1R/WQ1Y/eQ1|1SQ2P1ZQ3U2wQ3V2xQ3W2yQ3X2zQ3Y2{Q3Z2|Q3[2}Q3]3OQ3^3PQ3_3RQ3a3SQ3e3cQ3f3dR3l3nvWOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!fP!p'k+a+k.i.p0uW!vV#}&P3`S#`a3m#|$Oep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%q%z&l(R(f(k)r){*i*k+^+},b,c,j-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$TiS%]!h.eS%d!j+sf&Q#W%m&j'l'm'n'{)Z*U*V-YQ&W#_Q&`#aS&d#d&aQ&|#{Q(d$vW(u%U,n/i1]Q)b%eQ)d%hQ*l&{Q*n&}S*o'S*rS+g't.bS+r'z+vQ,`(eQ,m(yQ-R)eQ-t*pQ.a+hQ.s+tS/m,s/oQ2Q1^R2e2R'b]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ$l!QQ(Q$kS(X$m+WQ+X'`R,R(W'sUOPVabeipy!Q![!]!_!b!h!j!p#W#Y#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&V&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nR&T#W%OnObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ#haQ&S#WQ'O#{W)m%m'm'n'{Q*g&jQ+c'lQ,{)ZQ-f*UQ-g*VQ/z-YR3j3mQ*T&RR-e*SU#ca%h3mR&e#d#c_OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3m#c^OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3ml#SW!Y!f$T$Z%]%{&]*]*o+r-l-t.sU&[#`&d)dQ*a&`Q,_(dQ,l(uQ.`+gQ/X,`Q/f,mQ0i.aQ1`/nR2U1aQ*O%zQ-c){R1h0TR-d){T#fa3m$vkOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%q%z&l(R(f(k(m)g)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nW(v%U,n/i1]T)i%j)h%SjOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nT'[$[-VQ'g$_Q(g$vQ/Z,bQ1T/YR2O1V[!oP!p'k+a.p0uT.g+k.iU#UW!Y(dQ%Z!fU'U$T$Z,`Q)U%]S-r*o+rT0[-t.sd!kP!p'k'z+a+k+v.i.p0uV%^!h+t.eR%c!iW%[!f%]+r.sQ)a%dR-Q)bQ)n%mV+d'm'n'{R+j'tT.h+k.iR+q'w`!mP!p'k+a+k.i.p0uT%_!h.eR-^)rR)v%qT/O,V/PQ0}/RR1y1OR1y1PR/c,j",nodeNames:"⚠ LineComment BlockComment Program ModuleDeclaration MarkerAnnotation Identifier ScopedIdentifier . Annotation ) ( AnnotationArgumentList LambdaExpression Definition FormalParameters ReceiverParameter void PrimitiveType TypeName ScopedTypeName GenericType TypeArguments AnnotatedType Wildcard extends super , ArrayType ] Dimension [ this FormalParameter Modifiers public protected private abstract static final strictfp default synchronized native transient volatile sealed non SpreadParameter VariableDeclarator AssignOp } { ArrayInitializer InferredParameters Block BinaryExpression CompareOp CompareOp CompareOp LogicOp LogicOp BitOp BitOp BitOp ArithOp ArithOp BitOp InstanceofExpression instanceof TypePattern TernaryExpression LogicOp : UpdateExpression UpdateOp IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral TextBlock null ClassLiteral class ParenthesizedExpression ObjectCreationExpression new ArgumentList ClassBody ; FieldDeclaration MethodDeclaration TypeParameters TypeParameter TypeBound Throws throws ClassDeclaration Superclass SuperInterfaces implements InterfaceTypeList Permits permits RecordDeclaration record RecordHeader RecordComponent RecordBody CompactConstructorDeclaration InterfaceDeclaration interface ExtendsInterfaces InterfaceBody ConstantDeclaration EnumDeclaration enum EnumBody EnumConstant EnumBodyDeclarations AnnotationTypeDeclaration AnnotationTypeBody AnnotationTypeElementDeclaration StaticInitializer ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation FieldAccess ArrayAccess MethodInvocation MethodName MethodReference ArrayCreationExpression Dimension UnaryExpression LogicOp BitOp CastExpression AssignmentExpression AssignOp ElementValueArrayInitializer ElementValuePair open module ModuleBody ModuleDirective requires transitive exports to opens uses provides with PackageDeclaration package ImportDeclaration import Asterisk ExpressionStatement LabeledStatement Label IfStatement if else WhileStatement while ForStatement for ForSpec LocalVariableDeclaration var EnhancedForStatement ForSpec AssertStatement assert SwitchStatement switch SwitchBlock SwitchRule SwitchLabel case ThrowStatement throw DoStatement do BreakStatement break ContinueStatement continue ReturnStatement return SynchronizedStatement TryStatement try CatchClause catch CatchFormalParameter CatchType FinallyClause finally TryWithResourcesStatement ResourceSpecification Resource ClassContent",maxTerm:296,nodeProps:[["isolate",-4,1,2,80,81,""],["group",-27,4,56,91,99,106,112,117,122,156,158,161,162,164,167,169,172,174,176,178,184,186,188,190,192,194,195,203,"Statement",-25,6,13,32,57,69,72,75,77,78,79,80,81,82,83,84,86,87,129,130,131,133,134,136,139,140,"Expression",-7,17,18,19,20,21,23,28,"Type"],["openedBy",10,"(",52,"{"],["closedBy",11,")",53,"}"]],propSources:[ER],skippedNodes:[0,1,2],repeatNodeCount:30,tokenData:"#$g_R!_OX%QXY'fYZ)bZ^'f^p%Qpq'fqr*|rs,^st%Qtu2zuv4avw5qwx7Xxy?pyz@^z{@z{|Ap|}CW}!OCt!O!PEa!P!QNZ!Q!R!+P!R![!.k![!]!;T!]!^!osw<}wx9}x#O<}#O#P&Z#P;'S<};'S;=`?d<%lO<}P>rVOY>oZw>owx?Xx#O>o#P;'S>o;'S;=`?^<%lO>oP?^O!rPP?aP;=`<%l>oT?gP;=`<%l<}T?mP;=`<%l8P_?wVZZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV@eVYR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVATX$fP&}S!eQOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVAwZ!dR&}SOY%QYZ%lZr%Qrs%qs{%Q{|Bj|!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVBqV!nR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVC_VkR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_C}[&pW!dR&}SOY%QYZ%lZr%Qrs%qs}%Q}!OBj!O!_%Q!_!`5T!`!aDs!a;'S%Q;'S;=`&s<%lO%QVDzV&vR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_EhZWY&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PFZ!P!Q%Q!Q![Gi![;'S%Q;'S;=`&s<%lO%QVF`X&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PF{!P;'S%Q;'S;=`&s<%lO%QVGSV&rR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTGpc&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#R%Q#R#SMc#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTISV&}S!pPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTIn]&}SOY%QYZ%lZr%Qrs%qs{%Q{|Jg|}%Q}!OJg!O!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTJlX&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTK`c&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![!f%Q!f!gH{!g!h%Q!h!iH{!i#R%Q#R#SLk#S#W%Q#W#XH{#X#Y%Q#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTLpZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![#R%Q#R#SLk#S;'S%Q;'S;=`&s<%lO%QTMhZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![#R%Q#R#SMc#S;'S%Q;'S;=`&s<%lO%Q_Nb]&}S!eQOY%QYZ%lZr%Qrs%qsz%Qz{! Z{!P%Q!P!Q!'|!Q!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%Q_! `X&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!!QT&}SOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!dTOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!vVOz!!az{!!s{!P!!a!P!Q!#]!Q;'S!!a;'S;=`!#b<%lO!!aZ!#bOQZZ!#eP;=`<%l!!a_!#kXOY!$WYZ! {Zr!$Wrs!&bsz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!$ZXOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!${Z&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!%uV&}SQZOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!&_P;=`<%l! Z_!&eXOY!$WYZ! {Zr!$Wrs!!asz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!'TZOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!'yP;=`<%l!$W_!(TV&}SPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!(oVPZOY!)UYZ%lZr!)Urs!)vs;'S!)U;'S;=`!*y<%lO!)U_!)ZVPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!)sP;=`<%l!'|_!){VPZOY!)UYZ%lZr!)Urs!*bs;'S!)U;'S;=`!*y<%lO!)UZ!*gSPZOY!*bZ;'S!*b;'S;=`!*s<%lO!*bZ!*vP;=`<%l!*b_!*|P;=`<%l!)UT!+Wq&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!d%Q!d!e!1u!e!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o!z%Q!z!{!3s!{#R%Q#R#S!0}#S#U%Q#U#V!1u#V#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a#l%Q#l#m!3s#m;'S%Q;'S;=`&s<%lO%QT!-fa&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QT!.ri&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o#R%Q#R#S!0}#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!0hV&}S!oPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT!1SZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!.k![#R%Q#R#S!0}#S;'S%Q;'S;=`&s<%lO%QT!1zY&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S;'S%Q;'S;=`&s<%lO%QT!2q`&}S!oPOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S!n%Q!n!o!0a!o#R%Q#R#S!1u#S#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!3x_&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!P!4w!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QT!4|]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i#T%Q#T#Z!5u#Z;'S%Q;'S;=`&s<%lO%QT!5zc&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#R%Q#R#S!4w#S#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!7^i&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!8{!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i!n%Q!n!o!0a!o!r%Q!r!sIi!s#R%Q#R#S!:V#S#T%Q#T#Z!7V#Z#`%Q#`#a!0a#a#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!9Qa&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!:[]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QV!;[X!lR&}SOY%QYZ%lZr%Qrs%qs![%Q![!]!;w!];'S%Q;'S;=`&s<%lO%QV!l!`;'S%Q;'S;=`&s<%lO%QU!>PX!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QU!>sV!]Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!?aX!TR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QV!@TY&gR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`!>l!`!a!@s!a;'S%Q;'S;=`&s<%lO%QU!@zY!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`!a!=x!a;'S%Q;'S;=`&s<%lO%Q_!AsV&kX!kQ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!BaX&]Z&}SOY%QYZ%lZr%Qrs%qs#]%Q#]#^!B|#^;'S%Q;'S;=`&s<%lO%QV!CRX&}SOY%QYZ%lZr%Qrs%qs#b%Q#b#c!Cn#c;'S%Q;'S;=`&s<%lO%QV!CsX&}SOY%QYZ%lZr%Qrs%qs#h%Q#h#i!D`#i;'S%Q;'S;=`&s<%lO%QV!DeX&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!EQ#Y;'S%Q;'S;=`&s<%lO%QV!EVX&}SOY%QYZ%lZr%Qrs%qs#f%Q#f#g!Er#g;'S%Q;'S;=`&s<%lO%QV!EwX&}SOY%QYZ%lZr%Qrs%qs#Y%Q#Y#Z!Fd#Z;'S%Q;'S;=`&s<%lO%QV!FiX&}SOY%QYZ%lZr%Qrs%qs#T%Q#T#U!GU#U;'S%Q;'S;=`&s<%lO%QV!GZX&}SOY%QYZ%lZr%Qrs%qs#V%Q#V#W!Gv#W;'S%Q;'S;=`&s<%lO%QV!G{X&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!Hh#Y;'S%Q;'S;=`&s<%lO%QV!HoV'ZR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!I]b&aZ&}SOY%QYZ%lZr%Qrs%qst%Qtu!IUu!Q%Q!Q![!IU![!c%Q!c!}!IU!}#R%Q#R#S!IU#S#T%Q#T#o!IU#o$g%Q$g;'S!IU;'S;=`!Je<%lO!IU_!JhP;=`<%l!IU_!JrVoZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!K`VmR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QU!K|X!cQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QV!LpV!VR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!M`Z'dX!bQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`#p%Q#p#q!NR#q;'S%Q;'S;=`&s<%lO%QU!NYV!`Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!NvV!UR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT# dV$OP&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_#!Su&}S&XZ&_ZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qst%Qtu2zu!Q%Q!Q![2z![!c%Q!c!}2z!}#R%Q#R#S2z#S#T%Q#T#o2z#o#y%Q#y#z'f#z$f%Q$f$g'f$g#BY2z#BY#BZ# y#BZ$IS2z$IS$I_# y$I_$I|2z$I|$JO# y$JO$JT2z$JT$JU# y$JU$KV2z$KV$KW# y$KW&FU2z&FU&FV# y&FV;'S2z;'S;=`4Z<%lO2z",tokenizers:[0,1,2,3],topRules:{Program:[0,3],ClassContent:[1,206]},dynamicPrecedences:{21:1,246:-1,252:-1},specialized:[{term:245,get:i=>NR[i]||-1}],tokenPrec:9164}),JR=Ms.define({name:"java",parser:FR.configure({props:[cf.add({IfStatement:Yr({except:/^\s*({|else\b)/}),TryStatement:Yr({except:/^\s*({|catch|finally)\b/}),LabeledStatement:cF,SwitchBlock:i=>{let e=i.textAfter,t=/^\s*\}/.test(e),n=/^\s*(case|default)\b/.test(e);return i.baseIndent+(t?0:n?1:2)*i.unit},Block:mF({closing:"}"}),BlockComment:()=>null,Statement:Yr({except:/^{/})}),gF.add({"Block SwitchBlock ClassBody ElementValueArrayInitializer ModuleBody EnumBody ConstructorBody InterfaceBody ArrayInitializer":pF,BlockComment(i){return{from:i.from+2,to:i.to-2}}})]}),languageData:{commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\})$/}});function RR(){return new nF(JR)}const GR=" ";function HR(i,e){let t="",n=e;for(let a=0;a{var x,b;const o=s.trim(),l=a,{chars:u,comment:m}=HR(s,a);a=m;const c=l?0:((x=/^[}\])\s]*/.exec(o)[0].match(/[}\])]/g))==null?void 0:x.length)??0,d=n.slice(0,Math.max(0,n.length-c));qR.test(o)&&((b=d.at(-1))!=null&&b.inCase)&&(d.at(-1).inCase=!1);const h=VR(d);for(const v of u)"{[(".includes(v)?n.push({line:r,char:v}):n.pop();const g=n.at(-1);(g==null?void 0:g.line)===r&&g.char==="{"&&/^switch\b/.test(o)&&(g.char="switch"),(g==null?void 0:g.char)==="switch"&&QR.test(o)&&(g.inCase=!0);const f=r+1;return ft||l&&!o.startsWith("*")?s:o===""?"":GR.repeat(h)+(l?" ":"")+o}).join(` +`)}const UR=[">>>=","<<=",">>=","...","->","::","++","--","&&","||","==","!=","<=",">=","+=","-=","*=","/=","%=","&=","|=","^=","<<"],$R=new Set(["=","==","!=","<=",">=","&&","||","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=",">>>=","->","&","|","^","<<"]),YR=new Set(["+","-","*","/","%"]),XR=new Set(["return","case","throw","new","else","do","yield","assert","instanceof"]),KR=new Set(["byte","short","int","long","float","double","char","boolean"]),eG=new Set(["if","for","while","switch","catch","synchronized","try"]),tG=new Set(["else","catch","finally"]);function nG(i){const e=[];let t=1,n=0;const a=(s,r)=>{e.push({kind:s,text:i.slice(n,r),from:n,to:r,line:t});for(let o=n;oi.startsWith(l,n));a(o?"op":"other",n+((o==null?void 0:o.length)??1))}}return e}function pF(i,e){var n,a;const t=i[e];return t?t.kind==="num"||t.kind==="str"?!0:t.kind==="word"?!mF.has(t.text):t.text==="]"?!0:t.text===")"?!(cF.has(((n=i[e-1])==null?void 0:n.text)??"")&&((a=i[e-2])==null?void 0:a.text)==="("):!1:!1}const id=i=>(i==null?void 0:i.kind)==="word"&&new RegExp("^\\p{Lu}","u").test(i.text);function fF(i,e=1,t=Number.MAX_SAFE_INTEGER){const n=gF(i),a=n.length,s=new Array(a).fill(!1),r=new Array(a).fill(!1),o=new Array(a).fill(-1),l=new Array(a).fill(!1),u=new Array(a).fill(!1),m=[{at:-1,block:!0,paren:0}];let c=0,d=0;n.forEach((g,f)=>{var v,w;const b=n[f-1],x=m.at(-1);if(g.kind!=="comment")if(g.text==="(")x.paren++;else if(g.text===")")x.paren=Math.max(0,x.paren-1);else if(g.text==="{"){const z=(b==null?void 0:b.text)??"",I=["=",",","]","("].includes(z)||z==="{"&&!r[f-1];r[f]=!I,l[f]=z==="do",m.push({at:f,block:!I,paren:0})}else if(g.text==="}")if(m.length>1){const z=m.pop();r[f]=z.block,o[f]=z.at,o[z.at]=f,l[f]=l[z.at]}else r[f]=!0;else if(g.text===";")u[f]=x.block&&x.paren===0,d=0;else if(g.text==="?"&&(b==null?void 0:b.text)!=="<"&&![")",";",",",void 0].includes((v=n[f+1])==null?void 0:v.text))s[f]=!0,d++;else if(g.text===":")s[f]=d>0||x.paren>0,d>0&&d--;else if(g.text==="<"){const z=n[f+1];(id(b)||(b==null?void 0:b.text)===".")&&(id(z)||(z==null?void 0:z.text)===">"||(z==null?void 0:z.text)==="?")?c++:s[f]=!((b==null?void 0:b.text)==="<"||(z==null?void 0:z.text)==="<")}else g.text===">"?c>0?c--:s[f]=!((b==null?void 0:b.text)===">"||((w=n[f+1])==null?void 0:w.text)===">"):lF.has(g.text)?s[f]=!0:uF.has(g.text)&&(s[f]=pF(n,f-1))});const h=[];for(let g=1;gt||f.kind==="comment")continue;let v;b.kind==="comment"?v=void 0:r[g-1]&&f.text==="{"&&o[g-1]!==g||r[g]&&b.text==="}"&&o[g]!==g-1?v=` -`:r[g-1]&&f.text==="}"?hF.has(b.text)||b.text==="while"&&l[g-1]?v=" ":[")",";",",","."].includes(b.text)||(v=` +`;)o+=i[o]==="\\"?2:1;a("str",Math.min(i.length,o+1))}else if(/[\d]/.test(s)||s==="."&&/\d/.test(i[n+1]??"")){const o=/^(?:0[xXbB][\da-fA-F_]+|[\d_]*\.?[\d_]*(?:[eE][+-]?\d+)?)[a-zA-Z]*/.exec(i.slice(n));a("num",n+Math.max(1,o[0].length))}else if(/[\p{L}_$]/u.test(s)){const o=/^[\p{L}\p{N}_$]+/u.exec(i.slice(n));a("word",n+o[0].length)}else{const o=UR.find(l=>i.startsWith(l,n));a(o?"op":"other",n+((o==null?void 0:o.length)??1))}}return e}function iG(i,e){var n,a;const t=i[e];return t?t.kind==="num"||t.kind==="str"?!0:t.kind==="word"?!XR.has(t.text):t.text==="]"?!0:t.text===")"?!(KR.has(((n=i[e-1])==null?void 0:n.text)??"")&&((a=i[e-2])==null?void 0:a.text)==="("):!1:!1}const id=i=>(i==null?void 0:i.kind)==="word"&&new RegExp("^\\p{Lu}","u").test(i.text);function aG(i,e=1,t=Number.MAX_SAFE_INTEGER){const n=nG(i),a=n.length,s=new Array(a).fill(!1),r=new Array(a).fill(!1),o=new Array(a).fill(-1),l=new Array(a).fill(!1),u=new Array(a).fill(!1),m=[{at:-1,block:!0,paren:0}];let c=0,d=0;n.forEach((g,f)=>{var v,w;const x=n[f-1],b=m.at(-1);if(g.kind!=="comment")if(g.text==="(")b.paren++;else if(g.text===")")b.paren=Math.max(0,b.paren-1);else if(g.text==="{"){const z=(x==null?void 0:x.text)??"",I=["=",",","]","("].includes(z)||z==="{"&&!r[f-1];r[f]=!I,l[f]=z==="do",m.push({at:f,block:!I,paren:0})}else if(g.text==="}")if(m.length>1){const z=m.pop();r[f]=z.block,o[f]=z.at,o[z.at]=f,l[f]=l[z.at]}else r[f]=!0;else if(g.text===";")u[f]=b.block&&b.paren===0,d=0;else if(g.text==="?"&&(x==null?void 0:x.text)!=="<"&&![")",";",",",void 0].includes((v=n[f+1])==null?void 0:v.text))s[f]=!0,d++;else if(g.text===":")s[f]=d>0||b.paren>0,d>0&&d--;else if(g.text==="<"){const z=n[f+1];(id(x)||(x==null?void 0:x.text)===".")&&(id(z)||(z==null?void 0:z.text)===">"||(z==null?void 0:z.text)==="?")?c++:s[f]=!((x==null?void 0:x.text)==="<"||(z==null?void 0:z.text)==="<")}else g.text===">"?c>0?c--:s[f]=!((x==null?void 0:x.text)===">"||((w=n[f+1])==null?void 0:w.text)===">"):$R.has(g.text)?s[f]=!0:YR.has(g.text)&&(s[f]=iG(n,f-1))});const h=[];for(let g=1;gt||f.kind==="comment")continue;let v;x.kind==="comment"?v=void 0:r[g-1]&&f.text==="{"&&o[g-1]!==g||r[g]&&x.text==="}"&&o[g]!==g-1?v=` +`:r[g-1]&&f.text==="}"?tG.has(x.text)||x.text==="while"&&l[g-1]?v=" ":[")",";",",","."].includes(x.text)||(v=` `):u[g-1]?v=` -`:b.text===","||b.text===";"?v="":f.text===","?v=" ":f.text===";"?v=b.text===")"?"":" ":f.text==="("||b.text===")"?v="":(b.text==="("&&dF.has(f.text)||b.text==="{"&&r[g]||s[g-1]||s[g])&&(v=" "),v!==void 0&&v!==x&&h.push({from:f.to,to:b.from,insert:v})}return h}const bF=[["nextInt","","int","Ganze Zahl einlesen","Read a whole number","Ler um número inteiro"],["nextDouble","","double","Kommazahl einlesen","Read a decimal number","Ler um número decimal"],["nextLine","","String","Ganze Zeile als Text einlesen","Read a whole line as text","Ler uma linha inteira como texto"],["next","","String","Ein Wort einlesen (bis zum Leerzeichen)","Read one word (up to a space)","Ler uma palavra (até ao espaço)"],["nextBoolean","","boolean","true oder false einlesen","Read true or false","Ler true ou false"],["nextLong","","long","Große ganze Zahl einlesen","Read a large whole number","Ler um número inteiro grande"],["hasNextInt","","boolean","Kommt als Nächstes eine ganze Zahl?","Is the next input a whole number?","A próxima entrada é um número inteiro?"],["hasNextDouble","","boolean","Kommt als Nächstes eine Kommazahl?","Is the next input a decimal number?","A próxima entrada é um número decimal?"],["hasNextLine","","boolean","Gibt es noch eine Zeile?","Is there another line?","Existe mais uma linha?"],["hasNext","","boolean","Gibt es noch ein Wort?","Is there another word?","Existe mais uma palavra?"],["close","","void","Eingabe schließen","Close the input","Fechar a entrada"]],xF=[["length","","int","Anzahl der Zeichen","Number of characters","Número de caracteres"],["charAt","index","char","Zeichen an Stelle index (ab 0)","Character at position index (from 0)","Carácter na posição index (a partir de 0)"],["equals","text","boolean","Gleicher Text? (statt ==)","Same text? (instead of ==)","Mesmo texto? (em vez de ==)"],["equalsIgnoreCase","text","boolean","Gleicher Text, groß/klein egal?","Same text, ignoring case?","Mesmo texto, ignorando maiúsculas?"],["compareTo","text","int","Alphabetisch vergleichen (<0, 0, >0)","Compare alphabetically (<0, 0, >0)","Comparar alfabeticamente (<0, 0, >0)"],["substring","von, bis","String","Teiltext von Stelle von bis vor bis","Part of the text from start up to before end","Parte do texto do início até antes do fim"],["indexOf","text","int","Erste Stelle des Textes (−1 = fehlt)","First position of the text (−1 = missing)","Primeira posição do texto (−1 = não existe)"],["lastIndexOf","text","int","Letzte Stelle des Textes (−1 = fehlt)","Last position of the text (−1 = missing)","Última posição do texto (−1 = não existe)"],["contains","text","boolean","Kommt der Text darin vor?","Does it contain the text?","Contém o texto?"],["startsWith","text","boolean","Fängt damit an?","Starts with it?","Começa com isto?"],["endsWith","text","boolean","Hört damit auf?","Ends with it?","Termina com isto?"],["toUpperCase","","String","In GROSSBUCHSTABEN","In UPPER CASE","Em MAIÚSCULAS"],["toLowerCase","","String","In kleinbuchstaben","In lower case","Em minúsculas"],["trim","","String","Leerzeichen vorn und hinten weg","Remove spaces at both ends","Remover espaços no início e no fim"],["replace","alt, neu","String","Text ersetzen","Replace text","Substituir texto"],["split","trenner","String[]",'In Teile zerlegen, z. B. split(";")','Split into parts, e.g. split(";")','Dividir em partes, p. ex. split(";")'],["isEmpty","","boolean","Leerer Text?","Empty text?","Texto vazio?"],["toCharArray","","char[]","Als Array von Zeichen","As an array of characters","Como array de caracteres"]],n2=[["println","wert","void","Ausgeben, danach neue Zeile","Print, then a new line","Escrever e mudar de linha"],["print","wert","void","Ausgeben ohne neue Zeile","Print without a new line","Escrever sem mudar de linha"],["printf","format, werte","PrintStream",'Formatiert ausgeben, z. B. "%.2f"','Print formatted, e.g. "%.2f"','Escrever formatado, p. ex. "%.2f"']],vF=[...n2,["close","","void","Datei speichern und schließen","Save and close the file","Guardar e fechar o ficheiro"]],yF=[["readLine","","String","Nächste Zeile lesen (null = Ende)","Read the next line (null = end)","Ler a próxima linha (null = fim)"],["close","","void","Datei schließen","Close the file","Fechar o ficheiro"]],wF=[["exists","","boolean","Gibt es die Datei?","Does the file exist?","O ficheiro existe?"],["getName","","String","Name der Datei","Name of the file","Nome do ficheiro"],["length","","long","Größe in Bytes","Size in bytes","Tamanho em bytes"]],zF=[["getMessage","","String","Fehlermeldung als Text","Error message as text","Mensagem de erro como texto"],["printStackTrace","","void","Fehler mit Zeilen ausgeben","Print the error with its lines","Mostrar o erro com as linhas"]],IF=[["getSource","","Object","Welcher Knopf wurde geklickt?","Which button was clicked?","Que botão foi clicado?"],["getActionCommand","","String","Beschriftung des Knopfs","Label of the button","Texto do botão"]],kF=[["setBackground","farbe","void","Hintergrundfarbe, z. B. Color.RED","Background colour, e.g. Color.RED","Cor de fundo, p. ex. Color.RED"],["setForeground","farbe","void","Schriftfarbe","Text colour","Cor do texto"],["setFont","schrift","void",'Schrift, z. B. new Font("Arial", Font.BOLD, 24)','Font, e.g. new Font("Arial", Font.BOLD, 24)','Letra, p. ex. new Font("Arial", Font.BOLD, 24)'],["setVisible","true","void","Anzeigen (true) oder verstecken (false)","Show (true) or hide (false)","Mostrar (true) ou esconder (false)"],["setEnabled","true","void","Anklickbar (true) oder grau (false)","Clickable (true) or greyed out (false)","Clicável (true) ou cinzento (false)"],["setSize","breite, höhe","void","Größe in Pixeln","Size in pixels","Tamanho em píxeis"]],SF=[["add","baustein","Component","Baustein hinzufügen","Add a component","Adicionar um componente"],["setLayout","layout","void","Anordnung, z. B. new FlowLayout()","Layout, e.g. new FlowLayout()","Disposição, p. ex. new FlowLayout()"],["remove","baustein","void","Baustein entfernen","Remove a component","Remover um componente"]],TF=[["setTitle","text","void","Titel oben im Fenster","Title at the top of the window","Título no topo da janela"],["setDefaultCloseOperation","JFrame.EXIT_ON_CLOSE","void","Was beim Schließen passiert","What happens when closing","O que acontece ao fechar"],["setLocationRelativeTo","null","void","Mit null: Fenster in die Mitte","With null: centre the window","Com null: janela no centro"],["setResizable","false","void","Größe änderbar?","Can the size change?","Pode mudar de tamanho?"],["pack","","void","Größe passend zum Inhalt","Size to fit the content","Tamanho ajustado ao conteúdo"],["getContentPane","","JPanel","Inhaltsfläche des Fensters","Content area of the window","Área de conteúdo da janela"],["dispose","","void","Fenster schließen","Close the window","Fechar a janela"]],_F=[["setText","text","void","Text setzen","Set the text","Definir o texto"],["getText","","String","Text holen","Get the text","Obter o texto"]],CF=[["addActionListener","e -> { }","void","Was beim Klick passiert","What happens on click","O que acontece ao clicar"],["setOpaque","true","void","Hintergrund sichtbar (für Farben)","Show the background (for colours)","Mostrar o fundo (para cores)"],["setBorderPainted","false","void","Rahmen zeichnen?","Draw the border?","Desenhar a borda?"]],AF=[["setOpaque","true","void","Hintergrund sichtbar (für Farben)","Show the background (for colours)","Mostrar o fundo (para cores)"],["setHorizontalAlignment","JLabel.CENTER","void","Text links, mittig oder rechts","Text left, centre or right","Texto à esquerda, centro ou direita"]],jF=[["addActionListener","e -> { }","void","Was bei Enter passiert","What happens on Enter","O que acontece ao carregar em Enter"],["setEditable","false","void","Darf man hineinschreiben?","Can you type into it?","Pode-se escrever?"],["setColumns","anzahl","void","Breite in Zeichen","Width in characters","Largura em caracteres"],["requestFocus","","void","Cursor hineinsetzen","Put the cursor into it","Pôr o cursor no campo"]],OF=[["length",null,"int","Anzahl der Elemente (ohne Klammern)","Number of elements (no brackets)","Número de elementos (sem parênteses)"]],ao=[["add","wert","boolean","Element hinten anhängen","Append an element at the end","Acrescentar um elemento no fim"],["get","index","E","Element an Stelle index holen (ab 0)","Get the element at index (from 0)","Obter o elemento na posição index (a partir de 0)"],["size","","int","Anzahl der Elemente","Number of elements","Número de elementos"],["set","index, wert","E","Element an Stelle index ersetzen","Replace the element at index","Substituir o elemento na posição index"],["remove","index","E","Element an Stelle index entfernen","Remove the element at index","Remover o elemento na posição index"],["contains","wert","boolean","Ist das Element in der Liste?","Is the element in the list?","O elemento está na lista?"],["indexOf","wert","int","Stelle des Elements (-1 = nicht da)","Position of the element (-1 = not found)","Posição do elemento (-1 = não existe)"],["isEmpty","","boolean","Ist die Liste leer?","Is the list empty?","A lista está vazia?"],["clear","","void","Alle Elemente entfernen","Remove all elements","Remover todos os elementos"]],so={Scanner:bF,String:xF,PrintStream:n2,PrintWriter:vF,BufferedReader:yF,FileReader:[["close","","void","Datei schließen","Close the file","Fechar o ficheiro"]],File:wF,Exception:zF,ActionEvent:IF,Component:kF,Container:SF,JFrame:TF,JPanel:[],JButton:CF,JLabel:AF,JTextField:jF,TextHolder:_F,ArrayList:ao,List:ao,LinkedList:ao},PF={JFrame:["Container","Component"],JPanel:["Container","Component"],JButton:["TextHolder","Component"],JLabel:["TextHolder","Component"],JTextField:["TextHolder","Component"],PrintWriter:[]},i2={mbot:[["forward","cm","void","Geradeaus vorwärts fahren","Drive forward","Andar para a frente"],["backward","cm","void","Rückwärts fahren","Drive backward","Andar para trás"],["turnLeft","grad","void","Auf der Stelle nach links drehen","Turn left on the spot","Rodar para a esquerda"],["turnRight","grad","void","Auf der Stelle nach rechts drehen","Turn right on the spot","Rodar para a direita"],["stop","","void","Motoren anhalten","Stop the motors","Parar os motores"],["drive","links, rechts","void","Räder einzeln in Prozent (−100–100), fährt weiter bis stop()","Wheels separately in percent (−100–100), keeps going until stop()","Rodas separadas em percentagem (−100–100), continua até stop()"],["resetTimer","","void","Stoppuhr auf 0 setzen","Reset the stopwatch to 0","Pôr o cronómetro a 0"],["pause","ms","void","Millisekunden warten","Wait milliseconds","Esperar milissegundos"],["setLed","rot, gruen, blau","void","LEDs in einer Farbe (je 0–255)","LEDs in a colour (0–255 each)","LEDs numa cor (0–255 cada)"],["ledOff","","void","LEDs aus","LEDs off","Desligar LEDs"],["led","nr","LED",'Eine LED (0–4), dann .setColor("grün") oder .setColor("aus")','One LED (0–4), then .setColor("green") or .setColor("off")','Um LED (0–4), depois .setColor("green") ou .setColor("off")'],["showText",'"Hallo"',"void","Text auf dem Bildschirm zeigen","Show text on the screen","Mostrar texto no ecrã"],["emotion",'"smile"',"void","Gefühl zeigen: LEDs, Ton, Bewegung (smile, hello, sad …)","Show a feeling: LEDs, sound, motion (smile, hello, sad …)","Mostrar um sentimento: LEDs, som, movimento (smile, hello, sad …)"],["playTone","hz, ms","void","Ton spielen, z. B. playTone(440, 500)","Play a tone, e.g. playTone(440, 500)","Tocar um som, p. ex. playTone(440, 500)"],["getDistance","","int","Abstand vorn in cm (Ultraschall)","Distance ahead in cm (ultrasonic)","Distância à frente em cm (ultrassom)"],["getLine","","int","Liniensensor: 0 = keine Linie, 15 = alle vier auf der Linie","Line sensor: 0 = no line, 15 = all four on the line","Sensor de linha: 0 = sem linha, 15 = os quatro na linha"],["isLineLeft","","boolean","Linie unter dem linken mittleren Fühler","Line under the left middle probe","Linha sob a sonda central esquerda"],["isLineRight","","boolean","Linie unter dem rechten mittleren Fühler","Line under the right middle probe","Linha sob a sonda central direita"],["getBrightness","","int","Helligkeit 0–100","Brightness 0–100","Luminosidade 0–100"],["getLoudness","","int","Lautstärke 0–100","Loudness 0–100","Volume 0–100"],["getColor","","String",'Farbe unter dem mBot2, z. B. "rot"','Colour under the mBot2, e.g. "red"','Cor por baixo do mBot2, p. ex. "red"'],["isButtonA","","boolean","Taste A ist gedrückt","Button A is pressed","O botão A está premido"],["isButtonB","","boolean","Taste B ist gedrückt","Button B is pressed","O botão B está premido"],["isJoystickUp","","boolean","Joystick nach oben gedrückt","Joystick pushed up","Joystick para cima"],["isJoystickDown","","boolean","Joystick nach unten gedrückt","Joystick pushed down","Joystick para baixo"],["isJoystickLeft","","boolean","Joystick nach links gedrückt","Joystick pushed left","Joystick para a esquerda"],["isJoystickRight","","boolean","Joystick nach rechts gedrückt","Joystick pushed right","Joystick para a direita"],["getPitch","","int","Neigung nach vorn (+) oder hinten (−) in Grad","Tilt forward (+) or back (−) in degrees","Inclinação para a frente (+) ou trás (−) em graus"],["getRoll","","int","Neigung zur Seite in Grad","Tilt sideways in degrees","Inclinação lateral em graus"],["isShaken","","boolean","Der mBot2 wird geschüttelt","The mBot2 is being shaken","O mBot2 está a ser abanado"],["getTimer","","double","Stoppuhr in Sekunden","Stopwatch in seconds","Cronómetro em segundos"],["getBattery","","int","Akku in Prozent","Battery in percent","Bateria em percentagem"]],System:[["out",null,"PrintStream","Ausgabe in die Konsole","Output to the console","Saída para a consola"],["in",null,"InputStream","Eingabe von der Tastatur (für Scanner)","Keyboard input (for Scanner)","Entrada do teclado (para Scanner)"],["err",null,"PrintStream","Fehlerausgabe","Error output","Saída de erros"],["currentTimeMillis","","long","Uhrzeit in Millisekunden","Time in milliseconds","Hora em milissegundos"],["exit","0","void","Programm beenden","End the program","Terminar o programa"]],Math:[["random","","double","Zufallszahl von 0 bis unter 1","Random number from 0 to below 1","Número aleatório de 0 até menos de 1"],["abs","zahl","double","Betrag (ohne Minus)","Absolute value (no minus)","Valor absoluto (sem menos)"],["sqrt","zahl","double","Wurzel","Square root","Raiz quadrada"],["pow","basis, exponent","double","Hoch: pow(2, 3) = 8","Power: pow(2, 3) = 8","Potência: pow(2, 3) = 8"],["max","a, b","double","Größere von zwei Zahlen","Larger of two numbers","Maior de dois números"],["min","a, b","double","Kleinere von zwei Zahlen","Smaller of two numbers","Menor de dois números"],["round","zahl","long","Runden","Round","Arredondar"],["floor","zahl","double","Abrunden","Round down","Arredondar para baixo"],["ceil","zahl","double","Aufrunden","Round up","Arredondar para cima"],["PI",null,"double","Kreiszahl π = 3.14159…","Pi π = 3.14159…","Pi π = 3,14159…"]],Integer:[["parseInt","text","int","Text in ganze Zahl umwandeln","Turn text into a whole number","Converter texto em número inteiro"],["toString","zahl","String","Zahl in Text umwandeln","Turn a number into text","Converter número em texto"],["MAX_VALUE",null,"int","Größte int-Zahl","Largest int value","Maior valor int"],["MIN_VALUE",null,"int","Kleinste int-Zahl","Smallest int value","Menor valor int"]],Double:[["parseDouble","text","double","Text in Kommazahl umwandeln","Turn text into a decimal number","Converter texto em número decimal"],["toString","zahl","String","Zahl in Text umwandeln","Turn a number into text","Converter número em texto"]],String:[["valueOf","wert","String","Wert in Text umwandeln","Turn a value into text","Converter valor em texto"],["format","format, werte","String",'Formatierter Text, z. B. "%.2f"','Formatted text, e.g. "%.2f"','Texto formatado, p. ex. "%.2f"'],["join","trenner, teile","String","Teile mit Trenner verbinden","Join parts with a separator","Juntar partes com um separador"]],Character:[["isDigit","zeichen","boolean","Ist es eine Ziffer?","Is it a digit?","É um algarismo?"],["isLetter","zeichen","boolean","Ist es ein Buchstabe?","Is it a letter?","É uma letra?"],["isUpperCase","zeichen","boolean","Ist es ein Großbuchstabe?","Is it upper case?","É maiúscula?"],["toUpperCase","zeichen","char","In Großbuchstaben","To upper case","Para maiúscula"],["toLowerCase","zeichen","char","In Kleinbuchstaben","To lower case","Para minúscula"]],Files:[["readString",'Path.of("datei.txt")',"String","Ganze Datei als Text lesen","Read the whole file as text","Ler o ficheiro inteiro como texto"],["writeString","pfad, text","Path","Text in Datei schreiben","Write text to a file","Escrever texto num ficheiro"],["readAllLines","pfad","List","Alle Zeilen lesen","Read all lines","Ler todas as linhas"],["exists","pfad","boolean","Gibt es die Datei?","Does the file exist?","O ficheiro existe?"]],Path:[["of",'"datei.txt"',"Path","Pfad zu einer Datei","Path to a file","Caminho para um ficheiro"]],JFrame:[["EXIT_ON_CLOSE",null,"int","Programm endet beim Schließen","Program ends when closed","O programa termina ao fechar"]],JLabel:[["CENTER",null,"int","Mittig","Centred","Ao centro"],["LEFT",null,"int","Links","Left","À esquerda"],["RIGHT",null,"int","Rechts","Right","À direita"]],Font:[["BOLD",null,"int","Fett","Bold","Negrito"],["PLAIN",null,"int","Normal","Plain","Normal"],["ITALIC",null,"int","Kursiv","Italic","Itálico"]],Color:[["RED","Rot","Red","Vermelho"],["GREEN","Grün","Green","Verde"],["BLUE","Blau","Blue","Azul"],["YELLOW","Gelb","Yellow","Amarelo"],["ORANGE","Orange","Orange","Laranja"],["WHITE","Weiß","White","Branco"],["BLACK","Schwarz","Black","Preto"],["GRAY","Grau","Grey","Cinzento"],["LIGHT_GRAY","Hellgrau","Light grey","Cinzento-claro"],["PINK","Rosa","Pink","Rosa"],["CYAN","Türkis","Cyan","Ciano"],["MAGENTA","Magenta","Magenta","Magenta"]].map(([i,e,t,n])=>[i,null,"Color",e,t,n])};function a2(i,e){const[t,n,a,s,r,o]=i;return{name:t,kind:n===null?"field":"method",params:!!n,returns:a,description:e==="de"?s:e==="pt"?o:r}}const Dl=i=>i.replace(/<.*>$/,""),s2=i=>{var e;return(e=/<\s*([^<>,]+?)\s*>$/.exec(i))==null?void 0:e[1]};function r2(i){if(/\[\]$/.test(i))return OF;if(i=Dl(i),/Exception$|^Throwable$/.test(i))return so.Exception;if(!so[i])return;const t=new Set,n=[];for(const a of[i,...PF[i]??[]])for(const s of so[a]??[])t.has(s[0])||(t.add(s[0]),n.push(s));return n}function vG(i,e="de"){return(r2(i)??[]).map(t=>a2(t,e))}const MF="[A-Z]\\w*|int|long|double|float|boolean|char|byte|short|var";function DF(i,e){var a,s;const t=new RegExp(`(?:^|[^\\w.])(${MF})\\s*(?:<([^<>;]*)>)?((?:\\s*\\[\\s*\\])*)\\s+${e}\\s*(?:\\[\\s*\\])*\\s*(=\\s*([^;]*))?(?=[=;,):]|$)`,"gm");let n;for(const r of i.matchAll(t)){let o=r[1];if(o==="var"){const u=r[5]??"";if(o=((a=/^new\s+([A-Z]\w*)/.exec(u))==null?void 0:a[1])??(/^"/.test(u)?"String":""),!o)continue}if(/^(return|new|else|case|throw)$/.test(o))continue;const l=(s=r[2])==null?void 0:s.replace(/\s+/g,"");n=o+(l?`<${l}>`:"")+(r[3]??"").replace(/\s+/g,"")}return n}function ZF(i){let e=0,t;const n=/^"(?:[^"\\]|\\.)*"/.exec(i);if(n)t='"',e=n[0].length;else{const r=/^[A-Za-z_]\w*/.exec(i);if(!r)return;t=r[0],e=r[0].length}const a=[{name:t,call:!1,indices:0}],s=(r,o)=>{let l=0;for(;e0;){const n=i[t-1];if(/[\w.]/.test(n))t--;else if(n===")"||n==="]"){const a=n===")"?"(":"[";let s=0,r=t-1;for(;r>=0;r--)if(i[r]===n)s++;else if(i[r]===a&&--s===0)break;if(r<0)return t;t=r}else if(n==='"'){const a=i.lastIndexOf('"',t-2);if(a<0)return t;t=a}else break}return t}const ad=(i,e)=>i.slice(0,Math.max(0,i.length-2*e));function o2(i,e,t,n){const a=e?t==null?void 0:t.statics(Dl(i)):t==null?void 0:t.members(Dl(i));if(a)return a;const s=e?i2[i]:r2(i);return s==null?void 0:s.map(r=>a2(r,n))}function LF(i,e,t,n){var s,r;const a=(r=(s=o2(i,t,n,"en"))==null?void 0:s.find(o=>o.name===e))==null?void 0:r.returns;return a==="E"?s2(i)??"Object":a}function WF(i,e,t){const n=ZF(e);if(!n)return;const[a,...s]=n.links;let r,o=!1;if(n.head==='"')r="String";else if(a.name==="this"&&(t!=null&&t.thisType)&&!a.call&&!a.indices)r=t.thisType;else{if(r=DF(i,a.name),!r&&(i2[a.name]||t!=null&&t.statics(a.name))&&!a.call&&(r=a.name,o=!0),!r)return;a.indices&&(r=ad(r,a.indices))}for(const l of s){const u=LF(r,l.name,o,t);if(!u)return;r=ad(u,l.indices),o=!1}return{type:r,isStatic:o}}function EF(i,e,t="de",n){const a=i.lastIndexOf(` -`,e-1)+1,s=i.slice(a,e),r=/\.\s*(\w*)$/.exec(s);if(!r)return;const o=r.index,l=s.slice(BF(s,o),o);if(!l||/^\d/.test(l))return;const u=WF(i,l,n);if(!u)return;const m=o2(u.type,u.isStatic,n,t);if(!m)return;const c=s2(u.type)??"Object";return{from:e-r[1].length,members:m.map(d=>d.returns==="E"?{...d,returns:c}:d)}}const sd=Nn.define(),Y0=de.define(),NF=he.mark({class:"cm-ph"}),JF=he.mark({class:"cm-err"}),rd=he.line({class:"cm-debug-line"});class FF extends N1{constructor(e){super(),this.fix=e}eq(e){return JSON.stringify(e.fix)===JSON.stringify(this.fix)}toDOM(e){const t=document.createElement("button");return t.type="button",t.className="cm-quickfix",t.textContent="💡",t.dataset.tip=this.fix.title,t.setAttribute("aria-label",this.fix.title),t.addEventListener("mousedown",n=>n.preventDefault()),t.addEventListener("click",()=>{const{from:n,to:a,insert:s}=this.fix;a>e.state.doc.length||(e.dispatch({changes:{from:n,to:a,insert:s},selection:{anchor:n+s.length},userEvent:"input"}),e.focus())}),t}ignoreEvent(){return!0}}function od(i,e){const t=i.doc.length,n=[];e.current!==void 0&&e.currentr===rd;n.sort((r,o)=>r.from-o.from||Number(a(o.deco))-Number(a(r.deco))||r.to-o.to);const s=new i1;for(const r of n)s.add(r.from,r.to,r.deco);return s.finish()}const E1=Et.define({create:()=>({marks:{placeholders:[],problems:[]},decorations:he.none}),update(i,e){for(const a of e.effects)if(a.is(Y0))return{marks:a.value,decorations:od(e.state,a.value)};if(!e.docChanged)return i;const t=a=>({from:e.changes.mapPos(a.from,1),to:e.changes.mapPos(a.to,-1)}),n={...i.marks,placeholders:i.marks.placeholders.map(t).filter(a=>a.fromq.decorations.from(i,e=>e.decorations)});class RF extends un{constructor(){super(...arguments);y(this,"elementClass","cm-error-line")}}const GF=new RF,HF=yi.compute([E1],i=>{const e=[...new Set(i.field(E1).marks.errorLines??[])].filter(t=>tt-n);return ie.of(e.map(t=>GF.range(i.doc.line(t+1).from)))}),ld={ClassDeclaration:"class",InterfaceDeclaration:"class",EnumDeclaration:"class",MethodDeclaration:"method",ConstructorDeclaration:"method",ForStatement:"loop",EnhancedForStatement:"loop",WhileStatement:"loop",DoStatement:"loop",IfStatement:"if",SwitchStatement:"if",TryStatement:"try"};function VF(i,e){const t=i.lineAt(e);if(!t.text.trimEnd().endsWith("{"))return t.number;let n=0;for(let a=t.number;a<=i.lines;a++)for(const s of i.line(a).text.replace(/"(?:[^"\\]|\\.)*"|\/\/.*$/g,""))if(s==="{")n++;else if(s==="}"&&--n===0)return a;return t.number}function qF(i){const{state:e}=i,t=e.doc,n=i.contentDOM.querySelector(".cm-line");if(!n)return[];const a=getComputedStyle(n),s=i.scrollDOM.getBoundingClientRect(),r=i.contentDOM.getBoundingClientRect(),o=s.left-i.scrollDOM.scrollLeft,l=s.top-i.scrollDOM.scrollTop,u=r.left-o+parseFloat(a.paddingLeft)+parseFloat(a.borderLeftWidth),m=r.right-o-6,c=i.documentTop-l,d=e.tabSize,h=i.defaultCharacterWidth,g=(z,I,k,T)=>{const C=t.line(I),M=qi(/^\s*/.exec(C.text)[0],d),P=u+M*h-7,O=i.lineBlockAt(C.from).top+c+T,A=i.lineBlockAt(t.line(k).from).bottom+c-T;return new lr(z,P,O,Math.max(m-P,20),Math.max(A-O,4))},f=[],b=Xe(e).topNode,x=[];for(let z=b.firstChild;z;z=z.nextSibling){if(ld[z.name]==="class"||z.name==="MethodDeclaration"){x.length=0;break}z.name!=="ImportDeclaration"&&z.name!=="PackageDeclaration"&&!z.name.includes("Comment")&&x.push(z)}x.length&&f.push(g("cm-scope cm-scope-method",t.lineAt(x[0].from).number,t.lineAt(x[x.length-1].to).number,1));const v=[];Xe(e).iterate({from:i.viewport.from,to:i.viewport.to,enter:z=>{var C;const I=ld[z.name];if(!I||z.name==="IfStatement"&&((C=z.node.parent)==null?void 0:C.name)==="IfStatement")return;const k=t.lineAt(z.from).number,T=Math.max(t.lineAt(z.to).number,VF(t,z.from));v.push({kind:I,from:k,to:T}),f.push(g(`cm-scope cm-scope-${I}`,k,T,1))}});for(let z=1;z<=t.lines;z++){let I;for(const T of v)T.from<=z&&z<=T.to&&(!I||T.from>=I.from)&&(I=T);if(!I||I.kind!=="loop"&&I.kind!=="if"||z===I.from)continue;const k=t.line(z).text.trim();!k||k.startsWith("}")||k.endsWith("{")||k.startsWith("//")||k.startsWith("case ")||k.startsWith("default")||f.push(g("cm-scope cm-scope-method cm-scope-stmt",z,z,2))}const w=e.field(E1).marks.lines;return w&&w.fromi.docChanged||i.viewportChanged||i.geometryChanged||Xe(i.state)!==Xe(i.startState)||i.transactions.some(e=>e.effects.some(t=>t.is(Y0)))});class $F extends un{toDOM(){const e=document.createElement("span");return e.className="cm-breakpoint",e}}const Zl=new $F,m2=de.define(),c2=de.define(),Bl=Et.define({create:()=>ie.empty,update(i,e){i=i.map(e.changes);for(const t of e.effects){if(t.is(c2)&&(i=ie.of(t.value.map(a=>Zl.range(a)),!0)),!t.is(m2))continue;let n=!1;i.between(t.value,t.value,()=>{n=!0}),i=n?i.update({filter:a=>a!==t.value}):i.update({add:[Zl.range(t.value)]})}return i}});function YF(i){const t={mousedown:(n,a)=>{const s=i.breakpointLine(n.state.doc.lineAt(a.from).number-1);return s===void 0||s>=n.state.doc.lines?!1:(n.dispatch({effects:m2.of(n.state.doc.line(s+1).from)}),queueMicrotask(()=>i.onBreakpoints()),!0)}};return[Bl,WW({class:"cm-breakpoint-gutter",markers:n=>n.state.field(Bl),initialSpacer:()=>Zl,domEventHandlers:t}),HW({domEventHandlers:t})]}function X0(i,e){return i.field(E1).marks.placeholders.find(t=>e>=t.from&&e<=t.to)}const XF=q.inputHandler.of((i,e,t,n)=>{if(e!==t)return!1;const a=X0(i.state,e);return a?(i.dispatch({changes:{from:a.from,to:a.to,insert:n},selection:{anchor:a.from+n.length},userEvent:"input.type"}),!0):!1}),KF=re.transactionFilter.of(i=>{if(!i.docChanged||!(i.isUserEvent("input.paste")||i.isUserEvent("input.drop")))return i;const e=[];if(i.changes.iterChanges((a,s,r,o,l)=>e.push({from:a,to:s,text:l.toString()})),e.length!==1||e[0].from!==e[0].to)return i;const t=X0(i.startState,e[0].from);if(!t)return i;const{text:n}=e[0];return{changes:{from:t.from,to:t.to,insert:n},selection:{anchor:t.from+n.length},userEvent:"input.paste",scrollIntoView:!0}}),ud=i=>e=>{const t=e.state.selection.main;if(!t.empty)return!1;const n=X0(e.state,t.head);return!n||(i?t.head>=n.to:t.head<=n.from)?!1:(e.dispatch({changes:{from:n.from,to:n.to},selection:{anchor:n.from},userEvent:"delete"}),!0)},eR=q.updateListener.of(i=>{if(!i.selectionSet||i.docChanged||!i.transactions.some(n=>n.isUserEvent("select.pointer")))return;const e=i.state.selection.main;if(!e.empty)return;const t=i.state.field(E1).marks.placeholders.find(n=>e.head>n.from&&e.headi.view.dispatch({selection:D.range(t.from,t.to)}))}),tR=mr.define([{tag:[W.keyword,W.controlKeyword,W.definitionKeyword,W.modifier,W.operatorKeyword,W.standard(W.typeName),W.bool,W.null],color:"var(--syn-keyword)",fontWeight:"600"},{tag:[W.string,W.character],color:"var(--syn-string)"},{tag:W.number,color:"var(--syn-number)"},{tag:[W.lineComment,W.blockComment],color:"var(--syn-comment)",fontStyle:"italic"}]);function nR(i){const e=i,t=`\${// ${e.code}}`,n=(a,s,r,o=0)=>V0(s,{label:a,detail:r,type:"keyword",boost:o});return[n("if",`if (\${${e.condition}}) { +`:x.text===","||x.text===";"?v="":f.text===","?v=" ":f.text===";"?v=x.text===")"?"":" ":f.text==="("||x.text===")"?v="":(x.text==="("&&eG.has(f.text)||x.text==="{"&&r[g]||s[g-1]||s[g])&&(v=" "),v!==void 0&&v!==b&&h.push({from:f.to,to:x.from,insert:v})}return h}const sG=[["nextInt","","int","Ganze Zahl einlesen","Read a whole number","Ler um número inteiro"],["nextDouble","","double","Kommazahl einlesen","Read a decimal number","Ler um número decimal"],["nextLine","","String","Ganze Zeile als Text einlesen","Read a whole line as text","Ler uma linha inteira como texto"],["next","","String","Ein Wort einlesen (bis zum Leerzeichen)","Read one word (up to a space)","Ler uma palavra (até ao espaço)"],["nextBoolean","","boolean","true oder false einlesen","Read true or false","Ler true ou false"],["nextLong","","long","Große ganze Zahl einlesen","Read a large whole number","Ler um número inteiro grande"],["hasNextInt","","boolean","Kommt als Nächstes eine ganze Zahl?","Is the next input a whole number?","A próxima entrada é um número inteiro?"],["hasNextDouble","","boolean","Kommt als Nächstes eine Kommazahl?","Is the next input a decimal number?","A próxima entrada é um número decimal?"],["hasNextLine","","boolean","Gibt es noch eine Zeile?","Is there another line?","Existe mais uma linha?"],["hasNext","","boolean","Gibt es noch ein Wort?","Is there another word?","Existe mais uma palavra?"],["close","","void","Eingabe schließen","Close the input","Fechar a entrada"]],rG=[["length","","int","Anzahl der Zeichen","Number of characters","Número de caracteres"],["charAt","index","char","Zeichen an Stelle index (ab 0)","Character at position index (from 0)","Carácter na posição index (a partir de 0)"],["equals","text","boolean","Gleicher Text? (statt ==)","Same text? (instead of ==)","Mesmo texto? (em vez de ==)"],["equalsIgnoreCase","text","boolean","Gleicher Text, groß/klein egal?","Same text, ignoring case?","Mesmo texto, ignorando maiúsculas?"],["compareTo","text","int","Alphabetisch vergleichen (<0, 0, >0)","Compare alphabetically (<0, 0, >0)","Comparar alfabeticamente (<0, 0, >0)"],["substring","von, bis","String","Teiltext von Stelle von bis vor bis","Part of the text from start up to before end","Parte do texto do início até antes do fim"],["indexOf","text","int","Erste Stelle des Textes (−1 = fehlt)","First position of the text (−1 = missing)","Primeira posição do texto (−1 = não existe)"],["lastIndexOf","text","int","Letzte Stelle des Textes (−1 = fehlt)","Last position of the text (−1 = missing)","Última posição do texto (−1 = não existe)"],["contains","text","boolean","Kommt der Text darin vor?","Does it contain the text?","Contém o texto?"],["startsWith","text","boolean","Fängt damit an?","Starts with it?","Começa com isto?"],["endsWith","text","boolean","Hört damit auf?","Ends with it?","Termina com isto?"],["toUpperCase","","String","In GROSSBUCHSTABEN","In UPPER CASE","Em MAIÚSCULAS"],["toLowerCase","","String","In kleinbuchstaben","In lower case","Em minúsculas"],["trim","","String","Leerzeichen vorn und hinten weg","Remove spaces at both ends","Remover espaços no início e no fim"],["replace","alt, neu","String","Text ersetzen","Replace text","Substituir texto"],["split","trenner","String[]",'In Teile zerlegen, z. B. split(";")','Split into parts, e.g. split(";")','Dividir em partes, p. ex. split(";")'],["isEmpty","","boolean","Leerer Text?","Empty text?","Texto vazio?"],["toCharArray","","char[]","Als Array von Zeichen","As an array of characters","Como array de caracteres"]],n2=[["println","wert","void","Ausgeben, danach neue Zeile","Print, then a new line","Escrever e mudar de linha"],["print","wert","void","Ausgeben ohne neue Zeile","Print without a new line","Escrever sem mudar de linha"],["printf","format, werte","PrintStream",'Formatiert ausgeben, z. B. "%.2f"','Print formatted, e.g. "%.2f"','Escrever formatado, p. ex. "%.2f"']],oG=[...n2,["close","","void","Datei speichern und schließen","Save and close the file","Guardar e fechar o ficheiro"]],lG=[["readLine","","String","Nächste Zeile lesen (null = Ende)","Read the next line (null = end)","Ler a próxima linha (null = fim)"],["close","","void","Datei schließen","Close the file","Fechar o ficheiro"]],uG=[["exists","","boolean","Gibt es die Datei?","Does the file exist?","O ficheiro existe?"],["getName","","String","Name der Datei","Name of the file","Nome do ficheiro"],["length","","long","Größe in Bytes","Size in bytes","Tamanho em bytes"]],mG=[["getMessage","","String","Fehlermeldung als Text","Error message as text","Mensagem de erro como texto"],["printStackTrace","","void","Fehler mit Zeilen ausgeben","Print the error with its lines","Mostrar o erro com as linhas"]],cG=[["getSource","","Object","Welcher Knopf wurde geklickt?","Which button was clicked?","Que botão foi clicado?"],["getActionCommand","","String","Beschriftung des Knopfs","Label of the button","Texto do botão"]],dG=[["setBackground","farbe","void","Hintergrundfarbe, z. B. Color.RED","Background colour, e.g. Color.RED","Cor de fundo, p. ex. Color.RED"],["setForeground","farbe","void","Schriftfarbe","Text colour","Cor do texto"],["setFont","schrift","void",'Schrift, z. B. new Font("Arial", Font.BOLD, 24)','Font, e.g. new Font("Arial", Font.BOLD, 24)','Letra, p. ex. new Font("Arial", Font.BOLD, 24)'],["setVisible","true","void","Anzeigen (true) oder verstecken (false)","Show (true) or hide (false)","Mostrar (true) ou esconder (false)"],["setEnabled","true","void","Anklickbar (true) oder grau (false)","Clickable (true) or greyed out (false)","Clicável (true) ou cinzento (false)"],["setSize","breite, höhe","void","Größe in Pixeln","Size in pixels","Tamanho em píxeis"]],hG=[["add","baustein","Component","Baustein hinzufügen","Add a component","Adicionar um componente"],["setLayout","layout","void","Anordnung, z. B. new FlowLayout()","Layout, e.g. new FlowLayout()","Disposição, p. ex. new FlowLayout()"],["remove","baustein","void","Baustein entfernen","Remove a component","Remover um componente"]],gG=[["setTitle","text","void","Titel oben im Fenster","Title at the top of the window","Título no topo da janela"],["setDefaultCloseOperation","JFrame.EXIT_ON_CLOSE","void","Was beim Schließen passiert","What happens when closing","O que acontece ao fechar"],["setLocationRelativeTo","null","void","Mit null: Fenster in die Mitte","With null: centre the window","Com null: janela no centro"],["setResizable","false","void","Größe änderbar?","Can the size change?","Pode mudar de tamanho?"],["pack","","void","Größe passend zum Inhalt","Size to fit the content","Tamanho ajustado ao conteúdo"],["getContentPane","","JPanel","Inhaltsfläche des Fensters","Content area of the window","Área de conteúdo da janela"],["dispose","","void","Fenster schließen","Close the window","Fechar a janela"]],pG=[["setText","text","void","Text setzen","Set the text","Definir o texto"],["getText","","String","Text holen","Get the text","Obter o texto"]],fG=[["addActionListener","e -> { }","void","Was beim Klick passiert","What happens on click","O que acontece ao clicar"],["setOpaque","true","void","Hintergrund sichtbar (für Farben)","Show the background (for colours)","Mostrar o fundo (para cores)"],["setBorderPainted","false","void","Rahmen zeichnen?","Draw the border?","Desenhar a borda?"]],xG=[["setOpaque","true","void","Hintergrund sichtbar (für Farben)","Show the background (for colours)","Mostrar o fundo (para cores)"],["setHorizontalAlignment","JLabel.CENTER","void","Text links, mittig oder rechts","Text left, centre or right","Texto à esquerda, centro ou direita"]],bG=[["addActionListener","e -> { }","void","Was bei Enter passiert","What happens on Enter","O que acontece ao carregar em Enter"],["setEditable","false","void","Darf man hineinschreiben?","Can you type into it?","Pode-se escrever?"],["setColumns","anzahl","void","Breite in Zeichen","Width in characters","Largura em caracteres"],["requestFocus","","void","Cursor hineinsetzen","Put the cursor into it","Pôr o cursor no campo"]],vG=[["length",null,"int","Anzahl der Elemente (ohne Klammern)","Number of elements (no brackets)","Número de elementos (sem parênteses)"]],ao=[["add","wert","boolean","Element hinten anhängen","Append an element at the end","Acrescentar um elemento no fim"],["get","index","E","Element an Stelle index holen (ab 0)","Get the element at index (from 0)","Obter o elemento na posição index (a partir de 0)"],["size","","int","Anzahl der Elemente","Number of elements","Número de elementos"],["set","index, wert","E","Element an Stelle index ersetzen","Replace the element at index","Substituir o elemento na posição index"],["remove","index","E","Element an Stelle index entfernen","Remove the element at index","Remover o elemento na posição index"],["contains","wert","boolean","Ist das Element in der Liste?","Is the element in the list?","O elemento está na lista?"],["indexOf","wert","int","Stelle des Elements (-1 = nicht da)","Position of the element (-1 = not found)","Posição do elemento (-1 = não existe)"],["isEmpty","","boolean","Ist die Liste leer?","Is the list empty?","A lista está vazia?"],["clear","","void","Alle Elemente entfernen","Remove all elements","Remover todos os elementos"]],so={Scanner:sG,String:rG,PrintStream:n2,PrintWriter:oG,BufferedReader:lG,FileReader:[["close","","void","Datei schließen","Close the file","Fechar o ficheiro"]],File:uG,Exception:mG,ActionEvent:cG,Component:dG,Container:hG,JFrame:gG,JPanel:[],JButton:fG,JLabel:xG,JTextField:bG,TextHolder:pG,ArrayList:ao,List:ao,LinkedList:ao},yG={JFrame:["Container","Component"],JPanel:["Container","Component"],JButton:["TextHolder","Component"],JLabel:["TextHolder","Component"],JTextField:["TextHolder","Component"],PrintWriter:[]},i2={mbot:[["forward","cm","void","Geradeaus vorwärts fahren","Drive forward","Andar para a frente"],["backward","cm","void","Rückwärts fahren","Drive backward","Andar para trás"],["turnLeft","grad","void","Auf der Stelle nach links drehen","Turn left on the spot","Rodar para a esquerda"],["turnRight","grad","void","Auf der Stelle nach rechts drehen","Turn right on the spot","Rodar para a direita"],["stop","","void","Motoren anhalten","Stop the motors","Parar os motores"],["drive","links, rechts","void","Räder einzeln in Prozent (−100–100), fährt weiter bis stop()","Wheels separately in percent (−100–100), keeps going until stop()","Rodas separadas em percentagem (−100–100), continua até stop()"],["resetTimer","","void","Stoppuhr auf 0 setzen","Reset the stopwatch to 0","Pôr o cronómetro a 0"],["pause","ms","void","Millisekunden warten","Wait milliseconds","Esperar milissegundos"],["setLed","rot, gruen, blau","void","LEDs in einer Farbe (je 0–255)","LEDs in a colour (0–255 each)","LEDs numa cor (0–255 cada)"],["ledOff","","void","LEDs aus","LEDs off","Desligar LEDs"],["led","nr","LED",'Eine LED (0–4), dann .setColor("grün") oder .setColor("aus")','One LED (0–4), then .setColor("green") or .setColor("off")','Um LED (0–4), depois .setColor("green") ou .setColor("off")'],["showText",'"Hallo"',"void","Text auf dem Bildschirm zeigen","Show text on the screen","Mostrar texto no ecrã"],["emotion",'"smile"',"void","Gefühl zeigen: LEDs, Ton, Bewegung (smile, hello, sad …)","Show a feeling: LEDs, sound, motion (smile, hello, sad …)","Mostrar um sentimento: LEDs, som, movimento (smile, hello, sad …)"],["playTone","hz, ms","void","Ton spielen, z. B. playTone(440, 500)","Play a tone, e.g. playTone(440, 500)","Tocar um som, p. ex. playTone(440, 500)"],["getDistance","","int","Abstand vorn in cm (Ultraschall)","Distance ahead in cm (ultrasonic)","Distância à frente em cm (ultrassom)"],["getLine","","int","Liniensensor: 0 = keine Linie, 15 = alle vier auf der Linie","Line sensor: 0 = no line, 15 = all four on the line","Sensor de linha: 0 = sem linha, 15 = os quatro na linha"],["isLineLeft","","boolean","Linie unter dem linken mittleren Fühler","Line under the left middle probe","Linha sob a sonda central esquerda"],["isLineRight","","boolean","Linie unter dem rechten mittleren Fühler","Line under the right middle probe","Linha sob a sonda central direita"],["getBrightness","","int","Helligkeit 0–100","Brightness 0–100","Luminosidade 0–100"],["getLoudness","","int","Lautstärke 0–100","Loudness 0–100","Volume 0–100"],["getColor","","String",'Farbe unter dem mBot2, z. B. "rot"','Colour under the mBot2, e.g. "red"','Cor por baixo do mBot2, p. ex. "red"'],["isButtonA","","boolean","Taste A ist gedrückt","Button A is pressed","O botão A está premido"],["isButtonB","","boolean","Taste B ist gedrückt","Button B is pressed","O botão B está premido"],["isJoystickUp","","boolean","Joystick nach oben gedrückt","Joystick pushed up","Joystick para cima"],["isJoystickDown","","boolean","Joystick nach unten gedrückt","Joystick pushed down","Joystick para baixo"],["isJoystickLeft","","boolean","Joystick nach links gedrückt","Joystick pushed left","Joystick para a esquerda"],["isJoystickRight","","boolean","Joystick nach rechts gedrückt","Joystick pushed right","Joystick para a direita"],["getPitch","","int","Neigung nach vorn (+) oder hinten (−) in Grad","Tilt forward (+) or back (−) in degrees","Inclinação para a frente (+) ou trás (−) em graus"],["getRoll","","int","Neigung zur Seite in Grad","Tilt sideways in degrees","Inclinação lateral em graus"],["isShaken","","boolean","Der mBot2 wird geschüttelt","The mBot2 is being shaken","O mBot2 está a ser abanado"],["getTimer","","double","Stoppuhr in Sekunden","Stopwatch in seconds","Cronómetro em segundos"],["getBattery","","int","Akku in Prozent","Battery in percent","Bateria em percentagem"]],System:[["out",null,"PrintStream","Ausgabe in die Konsole","Output to the console","Saída para a consola"],["in",null,"InputStream","Eingabe von der Tastatur (für Scanner)","Keyboard input (for Scanner)","Entrada do teclado (para Scanner)"],["err",null,"PrintStream","Fehlerausgabe","Error output","Saída de erros"],["currentTimeMillis","","long","Uhrzeit in Millisekunden","Time in milliseconds","Hora em milissegundos"],["exit","0","void","Programm beenden","End the program","Terminar o programa"]],Math:[["random","","double","Zufallszahl von 0 bis unter 1","Random number from 0 to below 1","Número aleatório de 0 até menos de 1"],["abs","zahl","double","Betrag (ohne Minus)","Absolute value (no minus)","Valor absoluto (sem menos)"],["sqrt","zahl","double","Wurzel","Square root","Raiz quadrada"],["pow","basis, exponent","double","Hoch: pow(2, 3) = 8","Power: pow(2, 3) = 8","Potência: pow(2, 3) = 8"],["max","a, b","double","Größere von zwei Zahlen","Larger of two numbers","Maior de dois números"],["min","a, b","double","Kleinere von zwei Zahlen","Smaller of two numbers","Menor de dois números"],["round","zahl","long","Runden","Round","Arredondar"],["floor","zahl","double","Abrunden","Round down","Arredondar para baixo"],["ceil","zahl","double","Aufrunden","Round up","Arredondar para cima"],["PI",null,"double","Kreiszahl π = 3.14159…","Pi π = 3.14159…","Pi π = 3,14159…"]],Integer:[["parseInt","text","int","Text in ganze Zahl umwandeln","Turn text into a whole number","Converter texto em número inteiro"],["toString","zahl","String","Zahl in Text umwandeln","Turn a number into text","Converter número em texto"],["MAX_VALUE",null,"int","Größte int-Zahl","Largest int value","Maior valor int"],["MIN_VALUE",null,"int","Kleinste int-Zahl","Smallest int value","Menor valor int"]],Double:[["parseDouble","text","double","Text in Kommazahl umwandeln","Turn text into a decimal number","Converter texto em número decimal"],["toString","zahl","String","Zahl in Text umwandeln","Turn a number into text","Converter número em texto"]],String:[["valueOf","wert","String","Wert in Text umwandeln","Turn a value into text","Converter valor em texto"],["format","format, werte","String",'Formatierter Text, z. B. "%.2f"','Formatted text, e.g. "%.2f"','Texto formatado, p. ex. "%.2f"'],["join","trenner, teile","String","Teile mit Trenner verbinden","Join parts with a separator","Juntar partes com um separador"]],Character:[["isDigit","zeichen","boolean","Ist es eine Ziffer?","Is it a digit?","É um algarismo?"],["isLetter","zeichen","boolean","Ist es ein Buchstabe?","Is it a letter?","É uma letra?"],["isUpperCase","zeichen","boolean","Ist es ein Großbuchstabe?","Is it upper case?","É maiúscula?"],["toUpperCase","zeichen","char","In Großbuchstaben","To upper case","Para maiúscula"],["toLowerCase","zeichen","char","In Kleinbuchstaben","To lower case","Para minúscula"]],Files:[["readString",'Path.of("datei.txt")',"String","Ganze Datei als Text lesen","Read the whole file as text","Ler o ficheiro inteiro como texto"],["writeString","pfad, text","Path","Text in Datei schreiben","Write text to a file","Escrever texto num ficheiro"],["readAllLines","pfad","List","Alle Zeilen lesen","Read all lines","Ler todas as linhas"],["exists","pfad","boolean","Gibt es die Datei?","Does the file exist?","O ficheiro existe?"]],Path:[["of",'"datei.txt"',"Path","Pfad zu einer Datei","Path to a file","Caminho para um ficheiro"]],JFrame:[["EXIT_ON_CLOSE",null,"int","Programm endet beim Schließen","Program ends when closed","O programa termina ao fechar"]],JLabel:[["CENTER",null,"int","Mittig","Centred","Ao centro"],["LEFT",null,"int","Links","Left","À esquerda"],["RIGHT",null,"int","Rechts","Right","À direita"]],Font:[["BOLD",null,"int","Fett","Bold","Negrito"],["PLAIN",null,"int","Normal","Plain","Normal"],["ITALIC",null,"int","Kursiv","Italic","Itálico"]],Color:[["RED","Rot","Red","Vermelho"],["GREEN","Grün","Green","Verde"],["BLUE","Blau","Blue","Azul"],["YELLOW","Gelb","Yellow","Amarelo"],["ORANGE","Orange","Orange","Laranja"],["WHITE","Weiß","White","Branco"],["BLACK","Schwarz","Black","Preto"],["GRAY","Grau","Grey","Cinzento"],["LIGHT_GRAY","Hellgrau","Light grey","Cinzento-claro"],["PINK","Rosa","Pink","Rosa"],["CYAN","Türkis","Cyan","Ciano"],["MAGENTA","Magenta","Magenta","Magenta"]].map(([i,e,t,n])=>[i,null,"Color",e,t,n])};function a2(i,e){const[t,n,a,s,r,o]=i;return{name:t,kind:n===null?"field":"method",params:!!n,returns:a,description:e==="de"?s:e==="pt"?o:r}}const Ml=i=>i.replace(/<.*>$/,""),s2=i=>{var e;return(e=/<\s*([^<>,]+?)\s*>$/.exec(i))==null?void 0:e[1]};function r2(i){if(/\[\]$/.test(i))return vG;if(i=Ml(i),/Exception$|^Throwable$/.test(i))return so.Exception;if(!so[i])return;const t=new Set,n=[];for(const a of[i,...yG[i]??[]])for(const s of so[a]??[])t.has(s[0])||(t.add(s[0]),n.push(s));return n}function oV(i,e="de"){return(r2(i)??[]).map(t=>a2(t,e))}const wG="[A-Z]\\w*|int|long|double|float|boolean|char|byte|short|var";function zG(i,e){var a,s;const t=new RegExp(`(?:^|[^\\w.])(${wG})\\s*(?:<([^<>;]*)>)?((?:\\s*\\[\\s*\\])*)\\s+${e}\\s*(?:\\[\\s*\\])*\\s*(=\\s*([^;]*))?(?=[=;,):]|$)`,"gm");let n;for(const r of i.matchAll(t)){let o=r[1];if(o==="var"){const u=r[5]??"";if(o=((a=/^new\s+([A-Z]\w*)/.exec(u))==null?void 0:a[1])??(/^"/.test(u)?"String":""),!o)continue}if(/^(return|new|else|case|throw)$/.test(o))continue;const l=(s=r[2])==null?void 0:s.replace(/\s+/g,"");n=o+(l?`<${l}>`:"")+(r[3]??"").replace(/\s+/g,"")}return n}function IG(i){let e=0,t;const n=/^"(?:[^"\\]|\\.)*"/.exec(i);if(n)t='"',e=n[0].length;else{const r=/^[A-Za-z_]\w*/.exec(i);if(!r)return;t=r[0],e=r[0].length}const a=[{name:t,call:!1,indices:0}],s=(r,o)=>{let l=0;for(;e0;){const n=i[t-1];if(/[\w.]/.test(n))t--;else if(n===")"||n==="]"){const a=n===")"?"(":"[";let s=0,r=t-1;for(;r>=0;r--)if(i[r]===n)s++;else if(i[r]===a&&--s===0)break;if(r<0)return t;t=r}else if(n==='"'){const a=i.lastIndexOf('"',t-2);if(a<0)return t;t=a}else break}return t}const ad=(i,e)=>i.slice(0,Math.max(0,i.length-2*e));function o2(i,e,t,n){const a=e?t==null?void 0:t.statics(Ml(i)):t==null?void 0:t.members(Ml(i));if(a)return a;const s=e?i2[i]:r2(i);return s==null?void 0:s.map(r=>a2(r,n))}function SG(i,e,t,n){var s,r;const a=(r=(s=o2(i,t,n,"en"))==null?void 0:s.find(o=>o.name===e))==null?void 0:r.returns;return a==="E"?s2(i)??"Object":a}function TG(i,e,t){const n=IG(e);if(!n)return;const[a,...s]=n.links;let r,o=!1;if(n.head==='"')r="String";else if(a.name==="this"&&(t!=null&&t.thisType)&&!a.call&&!a.indices)r=t.thisType;else{if(r=zG(i,a.name),!r&&(i2[a.name]||t!=null&&t.statics(a.name))&&!a.call&&(r=a.name,o=!0),!r)return;a.indices&&(r=ad(r,a.indices))}for(const l of s){const u=SG(r,l.name,o,t);if(!u)return;r=ad(u,l.indices),o=!1}return{type:r,isStatic:o}}function _G(i,e,t="de",n){const a=i.lastIndexOf(` +`,e-1)+1,s=i.slice(a,e),r=/\.\s*(\w*)$/.exec(s);if(!r)return;const o=r.index,l=s.slice(kG(s,o),o);if(!l||/^\d/.test(l))return;const u=TG(i,l,n);if(!u)return;const m=o2(u.type,u.isStatic,n,t);if(!m)return;const c=s2(u.type)??"Object";return{from:e-r[1].length,members:m.map(d=>d.returns==="E"?{...d,returns:c}:d)}}const sd=Nn.define(),Y0=de.define(),jG=he.mark({class:"cm-ph"}),CG=he.mark({class:"cm-err"}),rd=he.line({class:"cm-debug-line"});class AG extends F1{constructor(e){super(),this.fix=e}eq(e){return JSON.stringify(e.fix)===JSON.stringify(this.fix)}toDOM(e){const t=document.createElement("button");return t.type="button",t.className="cm-quickfix",t.textContent="💡",t.dataset.tip=this.fix.title,t.setAttribute("aria-label",this.fix.title),t.addEventListener("mousedown",n=>n.preventDefault()),t.addEventListener("click",()=>{const{from:n,to:a,insert:s}=this.fix;a>e.state.doc.length||(e.dispatch({changes:{from:n,to:a,insert:s},selection:{anchor:n+s.length},userEvent:"input"}),e.focus())}),t}ignoreEvent(){return!0}}function od(i,e){const t=i.doc.length,n=[];e.current!==void 0&&e.currentr===rd;n.sort((r,o)=>r.from-o.from||Number(a(o.deco))-Number(a(r.deco))||r.to-o.to);const s=new i1;for(const r of n)s.add(r.from,r.to,r.deco);return s.finish()}const N1=Et.define({create:()=>({marks:{placeholders:[],problems:[]},decorations:he.none}),update(i,e){for(const a of e.effects)if(a.is(Y0))return{marks:a.value,decorations:od(e.state,a.value)};if(!e.docChanged)return i;const t=a=>({from:e.changes.mapPos(a.from,1),to:e.changes.mapPos(a.to,-1)}),n={...i.marks,placeholders:i.marks.placeholders.map(t).filter(a=>a.fromq.decorations.from(i,e=>e.decorations)});class PG extends un{constructor(){super(...arguments);y(this,"elementClass","cm-error-line")}}const OG=new PG,DG=yi.compute([N1],i=>{const e=[...new Set(i.field(N1).marks.errorLines??[])].filter(t=>tt-n);return ie.of(e.map(t=>OG.range(i.doc.line(t+1).from)))}),ld={ClassDeclaration:"class",InterfaceDeclaration:"class",EnumDeclaration:"class",MethodDeclaration:"method",ConstructorDeclaration:"method",ForStatement:"loop",EnhancedForStatement:"loop",WhileStatement:"loop",DoStatement:"loop",IfStatement:"if",SwitchStatement:"if",TryStatement:"try"};function MG(i,e){const t=i.lineAt(e);if(!t.text.trimEnd().endsWith("{"))return t.number;let n=0;for(let a=t.number;a<=i.lines;a++)for(const s of i.line(a).text.replace(/"(?:[^"\\]|\\.)*"|\/\/.*$/g,""))if(s==="{")n++;else if(s==="}"&&--n===0)return a;return t.number}function BG(i){const{state:e}=i,t=e.doc,n=i.contentDOM.querySelector(".cm-line");if(!n)return[];const a=getComputedStyle(n),s=i.scrollDOM.getBoundingClientRect(),r=i.contentDOM.getBoundingClientRect(),o=s.left-i.scrollDOM.scrollLeft,l=s.top-i.scrollDOM.scrollTop,u=r.left-o+parseFloat(a.paddingLeft)+parseFloat(a.borderLeftWidth),m=r.right-o-6,c=i.documentTop-l,d=e.tabSize,h=i.defaultCharacterWidth,g=(z,I,k,T)=>{const j=t.line(I),D=qi(/^\s*/.exec(j.text)[0],d),O=u+D*h-7,P=i.lineBlockAt(j.from).top+c+T,C=i.lineBlockAt(t.line(k).from).bottom+c-T;return new ur(z,O,P,Math.max(m-O,20),Math.max(C-P,4))},f=[],x=Xe(e).topNode,b=[];for(let z=x.firstChild;z;z=z.nextSibling){if(ld[z.name]==="class"||z.name==="MethodDeclaration"){b.length=0;break}z.name!=="ImportDeclaration"&&z.name!=="PackageDeclaration"&&!z.name.includes("Comment")&&b.push(z)}b.length&&f.push(g("cm-scope cm-scope-method",t.lineAt(b[0].from).number,t.lineAt(b[b.length-1].to).number,1));const v=[];Xe(e).iterate({from:i.viewport.from,to:i.viewport.to,enter:z=>{var j;const I=ld[z.name];if(!I||z.name==="IfStatement"&&((j=z.node.parent)==null?void 0:j.name)==="IfStatement")return;const k=t.lineAt(z.from).number,T=Math.max(t.lineAt(z.to).number,MG(t,z.from));v.push({kind:I,from:k,to:T}),f.push(g(`cm-scope cm-scope-${I}`,k,T,1))}});for(let z=1;z<=t.lines;z++){let I;for(const T of v)T.from<=z&&z<=T.to&&(!I||T.from>=I.from)&&(I=T);if(!I||I.kind!=="loop"&&I.kind!=="if"||z===I.from)continue;const k=t.line(z).text.trim();!k||k.startsWith("}")||k.endsWith("{")||k.startsWith("//")||k.startsWith("case ")||k.startsWith("default")||f.push(g("cm-scope cm-scope-method cm-scope-stmt",z,z,2))}const w=e.field(N1).marks.lines;return w&&w.fromi.docChanged||i.viewportChanged||i.geometryChanged||Xe(i.state)!==Xe(i.startState)||i.transactions.some(e=>e.effects.some(t=>t.is(Y0)))});class WG extends un{toDOM(){const e=document.createElement("span");return e.className="cm-breakpoint",e}}const Bl=new WG,m2=de.define(),c2=de.define(),Zl=Et.define({create:()=>ie.empty,update(i,e){i=i.map(e.changes);for(const t of e.effects){if(t.is(c2)&&(i=ie.of(t.value.map(a=>Bl.range(a)),!0)),!t.is(m2))continue;let n=!1;i.between(t.value,t.value,()=>{n=!0}),i=n?i.update({filter:a=>a!==t.value}):i.update({add:[Bl.range(t.value)]})}return i}});function EG(i){const t={mousedown:(n,a)=>{const s=i.breakpointLine(n.state.doc.lineAt(a.from).number-1);return s===void 0||s>=n.state.doc.lines?!1:(n.dispatch({effects:m2.of(n.state.doc.line(s+1).from)}),queueMicrotask(()=>i.onBreakpoints()),!0)}};return[Zl,TN({class:"cm-breakpoint-gutter",markers:n=>n.state.field(Zl),initialSpacer:()=>Bl,domEventHandlers:t}),DN({domEventHandlers:t})]}function X0(i,e){return i.field(N1).marks.placeholders.find(t=>e>=t.from&&e<=t.to)}const NG=q.inputHandler.of((i,e,t,n)=>{if(e!==t)return!1;const a=X0(i.state,e);return a?(i.dispatch({changes:{from:a.from,to:a.to,insert:n},selection:{anchor:a.from+n.length},userEvent:"input.type"}),!0):!1}),FG=re.transactionFilter.of(i=>{if(!i.docChanged||!(i.isUserEvent("input.paste")||i.isUserEvent("input.drop")))return i;const e=[];if(i.changes.iterChanges((a,s,r,o,l)=>e.push({from:a,to:s,text:l.toString()})),e.length!==1||e[0].from!==e[0].to)return i;const t=X0(i.startState,e[0].from);if(!t)return i;const{text:n}=e[0];return{changes:{from:t.from,to:t.to,insert:n},selection:{anchor:t.from+n.length},userEvent:"input.paste",scrollIntoView:!0}}),ud=i=>e=>{const t=e.state.selection.main;if(!t.empty)return!1;const n=X0(e.state,t.head);return!n||(i?t.head>=n.to:t.head<=n.from)?!1:(e.dispatch({changes:{from:n.from,to:n.to},selection:{anchor:n.from},userEvent:"delete"}),!0)},JG=q.updateListener.of(i=>{if(!i.selectionSet||i.docChanged||!i.transactions.some(n=>n.isUserEvent("select.pointer")))return;const e=i.state.selection.main;if(!e.empty)return;const t=i.state.field(N1).marks.placeholders.find(n=>e.head>n.from&&e.headi.view.dispatch({selection:M.range(t.from,t.to)}))}),RG=cr.define([{tag:[W.keyword,W.controlKeyword,W.definitionKeyword,W.modifier,W.operatorKeyword,W.standard(W.typeName),W.bool,W.null],color:"var(--syn-keyword)",fontWeight:"600"},{tag:[W.string,W.character],color:"var(--syn-string)"},{tag:W.number,color:"var(--syn-number)"},{tag:[W.lineComment,W.blockComment],color:"var(--syn-comment)",fontStyle:"italic"}]);function GG(i){const e=i,t=`\${// ${e.code}}`,n=(a,s,r,o=0)=>V0(s,{label:a,detail:r,type:"keyword",boost:o});return[n("if",`if (\${${e.condition}}) { ${t} }`,e.branch,2),n("if … else",`if (\${${e.condition}}) { ${t} @@ -64820,16 +67338,16 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis } }`,e.switchCase,1),n("System.out.println","System.out.println(${});",e.output,3),...["syso","sysout","sout"].map(a=>n(a,"System.out.println(${});",`System.out.println · ${e.output}`,2)),...["main","psvm"].map(a=>n(a,`public static void main(String[] args) { ${t} -}`,"public static void main(String[] args)",2)),aR(e.input),n("scanner.nextInt","int ${zahl} = scanner.nextInt();",e.input,1),n("scanner.next","String ${text} = scanner.next();",e.input),n("scanner.nextDouble","double ${wert} = scanner.nextDouble();",e.input),n("try … catch",`try { +}`,"public static void main(String[] args)",2)),VG(e.input),n("scanner.nextInt","int ${zahl} = scanner.nextInt();",e.input,1),n("scanner.next","String ${text} = scanner.next();",e.input),n("scanner.nextDouble","double ${wert} = scanner.nextDouble();",e.input),n("try … catch",`try { ${t} } catch (\${Exception} e) { \${// ${e.code}} }`,"try … catch",1),n("public class",`public class \${Main} { ${t} -}`,"public class",-2),...["import java.util.Scanner;","import javax.swing.*;","import java.awt.*;","import java.awt.event.*;"].map((a,s)=>n(a,a,"import",1-s)),...["int","double","String","boolean","char","long","final","break;","continue;","return","true","false","else","null","new","public","private","static","void","class","extends","implements","interface","this"].map(a=>({label:a,type:"keyword",boost:-1})),...["Math","JFrame","JButton","JLabel","JTextField","ActionListener","ActionEvent","Color","FlowLayout","GridLayout","BorderLayout"].map(a=>({label:a,type:"type",boost:-2})),...["Math.random()","Math.abs(","Math.sqrt(","Math.max(","Math.min(",".length()",".equals("].map(a=>({label:a,type:"function",boost:-2}))]}function iR(i){if(/^\s*import\s+java\.util\.(?:Scanner|\*)\s*;/m.test(i))return;const e=/^\s*package\s+[\w.]+\s*;[^\n]*\n?/.exec(i),t=e?e[0].length:0,n=i.slice(t).replace(/^\s*\n/,"");return{from:t,insert:`import java.util.Scanner; +}`,"public class",-2),...["import java.util.Scanner;","import javax.swing.*;","import java.awt.*;","import java.awt.event.*;"].map((a,s)=>n(a,a,"import",1-s)),...["int","double","String","boolean","char","long","final","break;","continue;","return","true","false","else","null","new","public","private","static","void","class","extends","implements","interface","this"].map(a=>({label:a,type:"keyword",boost:-1})),...["Math","JFrame","JButton","JLabel","JTextField","ActionListener","ActionEvent","Color","FlowLayout","GridLayout","BorderLayout"].map(a=>({label:a,type:"type",boost:-2})),...["Math.random()","Math.abs(","Math.sqrt(","Math.max(","Math.min(",".length()",".equals("].map(a=>({label:a,type:"function",boost:-2}))]}function HG(i){if(/^\s*import\s+java\.util\.(?:Scanner|\*)\s*;/m.test(i))return;const e=/^\s*package\s+[\w.]+\s*;[^\n]*\n?/.exec(i),t=e?e[0].length:0,n=i.slice(t).replace(/^\s*\n/,"");return{from:t,insert:`import java.util.Scanner; ${/^\s*import\b/.test(n)?"":` -`}`}}function aR(i){const e=V0("Scanner ${scanner} = new Scanner(System.in);",{label:"Scanner scanner = new Scanner(System.in);",detail:i,type:"keyword",boost:3}),t=e.apply;return{...e,apply(n,a,s,r){const o=iR(n.state.doc.toString());if(!o)return t(n,a,s,r);const l=n.state.changes(o);n.dispatch({changes:l,userEvent:"input.complete"}),t(n,a,l.mapPos(s),l.mapPos(r,1))}}}function sR(i){const t={label:i.kind==="field"?i.name:`${i.name}(${i.params?"…":""})`,detail:i.returns==="void"||!i.returns?i.description:i.description?`${i.returns} · ${i.description}`:i.returns,type:i.kind==="field"?"property":"method"};return i.kind==="field"?{...t,apply:i.name}:i.params?V0(`${i.name}(\${})`,t):{...t,apply:`${i.name}()`}}function rR(){const i=r1();return i==="de"?"de":i==="pt-PT"?"pt":"en"}function oR(i){const e=new Set;for(const t of i.matchAll(/\b(?:int|long|double|float|boolean|char|String|Scanner)(?:\s*\[\s*\])*\s+([A-Za-z_]\w*)/g))e.add(t[1]);return[...e].map(t=>({label:t,type:"variable",boost:1}))}class lR{constructor(e,t,n){y(this,"view");y(this,"readOnly",new Vi);const a=r=>{var h,g;const o=r.matchBefore(/[\w.]+/);if(!o||o.from===o.to&&!r.explicit)return null;const l=r.state.doc.lineAt(r.pos),u=l.text.slice(0,r.pos-l.from);if(/\/\//.test(u)||(((h=u.match(/"/g))==null?void 0:h.length)??0)%2===1)return null;const m=EF(r.state.doc.toString(),r.pos,rR(),(g=t.ownTypes)==null?void 0:g.call(t,r.pos));if(m)return{from:m.from,options:m.members.map((f,b)=>({...sR(f),boost:50-b})),validFor:/^\w*$/};const c=/\bvoid\s+[\w.]*$/.test(u),d=nR(t.words()).filter(f=>!(c&&(f.label==="main"||f.label==="psvm")));return{from:o.from,options:[...d,...oR(r.state.doc.toString())],validFor:/^\w*$/}},s=[YF(t),QW(),tF(),AE(tR),Yi.of(" "),re.tabSize.of(4),SE(),WE(),CN(),E1,HF,UF,XF,KF,eR,this.readOnly.of(re.readOnly.of(!1)),EN({override:[a],icons:!1}),u1.highest(Bi.of([{key:"Mod-z",run:()=>(t.onUndo(!1),!0),preventDefault:!0},{key:"Mod-Shift-z",run:()=>(t.onUndo(!0),!0),preventDefault:!0},{key:"Mod-y",run:()=>(t.onUndo(!0),!0),preventDefault:!0},{key:"Backspace",run:ud(!1)},{key:"Delete",run:ud(!0)},{key:"F2",run:r=>{var o;return((o=t.onRename)==null?void 0:o.call(t,r.state.selection.main.head))??!1},preventDefault:!0}])),Bi.of([...PN,...Tf,JJ,...NJ]),q.domEventHandlers({contextmenu:(r,o)=>{var u;const l=o.posAtCoords({x:r.clientX,y:r.clientY});return l===null||!((u=t.onRename)!=null&&u.call(t,l,{x:r.clientX,y:r.clientY}))?!1:(r.preventDefault(),!0)}}),q.contentAttributes.of({"aria-label":n,autocapitalize:"off",autocorrect:"off",spellcheck:"false"}),q.updateListener.of(r=>{r.docChanged&&!r.transactions.some(o=>o.annotation(sd))?queueMicrotask(()=>t.onChange()):r.selectionSet&&!r.docChanged&&queueMicrotask(()=>t.onCaret())})];this.view=new q({parent:e,state:re.create({doc:"",extensions:s})})}get text(){return this.view.state.doc.toString()}get caret(){return this.view.state.selection.main.head}get hasFocus(){return this.view.hasFocus}get breakpoints(){const e=new Set,t=this.view.state.doc;return this.view.state.field(Bl).between(0,t.length,n=>{e.add(t.lineAt(n).number-1)}),e}setBreakpoints(e){const t=this.view.state.doc,n=[...new Set(e)].filter(a=>a>=0&&at.line(a+1).from);this.view.dispatch({effects:c2.of(n)})}lineAt(e){return this.view.state.doc.lineAt(Math.min(e,this.view.state.doc.length)).number-1}setText(e){const t=Math.min(this.caret,e.length),n=this.text;let a=0;for(;a({from:n.from,to:n.to,insert:t})),userEvent:"input.rename"})}indent(){const e=this.view.state.doc,t=this.view.state.selection.main,n=t.empty?1:e.lineAt(t.from).number,a=t.empty?e.lines:e.lineAt(t.to).number,s=Ze.of(fF(e.toString(),n,a),e.length),r=s.apply(e),o=r.lineAt(s.mapPos(e.line(n).from,-1)).number,l=r.lineAt(s.mapPos(e.line(a).to,1)).number,u=[];t2(r.toString(),o,l).split(` -`).forEach((c,d)=>{const h=r.line(d+1),g=/^\s*/.exec(h.text)[0],f=/^\s*/.exec(c)[0];g!==f&&u.push({from:h.from,to:h.from+g.length,insert:f})});const m=s.compose(Ze.of(u,r.length));m.empty||this.view.dispatch({changes:m,userEvent:"input.indent"}),this.view.focus()}setMarks(e,t){const n=[Y0.of(e)];e.current!==void 0&&e.current({label:t,type:"variable",boost:1}))}class $G{constructor(e,t,n){y(this,"view");y(this,"readOnly",new Vi);const a=r=>{var h,g;const o=r.matchBefore(/[\w.]+/);if(!o||o.from===o.to&&!r.explicit)return null;const l=r.state.doc.lineAt(r.pos),u=l.text.slice(0,r.pos-l.from);if(/\/\//.test(u)||(((h=u.match(/"/g))==null?void 0:h.length)??0)%2===1)return null;const m=_G(r.state.doc.toString(),r.pos,QG(),(g=t.ownTypes)==null?void 0:g.call(t,r.pos));if(m)return{from:m.from,options:m.members.map((f,x)=>({...qG(f),boost:50-x})),validFor:/^\w*$/};const c=/\bvoid\s+[\w.]*$/.test(u),d=GG(t.words()).filter(f=>!(c&&(f.label==="main"||f.label==="psvm")));return{from:o.from,options:[...d,...UG(r.state.doc.toString())],validFor:/^\w*$/}},s=[EG(t),ZN(),RR(),xF(RG),Yi.of(" "),re.tabSize.of(4),hF(),TF(),fJ(),N1,DG,LG,NG,FG,JG,this.readOnly.of(re.readOnly.of(!1)),_J({override:[a],icons:!1}),u1.highest(Zi.of([{key:"Mod-z",run:()=>(t.onUndo(!1),!0),preventDefault:!0},{key:"Mod-Shift-z",run:()=>(t.onUndo(!0),!0),preventDefault:!0},{key:"Mod-y",run:()=>(t.onUndo(!0),!0),preventDefault:!0},{key:"Backspace",run:ud(!1)},{key:"Delete",run:ud(!0)},{key:"F2",run:r=>{var o;return((o=t.onRename)==null?void 0:o.call(t,r.state.selection.main.head))??!1},preventDefault:!0}])),Zi.of([...yJ,...Tf,CR,...jR]),q.domEventHandlers({contextmenu:(r,o)=>{var u;const l=o.posAtCoords({x:r.clientX,y:r.clientY});return l===null||!((u=t.onRename)!=null&&u.call(t,l,{x:r.clientX,y:r.clientY}))?!1:(r.preventDefault(),!0)}}),q.contentAttributes.of({"aria-label":n,autocapitalize:"off",autocorrect:"off",spellcheck:"false"}),q.updateListener.of(r=>{r.docChanged&&!r.transactions.some(o=>o.annotation(sd))?queueMicrotask(()=>t.onChange()):r.selectionSet&&!r.docChanged&&queueMicrotask(()=>t.onCaret())})];this.view=new q({parent:e,state:re.create({doc:"",extensions:s})})}get text(){return this.view.state.doc.toString()}get caret(){return this.view.state.selection.main.head}get hasFocus(){return this.view.hasFocus}get breakpoints(){const e=new Set,t=this.view.state.doc;return this.view.state.field(Zl).between(0,t.length,n=>{e.add(t.lineAt(n).number-1)}),e}setBreakpoints(e){const t=this.view.state.doc,n=[...new Set(e)].filter(a=>a>=0&&at.line(a+1).from);this.view.dispatch({effects:c2.of(n)})}lineAt(e){return this.view.state.doc.lineAt(Math.min(e,this.view.state.doc.length)).number-1}setText(e){const t=Math.min(this.caret,e.length),n=this.text;let a=0;for(;a({from:n.from,to:n.to,insert:t})),userEvent:"input.rename"})}indent(){const e=this.view.state.doc,t=this.view.state.selection.main,n=t.empty?1:e.lineAt(t.from).number,a=t.empty?e.lines:e.lineAt(t.to).number,s=Be.of(aG(e.toString(),n,a),e.length),r=s.apply(e),o=r.lineAt(s.mapPos(e.line(n).from,-1)).number,l=r.lineAt(s.mapPos(e.line(a).to,1)).number,u=[];t2(r.toString(),o,l).split(` +`).forEach((c,d)=>{const h=r.line(d+1),g=/^\s*/.exec(h.text)[0],f=/^\s*/.exec(c)[0];g!==f&&u.push({from:h.from,to:h.from+g.length,insert:f})});const m=s.compose(Be.of(u,r.length));m.empty||this.view.dispatch({changes:m,userEvent:"input.indent"}),this.view.focus()}setMarks(e,t){const n=[Y0.of(e)];e.current!==void 0&&e.current{const n=document.createElement("script");n.src=i,n.onload=()=>e(),n.onerror=()=>t(new Error(i)),document.head.append(n)})}function dR(i){return ln??(ln=(async()=>{await cR(uR),await cheerpjInit({status:"none"}),cheerpjCreateDisplay(-1,-1,i);const e=await fetch(md);if(!e.ok)throw new Error(md);if(cheerpOSAddStringFile(Js,new Uint8Array(await e.arrayBuffer())),cheerpOSAddStringFile("/str/VisuStructRunner.java",mR),await cheerpjRunMain("com.sun.tools.javac.Main",Js,"/str/VisuStructRunner.java","-d","/files/")!==0)throw new Error("javac");return await(await cheerpjRunLibrary("/files/")).VisuStructRunner})()),ln.catch(()=>ln=void 0),ln}function hR(i){const e=i.match(/public\s+(?:final\s+)?class\s+(\w+)/)??i.match(/\bclass\s+(\w+)/);return e?e[1]:"Main"}function gR(i){return/\bFiles\s*\.\s*\w+\s*\(|\bnew\s+(?:File|FileReader|FileWriter|PrintWriter|BufferedReader)\s*\(/.test(i)}function pR(i,e){return i.replace(/"([\w.-]+\.(?:txt|csv|json))"/g,`"${e}$1"`)}function d2(i){i=i.replace(/\bFiles\s*\.\s*readString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g,'new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get($1)), "UTF-8")');const e=/\bFiles\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*,/g;let t="",n=0;for(let a=e.exec(i);a;a=e.exec(i)){let s=1,r=a.index+a[0].length,o=!1;for(;r0;r++){const u=i[r];o?u==="\\"?r++:u==='"'&&(o=!1):u==='"'?o=!0:u==="("?s++:u===")"&&s--}if(s>0)break;const l=i.slice(a.index+a[0].length,r-1).trim();t+=i.slice(n,a.index)+`java.nio.file.Files.write(java.nio.file.Paths.get(${a[1]}), (${l}).getBytes("UTF-8"))`,n=r,e.lastIndex=r}return t+i.slice(n)}function fR(i){if(/\bclass\s+\w+/.test(i))return i;const e=[];i=i.replace(/^[ \t]*import\s+[\w.]+(?:\.\*)?\s*;[ \t]*$/gm,a=>(e.push(a.trim()),""));const t=[...e,"import java.util.*;","import java.awt.*;","import java.awt.event.*;","import javax.swing.*;"].join(` +`;let ln,Rs=0;function KG(i){return new Promise((e,t)=>{const n=document.createElement("script");n.src=i,n.onload=()=>e(),n.onerror=()=>t(new Error(i)),document.head.append(n)})}function eH(i){return ln??(ln=(async()=>{await KG(YG),await cheerpjInit({status:"none"}),cheerpjCreateDisplay(-1,-1,i);const e=await fetch(md);if(!e.ok)throw new Error(md);if(cheerpOSAddStringFile(Js,new Uint8Array(await e.arrayBuffer())),cheerpOSAddStringFile("/str/VisuStructRunner.java",XG),await cheerpjRunMain("com.sun.tools.javac.Main",Js,"/str/VisuStructRunner.java","-d","/files/")!==0)throw new Error("javac");return await(await cheerpjRunLibrary("/files/")).VisuStructRunner})()),ln.catch(()=>ln=void 0),ln}function tH(i){const e=i.match(/public\s+(?:final\s+)?class\s+(\w+)/)??i.match(/\bclass\s+(\w+)/);return e?e[1]:"Main"}function nH(i){return/\bFiles\s*\.\s*\w+\s*\(|\bnew\s+(?:File|FileReader|FileWriter|PrintWriter|BufferedReader)\s*\(/.test(i)}function iH(i,e){return i.replace(/"([\w.-]+\.(?:txt|csv|json))"/g,`"${e}$1"`)}function d2(i){i=i.replace(/\bFiles\s*\.\s*readString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g,'new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get($1)), "UTF-8")');const e=/\bFiles\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*,/g;let t="",n=0;for(let a=e.exec(i);a;a=e.exec(i)){let s=1,r=a.index+a[0].length,o=!1;for(;r0;r++){const u=i[r];o?u==="\\"?r++:u==='"'&&(o=!1):u==='"'?o=!0:u==="("?s++:u===")"&&s--}if(s>0)break;const l=i.slice(a.index+a[0].length,r-1).trim();t+=i.slice(n,a.index)+`java.nio.file.Files.write(java.nio.file.Paths.get(${a[1]}), (${l}).getBytes("UTF-8"))`,n=r,e.lastIndex=r}return t+i.slice(n)}function aH(i){if(/\bclass\s+\w+/.test(i))return i;const e=[];i=i.replace(/^[ \t]*import\s+[\w.]+(?:\.\*)?\s*;[ \t]*$/gm,a=>(e.push(a.trim()),""));const t=[...e,"import java.util.*;","import java.awt.*;","import java.awt.event.*;","import javax.swing.*;"].join(` `)+` `;if(/\bstatic\s+void\s+main\s*\(/.test(i))return`${t}public class Main { ${i} } -`;const n=gR(i)?" throws Exception":"";return`${t}public class Main { +`;const n=nH(i)?" throws Exception":"";return`${t}public class Main { public static void main(String[] args)${n} { ${i} } } -`}async function bR(){ln&&await(await ln).closeAll()}async function h2(i,e,t){const n=new Map;for(const a of(await i.list(e)).split(` -`).filter(Boolean)){const s=await i.read(e+a);t.get(a)!==s&&n.set(a,s)}return n}function xR(i,e){const t=Fs,n=`/files/run${t}/data/`,a=new Map([...Th(),...i]);let s=!1;const r=async()=>{if(!(s||Fs!==t||!ln)){try{const l=await ln,u=await h2(l,n,a);for(const[m,c]of u)a.set(m,c);if(u.size&&e(u),await l.openWindows()===0)return}catch{return}o=window.setTimeout(r,1500)}};let o=window.setTimeout(r,1500);return()=>{s=!0,window.clearTimeout(o)}}async function vR(i,e){const t=await ln,n=`/files/run${++Fs}/`;await t.mkdirs(n);const a=`${n}data/`,s=new Map(Th());await t.mkdirs(a);for(const[u,m]of s)cheerpOSAddStringFile(`/str/${u}`,m),await t.copy(`/str/${u}`,a+u);const r=fR(d2(pR(i,a))),o=hR(r);if(cheerpOSAddStringFile(`/str/${o}.java`,r),await cheerpjRunMain("com.sun.tools.javac.Main",Js,`/str/${o}.java`,"-d",n,"-encoding","UTF-8")!==0)return{result:"compile-error",files:new Map};e(),await t.run(n,o);const l=await h2(t,a,s);return await t.openWindows()>0?{result:"windows",files:l}:(await new Promise(u=>setTimeout(u,500)),{result:await t.openWindows()>0?"windows":"finished",files:l})}async function yG(i,e,t){const n=await ln,a=`/files/run${++Fs}/`,s=`${a}src/`,r=[];for(const l of i){const u=`${s}${l.pkg?l.pkg.replace(/\./g,"/")+"/":""}${l.name}.java`;await n.write(u,d2(l.text)),r.push(u)}const o=`${a}classes/`;return await n.mkdirs(o),await cheerpjRunMain("com.sun.tools.javac.Main",Js,...r,"-d",o,"-encoding","UTF-8")!==0?{result:"compile-error",files:new Map}:(t(),await n.run(o,e),await n.openWindows()>0?{result:"windows",files:new Map}:(await new Promise(l=>setTimeout(l,500)),{result:await n.openWindows()>0?"windows":"finished",files:new Map}))}const Rs=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record yield".split(" ")),cd=/[\p{L}\p{N}_$]/u,yR=/[\p{L}_$]/u;function R1(i){const e=[];let t=0;for(;t{if(!(s||Rs!==t||!ln)){try{const l=await ln,u=await h2(l,n,a);for(const[m,c]of u)a.set(m,c);if(u.size&&e(u),await l.openWindows()===0)return}catch{return}o=window.setTimeout(r,1500)}};let o=window.setTimeout(r,1500);return()=>{s=!0,window.clearTimeout(o)}}async function oH(i,e){const t=await ln,n=`/files/run${++Rs}/`;await t.mkdirs(n);const a=`${n}data/`,s=new Map(Th());await t.mkdirs(a);for(const[u,m]of s)cheerpOSAddStringFile(`/str/${u}`,m),await t.copy(`/str/${u}`,a+u);const r=aH(d2(iH(i,a))),o=tH(r);if(cheerpOSAddStringFile(`/str/${o}.java`,r),await cheerpjRunMain("com.sun.tools.javac.Main",Js,`/str/${o}.java`,"-d",n,"-encoding","UTF-8")!==0)return{result:"compile-error",files:new Map};e(),await t.run(n,o);const l=await h2(t,a,s);return await t.openWindows()>0?{result:"windows",files:l}:(await new Promise(u=>setTimeout(u,500)),{result:await t.openWindows()>0?"windows":"finished",files:l})}async function lV(i,e,t){const n=await ln,a=`/files/run${++Rs}/`,s=`${a}src/`,r=[];for(const l of i){const u=`${s}${l.pkg?l.pkg.replace(/\./g,"/")+"/":""}${l.name}.java`;await n.write(u,d2(l.text)),r.push(u)}const o=`${a}classes/`;return await n.mkdirs(o),await cheerpjRunMain("com.sun.tools.javac.Main",Js,...r,"-d",o,"-encoding","UTF-8")!==0?{result:"compile-error",files:new Map}:(t(),await n.run(o,e),await n.openWindows()>0?{result:"windows",files:new Map}:(await new Promise(l=>setTimeout(l,500)),{result:await n.openWindows()>0?"windows":"finished",files:new Map}))}const Gs=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record yield".split(" ")),cd=/[\p{L}\p{N}_$]/u,lH=/[\p{L}_$]/u;function G1(i){const e=[];let t=0;for(;tt.name===e&&!K0(i,t.from))}function K0(i,e){let t=e-1;for(;t>=0&&(i[t]===" "||i[t]===" ");)t--;return i[t]==="."}function wR(i,e){const t=R1(i).find(n=>e>=n.from&&e<=n.to);if(!(!t||Rs.has(t.name)||K0(i,t.from)))return t}function zR(i,e,t){const n=Ri(i,e);let a="",s=0;for(const r of n)a+=i.slice(s,r.from)+t,s=r.to;return{text:a+i.slice(s),count:n.length}}function eu(i){const e=[i.caption],t=n=>{for(const a of n){e.push(a.textLines.join(` -`)),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])e.push(s.name),t(s.elements)}};return t(i.elements),e}function IR(i,e,t){let n=0;const a=o=>{const l=zR(o,e,t);return n+=l.count,l.text},s=o=>o.map(l=>({...l,textLines:a(l.textLines.join(` +`;)t+=i[t]==="\\"?2:1;t++}else if(lH.test(n)){const a=t;for(;tt.name===e&&!K0(i,t.from))}function K0(i,e){let t=e-1;for(;t>=0&&(i[t]===" "||i[t]===" ");)t--;return i[t]==="."}function uH(i,e){const t=G1(i).find(n=>e>=n.from&&e<=n.to);if(!(!t||Gs.has(t.name)||K0(i,t.from)))return t}function mH(i,e,t){const n=Ri(i,e);let a="",s=0;for(const r of n)a+=i.slice(s,r.from)+t,s=r.to;return{text:a+i.slice(s),count:n.length}}function eu(i){const e=[i.caption],t=n=>{for(const a of n){e.push(a.textLines.join(` +`)),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])e.push(s.name),t(s.elements)}};return t(i.elements),e}function cH(i,e,t){let n=0;const a=o=>{const l=mH(o,e,t);return n+=l.count,l.text},s=o=>o.map(l=>({...l,textLines:a(l.textLines.join(` `)).split(` -`),...l.loopBody?{loopBody:s(l.loopBody)}:{},...l.cases?{cases:l.cases.map(u=>({name:a(u.name),elements:s(u.elements)}))}:{}}));return{doc:{...i,caption:a(i.caption),elements:s(i.elements)},count:n}}function tu(i){const e=new Set,t=new Set,n=new Set;for(const a of i){const s=R1(a).filter(r=>!K0(a,r.from));s.forEach((r,o)=>{if(Rs.has(r.name)||r.name==="ø")return;const l=a.slice(r.to),u=s[o+1],m=u?a.slice(r.to,u.from):"",c=u!==void 0&&!Rs.has(u.name)&&/^(?:\s*\[\s*\])*[ \t]+$/.test(m);c&&/^\s*(?:[=;,):]|$)/.test(a.slice(u.to))&&n.add(u.name);const d=new RegExp("^\\p{Lu}","u").test(r.name)&&/^\s*\./.test(l);/^\s*\(/.test(l)||d||c?t.add(r.name):e.add(r.name)})}return[...e].filter(a=>!t.has(a)||n.has(a))}function kR(i){return eu(i).flatMap(e=>R1(e).map(t=>t.name))}function SR(i,e){return eu(i).reduce((t,n)=>t+Ri(n,e).length,0)}function TR(i){return tu(eu(i))}function ro(i){return tu([i.textLines.join(` -`)])}function dd(i,e,t){if(e==="")return{ok:!1,reason:"empty"};if(e===i)return{ok:!1,reason:"same"};if(!/^[\p{L}_$][\p{L}\p{N}_$]*$/u.test(e))return{ok:!1,reason:"invalid"};if(Rs.has(e))return{ok:!1,reason:"keyword"};for(const n of t)if(n===e)return{ok:!0,warning:"exists"};return{ok:!0}}const mn=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function g2(i){return new Promise(e=>{const t=document.createElement("div");t.className="confirm";const n=i.names.length===1;t.innerHTML=`