From b1411625aabea37475b7a2da62196acb46171542 Mon Sep 17 00:00:00 2001 From: Tobi G Date: Mon, 31 Aug 2026 14:24:52 +0200 Subject: [PATCH] Teilen-Blatt, HIG-Blaetter, geteilte Ansichtseinstellungen (2026.8.31.1) Share-Erweiterung: ein PDF aus Mail landet ueber Teilen -> DataMetric360 als Tankbeleg. Alles Native liegt versioniert unter companion-app/native/, weil ios/ gitignored ist und npx cap add ios es sonst wieder frisst; scripts/ios-teilen-einrichten.mjs haengt es bei jedem Bau ins Xcode-Projekt und ist in ios-signieren.sh eingehaengt. Der pbxproj-Teil ist auf keinem Mac erprobt - er bricht vor dem Schreiben ab, und docs/SHARE_EXTENSION.md beschreibt dieselben Handgriffe fuer Xcode. "In den Kalender uebernehmen" ging in der App nie: WKWebView ignoriert das download-Attribut, der Klick lief ins Leere. Auf dem Geraet jetzt @capacitor/filesystem plus @capacitor/share. useTheme/useBoden legten je Aufrufer eigenen Zustand an - fuenf Kopien. Der Schalter aenderte nur seine eigene, data-theme in App.tsx blieb stehen, die Tag/Nacht-Umschaltung wirkte erst nach einem Neustart. Jetzt ein Speicher je Einstellung ueber useSyncExternalStore. Zwei Regressionstests, gegen den alten Stand als fehlschlagend nachgewiesen. Alle Popups nach Apple HIG: neue Bausteine Sheet und ActionSheet, blickdicht und mit abgedunkeltem Schleier, in beiden Codebasen. Popup portalierte nach document.body - ausserhalb von [data-theme] - und war deshalb im Tagmodus fast unsichtbar; Portal zielt jetzt auf .ads-root. ImagePlaceholder merkte sich "fehlgeschlagen" ohne die Adresse: nach einem leeren Galerieplatz zeigten auch die mit Foto nur noch den Platzhalter. Vier Regressionstests, ebenfalls gegen den alten Stand geprueft. Bildadressen tragen jetzt einen Cache-Brecher - HA liefert /local/ mit 31 Tagen Cache-Vorgabe aus, im Panel eingefuegte Radfotos erschienen in der App deshalb nicht. uebersichtsbild: Panel speichert den Namen, die App verglich gegen den Dateinamen - der Vergleich traf nie zu. Kanonisch ist der Name. Weiter: Navigationspfeil statt gleichschenkligem Dreieck auf der Streckenlinie (die Kerbe unterscheidet Kopf und Ende), CI-Symbol tour-s als Fahrten-Icon, Datumsfelder zeigen ihren Wert ohne erstes Antippen, feste Beispielnamen im Setup, Kopf-Gegengewicht fuer mittige Titel, Standort-Blatt mit festem Fussabstand, NSLocationWhenInUseUsageDescription, watchPosition fuer die Live-Ortung, Art-Pille wieder als Knopf, Zwischenablage fuer Tankbelege. Co-Authored-By: Claude Opus 5 --- AGENTS.md | 120 +++++++++ companion-app/docs/SHARE_EXTENSION.md | 120 +++++++++ companion-app/native/App.entitlements | 15 ++ .../teilen/DataMetric360Share.entitlements | 16 ++ companion-app/native/teilen/Info.plist | 53 ++++ .../native/teilen/ShareViewController.swift | 157 +++++++++++ companion-app/package.json | 7 +- companion-app/scripts/ios-signieren.sh | 43 +++ .../scripts/ios-teilen-einrichten.mjs | 198 ++++++++++++++ companion-app/src/App.tsx | 32 +++ companion-app/src/Shell.tsx | 16 +- .../src/daten/geteilterBeleg.test.ts | 95 +++++++ companion-app/src/daten/geteilterBeleg.ts | 122 +++++++++ companion-app/src/daten/profilAdapter.ts | 3 +- companion-app/src/daten/zwischenablage.ts | 73 ++++++ companion-app/src/screens/BelegPopup.tsx | 129 +++++++++ companion-app/src/screens/DatensatzPopup.tsx | 13 +- companion-app/src/screens/Datumsfeld.tsx | 58 ++++ companion-app/src/screens/Einstellungen.tsx | 55 ++-- companion-app/src/screens/FahrtDetail.tsx | 33 ++- companion-app/src/screens/Fahrzeugdaten.tsx | 2 +- companion-app/src/screens/HistorienImport.tsx | 14 +- companion-app/src/screens/Karte.tsx | 88 ++++++- companion-app/src/screens/Reifen.tsx | 18 +- companion-app/src/screens/Service.tsx | 17 +- companion-app/src/screens/Standort.tsx | 40 ++- companion-app/src/screens/TankDetail.tsx | 24 +- companion-app/src/screens/Tanken.tsx | 58 +++- companion-app/src/screens/Uebersicht.tsx | 6 +- companion-app/src/screens/Versicherung.tsx | 16 +- companion-app/src/screens/bausteine.tsx | 64 +++-- companion-app/src/screens/bilder.ts | 28 +- .../src/screens/bildplatzhalter.test.tsx | 69 +++++ companion-app/src/screens/kalender.ts | 48 +++- companion-app/src/stile/rahmen.css | 12 + companion-app/src/stile/screens.css | 89 ++++++- companion-app/src/symbole.tsx | 10 +- companion-app/src/theme.test.ts | 33 ++- companion-app/src/theme.test.tsx | 73 ++++++ companion-app/src/theme.ts | 179 ++++++++----- .../audi_dashboard/einstellungen.py | 30 ++- .../audi_dashboard/frontend/app/bundle.json | 2 +- .../audi_dashboard/frontend/app/bundle.zip | Bin 257018 -> 266016 bytes .../frontend/audi-dashboard-app.js | 248 ++++++++++++------ .../frontend/audi-dashboard-ios.css | 28 +- .../frontend/audi-dashboard.css | 111 +++++--- .../audi_dashboard/manifest.json | 2 +- .../ImagePlaceholder/ImagePlaceholder.tsx | 22 +- design-system/src/components/Pill/Pill.css | 12 + design-system/src/components/Pill/Pill.tsx | 25 +- design-system/src/components/Popup/Popup.tsx | 22 +- .../src/components/Sheet/ActionSheet.tsx | 98 +++++++ design-system/src/components/Sheet/Sheet.css | 214 +++++++++++++++ design-system/src/components/Sheet/Sheet.tsx | 103 ++++++++ design-system/src/components/Sheet/index.ts | 4 + design-system/src/index.ts | 3 + design-system/src/styles.css | 1 + package-lock.json | 43 ++- 58 files changed, 2846 insertions(+), 368 deletions(-) create mode 100644 companion-app/docs/SHARE_EXTENSION.md create mode 100644 companion-app/native/App.entitlements create mode 100644 companion-app/native/teilen/DataMetric360Share.entitlements create mode 100644 companion-app/native/teilen/Info.plist create mode 100644 companion-app/native/teilen/ShareViewController.swift create mode 100644 companion-app/scripts/ios-teilen-einrichten.mjs create mode 100644 companion-app/src/daten/geteilterBeleg.test.ts create mode 100644 companion-app/src/daten/geteilterBeleg.ts create mode 100644 companion-app/src/daten/zwischenablage.ts create mode 100644 companion-app/src/screens/BelegPopup.tsx create mode 100644 companion-app/src/screens/Datumsfeld.tsx create mode 100644 companion-app/src/screens/bildplatzhalter.test.tsx create mode 100644 companion-app/src/theme.test.tsx create mode 100644 design-system/src/components/Sheet/ActionSheet.tsx create mode 100644 design-system/src/components/Sheet/Sheet.css create mode 100644 design-system/src/components/Sheet/Sheet.tsx create mode 100644 design-system/src/components/Sheet/index.ts diff --git a/AGENTS.md b/AGENTS.md index 5fbfd5a..2f6d893 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6068,3 +6068,123 @@ rendering bug in a view. `custom_components/audi_dashboard/` directly. Do not reintroduce a copy. - Security principle: HA is never publicly exposed; only narrowly scoped surfaces (MQTT broker, proxy allowlist) may be exposed, each by explicit decision. + +--- + +## AR. Teilen-Blatt, Kalender und der Rest des Owner-Stapels vom 2026-08-31 + +Alles unter `companion-app/`, sofern nicht anders vermerkt; Panel-Anteile nach der Paritätsregel. + +### Share-Erweiterung: alles versioniert, damit `cap add ios` sie nicht wieder frisst + +Ein PDF aus Mail über **Teilen → DataMetric360** landet als Tankbeleg in der App. Der Weg im +Ganzen steht in `companion-app/docs/SHARE_EXTENSION.md`; das Wesentliche hier: + +- Eine Erweiterung ist ein eigener Prozess. Der einzige gemeinsame Boden mit der App ist eine + **App-Gruppe** (`group.app.datametric360`). Das PDF reist Base64-kodiert durch die geteilten + `UserDefaults`, weil `@capacitor/preferences` genau die liest, sobald man ihm die Gruppe nennt — + eine Datei im Gruppen-Container bräuchte eigenen nativen Code auf der App-Seite, also ein + zusätzliches Plugin für einen Weg, den es sonst nicht gäbe. Preis: 4-MB-Grenze, sauber gemeldet. +- **`companion-app/ios/` ist gitignored.** Alles Native liegt deshalb unter + `companion-app/native/` und wird von `scripts/ios-teilen-einrichten.mjs` bei jedem Bau wieder + eingespielt — dieselbe Regel, die schon die Team-Kennung und den Standort-Schlüssel in + `ios-signieren.sh` getrieben hat. Das Skript ist idempotent und in `ios-signieren.sh` + eingehängt. +- **Der pbxproj-Teil ist auf keinem Mac erprobt** (geschrieben ohne Zugriff auf macOS). Er bricht + vor dem Schreiben ab, wenn etwas nicht passt, und `docs/SHARE_EXTENSION.md` beschreibt dieselben + Handgriffe für Xcode. Nicht als „fertig verifiziert" behandeln, bevor es auf dem Mac gelaufen ist. +- Einmalig im Apple-Portal nötig: App-Gruppe anlegen, `app.datametric360.teilen` anlegen, beide + App-IDs der Gruppe zuordnen. Ohne das schlägt das Signieren fehl. +- Die App-Seite ist geprüft (6 Tests in `src/daten/geteilterBeleg.test.ts`): Eintrag → `File`, + genau einmal abgeholt, liegengebliebene und unlesbare Einträge verworfen. + +### „In den Kalender übernehmen" ging in der App nie + +`` mit Blob-Adresse — **WKWebView ignoriert `download`**, der Klick lief ins Leere. +Auf dem Gerät jetzt `@capacitor/filesystem` (Cache) plus `@capacitor/share`; im Browser und im +Panel bleibt der Download. Betrifft Reifen-Wechseltermin und Service-Werkstatttermin. + +### Ein Wert, viele Kopien: `useTheme`/`useBoden` waren pro Aufrufer eigener Zustand + +`useTheme()` legte bei jedem Aufruf ein eigenes `useState` an — fünf unabhängige Kopien +(`App.tsx`, `Einstellungen.tsx`, `Typenschild.tsx` ×2). Der Schalter änderte nur seine eigene; +`data-theme` in `App.tsx` blieb stehen, die Umschaltung wirkte erst nach einem Neustart. Der +Boden-Schalter hatte denselben Fehler. Jetzt `useSyncExternalStore` über einen Speicher je +Einstellung in `theme.ts` — Reacts eigener Weg für Zustand außerhalb des Komponentenbaums, ohne +Kontext-Anbieter und ohne geänderte Aufrufstellen. Zwei Regressionstests, gegen den alten Stand +als fehlschlagend nachgewiesen. + +**Regel:** eine Einstellung, die mehr als eine Komponente liest, gehört nicht in `useState` je +Aufrufer. + +### `uebersichtsbild`: Panel und App speicherten Verschiedenes ins selbe Feld + +Panel schreibt den **Namen** („Seitenansicht"), die App verglich gegen den **Dateinamen**. Der +Vergleich konnte nie zutreffen — die App zeigte immer den ersten Platz. Kanonisch ist der Name +(die ältere, bereits gespeicherte Form; dieselbe Entscheidung wie beim Wartungsplan, Abschnitt AE). +Korrigiert in `Einstellungen.tsx`, `Uebersicht.tsx` und `profilAdapter.ts`. + +### Popups nach Apple HIG + +Neu im Design-System: `Sheet` (Formularblatt) und `ActionSheet` (Auswahlblatt, „Abbrechen" +abgesetzt in eigener Karte). Beide blickdicht, mit abgedunkeltem Schleier, sichere Zone unten frei, +Escape schließt. Umgestellt: SmartDeal, Tankbeleg, Bildmenü, Datensatz, Historien-Import — und im +Panel `.bildmenu`, `.sdpopup`, `.beleg-popup` samt Schleier. Das Setup-Fenster bleibt: es füllt +ohnehin die volle Höhe und ist damit bereits die HIG-Form „Vollbild". + +`menueLage` („ansicht"/„rad") ist entfallen — ein Aktionsblatt kommt immer von unten. + +### `Popup` portalierte nach `document.body` — außerhalb des Themes + +Die Farbwerte hängen an `[data-theme]` auf `.ads-root`. Alles, was nach `document.body` portaliert +wird, erbt deshalb **immer** den Nachtmodus: im Tagmodus war jedes Fenster eine zu 5 % deckende +weiße Fläche auf weißem Grund. Betraf alle vier bestehenden Dialoge. `Popup`/`Sheet`/`ActionSheet` +zielen jetzt auf `.ads-root`. + +**Regel:** kein Portal nach `document.body`. `position: fixed` bleibt davon unberührt — `.ads-root` +setzt kein `transform`. + +### `ImagePlaceholder` merkte sich „fehlgeschlagen" ohne die Adresse + +In der Galerie unter „Mein Audi" bleibt dieselbe Komponente stehen und bekommt nur eine neue +`src`. Ein einmal gesetztes `true` galt damit für alle folgenden Bilder — nach einem leeren Platz +zeigten auch die mit Foto nur noch den Platzhalter. Jetzt wird die Adresse gemerkt. Das Panel hatte +die Falle nie: `bildWeiter()` nimmt `bild-fehlt` ausdrücklich wieder weg. Vier Regressionstests, +gegen den alten Stand als fehlschlagend nachgewiesen. + +### Bildadressen ohne Cache-Brecher + +HA liefert `/local/` mit `Cache-Control: public, max-age=2678400` — **31 Tage** (nachgemessen). +Das Panel hängt seit jeher `?v=` an, die App nicht: ein im Panel eingefügtes Radfoto erschien in +der App nicht, ein ersetztes blieb das alte, ein 404 blieb ein 404. `bildUrl()` trägt jetzt einen +Bildstand, erneuert bei Start und nach jedem Hochladen/Löschen. + +### Datumsfelder zeigten ihren Wert erst nach dem ersten Antippen + +Alle sieben hängen an Werten, die asynchron eintreffen; WKWebView zieht den inneren Aufbau eines +`` bei einer späteren Wertänderung nicht zuverlässig nach. Neue gemeinsame +Komponente `Datumsfeld`, deren Schlüssel genau einmal wechselt (leer → gefüllt). Bewusst nicht der +Wert selbst als Schlüssel: dann entstünde das Feld bei jeder Auswahl neu und die Datumsauswahl +schlösse mitten in der Bedienung. **Auf dem Gerät zu bestätigen** — WebKit-spezifisch, im Chromium +der Vorschau nicht nachstellbar. + +### Setup: „(z. B. …)" bleibt stehen + +Der Hinweis kam aus der gerade zugeordneten Entität und änderte sich mit jeder Auswahl mit. +Vorgeschichte: bis 2026-08-28 stand dort ein ausgedachtes Beispiel, das für zwei Felder falsch war. +Beide Beanstandungen zusammen: **fest, aber nicht ausgedacht** — die 22 Beispiele stehen jetzt als +`beispiel` im `FELDER`-Katalog und sind die abgelesenen Namen der laufenden Integration. +`entitaetIdKurz()` und zwei Helfer (rund 60 Zeilen) haben keinen Aufrufer mehr und sind entfallen. + +### Weiteres aus demselben Stapel + +Fahrtrichtung als Dreiecke statt Punkte auf der Streckenlinie (Abstand nach Strecke, nicht nach +Stützpunkten — die Punktdichte hängt an der Geschwindigkeit); Art-Pille auf der Einzelfahrt ist +wieder ein Knopf (im Panel seit jeher, in der App ein totes ``); Kopf-Gegengewicht, damit der +Titel auf Unterseiten wirklich mittig steht (gemessen: 17 px zu weit rechts, beide Codebasen); +Standort-Blatt ohne `min-height`, 34 px Fußabstand (18 war zu wenig, 76–89 zu viel); Nebel über dem +Fahrzeugfoto von 42 %/78 % auf 26 %/96 %; FIN statt „Fahrgestellnummer"; Solldruckfelder auf 58 px +(die Klasse stand im Markup, hatte aber keine Regel); Markenlogos einheitlich auf Zeilenhöhe 16 px; +`watchPosition` statt `getCurrentPosition` für die Live-Ortung, mit Abmeldung beim Verlassen der +Seite; `NSLocationWhenInUseUsageDescription` in `ios-signieren.sh` (in der ausgelieferten `.ipa` +fehlte jeder Location-Schlüssel — deshalb fragte iOS nie). diff --git a/companion-app/docs/SHARE_EXTENSION.md b/companion-app/docs/SHARE_EXTENSION.md new file mode 100644 index 0000000..095fe1b --- /dev/null +++ b/companion-app/docs/SHARE_EXTENSION.md @@ -0,0 +1,120 @@ +# Tankbeleg aus dem Teilen-Blatt + +Ein PDF aus Mail (oder einer anderen App) über **Teilen → DataMetric360** direkt +als Tankbeleg übernehmen. + +## Wie es zusammenhängt + +``` +Mail ──Teilen──► DataMetric360Share (eigener Prozess) + │ + │ PDF → Base64 → UserDefaults der App-Gruppe + │ group.app.datametric360 + ▼ + datametric360://beleg (öffnet die App) + │ + ▼ + App.tsx ──holt ab──► Tanken-Seite ──► belegLesen() +``` + +Eine Erweiterung ist ein eigener Prozess mit eigenem Dateibereich; der einzige +gemeinsame Boden mit der App ist die **App-Gruppe**. Der Beleg reist deshalb +Base64-kodiert durch die geteilten `UserDefaults` — die liest +`@capacitor/preferences` ohnehin schon, sobald man ihm die Gruppe nennt. Eine +Datei im Gruppen-Container wäre der sauberere Ort, bräuchte auf der App-Seite +aber eigenen nativen Code, also ein zusätzliches Plugin für einen Weg, den es +sonst nicht gäbe. + +Der Preis ist eine Größengrenze von 4 MB (`grenzeBytes` im +`ShareViewController`). Ein Tankbeleg liegt bei einigen Dutzend Kilobyte; ein +gescanntes Mehrseiten-PDF kann darüber liegen — dann sagt die Erweiterung das, +und der Weg über **Beleg hochladen → Datei auswählen** in der App bleibt. + +## Wo was liegt + +| Datei | Rolle | +|---|---| +| `native/teilen/ShareViewController.swift` | nimmt das PDF entgegen, legt es ab, öffnet die App | +| `native/teilen/Info.plist` | wann DataMetric360 im Teilen-Blatt erscheint (genau ein PDF) | +| `native/teilen/DataMetric360Share.entitlements` | App-Gruppe für die Erweiterung | +| `native/App.entitlements` | dieselbe App-Gruppe für die App | +| `scripts/ios-teilen-einrichten.mjs` | hängt das alles ins erzeugte Xcode-Projekt | +| `src/daten/geteilterBeleg.ts` | holt den Beleg ab, räumt ihn weg | +| `src/App.tsx` | prüft beim Start und bei jeder Rückkehr, springt auf Tanken | +| `src/screens/Tanken.tsx` | nimmt ihn auf und lädt ihn hoch | + +**`companion-app/ios/` ist gitignored** und wird von `npx cap add ios` neu +gebaut. Alles Native muss deshalb unter `native/` liegen und bei jedem Bau +eingespielt werden — dieselbe Regel, die schon die Team-Kennung und den +Standort-Schlüssel in `ios-signieren.sh` getrieben hat. + +## Einmalig im Apple-Entwicklerportal + +Ohne diese drei Schritte schlägt das Signieren fehl (die App-Gruppe muss +existieren, bevor ein Profil sie enthalten kann): + +1. **Identifiers → App Groups**: `group.app.datametric360` anlegen. +2. **Identifiers → App IDs**: `app.datametric360.teilen` anlegen, Capability + *App Groups* aktivieren, die Gruppe zuordnen. +3. Bei der bestehenden App-ID `app.datametric360` ebenfalls *App Groups* + aktivieren und dieselbe Gruppe zuordnen. + +Danach in Xcode einmal die Profile neu ziehen lassen — oder schlicht +`ios-signieren.sh` laufen lassen, das macht `-allowProvisioningUpdates` +selbst. **Merkposten aus Abschnitt AI:** ein zwischengespeichertes altes +Profil wird stillschweigend weiterverwendet. Ändert sich etwas an den +Berechtigungen, das passende `.mobileprovision` unter +`~/Library/Developer/Xcode/UserData/Provisioning Profiles` löschen und neu +exportieren. + +## Bauen + +```bash +bash scripts/ios-signieren.sh +``` + +Der Schritt „Share-Erweiterung einrichten" läuft dort automatisch, vor dem +Archivieren. + +## Wenn das Skript abbricht + +`ios-teilen-einrichten.mjs` bearbeitet die `project.pbxproj` über das +npm-Paket `xcode`. **Das ist auf keinem Mac erprobt** — geschrieben ohne +Zugriff auf macOS. Bricht es ab, ist nichts halb eingerichtet (es bricht vor +dem Schreiben ab), und dasselbe lässt sich in Xcode von Hand erledigen: + +1. **File → New → Target… → Share Extension**, Name `DataMetric360Share`, + Sprache Swift, „Activate scheme" verneinen. +2. Die von Xcode erzeugten `ShareViewController.swift`, `Info.plist` und das + `MainInterface.storyboard` **löschen** und stattdessen die Dateien aus + `native/teilen/` in das Ziel legen (Storyboard wird nicht gebraucht, die + Erweiterung hat keine eigene Oberfläche). +3. Bundle-ID des Ziels auf `app.datametric360.teilen` setzen. +4. Beide Ziele → **Signing & Capabilities → + Capability → App Groups**, + `group.app.datametric360` anhaken. +5. Ziel `DataMetric360Share` → Build Settings → *Code Signing Entitlements* auf + `DataMetric360Share/DataMetric360Share.entitlements`; Ziel `App` auf + `App/App.entitlements`. +6. Ziel `App` → Build Phases → **Embed App Extensions** muss + `DataMetric360Share.appex` enthalten. +7. `ios/App/App/Info.plist`: URL-Schema `datametric360` unter + `CFBundleURLTypes` eintragen. + +Schritt 7 ist der leiseste: fehlt er, wird der Beleg abgelegt, die App aber +nicht geöffnet — er taucht dann erst auf, wenn man die App das nächste Mal von +Hand startet. + +## Prüfen, ob es wirkt + +1. In Mail ein PDF antippen → **Teilen** → DataMetric360 muss in der Liste + stehen (nur bei genau einem PDF, sonst absichtlich nicht). +2. Antippen → die App kommt nach vorn, springt auf **Tanken**, das Formular ist + offen und liest den Beleg („Beleg wird gelesen …"). +3. Danach ist der Eintrag weg: dieselbe Datei ein zweites Mal zu teilen muss + wieder funktionieren, ein bloßes Wechseln in die App darf den Beleg **nicht** + erneut verarbeiten. + +## Was hier nicht steht + +Android. Der Ablauf ist dort ein anderer (`intent-filter` statt App-Gruppe), +und die Android-Hülle dieses Projekts ist ohnehin nicht in Gebrauch. diff --git a/companion-app/native/App.entitlements b/companion-app/native/App.entitlements new file mode 100644 index 0000000..d5e5b5a --- /dev/null +++ b/companion-app/native/App.entitlements @@ -0,0 +1,15 @@ + + + + + + com.apple.security.application-groups + + group.app.datametric360 + + + diff --git a/companion-app/native/teilen/DataMetric360Share.entitlements b/companion-app/native/teilen/DataMetric360Share.entitlements new file mode 100644 index 0000000..0ae9324 --- /dev/null +++ b/companion-app/native/teilen/DataMetric360Share.entitlements @@ -0,0 +1,16 @@ + + + + + + com.apple.security.application-groups + + group.app.datametric360 + + + diff --git a/companion-app/native/teilen/Info.plist b/companion-app/native/teilen/Info.plist new file mode 100644 index 0000000..8ea1174 --- /dev/null +++ b/companion-app/native/teilen/Info.plist @@ -0,0 +1,53 @@ + + + + + + CFBundleDevelopmentRegion + de + CFBundleDisplayName + DataMetric360 + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSExtension + + NSExtensionAttributes + + NSExtensionActivationRule + + NSExtensionActivationSupportsFileWithMaxCount + 1 + NSExtensionActivationSupportsAttachmentsWithMaxCount + 1 + + + NSExtensionPointIdentifier + com.apple.share-services + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).ShareViewController + + + diff --git a/companion-app/native/teilen/ShareViewController.swift b/companion-app/native/teilen/ShareViewController.swift new file mode 100644 index 0000000..5e94a51 --- /dev/null +++ b/companion-app/native/teilen/ShareViewController.swift @@ -0,0 +1,157 @@ +// +// ShareViewController.swift +// DataMetric360Share +// +// Nimmt ein PDF aus dem iOS-Teilen-Blatt entgegen (typischerweise ein +// Tankbeleg aus Mail) und reicht es an die App weiter. +// +// WIE DIE ÜBERGABE FUNKTIONIERT — UND WARUM SO +// -------------------------------------------- +// Eine Share-Erweiterung ist ein eigener Prozess mit eigenem Dateibereich. +// Sie kann der App nichts direkt geben; der einzige gemeinsame Boden ist +// eine App-Gruppe. Der Weg hier: +// +// 1. Das PDF wird gelesen und Base64-kodiert. +// 2. Es landet zusammen mit seinem Namen in den geteilten +// UserDefaults der Gruppe `group.app.datametric360`. +// 3. Die Erweiterung öffnet die App über ihr eigenes URL-Schema. +// 4. Die App liest den Eintrag beim Start bzw. beim Zurückkehren aus, +// löscht ihn und lädt den Beleg hoch (daten/geteilterBeleg.ts). +// +// Base64 in UserDefaults statt einer Datei im Gruppen-Container: die App +// liest UserDefaults ohnehin schon über @capacitor/preferences, das genau +// diese Gruppe kennt. Eine Datei im Container bräuchte dagegen eigenen +// nativen Code auf der App-Seite — ein zusätzliches Plugin für einen Weg, +// den es sonst nicht gäbe. +// +// Der Preis ist eine Größengrenze: UserDefaults ist für Einstellungen +// gedacht, nicht für Anhänge. GRENZE_BYTES hält das bei 4 MB. Ein +// Tankbeleg liegt bei einigen Dutzend Kilobyte, ein gescanntes Mehrseiten- +// PDF kann darüber liegen — dann sagt die Erweiterung das und der Weg über +// „Datei auswählen" in der App bleibt. +// +// DIESE DATEI IST VERSIONIERT, ios/ NICHT. +// `npx cap add ios` erzeugt den nativen Ordner neu und würde alles darin +// verlieren. scripts/ios-teilen-einrichten.mjs kopiert diese Datei bei +// jedem Bau wieder hinein und hängt das Ziel ins Xcode-Projekt. +// + +import UIKit +import Social +import UniformTypeIdentifiers + +class ShareViewController: UIViewController { + + /// Muss zur App-Gruppe in beiden Entitlements-Dateien passen. + private let gruppe = "group.app.datametric360" + + /// Schlüssel, unter dem die App den Beleg abholt (geteilterBeleg.ts). + private let schluessel = "dm360_geteilter_beleg" + + /// 4 MB. UserDefaults ist kein Dateispeicher — darüber wird abgelehnt, + /// statt das System mit einem Anhang zu belasten, für den es nicht + /// gedacht ist. + private let grenzeBytes = 4 * 1024 * 1024 + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .clear + pdfUebernehmen() + } + + private func pdfUebernehmen() { + guard + let eintrag = (extensionContext?.inputItems as? [NSExtensionItem])?.first, + let anhaenge = eintrag.attachments + else { + return abschliessen() + } + + let pdfTyp = UTType.pdf.identifier + guard let anhang = anhaenge.first(where: { $0.hasItemConformingToTypeIdentifier(pdfTyp) }) + else { + return melden("Kein PDF dabei.") + } + + anhang.loadItem(forTypeIdentifier: pdfTyp, options: nil) { [weak self] wert, _ in + guard let self else { return } + + // Je nach Quelle kommt eine URL, ein Data-Objekt oder nichts + // Brauchbares an — Mail liefert eine URL auf eine temporäre + // Kopie, andere Apps reichen die Bytes direkt. + var daten: Data? + var name = "beleg.pdf" + + if let url = wert as? URL { + daten = try? Data(contentsOf: url) + name = url.lastPathComponent + } else if let roh = wert as? Data { + daten = roh + } + + guard let daten else { + return self.melden("Der Beleg ließ sich nicht lesen.") + } + guard daten.count <= self.grenzeBytes else { + return self.melden( + "Der Beleg ist zu groß für diesen Weg. In der App über „Beleg hochladen" → „Datei auswählen".") + } + + self.ablegen(daten: daten, name: name) + } + } + + private func ablegen(daten: Data, name: String) { + guard let ablage = UserDefaults(suiteName: gruppe) else { + return melden("Die App-Gruppe ist nicht eingerichtet.") + } + // Form wie in geteilterBeleg.ts erwartet. @capacitor/preferences legt + // Werte als String ab, deshalb JSON und kein Dictionary. + let inhalt: [String: Any] = [ + "name": name, + "base64": daten.base64EncodedString(), + "zeit": Int(Date().timeIntervalSince1970 * 1000), + ] + guard + let json = try? JSONSerialization.data(withJSONObject: inhalt), + let text = String(data: json, encoding: .utf8) + else { + return melden("Der Beleg ließ sich nicht übergeben.") + } + ablage.set(text, forKey: schluessel) + + DispatchQueue.main.async { [weak self] in + self?.appOeffnen() + self?.abschliessen() + } + } + + /// Öffnet die Host-App. Eine Erweiterung darf `UIApplication.shared` nicht + /// benutzen, deshalb der Umweg über die Responder-Kette — der einzige von + /// Apple vorgesehene Weg aus einer Erweiterung heraus. + private func appOeffnen() { + guard let ziel = URL(string: "datametric360://beleg") else { return } + var antwort: UIResponder? = self + while let r = antwort { + if let app = r as? UIApplication { + app.open(ziel, options: [:], completionHandler: nil) + return + } + antwort = r.next + } + } + + private func melden(_ text: String) { + DispatchQueue.main.async { [weak self] in + let hinweis = UIAlertController(title: "DataMetric360", message: text, preferredStyle: .alert) + hinweis.addAction(UIAlertAction(title: "Verstanden", style: .default) { _ in + self?.abschliessen() + }) + self?.present(hinweis, animated: true) + } + } + + private func abschliessen() { + extensionContext?.completeRequest(returningItems: [], completionHandler: nil) + } +} diff --git a/companion-app/package.json b/companion-app/package.json index 524f2bf..4643734 100644 --- a/companion-app/package.json +++ b/companion-app/package.json @@ -18,8 +18,12 @@ "@aparajita/capacitor-secure-storage": "^8.0.0", "@audi-dash/ui": "*", "@capacitor/android": "^8.5.0", + "@capacitor/app": "^8.1.1", "@capacitor/core": "^8.5.0", + "@capacitor/filesystem": "^8.1.3", "@capacitor/ios": "^8.5.0", + "@capacitor/preferences": "^8.0.1", + "@capacitor/share": "^8.0.1", "@capgo/capacitor-updater": "^8.51.14", "leaflet": "^1.9.4", "react": "^18.3.1", @@ -36,6 +40,7 @@ "jsdom": "^29.1.1", "typescript": "^5.7.2", "vite": "^6.0.7", - "vitest": "^2.1.8" + "vitest": "^2.1.8", + "xcode": "^3.0.1" } } diff --git a/companion-app/scripts/ios-signieren.sh b/companion-app/scripts/ios-signieren.sh index 8ba751a..9f7a076 100755 --- a/companion-app/scripts/ios-signieren.sh +++ b/companion-app/scripts/ios-signieren.sh @@ -75,6 +75,49 @@ if [ ! -d ios ]; then fi npx cap sync ios +# Standort-Berechtigung ins Info.plist eintragen. +# +# Ohne diesen Schluessel zeigt iOS beim Aufruf von navigator.geolocation in +# der WebView (src/screens/Standort.tsx) ueberhaupt keine Rueckfrage: der +# Aufruf scheitert sofort, die App meldet "GPS-Freigabe fehlt", und unter +# Einstellungen > DataMetric360 > Ort fehlt die Auswahl "Beim Verwenden der +# App" - es bleiben nur "Nie" und "Beim Teilen". Nachgewiesen am 2026-08-31 +# an der ausgelieferten App.ipa: kein einziger Location-Schluessel darin. +# +# Warum hier und nicht in Xcode: ios/ ist gitignored und wird von +# `npx cap add ios` aus Capacitors Vorlage neu erzeugt - die kennt keine +# Standort-Schluessel. Ein Eintrag von Hand in Xcode waere beim naechsten +# Erzeugen wieder verschwunden, genau wie es der Team-Kennung oben ergangen +# waere. Deshalb steht er versioniert hier und wird nach jedem `cap sync` +# neu gesetzt. +# +# Nur "WhenInUse": berechnet wird der Abstand zum geparkten Fahrzeug, waehrend +# jemand die Standort-Seite ansieht. Hintergrundortung braucht die App nicht, +# und was sie nicht braucht, soll sie auch nicht erfragen. +# Share-Erweiterung ins Xcode-Projekt haengen. +# +# Aus demselben Grund wie die Team-Kennung und der Standort-Schluessel oben: +# ios/ ist gitignored, also verschwindet jedes von Hand angelegte Ziel beim +# naechsten `npx cap add ios`. Die Quellen liegen versioniert unter native/, +# das Skript spielt sie bei jedem Bau wieder ein. Es ist idempotent - ein +# zweiter Lauf ueber ein fertiges Projekt aendert nichts. +# +# Schlaegt es fehl, bricht der ganze Bau ab: eine App ohne den Eintrag im +# Teilen-Blatt sieht fertig aus und ist es nicht, und der Unterschied faellt +# erst auf dem Geraet auf. +echo "==> Share-Erweiterung einrichten" +node scripts/ios-teilen-einrichten.mjs + +echo "==> Standort-Berechtigung eintragen" +PLIST="ios/App/App/Info.plist" +GRUND="Zeigt auf der Standort-Karte, wie weit du vom geparkten Fahrzeug entfernt bist." +/usr/libexec/PlistBuddy -c "Set :NSLocationWhenInUseUsageDescription $GRUND" "$PLIST" 2>/dev/null \ + || /usr/libexec/PlistBuddy -c "Add :NSLocationWhenInUseUsageDescription string $GRUND" "$PLIST" +/usr/libexec/PlistBuddy -c "Print :NSLocationWhenInUseUsageDescription" "$PLIST" >/dev/null || { + echo "FEHLER: NSLocationWhenInUseUsageDescription liess sich nicht setzen." >&2 + exit 1 +} + echo "==> Archiv bauen und signieren (Team $TEAM)" rm -rf "$AUSGABE" mkdir -p "$AUSGABE" diff --git a/companion-app/scripts/ios-teilen-einrichten.mjs b/companion-app/scripts/ios-teilen-einrichten.mjs new file mode 100644 index 0000000..04d6311 --- /dev/null +++ b/companion-app/scripts/ios-teilen-einrichten.mjs @@ -0,0 +1,198 @@ +#!/usr/bin/env node +/** + * Hängt die Share-Erweiterung ins erzeugte Xcode-Projekt. + * + * WARUM ES DIESES SKRIPT GIBT + * --------------------------- + * `companion-app/ios/` ist absichtlich gitignored — `npx cap add ios` baut den + * Ordner aus dem Webbündel jederzeit neu. Damit verschwindet aber auch jedes + * Ziel, das man in Xcode von Hand anlegt. Dieselbe Falle, die schon die + * Team-Kennung und den Standort-Schlüssel in `ios-signieren.sh` getrieben hat: + * was den nächsten `cap add` überleben soll, muss versioniert sein und bei + * jedem Bau neu eingespielt werden. + * + * Die Quellen liegen deshalb unter `companion-app/native/`; dieses Skript + * kopiert sie nach `ios/App/` und trägt das Erweiterungsziel in die + * `project.pbxproj` ein. + * + * WAS ES ANLEGT + * ------------- + * - Ziel `DataMetric360Share` (App-Erweiterung, Bundle-ID + * `app.datametric360.teilen`) + * - dessen Quelldateien, Info.plist und Entitlements + * - die App-Gruppe `group.app.datametric360` auf BEIDEN Zielen + * - die Einbettung der Erweiterung in die App (Build-Phase + * „Embed App Extensions") + * - das URL-Schema `datametric360://`, über das die Erweiterung die App holt + * + * IDEMPOTENT + * ---------- + * Ein zweiter Lauf über ein bereits eingerichtetes Projekt ändert nichts und + * meldet das. Wichtig, weil `ios-signieren.sh` bei jedem Bau durchläuft und + * `ios/` nicht immer neu erzeugt wird. + * + * NICHT GETESTET AUF EINEM MAC + * ---------------------------- + * Geschrieben ohne Zugriff auf macOS/Xcode. Die pbxproj-Bearbeitung folgt der + * API des npm-Pakets `xcode`; scheitert sie, bricht das Skript mit einer + * klaren Meldung ab und `docs/SHARE_EXTENSION.md` beschreibt die Handgriffe, + * die dasselbe in Xcode erledigen. Lieber ein lauter Abbruch mit Anleitung + * als ein halb eingerichtetes Projekt. + */ + +import { existsSync, mkdirSync, copyFileSync, readFileSync, writeFileSync } from "node:fs" +import { dirname, join } from "node:path" +import { fileURLToPath } from "node:url" + +import xcode from "xcode" + +const HIER = dirname(fileURLToPath(import.meta.url)) +const APP = dirname(HIER) + +const ZIEL_NAME = "DataMetric360Share" +const BUNDLE_ID = "app.datametric360.teilen" +const GRUPPE = "group.app.datametric360" +const SCHEMA = "datametric360" + +const iosApp = join(APP, "ios", "App") +const pbxPfad = join(iosApp, "App.xcodeproj", "project.pbxproj") +const quelleErw = join(APP, "native", "teilen") +const zielErw = join(iosApp, ZIEL_NAME) + +function melden(text) { + console.log(" " + text) +} + +function abbruch(text) { + console.error("") + console.error("FEHLER: " + text) + console.error("") + console.error("Die Share-Erweiterung ist damit NICHT eingerichtet. Die App selbst") + console.error("baut und läuft weiterhin - nur der Eintrag im Teilen-Blatt fehlt.") + console.error("Von Hand nachziehen: companion-app/docs/SHARE_EXTENSION.md") + process.exit(1) +} + +if (!existsSync(pbxPfad)) { + abbruch(`${pbxPfad} nicht gefunden - erst 'npx cap sync ios' laufen lassen.`) +} + +/* ---------------------------------------------------------------- Dateien */ + +mkdirSync(zielErw, { recursive: true }) +for (const datei of ["ShareViewController.swift", "Info.plist", `${ZIEL_NAME}.entitlements`]) { + copyFileSync(join(quelleErw, datei), join(zielErw, datei)) +} +copyFileSync(join(APP, "native", "App.entitlements"), join(iosApp, "App", "App.entitlements")) +melden(`Quellen nach ios/App/${ZIEL_NAME}/ kopiert`) + +/* ------------------------------------------------------------- URL-Schema */ + +/* Ohne dieses Schema kann die Erweiterung die App nicht holen - sie legt den + Beleg zwar ab, aber niemand merkt es, bis die App das nächste Mal von Hand + geöffnet wird. */ +const appPlistPfad = join(iosApp, "App", "Info.plist") +let appPlist = readFileSync(appPlistPfad, "utf8") +if (!appPlist.includes("CFBundleURLTypes")) { + const eintrag = [ + "\tCFBundleURLTypes", + "\t", + "\t\t", + "\t\t\tCFBundleURLName", + `\t\t\tapp.datametric360`, + "\t\t\tCFBundleURLSchemes", + "\t\t\t", + `\t\t\t\t${SCHEMA}`, + "\t\t\t", + "\t\t", + "\t", + "", + ].join("\n") + const letztes = appPlist.lastIndexOf("") + if (letztes < 0) abbruch("ios/App/App/Info.plist hat keine schließende -Marke.") + appPlist = appPlist.slice(0, letztes) + eintrag + appPlist.slice(letztes + "".length) + writeFileSync(appPlistPfad, appPlist, "utf8") + melden(`URL-Schema ${SCHEMA}:// eingetragen`) +} else { + melden("URL-Schema war bereits eingetragen") +} + +/* ---------------------------------------------------------------- Projekt */ + +const projekt = xcode.project(pbxPfad) +projekt.parseSync() + +const vorhanden = Object.values(projekt.pbxNativeTargetSection()).some( + (z) => z && typeof z === "object" && z.name === ZIEL_NAME, +) +if (vorhanden) { + melden(`Ziel ${ZIEL_NAME} war bereits im Projekt - nichts geändert`) + process.exit(0) +} + +let ziel +try { + ziel = projekt.addTarget(ZIEL_NAME, "app_extension", ZIEL_NAME, BUNDLE_ID) + + // Eigene Build-Phasen: ohne sie hat das Ziel keine Quelldateien und keine + // Ressourcen, und Xcode baut ein leeres Bündel. + projekt.addBuildPhase([], "PBXSourcesBuildPhase", "Sources", ziel.uuid) + projekt.addBuildPhase([], "PBXResourcesBuildPhase", "Resources", ziel.uuid) + projekt.addBuildPhase([], "PBXFrameworksBuildPhase", "Frameworks", ziel.uuid) + + const gruppe = projekt.addPbxGroup( + ["ShareViewController.swift", "Info.plist", `${ZIEL_NAME}.entitlements`], + ZIEL_NAME, + ZIEL_NAME, + ) + // In die Projektwurzel einhängen, sonst taucht die Gruppe in Xcode nicht auf. + const wurzel = Object.keys(projekt.hash.project.objects.PBXGroup).find( + (k) => projekt.hash.project.objects.PBXGroup[k].name === "CustomTemplate", + ) + if (wurzel) projekt.addToPbxGroup(gruppe.uuid, wurzel) + + projekt.addSourceFile("ShareViewController.swift", { target: ziel.uuid }, gruppe.uuid) + + // Einstellungen, die `addTarget` nicht selbst setzt. + const konfigs = projekt.pbxXCBuildConfigurationSection() + for (const schluessel of Object.keys(konfigs)) { + const eintrag = konfigs[schluessel] + if (!eintrag || typeof eintrag !== "object" || !eintrag.buildSettings) continue + const s = eintrag.buildSettings + if (s.PRODUCT_BUNDLE_IDENTIFIER === `"${BUNDLE_ID}"` || s.PRODUCT_NAME === `"${ZIEL_NAME}"`) { + s.INFOPLIST_FILE = `"${ZIEL_NAME}/Info.plist"` + s.CODE_SIGN_ENTITLEMENTS = `"${ZIEL_NAME}/${ZIEL_NAME}.entitlements"` + s.IPHONEOS_DEPLOYMENT_TARGET = "14.0" + s.SWIFT_VERSION = "5.0" + s.TARGETED_DEVICE_FAMILY = `"1,2"` + s.SKIP_INSTALL = "YES" + } + // Die App selbst braucht ihre neue Entitlements-Datei. + if (s.PRODUCT_BUNDLE_IDENTIFIER === `"app.datametric360"`) { + s.CODE_SIGN_ENTITLEMENTS = `"App/App.entitlements"` + } + } + + // Erweiterung in die App einbetten - ohne diese Phase liegt sie zwar im + // Projekt, wandert aber nicht mit ins fertige .ipa. + projekt.addBuildPhase( + [`${ZIEL_NAME}.appex`], + "PBXCopyFilesBuildPhase", + "Embed App Extensions", + projekt.getFirstTarget().uuid, + "app_extension", + ) + + writeFileSync(pbxPfad, projekt.writeSync(), "utf8") +} catch (fehler) { + abbruch(`Das Xcode-Projekt ließ sich nicht bearbeiten: ${fehler.message}`) +} + +melden(`Ziel ${ZIEL_NAME} angelegt und eingebettet`) +melden(`App-Gruppe ${GRUPPE} auf beiden Zielen`) +console.log("") +console.log(" Einmalig im Apple-Entwicklerportal nötig, sonst schlägt das Signieren fehl:") +console.log(` - App-Gruppe ${GRUPPE} anlegen`) +console.log(` - App-ID ${BUNDLE_ID} anlegen und der Gruppe zuordnen`) +console.log(` - App-ID app.datametric360 ebenfalls der Gruppe zuordnen`) +console.log("") diff --git a/companion-app/src/App.tsx b/companion-app/src/App.tsx index c74648d..ed67e95 100644 --- a/companion-app/src/App.tsx +++ b/companion-app/src/App.tsx @@ -1,7 +1,10 @@ import { useCallback, useEffect, useMemo, useState } from "react" +import { App as CapacitorApp } from "@capacitor/app" + import { DataMetricApi, zugangLesen } from "./api" import { DatenAnbieter, useDaten } from "./daten/DatenKontext" +import { geteiltenBelegAbholen, geteiltenBelegSetzen } from "./daten/geteilterBeleg" import { startklarMelden } from "./daten/ota" import { Shell } from "./Shell" import type { Route, SeitenName } from "./navigation" @@ -75,6 +78,35 @@ function AngemeldeteApp({ beiAbmeldung }: { beiAbmeldung: () => void }) { void startklarMelden() }, []) + /* Belege aus dem Teilen-Blatt. + + Die Erweiterung legt das PDF ab und oeffnet die App - beim ersten Start + kommt die App dadurch frisch hoch, bei einer schon laufenden App nur + nach vorn. Deshalb beide Faelle: einmal beim Aufbau, und danach bei + jeder Rueckkehr in den Vordergrund. + + Der Beleg wandert in den geteilten Speicher und die App springt auf + Tanken - dort nimmt ihn Tanken.tsx auf und laedt ihn hoch, ueber + genau denselben Weg wie eine von Hand gewaehlte Datei. */ + useEffect(() => { + let abgemeldet = false + + const holen = async () => { + const datei = await geteiltenBelegAbholen() + if (abgemeldet || !datei) return + geteiltenBelegSetzen(datei) + geheZu("fuel") + } + + void holen() + + const horcher = CapacitorApp.addListener("resume", () => void holen()) + return () => { + abgemeldet = true + void horcher.then((h) => h.remove()) + } + }, [geheZu]) + return ( - ) : null} + ) : ( + /* Gegengewicht zum Zurueck-Pfeil. + + Der Titel ist auf Unterseiten mittig gesetzt - aber nur innerhalb + seines eigenen Kastens, und der beginnt erst hinter dem + Zurueck-Pfeil. Ohne ein gleich breites Element auf der rechten + Seite sass die Ueberschrift deshalb um dessen halbe Breite zu + weit rechts: live gemessen 17px Versatz auf "Standort" + (2026-08-31), und zwar auf jeder Unterseite, nicht nur dort. + + Ein leerer Platzhalter statt einer absoluten Positionierung: so + behaelt ein langer Titel weiterhin seinen eigenen Platz und + schiebt sich nicht unter die Knoepfe. */ + ` mit einer + * Blob-Adresse. In der nativen Hülle nicht: **WKWebView ignoriert das + * `download`-Attribut**, der Klick läuft ins Leere und es passiert sichtbar + * nichts — genau so gemeldet („Wechseltermin in Kalender übernehmen klappt + * nicht", 2026-08-31). + * + * Auf dem Gerät geht die Datei deshalb ins temporäre Verzeichnis und von + * dort ins iOS-Teilen-Blatt, aus dem „Zu Kalender hinzufügen" kommt. Das ist + * auch der ehrlichere Ablauf: man sieht, wohin der Termin geht, statt dass + * eine Datei stillschweigend irgendwo landet. */ +import { Capacitor } from "@capacitor/core" +import { Directory, Encoding, Filesystem } from "@capacitor/filesystem" +import { Share } from "@capacitor/share" + function zeilenUmbruch(text: string): string { return text.replace(/\\/g, "\\\\").replace(/;/g, "\\;").replace(/,/g, "\\,").replace(/\n/g, "\\n") } @@ -50,13 +66,37 @@ function hash(text: string): number { return wert } -export function kalenderDateiLaden(titel: string, isoTag: string, beschreibung = ""): void { +function dateiname(titel: string): string { + return `${titel.replace(/[^wäöüÄÖÜß-]+/g, "-").toLowerCase()}.ics` +} + +export async function kalenderDateiLaden( + titel: string, + isoTag: string, + beschreibung = "", +): Promise { const inhalt = kalenderDatei(titel, isoTag, beschreibung) + const name = dateiname(titel) + + if (Capacitor.isNativePlatform()) { + /* Cache statt Documents: der Termin ist im Kalender aufgehoben, sobald er + dort ist - die Zwischendatei muss nicht überleben, und iOS darf den + Cache jederzeit räumen. */ + const geschrieben = await Filesystem.writeFile({ + path: name, + data: inhalt, + directory: Directory.Cache, + encoding: Encoding.UTF8, + }) + await Share.share({ title: titel, url: geschrieben.uri }) + return + } + const blob = new Blob([inhalt], { type: "text/calendar;charset=utf-8" }) const url = URL.createObjectURL(blob) const verweis = document.createElement("a") verweis.href = url - verweis.download = `${titel.replace(/[^\wäöüÄÖÜß-]+/g, "-").toLowerCase()}.ics` + verweis.download = name document.body.appendChild(verweis) verweis.click() verweis.remove() diff --git a/companion-app/src/stile/rahmen.css b/companion-app/src/stile/rahmen.css index a35e8d4..574470b 100644 --- a/companion-app/src/stile/rahmen.css +++ b/companion-app/src/stile/rahmen.css @@ -114,6 +114,18 @@ color: var(--fg); } +/* Spiegelbild des Zurueck-Pfeils auf der rechten Seite, damit der + zentrierte Titel wirklich in der Mitte der Kopfzeile steht und nicht in + der Mitte des Rests. Gleiche Masse, gleicher negativer Aussenabstand - + die 34px, die links vom Pfeil samt Abstand belegt werden, stehen damit + auch rechts. */ +.dm-kopf__gegengewicht { + flex: none; + width: 34px; + height: 34px; + margin-right: -8px; +} + .dm-kopf__aktion { min-width: 44px; height: 44px; diff --git a/companion-app/src/stile/screens.css b/companion-app/src/stile/screens.css index 499f6fb..04f4cb9 100644 --- a/companion-app/src/stile/screens.css +++ b/companion-app/src/stile/screens.css @@ -275,8 +275,12 @@ input[type="date"].dm-eingabe { left: 0; right: 0; bottom: 0; - height: 42%; - background: linear-gradient(to bottom, transparent, var(--canvas) 78%); + /* 26/96 statt 42/78: der Verlauf soll die harte Bildkante ausblenden, + nicht das Fahrzeug. Mit 42% Hoehe und Vollton ab 78% war das untere + Drittel des Fotos praktisch einfarbig - Raeder und Schweller lagen + darunter (gemeldet vom Eigentuemer, 2026-08-31). */ + height: 26%; + background: linear-gradient(to bottom, transparent, var(--canvas) 96%); pointer-events: none; z-index: 1; } @@ -1675,21 +1679,24 @@ button.dm-listenzeile { gezaehlt, das Blatt war auf dem Geraet rund 16px hoeher als noetig und schob sich entsprechend weiter hoch. Am Rechner faellt das nicht auf, dort ist der Einzug 0. */ - padding: 0 20px 18px; + padding: 0 20px 34px; transform: translateY(calc(100% - var(--dm-standort-peek))); transition: transform 0.28s cubic-bezier(0.22, 0.61, 0.36, 1); } -/* Aufgezogen rastet das Blatt auf der mittleren Hoehe ein, nicht auf seiner - Inhaltshoehe. Apple beschreibt genau das als "detents": Hoehen, auf denen - ein Blatt natuerlich zur Ruhe kommt - large ist das voll ausgefahrene - Blatt, medium etwa die Haelfte davon. Vorher war die Rasthoehe schlicht - die Hoehe des Inhalts, dadurch schlossen die Knoepfe unten buendig mit der - Menueleiste ab. Der Ueberschuss liegt unter den Knoepfen und haelt sie von - der Leiste frei. Die eingeklappte Hoehe bleibt unberuehrt: die Verschiebung - rechnet mit 100% der jeweiligen Blatthoehe minus dem Guckwert. */ +/* Aufgezogen bleibt unter den Knoepfen ein fester Abstand stehen, statt dass + sie buendig mit der Menueleiste abschliessen. + + Vorher stand hier min-height:50% - Apples "medium detent". Gemessen ergab + das 89px (Panel) bzw. 76px (App) Luft unter dem letzten Knopf, und das war + sichtbar zu viel: das Blatt zog ueber die Haelfte des Bildschirms auf, + obwohl sein Inhalt dort laengst zu Ende war. Eine Raste ist nur dann + richtig, wenn zwischen ihr und der Inhaltshoehe kein grosses Loch klafft. + + Jetzt bestimmt der Inhalt die Hoehe, und die 34px Fussabstand halten die + Knoepfe von der Leiste frei - hergeleitet aus der Beanstandung, nicht + geraten: 18px waren zu wenig, 76-89px zu viel. */ .dm-standortmenu--offen { transform: translateY(0); - min-height: 50%; } .dm-standortmenu__griffzone { padding: 10px 0 14px; @@ -1853,7 +1860,8 @@ button.dm-listenzeile { } .dm-marke img { - height: 13px; + /* Auf Zeilenhoehe, siehe .dm-markenlogo weiter unten. */ + height: 16px; width: auto; } @@ -1874,3 +1882,58 @@ button.dm-listenzeile { .dm-sd-knoepfe > * { flex: 1; } + +/* --------------------------------------------------- Beleg-Fenster + Deckungsgleich mit .beleg-drop in audi-dashboard.css: gestrichelter Rahmen, + 14px Radius, 28px Innenabstand, mittig, 15px kraeftige Zeile ueber 12.5px + gedaempfter. `--darueber` ist die Rueckmeldung beim Ziehen (nur am Rechner + erreichbar, am Telefon gibt es keine Ziehgeste fuer Dateien). */ +.dm-beleg-drop { + margin-top: var(--sp-3); + border: 1px dashed var(--line-strong); + border-radius: 14px; + padding: 28px var(--sp-4); + text-align: center; + display: flex; + flex-direction: column; + gap: 6px; +} +.dm-beleg-drop strong { + font-size: 15px; + color: var(--fg); +} +.dm-beleg-drop span { + font-size: 12.5px; + color: var(--fg2); +} +.dm-beleg-drop--darueber { + border-color: var(--fg); + border-style: solid; + background: var(--shade); +} + +.dm-beleg-knoepfe { + display: flex; + flex-direction: column; + gap: var(--sp-2); + margin-top: var(--sp-3); +} +/* Solldruck: vier Zeichen ("2,40"), nicht die volle Feldbreite. + Deckungsgleich mit .druckfeld in audi-dashboard.css (58px). Die Klasse + stand hier schon im Markup, hatte aber keine Regel - die Felder nahmen + deshalb die ganze Zeile ein. */ +.ads-feld input.druckfeld { + width: 58px; + min-width: 0; + flex: none; + text-align: right; +} + +/* Markenlogo (Shell u. a.) auf die Hoehe der Feldbeschriftung daneben - + 16px, siehe .ads-feld label. Mit 14px wirkte es neben "SmartDeal aktiv" + zu klein (gemeldet vom Eigentuemer, 2026-08-31). */ +.dm-markenlogo { + height: 16px; + width: auto; + vertical-align: middle; +} diff --git a/companion-app/src/symbole.tsx b/companion-app/src/symbole.tsx index c9bcea1..85c1cae 100644 --- a/companion-app/src/symbole.tsx +++ b/companion-app/src/symbole.tsx @@ -70,16 +70,16 @@ export function SymbolAudi({ groesse }: SymbolProps) { ) } +/* CI-Symbol tour-s statt der frueheren handgezeichneten Route. Eine + Fuellflaeche, keine Kontur - deshalb voll, wie bei SymbolAudi und + SymbolStatistik. */ export function SymbolFahrten({ groesse }: SymbolProps) { return ( - - - - + } /> ) diff --git a/companion-app/src/theme.test.ts b/companion-app/src/theme.test.ts index 5263d9b..b17815b 100644 --- a/companion-app/src/theme.test.ts +++ b/companion-app/src/theme.test.ts @@ -1,23 +1,40 @@ -import { beforeEach, describe, expect, it } from "vitest" +/** + * Der Startwert des Themas wird beim Laden des Moduls **einmal** aus der + * Ablage gelesen und danach im Speicher gehalten — das verlangt + * `useSyncExternalStore`, dessen Momentaufnahme zwischen zwei Änderungen + * stabil sein muss (siehe theme.ts). + * + * Deshalb muss jeder Fall das Modul frisch laden, statt die Ablage zu + * beschreiben und dieselbe Instanz erneut zu fragen. Das ist keine + * Umständlichkeit des Tests, sondern genau das, was in der App passiert: die + * gespeicherte Wahl wirkt beim Start. + */ -import { themeStartwert } from "./theme" +import { beforeEach, describe, expect, it, vi } from "vitest" + +async function startwertNachLaden(): Promise { + vi.resetModules() + const { themeStartwert } = await import("./theme") + return themeStartwert() +} describe("Theme", () => { beforeEach(() => { localStorage.clear() }) - it("startet ohne gespeicherte Wahl im Nachtmodus", () => { - expect(themeStartwert()).toBe("nacht") + it("startet ohne gespeicherte Wahl im Nachtmodus", async () => { + expect(await startwertNachLaden()).toBe("nacht") }) - it("übernimmt eine gespeicherte Wahl", () => { + it("übernimmt eine gespeicherte Wahl", async () => { localStorage.setItem("dm360.theme", "tag") - expect(themeStartwert()).toBe("tag") + expect(await startwertNachLaden()).toBe("tag") }) - it("ignoriert unsinnige gespeicherte Werte", () => { + it("ignoriert unsinnige gespeicherte Werte", async () => { localStorage.setItem("dm360.theme", "irgendwas") - expect(themeStartwert()).toBe("nacht") + expect(await startwertNachLaden()).toBe("nacht") }) + }) diff --git a/companion-app/src/theme.test.tsx b/companion-app/src/theme.test.tsx new file mode 100644 index 0000000..a15aff5 --- /dev/null +++ b/companion-app/src/theme.test.tsx @@ -0,0 +1,73 @@ +/** + * Regression: die Tag/Nacht-Umschaltung blieb wirkungslos. + * + * Jeder Aufruf von `useTheme()` legte bis 2026-08-31 sein eigenes `useState` + * an. Der Schalter in den Einstellungen änderte damit nur seine eigene Kopie; + * die Kopie in `App.tsx`, die `data-theme` setzt, blieb stehen — sichtbar + * wurde die Wahl erst nach einem Neustart der App. Der Boden-Schalter hatte + * denselben Fehler. + * + * Der Test stellt genau diese Konstellation nach: zwei getrennte Komponenten, + * eine schaltet, die andere zeigt an. + */ + +import { fireEvent, render, screen } from "@testing-library/react" +import { beforeEach, describe, expect, it } from "vitest" + +import { useBoden, useTheme } from "./theme" + +function Anzeige() { + const [theme] = useTheme() + const [boden] = useBoden() + return ( +
+ {theme} + {boden ? "an" : "aus"} +
+ ) +} + +function Schalter() { + const [theme, setzeTheme] = useTheme() + const [boden, setzeBoden] = useBoden() + return ( +
+ + +
+ ) +} + +describe("Ansichtseinstellungen, geteilt zwischen Komponenten", () => { + beforeEach(() => { + localStorage.clear() + }) + + it("die Themenwahl der einen Komponente erreicht die andere", () => { + render( + <> + + + , + ) + const vorher = screen.getByTestId("theme").textContent + + fireEvent.click(screen.getByText("Thema")) + + expect(screen.getByTestId("theme").textContent).not.toBe(vorher) + }) + + it("der Boden-Schalter der einen Komponente erreicht die andere", () => { + render( + <> + + + , + ) + const vorher = screen.getByTestId("boden").textContent + + fireEvent.click(screen.getByText("Boden")) + + expect(screen.getByTestId("boden").textContent).not.toBe(vorher) + }) +}) diff --git a/companion-app/src/theme.ts b/companion-app/src/theme.ts index d4a01b8..3782f5a 100644 --- a/companion-app/src/theme.ts +++ b/companion-app/src/theme.ts @@ -1,58 +1,128 @@ /** - * Tag/Nacht-Umschaltung, übernommen aus dem alten Panel (A6 des Design-Audits): - * gespeicherte Wahl schlägt Systemeinstellung, Standard ist "nacht". - * Alle localStorage-Zugriffe sind abgesichert, weil sie im Privatmodus mancher - * Browser werfen. + * Ansichtseinstellungen: Tag/Nacht, Fahrbahn unter dem Fahrzeug, Beschriftung + * der Menüleiste. Übernommen aus dem alten Panel (A6 des Design-Audits): + * gespeicherte Wahl schlägt Systemeinstellung, Standard für das Thema ist + * „nacht". + * + * WARUM HIER EIN GETEILTER SPEICHER STEHT UND NICHT DREIMAL useState + * ------------------------------------------------------------------ + * Bis 2026-08-31 legte jeder dieser Haken sein eigenes `useState` an. Wer ihn + * zweimal aufrief, bekam zwei voneinander unabhängige Kopien desselben Werts: + * + * useTheme() → App.tsx (setzt data-theme), Einstellungen.tsx (der Schalter), + * Typenschild.tsx (zweimal, für die Farbe des Schilds) + * useBoden() → Einstellungen.tsx (der Schalter), Uebersicht.tsx (die Anzeige) + * + * Der Schalter in den Einstellungen änderte damit nur seine eigene Kopie und + * den Speicher der Ablage — die Kopie in App.tsx blieb stehen, `data-theme` + * wechselte nie, und die Umschaltung wirkte erst nach einem Neustart der App. + * Genau so gemeldet: „Tag/Nacht Umschaltung wirkungslos". Der Boden-Schalter + * hatte denselben Fehler, nur ist er weniger auffällig. + * + * `useSyncExternalStore` (in React eingebaut) löst das an der Wurzel: es gibt + * je Einstellung genau einen Wert, jeder Aufrufer sieht denselben, und ein + * Setzen benachrichtigt alle. Das ist der React-eigene Weg für einen Zustand, + * der außerhalb des Komponentenbaums lebt — kein Kontext-Anbieter nötig, und + * die Aufrufstellen bleiben unverändert. + * + * Alle Zugriffe auf die Ablage sind abgesichert: im Privatmodus mancher + * Browser wirft schon das Lesen. */ -import { useCallback, useEffect, useState } from "react" +import { useCallback, useEffect, useSyncExternalStore } from "react" export type Theme = "nacht" | "tag" -const SCHLUESSEL = "dm360.theme" - -function gespeichertLesen(): Theme | null { +function ablageLesen(schluessel: string): string | null { try { - const wert = localStorage.getItem(SCHLUESSEL) - return wert === "nacht" || wert === "tag" ? wert : null + return localStorage.getItem(schluessel) } catch { return null } } -function gespeichertSchreiben(theme: Theme): void { +function ablageSchreiben(schluessel: string, wert: string): void { try { - localStorage.setItem(SCHLUESSEL, theme) + localStorage.setItem(schluessel, wert) } catch { - // Privatmodus — die Wahl gilt dann nur für diese Sitzung + // Privatmodus — die Wahl gilt dann nur für diese Sitzung. } } +/** + * Ein Wert, den sich alle Aufrufer teilen. + * + * `wert` wird beim ersten Zugriff aus der Ablage gelesen und danach im + * Speicher gehalten — `useSyncExternalStore` verlangt, dass zwei Aufrufe von + * `stand()` ohne zwischenzeitliche Änderung dasselbe liefern. Bei jedem Mal + * neu aus der Ablage zu lesen genügt dem zwar auch, aber nur zufällig; ein + * gehaltener Wert macht die Zusage explizit. + */ +function einstellung( + schluessel: string, + ausAblage: (roh: string | null) => T, + inAblage: (wert: T) => string, +) { + let wert = ausAblage(ablageLesen(schluessel)) + const horcher = new Set<() => void>() + + return { + stand: () => wert, + horchen: (bei: () => void) => { + horcher.add(bei) + return () => horcher.delete(bei) + }, + setzen: (neu: T) => { + if (neu === wert) return + wert = neu + ablageSchreiben(schluessel, inAblage(neu)) + for (const bei of horcher) bei() + }, + } +} + +const THEMA = einstellung( + "dm360.theme", + (roh) => { + if (roh === "nacht" || roh === "tag") return roh + // Ohne gespeicherte Wahl entscheidet das System; ohne beides: nacht. + const hell = + typeof window !== "undefined" && + typeof window.matchMedia === "function" && + window.matchMedia("(prefers-color-scheme: light)").matches + return hell ? "tag" : "nacht" + }, + (wert) => wert, +) + +const BODEN = einstellung( + "dm360.boden", + (roh) => roh !== "aus", + (an) => (an ? "an" : "aus"), +) + +const TABBESCHRIFTUNG = einstellung( + "dm360.tabbeschriftung", + (roh) => roh !== "aus", + (an) => (an ? "an" : "aus"), +) + +/** Nur für Tests: setzt den gehaltenen Wert auf den Stand der Ablage zurück. */ export function themeStartwert(): Theme { - const gespeichert = gespeichertLesen() - if (gespeichert) return gespeichert - const hell = - typeof window !== "undefined" && - typeof window.matchMedia === "function" && - window.matchMedia("(prefers-color-scheme: light)").matches - return hell ? "tag" : "nacht" + return THEMA.stand() } export function useTheme(): [Theme, (theme: Theme) => void] { - const [theme, setzeTheme] = useState(themeStartwert) - - const setzen = useCallback((neu: Theme) => { - setzeTheme(neu) - gespeichertSchreiben(neu) - }, []) + const theme = useSyncExternalStore(THEMA.horchen, THEMA.stand, THEMA.stand) + const setzen = useCallback((neu: Theme) => THEMA.setzen(neu), []) // Farbe der Systemleisten mitziehen, damit auf dem Handy kein heller - // Balken über einer dunklen App steht. + // Balken über einer dunklen App steht. Werte des Panels (--canvas in + // audi-dashboard-ios.css); hier standen einmal #161b23/#ffffff aus dem + // Basis-Stylesheet, das im Panel nie greift — die Systemleiste hatte damit + // einen anderen Ton als die App darunter. useEffect(() => { const marke = document.querySelector('meta[name="theme-color"]') - // Werte des Panels (--canvas in audi-dashboard-ios.css). Hier standen noch - // #161b23/#ffffff aus dem Basis-Stylesheet, das im Panel nie greift — - // die Systemleiste hatte damit einen anderen Ton als die App darunter. if (marke) marke.setAttribute("content", theme === "nacht" ? "#0C1014" : "#F2F2F7") }, [theme]) @@ -62,52 +132,21 @@ export function useTheme(): [Theme, (theme: Theme) => void] { /** * Bodenschatten unter dem Fahrzeugbild — im Panel der Schalter „Boden" in den * Einstellungen (`bodenAn`). Dort lebt er nur im Speicher und ist nach einem - * Neuladen wieder an; hier folgt er dem Muster der übrigen Ansichtsschalter - * und bleibt erhalten, Standard wie im Panel: an. + * Neuladen wieder an; hier bleibt er erhalten, Standard wie im Panel: an. */ -const BODEN_SCHLUESSEL = "dm360.boden" - export function useBoden(): [boolean, (an: boolean) => void] { - const [an, setzeAn] = useState(() => { - try { - return localStorage.getItem(BODEN_SCHLUESSEL) !== "aus" - } catch { - return true - } - }) - - const setzen = useCallback((neu: boolean) => { - setzeAn(neu) - try { - localStorage.setItem(BODEN_SCHLUESSEL, neu ? "an" : "aus") - } catch { - // Privatmodus - } - }, []) - + const an = useSyncExternalStore(BODEN.horchen, BODEN.stand, BODEN.stand) + const setzen = useCallback((neu: boolean) => BODEN.setzen(neu), []) return [an, setzen] } /** Sichtbarkeit der Tab-Beschriftungen, ebenfalls dauerhaft gespeichert. */ -const BESCHRIFTUNG_SCHLUESSEL = "dm360.tabbeschriftung" - export function useTabBeschriftung(): [boolean, (an: boolean) => void] { - const [an, setzeAn] = useState(() => { - try { - return localStorage.getItem(BESCHRIFTUNG_SCHLUESSEL) !== "aus" - } catch { - return true - } - }) - - const setzen = useCallback((neu: boolean) => { - setzeAn(neu) - try { - localStorage.setItem(BESCHRIFTUNG_SCHLUESSEL, neu ? "an" : "aus") - } catch { - // Privatmodus - } - }, []) - + const an = useSyncExternalStore( + TABBESCHRIFTUNG.horchen, + TABBESCHRIFTUNG.stand, + TABBESCHRIFTUNG.stand, + ) + const setzen = useCallback((neu: boolean) => TABBESCHRIFTUNG.setzen(neu), []) return [an, setzen] } diff --git a/custom_components/audi_dashboard/einstellungen.py b/custom_components/audi_dashboard/einstellungen.py index eb75b50..7698c52 100644 --- a/custom_components/audi_dashboard/einstellungen.py +++ b/custom_components/audi_dashboard/einstellungen.py @@ -159,94 +159,116 @@ FELDER: list[dict] = [ {"key": "ZUENDUNG_SENSOR", "label": "Zündung/ACC-Status", "gruppe": "fahrterkennung", "hinweis": "on = Fahrt läuft, erkennt Fahrtbeginn/-ende.", "domains": ["binary_sensor"], "device_classes": [], "units": [], "liste": False, "pflicht": True, + "beispiel": "engine_ignition_or_acc_status", "stichworte": ["zündung", "ignition", "acc", "motor", "engine"]}, {"key": "KM_SENSOR", "label": "Kilometerstand", "gruppe": "fahrterkennung", "hinweis": "Gesamt-Kilometerstand des Fahrzeugs - für Fahrtabschluss-Screening, Reifenzähler und Ölwechsel-Prognose.", "domains": ["sensor"], "device_classes": ["distance"], "units": ["km", "mi"], "liste": False, "pflicht": False, + "beispiel": "total_vehicle_mileage_read_from_can", "stichworte": ["kilometer", "km", "mileage", "odometer", "tacho", "laufleistung"]}, {"key": "TANK_SENSOR", "label": "Tankfüllstand", "gruppe": "fahrterkennung", "hinweis": "Füllstand in Prozent - für die automatische Tankerkennung.", "domains": ["sensor"], "device_classes": [], "units": ["%"], "liste": False, "pflicht": False, + "beispiel": "fuel_level_in_tank_read_from_can", "stichworte": ["tank", "fuel", "kraftstoff", "füllstand", "level"]}, {"key": "TANK_LITER_SENSOR", "label": "Tankvolumen", "gruppe": "fahrterkennung", "hinweis": "Optional, vom CAN statt aus dem Prozentwert umgerechnet - macht die automatische " "Tankerkennung genauer und liefert eine Vorbelegung für die getankte Menge.", "domains": ["sensor"], "device_classes": ["volume"], "units": ["L", "l"], "liste": False, "pflicht": False, + "beispiel": "can_fuel_volume", "stichworte": ["tankvolumen", "liter", "litres", "fuel volume", "kraftstoffvolumen"]}, {"key": "TANK_DISTANZ_SENSOR", "label": "Strecke seit letzter Tankung", "gruppe": "fahrterkennung", "hinweis": "Optional, vom Fahrzeug selbst berechnet - ersetzt die eigene Kilometerstand-Rechnung " "für die Strecke eines Tankvorgangs.", "domains": ["sensor"], "device_classes": ["distance"], "units": ["km", "mi"], "liste": False, "pflicht": False, + "beispiel": "calculated_distance_covered_after_the_latest_refueling", "stichworte": ["strecke tankung", "distance refuel", "distance since refueling", "refuelling"]}, {"key": "RANGE_SENSOR", "label": "Reichweite", "gruppe": "uebersicht", "hinweis": "Für die Übersicht - bleibt sie leer, zeigt die Oberfläche \"unbekannt\".", "domains": ["sensor"], "device_classes": ["distance"], "units": ["km", "mi"], "liste": False, "pflicht": False, + "beispiel": "vehicle_range_read_from_can", "stichworte": ["reichweite", "range"]}, {"key": "BATTERIE_SENSOR", "label": "12V-Batteriespannung", "gruppe": "uebersicht", "hinweis": "Nicht jede Integration liefert diesen Wert - bleibt er leer, zeigt \"Mein Audi\" \"unbekannt\".", "domains": ["sensor"], "device_classes": ["voltage"], "units": ["V"], "liste": False, "pflicht": False, + "beispiel": "external_power_voltage", "stichworte": ["batterie", "battery", "spannung", "volt", "12v"]}, {"key": "AUSSENTEMP_SENSOR", "label": "Außentemperatur", "gruppe": "uebersicht", "hinweis": "CAN-Außentemperatur - optional, ergänzt die Batteriespannungs-Messwertliste um den " "Temperaturwert je Tag.", "domains": ["sensor"], "device_classes": ["temperature"], "units": ["°C", "°F"], "liste": False, - "pflicht": False, "stichworte": ["außentemperatur", "aussentemperatur", "ambient", "temperatur", "temperature"]}, + "pflicht": False, "beispiel": "can_ambient_air_temperature", + "stichworte": ["außentemperatur", "aussentemperatur", "ambient", "temperatur", "temperature"]}, {"key": "REFRESH_BUTTON", "label": "Sofort-Aktualisierung", "gruppe": "uebersicht", "hinweis": "Der von der Integration bereitgestellte Knopf für \"Ziehen zum Aktualisieren\".", "domains": ["button"], "device_classes": [], "units": [], "liste": False, "pflicht": False, + "beispiel": "refresh_now", "stichworte": ["refresh", "aktualisieren", "update", "abrufen", "poll"]}, {"key": "TUER_SENSOREN", "label": "Türen", "gruppe": "sicherheit", "hinweis": "\"aus\"/off = zu. Für \"Sicher abgestellt\" wichtig.", "domains": ["binary_sensor"], "device_classes": ["door"], "units": [], "liste": True, "positionen": POSITIONEN, - "pflicht": False, "stichworte": ["tür", "door"]}, + "pflicht": False, "beispiel": "front_left_door", + "stichworte": ["tür", "door"]}, {"key": "FENSTER_SENSOREN", "label": "Fenster", "gruppe": "sicherheit", "hinweis": "\"aus\"/off = zu.", "domains": ["binary_sensor"], "device_classes": ["window"], "units": [], "liste": True, "positionen": POSITIONEN, - "pflicht": False, "stichworte": ["fenster", "window"]}, + "pflicht": False, "beispiel": "front_left_window", + "stichworte": ["fenster", "window"]}, {"key": "HECKKLAPPE_SENSOR", "label": "Heckklappe", "gruppe": "sicherheit", "hinweis": "\"aus\"/off = zu.", "domains": ["binary_sensor"], "device_classes": ["door", "opening"], "units": [], "liste": False, "pflicht": False, + "beispiel": "tailgate", "stichworte": ["heckklappe", "tailgate", "kofferraum", "trunk"]}, {"key": "HAUBE_SENSOR", "label": "Motorhaube", "gruppe": "sicherheit", "hinweis": "\"aus\"/off = zu.", "domains": ["binary_sensor"], "device_classes": ["door", "opening"], "units": [], "liste": False, "pflicht": False, + "beispiel": "hood", "stichworte": ["haube", "hood", "bonnet", "motorhaube"]}, {"key": "TUERSCHLOSS_SENSOR", "label": "Türschloss", "gruppe": "sicherheit", "hinweis": "\"aus\"/off = verriegelt. Die Zentralverriegelung schließt alle Türen gemeinsam - " "die Fahrertür genügt für \"Fahrzeug verriegelt\".", "domains": ["binary_sensor"], "device_classes": ["lock"], "units": [], "liste": False, - "pflicht": False, "stichworte": ["türschloss", "schloss", "lock", "verriegelt", "fahrertür"]}, + "pflicht": False, "beispiel": "front_left_door_lock", + "stichworte": ["türschloss", "schloss", "lock", "verriegelt", "fahrertür"]}, {"key": "DACH_SENSOR", "label": "Schiebedach", "gruppe": "sicherheit", "hinweis": "\"aus\"/off = zu.", "domains": ["binary_sensor"], "device_classes": ["window", "door", "opening"], "units": [], "liste": False, "pflicht": False, + "beispiel": "sunroof", "stichworte": ["dach", "schiebedach", "sunroof", "roof"]}, {"key": "LICHT_SENSOR", "label": "Standlicht", "gruppe": "sicherheit", "hinweis": "\"aus\"/off = kein Licht.", "domains": ["binary_sensor"], "device_classes": ["light"], "units": [], "liste": False, "pflicht": False, + "beispiel": "parking_lights", "stichworte": ["licht", "standlicht", "light", "parking lights"]}, {"key": "NAECHSTER_OELWECHSEL_SENSOR", "label": "Nächster Ölwechsel", "gruppe": "uebersicht", "hinweis": "Vom Fahrzeug selbst gemeldete Fälligkeit, ergänzt die App-eigene Servicebuch-Prognose.", "domains": ["sensor"], "device_classes": ["date", "timestamp"], "units": [], "liste": False, "pflicht": False, + "beispiel": "oil_change_due", "stichworte": ["ölwechsel", "oil", "service", "change"]}, {"key": "OELWECHSEL_STRECKE_SENSOR", "label": "Nächster Ölwechsel", "gruppe": "uebersicht", "hinweis": "Meldet die Integration oft als negativen Countdown - die App zeigt nur den Betrag.", "domains": ["sensor"], "device_classes": ["distance"], "units": ["km", "mi"], "liste": False, "pflicht": False, + "beispiel": "oil_change_distance", "stichworte": ["ölwechsel", "oil", "distance", "strecke"]}, {"key": "NAECHSTE_INSPEKTION_SENSOR", "label": "Nächste Inspektion", "gruppe": "uebersicht", "hinweis": "Vom Fahrzeug selbst gemeldete Fälligkeit.", "domains": ["sensor"], "device_classes": ["date", "timestamp"], "units": [], "liste": False, "pflicht": False, + "beispiel": "inspection_due", "stichworte": ["inspektion", "inspection", "service"]}, {"key": "INSPEKTION_STRECKE_SENSOR", "label": "Nächste Inspektion", "gruppe": "uebersicht", "hinweis": "Meldet die Integration oft als negativen Countdown - die App zeigt nur den Betrag.", "domains": ["sensor"], "device_classes": ["distance"], "units": ["km", "mi"], "liste": False, "pflicht": False, + "beispiel": "inspection_distance", "stichworte": ["inspektion", "inspection", "distance", "strecke"]}, {"key": "STANDORT_LAT_SENSOR", "label": "GPS-Standort: Breitengrad", "gruppe": "standort", "hinweis": "Breitengrad als eigener Sensor (z. B. flespi).", "domains": ["sensor"], "device_classes": [], "units": [], "liste": False, "pflicht": False, + "beispiel": "latitude_coordinate_value", "stichworte": ["breitengrad", "latitude", "lat", "standort", "gps", "position", "ortung"]}, {"key": "STANDORT_LON_SENSOR", "label": "GPS-Standort: Längengrad", "gruppe": "standort", "hinweis": "Längengrad als eigener Sensor (z. B. flespi).", "domains": ["sensor"], "device_classes": [], "units": [], "liste": False, "pflicht": False, + "beispiel": "longitude_coordinate_value", "stichworte": ["längengrad", "longitude", "lon", "lng", "standort", "gps", "position", "ortung"]}, ] diff --git a/custom_components/audi_dashboard/frontend/app/bundle.json b/custom_components/audi_dashboard/frontend/app/bundle.json index 0b5550c..6171525 100644 --- a/custom_components/audi_dashboard/frontend/app/bundle.json +++ b/custom_components/audi_dashboard/frontend/app/bundle.json @@ -1 +1 @@ -{"version":"2026.8.30.20","sha256":"28839ee2ba8d1d703bb688a0124a2930ffb45b0d92acfc05d9c9504b7141c144","bytes":257018,"gebaut":"2026-08-30T22:05:13Z"} \ No newline at end of file +{"version":"2026.8.31.1","sha256":"bd990f600b5bf81ce66105af8d49a77d31a2a4e3b4e5070858c38e1e8d23fcc9","bytes":266016,"gebaut":"2026-08-31T12:23:41Z"} \ No newline at end of file diff --git a/custom_components/audi_dashboard/frontend/app/bundle.zip b/custom_components/audi_dashboard/frontend/app/bundle.zip index d23102300ea3cc2080105e5d0d2df3a6776c3dfd..4f5033d864cc9e8b9437f7d0c8d6dcab50b418e8 100644 GIT binary patch delta 136604 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

tt`$58r)&?Jt&IHZY zf64D>1Hqu_gnSlpubxe#Ft2$P&#y~;J|pSEB%k6sLUNCDfXj)&W``mseBs*i+4;FA zW&*_bG~>C)WO%JFBQDsv*N=KxhM@9Lu@jNBlk4h_`D$FPsv`hF}we^mS@ zK=_2hxaBCU^nond~$+ue-EQKerM|XV$H#HOaLU|lxAj9WnKpd> z#^gY2jm7oj^%axk0iO~JyY63Cf3~@FF#>`|8Pt>}*Z7kGK_a|{?dUh^e7?L+sO$u5 zfQnG&`<Lbx}J9?&ZR_ZDT%I+dnR4sO$4|s_L2(k%{xQF(=Ul zaA-t4?b;=z6ZZ7d-euTdLnN%I$hB-74)Y2?Tovp`;dE`<%g5p?MVtf}e*(LYhUMur ziF)F0a4~KT_Q-4ivV>5 z51j^URH6LVd0?Tg4SSO?lHWMf=4-7t_>StfA_Al)*tk_-7RiiKfDwUf0gh2Ln~v9F zJSr2PAo2rL#dyaMxP{Che;O<%UZJj3AEgG&1s%9ryOH0*#2td+1f&xSG!f4MfNQw@ zQV_cUA9BQ#Uit%4A-DRRg!+>(u>#v`O7kjC0nwyF#lQ~S{}Cf?nBoBxbOJ?EK;tCi zYt70up}AZGf&!vfMfZuO7=V(EdsDlsS)NQ~zvxp<1e!Vh;HVB=e~iYa8*a4e3&bZs z_}ZWc^^>886_E^wuwAMc90cI09YjMD6`r8Ya}>glim`fx!Rv4UNR7IJYrVKXMllh; zQHT|cfC!rrlFaS`(?ppO6mf_m?Am2G2z4Mu76wCkwl+nmPAXSxJ>0Y|Iba0@#*hPB zxmpVcJQ=0E>6qdtf3Wm8{2|o2BB_6klbT!wF^ceLCO$P9*`ZnG8fI3b&~+LT2B8&w z1&dg443TSMGOkKEx$|Em0z9 zLV^owVzfXce_W}p>!TMC!E)fHQOHbC^Fn@qz|$1igYi42c=3HqCZfAF>_r0oKpO@j zD>A4!ky2;pJ9LDSWSC3IXiLdpklrF+1Xc|5yw%wETS-|U>+ti$k;VXefip6c08!@l zyjI)-;Wu%mJrRz=8}r4?8gJe=qlT;uzv~xaIBSpyX_%Yr3(8y^zM-LQBWTI}F>h%b)jqbmXImeT;e#{U3Ee zgh|b>Pbl^2KjT{EAGKay@jL!gzugUTK_c$&Jx?Cz{MUc{*J^iFXjr52gy}}i#c?ni z;qm+XFY@fk^V(mO3QHVNcK~@f8h@N%7fw@Hf3ocd;^lbgP6m&^d^!WOZf@K`G6^GL z2XCmSISxiiJeh(-bq6cB^>!PR;?!IW87|v^Vvn)pRKKt#*9T#SM;5q?RI4X-=^HGod9SrIf3P>SOP&NLrb0WBIhFW6JDFdPfri%10DW<1 zJD=+-#4n^!_yG3Da?#uD1C`cVSF4(F34iW(PFz2i{M403;FGrtm@|0H};BH|w zB9J)2Z9X>%-XT#&nXq9coM@6P6JIS!6i(wcnji(cFs%R-UFxrJFBzB`P}TeM%BlQV~t> z6oF8tq%*EB$X?o)Y41ArqHTHB+Ff5)HGa?>sH}GV0Yb3e)T^3K%}ZpvOawH^c8P$j z>zN)Ni=;GPzAU=-UZ)6|yyevw zxQ_3lMXyH2bCSkL*Q=3^ePn;xUR@XY^ zDW1He;oivQ<7EYjWR=GuIw)~?{V_7dFuXA8+gDYp7RRM3#y%Ibht&8iE$ zuOgf}+UMwQTi)IMy5-l7ER=N*{+=`w;dbS>xQA(BstYlHH1ARXnfd#>2$vzDuWcI&8Aa#@gs21ZIi4 zs&k8u$1sy_e@}xux2vs)$q4D4gUM^^h?+9KtPT0ok%9(xN?mO^U9r_>BqVY(IAqs^ znh>71n#?RwsabW%gNdbgIdXoOY}i~e@`LQD*y)UZt*)Htk--V2ZH%! zF(C$le+$F#ZRIwQdz?@#)Dl~eJ=Bn`Tz^jL(w` zR57HSG31J0b6f8>2^P`m335mAh2FvNTPcvhe~1zsjvW^yK1=A(O~lKQo~UHJ5TcVj z(Fb%1%4tZ@;mY`q zf4+0=42$KZ9hAkEN3wkRXx4o)BR`H|_9$Odqg*-b24szc7!B89n&F=YGOcgu%KV}I zR65E+6tU)j=k^HQ9cz(Fw_{C&3E^U*50V^NI}l>w5=H`dx6(RZvWNi)ELtS?dWA=Jg zsTAzrJ(|C^C|_}16xKTQ&$qfI>5#dBcAD@X)6PrTam~a7k=;&1e|gtzq`L-Qnu0hDBXJZru``lLCnNV|K6n!u?kvgOmf5sCLCx}XLJ4(&YjS`A>Chkb<(wVr0x)fT>SsVuE-Wk9A z5u&pD1odo>l3V!u!MkYNzM;3{L>0uaE*#hB$t#p?`-M z6|LYeNB8p9lALhGlAFV0*Y?Bm@GegZJ(TZblVio=DCjF~98)pS{1!6PK_dJ!9OnTrkU)M5)FGz{zU#^5g*tKc zo604PKO6u^kJ9HKECG1H3GTu~GI3)Z>BLN+&EFfJI*UzHS$x!Yc;w&x95mBgKgYgEVLsB-3Y zyTluW@xvv`{eBKSKV3TtG*bMbZdk^aoWtwVz++pSQW{!2f4#vlLa;UM>RZf#Ez7UO^ij16u8G55$BL!`3 znbs`ZiZulCXQ6PLqrnn|j&2fO5vC(fXPeMRebOmxDj8k{q$w~-2|4ijoGDHQ8R_7` zR6K>S_kUQTf2hF_=jZ`Ja*Ltp8T(5p6tbUjsi#MYKGpq+2h#SVMPX>aP*g&M^_PgT zN?@QTgs|OqPBIjaV7ajnz+jS?)D_4b4BDX%{1tb8;{U>x8TVVzQCO!f=(pu0YcCPz z$$v>rDjxiWg5u8@R}Pd=qohGWJ4hjy7{x-eu!uD^e{Ur&$6vDrmyg&ifwLDnN>`r} z>qM*<`Zinaw=r|WKIz_4*|q)&)yH5w`WWD+wi5(6V#5pvZFlv^IcBy&FU09Z^$M{A zz?8&9Vxnbv;vm8cC$63lQKp)}6asViLoN#$QufFyawjP+BkpFj;>y{N5_FN9T*r$s zOS2vUf5*KTvo!1HX*s+!+b$X{cr5_MN~8~6e9~Z$ND3)6@rp~4=Lv4{+*}pPfH;j& zA!M>~$Mbx=R9T7I(%qY;8TjlA5?)@`eTmII-D3-GqY22PGMaOnm@qR5<)bnqQa>bD zMk$`aEx%OTNtuU^;(;^v=nBog{=&K%cp)ckf4+Nz!7kc&;AJ(3U8Uxsp|HoGlAToN zl4hC@XOuTO)Ki1b2Se8^mCe|RK<*=X?r1%;hH{3uHq_?+Y{PF0r9I&-B4$TQ0q?Ce zaZO?Y!?(U5*Lx|hx}!`Gi=7NZg(Q^UhQXc8-?EuaEYrX;d~O+6pDpdYTmQjO_Uzlx zfAM0WZ?cxw0W*0vTdA5!?ODHi!|7vP;rKx zQi%is-7L1-=AK`I8+AKXt-^y1W++gV-|k2eSm&~+=r4-naiWZe4Wq4`SIvc9eK^94<>>zY6QdkxT z2>_umr$*#~4VTGGcV{NLGZRPnV_X-im>$!N`Xmwo6p%qB&Vrfl7|z~UjCQ65zr6Ya zYk8>p0^5JE`ts;sA!k6t*RzKZe<; za0#XL%IZA9)Y9sGQeM5!kQ)}C&yB*SVA4?5mSv`{`nDxt$aPlmC~K`2lBVtRLFBe-?b)vG-0- zmwBaQdzqcZb$7>pI=!%*ZR51Pw+GOgd1(Msp2zUdZq?9^W_o`v$f5F$)s5WAnMxhSXJT$U2@Y1;F)} zQZew^bLq~lsdNMz>oU`NV^ijW?OA4f*?gt)J>PgKGj6QEcrJ53e}DFDLuPGmG#f8u z=Jn_6%}wPvZhdq8sQV7mZh1fAiBsDE(aN8%}q@#FS1697o#wnJc|bh11@{Ud%Hkz-e#U4Jo?e zQ5}~yR|7tv%&frDP*jD-L0naXc-EFS8x8qhWiYP(cha7b+vo`R>e|e2)rx8`W`$(W zD7HXDI^p#bYWwemjZKNM-zw)-(xla4NtzqtHjtRCYT^rxe;nXEqUu@%JK8M6Y;RP{_z9H;TWi6_1Dn2s0hpsiBBX`8>Xg80KhDjJu)4tk6RHBd*@+xpF zjn{b_7z0?_yE&dvBti4_YhY{c13b*cJOC!GJ*a05&m?fxO6CNvA4TJ|XBC|Z%EheK zuv)qQzgw^Qf9f;7@o!wKYt8ZsEiK5>`dhx-*2-sbYqsB}Xl$IL>2nfy`9!7VgDcGS zzbKcOy+9kU3(1O%B@PunaFc*TV|EgtwNv|qPCh%e+N>J;;?N&HBZ1Vo1|U-a_%y?F zu-3`zfKK^D)3Pu3!OUl{IRD#LcpQ|E6zz^x*EE2he-Rtj0Co*%qJ~<>0${^b`Yoxc zleCYSek(A0{TkmO_?YPxDc3J;e!%BhZtFwW`QP~kLnWS#=9^f!?NbMOT3oS?)wI@= zJD7X)1qEZ!C_n&mrw=!3d-?*jKf)Qr;|DQ$xmo3$tm#e5;rL-9T>WogC7l@btoO_2 znLCA5e=0O7a^cUXXUDoU3*+)Ku~J8N)_62$TtZU7$ykedV#G0;2?9h&;UBP4dRL=G)B!4Ef2hM|OL*3Pm#|65{!G{(3HzF`DIKhS z$Pgh@c`BUA-$?#`N`>3(-jwZ|&t8mWdgH)DyF!k>gevq^Oe=X(^v6Ox5Z~xjg+7EI zm0oev#{2ukIB=Bv@60}y9%jWR-_81Zps||V8U_DbUMw)9g5DZ7Who`&QVs3&uI-*f`G8D$Dqs7b;oK|)f zg9SdNb)mkG=DQ+(f8g8YM@g>d%04iTf0Aq=VSj0D)_VGo+DCdzjMPyphIHO>d86Gd zpm}h2iJ}}Ie27~)8zd7-6z?W7q5~&0n8C>&%0sP)Sv9l@CN7vz$phq1o@Omr>T_l* z590k!?psll5Y65gzHlN5jn%+Cdic{9SEgQ;=<>O~@JoF83a}*ic$#A!cqL;4e-2|T zR7M{OBtRPgUkXFkMVN94Y2lB|ol)*=X>JRD6h}w7qouhW1X5>WdUnm$S30ldToa%u9nR@pht#^rI$DfHgP&|rjYSP?u5=q=oQAfh@M=1^* z>1c=!9Pw0@qV^L~g4OwWT_Y&$e_3ClQT-l;{kHI*SZwYa^&|C&0Uqk2&eFp1l6wYQ z4>M!5=(ZZ0vthdyg`E5GFcD5#RNHf>v~wQyHq+-(I*WUzgg1Sfu~}RRC`+hYMFrg} zyzsP_E?Zn#4Bf#nhXVM{)!m)YJlCm`8NdxHwvEQ53sJmk%tBbMvFsw5fB4}M36-uz zK9l#;Vk)#g3($jjfgUgiVhmuA*U8&kO`XuMSo|X|6bnb-#MxDp(OUn-7|=rO$fX3o6JefC^6HXaGb=55+jueOHru;ap1`JouD=6^6JzcV;~uD7f*nJ0KOgj z++dHK9M&E_X)DIQedzy$e@=&VFb5i`wgu=_g7lJ}=K7$#UIR$e+J}sA#k?vkJY;`x zTw_ZX>;rnfZb#10$P}zJG~B2Xq_75_g5J6lAgHPfcR@QHaOV!Rk;fw){$6bNFbaAx zDH;8`b8Y#6nXZ6tj(Vu54G3-*7uo%vM5Pv!s#T~$VJ?X{Y4FK;f0fXB3Z6a5$Ob`8 zPk(GI8w6*4$Wam;Hz68`mvlGvR~(S(}^xN}E;@B!y2h z)%2A~aITE@M0~`)WU%TPv4oK^k%FB*QTvteqoxJBUQ zULv>gzqj2kT*Bs$Z?ty1bQ4L}tzv1)x&Ri!%b!8JyjWrhe;{NerT1m&lJtQG=UN|3 zODsBOI#Zv8(&!eC{#hz_Z7O|l_4panGnfm zCRj{uiN?w*Bi`aajJy`s3OSJPJg4fTWP1yIhnPK zfRGJEz!HV+e;5N+BNoeuE7W^-+jRm$n+DLsiPeIvo^DqRUW_(fup)~o`bL)VmmCc* zE~7$;ioGF##|n!K_5@pr_|k*$4&ii^utR>2d)e4YoF-FRM$S;3fEM&!;j-vFF=|vslwK-nON6ls*uwM!@^*$!e>x2^j7C~vlTg8`?0U>K)=<;- zz$n5VifqZwBco(4=laZ(k9T-Vk?pTx&6mgZ{jhWu_dY4zz3pYeCKwMEM5ea zu6dfz=Zi5yIZHB?H&V&yb9wuS3!&KfIa3t)vp55UO(nPq(Hu>^eTw#o($+Qv(K_xV zu`~gPe-F#hgB98-Slj49qN*7>%7lFoen=a#EsnF}HF5bK0f!lp%dGr7UW-K50zTRi zX4c(<+QsV%cvKg4nro4=`nT+;9HTOzeA}p|D2=gDLm$Ir=+lvx{vt|T!U`j)<_2vk zumhr5RZdCGhKgew>#xxr0mW`~xP7>NkeSy2f34`WFwvF}J<3ZAdikM*E_o-UcMIfO z23;X?L?1Jim z-yrV9zyr0&_nJOt$NF(+m+wxK5XuKZtuSv<%Q)#sU@@UpNKG1PcnI>F-#N%ysT@q0 ze_8y}39wI7Xh0?^4U7ZF{ombG)GfQ^dH{qP%RMlj3(Ej)qq$>TckAnvBhZXOIY6<7 zvJ!Yj{3FHiH^=50^R|6GjaJudkl|uwN$RN5My^%Y^-mK%gbn?w{{xZ0Y5Ss z)L}rJEX*8W&lzMF(Rg}zkfFy#qEvYrf85b-Fb?D^#dwdI6J`v0oFbst2>@+Ph`ku2{7{D^jQ=ffF17VMxvb(F0U$@W{8JN!q zviWQ{#(ZB$_muqz+2@pf%S3@MP(bX?e?b}X^%Z*`p^x>y^cThfxcFc4m-6Ike{{fS zSPtbz@!5;y2il*AFIcTd$pGJi66Ub2laL8DVFDO_Aiz?977R=*@8xiEvSz+;&1en)NZu0H*IR$jXKU}*3F>FMq zb{%531fEGAK`uDZmzpqdgYA0s}V!^k} zXXCM${BIe%!zX@DQQ95yl#pdY$TA-LY&teL;!Y0c`%cI=g?yv2K|XCHNeA%_2F0ep zv(x*0fH}af5A-K^j8;7@PLJ$8atxtG1P6LeFyOJR=`<@voe=Zb z^2G09f=|aBCAS|_VDymWf8fINKF8qz;7pIOd2{w1#`Ch}z3ugXNZ04DTHa~z(qqka zs2-p4hR+QcFR_lS`5fxUg$n{w@Hr5GT z8ylE+ga!v}V^e$!Fl;=-76p5X^{VDCA8K+}6K@B^CNdx@Ze_V!-k zM-wY-;1^Ymb+2RHO{{zqDnBkJ0v=85l|5DK>yUf|1QMp@1f~VR+42PC^q2&6%aimK zaRQLjlLQqeA19^de<`BtSqk=-W5Yo%Y^?gQqD+uGi%~VY<_b>6X!z4vSwSw?ac^}J z8oTyO@xWBqq8GrtI_s7$4j@u>?gvziVe~GIzv}MAMcM^#dWN>@V*+G_iE(C5__<0hg8h{102Hw7zhT)706!yvfM*M*W<>@uE$}2{P()>w;KVfdrL&Q3sm>m z+MD!!UyF>i^KlCw%O=tadkMB#q{Lm}(LszJHa=RBVMP23{vx-MUn5rsD9ZLyLilSTfs7v0}-DL-X4NgEBWkp1aQ{`8?%CAeR zbTTYS*DZb{-WEQN1orrBhemt^BiTR2YEuw^2y|g8L zFT54DF`IIaaU`W|6$ZWzvT5fTb~bSuur;P;(6MT%{%UpQeadXR;_A9ePBX+1@=bl zmdGRgNaQ0GVqTWd0;17A@K$6JkIoM8L|gr$z>VLY3anA>p76AQax;2R07i^lvIwsf zf5MqUmf_1!_)V`*kz)nmocok9=aKliA*T$gl_I6+YtGT@g2k>43+uoSB}e6W*Zy`L z@MzOMNwM=NE0j zxEyL@oRNPApM6SdAIA7}h^6N-)=JI7!0?9{N=4Em81(!dwKo%D;YOGjdQ$EsGb z7Sq@lWq)OvqnisfX_qc`SQDVFe^4Ql7^A82a~b#O+SJNz>-D@ZWp<3?OITYfdN3|~ zSQBbEE2J>rd`hCvQ+&&qi(6%srKIbsT%nvaZ6~K98sj=TwskPJG>nal#BJe8$9b!H z@zo$P4A56O7~Lv8lOWe(VVwLzfBuZ z*@-atM4dS&LOEZUW4!T-0zq-aI)A7BI}RML3l}8;=Q@O!_*A;yz_hcKm1YZ#9^FV$ zht;6p@}$;8rcd=`SiIJT90KH4?p;4hZUMHy+JlMc0lxVhy>mM!7(b9Ms=45S6bSMl zM!lQ765@q<+$S`zqhp}`y%Z>(r21{~jFP;kqhE z1)M9zY2eDaWzrjJq}81O!hbR@7w<`>c(EGQfk`EyKzUlOk!xhLvyj(1MC90y>uxM; zY*y56JP`J_lMo$n$t!9_?6i&(4@mXc>Ai95=v%Id#lWKKLm`EHp`8E{KY4N&vQ}$R$un8fziT*$okP-wj#3aHMSzxRSP^`{Bmic{J z4T`@bWU8SBu~aD0>F^VWb^&1Tq+i8Yr6pLrwI6=?49lctv1$ zNg8wN@TDFq*^GgFNPqVGhH#?uOpCM{+k!i;Zo627R~B^Hga^?OV0kjt5vR#?F4Rf& zwJJf$eIP?d)|BFEZtJZA_M_S=SC2tjO`#)BY_XgMt)i|tv`x&)nK(&#_#_4oO_nme zER{0Gu2dR%C&SyW532841zS1#6N`j=HpIHhma`|nLgy;(vVUuDhxhl;ret~26p00( zK6*upf;3%51q3CD{7w|y(L!oPC91#xN$g0#i#fVof+bZVV^NugEv|dNw8&xQ-I)ah z&6ohQSCCE-L8g~bD>BQ8SxZR8i_qK$*n>Eb*50Lz-~m&C%O0f7-4Ml1(I*l&BO`9+ zmbfW%C?HC46Mv_zByQ%GxEbNKywVv-Q%9ftonuFSH`m@f&PzMv1*(y{@8D{;o2&dH z@UG=|jtS_2lVT_M0a3!gU21uY#TkXxy)6|1qtf4a@#Qm}H&mWwA1c+KAGkrA5?hUPiNDdz6SUgz4TN@3Gn}P(<43FNlQBO`1%0tiVqysL^#@$ z2BxH`TtOXW`h%~@PgS+H5$uj-1WPr`Z>(E=V(s!9>rayrjSTgdCCr4?s?b@k2yJEh z!DazD@NFAu(^`=h+!Z{;{7mY=!gP1rvgh4Z_PhcnLSF)GNzL`($j*%_Gqco~FYK(e2!EMX z;=Zoe(s*W$wsWa~uKlqBgC$4KlEO&1R1_TKvbL_I2<~~Yo4Vjfduq{6nxwOa2{ut9feFC)6Q@b*4ylQi!UCbfCc6mH^>G$&5 zpTHtpp1(_ikvPP;zgOC{Ys7GSZGT?Y!)EV>HRR2uD>78XS)!_KInFH9YiG4wx+${k zH5XnqQr$txGQmR!(q+Qq2hI7nc}rTn$rsqkd%1C87?}sY8?S>gKHRPRJVoc@3w9FB z>gu?U9YMh9ew&;Q&UAC^1U(Q`tI1L&;+pR(N45abgw5Cy8q%GJJ00xP7=Ok%)`Cxa zEZ;}^t-i2-Lr2I1;!Y-g8uFkBOFmt#BkUvYyhC*UHoPFe_xiv~Mk;*tl_!=}uiF*6 z&|aH-_zTJS2(N@VTc-!IV?5u0cuP#%30)*?kbmsxKG^ix5gre57U2aFrv8xyo-i^H z{&R7atkM}2?1F=2V!v3j@qgTxoBO(j@_(2oCC~rJF7Qn%_(5%e{^C;!&?kD6tW4{n ze}9Z=gfWZ|27p%JxC+E4E(kR5S5_U)sRF()=AJ6#<`M<_f)87%K0$p8jbl@;fAAyg znpe4wKz#`9f=itA^~aVskIH5%2?i=g-KHnOD4fSZQojV5sip*Q9Di9N=bx=4A#@a> zVwtbW2ab#tlZ+4yAB-p=HT@K~WJ}tXZcvl^`+u2@P%o?1nRO;;S?|ggHhn>Wl+V}p*fkkG3C5~JwG+{!6Do$n zKcqd-A9f--b5iQeNx3s>@MEY;`kWvT%}h6_r$=#Z=Cg4LWRN5~NDV#{oqLY&(-uJ0 zm3Li`mXS(Yw^;K?k9htmu^(m<{-6u?77dSMpMA!AYq^{32Y(=cpl1=Gez30*OB4%v zFbi41176m}add9pBV8b$e~KC}w|PaaE~xU>UYEw879SuJ7LyDzeGeBhk%AWHBFoFg zOpn=cE@YO*zjSLT>@#2h>+S#^HyK`PsarOvbnSW{Hm`Jyn4z;-QFfB_prP`=ZUVa8 z%o$prI5YHnc7MIr$Zb1csBPP!!EX&(EaPo(#17lHhAJHfw?whef>A^F0f|H9ow-^)GtQ$9gEMw) zf@i@|TDxV(K08y-#|-2#_E$_eV~0Nc2VIxs`Zl;#^s4cCz|9%?J~3J$ukEvfD;=!2 zK)0Mj@qO!19LS%SymJ8{fA_0ZWQ{V^Q^I!?UAwCL``9+S!o39Od%=NQD){+9eqk6@ z>}3ct$G%TveQWM!-ge%$D8_x=wX^SDeC$iIFYeK$4G@f>^FY6}X&8?42&s9&JEC`l z8LY6}-vefyQj&;$!f^o7ML5jA{(kODIN;vpw_rqptSbN(JjAkve|$M+fYgkg1*Nl> z3q` z!h^CMAT)6X>zlfMe+E6ksqk~5{(@lOFlMOe7Kp-&hAC&he<)KxV7y&BZ2M48gthtXc5O|i9IoBA{bNjkrG2R4F@u`iAUM9iH50Viq7!qg|Fe{2AtLgd3|aMj{J>cB)E z`DT#>`5g z8VaP-I#DCYe>TD_`zS(}RSat*?4|SGtB?8X=DBzqF7kytdX{{jsUWNo@%rst@{&+# zX?_;`MAi*9%fwL zPV;1R56`|MfDLrp%Uzk^Yc6Bo%CVGP)^!mRa7Ek4e`N?_*CTcUlJmj>*F0Eu?%8(O z+_FacLLoeeeXxjfqq0y+9)W5UgA7v9j@C(>cE}chytXZEQmVQtxS(Q&H0=n;v}0L0 zdHc}5Mzlwr`q;VnAv_$|L1Xx7jG z<_9qTe`{7dV%Hq?0!9|ob1k-psDLl_FxPXyhc|Th-I@k-y_3=fNSowMK9R19)rtHa|sd z&wcxq@UPkKidN2?6U0_*9Tt7ff69KpbHf_5h=gJHgdhnxc}g)%aAG)M z<7TXukdha@y@rm&6x$o2|37jvM}05INvF)0JNXoMEHepr)siP(bT}WSmS(r@>WjKQ zNGhhZdO?W{^#$*y)gifXA!?mR7WUDP0#gy>mU|O6MmQO_fApwMTOH!WbfRmXQ^F%% ze@B8i(FO4|L%lLIGf+J;P@Mq{Pdc>|1Q;sL;R&!v8ry({HrWhd)=KX0muFVcRXI_e zOF8zKkBz={1EKVgzRh?pDDT&C@bsVQKjY5R5&H|jiw696|IcD?Z*S-6$eg$CS;k>C z%OXrF#&&qi^H#YJ{g_6*KCgWpv;X>!fB!P!zsAh7l|%o^toH=-U=PnZ88xy(`tfn; z-JZ?$XZB(9&rH2jxFt`%Kb9Y+{1h(e-8(9*w4)~=WrkBya@UH$^6gSHxaEoFz1v^B zV`|&YJ@VM8b~XG!j=FdNRUm>ek*t;8#?2exQ zm0n2Z24~_)h-&0Xik9NWc7NNVm3NY9Y}t=7?VtmVyT+R&#iw8OYj;n=^CZ1s;zw+x zNxHUX_2pDvBPZ$Vs>-L!8+8F`u{J~nU6$tobZ7{Ku}@!k#<3Fz!`RXjD?RN?kDf|_ z6qhx<5VfM;O&rGhoe+luBYsmN_?f2_n46v&Zc`9Dl5-0^SprGS-YU@dPJ~d=anI5~0ys9z)|LJH|yq9%Fj79DSC&;O=0 zCpz$j&WgV2x0I}R$%vuDS{jUsS?2Mva4EX-C9GDznO7XXgvzTT4;sL%9P+j?{QD;M zHgsW*&O+@+)0KG%>WG8<37Az|Y4}q3)G7jVXJqmn=0tIq->mmYAR~-Ox)5D$g2eVE zsr5rPj%fiK|9|DVfX{q^$>^s@^9LymBa7tIKKNGNHJKFs0LF;zNmmnRdC+9AZa+OA02#jsAfNuuBCL~Rg_dFB6OC5a`T36=GoIy4f4{T7_hM|EO9Fj{&y&7W z6mw%8A4`gS*sG#y@ZU9jstE+v)u1UK;}sclf0Z;NHh&tg3-#z&vX=bc&)P)*G#-nM zp$?n50-h>*^ClRxWDWk{s9(P}mEFhC(0zn}C|0@P?L?l!O0xFv&t!aMSiU8ELwI9Hb5Oif> z=;_k7p)7st-Io7bMn11|gnI3FvUFJiU5o!!IT)7>49 zS&x#CHKYJr!090!GSI*STkY^2jp}r4APmih;_V%@?v=~k-Z4IxeCQx6CH0`5wQQ!r zIMpx)%EII@c5fW;T;YL>5$TacKM;c5wa0gbM1Kz;2?AAa*^T?8wX`BVEbHerbMwp^ zG4&`?pk!osZ{v5Hq=~SbX>PQZkND+cl`)`|3fzT*7OY^rWE@7xb?aR|7uTevcfo@@ z^9VRrmU1o$e=BCtayrA8(pu(`J=hfyahfk3%y}3?Bx3?R`?4`U;-BcidKR#TJ~9Wq z+J96}WpelNT>Ig_P;%y5TF|-4g_NVjecC7`#!*&ks(b>~L?(xjz%|I1gzqXxg-2OS z2No8-q0mwt3seW!HXE;A+^@?8i6HRB!$FU?`|E1v7O389-v`#=sW~}cBIs<`f{t*I zptRi_IvGYv&Ox23+&FVU5CViHZc+!RbAJsc{Y8k^O~vy<;$`k?b;Sxl^W`)3m6m=f{L+rA`%OfGPHZc+I{ zj714^`hAMhy1_$kwbqc>=`|#*2|k| zjRtjP?`4+9AzI*vdapSYOyr?qB58p(9)1(Ydgj|cmKJI!LuM9^J^Y9D9Gl)S&24WD9UhpP-J_1xbQQSz9T4cBEzI3?$+f{t3o&mfQ6ecnjwGppj?n zrID?_+!SvvuV^TiGQ1Mn*^B3hy-3<9NF90Ult#N|*F2tm6|lZL?ak2a z!}g+8lw9;5vs;0aqMpOx*f3P>L(OI#+iceD1v|FctV6LNZf%|OSl7J5or^c252H`w zL=PBhw`KBJcIg>gB%-0uYIgRcS#stg;1WWrwD;EOW?sr*>$o`LILHO&tb@vTuj4ZxPfIwCmXUL)hw_ z7&|QAoQ7CSXssRF4tT6411)@*3VplxGtql?rYpGBrU$p`;IdP@4S)7~wL^dca!Qby zDaFJ9;nafkq=rCn<1IJArWvUVbm(y0L+t6#&RdaSvZqS+O0&CP4IirC|sOV(R+@#^cI z0h+_UcdPnQYOL+ntZ_`?rIs;oHKIvDb5BWHhlnu(+n6L*OMfs1+C4NFLn*f+N_OQ? zNN`VDy5}%!4|bdKPI*h{F5kM_27>Jjx}>)bD2^NJaSY`B{yydKV*muRWSXI#mD=hF zvc3G;WPgDUDA08X7=qC=P(HNh@6esU!^Qd2YhB2%g1EtaVuPhx_1qnn=kD;~xx+3J zt?3woCc5m-hJTguXjw*>3Pbn~#dI(Mn<0k|n5j5ZQ*kJ!;?RF!tY)PN)jpbr!w04z z>B={^0HJAwlv$W`RhY!fD2?m zN~lKZXa{09ua+R`7l=O* zG>b|M9cj2Mp+0K}IqneXst~wvo0PL!&fE0Ojok=!yB}OFY!_*8EH3%1Szp;je~U4v znXxnd-6ixrR!azKB;{ARioVCcy^6lazgR`z<7M;uJ+|i+@{BOftRgwYe_{PR44qxE zkbkVP!neDY{?3yB-L>>+hpa{QP`^r~YRS6VEw8IxYhC?ILwaCc?Khlt1;NMG)e~!7 z{es7VFJ*!76Ti)H$Xcx|c=_yKWtik)q?YxN&xN7iwnwf)&WLMHiNabiWI`fTnZ$YN z3;zxQU?7U1Pau6kWOR7aV`x_$S?afbM}Pd^D?pCKIr6W1C^{zj`cauvw|gq;(PV(0 z3YJj-Nz=mIOsSHh%JQ=ostzT-IxYU2#MtA&a4~owp;$4A3L}XIwmBtwbC>fE!=jLw z=uHr*9ujeb1rgWH?8>vjqKGS|=+>Q~M{?~{+^(PCs!m-nUfebXU{ve<#1hsZ?QT7eE3ue zGctq?$W4ww`9yfZ8>hipfw~mzT|r+>pCu7$hzXgrkh%>M>HqUxS*QC?e7Oo@A%o0o zNa`P!E9E3o$};U8UQ6hugRYDbkAGiUst#YZ;}WGRYgN zx#L9MqXMznq#`#7fb&42tZYdUI+u>6POW84VFodk`g8@VatH{C+g-Yk$LnYw_d}rr zrf&hoRkqTqQeA?vM5a4cRhOo{(lti_U`2L0p7ILZJ|M6a%pMiI@Wo~JvUo&U5xIDUEFqR zWKL}*v@KPsI95r0HagY?mw7;F5<5C#Kc!}lFv$B8?FNFoOQ5~t^{w(XEY0=XUM3wM zitE>?w-}d=dnq5Z?xd=Qh_pbgN)igq86OVu?Q+pgi|R-{6&$72Lw}epyTA0VLoI)J z4ElSa|8mipnDSt7x}9`6Fkm+5L-!n*C-G$)KKzl}Rx-j;h~6jTG<4Je>5b^&SlYz| zP*9G$?Dc<$kXf=8If~0#iPq5Di#~NK>I@OpIAy1iq!%W0 z$(*8?XyH&^-LG<@(`=EYC#bkwZ-x_><8@zS!bq3*b zXCe2P>@sBwZx`Tr)S9Ul%f*8epSbx#4-WhD89lBkjA)O8274R8u*6ViL7_~__R$j{ zA~^c%F}P3MWmMfq(RAOxD~*SGVlA3bu9XHYlbN$jW`B#zWVURX_}cv<>|bmEy-^Oa z_5<>(5)1boBkh6?$IJtCfg>A`@G7K|epUeWQScDUQ{BWusLn^|nIm zw>^LMY~#g!bN!{r(^zbIKUms!r_?Z14q3%4sb)Wm*EQ{aiDuSYi1m&6+<;5Zf|xT` z-|#+ozJCd|Cu#*_OOlAFsNj5d(b^ZB;ta4x9A@xkQ@Q^?n9Bc`yEofz+u9Zd-|tsQ z+#Wi>@iIfIaRUb7ux!~@BH4~<#YuEjGDI$kupvMu0Liq(Gwzqv)BT3}f%7NzB{k<< z{Q@W}+56n8QDg5|Ah7yo_6;00g|+tMZH$~UihmEnNS_>dF};a*RYXj}UvrzlZr)z= zT`(SSY~j_esJm<3QXdk;yR7xDFC@%GYkKHWjhG_T9RMq6E>ApS4UmHl)P6_XtTMy4 zak%jU016zf_+j#exO9a?-_oET_3xG3mfDO+w<@qHjQ9o}!e%il`Eg-1fZ(jhAs((YEp ze-lQ+XnCZ5{IS>o8-_R!-gv0a|> zH09Mjzow zd_V3*lOE=k3NX?MtXgHMQ7N>?%lJBj6+khomV}BhFdNENF`sF-$OBIFo0)fw**XoET-(H4;c%5xMXyS6lMqWVCD2${ zt;QI;DR*gZr@dN|D<0T1DR+`H8DtM$JHHvXKbapkrwSwXY7On85eI;zdJ|a}B}*e9)myy+NG_1Knc~g1?7gQ|(trHJwHdRNFVZd~2 zaWFJj5e{He>wmwnskO6>Mp|s`bRD*CZY@FMVa+mYRrweLXc;D9Yzv0pp){D*8klEH ziy0#!lzF>V5EEaMy3!qO!Q?a$$_ThVPJ(i5r6WK>3HTLE3&kjK!zfQK%4tE#uWxSZ zo10$@_3(=a|B?D%>q|E(7(wY*mk|KO!z5uG|ou?==$_4~gWwk@{0jZ;^ z3LwNKK6EP*St-7wG7=Ssv3j8ytD#*a(&|c!P@avA5V#UXRwy~JcLWnajxiDQS~_+^ zGU(}RQ-3ro%9c~dCe6pTp4jS#6x%ccD@;SB6CM*Sj_M4NgISZ{7Q(k$CIw7C92nKg z3u2sEpFOY>L?l+7HW9OTebGYFg4)4qp9BHc-;$Q1lBN=gq_MQOB-~ia5(#H_!pmw_%p;TqUzCwe z3;&Ccvnd}d!cLxR^Tj^fE#)!es?hJSToK>$TjuqEfhjG@4*{ZF0|b5Us#%)NhSr3R z%{vVNFvqZaI$)LiH&{i&Ak=-zJSRAj$X4Q?HJZo4V00V5lGMzYv`GitBO86noWM0; zBY(M}mW>Lq%fRBH^+Xw>o~AK=98rx4o|WOro#tCR_6haap~qn%A8$PAJ=}W89y9KU z%*KgR64r#Ed!yLcFSg0ny)u)QGMiqR)3Fg2v@i)edRI&-rO_GO4kjpUmll$-vUS?B zg5l(ydiu4eI-fS6YMiesRi8}%MF5|!lz*Ji>DWp214Fcx&y&PK_U8_=r}I_Cm3O`> zO(nT!Nb%Xmo!CA_z*rpikHTSg*gHZ~7WZHrLbpfEMj;pfyM`k6;`;+S^Hv{efpw87 z2#vfnm?ssG0s5}KMNR#A)#|3p>yUmh6JFEqk8rt?SJvX z9>*hrdZ^8x@?jpqfhL`bSf(<8fiVyP{FigBI14;YFDjXNtO(ha zAmuXKBBE{^Fp$0f%xH1G)_@C(9e=HTBMYTY5?aMt%lc~bo>Eds9O%&pOp6UdMKVpj zk^Z7EbRTHkkq)DtaUT(-Tdm%mS&+fK#qZ45oymP#Gp5pYqf+&Wq%o?K(ePT z=#;3&qCPx}BbVx^DBHQRI5HhvjV;BXZ{hQ|4SXo#Qx?MwO;nh+=u^e&l0VaCGUBHS zHa<$+qzpuB}?ItetBsTDUe}*aBRex=Uv6ZHy~gSL^t%4MtV0q8Lyz_U_>% zY2HJ-v*i~+G;7^fi_jIi4dAnhR0^x1)sf@lv2ZPFjKbble6=$KwWAo{Tl{ zycpZSu1M6?FUIEjT3e+~ND`!_0KtFZRvXE>TCy{wS{rIT9)9P~|Z2FBx9)@%JJCx6()$P_=&4c}ab!}nMMEsN-K z@SL#62vCcA29*M%*@P4)6haRq7~?wrxgyJtL9Ogk(aKz9rwMAy3=#1L`GH^-Alt`5 zO5%yh8)xDf*f=%DcOqrXziganD%NNJedB#mz(JQr{w~$KY_Pc)tdTbSjErp-%7jeo ztkMH4%zpqYJwO^sbAT9dR1J{$Vsm*uYc&s=CjoD72Z}e*>Xp``3$#a#5x>tbFnL-f zt!-_~i6v!%jGB+EfO}}7XQJ<=<=cA3g;kiUI$ZrQqXoFR!6!7JifrSmPh*#QTkXS| zo#v#fwQ>e{x|`Z|2v>rVVI6;}f*OSt@dRT<4}YKMkrj14bDJy~2B3~*)}3%jX$y)l zI;GQs@$D*+ps7J-h*h;hFsk2@C6O;8$KYxff5m{jcI4d3KS3C(`=3lRQ2eDd128)a z5RNQ`p`NBXIJkClPd}tt2B4e+I+an7-AI#53(`R_4IaE6J$)LL|JFL-kkRDUW@9=oNEyB=*Nf{=ZGjD9mq3kCw{%aJWT zw}sjb$=s2jS1ypo_x8z}#Pf90GCbq>BBe#vy||P<=tg_r!Ayi?6_ekOzXEa)CLz)t zSSD0Z@oRILL!m~KqmTcCcUPt249xR8NdJWf8a0rAb)8# z$wYHj3i`8RqFTWw=@~B@j;iO0mxs}-FZI?WK^>BuN;Oo8pSII$V&)GwuPid&@VMFDt7c4g`aeT`tbRr)j2U@@aZM+p= zDsw%{lvlkNtC>=htIC1`ht)a_HR^@Z$`}Bycrrg=a_!uWXC%6F@5ZfN>3lXWObRZw zN&%jbq5v8_IIN~=c@##Mc{iC%0{kW8JWmDA9e*C+%jS^OS!37w(}<4mRDWTQY1HW~ zFglU7Vc$Foi+3;J$~{ZQQ`cMj+WADoo%YoI6=NS{6vvlLrlbiV8F*o&<-%sXbPZ-| zAPGE807;{=w4k{o{}jJ=p8<`^`+CKZr0Ty09YtfH9h030$QsrDgmjeiKZV-erY1O`&IjIL8d<5jq|wec`Az_!2sm}yhD{zkv| zXkGnYiyv&QKkjWY6;`27C((~QHWZ)xk1&+CxRZTaLt;39tw3#BpVEmc-86jXp*08^ zlxAHECL^n#`;pb(P?&Snhg)GBlFBwT6Dc6{*k0DC*p>ErVKkkQkAD*t@^UUcbJkL1 zK1C_JCZd3}QoC?5qca64$MVh~<}Q!XfxwD|vU*w#z4#1%JO{Pd>%FZFwFqnRe-`Wy zF|z_SpcwEgUt2psg{Z0n3(4f{NpmS@Z%t~?nUrmYFO|l*o9d*M9$S5v0O|xP(UE>w z7cM7Yk<5(!Xx?6QD1ZH{`dfHDFius?-j5}*mx+mTj6NlX#iU@F{9KS3DUcn)m{XMq zpKrNOsf`!T(<(_B(;;UHx(>>KsdinvRB!<~4Mut~dAOqwGnNNaI4dX{qR955dv$H~ zE@|P8*&U9-!_ipjyW_U<;x+bc)!j4R96a#0b;}4bhFV45FMn>{m<-n4S{YIin?xrB z1l$Nc!Z1S5Pux@40BbD3ndP!%hqLxjfjcPSg{p#-)wesT5bB^afv$YhbTZ+9!G$ZH z1^q%_SViU&h1P35b3gj<(<`N zbz2J~^epxoQh-T9xk6xPT0koUrDN(P0Cix&qE+qYW<{uyc`FEOtNXguUpJt2z4zo% ze{0>g;Ifakyo6xC0~HA;57kS!SZM>^2-$rjpCwMcyB& zjw$Zs$S=oa^Skh8baP`eOy1m_=fj|Fsf5@E563nhltz;w3+C~8esl9#9Hu#RzRO0q zJHz063%6WiGrfbvW_d|>0&OLXoaUC1`OVxSr+=}U`<^_d^5rQQW$JHNX5Jl)8=hnF z2=2GMm}v7YPRfYs%Ng&ZV&b101&ZjUt%M6CWVo~@uz+h^shFsh9p!a6kKR{-_{QdD z?E83`UD9ONf-oZ&!l?Zi*$_tgFAhftVMZ|JQ7eQQ2?#Ti5C+5IECn%xU|YeMv|U{fiNW5FJ+gF7%U=3HBi(#A4IXX_J+hk3=IY)wOpeMl#NKv zdnWU|a$nc?w-r2-SlM0+=|?36NS5WOB^b~Y|8%H=!^Ez13R$pPQ|aO(y_}=MEq{`f z{9Kgr%}<4z#+q@jg>ic77_}QYwZ?u@Q9BeF+r77q7wBNC&M4~X<>T6#tgbL9uD*!T znvJYucSRBpz)PNI&9s zd?x+=aimKafr$_r1XEjVgh&5Wg|Mqp@E|3JwUWEQGGF7HNJ)*DsvJ!hEPu%4kSv`z zn(`QlO%LsTY+2egjOutlLkS^MR<9fb?~~b#d{G;TpC$aObucHcuX(MWybXpEnKv)` z*8~OWS4h!JMLLwCX%t{K1S9cT8=?bfsy)3BK1(>2ISE_Hu@i%PSj#$9Yg%Y2D@FLT za-58ouCduGWquq?^^%()S$~DtI?;OOu7BpP|A_nXZ&!%7w&R4e3@_#I~-9V10X|ha6 zxaEFdrud$>Z#Yoa&b6ob4$|W&Y+pp7m9xXVS(|MfwgdYJ9P%Se;`K1Jq7ztK(i%C- zQmtLNp28Jg@uicjFupF`2?YUk05+4B+%k2VTfW#0U(*j55t=n=0a91eRd-Q|mF7e% z)YjYQXM3CXe7il=fq#T9rLqR-br@J8$E`=O;pa)99T?WvQL!iIgGv%a{B1bJP&sN+ zm7{_b_tpV4g#t9$t&4A+Fqn$k0C{%{yuIGtwU1i;y{l`EtWbzF_hlL`2ienBkX?s^ zrm8}&yk1J7_9d@MJ7gh+DBNT?WS#(KR2! zo5%K>hnq6)=K5pt0EbUJZ1vaWCtw%kx89~Kwb^?ji#_f?QROgJig?^ufAmn66sm7g zfOK54sfX+RO@CQ>YkhP5@nh8)<K!`DhSuZA;mv*vIS{N=E(Y2T!TMM)q6Q-i?aAQwi%w@E>%4QuLw1Ql$e)sr@m|%y6Ia#Y z=j#6bqxeI`^z%#W`9;n?Ak&jh*h~CdT=LmzR$Q?cxiE(&K$}^x)iB0z;2badT`O3R zlOV$le1GrcW--YzFiDIKyy*m2_}rpz@&j+^(DFV*aGjRh07S2n*`$mrCRkDJfvA5% z;h6{(-6PM!2ry%kW~i@(Kl=!Biv_^tuGO3bo3aJ5_SOsCB+<&)C?=5aVta8eAF$!r zX87KGUpH)pUuB3VupNYt$^yc00Z2{Q>=jV;l7A)2Vj%Eu)*akqLKIq@iyzRHN9gRq zb&ys!ahYWW)Xq_@tCtfTGxpgpdk#(pwVyxyu z3@4~xmX~;e! zh(M143`i4N5WRDvu8JBy-I4ZA28DZ+0Jnc{KE}?eP+7+e1I7w7Oop=rHf+LMfo zH`=N=eWs+LpYoGXcuA4C`lWq%*7n<|3l8#h% zEOgUc9{5GN>)~yhK=Yc247<+igQSq=zmKM z?;Qd!nkemBxVA=y1NP_5h$qGoqM6vwZL1e4v_Q7K$4Zn~_}V^cy!#$=vjIwQl7)r- z3w3>DCmRt_vc5n|leLO~ZrX7UCBQQ{XRRN$GC2CU`NZ^4%L}8{#(1nxJF`rqHr(`G8e2%CZ34XKRmM0S;;fh!b4f|lP#F^yb!32;{DQxtntBb2|-K( zKe4U%Gu1CWx&3OqsC-?D{C`=NVuqI%9dM?;HvC_Td`$1Zl;L787mk~x-5RL8fw1ZO z=xkh24EYQ#+TUDZSp5q=tL6ck@)WHv5BHCxry*3_k14qVIE@vYJQ5%&%?Rj z$`q9XIRzTKMhpML=~3M2NLw(psOn6T{EW|vy3FPyUhU=p$X~tR-+z+^R~<#2tKVgP zae=u2h|9~Xok>cr+8>fxF7l2#rCt%hg_ZKYCv{c4D8_Y3n*HX~hcyftcZ!5dH6?Qu z;=p|Yl0&nonF>pl;bMryHN!4Ev(|-1Bab;os9u%VY%W*WUt(-YfEBs8t1YX0b2EY_ z+upaVy4k5w*ivV0ZGR3008T)$ztQXh{xr7@-^z`{FM5SgvmsXojrHS^09`bdWt%(1 z0Nuk;_xN~PooDhYv3Wcn&b@ad<#~*f_7O!MbGKs@h7t9pPs&i))~s6TXsvfL4K0n| zZL8C{KZ4f&CFiX5SOt1IG~^;5jb}xcVRJm_l;Q`BEC59R)&`OhePv!zqv|Y59sOYSDGw#w<(f^G09a~rBH{9qW>&5X zVOXqjWYv;3J&;nB%HqE?4WkKy$R$y2P&|h9OfE`3=|s6dg3RX$^R^LWJ_o2=kA@X; zzch%JA&F;aT#@_J()oYRs@5oRmey9kleE6(Bp4>H$b{KK6{@Le6`RE+<|^M*c~e+a z9LsK&X}83uQ}tPf+Th5FTqb&=N-fco6MKZjS zHqVA@(NbagcPo;a-&CF_`uj-AbCnc2a*{!9Dk5`6{$_>@?W=zeHoH@0LCE})noe~M zPB4uVW=k52q)8S0nUM(AGp`WYo23bm|FKb8($kKvUmZE6<4=((8yc_>Ej0}2rsZ?Z z^cYZr`XOSOeVZP(X9baXo&sP!?C%lkFlX{XCLezg%00b+3{B@?%9ToTQhtR~Y zv%})ZYeD!yiyp|CxiPl$Guc6Uo}8&c0`U0kRbtBqIpGMrOHsTk&d##t0tm+9^(-K3 zD=e7iz!#*A#uQ(Xb&s!R$nD9frq@?VxewHTdXe#Hb+zuE%O8u|S~I-Gv$C~o!2#5v z5_u|=KxBVkjYMVLr2G^)UjvCZn6?sA^H>v8!>o(Lkd%=mXY1}VS_lfP_SV*Zhw<9= z*qn4Z@uBI9&4J#w`jdp(+M3@X&}sj&KCvz6wn42CJ*=p;=`GY6ta&@v`3dtjr9`7Fmo8gEG~aMZ?DXXx9$*m(oDY4DGp)sPliPV z{3$xpK9^|?nQ)@3s*C7{AFi&hx>pvf{{(VEG>XaU0@f+}3 z)M)zkh~nrnF5x#P_?@wBfumOYWDIFz8IFl_mHs@Qr6Q`#ZQz|d;GM2T_BTO%v+~~o z^E@1Qt+aspmT}$<+;bb;H(O~1`7NDkuup%ooI*>J94O44o2)LcKRJ29`R#Ziv+zQ( zOagUF?+(I{gI1!b_G-pK=+t}Fi9;W5h$AQ;bpDEbI%X!BhoNSUUXQa6m^6K zkAGPtp!wzZCAA?NY4ZBkO{N5&X5zwKtIL}P~S-aP=7}NP=9}4 z&{T&*J;C}`fk33oy`q3{BQ)Gxj(0fW9W*6f?JvhWobXQjY0ZR6WL2}EC9j@Vu)-&G z1tX)6gglRVAj^iW2#i}m&^pbeix+`GY8g!W0FQ}V28SPIDk{Kl_K2FL-EtPjT_$I} zRg&thElj(@b+H$^iKxx;W;9#9{Z4;YZvnH&kyX7`Lqwm3#lpwPmGV3GkafG~@e+>n zVI(3|Hd&wF1X}T=??`znzQzg_V&6-PVSch9pwzrfU;rmYDtg+N3%@hc*W)7z{5ruq3s}M3FGkdELd(V(2ykcd#bsg)4;PDXes^Z&O(1Yp+lGVukG}? z#sXG#p?Yt)_)KHVc8)0zfRJ?WMHvw0)ZqISu4d1UWYJXH-)5*bjmeIPP4!hfr66*a zp@QlYfXmd0JmD~zF8}E`4Z02&DAdkbn=ZYM$zMkqX0OFkH2sj4#MnS-r--H_j*LU2 zd>WJ~qBj69*pDjJVjq8BH>0T3t}T)3K?7=O*WnCpYRkseD5uimNR3q%Y8$TW&e9nF z)Wf9>9}oXbIWrEi_$)Wy$*t9g-k zqiL;jvu-^2Y_mdPG^)?vHV?v|u4ay(Fq~Wp9jK450+7;J+a!NjSf$Iw@g__|D;q6| zd;R8eFZ@cr>=NY8B@mDt3adtu}wr*(})t#@1YyM=GC_)u!fEVIh5GArCtecE!B7vdeE z_2ZI`QDctz+5>#^=!Sd)M2;a(FSbk*W?Btovzj*1^x1!1I?^jaTBc=0^=&S#%gE)b z5f!nKw*~XuBWbDb!QWacpgv@EIau?_rJwFf3EgH+M^|9!;ZlsQeYnWD?lXl^FDdTa z+=(+g;!c2tr+g>A3C76HW$H{36c@JW4HrHF z%Iw8Wk!gQIkn5PeqLtPbXp#qGCkEwJPa9D@P2+nd2L3~a=rxAnrq@!u0EG#Bbtq$m znA>%UZz7b;*hLt?JNxBMK3NDxibvNuu$t($;_#MM+{NEgesyzmmFAP;N+-F*Fb=9U zENlN335$p!o1tLunTUjhW}rE+=t(}F7Bh+tAe4Wz>eZXmQ}i_>$32vfP?1di5??7Z zq~VMKma9jZs4utdJyy7gP>kO1@q<1a;XnKEYa9MM0Ag=f8k~?IdN42sn<*b0;OV%z zk#0~2x*zzxK_2we`@k$L3+@?xf#)4NxzA6H>ZO(TBsCAbR}|JMp>Xo1$s^a zn$p`ezNT&F6V!KLY-@F#-r*U-wB+|nN~(VV&~8u|UIZ_1TySP=;sX!e^?Q<^F^&SE zrNyjlG-nPWvlNR1w0|0lx|9NrZ{s?^y^6`H!vNE zfYKibN>|$Vntcd`9fqMI&7PUFq)O9~67Dp3T$OdSB3t3+jTwP`R$G45b?MtASzLkO z`8Bbdb^W~MnRA8!s-iR$R(UWfDA0c>rEOUg*>;o*V4>1%5A>4^uS-c=RZ!lM2y<13 zi$b~!%b3!_5Zkg^`;=+qRk`DL!&m!*ubjcdO2(Bl_`ETAL_$LTImq?cfo?=_V-FFL zd}R;uB(V+aBq`wcZ-=mH5gBhqm=VuCP4H&XmYI8qI+e&uux*Xy)sj@Omau=X;m`C6 zy=Fok3PA7>KA+EBMn?GuZppyn25MM6Q4@TnLIEbzKYpKCKekirN8Yo3%z8&OC|8$0neuuu;#jN%(V=F-V45#p_y z_Vf&_MYqoKapFQR>P*GuhgHsmbBlZWhK`cs@i4dOjc!Uw?F8B(uoC4h?*gxh0J9vM zRw%EtQzxe&a3p219c_3hBumndyeJ4i5eieexNdGLr4C%xg6zuH5E_3MolLmr1bQ_s zB@}MCUM_cwHSN**-O7dVH&?rDP2E+v^9;UyX9lg`i6H+&Ue?tpe8+C8*<(c z$`{LVC(;e*&v*~sR@%V-E$-2?;`}_VUZf{{c95U@5kiUATT(7~TB5g?Oa!iUzz#Yn ztDBpzm>#SOm10%w%O8Jesk~ne)Rgrc*&isd-p4#we^?^;{R)ko{@`MQR_ZM0jC1>% z*kn;2M*fR1`onu=d6c<6eUGERK9n~YbHKW8Gy ztA=ZoFQX~x^z_;m)NaiuzBe@yj=-&~gf;&%mR)~Mue{2Fvl2fE^P$X4N z;>a^nkm!6OK`rA4pcBWMWEzOV!jKKqkhN1-dX@v9cMx-sXAc!5%}jZj7u&Pt^waUr zR8lZs!7c+w=Ds&;Yr9&~F((=tr!`+Pf%SgW{(c>xl8|ii0!DnSydV+Vgl`xq<67J?IF!jGIeuko}k|le_HxeKm~y zFgr3FZ;UE4*uQu>kOa_N!(t`VojZUKF5%odfdazYb}oOwEV^adZnaxu^Dop`%%P;D ztYGGUEHy(x87kn5T7(^UF_JJ@vw|lKMg}H~Y?3xKE-6H7ij%)jC%<4A@O`lmw*QVm zV*T;fCT&Kgm6^ur=~oOE%pDgev(LYdT~VgdZ6Xaolv*3Zaw`~oUWpF3$@(h;s6;YL zU`IC?*Cc;@$bh-qU^+h-x^s~vQ`4&OW+5wX*%fcCuy6pHKa{Qhy2-k*wnku1xfFXG zf6GK}t*s)Qt!=EgWk|${?BGp9&(vEdK(fwF3JhXXTZMArY)`cU7t2z2IiI2$Zk$Lx z#zsx3)PzM$9Zv$|D4&zoXrv_+c(^l5(Bu~14XQBLyp__hY$U+vNSp4)D+Y{?TCDweBp~K^Se{YTfz1v`QKCOFU>@!>x!q?}{7xCc|ut2BpyB2=ym?6!% z3(Z7Bcu)%?0sjkQ+h`q|eb4h-9M0&5+(SDRFJAC%-8nYEnksNKd#woeRET^_<&mPTHAjE%Hdf;n(a_75|KL|sRhfq9WPxyt)_Me zvVB32Z8J4vc)1@oz&GiZugQnKeT2+DPiD&Kj=Z`}(l6UolH3J=nPl7Ap>*5OBlz_o zhVR>s3}1qdUDOf4P2H7SvU?}&2&in6?Ly%el+%v@q1fM~l3>@uB1W@V^Y2sP*I9qO z3*44!kuC{EJmZow_f21Gxq408vG(2q@0?>)VgG(@`O|8gmfdzc!0X?~!9i%Ej4VqwCdJ!Jd zNrBN&T^ZOrvRUT~`Vy5FSu*diP7Z%d2Y*sn!&#N&RVR!9{)*4B_!>sR-06A*zdX}m z8pSl$hWd>N3%bj2I8yBkk@#HH)}5YnYkX+ve=ERTC@GFwy@&4V;lf#Cw;=KUu+xdW ziQL|o>Pqwld%nJos!;j7adUIviE|Zn5(-Q#>&CD-a7B`+`8;TeVPoq*rDA{dpj9q= z;LByL7p4JRn*)G3+mf=!P9-PN_~grLRY|I(!`!&>l3H+96CC$F9hFnb;`g?l@Bo7D zM_{wIE{Jy?S;2?Yc6rf7zAa7`UcfRNMAI1=;q=dmr-6pQWRH3waZl`N2El5r74;9hZy@n-47 zX6;18&CO>r5MG_?fIJqLIEv>Q)6bXGFRQ^k{+vl(pd{0R&sjWWi28pq{m$yXLdAtW z_9+f~q^(h>)|jWQT@AmCgM!?cB%08?^%SwhD2%9pxZ1Vur@&mFu&gy&P3!RC0~`+f zj4_Fk7+L&5+kmhs@M2j!ex!3!+L8HX*9CT6hmojnMF=EGQNu()T*1P%2hcqjfsCcx zgX`H|_)f+HC~5{ye2ahiG4hns*rh&XCje|#fn<}BzX*zD&74_*G!Iwlt6QxGd~Vg4 z5O`n0LDrH^1|UIGka!1^gK(k38rb}>Nr3%3W+$m#*LZ1}Fm0;Rjnz6WiBLkjXh`pd zKt?vW(>CbVVmo`$QeZ&?oTB*Ap|->w^|sB367>e6@svtZxFmnHgEXN0d(LSiJpn=N%n($zGQA$Yq!4e72DW;@a%{_BQ*g_UG+*--}?3 z1ddbW0H{l2WhqR$XjOp&JU}YR#n8%3M4@8em{A$Qe&37)FR9u&l0u!JnW)4#yS{PB zu9OlA>jq`MDC~bnWT+AyrBlz(gyXcVPVyG369dA2|2_z79fN{l3ewsl<-aqIFW(sl zLdZM8LX)Od^Gg64H<@1Qkz8uR>UV&a4TVWtHo;KCN2}jfXzGmuvxqD-7_%zdr$ZI4 zy&-RDQ1+dQQ|iTgSy|N0ZQDF|w^^rkxt_Oe^So`Fv6+8Qy?8&VfD+(o#zvW!d;K}E zF*rItW3Q9eyzD2H_j()4KP&Rn^o)JOaNvJR(dTdS@9+3>Ug1Bpc#;RbkiEiJV`(Y! z27_XqWbn^U0{=|p>!}R*{tRDU&EozKJ@&hNcTCpDdx`jUDY3*idiz!WdW|ifqOZ++ zS#BpoE7N~xsA4gJ(cmmd!;|0}UlTUxLln$JJE&BA&>!w(@JO;6E4N2(3|0)uNG9t2 z2pdvl%8O$9u`u)P@=FoS z0|Bzkx88pkRdpc5(rD^q=lV5Svk;wb^?p1prBr{=T^a==A8&=>;O&eem1ATnF_&2T zqy5Q4=`Hvt3P{ao_;HfmVE8ri76hv13YB`l687lB0ag%;vmuRV-tfL`1MPQF+O7o*wtK)k-4B(GPj6WEf@51J z*W!GNrNWgF{#Lb&t**fGhay1DhNgDLsjI@z<5zA#yn|KO@M9-{={MN zn;U`+XwV-hxMp8~dm>VCIG7YGh)|Auismy~{2bSB9!iS@459FA8iWAWwM}DpCZ zl?=2(HH)(%cGb_k7 zipmJHp~oL)0(sCM^nO&N=QQ5vKiI*@TZ208|M=q+Z68p>IsK`iQ#wVdUHqRlX?$U` z1iF5JIoX2#dhe%f2>(W#kMRlqjru)$#6MC0i6{Vnq7A+QkMM7_xj}F750rS=`}a@1 zAo~HILTndyf^1LjxJub~R%w5$<$$y^F&pboP(Y>()~%!KfmyijLk~VjuF>s&Vq?=u zX@YgCyLfAKNC}^;9Gz%RxR*(n{#9{1s~9FVC7Vu-cAqE0PTI1OAZDI zXdx!F%~F!I`m74jL#$91x~qL@tf+r36d$R)Z(Vy7oQBb$hK8jBxR#rMFGgH0L~>QD zw7v4B?UgNUmqY3eD#J2VzBpa;7`6?}LRGc$fmm_&E4Z3F3Bx}pWEk$IwjvV20!vVg z2wZ_`DQ*iv1po-uKy81i00?AP2LJ(9;xIo#0s=d+gY{NuI7>pk+ldM!9tPqlN!TjH zhF;<}8&w!nGkNHR35Zax04Bm!T~|VU!chb1jD{2>&~9`A;k2o!|I0CH)x@MZVbV5~ zqpz`p!P+pakJBncH&IXWBjeIS=MD3v@}qdF^eG1k@$!88hnJ?NA6!^J{y3%*P#h@+d_Fo|asS2}a3q4=8#r(ePGEL$kmmZI(ECyLhik+(?>0 zFr0a5XV7|s{Gh!oCoL~~(a&j+dG61inp}wtai?sJ8Z7Cbs3iIgd239wqc>1!7J*it zV>&uVcCnMhCs|Aq48U1Rbn({6-~@34F!jf`8jVzdM(BSAzs(P;BeD!mQM{h<qKEQM zGGl^jMJkjrIL$k<4{i!8_u~=Uj^_*o;?hwh*!JWi2SWaWfBJp-cT4JrccGpU#qSQG zvTcO8>ln~)doq2`UIf02Xd%1eZy0&4(X#rD(29R9q`BSeaWExBm>TPo)aYk1x9rXs zKC&q$wMWF3D)HIc+BdZN-Di|UAVr1czOvkDP;j-YkdUU_BVGaBOeWbQFF;j1;ldoE zR^PQ+T~Sd6+h3cJywxBJN{&oQ)%Ay=Wnh7k)aGi}Xhip{wYX>20-o&%U}}f&afgnE zCAxoSEzyTGxSRze;PlN<7Ii#|V(Ni9V&8Wbc7iufBjuvtfRy38UAz~j-r4n%Obn;ZJOA^)z2;xKK7D9+b5i*JAO zHI=(|%Se5_cQ-dcv;IkQXVJE&QtdOFx!WM-oJVo@UwIG>A z7rFHFI$EEoC3IwDudHRm-i3kK81ld%9ayjF;q-!zhVZs z2J?k_p17{REz@i>c?m|pA&KhYLeqa)W_88~8n=7;T%$EIK@thsN%%_d=fdGdY~zPU^31!iGDMG=oPVBj{t=Gk z&Z-zeq~#Js=T;~_qCKW0{AF5A1)FML=a8Y1ge_-T?>*d908JfC{qE-G8v?&?6j`mF z1TRWvsb%C+d{zOO79k>8-AaFd>&cUzOup!KYChfE)PRLN# z(#;0>OW}(0ko`JFRSf|0Y4A1;DOSts)0DkU7GUgwDW|Q=cmlgaJ4-2|1#|kS5 zB{Prr60K?G5=sQGGaWkBlK9XWXv{dMRUkM#kMEP=X?g#C6e#^GKx}$ML4qe}!S)b* zn%gW9{)YlafK;-3V)B3Qi#i_u#8F?&agSu10&vOry&@{_*W6X3F9#qS{ZM7{`6euV z#bGSCx#|s5k{Znskw4W|ltG~*oIbS7^X75w`b!$C2gPfSVE;!y&ei^pl!$geo*#}x zwnG@peq#*VXwD+3;O$#YS?V%)%(gMciZWc%!&YWXp*CCI#+iQ~ED2gfeJZ9+p&?+J zwv|{0ntU}5wnK(y&HF6|N4t9d$_oG)B`CIQ>^)K-NEecCs$I0+8qP@1W@5go*P?q# zCEPnZhG$XOz z+kEVpYS!P|(E3xa)YTxp$0-+=3Mq5}&eXPyf|#)+^pr|ixbxq1dl zpY*YY0VJcFz83XYw&9D6ODJ=otDra`b%;3Lf;W|O04iPf8VXmUuoQJEYZh6gZ-QI3 zS>DN@l6QY&&RebZ?#Pl;3HGC@M1wouJ~@S41Ms+9|0#G1DU1f){ zN4bB8!`k26j7{Q=Q;Mdbg_SZQw>V&}*%~AuJEb74XX>~Q;J1kk%bw*6;d%IlqBIw>yIK4-bMlE4 z@X2-8Kn=$fV+3Xd`T>MpS__HntPHwE)9ca3*K2DB)K5~WqJ^j{jTGQf+YV-~FN%Ma z*KFBdW0J1!ahj(vg189a`68KPqAvA*2{9=4-2`uvL_9B~5WX~#s#f>{T)SFI-INOXRx~Pa-k~y5g-a>7Buh?7dqBV1^BOX+$Hr&J*_-fZ-tcCxZ>tcUEm2>-+6 z45rpHDeo(#V)q72)Vd;SWSMu$HPs9I&Xd4NA?0VtX@2Flw|S;2p(C3tfN0E*IfcKDxH&G3%7U|j=YOnpHE{V-k_#rEr>nv z7z=I&sQ2KFi`9SDHJIL4A8yH9V|?~%Dfp0;e=9t}$eyJZt)^*7(}Fkn_?e?I7d`64 zNBBb^M|xDCk;-V^N;HIvM^E-@ifQ9pVu_Ij7VVr`pPUHUm3ZgG+@?1!XlxE<1K&lA9HfcEI>sv-9}FjdXu*nK@Ygg-R#Puk0N#W#1)s zknflxCshR<*wtW_-`uRCkAZM4RboS{`um=={fM$Is)VURr^Pi} zPejqLs!G2v3?Ab6t$wwspvbzVjLVnAcT~~`CCVHId5r5qA!gCG9nPE#(gnnxb8@)- z3%*t2r3`=BVC4(9)2v#XfhOG6)=lgllD9yQ(d(UFGJr zVWa?Gk5S9I^)0V20SM^DI)vBc`*H!nkK+jPLZ{3yCqChQ#)uLqu z9OQormK@fn?}fYlj4z+K?|#K{ULf7K_-@mEcR>w4L~CzbL+0VTjUECg!J?`J*xVH* z;rdL~^0;W78wpyam#H#`@gQ$NYg+C{7}l6%bvoayW$(71wbxo-H`Sa`aJwA~ie0NH zg3)S!VfV1BL+0DCCCY-tCHl4w8XJV z4K+dw$2S~BL}lCN%4tEeZhBz&!=e}(c3I-Rapa6oQw;YY-n!mg_~}7keS*5$w0NN48lU=Y^}GbLO~blR0V}xN*+lQ#iF%dYbatTLAFsS4C$v z4U*79+8XPqsAprolbrFH&O-h?sS=Nl+D>dVL6+Ym>oy=wrH>7M5?;-iQKL^5RjZ@` z0$>ibI!4;4@g{6Y`KrD{#wpxRZp(igxn-A0RdXp+6)jq_QF^gl#7c8T+$ zjUSWQ8D)+tr8&>qntpS*ab%Pt_S?v^@w`@0Ji5o=jz^h|@jIRS8PjlpGxwTT{vEb; z#bf0~xT-zHPIF2X z&~!)V=tOytUB`>xwJ$e%pU>cmJhS|{jO@r#m-}Y0{v7(kdy%^~1i2(P2V!Ixy!i8$9H8|XX4J7}!GLO)AFS2t86#l=gv0_&RLayD$2hhP8=9f@ zJ~CDWArdELkpaa;caYn1k>7~HChT*Z%KJ{nP<-(;Gu*aPdjFO*-`PD0*wk!J#qns7 zKW_G(08mr+K_Q=T!JL2oYZ+kK8Gw3eSyl^M*Y*JzQ^l6~YFlY!3Egyu+qoT52SzIF zdhNl&&;`;f{e!>cUB0yJ)pDm z;G%$id7##RrQ^hoLU$?4Pun5FF?fnCTgsY#nsuBFGXHe$$1gCy{6JunU|+_No5qug zw7KYsleOB%|95{n?0jN5=(i*^i>Hj!>6>cE`tvNfCCOBTA&Ai`a=H*!vLt(v+T20t zCYUP1!L5^=FP-El9L(KGj$$HOdpI#eXWo6HBRSF0Uz@0Vdn+~)QpS*tEJmqwGq@4}96-~?=t0oh#Ve0Ng> zDNnY8eGyj6LAiynE_^`-J*^Tsc6d$1uaG68=LF>M~~JYhizFx zRVQRDs!D&NenIr4>q3ve7T@oY!ugr%ud8QCbsLb$nD&<`>Xr1@7)IcAhp*h)TADPg$?6@j^1 z&D|S>xs$qapwa+-srhU!(u)_fr*H#Ar-#@{+_``M^XSd%t`JwIr}F?fuqwR&Z%2pJ zx$OGr-*8+QA;AfdpyE;-R!8a-akRFCp3ljT3?FoQpezucZmWeykvu^z>)Q;?$Y2pN zI&aqbb+ghK3oth;4KABd%vU2Pi;AG2b}4@uCKLrGvvk5=6~*U~v2JXE`A|uQ7=7MS-K9@p9_Uv;8IDR=s~r zvV^lrK+VdDi@DLu83z)5oI;`B+*AAj?I#|b_BS>jpFZwA?mbxVt#9@=*B^Ek7OFlz zez)`V+56+?JHNeu^JZ^!{BrNj_S3!NS8v|@a(w(_r?!MlGRI;6l0*Fr%}vjoMAB-*y` z(zZGNBwbF;%%Q zN}tqX^*%HKfKh}Dqj*EAGSq*RlrXaHC%{-ihjl_7DtH~e@k1-#7y>1-$6N}Q7#Fk8 z>T)`o=i|5qwo&{qDkiDeHXn-Bx7l~j?>o)eS12>gohBP+ST);riZ^>(p^7T3fx+{kWus!b|x* z)rb;>ey`jiw0#tPx10!lLx$0oiOSPVUB-s!>+c@3zB*=7mZhy&o>px)eU-!`jnfw1 z&NmMOm)}w&ki&pMSRa4eId4(a$heSu#+-$ymA$Y)@d;5TGC4?zRIUA0EZayJkpSQ+ zOb6~#%Gl#L-MoD<4cJ5Zj_<+ZK{4Zh;B15F3IVj(14*~W-=!s>un3GlF+#A}sc^ji zq{Z2PCa7mbI$-c=5?iU!OHp$5Zsf>MK#pkl$lHr{VeQACpFe-wS#6|)zGKCpRDp+5 zUv8X+nofZUFf+UORnPe?L_OBh{L&K>9_gidlMO}_8IGciap?y7i%m3?)(-}sY+zj4 zzu+Tv`)4o4-Y^zYS*>JMe0?!1PSY#`#tbGi>n8OiJ)R`x^rT2;lVkC=+sveHf=(e^i9pCL}G%iFpzr8*355}f9g!=cQQ`gB<}uNc$= ze&uXucE(TgbZKW)=$Ok=9VRm4jcy&FD08gFmt0(E+Pl31lsJ}G3Yf=T;NIN=9dklH z$P*$@xyW092VWkT&Iw%OlFvGL?`2klXURn}POD-z1oD6THGu9*{x(Z0hUDR#V-+Y9$fM3~Z99@I+l9@tVA=p|rrmwhSo2 zFS`{#$BTdK^ww5W^$u*=j04vKBVdWtTtLwhi^2<$#8M4ti0?%g@J%x_avlXo9*?G? znvrg=X`>w>aCS$#SS+CQN_I-?TArHI^0EhD>KZzF12JCXn--DK3)2`X2X~B}y zpzNx~fkv}GpBFGL>J0|v_x5won`m2SFfFx_a+c~RP1JHNKc!9KICAK7mY!>%{=@$< zt*U>Eav1%`5C8GQ4`~-D13Y;*H$fVIq)*WgKis=c7awu-Gk%dJV;(@+`}cmJjNK+} z8!eD%_2a$k(iEmHen?s8s)PzZBp2xqSNxYKZu z3&5_s-EP7}tI?+G|(Z_kGy(-jDIKU zU?}`_Oyz(0R01ky*h5#gI2v;8JED5VYt8?l_L? zVkMPQMxYW-^5I3aWTd$`e!zpm!wC?E0S+eoD0rR=qZt`zu!L&=&vDb$jtZQ#Y*Q8N zh69cH5^A)bulcDsp3Vt|%RqnNsKc($Iqcpf>b%@}4-`?VAo8~w2R+#nm>==3*T6?= zfMg;i07{;Z;qDx~+tu76V$F|!`-y5Fd9l3FdSG3U#t6bL(3P|Fq=p{5RA04~0WDo#mnCuz|Y4C*5q2oqumCDm9Z$Q~KUOsl5| zSimkGve1-e8g%HU9s_jegeI$w0tgFHq{g#w!ns^b-M%!x{RfK4oJ%ZUhw8iZOpz#K z*d1p@iJ5T}4l%~bI2?T_U}0)AA^0M1I*ky?oP^-II3XYS$%ubQjQ}W=)S|{DEh`!s zBjxK%jsw+@wBU|&K#&RYj^p?zqNz@)v(wlDkt4bU!5FV+61p_L%Ikb;=MYT*cO1|7 zml{o#~17DaQbM_%RuU1FK1YkL6bcg2&@29+*j|Z7^wmnPllijmSDGt)~q} zCQpRj5_Q>$B-)?oAS&2lBg$G_?p@j{ps- zLw8n_J8_(#=EFL;>KNm#ZBA}&%^bWX-H>cYcC&ypKX!kB!Aw$rgO>ZD@At{%kkUh* zr@5?FvXhCF@;>N?N5dfiVcA4^Kkn5*RQ!UNPwG)zC9D0b}%fei2-SwdnJ-jBB= zV6XZJ*bk2otRvXY>EBXAY@j!*R@xUoC?awtO9Y59pis@;rFoH6lFZ)mLi3M5Qnnrk&Q4)8)0ODVN&f1?Wm#@s6r6x7@gEwMZ>8cPnZWA6#o%g z3n4ZNxC*E>RpbZK9u_Slw{f7ZF2Wd~w4bA;Q(k{uK`RgLUDJV`0oE;mp#s1rf$7FW z7!#R1uCvETf&htJ@eFeq!coE|sPyjWjjRx|6HYWHaP@*TiV{ZjQZ$B7a(=Mr(J4bF z2jyWk`a|><9-kvr4ih-~7T+>ccq#!J_5`>QoEe*_b;zqzKFbB-ZLWaEaH@yX6pfC9 zB>sOX>82CH^L}r#WxG4P4@(r{2I9f$_uMkt81kq$d1pMuwNU>(Qr4SMCo0Kk*44aDVjjbjxXaiu_)Rpvhkk z!GMfu6~-?2v9>nuy1cm@SJJh&np%ZfRo{PL@rB?Zc3L7?#Bkh|NIz1D9Rar8&`&Y% zD~N7J?G0FC6~*A_CGRi%tx9j%D$9O7@82$*T`{5s*wLnR_H9<5!E}e+5g*qxE+wE+ zYS3%~2u6K1M2{rObOWyGFXhrNf`4-~)~RGF32Dp_X&}as;>BgM5nnE=LH#w^cSV26 z!VxtHx#~5#5&^@hW|Bw=ON$`3>Z+!f31Qu1F2%8;2d2iLP>Cb;=(;Vnie?*)i*?g8 zXl>VO!9FRaJSiy7M}ox2-gPd!ff6|4sZy&`4uhAy0QX_m56V!h7R5$o{cA$tS$fF_ z4iVt&nT^u1sp3@JaI8izzDShnG(mq~s(zsBhNf26W3hllN?rC%UPq@z2Uf%S2^EuI ztzE<`0G46Sv#Ki!hYP82x??R_I$SuKr#n`5>WH3=9_lX)z*JIm9+}hUw&1RpLFc;w zUqGP0oOMLiV|{WvOsepXQF`U`|8V|T=Y{N@#*g?KA<7cl5>}jINg}V=b zMQF*UsydEja(aw$+a7KrzK8Bo6bS>$2P$YhyvC(G26AJ(h^`k4_Hi27t|0RSj%lnF9L% zi|Z>oOzZ}rJ2-L|xVI_EPj$!t^}mp+*4_S{^%VVC3#z-)y{KjESXVqh`x}dC)mBSt zmh!#%=q#w+<=fgOrQTaGAwV}T7ALVb+7 zU#i1j&Xv~Xuk5w#@ALU_Nwsxv?DIK7rOq#DR-6MrIU~{M%I9J>OV7l>+^PN(2hN#v z@YH-F9O zX)BJW`B`$JX$E6R5cnLHqbmU1Z<=tl217w2w9&mnRVm`|D6PrerXuPbUx-RD3-N+X z&$H~WEQ)L?wQ53hQ#h1bi3HbTBn8{wZ?l6{6IHc?J5Ew@Y&6AW(J9}5B?Foz2YJ~z zRb^>@qwg-Z4F?!yIz;`8?X>N9)K*Hx7HwJa2+!Xj6SHqy3zMn$3+#kjm| z%=J5bI!+a;d9xIAO!H}yRX9t@JdFR|TtsU~sVy766gj5-xN}~hcf!Stqr-fMC4FO| zSTb|*k$X6Jw@2@~K(U^GF4(sT>cfsL&s|A&k{mx)))g@B0$6*Y5lPn85-s=;CC^R$ zuev+iG~;XcJh=$2;-CB$uR_Wj8hna>3a*vW*=d~t4GoNcN3x8c79n#=%s5(aV}ThQ zWFWPn1bXhtML&xt#hBazkip%N0Z+E)?~^n1;0Zcent$$u?820Pb3DCJsZk||K+9hM zl$*!n^5Q{WEIT;&tKq*L!v3NFe-148l=G@{ z^lwpzjLcS7$0CJ)6l}#we5R$@gOi`)-r(fH19h?9$7hEpB$s+m2LKqvuWM_;>ebE7 z`z|&gI~^#yG#%n|$!dMXi|u0Jh4hOS6@$1Juml$86Tb_0jCL!-DF z+M|flK7#?mx1@yOje+1qRmcvsQk3Nz#Kk#Ur0<9+ePx$_Yim0wc4%x1y9}8g0~!?| zK7hp*&ciz)y9%wVB9CeioUr$(aoB0mNQet}f}^=rUGbg-2Ew%W<3UdD+rWCrE4%V+ zG{PXGE4X+c@f^edEK8zEaISXnjAQ`RQP8;rzCDs{?1;{;$0(@Fu!Cr|CyXV|bS#Z? zCM8}I>6ayc8afNv>RDF?rg%FejS-(n^NMq2NP8-7>NzZhk)5BR?EL)Z=I|&yGxj~^ zey*)epnq{mwFo5*!mf~2PH?J&AO3xHMa$r#6=h|mB{H8dI@9?ND-Txoci*q)rjgdprAoJFnmGJnu04o?Ip=EfIcw`rFgp zy{FrIJDo)se44>Q`!qw_oKWg(eoZ_>tnXT0N!e(es)$z;t_-eFnHG-~>@NCo39Ct| zg;`<*OkF?^vm%{r&(g^mA9m!=PP7^XNgSjx6uIIjpVKPT>19$A7)AU6#3u(LUDQfb zI59?l=LpPCWIt(9cA^fn+*z<%j7=fr(g;bP0sbn^mHDc43`y(~H#dM(0P!hls(GR> zr(~Fvs^DcQnW{wvO4HbczMTq@9FByY$5(nBpW;iBSYBzP#ns@`uzMlLQc{8)s2twh zoI#;*!Oo~Q9Tb(@?vozQD`8h;*5y-U5kHZCFH`U={^^;psEgw(G{DDZDQ1{ubbf`n zLE6=_uW@h%a2pPi9{n>jdJKoHV2x@7Nb)@Rs26eNg2uQ45cO)&SxGXuM3ec-jGrNZ znej;%?o6H+m3}2_lq=O0T#@d_kUc{g-PgGWz?k(A5Co0@am9Q2;m??8Azb-j^*um; zPsC84hVNAjmrsW~M~-azz0xkihaimJ$M_JXIwB1=Lc53U0D>_s;kj*Z3crZ9@F@hC z%ihGnOP29a?qJE;XA;GqC}{X=d@}3`!yDoE8BBTnQ--@V<+NWSO|Dw%U%NA<2)_`} zy)(ob36v$9YzgwOpjV@43)z&15j4$zDjbU{{7l9gYAKBcvE!Grdm8_|HHRbGW4PZN=j^xN z$Ixx3=~+FKzk&KK`GUQRUj@#8$V2u5Ux~3>Z||9Vqqpl_a7}of9NS+m@H5;dGhta0 zwocr~k`G=uRhWvcwL6KXoEliLUt^n6!hOeu!ZUzvPI+)G1_wuTVfj)v*ZbOmf}H~l zD6nG971s9(DB_~7R{o6!_;0xXXsOJ{=%(21DDC2B*f|*3f_+hA`#KMQ0P9>M=%r;* zaU?QjY^0*MzDP4ZnvH?h@n0c-Ub{kNF07V9@$o7Ao)Qru;&@%aZ{Lk2p3qBySf6SF>ztu- zQ{X4@4G8q4yYqF-FDPWxuV_^Ed}sUMWxTp7pQxq1;tWck?GUj%p^yGcmH?SSbc#iM z#5EBTqgg!eD>d+0R-7c+d!WG3Uw&wQsu;BBQbV8cA##+*^jbWBMox29QxO~t_AQS` zGjFnzhP)`QTeN?fJRc?U;8H$79)^OEc&a?x^=C1PJ*(Qnz9J;MKrlT=r>QDBUOhjY?NRZT}s@i*Z?^btNMBXzaBjb`88F>tX z+5^2jNUV~WjfY>^rflj0--lWym+*5&=-E%T%xEtX@I%OFD(B*aMV_xZ; zMP+5g?Nyao>!@4@QnB5*8DoO_UQFx-%&+^a7?=3^;^)rvV#U}*8rY=qJ3zl`9W2+$ z0-zAzl~~(CNwk$YRT9pKrtJ1rG5zda+YS9d15tE;^2Hk1bWP${v|%)tw-K(o8QAq} z5^ZCdm7;WWPPD7yEAU#JO%P|Br4{PS5Lx1eiwb$Ox`Xyr!#uKV_q*dOXaCC8uUdP} zM*}5{RtpJ5jvCEl$P?ut=7RLNA2QBcrZ>Ji`j>E5JvhEJm(7Qd2Fa%CI7bYPa#sbI zBg1Nc^qw;wpC(Z*oCH*RhLoiENTZ8=Btp|!L*9{_H7Fr*h2)&^k2~i-LI;ZrIu6_zwrG4{A`RMIbGg&jq{qfyisW|Qs2p@eETp4U0 zRZ<@n$T9VS3CB$JVc(_VMhK(x;iq=3Qd%Oj}A9NUh&j>NA z1}(yi4jw^`$6ic(a|2~kbgyoepEY}p37&UkCCOVr1p_bXZ6NuJW_O`X9^y(0aq$k8 z+aCco6K*-KE2@G1kgh46HM^NI5ek27Di8>k+gq2D<;NvqJ>G$tO&dm&yUFJx7Xj}V zfX74U!KhJOmdp9(9Z(d!23THy9nFg?pLp>Q$m0-Hx+1E1BnSM~D5_)fF_I&}UmD+J zubz?dHN1@HvH0@68AP=porf?RwQHy6>e<P~1q`)Ia8f(Vxy9QNOT%E+kW|R?#{e z1d$BaK)ts`ECT6;n&R}s!)|lW;(q{D{o^SwETR{AdS6ObLu&ATKaW&*p z!NU&nefUOs)3>>k6?Zu5lZ`tQJdc+Vtgf9%xdZ{XHy?Jer6DxMub7X2gC6^4folao2Cqr z5Z8m=$AS&_aH)OlQUJKTcpWRw z189?Yi;e2n~d|nMWu8V zS*UgXH>vc;TAeF@vc+$%b@$!gGojw{2G{Sc_{sj^{=0puxh~{9o6ROG63zf69Nf;> z3s(=7pZL>LPkyrd<~bfAA0~t0%##nlfBNhlhMzDbgbe!!yFVTxfEs(a?XnlLqhze~ zaII2i^YfiQ_2lvst9$7$k^!wiN~;C2>O-vhFceRz7aM4Q6Z&#RGm2uHOWcI0Z$Xgp z0iM@2D-~vUlw>~lv-Yct5Ap8WuP!!B!e7@}n$fqPK@ZLVG^+yZq7qoo4G**KPQ)oc zVW$+#{;DBs=!8WLpT3X$)OZc_2e{4AF?TnGf{KsJo*!{>!8g~S%AcY>GRD$eBN~@B zc(SRRuGZFnEJHKo%An)3Q8Ua+dY8;{4Q(fqo;*nLRsj0L=%3O3fKf<3th%|9lUtH* zvh4CA@_f{fPJO)Px|*eG?@uI=>1Bg2=UG3RHu7FiZ2J1Nr}9BWVP{>-46gi_d9>qI)8$gzgf8GC{6H^vW9LThKG~Zj~jTN9oCIJoD3& zXg=p*n{*f>D6-XBFH+|8rM1)ezx=9-KzAp%DHIa${E>0VA6x z0W4;JWpRfpK~|WGbta?vEUF?z8-Ll-*o zc?mMifZc=!Wr%r;N-C)LBN6JBW|>3{1ML;tuS>on-?+vrsLSlYG<_4znrEEcR4gYmw9 zNJeF`SS%J$vBJdcThs3GLNT;83pIce3kzl9N2U#sdFKxz0W?w4V7KUTU^l|30!=ya z3s87p#WAX8&2QYu7G0^*Y7juA`YZRUOJ&*+DbVSLsk#<3rT_iE?u45^&loi<20)w1 z{OrXql^y>J-=Ij8Sq7oPSfz@;)Wiodps&aLKUUyd_)&M3Nz^<=M1QN+J&(s zicH^7v`D*{({&D($O1y@9R0A0#j6MzEhI*x3&w(ZvJeC5WZI5*%rMo5!ciZ8uNMTv zS&p%?BEO}}mH3n(L_!I6uO~%Cru%$E{jFk7h&##6Ue9SOBhXN0@5duvH3d%==oCvf z&8`l_fo1tF$!l5q=p<9tU6y6y&+`aYA2#Om`&-ZuMdLtbCqQ7ZMZ*EkKE>hTNg1o~ zbn3^md^V0_f7DO#3Ji{Dh!?ScnhM&2%qQf>cHyTfFT!Hk15y|b1)wR&&MuXMh>Phw zGmkrAg-~N<#)R`6c<>PYKX9lEF(~#`Pt%2Urz5v11QAkT2l6NdhLG9$FctND<468iv( z1T&4paW~OUGmvud`#Z)vD5|vP;{kSPO9=crz%2MRnT{_&CCB0ztjY_CLPhmhUL*ND zIKy?)#q+izaDu%ed?@aJq2&{(90!bEi|SE4=OD`IJ}vg3{N`yaG=!>i@*s@&L{_4D zJrMXW<`LbYhVPWKY8v=G`46uRDmByGqYoX`S0&5)u&>S>0@ zTVs5lkjJn9u7I+@^CEW@bwUNJ@C&gDAzM+~lD!&(2t#X**1H%*>;RX47w@P}6b=y_ z!~|&)Uvf)@(VPN*EO7}I`HYB)+>?J|A6@zFILnae`lE~aAkW715GHgn29hX5os4iS ze7d1V{zarIrz&s*i#{lhH3V_&gW}kAKkN>D;8IvB+#?V}gHNgUKXv$bL2HL5Vdc90&<40#YiWKuE13A%`Frc!?N-G=Y0Tnh=7tHSX^vVjScEPT=|Y z7rtvW9%5@@NWYfUL*C(B3AGgg#UmQTL>NfjEFE~bZOxtayo5 z$T4L!2q;B=G{`OxU6KlquL-}3Vyi=`*rk|OkPVpojl9|8bi~J0jlStpF9lDtf@~DY z7*J{yf+vZDL|LN^Ynd1+!GlVXKEM=+LG<29Wl zbAi^W=gYF{qsj5k0R9jR@PkMZ67c zT>6uLq?=a{a3_U(-y>fMj#+=`Q7`_CGc!dIqS1zw&JQ=_ohXZ1G#c|AohxVSk)M>k zTI2%*BKMX4rdr=AA8OHp!#w5amGW%8_BYDGri!+dpEpILwe^PhJYsQgqL@!%UcKG! zb1XaMnaW!hm8p1X#&Hxy$`fFx%JXYHp4Z%e*(kYI_f&)K#y9w&QLeeCyW%(IxVaNF zq6kF&#uH?gz<(Rlh<$~P=W9M`5wn}h08;Sz(i3*4I|Ma~LuIe=KrgndPYNS^?V3C9 zI|q%E9wstjtEv2q;XaD1$o5%W8et?Z!U20NhBwO7xm^eh;j-}nepVfZMbWCqu&b+o z2cMeT+x?Zy%qLhBtvUsRn(_L`QLcOfV9{*u$1$3m&@`fgZIsRBOVr z@Yb9?iH;SYRdkGjs&I_UTq#~gI6Y4qSP{(=_U}j5VK{WlzI!%8LQXrB7m=+9|-m7DMG zJEevJ-B#`fN1t>`HmlWSS{IN-CaCd83SH{&$SVbhi|Nu<%zQ zpDHz=b$=*#*}B81e70t?@-WT0G93^3BJvf+MMu&65T~ts8Y$}#>AqGtkc$cJg1A+n z^Hlqkp99O+00R~YV0&@LY7*7BGnXqyV>%kd=f<$^pl0{B@rZCSJ$-(EkUt&Y^@vcY znjIA?eZ!Ln)A4+QB%I7mpzJgWELWG6gTjd{J~9@O8%*{Fj;x#*o~!HM7?DMG7`teb zy!s@_1@~+BU^i@DVh&yKJvka{#oaOxIH(KVzEL>ND|TY5dst749!TUKtSdd8&L@+o za9N*>=)HtK9b4DD>%BC8>Kk+ZY}`k!joAeL2)NVcPG*Z606T>TgV@t|;%|%io%rFy zW`HKPz7`D8tTBvsXN|b_*csXwHjVctn0`Cco}4H9}qqS~$B-mV=IVdCQxgPr=lG#W*Dgc_ggs>*>T}K-r=?5!yfnJsgC%`(68MwB_~bN-Cis5O3EK9a z_%W{F!a2(y{VE^xm-89rkl^&>L{?sho}uf?q2aAvK`Whw7FJNTNL~}hAyYgwDn*D@ z!PFm(xBQG{f6X4iLsOKE36)op#49ClG9u*JpTj`Ocx^U++{ID8p+Oe@Gj$OWIV3kc zFIB$%v}fQgA=#+EX7#`TS;P10lD~9NJ%*Jdb6TzIk3Q4*4ho;Y1mi9eYqT)#sz%`} zW=mWf2j$w>0%5mqc)O)h9hFJp7PD4i9QnJKAPA0bWIrQ`4^5Z7YTuN5L4(9uyy!G)qtj~M} z9X{_rdqrmTb*Mar5Ie>F85Jk-%zR7zxjb)Vbv@;Ob*0e~&xH_9<@Esa(m>iS;&L#? zTVS(DzPh?52knudCCws|dj|le>+V9yPhP#)WA>egu*lH&(SdS_er?Fn%aU1U;`^)% z{BvHtYH`L;fS%2%Yd8m<-@xnQA@l6C)nqWFQF7p*%|i3Ch@>!3b}Le zer|Tfe5!Fn)s3eREKCj3=pj~eOm$MsG=6;fy(3x63qi$d<@oUyo@ z!}g(yNbV=DSedhAmXfQALKHoXJY(lHS{Vq$JoJoaQ3=k#9jYyQipm=&WVlcZI4-Jx z^$JtD2BJLjw$wD*$)g8|e??1!aU&<+B)@u;MR&Gv<7$&rD7x1(o={cX-_&G0p}J&r zQKjrN^g-M?zq)Fi<1-KgwzY%AN7-x8rNkZPm5j9fccR?(;b!#XC{c3ol3gRo`q|qm zAmrz>@A;)6Sj<1;r6JCky`Q@U(`L(mi181)Kea{MBg;n z`~LR!I~aW5Tf+tz?50^!)-qPU^R|?q0sAgXEa>+%bh=SYq{7k*#pe^OW8B?^wXJMw z>H2!#-CnQG>b;g3m8hV6KwNlMLZh)hzP{4u@4vhg(raCP$5Eri#f=Y|iH)LvJCp;4 zJ`llDds&@P$sImOIxDue1_pI~&u@f-Z1i z?wV+;5-LEHXl!{u_cUg$QC)oBTJzVlrA5q<#SWJ!pMpTpAA^$QkL2EMVz&2GdDD1` z1G+6EEX+5!yNp{8ZyI>uzN80#h~KPQq#xzlk1wCUeD%{yPd`TIX!H%bJtn+}HjHbJp))p1gkZ>gk*Pw{JbG$}B{q{relVe}5yG)_?zN z2J(9U<&*DUKBd0%ZT8ivpvNCy~vk1+UNfWfN`FnINxhX3mMN@K=a zW4wFjO84rsjf37W%@lQb`06Jn<@ea^9l#^s<_a=6j!z_ zx4IB-+nal0zCAbW>5IF6?#->%ziP|>N8y>GjT=R)+e+{Fwh|U>R@*fBnBUspolNjH z?B~X{dv34Z?RKSlW_ojUz_xM8p?oeH!M&*6CU}tdipSwWg~c~sQ~J$^zUjE|ne-kQ z-Mq+yFYEBPD?aBdo(@;X_JlWtY?+O(+1cE9bM+v?P zGC@=MJwwlb#lB$s^+T1)9Dmf{=PtQ2AECLUk|!5YeE`A}$gJ;iGJrlqXXB!?rT;0v zv>5GO#^cfKE!MWd!klhZOwK=c{biTsubm9#8zv?e#z~%syJ0n|BcOR@)7#tEO>WWs zlM@`RT!YH72$%z-^kbbXq>LeG=6&|*BLQ1X$M`0HTLJP|oRSh`83!4wOD0ELS@AMk zX{!_Wih1qIVX}}{U@_p6FJ$9ZxmA`cy*8cs_NEdj;}t`(itWp z9@*38m2&OO2qQc>p&P$# zImOCJMw9uhr2o{-{`g#0rXY=WW!@m~UO5J#w8b}L+Xr}SJO+F6g=4D2I zt-v~+`oZb?;#k4NT_B!ga*mdhoPqo$srqprS93&vj_|KT#GyK_(9uj7%tc^Xke_5Zt}8 zpm7@*HqyMKYfz24O|~i(q=`I#^1c*&hF$?ex%x6rqx0^Bb?{L}mk0+WbwFf*_}=Tu zK+YOKSq4pcxrAzP+j3AY&5d24cfi6Mdy%gr#nF2AZtV~H&LU(u=3P53Ey=>Qo7VWs zI2v@2zkxae-VyLO!#zF4&7jrH!f?)rXpsM|uRbo9^stCvwGOfg(>efuU*{RhQpheQ zL#u%IlsDE;Ik}oPlF#kuq;HyU_1?L(qagl#N6KAs|kHP7to?bYRZH}Jj0-pm{vi% zcRl{!g*g>Xt3d1v=JbhwbBE|05D-u9yJvT0S9m3NlTdWCOhxUVoSe!vq4e%*EHA%U z(_*g^l+Jo(xxQ3>sVb?RWmu>#V+#j2lfDZ*)z+2QhNre|CEZ}n^@eWJuNZQr<0g(L z2cjt2bA4~Ds47p$QVRuc`e2()ps%oa;I3!Mgyi?}=q-Jg7`}mj^R3;_zyr967gX4c zuR{f}63$mFeLnzdPw-ii4-B921Phi18U>%NWW{B0&Mt18Z!ny1q|6%aj9a6nr8U|a zQp%&V(k%Pa$~_BMK-i5>=!shZ*R6s@PpE>6m{J)N%H8#3neR7Ug8DPc@kjw``A7i}tfN0Q zwk}^A%gK53BUcud(5Kg9vKo3aJ{xuSs_+Z+cfMbRf1GrG`&DR<9)^M#ktEavm{+iL zl3A3YX2mR$p3}44f_8;li?2rM=eoYSu0Z&GCc><3J_^Y|9fl*+!{ahFE3W-CPK7_wNcj2@reVn_Py?%JPn(kj>j`}AyH;Rw~9hDiu{GS5CUdxYbZ@c#U&pBE=?c z7_o=w656P(v@DTnD0uSdr|)P}1UcR%2Slj{0sJ$5Gx6%`!C-@rrb$5(*^7SyHJp^x za1!%-k*}$}21o0ub};ox3E3d>ZWJh~5fulP38Zg%J-wX>tCH;*g^8bz2Zh9vjYB_$ zf6yej&znxIDw|LQ7e@+GmMXJSpKc>E(Ok=059&3ZHtRRX`h zySq`#ypH^fZL)Vj>-!7Gtn@&@vGe%OIL7ucb3`$s%|Ius$z;1?&GjbUgn(=y)9xi6cg=#QQH|;X7es zy^_B$Mx2^3#6JXuEb1VX8us`DlnaC!iIWpLsRA3(Zx<@xpz#~hU^iaVrI`Y z{#Etttl0Sc)TD8Sr7M|VCDYYAvX}@6T_=*3fA`iOdI}_6{cp(ri(6r ztkE|p`@ZX*Alm}0Z~9@}n>pezzQHvPLs<#Ca%NhZ@9m+nFj~*tg=!29_-kpcRtkSj8~*5R)z+MrWNUU? zH6c6xv3cE^;ou(|QXLoa*)0i*Iq=7S`0&D(+M45=8fI|-BG8(2o>8e@e$_*JNaWiL_{W zdRDqA^^gD$po;vqZMwxqRp-HZxipdtu~mf9ctrLgB%4l{kNopn=oSjs7s$z?>7Dtv zP-ab>jeEWCjN5iEY89+Xv_uc@x{pz-36VpnC@21$Smq;P+;_+1qN>H8QIJ3bXZ8n9^5 z5qFaLgXj^^-G}E{s(fVyJ^1~~)VZyf_qCzvUqhJO^yAZvU;p^-Ky812-TTUlAU70* z#3b~-p3jp|)lI)|#b%^-bk|XB-R-M=%Qw}I8+Yt>92k)uVQtXHDEGd`XNbFx9-W+FfD+gn%*5G%_q7fI{AZhO_zPI`HESFX@dx7(#IZAc=&W7jHFQgJb&KUM zjeU z9Yt4wY3RCZDjm(~bPUBnf5duAF@Zi0RRid90OY;Xu~k>YVF2y7+m5Y5c8GCo)56c8 zY6GPYR6|#E_@i|k(@{*#HCn0xKUTY~w16w9z?;mL0^_q?_||QIm!jd1>jWb*X}3|bkDG`do9;-71O}#9L><(j$+uFZW(GDn2*I%EL$@z+h(DncQ7W? zYC{iAU2B`Jp&C$YyQ2bE?AUHg1yDFc8ZvawF3WZo!@Ku?+|^ zR9kwgnk?AT2`*^|`fpjP=?)#}lVh|4kOS-%^cCRJHaj+dK+M){1Aa`S4a0V{4pfPS zJMg~+jI*Qbtw4vVGh3#K*wWH;!)ZfA3rA;ZfMhMKt!0}4N=w%}2yESP9JK|NyMUu0 zf4H`V(`UdeLt}0Sgb#>@$~!28SO9C7ZRji@AYimvg+IK2#RLTar))QMaTEaD_RxW8 zgVE@Yi>m^E(9D4x*c)gcb2*OEVHMJPuoPMkE$BDkh7AQA%Y`mk3?*4`sA8?Z0{pfK zfU*HD7QhF)V^}Td9V{ESh0;}p0rjF~JvWD4! zIWu5k!z!==s<5PN9IMl6A+90n7T*lVOSr&H*d3sM8_=Vc+k#=13m2A5$FwbI5ati( zz%CcPKmnkm0Fe~ZTbAKML#%#RGjT$605Npegz8(+HH8+3rLK=4`yJJ{ z`+*wAfg5&$jvbl)J#W0{jsKXu@$Z}o8vj*)nBYCPyXSUy<94fT?fDmCYe8UJQPfxc z!17gCagN#nhNil0BXkWtj4b_ku{GzOt=+S=dzJ5A<+~RAB`NB6+EL$e12yVHw_&x# zYCE!G5V&KbAGBlNHO;RJuBjurhX$Qaig*KbLAC9n3d^PiyrvB}&}jjK>mX_(X$IbZ z)Is{*GTQdA1=CdHNI1zk3&K#8@{9Opr`1ZU7@`fZ>^{7(IwoSe34NdeyMPF(Yik|X zRV`x(SVSwsG8D*tSMBA)mm%}*b}M$QzNz{qfYlBRU+tTEOYKLX!|0J4_@R4G=I_b; zKPH*~JE!OWMYWfbxR?P@=1yd(E!PEq8Pc_NwG#mm)LU*CI{kj&w_5+WgnN}j|MX=j zbidyTUEhyXP>m2Iok;bq7!IcztF{4$t&U^2g1&RlC+_*gKPI2}J7)<0MJ4%r z%6~V?ze?hN_%b9u^gFoM6{u~0+vuyd3B;*wIiLy{QLAr8z8?Fn-$CLn_nySxllXg8 z;9eED*$m6VEg9QXtQPfVbzHc8j4M;+%T#5{)B$wW?ebvSVF%N|FAPLivjbd(kOC$| zr_CIkJm4CT-Gov|mvvV`1hY&P2GDZEv)MK~np;&tG(o_65Jnxh&5~5Uf>pjUvFq4_w$ric92o$Or`jeRA6xAf9)jyoOA2ej zbX^q(?z96#gN11UOaLDZg=kDiC1PR-fgyv8Tbo$hXt7gxQy~gQw2$!n!wbvNVRqXJ z@>nXoa%OJ*t}}D&jBfCMV{_-GV{;gh(YD$u9$!ks!L;r-@&^`0JXMT5Jeyd#W&tHbi*|rh3 z+mQ<&tys0K4jvcjh8hK-VYPL;ZM1&R*^s6GJ#e|dE7JDQC+^>W3mN~ULdGo^QWAse zmY{8eR2|^@=?Cm4L_0S6YS;;MH$sZkqFaIm_2BdcO@x5DmY>M;+_nv$boT)b16o4Z zvUFUhn7>W=ffMLv6}Dme+Ij~CbmY+$9dquglKkllsU&6;w4KmYjQ|kOHho*|`(a;o z!@y}fffX4}=bl)9-^-zQl0)yQ@;@n6zMlNTa<$u?5MU7mHn+Cwv<)?MVl#@vsO4Mw ze=7N1rL#YO89M9sBiD*;z?|3z{ln?|YNr(e`nH^w73uxZihsu`iDj67A9R**vva@x z|H;<>o#l25C-46L*!}&n-*#I%%D#*>YY?|xr%&7ph_hjTIS^&~s?~}0$ZxwHD~j)l z^F49?$0W}8RQR3>|F&DavoAw#!yqst*NE{x7wQC{-TFQ(7NhSPZ8vBKeW(3jV9(*6 z-2PLN+q>>i7T9REfGo90&9$L7ZTd2S62O;PkLJ$jvB`uBXmup73;stKJ}j4+;f}%eBu5-maW|L zkH263aXq7GxuM;`%?$_8ShXFek1i`LH3af#M?emMYy4g9#ZRy02#m(xiDWYm-av;L zNhNoGz_2{p9Zs>sD9(Ai)o1mEzN=qXSIEgevxxg~lpvhuc{F`H@q_5q=*K+zdTniR zIzNOq-|Nrx3!dW%+m%Sv#$)j+>@Xw_zA#j65vuNg7*yK=RPEmm z)K(jKLm!PKafNZDgut5IW|Xg&YnuO!NjMR)Z|-k+&nNuH~k>RjRp2 zCIPP9E`wFgh&dp`VWldoQWdjgY+>AY_{(+JVyMxgP=LtUu}sDlK&b5C4mgT`tC)>^ ztH5^~6gR}*7Or*2Z8IWN0$SP_BqdlC3v1ilx6 z??vFR?nU5x5%^vNzVGn82z)OB|09dQw~4&f18r%B&l%6ApNl7r({bRZZ)f8vh{D<+ znteZuFv~K)$H^{*S5BAJldMU`9xKLbYUT5yJf!j(gkoo7Oi=vhWg5+Yq`*rW)SKdE zzqowWp0#?J&-_tHPw@rHa6HBLD7&HexDnIa?jd_OEiPVm51UN|+P`3#@ZmRn3NvV4 z241L8kA2Lu1CninHJC}`Sc;ojqq&6tvAFM254tIbndR!*Y#3#zFL;l0e6n!l2g8|s zbwz=hKahKQxAv0UxAI(n-rm0MaXC+TTyA@N{W&?gF_}hjG|klj-?vopSxJ=rl`;_x_}uKlb-|6zreRqUngCMb!8%)%ffw@JW+eel(STgcaNK)3omgrw!kG zjEOXn4Zn$x-d+2+U-2~GH7{>}okcVMXyj)ROc%nE0aiZ#y1Cc#3O>;{fMFSt-!qxDp*zS*pa(j`~E=B6Ce7L=cv(m~>cPUbD z<>~E3+?7^-xJ!|GD}TJbNNc5)Ki{QDy_G-RR%C7Rf4)P1iFzARc3X*`S4T3tOObjj zqfC5A_jHULlOcTKJ^DZXCI6=J=Iy`ay(7zZ+}80Ge*e&-AFKH<{YQxwoku~VdI~h@ zX-CF!@A4F=(?yha69{S3Xp;It)OhqS`NKy8MF#pl8y}9(qUoNWM~$Y!-k|R0TAn75 zFFDeWwKN)k4Q4~gIZcpjb%`%m{55V|W%(D;y->egkvMCg7jA4Cs(Yp?Kz^a^iY zJP@5IWUJG?EW`W}X@5Q&%gbeRW&H2M#w8ne?wNXjIqZZDyY^bJ*lHpScA9nbjCvvO z!idVZs`HhuO zO{pNpOcyZcU0%gBN@9>|cqjqhJ}Ux!e>Pi0)6}2GVpNLn$982QRaVf_tIQK6GZ5Ii zGDcE=(uQCj0{cwTyoiR0odZJ3E6I>Bi(s0IY@_jPioIbWz~@sOIrNy13i9{o!B7YQ zZ9tO0M+tzg%fXf>z@w%B<}zjml}Dq~)SpZc3RMPd8MxPYT4qfFH~IHc`7!h^@v|%c z^8fYG%#Fk)1VC4Q0c}cbh6(;%`M@7eXCyU2Z@V(Se_0GbOip2DU{1R7JAZVF$sGLO z<4-dCR3F5*K^+fpZZ4wv03m{a zSiy*Qzx)+~G!M^NoQN53`B#A*G|^J}%U|a4ti-*2`~kuVFoV*|iuxx+{Wx=s3Mh_0#d3_sY$$?6b$_KJ$=Xj*4gnNe?DxYIs#QC&4Sz}oYn#@j)6keXfZ?J zox}^4VuV2GW{u0ibPNbYq|R0rV}M`cJusA0P%8l7{<7?J@%r}y=^dk5c}3Q^@nu)W zhviKh{^PTe^yFYZ1-Q=kNN5IqV?07!olVE55hhc(ThGOle`3TDwA>=*Fd0RG5A)8R ze|8sQ@s0K}TK1=juMU$C6&R$A^Qiu?c?Em(egV|M?#nwlF^oQxq6UY$Y@xQGj%|hcZ3Wqjw8W;EZsCT z7_VlgkS4*uMO!liUDDc?s<|zRb}KXoe}}5+^G{Y*<%#bNwDz-AO}7`CV_#c(w^kbe zbu4YoS>~dtp2?7HEhHZJJP#f2le6 z|DoyQkHmlgoxpaWW#`a@;_ZcTmlE&MSg+xm;e_H^X7S?MU0CS2nAcRKHP~64aUeDUT*3mdtV;m+! ztq4~G%R_{X72vG-26V7hB{uvQAPn0uJc!b4JaB>EcE^Wt zOZbn2(}J{NOKYcqf>4nWXgaj2w-F2)x{k*7UCo4QZ77CFqdQO;UQatTe_RBN^$eeZ z`5@QV&+xYOQ>>cJ6rr|$pp%ldX9AEd$&}Fc8h&hsDQIfkrY^Q{cxVqT85O=5FbEhg z00ADmfA9@}Hk>a5=?q=u zKsSf5n0#mfTj5Re5Vq-JV+eec$TTc)qzHIc2gAb^Y|-ohz4aYia_q7%ofeMG#=an@ z!M>!pX4Rr21W<$jLzdw9Hh@Jh0PD1AW-JT;V{xWNWZv0zVd>#N4j~(Xhh4U8_NU;< z(1_IjkiiHk2XB|ae^5XHX1?P)mgHC^rr`d$=2!t1XgkPT0JKD89Y}C<>>A{<*l!2@ z58>rljBDdnh2q~3rmKS&A3C;%&W8wzF^7fA%WeZqh=JNRA}ms42bM0h2M7azg^5NY zZd1bmVRx;Yh$ZF=bo~P;^vpsAL`LZ;+RG#A0!u-<-;r9He*uuUY2NUB6Ed{hhfosc zc8yeKzgN^i*{L)TK>-auQ-2mU08Ly4|1_mM@YATFYpqsO5Z=~lEv(IPn9mFzuVVon6HIGpnkWcdun`Mmp8PGvE2;g= zdfytF7nzAue}b|{>mpMDIfvLhP;NlcVP|u+L(wZ!GWgqdF9X^IL;{HpAOgS#Fw4a| z7!*|LPDjgl@4#{gISQ6p3!tfM9Rsggpw!p`Xaafybaft4rK^;VWuPn(V;5;9P$OHy zb%!*t4H=QGbfA8~ORR#jv|2242T2$%V^}#r>mW0Ue@m-a`YHZmqCL`I9Yz7G6R3km z>mQdQ{tf{!0g0p>Mld&m-R_!$zK)f<_lzbf@nK2h3RrA{1 zXzuVH1t`q5Ns)LK{wBE9+X3Mlh>S%4UzwN1-&W+vsM-AXt)qSmV}YLpd^*2t%LIIO(=LWy%m&fN29JA6U`$@ z0Jy>eI37sOzz%?nx6sKQ@(EzLHp;rlVXYLUL7g}*F^^7wG6IV9$UBGwK#6Cjv4ABt zRH;Ie{4J&pv`Ac`Oew$(ZEjG4!aID7^L5$*f2jy4{X>NoHbq@{k3?AmjR)(jRAEZS zIuA)2?`Qx)RCshlDr)QqxlvYPJ$w(94cUMVkgCu_F*fNGIS!%EK#r`G#%mn{o0QNS zMZlDwmPQY<7*f&xd-DS^09bq|5?MfI3>bYD)Nz(WRo0%Bn0!M4}NQlv|D)Cm4IS zQbW;gm5=H@uo-BwBjGhp)SXee!3u$Cs&>wrkTAeLSUhVJJ~CUiPylnGeig?K(krZ& z96wNv!vCu*pt27{Rn=M{Y3DbQwBNDLfr<|8g*kNJvtJ9v784`~WUfE~%=hjye_*6A zuPDVB?e}enhnag1QV&QB028ue09w>Dhju1bMT(Q@%Kjkl zdh)w>1^Fi6&D(T|*q8p7BBUURwU8gO{U05{0&+%55;KY;u)Zw1e~n5bQh5_qHpb}@ zVOvPAbac3WXrRj;;0Mou;<;M;e-J2@)On`AZx1cpmXb`APyzp}g){8nE43Et1P)04 z4k8#JAutuZE)6VtZ7#mh_>p4b{3D;hVZrEONh4K#5BQ|D4h^LB7O)0T)L<S867E5nHmEqbJJjkhWxYij9@;>uSO#CslIRcDe=8-^cwaDt z_s}qI5lO}&Nq^8uH?8_$1Nlc)$YIMCDIbt!G>k@S3i=JG%5FgVJtNSJ%0hn}q8&E$ z6@EbVa*!Ta4m1p`gW830>o`Ed2ne---aF5r+#yUKzy>u3lh_W-ZOc3~NnbNjt_49^ zGTwu(VJuoGlZmRj%0sXof7cW6AC&{)3~PZ^40T$dmH>dAVrLSlvD=o4-A~*MH3B4T zr0=ObjqRj57a5Q&s15iORp!93Kzac^s{hnAE^?DWWK7Sd)mZ5nh&WG;O z-X2U0?E(N(GcDr0F!!J>m^fJmayj&bq(XL7BVf`tdQ)WIz&Q zN-b2L04EG4G+7SS`{4zVQ5fx7A%HUOe?9|Zks55D%yJk_f5*<@AJ$>|!uUgy`GBxv zQGd0U@JR&xJ*sI7&0PiW*%v!uGH6eks0iwior`O=9Ux=2cKzv6p)>)hAhijU^@3Ax zI+x@8yU=#n5#(v+Ic|00`H35Ma+?t)IOZm0Gu-CUo61qFgtfQ_MpMaH#G5E?pixFs z8F*x(mub8of1c-I!qwG-ZSz}C?=^zP3z$PKOGb^3uAF_Ne>u&j0we3L4jVh9z}S|zSU8@0 zWqWi`e2!4$y)FB?2ifaNeldw6rEs$bXVsk*j=Att@c zi}|4IE2$ravu>;m{ZW_#Ww{)WUZV?M)HtHe7hq#ymoSxK@B$S@9C3v5$~{Sj*3> zwRm>H7)U6P)e11nEnc8B7OHZ8iYfPTMQGmwdzp^sGvptGXc&E%cN1mi_rDViu>li? zf63@9O7d=?F!L9(X93LUN6GH#Z0@H?o}f8QH>@8+Ei zzQ^s~@x}mR&caWrQ_xRmIp!Y^(e-$=+n85P`@AIc+i9Xq4vyl|n2=={#3lAed zM1!NtAO$k=5;Aqqdvchmr{hU1@n2P)V{Lhq%+Q*J#|ql)(PDf1!Jsf!?9XSj@dyt= zV10DUVAVoV!^z3T9Mt0Aw9u9bHK2tL^XV^t#pv;9FHM3|y5NvB7R}Y8l4oHhe_@~% zC%1Q0is6OHqBgdw12BpI}d6Xm2cqY*brG{Kh7dn?&CjB^kTfMZ2xj96^ilmM9h`ib*T>5j(Aywy#_ zR%TBoJ2H7~4&TGrnMtbATC%|vf6S7jRNk0s2UCB5_ZQZLMga84-vDSt)=?TECt2<0 zGk-pr0R@fFer|0tuA4cb!jlu=1gGmo#j&*4XR(e{(dVc?9iIu6$WQ#4{~`i999XW- zL{Q~JsAc}7(f1w~y}Naq`Wld1K*&jNz2lSl=yWD+j#gE=zp^>803sK%e`K+hi9Z0s zz{uaqtWz#w&X4*UQvB->ysyzD;m{RUw1ndAlM>JKeDyT-F7T>WFhkM5E!b{b1sru2 z#44|Y%c}Jy(@u_y0@vZ}#7}26Gz}Dim4O7?y8*a>owL*FJd5rQ)9dN=(K^94-0Q~+ z6n1gUM=6l>hMf7yI;ms&e+5oYG8)2=t1lHsL1xe*-)9wfe=X$puZ8s|jbu2&o5^e{ zu^&~1l0bF4JX&5ckS|L)?&MtVe%!kJq=7`ZoSc7Lu25=900afS>H#lyGY_$^2W{DG zO*E4J{a^nlZ|5=Sx;^=DoTp^|EM3eqsg@TxbOJbF_d}@o0p78A4pQX=kq(LtfbJ2&X_83!YLtHNKJZtV7l@9WB{1AV z8{|)8(lmGc{PQS~O40KI@2WwXf95AM>1Ey!c0FEV8s|};#==H^#>&+1T%3Rq8%NVw zGN3IIe&a&%YZ9UietYLQG5U3fHzLcE;t=m!bE4b!}wH01A+ z*({R6B$9Rk!Z5>92sA0mCA6#uDNl-+@q9GW9D%s2uslELkj}qx$`qU^x>gJEm**0aP1Lx?vD6=JZ=)hN+Z|<58b*`p7_cGh z!DyaDQ$BoY=+9_aY&d>@5T(&@G}EM?=F>2eAP1V5Ha*W>9-p)af`^mFNH zG{yTCNhVFPh6E-;!sfAapyi6)+n-Ly)84t3L3J?O-M0Yz(Ey+Zh|ac_E;B^7<#Od( z&?b5bV4w!+2FDt=xTVC&$*Dh`Z4jq^yW~_*prLVdf5WS4fc#UErl(_sw7B1ROC{0y ztkxM^Ta$@290My#hSNxb?!iPX&?Fz%S_WtXGXqf!4>ai=UO0iI%uj1e6V-N{Us_YF z@P-wqK?8U@i(lE0VDex+V{>_w_Vbx0SAxQy*SB5&s9Y9WJatFqt*=|AC8NoFwh0&m zC=a?kehNlS!<~qH zhPGnAa+FNu!ELv*@ihFKjIyMf#pr_C=;BSIe?vYy;M(S`C>lq@6!m;yy|{?rTg2GG z@THLviyZ?BRteBaW*KrY=AfsCXG(kwn6m2g8)6 zI#IZ<`JDN6@I84x>PM&k2o$bzzbf#^?Euy@Cx|Jrm+*~gC1e*<{r(wgx1&&I_olYD zV=h02+&csBM>La#v<+8XGpHOO1mJ26f4s*74N(cZiJP~N^(Jq)#v?Y6{D6dGK4DVz zsj9Fx(qzOpmdY7rh+5ocTcucM*(Nn2Ul(?df*x~KfH-r4Kql6YI^IiSu~ifx!+(?d zB-SuGAx);g{53{NrYpZpfZGVGJPLjUFm@k@U;|h38{{77`)Fj1Y=;dQlpKc#U*~cvNCu63 zl(sIjC5Q*e5HdjS17QY7Mb2=0yAfPnL9d!sA7Pz7LBWLB8Oj*H`~?vK7)(wB=3-0* zIbT!;_{g~)$FON@<{e#*Xf?kje{IBMn!RywI!V^5_j7dlI0`varCHPxHZU^y@j_0?JPeE2E${)2g`bec~xP)ByR~P zpwbNcV}BZ+ASXzIqJew}qLiAB2V-)WP&KiiH;O5$Pfnr`!usU}f46`k)CZEpyK%`~ zLyw@KWL|(=HcLhc;0b-R3%GS{XvhxF5Jq7zC?c}nCGfUcH{RaP zdw7?A47d(47jrK7QAYHtknj^SzoeP{98l=J`Wii7NN@ZgK_yFmJD))Cb&C9v1!Upm z?1!jvNy-fX0`(K9f0pgpuibmTMn6j{kMOMPs#JcH7{`m$6{iGB_@zY4TH;$~ z8A!j$=-qhIZ7*+i+fT^+>&K1R(tC@3 zO4hb(a1Up(dX9L`c5kG!(x~B+S8arVoSG$h)M)G}`<2;4f1ezJ9V98#gC}`AeQi8S z$A0LslR~c4_cc)H=IN}d<&!j-H2`Cp=x?QmJ4{$4!p#6Gvk#dmgb7oqbT>!k`o}ki zjWYlp-e~j7Bm0PBqE#Y$Fi&Y$RcEM5LfsP5H!cwS?xTU$^nj#3#s1F7~GyzqR zIaK~eR@mMy>Yt^mC(is?q48nyyr&)M$2*_4x6c~@=(CzO=*j3^h4ZiD6!jC0RwKx3Qp!v{vkzp??fgIiu+xn7^U~eV5E&9`J|9 z1y$E$e}(B0z)cFKlzAcPPyN)N(dh<#s4C0IR40m(l|gZ~fAg8?#v@~@0#tl)F@hWg zypNsjm9#m}{4^EytfYPzbyMvNv36ex?ofNcYLBZNWRt(KdO)GY6eqT3pzlhCew$5x z!K}vVXHrO&OZFmBS2h$waui20l#aY|L>=GRf9fGCktnY1ymYVOtXVCW;K?qku!`^~ zDg0mwhA?;I@mL%**>uy^Yd8~UAQw*>!ws5!SyiRslWA6SS2Ka7J3g(>YtU;AH-YSNJC4~r ze?Oh_%?u%^s-ThscIB)2vTdgMY@lWEL-I_h z;%D<4zp2!c4N5jJ+1QY5QnHE3e_K_?BMr6g=woRudbg zSJ>iXKaKE*+gv1G0~mCrZNwf3qEHFwBA{;0KEFrt6QIYZu;htXS3x2DUjk9n6?O3~Vvx(c^qcWA~CM7>{bxH;bTqKUsNbnDq{={(FG75v0fBqJ;y&m!> zR&*i%)A2l!o`)>05?IJ(r#DzrJAs@@$ zX5Y;&HUo(tr-OcD>(YmbUMl!&@Lv-+KO|ve<~mIvc}90$kHG=@{hTF0en6*j(O$5_BOO!o&^Z_7(Z-e zYTWz=pb!8ELipQUR!vtUe3FS|>#^6-d-B_8IF$yV9(5t21rbmAw*%iVaQir=poMvZ z;h7%{fxkVUCbI-&e3?_PA40F~+L2SylYK2C*G?_9$C$A zeh7hF=EV`t0yVnXf43g%??WHyw49LRy!!vE6=*>rq z;`j*^6`+r52(%M4k?gUDo^5(EtllmK3!w9m(LK!<+fAbQh@!^&Unvt$BimtMqEnDD8~1X8wJTQ#^}4S?&(3xC=`3fPoMI%5DVqA^e;AV`aN_=ad6hzC|vaE|yI zZ*4Ji`n$dH<-!!95>Cs`7gEF7av_6Lo_x;JW{7>HF zps_oh`k#Tr(r@Eav-hccblhxe%#a7Gq1_d4+y8SCaN-0x54 zaoSzDZ{+8 zBm#s$V+%TS^_wdS%ciYUpAK*<+mT`bXUR0gZeThckuRI&d8}WoSAg9oT6$gA}`Seq&T-I&p3ryi!wz$WKX2FH;-gPtoiFjn+ zu30ZPUO^h6UuEujon7v!pZcq}Px#KK*no3`DYeKy>h`MFwg?z}Dp-Ww)H%8tFxq6x zf3~{eAsdF`O7Err{l6qSY!SM=p4C)LmetXvuWrlQW?9itQ7&(bTyOt%cLe#a5J{>Y z8~`n;U+ukN1vLDq+&n%6(snT?Ll>#>_SIffX4_cmi(ITjpMjZ<3*dE5{?37 zo<=$J2JMh?0YJ}Gk_rnjooP&-_zwaNh$cmg1e-IB#Fxh&2)nj?Sa+&e9CsY(gf8LB9Qu+>2D;W*;=+f*PY_F-&2IWo^;U)685k<}A z&g(|O|0fY0c-EV1ye^sWB+|w#wlRy?O=gG!rV7PJRR5A5YAJ4n!+h*{hNGS-`_L!v zamo9kgN*t2dhiK?>^u|2fWB8~NRK_UceGFYJWXZ4t`|0syGObLV#+&jf6(jol@A>A z{PTvPyhF5kN5x)I+iyn?8(6_CI&QLrM<2dv1nS$7`V6M-8D+XG;91tBD+%%glkn@dUJ{U08yEIS@q-a9N``$m7KzLA9 zJ@oS$6rlYFWgErxf8PygJ8P>zm~X(HvRcFyBmmTZTyRxDr|qu#$RAh0e**J-E${(- zpdvP65$8(yK2ZS~n#xJlLCcMtYNhtEFMWh2pyhMOx$B8NLu74CaJ2!D39(=AOd7z( zj&{`(n9kjY@b_5hgGP+=$FcT_SCtWf_2~6CQN)Y?|Lncne{$POmMHk%Ujd=jYH}Nd zNa{{+m?O)w<-KLgmbB$vQt3z_0g#Xgf+j#xmc)n?9Vg}kW=@=WnTUR=mlM$s^Hfju z)c%wDl38oz1&IqO$#zxuiJ7WxicBOjSFX%lxpG}ooxCzs)I58|8k`z$*z6_a=IP^7 zlb2t&)zq4yf1_k-^jyo~JY00`&cWmmY51X1iZ75dDQ z0bv|nEZ~MNy5m+}?V?Tw?@;xM<9E;=GJyM2SNZ+LwTH=1;8S$ehFOP#ro&KF`hNKi z31T%%5KBl~Q-#|8;@zRJu>lGwXyLxjo*k5u)8P@Vf1O?eU{ASUa=jl~pJZL%9N+E? z?I1`L$+jGV8dhHS{XX zKl^i2e`mkoPpybSjzhFu13ndK5!J*JiWZaz*2=8(050Z!`~|}c)z;PfS-OqdzI*t0IUb8Pj&Z-9;R@sdxy# zmp;ICi`>6sbaR1SnYg$JZEM%%ZDLOLe-x8j&P8yN=7%|pj>7`wZ)Q4XE2mT0SY{}3 zjfYq)4w@RO3Rx};RVDc>W7u$ju6}5)nrjVIxDwECNoCK0I+DRJt8@3jC~9P?W=LlC ze?jMQK`?TD^>b{9ip2(JA4`&M6JHAy=k3t}C)s7ZE&lbt{-1E2PSvaB>M4?%hmE-q z6kDXhsoaKPAcKvh?E~4xD7l56LRIaSMIhk@aZG^Hb2GN7v+xxICmj2OlogfR1g5%0 zCmh576eS2iH(hy*;ngC0jCI4&P(8=|e?A7oQBJO@_FH#&*-%?H*eS|S-OG1=ANu*7 zpRI5?pK2%E=L3uE8(Go5krnNmTtz&W-C%Ih7WI=x`2*a!+Q0ulJM5+NSr-G8oMeq~ zFG4is^Mwr{8qCpGJnPWtMakJDoS^7JnK9w<%W!aKO;1a2YiJ<+ikKKQ;-xS9e_RSB ztrv?^D7}<*$n2F78z zSKBjX{uEy8ktz~DQ4aK!*M5kC#Qzor2?KtfdPKUb0U8I%PAGF@5VSNw?nz3hdp(iwD&PtL_OAU#`dN8{)1E*j6p)+qKWo5;v|f7Wk@`(}IS!bGu5 z*60e-#$!!dkFlrRcC4h^fGNl9!Y$PD49A26nz^KqW0wiNTpIG#R_J^&DIuk^g9{UL z);q$}0KT!Pknk0u0KyIYYyyQROd5YfV@BQMBzQnB-7sOV(*@@St3zQ8Wq?C0jd?Ia zib^;Rhn=r~f|W;)e`E?){gcg<4lt+imSWJj7cfK{aQch&W@VvC{L7MA_~q!}y&2J3 z^1UxGBgAaglW76O048kgW%()!Ndp-aPKbl{HuEN=!zLs!I?04&U^J--WE~Q^X;%?w40NhpqhDHUz91>{Z0{w_Mh&^m7O8r2e7bIJ7Rfz50 zg*zJZW8?QyfA+z$cn8)+gPJIO(T{U)Vs!;2h=GZ^gaHAskj$rN<&#LOn;o>L44RGy zKBDVDf&Dt*Ktf0Sxy;im>QkdC*sO$uo6xU6aIM{}4aKQ>dXo#L(A1?x+?mwl`6eDH zJ+~7tE!pN^6m?5Q8!i9Ghur^qDqG0FuRq~ZP9*YI5I6C#vg=t1d@w61Wx z2B9;G8tB68AGN!{v?42tzF~07X&b|^%kbIo48Efqj*;3xjlfWsQ=@}Tv1l4^*c>zl zSoE5Of4&;a&{sFcr0D8&m5G_ki+7DyLGf{-v&5)*r^(NSf>^7iQz@2SsIu_JN(shI zhMSdwqBhwBkq82G8 z)*^TEd`-%05xt6ZC#PBM$V9e6L5A2&!`yxSe^(8?!};Z`hqp^5{ucHE%^l7;l|EZ^ z7LnzAX^}2Q45~rtbJ@rPvQxT)xo;e@ixBM8LkiuSQb&B|18d`v|27zeuny2I7V5Gd z9@Xq;lmdT7~0lUOt4U23&PM=i_31mT|EXa}C&AuUQ1E>*Z^~>` ze-s%5!=iLpD3{JRx0;0BlH*%i;*&njI@Ep%xvOU+T|E!Di>HsMVClipQk24!po^F$ z${I>p_KGco@#n52C$6z;cR;&za%e;uQ+2I|ACl8lW-JV6syvf8EiDYqjaO=yiv zz{IYhbvmA@wOo6MsomXJtOF*6K!e0+;JZB%ApCb`*-M0!f=?uq^Y&GWtZV(zkOlRU zF}x^NWZ&Rnw`{x^xhyOY#u>u1B(~v%V_~>{W7qJ~8Bm9F43n8c;C$crT0QIhe;(!H zE&(%oXaL)71Q=F5nbg-t;r`H-B|&qxb3~RqQ{yljA#*-BXT@Qlj>S4YJ3MbDe7%SX zb+cgcIRB!Z8-Vh#sqcUNlM}PpP;gqlo-W?a0H3X10KNo}m-$b)1{JzwF9JDMA+i>y zMNZnqUFDeZ%@p)-!kC8mmfE<>~#?_n%Up`SE7usm` zQ&F(4xE++SJLhe&nKk7*Gbc}*i|uCZBlGKEeSS=adDE>k_CU{tW%%7uoSSULGRIEL za4PcqZP<4YNXJ$x|FrI|W>g2#e+(VOd`q+?Ec3@95Ya^U;43|>RDU9Oe-oIBmLEYa zU-dmY4OCaQQX4lOEPCSa+N4cwQ-mk4;Y=?LU`72>WO9D$LNJ-lW|iMYm0M}~nJ&3d zT{5uA%X1jZ8I=GWig_JlWWXT?S|uhkseL=TK#vsJmvVKInErre=n|*T+?legp$6rQ`ra6c6BoV-D-xJeAmPQ2VJX7nficcUhJ6xu zz54*)yqn{jcb~{N3yyV+(51QN7UP-+_xC<>&By8BwF?8r=y~_|e+xkwm}nkymgEV< zOrS(Tn|%EfG7{-fwcZPhz4FSAShWBMoJJus9gNRMZNLPjj_L@ z?Dt3Rv~b{1xMy>$fae~aVKB@-0hI|l+F;>-~>6#p-CR8 za0|WS=iAcK!XT}PDPY!HoLOhAxaKEoi$bZihyH*9HtE}=h?cGJi@`X4>2Q{&a$cW4 zB5A^txCuDquJ97JaFsi{9>HFu*b=*SF#%e7LG#$W+(sT=x&Yw}q6h=^X+h!@X}91Q zJ?)h;ZCgyiE|kY^YD#O_3I$`zd-8U8;(^e$o-rgSa46DET7_+*2!K zrm=g7En1z+7Wp%opvO2;BtdOYLiO_Yln}Ov#~A2Bg@U(<(6e5`!5*OB-N7RQ>%R1( z?+m9~3`>xLrBevY%@5#lZ|21+D_F_;OU_BTLl3IPf1IyTqQR>7J|ZDZxQ8p<$6%u* zhQNg-mY>0N+OV8cVnB^Vr8k!-^Puh#QdEQJ9uTV#*PLq zyM8xziUP>(8hv-PPqNgOusk_7PS35_$FB#*-nsP!4P;50kmCgxjn75A;2Wdo7L`Y? zaqZ??`Dk?`e^=c$PKsdbyT(mH!(UwEeL?YsYwQ#h z|Kb|AaZ&5HL!;j>L{;B-Kg>6@J2XBP)!!Lrop$zz)-SzMd1>igtu!#)5Y64*_cM7K z%6AtOrtX9bhm%wZfvY5-Aem|4mgDX)oDh%qB`T3JKtwF2Yy=b^8>LMmSl=t`I&fvM ze@(%*LQ{7q@R{dMp>o2W0uRj=cA7nR%$S-?ay0MVe-Yh)5_bNv;AS}^6=c+#6$ zie$dDbOE<@{)TZjf!pOm8!mueL68(Tw%#Zi?WbR=1wVdfW5(17WvJic_&XZ?7}lrXlX1? zS;R^>0XTvB%>Q<&JGsQJU9pjm)is6z967C_Y!-}H=UGR9QH6_MA2@qWXkA2Dd=V30 z@JA-bedL$bU#jR(7vLr;p@?9Yf8zp)-wU~d`FY9k4l5T^F(#YN*h#(gvCl{KewfKU zGm1Gug_&adHsgJ)D!)cCqqFa0-lalrX+xAU>R0Wh-M$_TDonXh;`s#dDjJs)8hpjA zKYbUVU^bF4h_|kxx9If?rj_X8bdjn9jn%2C3zRiCGNvL4bb@7>RgFJxe>PE6la{B= zcq3Jby$34^9>DzivF&1Ocggoz%_KF-e9dKPB%m5+Y82;*&L~b(_6Ibb31u8|%Gmc+ zk5gC_836AjGdG*%V;LlrfDjp}@>JOC7_h1ms~$`lI>&womRpel4i+3zzO zp7$}-RLrV?NCC~^$!{u5f1d-Jy|M^|0-z+bo=bdXo?XxTI2W<^iJ>f>5Jx~7%ZhX! zEV#mGhs``(<}am+cLjVzdlRu9`?f_TtiA>Tv@JhI09w7T<(_O*Ee0 z4%cwc7m?{g^wQ87TOL;gKS=pQMhjiHJyoe6D%8Z~$_4=B>5pox0y;dFEsG(c*eUwFUp@N~M zG#n)SmImaR*kyeTv4iI`siviD3q{{CX1*Z7rp;8|c3Q4zQ1G1$i+4Ms(%VtT4Tnx2 z$vGV5XtR#O4lV_;e^YY2u1(^J^AvK&=tkI&8;4DOz!GU=JXDq*J?)Y6niwg(=OpNW zx44Lml>G_G_)&pPUfDyzQ6EJ=Z(853B~yWIJQGOd=e;+rD-k)pXj=e`LOWsQLM!Hy&EUtC=;7 za%)PILpBp=-Es6KXoWqtf;(s);l>lV0quSLa~IYyEGE4GC%6k*cDFAw<-v*-=f|V) zagg9+FN2SHP5)qAK=%|7j>`(ES2Q#MjuzF7u*nfgE#PvtM_>O{-cx?)Dt`%IXwH=c z@1ikf zi;GJNqj<4(lUn2K0cM`TQ;RMuY)Qjn;wr{twx9_#lS5{4pJW)2egtjAuUxyQk>Eim z-%{FXf1VlPGY6hAp~O70mam-NW9ZxFqH9S>t=Y5Pkr!{bSn3a#F8xAFx>L#u59E97 zchU|elNmP_YE#;cX{wqXAnmRkxXmotdBZN$T5Fy%DI3kLaBQvOF_(qw)x5w|PbKWT z=sh*;`w<;#xaDbyZ~+(-KDK%;CE81E6{!&(f4Hes9j>e7>PT>z(FwnV4pA8j$0+8z zro=$FWtw?I&ZlAcQ=i4+YrIOkc@5o!NY09X=T!39AoXaC-dV90>IX*96M8~S*?@Me9_83BI)y*L zf6{T;RE_#RVC@|_e}8-4QYAZUe-xmaKsl)g*cXpf5l6Tx}-jJx0K-GSJ~3-P?$b4$BWw`P+(zt zThK{gNHAGHs`l}b{un?3nd_R_8nwG9$IClt?DiiR!4H!2a2wjWiCu@+u!o0f35C8* zCe@;uXyD%Z9!3Lq6Kf3?SQb8S$rpwsg$*?E3IZ||F|-)=ai6{Qij~04gk~T4e;MtN zv;c;7!dPO0!GH$b5wwd$UAjb>^KRrwgH;zntw&p1YWi>8USC*P3!`g#F|knp4>nDo zN85q05AcH4ok81GS_*4dF72EUCFO=NlN@6c%#^#h0dD5~Lt~qg9R5cNasHVl6ppp@ zHZY{I2+n?bAz?CFn0z}hHT@T~e+SSKg@A^JA8axF8p86(s#fflq3OFfiG{{;%3g!n zm0;iiw@)%1TsqXU_Qr)CV-{%?S14btTKEZJ1V@FXR*-%sw(^nKPc*Q7Kw z-8k))vOQ)5N;x~02Q@5YUy)i*tYPgcgXltuWgNns@HH~y1dg6?GiETof5mMKWd*|L zOohDkGJloHTzqvql{y*4G0N)BR*r3#goElE$6R1I=e0>lOj4YE_0!isC*`wW4=|rW z_T6`~FdYq6o%X(;pGWsbwN9F`R(6KDgmwuV`lg?>`ljEc7{%Q5iTB|L1%0G^Om>Ea zdH-^%pdy!%S;7&;Yh)BJe=Y6wNnMm#531Z25Zt*@4+ z+OID!AIL6W$b>LoB$Qts00s4W80*F*dj}-o!s0A6}BPx4_~o^VK@Elr>wv2sTx1~ zkux$Nw@xK3IX}v@(&8POSWU}lMMG8W~^MLGu!SeEo|TGmnVW!}9c!2iN_+BMzsH8ML#R!-MG!TuyB|yO=71rOr`E zL`1sbp_$blliQVJ(|?>7+6VrSgYvsCuX({_-b#L$T1v%--@NO|Z*i)D-67y3)@VAF zn{1>1za&*6!&{ZOewzzY;o2NGFO`*+J?_&RB)2IVz!MWQkjneUHqnn}pE5IyT0p)` zl3C`=w)+$o=@-20E#NyqirCYorG-BHUig9^7f)(!%$xXetbYQt2Td=3xucYv;6=MC zO`uPtn}ilaL0>ArKh7B;P}H!OB4%&gh`Uv=IewD}D+<*Xys|K{cu2fOkpCgYD@TfY zIdYr2aO)7f^4I^y)hH+r6fPgi@_STnax_<^HJL`FwB$|U5$LN*S48r}z@h*vNa)5k zC3=CM2Ur3}j(_j=_}9=0$wHieM;BTO>qKPz7B^KA{p=SdX&p5lQBW?~a>T3vE^G&Y zi&z{i(N$!+eJAxq_8gh;l|=yKv7$uKz2rezg^!g(dqveTagI8INDU>HeL;Cd1SIi3 zI`&k5f17DpZJz!VEy(o(L-n@BH79lwP!PijqSvUfxPL56J&SF~JgOPYUW5s10h1hr z`+HI`AbNQPj_LGsiNJ=>@Ixps8yr)j6wz9iDDx#|Zq*P7?>w2mhPh#Vq96V=Nw?F+ zylOnG<5~MW6WP(hrx?cCfM*RaBjqYjpO9cp71#~qEY*Irc#ff2LfNMHlN?IVK(w{9 zP(Cb-6Ms8SJv6Cgws4H81)_*3O zVX6K2PWb|!(I<`c+V26|Nmd?AQ;Om2et>c`1sK1U^E=%S3D?P(Rh?^iH8ZW}o1UItFo+Fl2hBY#vh2rxNGVPGaF)gJ;&@5b>UYAi2f z)X*4sUK7nFfSqvNIIssM+zgiQZl}w4H}LPv)Epq&_&dD!@BdRffSN~C^PN4=Fj&FR zhf_5iM!NB)XX*d=dab&)vY{u(*ylja5!PmjTRyy9u5DHg&r&mZw=tr(lCryP1gtjP zP=89^a=rZ1PxWV1&<-O?4E0mH{F5y3)dGCQVXp`>x4yDbb60+nDB2brEEiPC}l5 zxt`AE)W#T$7+=D(lJwMLtM+{Svv}qCSbrv`)^04A4Et=12|nQu1`J{GTW-pR_sqJX zm=j*Q3n$66v#KP-T2-^Dd&?_p)p8j_sCvsK=UI(~;p)~Hd9mVb5m zGqA22-NG!myxIK-W2ZHSA$gxJ-of0f7*lh)IBut`zxX*CqZr1CyOv&C(Y3DYce*kA z&NISTI%b5a;eWd5Dn!{wFPt>Se&hqM3k_i&4#2nmZcVG2tJ?mixv6cL>)QUBwvNAR zW}SYY>KZ1j;HGaHOGW`(&+|O-tA8Q@GB;&WkEhtMcrpzwWNA?>-P~H!m%pL^#k)7X zDZaT3IDk*UF9P}D317Dyl zCug-4qqcHR1w5_E*}A!Az(2gakZ{?iD-asYl}+GxkHeB*HagF&U^>7Roqueo+pu)U zc(aK3xQ1^49)P1#b01_9_VJB7BX6H)wNr`LJT>Br!;Mm`g_>yQqEBx#O;<@bmwT@5 zLETC;Y*#ky?&|9gAFts+(0R6kj`gBrqO&w$fZj3Tz_ZQKu$NRIYednngGqbsLCG`j z?3fW|7&+#+9fmzTccM0Y>3@Cdx^54%aS+yw4xIt}_7|A4KLn{)8@~qz?0l+Q+maY| zWY$3I4Ab)2z&o40uzyaOzd9yMzVeQ*0=0s1hY5s6QDfa`vs68_YK;kPnns;6vG625 z|5&Y7S&|!(zX#_S@3F@$4@il}Ku*9yB0XRv?aZfced-nmnFdOIntuc8O|J+bD4h!o zvT1q_MPtjxFj+~?E4wjx-Z4e$oYELh{cNYO#QENAm|KQpM_tNQ(a5yKq>>GNRl~$c z2@=xPmX=CzmUIjU&Ju$o2RQ^d;0B^rt?8Ja&yoU0rGarbfX0CPXq?qojruAIo*c{@ zcLMaRG(d;j+A1pUX`LM3iHbN9ZsDec3oyjc3L_?%3D zSb#G%WW{Gky);T^!ifA#<;Cy4{ay_`S5AV}i{o5A%?7&@8@DikojoTMUIHVW^_VFu zGI&~ed40PR)@C9ya6yy`kB6pkC^I=6v@PpJOGNU9TX9qn%72VSi^v2pV{(ie3uX!M zS?Dl6SX#mek??2C!=hryvjIAaJ2TUFFnd2C{bO;FWx^9wBn~y6Q$urafFEVXR8$?~ z{g~Q`lEY*)bX*M6!u5$Am*vKYl^h-uYtU@6*yLBL8*0lUe|P0x*A(}{)NSwixYU9x zCG*`);kuMWNPj1ZKx@irEXxOjhOaxU#|7v9egWOJ+2CaY550VUU*b*63?i~sAWbD5 zzehUHEEA-$I;{{>0pOEZv_f=Er-i}fPjf?&ax=v@xPyNwf{p-JWFbtYa0fj zx`6I-yYk!6;O8h@dE$lwjRD;^6i}v=M2jR*DOjmMK!4i2qr;fD#q08xctvupXKm4m zjcw2ug%;kivz$L*e$kEGdSwpghgc=;TPGK-U6gP}O);Z=2qT|VGc0DBb`-Yko`XiQ z=$aCbVnd^NL{K@_y1vUCv^w%yh_|QqwJ?%Ssdu1SISdyvB zZ8kgH?syac+PPh(n6t&ZJY`S>J&CaBGU@b@Z#-xe@XZVIfN%66iQ*+njQ_Yol`Sh}Gf2!xXYB7c|z z#5>R68nKS55gTA0i$`ec*&WmFxhYl3_=m-N+))+R%FIskYU?9KRjmr=UwPJU?9s2bJcmfdjNU|k^P>=k%}2TMq#@vl7;D@$^d zBmtsc%Y_%-*Ffa{06PH22e(_gU4PRn48jNBq2KQ?Q8@glmF2ZNc|i)=Y!ou=g`;5v z_h|Zm*`Tf%5>T!I6_RN6EO<~w{PA_~m>#>)XB*b2F?!2(t%7NCae_LlP6IEe9nI8OlHu+qnQd@kj88sAPh=1W>emG8b z+lVNJ;Bwg<*bZ@IrMjV4_42fluE+c$3u|7=%ug@uruV|~@9({z?FN2ZT7qv0ymm%+ zB9n+ttQV8ixRX4h5z0qPZ~&K;^aK;cg(82E53bS=SdN{1@=@k|OG4ReI1~)(8vbJT z0V<^^j?9x8E-!-~a8y2$ynlt-RH|F-Gh61FKL^Yv$0q_|IMy3jnT9g7X0wWF5j!<% zU_XgTl}n53ON_zuK)KVFI#ww-3z81i7qQ_AJg(+Sje({AD)?aTd&C@*Qg(lRz1)Bv z0N^ME+`M%^N!I<(mRB~iFNp55(R=ko8rpeLZ92=HpMbYzXuq+>GJm-D_=U9spFdkG z)#vK0-89E?<~n@l9GW?gPun0hWl4(*stO>is{%tgY|8&QgGFCjf~n1n@C6LgM#T9B zy_$I}iP_IqmE|NCRZ9ik;2S^X`zS9fduUWo@*w6Yi(}nQNoB@GWExTdPdvS{i2h9s z54l$$Pdbvw|&!k@-<>(%@uU**x1` znvmlTn=xQA+Ro)ilcq9|b-tuqp*5{s?841Xt3nR0t0T$K*{n_2Y?XbR&f zp@vP>v(X}i=`7^~%(s-Rpmv7*ri4^LQBy{Xywe5XCl>4`zlTxsvV&n9+3aG`u$w*# zQT(a)*Z=+h&=&9P>1D%i_)Vg_NzYC_F{RX^W@KVE-tD+l#XIe9gMmBTu`zG?GqIFw zWS=PC_kZf8JFdWqata)thh~WCs9V*kpO@g68` zhD}ZkEb4}-hJsPSby!F#5mD+WBDi}}C=d|wgMXuE6rj7ne6i{8B{~M=Vl!y%WzSJV z*H8v6?(A@yU|vh*H9-e;k!LCYj8aYMaBst`#_%=|uZOl!jQ}3vZd1Zwv2EkhSUc)i zd+r$KsLn&sbnB%Kjn@zxO^%!7f-pK|D*>5;jhP)C2{2RebO0U!K?*FTEk+XtK&)ow ztbZ3XD-+f$qUMKk*4r5+*dS4YrQCNeA|X`($}lLi@P4P#-89=RNupsV4@~-fDI8Vv z2FE-{ysD1il3pg{r8jv;gZaYQg2x%*?0_dpMqK(5BLMcf0Jz`7ilqX9Z`OVxC-C)(1-=0;u1E@ecM#g0yuf!SEAZV>1iq6;3Vfd+ zsD018BAJcI-$Qt6CvwXjxCNGW{v(8^UJ3|j4iJg(G*E@79jGw)X5s1JTZN~Oa16Xk zr88Ah3Oz=gD(T0dUQ+or3U(G5>3>j|GwH|z6Lu~{u)F;N2NcgDyDYeb&|g%rP(-Bb za#Mb7ut?y7)lRA)QJsLTIYmA()HKd3?k#p@u*J|QUFDVq z9E4{(c=g#itDT?2$cvQ!WQd(FxlAa*Ru5xHQuseVwIfW8 z9Sw%2kUR=JCcQ+_9nWfd`y13x&yIl<%rM0g00el4*!AHk=Av z89P6Q3S7-4h6Rhfw0~=~B;}I~<}NOKax!bdB{O-A-!VyNR4ee_EDUhq_F7R~nH3b_ zDZYmaVdZ@5E^N(&bv>4X$y4h%9k)Cv9at|8*pT;(Lm2Ymf@SSA_h|3zNiwjP$IxqI z5vnf&B3jL}*NB#klwf$r45U-z z07?#M1gA8DQ#pdu)CjneLK$;DJ3UhH#o1!Z+;6{Dl5Z_GGdcm5^(*x9H%3Evhg=Ed>L( zC%<(|KI!T|QLp|=tp0KS>Ms*Kr;sqbLGeQs>t=rohuXFk_aQRrUI z^`Xd{iDpI2peMM<6i2tYb^Cc?-fko^f#}ZA9(k0F#GJUTfu2qYqQ8=lb(RlAEy;L; zWO`24CIw(GZ~++r7~wTZ_cEkL5#1$Lra6`3tbd3;Nzc8)m_84`H{*cf0Jk5AoRw|p z;sUpp(p+1vniH|U*&RTxl(w=`ls%y2&g1JWd6shYc-%3SAF)d1P&-6>N^YrH2=Trb zA)Z7C5*N3>{448HMTsXK62TD_I=Ebs^pNIBLIZoutKv=g8^fhr;qJR0S!M=g3Did-OOxb>cD29X%Hl_rt~+ zeD62|InI6BeaZj>QAR0WxQiEV*nN@dNq;GoakGwb-JxCZPS`JgC+s&A7ffI~+%Ah4g_-Sv7{N#vss_P4@$nS9MuRKae&#`{ zkL*hX+kmrR4PTfn+QPLGohp5DrnIN5a>Tq3e+`ljNl|#gA6#4qsUEWrSt|~DM1LJ+ zo1oH*sNjA6gazJ8X5~wfaz0r~-z5%vlg52Q_EJuees+!$ zN66)_aD`m|e*MTxKkAaNG;=GJGJiS0su6=yOvVdj3NcF`@EhJACT=IvA{?f4d-F{; z>t#hJ@FValZV(8JZ;Hj7b2d&M&3|_6l}*iIxRq$tnC>AQI)2|yBzxyYt*6>Sc3b)j zb9NkMl&2W;nmq9+mZpIWd6x+or57+}162~`VA2r*v!P`cm?1rd8Cf4O)}9;4-bU8u z`l`E@cy@d!u+J3n5VFDW&}PzBY$lsgqeK>r%qG%S%p;%qWy78o>7c4cNq>4DrmR0y z^J-2g+RWZoXW63lr6u2tfjuu#d3kB6jk)ti0e+E|@!T@8ZFs;paR@wCuWXVo+}#O- zfjx9f(szM9Etk)#=UGd@Lr<{;B#4*4{<(J_y1ivz8Ox-etA?p#+-piRpw@irCAQh* zO|w8D{$8@v3l+yr2G9MyZ+{|jMR=e%8<@~8-`}Ifcmc_CEPV5sEy7`8ET*dARH!4o zIDKHd6FM;p;~myliJk^Y^LJDmg96T)SOb%O{EChe*TIKjcx-pzt1}w5yJ#-l^I`2O zo)H79w9oo?`~l(Qm5KQzyh2qVjDZpkWFnPS`o@Rc_1Pu}r3KN7IfhOoiz&#cdG@d;{gVY2~k_qZ46Es-9d0>LB zV1mZz1U5-e&{cEXm}GmuN;*#_=;dsWPeFT82!p!}e@@(XH*$NgZ6JAm=QuJ7N`Y}! zoi}IDS+7)X;Oclnt7$@BKzt1(`i3CU1Vs}&N``wSe1A^Q&I<_!6gw6_kJ!d@${uqj zVKJ+}{tp3{F4w!sz8DPm4m-xD<>ziMa___fCPdS29>9)zpvghH$$@B6dVKAuAO>j= z-^xQnwil$^3yMLcNluO&bvkmT&{pAK3OavaFbZ{w%W4n)6{wzc%r zww8Xz*0L;lf@9+p)nm^RRiL8FGsvUR&*uZZ!GHbc1A>7W-QnM^th4;y7!1Qs9}^Vc zu$%e~UsrTVH!#)<0)}!f)RSm7cgMKl^E163tYXB5U%82OzehdOCq&KlQb#<&VLFdJ9FgY38pw)yOF6;v)7SHZ@V z!+%Qw-W@SGfd-_&qQ=hQws9Sn?6h@j+1Lf1R54oRA?A&ib+*$qS>zvM7s!bGMV=KC z;lu`mX!k~r8(}C7^+CD0+tBrM!9~9e!=7vR%O(beE$JGD9i^V0q8WRXGNglcmM1g#dnc*VJWPb_$&r!P3Dd75PRa;=HKbf*EU6v0`Ry=^g zsDF)GulYKO#h9tq8SR)Q4?6{t)^6%HHlR<9V+MKo31Q$!1DTVg&sW5;S13SlUYI}e z&=Ci%>l&FwX>>y%`HkAmkeZEGV#2jk(RG#gmU0MSt2E zi)qEckn03f#uewqGbOh`*BuW-k%m%L{rRwJ;sTZ5e~6)dV({)iVDSEmS+xr@@wa^p zluhvf06&ximuwO+qbug%>`z=jLgCCK&ENgBt^4Dw`*$C<=vOVZWQ@DPR0>|*{^bvr zXmfjoA22!TFdh<7iF{GW_fZhY<$wC~Bk;)(aVd0Q6PWY-LmM3}|4Cb>bI~?g9`xP_ z0R2hUK+i|!19|yWtvL2a`aezmQK=MU-@ztf*2b{i?2%WrTbx+k_xekyjYJx!sjr&O zBPn#$s%O60%2ZBkOR`UCv?nRt&Qp2IfiYe85b;o;?tYwNo5zWUP6lvH$A3{nuNgIM z%~;cF#+Fc4pBJv+Cy*r0!G0G}I^t~~;)k%8{`xQf#x;;KlBFML6w$2E zxyie&@IfScPW)+NszRl^RB2&9vd%3JdP1?!zW%8@q`cTo2}izWVL(%KCP?Tg05N0G z_xIKEvn+&I$f5k+4a{!9-?e5ASrgyCOhgtz^y&7AS4a?)y3|jHUw{7u&0iK_b|0vI zFYQ=IF@~>$@-qtQQ1sF#cEJGR9r!{gPWLY%FksL5Ei+jYna41JuHSFLE^g|{cU`6d zJx|DPA{S|q$}lo_Yzo~U4u6Y*TQZNn^zA|9l0fLgFueIvx`SIJhK8XaZi=gX`YEXs z+0zmUnUm-(154?}{D06Jb>P~1W>fNo0jy^RX8Eo|9_HkZUAmMnXajnIf~9EvFxEVb z`hQtgJ=3|qc5vpMFIc)5qMm8;of~&U2O9E}hA^9UVP8rQrNlc5{i0-|1oDrnuV^!>Ll54R8hfMq)vPTbOWws-b+ z@%Qcx?4!Qjvw!s6-;Z|>-*4}$rAGk2-EotL7e~hjhud#bukt2k71=iL|9!aA3rCIw zJ+qaf(M{VE7-|)1yPLFGtIHMF|gCTE_EynkC>wgwQ`~wpgeF2&s=;%G)B5IpU z;{p#VJHLJWRB7+B^ewY9wnR)}7@0}SpIr1Jcn%9qhWKZlA9d}a`%u5bn_%33{W*SY zztkx2GD)OitKpGkGR5UT{&Bfu=zoO&>E)#KIV*gwmKm(fP|N<zX-wDnZQ7^q0GD-o9^~>}>DvzJIlS2#o#7?%~nfgZGWPiERFd!-H3EUo|Sr%eV)D zXb%1M%6b)k!d8Iowts}LHr^cWzBxF2yA9WI(SPLb3G80oxcm)XcLI2)g0vPsq{MO` ziC=m8zrle9M>}u%(ztwee0041?n7hou00h$509UpZ14ZJYXK41ZD33E1b|MLJ6L}7 z+q-wL-{2=L4k)slm#=n@b`IZuIL5Kj0~;l^dIIqF{`TQJ_<4Nz_RX8!!$##p9k#N* zy?;Zmyn1`|VSgKFO}-)OK?hKhHs}Y(0Q(^^JVS(e`N!cuTq;Y5kaLI8*nA}mnGN6V zpCgeT&3^W*>|6d%E461VEZ9!yxZ5$><5Z=Qp^~UnF$@BJMp?mU|7G&^PhbE1^)Fxl z+t>f`_5c3*ua)y>xDqRRIW2~rntnUFoPW|8sL6&Gy@K^FHUU~6P|tY8A2H1lhF|~C zvtyLPl*(nv8?aOKechZ4{n$l1Q@TU*XwpycDQf0hc0YD7AXUMV-ll|<(Se0=CG6 z!?52AZO4M~i8orI^Ti|^b!P|p)KZ5sKq147@&9D1A_F@gy5sO#={!)D(7VF$AryQl z=e|BS0$k3goeHyF=@g^rk@4uM?thN4TU57Y9OsK?n$(_JQHm`$4w3@S5*vHgPP2Ky z7-z~Sd}y_>Kw*`e3pL}l;`q)pBU=NU^0zQ^9i*Gj)7sCE<)x*MFMzY*aqBbA@sYvc zU_UrehTXp%b)q1|xo&(!j?f6mIo?=Q`hQA`e3(>tz!j@|Ml!g@;gq^zZGXaE<+mlN z(bzLC`Q?KWyDZ+Jcwavvg(Tc6x$3eZN~Ww|pjO6b1~MQ@pbS_h!r5zB)^TZ4klYw& zGKI#j3wZ3hFDzjDy<8|L*4eMY5yt)Lmp-bw8@ujLFe}TbEf#?WSOl@@jmQJ_MuD)X z@hCPOAAJnAN8S((TuX0VgMZ&hFF1zq3QCu)j~QZ^>(=PGN`Ej?%(X;ke@PFMHxYlWUp5U#I z-~o*7@vXkCVt%QR8YxzA>3wot&40sGgGEK8DOqfGi6I_p|-HW)(Dp;_Q;5BGx^)5JRL zsAOof*gG;G_OG5#x|6K@y~Jknsq35vFg>9)-E~>2VPZ&UMw|)zFMFdQt$G?T9A_U5 zotr?+-USN0A{gEG!b;726R;eBM?w2$2)EFGeR`b9Jb!8_quV!NHi{kz>Z^m}?*`Ke z<8OfyUYiGGq(FHT_5i?9`x@=>`r0xx1L+H@4flhm23*moInPB~rrdb&(FOKYu&(K- zpE021y`q85iUXi8D-PV>2{gmYH$W{Ang@F>O()id;Nb)as2Fto1?GgY1+8!h0L;k) z#z>_kV1L>7Q+dQTQ-N2IZ1(}!$6`;y$i3Wa)#^VnFT(Af-+>l;t_Ng3huLe<(YGve z`SJ|Z(tif3>7~ZXj+Lg|P7(M*#fCi-m$)#*wES z?;GNHcfOYapU39D|DkN|T8ho>By8?S40QDIZ_VVsPNlni1RG0|s<}+;kFrBcYr~5; z1r#j7y0U}ZDg3F=!bLasFpB3kIxV9)Lu0q_96zQmG(}fFYl0^cjtJeFoyK8mu8xrn zO@A-`e6x?pA^g~MeT!<4sf9fSZ*N()tY1lJ4QrQd8~biIaAkmL_8$+xWr`Sa@Up1Ap^)NutH2A_j5fjYwhXxh-;}a?ZfFVT5JQ z^dYZFuW(jXVS=z$hLuv84f$AMTI6vF4^!tZMm-xSqGd;l9fj8%lg5?;7)^n^wn#Xc z&CQBwSrv2z8FXbGyKlquDh1d%Sd!mMdzkfi* zU+Ou>V35KfuaV#|NN~uWVcrT7zzT7!!zI4sbXElv_`X8HN?)^u92W&HOyrJIGj+j-N4URq=mz{EqWVGY@xP| zoZ#Eo4I);t;-b-S#~w6Ra=dG{ zI^$9-8MB-FeZJqqoAB8>9{BHsceYi|ye`~;c}=6^DA!TT`wZ-2C?K++s> z%odX#c_8PpHB*wCIj`^ts()3D8BF%P>(M~vvOOg%;Ww!O+AN!1L3=aOr_a13ROhFq zaoi||g@!gZ1tRnDj6v!9oGlU8gvS_8f3umjq*6S42xH@B=PSV@fMQ9da;uzihT9Na z_8kAvdCp--uSNP3WH4velvE?J3Xjs9CVQ2fkfIEW$sYlQxs;v*^nX?&m4!YR78L$n zcnT^Yu-z!Yl{L9x_xIl~vpFcDXqNS5f4Soum;Z378dd(0OfA!fmVYFZ z%;)JcVZ5mtRlZijAljDN*O06=Gkx{Xv_Hmab4segGmZ?nzi>IbVkiS@n?z=qu$V3m z>`%b{bm)(g?{$FrUVmjy^RYEBaYx)7cqJeVWbZQmxth)FdIQyjMdn!Adp;+7&vaf- zVeCm}wdYW!OQ}=jxAL}}0r>Ldf zciV62c~B0Do^QW8#HXDkX|viJ%Oe?KY^t*>%$sm^RzIJ!OMi`Btha{sR_4`v-m%br z463cqtY*-zXJH#D*$E;92a1CskmK$!oM?$x01w62b0gTKC`Exev#(=3cbQt95+Q39 ziqee!qEy`+x4jA);rdOP)9#M!0@}@{XV}h=1e6^E6~WH*@;EzZao6cwE|uP4y3!`Q2;<}m>7UO9#F^s2%=XiKs1^6}(=))Jvv4s&Yg64i$+-wmP z7|(~lerg4?XD~>n;&^tghjH(n`}@IsVbYb108tDPOe4EX zCA}nOC*t9J%eS~QNvFFUqbKkK{R-D%<+X_#R(4KLn*3I&^xTwjjE?bYF+~*$>oq^n zKG{R`jKo{oV*+{q$XUHmXSF(KR+Z>K48ooJ`+wcXhzS3VQ`&<1r%#{K)BogC`p6lb zHFNp+MszXSYd#6JoF@M5@s!;6KhzV~|ANdJ*XZoht5k07Zl4UDzk{-JMle}$*Ab@T zMq>uwqc~zZ&y|(v?XxMuVZhfEoJ4;h0FhujFD{TNR?|C}Sip2t-<+K2q z!-4O{A%TKlq32{ScPsCpNaIGysgxFv?uCig8u~>GmgO}D>Z8OH;lSryE?^{JLB=dZ;RL8-K4c z{1zWqr8YG#u_qSAv9fsg8r{|Nf#Bbx#T5%3PXy`fpE|Ax1;0ItC_}r7JPp`COl;}K zERE%0K!0C<{S)%1808)A2YoF$C=D%Pg-BMHqr|563hvQ#>?K4oV(q^f!Ye(y<7(d5 zzYMi27udcJ{O~fB; zUcgm{Gq{2m=8E;s>~q>NGhN;~+{I{Yy|}|b1KhF8&-wB2Zn+~5|D`&H;R6pwa1Pud zbLUYF1p;)_doH9}RCoH^abXR*+8AE?_I}6I*@G@QPuTTYYa6%FX6RFhYk#YNhk!w~ z^C}HEvnF;|DoE`_MS-Yqm&R%PEF&m+XX!FFld8HQ6+trfA9LRIW8$s zhufWS$@;g~F5ewykd7l=Lj;CyQ&{o<7!B zmI{k~WhboY(Dfehe7#C-RTSC}D6ey3+0(M-?ME@5MteGap5MxNxfo!x(&{AO7B4$i zi&8@~cv+{c!(;NIMz`%l*M`Y_er$%!zc~{x<%UUUJ|1VWhsHmqUZ!ALL%_p!bPR`V zsReXk*TS5Y#wkW+$$zC+J!aeT^xM?W?Xwn9n}kRmV0_X&j?g^=o;MCMT2$K2KaviM zTf^-r(9~PTZb@g%zmBi#RKTYTV=VA*R2&m!JO+~NVb~rl!YRT)3dHK_2Cnt7Ald^eY@=S3} z895*s99y_7*a}(jrPa=2xgpm-;a1BYIhWe)wmSg63pF0ZIWCXe&=f|@#6W;Nv=>`_ zE$J0}Y_-I)!)Ab_o>kAEA1^KKl#a_rE43soV1yaTX7Bbr>uE=(p&z;fdkDNRECBro z8}U1Cq@O1dV}IV(OLx8lWS=Wt{Jhe|&K(JDek1@thth52EDguQXeC_L?0ZoNY2=@s?UPJJzK$JWSezc3e06Aml58~I8kNIayHRur2|^@39o162$%mzGMR&p_r( zPSOlJnSLZmr^LjkoYtNatv#Op{bc1GetG31$_Wzlf(mA884W5cWj$vTkYt7Xz0~0s zTE*m$5`V$1R#OH`PnO%v0N|{nT&{JzFY87peF^`8UIsaQDMow<#cbP770eW`47&nO zEQh__DrU*Ep>cnNHD`YmxI@1!*nti=O-~VI01P|f1S?H>XWSmPQ({p$+mE_1iB+i* zwG24qZjk{*Squw(FNp{*n!{a6-{py(xfjvH%zx&9q4hl?9j#f{sg^2P$0X?I^Y2sN zXeXFi%~^~jV%02OikA|Jk;D@E>%aWlH@hblSq9H^*^`Tmx-VR49I(v!4riy%qDDNt z3ZG6?YOC2C^8|(F5tj~M@G1(dJ4Q)$Bf4rvA`$BkltI42L_ctFV!ZFz)wUA@Dlsx- zo_}n(9OR~>&&<1^!Kks3#{VZf(k7#!#>|_0*{oW?e;-Cr!TcYw(-rW(L96U%GyvoxrNc*h5?z7`fU$=IGV}w~N6j zhA@U+L{oQ&GD%ET`PcvY-zjhWt?PGStbY!`0b?I{7~!7bBE{A|EI7=w;fjDI&2%Fh z^<>M-omow1`4C;@fIs&vo#N-29XD*F4oEi+>U7aQa^upO4&3gwPn<9Rb^%k?sV!szcM1@T1wi1apW9Dr+g94n#M3*e zr_-Tc4&8AB4NBwiwSVI}r4GF`TUXrm?=BraAL;;Jq$9Z1Q zMd^oB^z_33)64pSiHac1!t2IxfSTd3vkU;C<4TjIQLwI}us^OZ_24UjIbG_7efZ)} zmu|x_uxgu2wnJBZ<^&yCwM*l!OCqAEai?$7wX(7g1ZV^}({Ur=HLz@AyMGw;&I(N4 z0!iNn7O;uK&~|_|?1pgbxnN$k^9&2e_zs3lM@1C|)bryn%_b(Gn)LDS*zckCVO|qA z)*gvy<+WSu=`_ zGg(@K{a_oDvN1_*8I9RIW`7pdZ>comrAUQ%rcEJV+3=Xf7{uuEafqWwL>x@|ABM0v zhVd5@)_f0u@yki_Hv7y!7r-j(F{GCCrpGb~CHA(;!gRiMVMZ>x-DTG$=G(JsOEWZ; zKJK0;tVcvgIwh9_EU6Tb#zetIDhOjEl}2XvIAXZ z%LaIFZCjKwy+bL}2N-BNzb5#1pkQS0+2&`=D718eT-d%Qh9oP%?cMEk`R)e(eVLjA zJSW=l-oO7(?Eq>XQO$SuKtn_4q2C$-0faMSubwoGCkcQJ6V&kmkr?lcG|1b-_M5jy z%XsK4i_>QLQ#kB77k_U9n1JDzWoY<_-d;x77$jc^8r}G{PEhPdLti(xV+)v$!M^MSl6InqixnU%$m7^A8V^xwTDlz>IVFT zn)E8xT(_ZuhW{`TMy*ma*R^V3uB}v7%+1w;W>%n;I=)X|R)1`BjlWy1uqyaS!$-FP zlwd2BEpvUfvTjzlH1TaS-K|F5_VB5OPb>Uetz9u!x1g(<38P+N(4E30*~25+6b=1d zP1`UxZK%7h(FehTU-4hpT-{zXaikmkL2U)Od2tR!A7qI=H z0=0Ik+KRbVhkuVc3=4_@rY#%(;8$LE-Q3*L0R7c~858`$VZZNCQS zhuPb!SI02?c2zU$n`XU^Xf)Tlbp@ZAxdsRvSD^bIjC_m!nN^tS>bkwQrmYFQ*Ad67 z(0CiFtkx@L4T@HwZfyf*5q{Tu_*$)PZfw98K=#%O0Drtm~qJSDLK> z{99W9{npBU9o~V_jG;OLytz_=g@m(L;j`GS)N|{I9-h>zU4UV2tyjZW>TIE|!XHFL z9gtMj)^IUzt&gE_X6xJO?tivmy4LnKaQVSRZvu)Dk+l`*uZDeY-3Dvs>ITm0S{q(l2UO#-SlIwv1IpGA z=c|D96^-Vkx(Qz^2w4rf1a#Ny`%tT`jXv0_ z*}&<=k3Fb0uI&|7(qyF*AOvfGYFreBwWz&4tOa=P7FDarYC*M9v$ycUmUvo2+Oy0sZhFf1BoQ19p?SB}!Icp~3QiwS4<-OIz97IH`B*w*k;a7|y)!W_^sir3*{b zu4#gr0NJg=wynaN0}2T17Pj*mQqL?L0LBSU_3b;Lg56quT&wS`-v-dqxK{1fswW$_ z?||^pI5wah03O$IX;68sh7SOd$`kyBkAK!?KC0svcm}Ym@KiZG5-n9k3t$DtR)alJ z!>wqp?cuCoqm^6>P$S&}6tEU5*hGceSlv3Q*Y|2$G`9rNmIehI^jl!I;0FnS`iJ2t zcJVC5!wNU|`Wk(hu=6%x2XC%xbWA4S=*d3Rufy`&+cMX7Hjzwi;{Vx~Eu6p_On*6i z*~Tqcm-Grsv<+Nd7`pq2o#9B&Hes7?uF(gyj_o5Efw`>leY>#_0ItEQva;S|Al$x# zW4^lzt8#r@t95I&lP#pM)%wZiUTt$+TiIK~F|unftl}zykpYLk?bTsf0~NJX&no=a zUiJ1Jey!~g;jXbWdV{?TnC}A3UVm!?`NWryye1_31g91LZXwufJ2k+o1`iQN{EMw_ z>}`(MyQ|p3TAf;`)o@y|i7lFJI5W)^Jdj~|Zy{9c03e?KK>LXDu0RF;;2j*Ot7F`3 z>s_GvD{UGK(9BIdD1dH5*-i~9wuZ!8t07f_5B#qhA(Mh<9TM49JQO!Fv4{JBRcHh#-3~G|FaT&9KB1KrB)mr}o2(fAVy!j;fyee1o(&tD&|n>zko66F ztEz2rE(4d^DiS1osY?G?`8pNBL~Y^9UttVDjqL&WR|kBp0&9e48vBReSM7Bm1adpA z0oI_A^>z9u+67i&3yQNq5PxsDvxVTo08&7$ziC?E(6;b^2HuVhI)H;4mdFNm3;)*E z@SIu$Y6BeLCh(IhfRL5C;GTfzz%{j=8dVkdR0U664cMj4Em^pMgGPIGeF`BGA^~PCv#La+~sv^sR`8@=8LvHtmql){w(>Z>_oTLt?E=k)55U#_ zN{zM}Tq^*M6@Ybrh30#G&1QRG~}=USGFLIG{bTlInu) zOe=Wt%K(FStNISMjl-(Zp$!y%qo(oE2RJ&I{~Ch;iQ)#$+XjCliW@duA~rYq^5!>> ztyK*Uq*ZY*t>YC0Hq|yP(-n-MqT_05w_VCA49aG5p6wF8f{S6fFGr%n%X zn)iXs0;jkp59A}i_y4a%HhRgUFr55`_aVxbQjQ^!;4z>_Y z_2m~oFGIgCE)%88iC2oOmCZze9lfwtRt?+oo2#3R`l``}Z`-k{OsV_@KhO_ed7M0Z zF2?EjV~v!V7MT!oBc{s0?*qg+B#>P*ekh2DQizD2hKPTxZPwRURyhvZgoF8b@)A7# zybRE**gAhrDUjM0c|?DByIk9>0wzj6N}nqcewKe~8xEC(eJlz4SQ4-|BEMhqmh0u8 zeyTsCf_4~{=(V5P<)37UpDMwZ9QKkB{;#iW)ZCSy>a2nt+xGH}t zKJwC!uyA?3Dm9|^i)xcu&L4M74OfG96gwtMR{75Fo0p9?t5WdfGWnj2`=iLkb*E@s zk_dk$4n{EX6Sal(3wO*ox^VlBl3Xs611Vst2a7xJ2QS*JASh$ZjmW$m!Rw=b2Wl)- zIlAvW+wBg?MnxjNu~0K2*N=}Q=7!!uE6!^yo<0})q&9b>QYWEZUS4-s8;V{`wq8?O zR{^2+d0%bWk;fWeTJm04_LM6|eyLk0^@M*m{()~R)Ry(_vEQ*ViD}0TQRRy@ga*wo z>2E$9p|K1lbtxNUhd7l=wZfOp3F>P^YInfli#wki*+(VP?X+RLg+qsSpdXJMmvlWz zY1r>jF?#Z_*YTO-lDpW4-NScpk1)62#jD--Z+Blc5yr~vA&@MLkd9W;YZdZUY&z+h1_vVpt5}C~nl&V4uM@@q6MZ8kRZ};k||v{jQ8zW%%oZxavwag$Eb;2&vV;xNy+%-S+=m8X6CZ@ z_X}9}9Z1FlTBwQUa``P`fF6I;twh5%Tw}VcuRnZb`88Qi%Z~M;WA^4Gz3i}X zq5<^niM}1HLl$hFac9R&#|Bv2L48};!}X5ZcIBrtv^!|0L3^tWg}qN**X^A`EqWY| zU}DKgMHIEd8}aqp{n85Up@ZM!aMbSd2WU!93PMt`l}2F-m_|Fq)j)M?Tho6ss_l27rEaX$R$-|mLP##wF6SgD;)F%KUF4;wxJ&>g;v3e{vR5hI4M{%O{o zrs?;`cF)I@Lf9`XQXuD3zU_Zuom35|BNF#b$$cojWR3J%Jx>g4AI$55_zHZ0N9Z!_HPHVFqbxn<&8(w5Mqbj8 z9v%6ezTMNtVL-`>aF(-9T%QY_xLowtaeF+Vanae~e+@Z%2#nW>^>Aq*M=!A}!Nld<$& zU{(6ANw$h6+Q_k^m$U3;O6PYX(E#tt?u;8ZgA@$@w{YVMTFqYh0`Ci$0BrM1)p+k( zpJ6p#V0Lda4Q8|2c<&lJZjSd1fTe~f7w)q!Zn^yYCIvE@x>$dg^cC0w_YbATyB&8r zxG7&!s=yiZcmhK|DHyqKoa7ouE0qM%WJrQ}|B5lgk&(v3O%4ywDYTu8)C7oov07~& z!k3?`<;GzNF!y5N3r_SIra81Dr6&(7;2P<})#6m?Ws*CJXq}HD{gs035 z2H^xasiM6=i~)b(;oDgPz|jks*?CL>Rza?S)|%{jAgAWWP1fCwOT5C#<9G$ks4biM zLiTa8%_pDsFl{hpR0bJTP9B9yfNYpW<3DFaS)z{4#YF$CU>G;tdK$x< z#wIey2|Nj!Cxn_w8qLP-TNdpU59mgvR;{XtN0d$&N+*v%si&S#AC{ITOG_uF=f^Km zz!R0u(lea`2p}3jw|Lz-TVFNSSI?78f(b~CvxR?!55~g6q! zuwafl;b@p$c#V49-f6KiuG44~SO|fTfh3&qbYa`wtsO9AMArFlVKyxO6Z-Ql!UEbT z!sAy?>h;|_#BujcjSNaYs7i?s6ZtM0f<%9V9}%IR)9F;j2tv#tAimMlx}QX~t#wS4 zpb%b)6Q^EbKs)tEU=;4uMv_4O7BG*5RAN@0o|5{{jkiotle^R>rheU5?YctnB&KtR0B?N(DEIX!3X0dFdBt;-ZR$<1v;Q$R8{(yh-+E$-8 z8H~wiuZX~i+~TETH`=SKJY^6L$CmMXV}oUTdgg3kPyl&BkFYmy!cWu_RB1siz6w7P^f}c| zy1kVbECLAlrJ7*+(=gj*82@Lx zqUy)@AdHf+hW(9BOpjSr+!R#KE9jl((&Sfv<*%c2o?Uqx4a2sdcs76e_=;UYA1U-D z@a%WrS>N?3tnJ+v{E4CR-`RJSRVhqSIc)3-FB;gErg*XxAyaQDi17Ed(pVU-QtV!D zMWXBEGZxwu8@#>(RVKueC*k_9;fXX$tFQ=Fjt^%#A z*Ey=XeJHOe({nc>utB^8@KfTCNDHW@niUz?OlTFZY-~`zw}gK(J+Id(A$#*K;8VsC zMb5VEt)26{_H*8VcayMlsfp)7Dp*{c_?TYmRZGC1?n$5`{vJgMBvG4wX_fEp=OLmQ z$=UyoQb#l^IaTk~TNbh}yGpPGLt7Sx)toq!)ZxgaDMM9_(1QbqM&|kMFl<2|+6s=Y za0i#+>)i=pc8`Ba%Gd#5p5cLZUJlSbyVk9gQ0F4XNA0rXn+jjK}lYarec!?k}RI9Y)WnDfe2uXpR~m%s&Gq$2`L!6A ztQ^poK*~@^POrzb%tL``d=$6*en6NZgg87T0~Y>^iq|o8o;nIQJ1{A5Qb)tUMY|fS zI$>Rc-fDmCj8kltJ$XGA1vp*n1Q?ZzuqCaL54t?H$-ri+By`G}JYybuRUIN^%P;Xz z{P`kE(Fg4SLqiW+?fEXlCj!=T8aQ17PffQ^yJzz!H-q`b*}cHTCaIXFi(Mv8QV*Hf zK@v&3+JhhS3&wnZbK2Fb0m9-`BpW8ID8`BDv~Pb`(~O|t=&`wVc~RgEGx=GiXz8wy zXW2IFI6>_>w$=-A5@Grfj}D8v=IAm?JEF^Xyw1Dk2B@du$UtwSzX$Qq&+Pi9hZ>G` zY3r2(m3ev7s-5(dp(ATTYTb_PQZQ-j!1izdfLECgJIi6D3mg`N#@F8ECZw#wWsbw-|UZEjjQ z9VySYqO^Vi|Hlf{=r>42#%g(m343_KK{mYz>e>xce~{%B{C-ovPBTk^qy3Ar3V@se zSlDv}Ic13KL*gee>&b#je@9)cW7UsBVBszv1?@{L91njHi&uZJ z<&|CZ{`2pbWH7gSAv-r*{7dW{ZBx-6(07&GCO}D#!ZR~x5b^WHUL<)+K=dQH7xu8r z*~pMhH2lVs3lG7&D7R`Ms4>oSs1B9RMONr8pA?_!1u)X@!>GdptEIk+ak4`DUHh`(iQRZP01E zZw61r{eJ@fQ{fb!v!%aStuTVlcMXP3@A8dm@{)h;yEkb_j3)I?xdhB#af|iK*&e;X zzEjNyqxrcjTOeVe*v2<`BQ)^58U6xqXt_XtPx?Bw*|%zztx7C55sj@#E^vS8XEzSx0JO^M$yDyzL*E} zNZyus#azyZA9X^^Ri{eIEv)POkxJRIB3@@5Q(k2k@>kDzJy=as$PzVSqn;8{7Rq6M zl7Rk9F5jm~&;jx6>AzLsk0*amqiPnW8R!HI;tFJ83`mkK4wV)W1vo`OWkk&a!pV|K zozNubMDx~%z6G*>I1Ew-*?wb!V2x0b(ZlzpTenVV?MhM54}Iq=!VMl-FA$Is*(n}W z$W2eC5n=WDEvi|y9bpU)PjfCK9PGZ7qeb}37x)ni zOGu32i8vweqZMN#3nqU<&_;^1p~IC;VH)D;kMe?-bqZB=IiF@oamNkH!h{hHyAWxt zql~8s0^c=i&u;?$mhUtwb9bhoV~hV7@p7`Q7!u;L9VPFMBXHbTnHMlnX3D6SlQ3x#c9kk)k+UTRpl z1;-CnA4YK>c}t&4`e{Osw>dX0hFpKaTHUy!7f5KA7DzDon#-78 zNtJ|#3|?r~8YNW{8fJ9_x4FKKE0(*fW*zqi9Tvb^kjmo}ZE>v5Tk1{o;r5J^x}P|* zc8bilI)zuuc#T=^MzOjVLg`qFR30?fA#x@7Nft0SKz?+4>-d=Z*`YX05iu9=h`IEv z;zqn;<8^jgs~tJ*CR=O~DXDK#OvI+!`|WXyntN7l}e*Ev-A6;VAa zN=J@K3r|3xaG`SMTY)|X$1bAvVx=jIS1+-sq*|t`n0PSfJ(23>vXYW4UJDf8?AlgW zD@qm>tviAg$52p zY}Se3^UVb(fo&Ylq7;jbWc+aicCK2#L^v@l$cvDzNn;)PgmKN_kg5KP%m^bQSp(u( z!=esqFO(tix1(;(dgpmn zw19sZj8cUE#P-g!IP?4G;dsRTq~_(P;te%rbrr5tQV$dU>bm<4Uf8q0A`MYS2tyfdn3t0f)u3{L(1X&BLPdf&QNF+I#omlG8rSScd zts4zcNJ~d;?OR&M0vUodXK#kpeT1ZZ%!Ck@7{(E)d6pb``j4>7yU^v0<_P*Q z8b&FFC7lg zYgi3Yj^a=e$QJ_e0#$#07eh2zI)_vFr|-jWRb`%#c*^fKi+4$CHPO-25G2Ah{IRxKfiKxFn5ihreI?xE8x4hX3RSZfskb6pzO3CV zZ1>7+7x?)raxk_+5`2qoeUvrR*mysP0S!uqdnt#Tl-$ka-Q$wUU^agpUloOSuClS; zk5aOV@d!XX#vVtXi$Us^5g-U@1JF;p4~kj6Kdud4hZ|>{uUgbv_iU zd47R34w%8snnLfueF z!Ju6PJ{$V~ZqRDJf-4s!usFT}BfFC>$U>C1a z4eM`NSWPR5*C1$~`~P7m}>cUS9liM;+L`dwbc3;h#UgN=V9Hb1P}iQetWigT?9 z_zx?nJ=4ECEqqrg$d*!U6h6j3VH9suGeXi3kq;IWv@;b9sXl(`ncj3aH^oSM`bZlq z&M;FCoPr)w(dxbZEj!-SJKieq_$#52z^2AM2eyS#7pe-Q$5J^t2vPp<~{o zeZ5C}Wkra3aB{b@SUhY9X&KpGwG{Q%hBY%-j>>qlS`-QEq%7uTVKx~{IT(@ z!i&?Q%yck{2T>YgX-NgOqUCOFV-SN@kzL4SSnLKpGU0#lE&9luepaPvY64NTV6%`Y z+Y^0;zgz3;EzNAp3g)_r)2hZ-C{%CV-nOcYPU<&QO;`{OS!CtCIzy+9j0?P8^zgm5DqMOj|)H<)dQqBC(1qXb3vCymbq5SEcwt> z;A5dd>@d)+!(9(O?s}NGzMGzz#g2Q7j1o?FJ@S*Ul{m-O*VlR!$p8}c+jxp8iwJd7 z#h`>=qwLbL$r)6s+?3DA3&WEwoNl=%Or7X~p-X=>IDxejARegz5M}Mb-1dEF*lD<| zhi+PNsep6t@h$CBqbNK#OyRjvQA#-vN~PyzM%JIviA4_bw(20KD%nIn(ov2J!7fc< zi1Q_t-Kp*?#xL-})D=Fem3=3kT6~%@SL@#U6vY{TAID zmq>r<#6~A#FA-^rJxI4AaSLnhW!IF)!7fl778V#Rn1kAC0FKI>9K`>W?#6aa#AX~) z-Lq%yYCP=6exL$Ib!vQd+sLoReT00eVMSg7{6I|;*pw4IuWi;l-0%~8y;bo#=oW_d zLZlUH(0A~2L_1WA+hQ*IrR=AI!KoMrvy*?q)BewgZxP~E8ETM}z(tx_2}(_OJwZWt zkCh%e9PaH17(jD|mH}4RF?0qU_p(!R&;Th8n9u&SdzO2xb~-Tm%>54axZ!c0(7qMo${Mu$;Lz*Uk}(TTf)(E z7S3!J|9>|EWtprXc02Bm2kOiU){!|=Wx6OajYZgC$wO}jdoaNYk8&)tDy5q+=(V2ERgt>-;RJT$w#%rj19yqS z;3TFu{??TC&E1r?0(JEif@pvm`%vn#KmWHNnBHQ7F{ir+(=8@gn{}lPmPFTZoB1Ku zsx_pO-s~|qhntt5HWoVRopXPn-97~rAa@Qi#5-r62$MwlEDh!ZmO%*@D8Ps~gk0My z4^wF5VG637+Br{!vMRp7f{IU=Bdk#{)-xYkL-#w7OR|x>Q!&%U=n<*e|D^i&%25B3uvWB6 zIJ@pB%=zIPQ}TaPBKe;S$^VU%{C8^Sy5zs>?4aa-&L#gHl>C3sVH)3Pl0PiNgGB!~ zhUkBQVOJv3+)!wf&}9=WRxb=qs}31)6a!8emRfLjH4Dye(Soxpqup1s;Owri@8(t; zB9xn5VTjpx#Ge(5vel@p)g2f_M!&yhdq z-GO+osk}F!ccg!VO+0d(KO*n39!Sgo`ufaKf8*T@&RG~Z{Hw+SREoACAa=w2lT*E7 z2)Z7RKL63aLSU?Z03w?$%oRz98zu>h)`=uE%@aweIQL#L^8|WN^PRk}`JfZ&SPe?t zuA#i!UC{@fpszS#zT*8a=z|Wi-Oz0JZXfia!8mrsfEs@#!yU=twibGsBhAY^>|=Pi zgI?u!?p1D^US)a5xWPTmiS#swnx}apJ`48}?ahKqdu+sTDvY*%*!E z3^gc?%sih*9@5wcj#>03hXK9A*{=qeF<>db04Y_#=30bH7G$dN&aVyrkgsnnA zhTeH+?sk*fsojX%R|$d{*+&sfIQ~nyVle+5n4Gh`*4(7bxs}&KGtstWxudp$%awmS zxXx;yI(#cex3>l;mni**dTj(ll@<^C*NClKxAr7s8Dx94=X<1X!)?DxsdQm3Q z&jcTO5yOe&4=dGP91R@=0Ty3sz;vaczJiupZNV9X$OLY)*4uU>x8b(opsBUF5?raK zSO&(~a}Tj9o=|)avA`nDpi*LSL*CviyIsLKKCX4{Zh2vwW@{%D{m&S2MrMC5wr`B9 zTXot<9@}5;e#u)$^vm*Fa0AIRD{JIEDfVgcQ7lfDjZ+0V^gemHWhvQ2Nl$Jj^9xhR zX{HEkiBdp9W*kh$$HdSuY5_69MfInPRBK$jPZ}NK9kxINx>^}J8~c5JjwjVUUs;gu zGwq<&Ie>ZgjE&@8#=vL1tsj5xfCpyHvz?^0Kdbi&Xi-Ye@$wWqvn%LGT-w~3mfpAe zIqFx@jd)F>%kcIVoR{VWRUc>+%4-n_d9FL{TB+@aMdC|d$lAvZDO$1nR{3>$+byl z^*4hxE{*->h$|IzdNz?$k3q1gR;%WtH>8ls0>;M&;80`0_J}g9?hYKi@t1N<%iFg zqO(ORh1viiEC@J&Xkh*76Rs-i3qyS~E*r;V!IMp6h#Z3gYmE7Vg0CS{gP#J4%;28e zn-a0Ob$feUU&Kwa5CqH7W4e7ZCbv5Fw2_*u zgvSfw9*#@m9*&pBJsdB~88>grlQV6|&L*8lB&^U7?-9}SIRW*%m1cBzKtG9b5M6ZP_b|>nKCCMKMwMKF z{F8rgt3N=5IJ*z_atTrg3K1I{*Z$>j(hTrpLSgvnp9yK?bpLT#&-VCUqR#_oIUn)-Mc=wGfwmGbThA<)%RM}lKaDterv#w`c;_mKFH@O+pjh*7wodj&%gIGivlvy;Dmll zP^5qfP%J9N3|i{eV2@Z1&NTZQ`8#W}qD-!W1k+}rgA;cq(D#e@8s*!50u1QdomA6~ z3~+y4YNlv`AaHY683w+DX+jS0^Yc`zN`xO{lf#K2#qq%e!43FBmfKJPIIx?XO$s>j z9JZzdf{ymY(+(oAx|-E|EqOt;IZT(ON<3l*Cm+|y11_%ULh*+Ys zYAfJy!V`VEy{&F;@d)VTban=7sqp7H^T2;TW=r3X3DfpkvPbzNYJzrQmri&yl`?W% zfsi!R960p)&;h?Au!(%My2*>Tw_F)7Vy^r==#WUo-{QSm@&X@Q%8nBGBKw)Y7x01> z7-Q&8OE%TT5gpX9zOa#_E}m%2P)7~U7|G2yp4?24;7Xv_+2Pk2g%LTAuKLVa%%OjV z@#~Y?bKEMGMW)=RmYst)U5`P$B(Q(w)t!E}^zHe@a;TYnol{=WP1W}8U4Bg!tv<0x z*B6p>atRALSwX(~#9~I3=N~9$vGz&8y5{KL$TCYpPL}N~R^kO)dOT>@o6hyd5gYZA z&6Yn^zTeWvZ?G3UNJ8PK{z86Apt*lN6su8px9c`&yC?+Md9_xxZJ}9PFX5Dfjc_Ha zU67>~i=lRzl)!&fbOf-oLiX*n%oFP-qZkNTdV>W?xKwhc5Nm5D5@^a9!rVKC7yYa*vdV-9fe5?q~uA}0~}Oiw|LX)`A{^(>EMYt|4bB^ZB$B(}bN#U3D;YY2eauyu{@Pv)6QG*ML`H;6Ol`Um{+s z&4UaZHK*yaj!c{rX$IS`ozMjA@d?<231C60``n-XW3BnDvR_Tc>7|p`BewQWn`fu3 zvsw#@jK}WO7lXif$L{|8?h1cd_t=vK@v|(l=<^>qH6ZL342HjgOvxBL1!sh~8F7}U zrJ*b3Jl@)aBQ5FR?z(?i8ppgi-8`!Ue)}qdBE$-Z@0F2OPM_g3;BrZYk$Jupj6ono8jGfj%s`8|k!)$-5f#3N5II! z8xexeii%RA5(mM_!s`P|vRW;lau|*&S6$sC7CSIm1oSZ)aVX1D>&nI(I!?d30|Z$l zHLJ**B4j74t`Iv?4itZ}LR3;uMULsoa^N=Uz&$n&-2H!=qjZiBngt^q{@&cDFh}U)5ta}rFOz+cye5@VF&HI89Jo20@ zXo){9P}d%GL?{8&`xrpIzrtxHG`$CXFwj0YSm}eNrue{c(?a0zJ_Zh#bYMB`@9Ile zP)un+e>X{dW}OipCtqcQA-1vu&B8;cxWcg&UG=h2YW z(*EIFEMw39-om&*El&4ENHGvY9HM|K!gwG#(}$7;y{sK-6aH-GJgGf@!Y1XT`wAxI z6%2Q;e)`h=h@1#nkoU2o7FNDz-@jM-{x8L@Gm${_dh36Yz5a;Y6xrxYv)3#6`DwW} z`aFf#){Ci|l0H!J}Q5ck|7T|uX@(Qg~oJPu}_fP%J^q4vp%*FI1F9u=OKE3T`YD8yv@IaKheESmAmjxNnx7RN!_Si zV87?yR@4vQ%K6SovN?jK;a^3H>Vd_ZS(MScZt1b9Ou+oK1jg=oZ@<`h609-6CR!SK9Ah3xdqMfwJE zorVFw(81_r>KBdB4d6FLdh*DCsLDCMz5#rGo<85ay=^Ohca*;aP@|A; z5Qw0PoRt;A8AgLa<{}VZKN1Fvone|_%9SimM=!#S7Ic-NI4$(QChnw!0u$zW6p=j% zENnQuWEQ&^xjTQW*BhMw^WoBdbAvBT@GMazU$RopAso%?ZQr^J1yXb`$G^=M&zr zwq1fRzg^0rUVbWsqI_BK3r4khOp9tPn$(`R5igGx1l{)Jec>?&6OFKo0SNO2;3y|N z!pQ7>x+<897NnF%+brz1c-qr@Jg<~kCJeY2wfTIR@{9RyG+(^*`>lV{m-QQZ4B1b2 zga$2&sK}#*>MSWCkFGH0f(1O)@3v5tSNyXx5Ag3?njnfo~J#1g0+qc@!-(+}s zi`GMVkouvU%u9PfT^;;ga?M2LnjOUgb1$xWt<`eN?Rl^*LCec3IphWC`5Z+~?3ywg zSU)VyI$HGT`8i2xnk;{dfEPSNHXKnRY0DoiH81d%^vq?o%c^Kt-WNheDfEJ&10uW% z$B+JhvNY_?CTG|!QIT1rKk{)qf5aaL zk#YN|sP;3pKX6lRn?2CcYcb?*^Ke1ENH&|VS6wl25 z9V-1x5oN)+{~GQ`$a$i`HQQuZ7RC$jlm<~sHg3;KmQ^HF=ub`)t)Y@9u8L2{Fkt=3 zUKuel%ek?vN|S#)S4V%KrBMz^5&8q?$^)2%XLhAiMyi;#r$07aGVfGcS${kz86f4! z>5oOp;#QG5jK@P|EPbq~so(yjEHwe9824Wdu)OEP7zGG@l5fA4((Y+`R?8w3Y0XON zaCnSEq(+c8*!6eeASOu{u{ru%?&;a$qU!HchgVN$kd=QOEQ7JW&g9kW4l1t>oHgv6 zfI|jGJL2XC3X_Aj7pK>v96E~Qj1sKIAos!%fWUqJ27D3uUaCTYW8kS6i#&^0V&lyS zO{VW+G*of+?NW0}Z)FB3EKMf|d-feMwu*R({}wMCZMg)K+%5opuz31>?Ra~}6zL~% zlLgi1FG+uwTVY{u2pfc*5Oaaa><_5sI%zip_H+aEg_hsGa-6Q4;F|hQf&n5ZK5W)m zE8V%r|8QX!Bp6j3x5qeN)sL`~KOK>1j7YjwnBZs#VkFE6=t%8R-0vU9&P@hl%qCy) zh13+Fm7^66ab!4^biSXXl*VwdU{VpT(mhol#HxQdZlS5;Er*j=;TBd}>gJV}RK1H` znQ<`PCbaRadwaV!!_w^?X9jbo)MtmyB@3?4wyJ&*yv0*z2-=5@=)_oOOBKY#xLHXK zltCwK>re@f5$w7N0^eYtwY-modbSYwi!k!a@dMH4+P?KZLgi(rd(nB!+#T5sXS$yJ12gLt1@CsoQOY z!QBl%!rENw$H75Bqx$e^a_{a55C@(57q z65UW3T4TMWrdW{fVaO9(nIA z2C{DUL;Ul_r`LgF^TU;Cb$gvkb~%5FrVISpxdT&0%1{8t%Ap zjQ=*>g#P{2O}6mg*8JH&Jbn6)RvM2-?eHCFG10L5^WobX^>X7y_r*`m?eQQG8b_DL zKm31CO9KQH000080Q7PnU6JD^?!0y=imeNVYKi z{rwfZUD46y!5A&9cJ#zGn*p<##TX`TI0O; zPM$p<4NbGYQYk|c9}_=nStiTppTJ|vk`?JO!RGWMdemh_c}x_GMfZ7OtMkW1!Fdu^ zTS-lSt(Kq#mSw>kQ%|vvi46J*esf+)@S6vXa^6G6?*Tky9}}GOWiF_D!33=_WtL$x z;EgjHV>uIka@p*CBKYfp$!71|60jp`85WjMWHqi0miG#zOv}*JWlT9P1IsPoL~H0j z^aOhSQL2?Q8~b z62$mv!mee_OfAq>ph7Ii+$Y?>3jX-eQi#%gBdM@?HqVwgxGM`ywZQy@IT%x2QudN1 z&xQNMvmp!0eZmw}Gi6GKy!iDWQLu!RwUV~d-b&j zwiF5L1tDyxm(&Bpf_~8ct|WQ6vL4w7E;1o)FBuC(J3OvrQIu3?T>eW*QDohJl+CBZ zO131_w)CiK2Sd=Ekto7UQvT29YwDWe?xks+0Km(Zpvdz`M+}pdwoVmDDZjj?WECyL zLXnP7pyEeGf*`(Ja~=*A08BgPnsc0#v|kY0Q6dv zZPP90koLPLT@XdsB^X75W%Xl!Fd2YLnz8x9djzM2*K8{M9FF zT<+_GELy8a9v)dP%%b1!(xDNMtCwZ|#Mhj%DFC8EbMw}iiHtsB?w4PG&KTH2Fb4QL zQuc8Lu>|yJ{d@$I7G?@q^{>eOJM{Q2jCaxIyf(fx2zA!!@gd_4T$C1qtyoT-g}ihy z;ovS1pvh6x=R>IfP|VVY0Gj*!v{l){ka#N`e?s89f8YV?x@6MrE)(re1?V6sQC!#x z#!^;OinIXz!u_!*8Jt{BsR%MVQ$HLDcI6% z7GHzU&!y&qTMmOZNJ8dlHl4> zVc#ol;-%S0Y2Ga^p#Hvy^9ct_8XSd&aRrl@8xEP@Ib$I32bciKJ&r^p1f39&`+UN;tp$frCf$p1=)k1(Wz{;vF*{nRUK>kHQi)9lQ%y4c6713ySpf zp;*Y0^=>7?PVrO#OhB{0N;hOMfm3u)aG&sfBiO`H?HlI_n{*cYac01sQzg^<$v!ZJ zP_v>0_<7r*JQrXEA6|fVltykGA8f;I^v7bc@WvXj3Fbkz=BqDVe{&(pkQ4#7{}kdG z9K=FcZmtYj-2ixY&@6+INiOd}i_>mGR(0D7S{G&}APkoDB&()mfhN2yWn5qfKSEFr zk;3VS!CMC8!~m1M&~)sn@8Tn%DG5+T78A~AIL*6@d|({H70f4hv?*y14oWk!zV2ur zXA*#P>C0oV{`li5e>#42yr3fyq96FznLWp2%gmDpEZW-WVS$YoCjtdCxfIsOcThx!V);v(BjWZw*ZbfNHo>7o{VSJLyk!wh& z+TL;&eYlpE374xzXEBSB_lqnqcX#b9;;)}YE>}l8ki2ODe+)z#C35`v$ng=Lj`#Ta zsZscZ7>*hAazy$9AeJ%-h*4k?o>n5mcryRN{PNJ-e?@LhSoAquVe*qKSaG?ya|!uU-$?|!rftIMSsHh z4riiF56<|ae**+>Bw>QxRzl3pO>B`O35%=T{N+Wz!0TV)?P)+BX72s1;t>Cj{y{=R zh{L~S4>9OPlcqsA{P6j?xx9aYlH(df>o(`^&dvMr`MJLaK@n*9=9u>1855w)`xr?l zBCS*84oDK{gd*+~b-sC<@55HsmrC7@#-J|f3Je6Ce+*w?&ip7&tfejKIJ}m2B#H3 z*GoJx8oCB(n~YI6_SMCKu@ z@Zewf|0(eQzY=h7{{9PY%3ld+irGki|Me%wJJu`jm9tuZ|HVFJ{8tb*=7RqBUuY`C z>op(+-utvO5I9co>knLmkTN7)5-b1_?l1gXKt|xoB>-cZa1jVA;@xYsShg(^^AOc@!9=>4)z_!zQf8&f}CMX+8{c?$6E|&Z_BJ>3^7&3a{ttaFV z59}XLBr}T3C9z}h8aBxD%2T{unLyYy2T_FcPz*F08S2%MDAH0=MT#~R8uT9FUlCRu z)6Ze(d08^xi0%;TeTNL>yg9n{Wf$u)i%eANgi45byxiGBFzuxwi(wWZDE9doe^T+{ zpTYtXwmKP4q(-Y!q*xKzZ`naTb=*9)`iE>K+1wRd$+zSwNAwLbo;Pq#7j((kls(JI zHEk~_ili-vDZNGM@7AG_j%ZZ>qNCcE@t+~xiY24+4;2kJ}o zK9vevSp1J*I7l=o_{w~uigwsCl=L*$_p&L^WCdz4qf(Q)7cyQ>F}llMT) z8%&XL6q?5bD5yGx!sa!S92JP;jn#x63JewD5|suzD}XFI*fS`<0#i*8^+T$E@E@0< zSQjJCYKi}*BS)#ra{g#Pe?OtC#JBY;gjY!pvuf}~Wb-6MP;ye7FU;U$CWf2{jgGcd z7uV&RZN{t$=Cs1$_OaZ>34HknIqQNVi_aLaI$^a1`whn^7qeHA1ZvL>c^lyMLOx2O zFE*T0GB`nwa0dvhhCA6jPhf+f0_ohLw~z$}1i}J;12P~X^iD{Cf00UQw)N|OHqvQf z2wTZagiC%gfBNPd=9i`U59}{`wUsts!Aca{(c~wDoIBV`X#Vu33?PlhHwBLWyC-63 zAu5iIG+5v8%3>?ZItD(*)w@B(mZP1zOjGX@gv~lE;Xu|3`3u7{E>MalAjTx1>k#~L zFRA;Vrm&Dwf*}bhf3)2$i*k2|Fwf(83V+@tJ5qKYZcO5V1N%O=XEIm z{vpTSKk&JG_U_mJY$Z_^eg@itJOjpe_l2!sKnSuqs`HKe!dXUwF$cl%q2Yux9-M;YDON|iV-DU7lpe#351|vygk9S>vKeqp3X1jRadWAYvxT0E zqyHWdDos(~1QAbx*gxkT0IijnfLN{p+MiZ}CP0`G<XWEgXqrj#mm^xTNuos}jV}w$dQ5UvIGz0cnRz2N$9#b=--^4I!ENx(E@R~z=^A%CMyDJG+;tcsLfDSRE z{YOni@FdOO;#L=NhW524Vagb>Iz^GlQ_Ewsf4wS%$7uG6CL+Riyn2t$>JqK3WR-9r zqiL(bF#h$0TaoFcKMuBW1{1~_ z`}H7hQ_uI|T_V?uSzbzox7Dn&#P|M}?6=&DfSJVSks18t6CfVvT` ztU}R{VqS$@k81a$CuZn|v;f0~>t@d- z5$uCYQ{m&?*T3%n<$CRcAHo9C6<@MRe~Gr?h&T@nyEXrRc?$ys!LDMe-`Fz0e*KR- zADF;k^ znCoQ$ln)D$JZUn&tV52sTK#%}f1akGcnT0L>E3^WTyO9M4UV8WcnC*cI_~0R&6G

Q@MsHla6SM+>z6l$e}!Pk38Ma& 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 KM?BO6?f(FpJEjT% delta 127556 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 uK12u}s-a475LYjI6GuCGc4ig^CkIO' + + '' + + '' + + ''; + window.L.marker([lat, lon], { + icon: window.L.divIcon({ className: "spur-pfeil", html, iconSize: [13, 13], iconAnchor: [6.5, 6.5] }), + interactive: false, + }).addTo(karte); + ziel += schritt; + } + gelaufen += d; + } +} + async function initMap() { await leafletLaden(); const el = ROOT.getElementById("map"); @@ -591,7 +667,10 @@ async function initMap() { ? t.route : [[t.start_lat, t.start_lon], [t.end_lat, t.end_lon]]; const line = window.L.polyline(track, { color: rot, weight: 2.5, opacity: 0.9, dashArray: Array.isArray(t.route) && t.route.length >= 2 ? null : "4 6" }).addTo(MAP); - track.slice(1, -1).forEach((pt) => window.L.circleMarker(pt, { radius: 2.5, color: rot, weight: 0, fillColor: rot, fillOpacity: 0.85 }).addTo(MAP)); + // Nur auf einer echten Aufzeichnung: die gestrichelte Ersatzlinie + // zwischen Start und Ziel ist keine gefahrene Strecke, und ein Pfeil + // darauf behauptete eine Fahrtrichtung, die niemand gemessen hat. + if (Array.isArray(t.route) && t.route.length >= 2) spurPfeile(MAP, track, rot); window.L.circleMarker([t.start_lat, t.start_lon], { radius: 6, color: "#fff", weight: 2, fillColor: "#000", fillOpacity: 1 }).addTo(MAP).bindPopup("Start · " + (t.start_address || "")); window.L.circleMarker([t.end_lat, t.end_lon], { radius: 6, color: rot, weight: 2, fillColor: rot, fillOpacity: 1 }).addTo(MAP).bindPopup("Ziel · " + (t.end_address || "")); MAP.fitBounds(line.getBounds(), { padding: [26, 26] }); @@ -637,6 +716,7 @@ async function initMap() { let USER_POS = null; // {lat, lon, genauigkeit} oder null let USER_POS_TS = 0; let USER_POS_FEHLER = null; +let USER_WATCH = null; // watchPosition-Kennung, solange die Standortseite offen ist let STANDORT_ADRESSE = null; // zuletzt aufgelöste Adresse (Cache über Koordinaten-Rundung) let STANDORT_ADRESSE_KEY = null; let STANDORTMENU_OFFEN = false; @@ -779,6 +859,43 @@ function standortErfassenFallsNoetig() { standortErfassen(); } +/* Fortlaufende Ortung, solange die Standortseite offen ist - "live bei + Verwendung". Die einmalige Abfrage oben bleibt daneben bestehen und ist + weiterhin das Richtige fuer die Uebersichtskachel: die zeigt nur einen + Abstand, und eine dauerhafte Hochgenauigkeits-Ortung auf der Startseite + waere Batterieverbrauch ohne Gegenwert. + + Beendet wird die Verfolgung an denselben zwei Stellen, an denen auch SMAP + abgeraeumt wird - sonst liefe sie nach dem Verlassen der Seite unbemerkt + weiter. Genau das verlangt Apples Vorgabe fuer "Beim Verwenden der App": + erfassen, solange der Nutzer die Karte ansieht, und keine Sekunde laenger. */ +function standortVerfolgungStarten() { + if (USER_WATCH !== null) return; + if (!navigator.geolocation) { USER_POS_FEHLER = "GPS offline"; standortAnsichtAktualisieren(); return; } + USER_WATCH = navigator.geolocation.watchPosition( + (pos) => { + USER_POS = { lat: pos.coords.latitude, lon: pos.coords.longitude, genauigkeit: pos.coords.accuracy }; + USER_POS_TS = Date.now(); USER_POS_FEHLER = null; + standortAnsichtAktualisieren(); + }, + (err) => { + // Dieselbe Unterscheidung wie in standortErfassen(): die verweigerte + // Freigabe ist der einzige Fall mit einer anderen Abhilfe. + USER_POS_FEHLER = err.code === err.PERMISSION_DENIED ? "GPS-Freigabe fehlt" : "GPS offline"; + USER_POS_TS = Date.now(); + standortAnsichtAktualisieren(); + }, + // maximumAge klein: eine zwischengespeicherte Position aus der letzten + // halben Minute waere hier das Gegenteil von "live". + { enableHighAccuracy: true, timeout: 15000, maximumAge: 2000 } + ); +} +function standortVerfolgungBeenden() { + if (USER_WATCH === null) return; + navigator.geolocation.clearWatch(USER_WATCH); + USER_WATCH = null; +} + /* Reverse-Geocoding über die öffentliche Nominatim-API (OpenStreetMap) - wie die Kartenkacheln oben (TILE_URL) ohne eigenen Schlüssel; bei diesem Aufrufvolumen (ein Fahrzeug, nur bei geöffneter Standortansicht) im Rahmen @@ -961,7 +1078,11 @@ function standortMarkerZeichnen() { } function standortAufFahrzeug() { if (SMAP && standortBekannt()) SMAP.flyTo([CAR.standortLat, CAR.standortLon], Math.max(SMAP.getZoom(), 15)); } function standortAufUser() { - if (!USER_POS) { standortErfassen(); return; } + // Noch keine Position: die Verfolgung neu anstossen. Das ist zugleich der + // Weg zurueck, wenn die Freigabe erst nachtraeglich erteilt wurde - ein + // einmal gescheiterter watchPosition-Auftrag meldet sich nicht von selbst + // wieder. + if (!USER_POS) { standortVerfolgungBeenden(); standortVerfolgungStarten(); return; } if (SMAP) SMAP.flyTo([USER_POS.lat, USER_POS.lon], Math.max(SMAP.getZoom(), 15)); } function standortBeideZeigen() { @@ -986,7 +1107,7 @@ async function initStandortMap() { standortMarkerZeichnen(); standortBeideZeigen(); standortAdresseLaden(); - standortErfassenFallsNoetig(); + standortVerfolgungStarten(); setTimeout(() => SMAP && SMAP.invalidateSize(), 60); } async function initVorschauMap() { @@ -2254,7 +2375,7 @@ function vIdent() {

Modell
${esc(CONFIG.fahrzeugtitel)}
Ausführung
${CONFIG.ausfuehrung ? esc(CONFIG.ausfuehrung) : "noch offen"}
-
Fahrgestellnummer
${esc(CAR.fin)}
+
FIN
${esc(CAR.fin)}
Motor und Leistung
${esc(CAR.details)}
Erstzulassung
${esc(CAR.erstzulassung)}
Kennzeichen
${esc(CONFIG.kennzeichen)}
@@ -2763,7 +2884,7 @@ function vEinst() {
Kraftstoff-Rabatt
+ Shell SmartDeal aktiv
${CAR.smartdeal.aktiv ? `
@@ -3897,7 +4018,10 @@ const ICONS = { /* Wagen von vorn - dasselbe Symbol wie in der myAudi-App (Audi-Symbolsatz, assets/icons/car.svg). Flaeche statt Kontur, deshalb die Klasse "voll". */ audi: '', - trips: '', + /* CI-Symbol tour-s statt der frueheren handgezeichneten Route - dieselbe + Fuellflaeche-statt-Kontur-Behandlung wie "audi" und "stat" (siehe + ICONS_VOLL). */ + trips: '', /* CI-Symbol polls-s statt der vorherigen handgezeichneten Balken - dieselbe Fuellflaeche-statt-Kontur-Behandlung wie "audi" (siehe ICONS_VOLL). Anders als die handgezeichneten Tab-Icons (die im 24er-Raster deutlich Rand @@ -3920,7 +4044,7 @@ const TABS = [ { id: "fuel", label: "Tanken", eyebrow: "", title: "Tanken" }, ]; /* Symbole, die als Flaeche gezeichnet sind statt als Kontur */ -const ICONS_VOLL = new Set(["audi", "stat"]); +const ICONS_VOLL = new Set(["audi", "stat", "trips"]); let route = { name: "home" }; const ZURUECK = { trip: "trips", fill: "fuel", service: "audi", reifen: "audi", ident: "audi", @@ -4286,77 +4410,17 @@ const LUPE_SVG = ` 0 ? a.slice(0, idxUnter + 1) : null; -} - -/* Alle aktuell im Setup zugeordneten Entity-IDs (domain-frei), außer der - übergebenen selbst - Vergleichsbasis für entitaetIdKurz() unten. */ -function setupAndereIdsOhneDomain(ausser) { - const ids = []; - for (const feld of setupKatalog()) { - const wert = setupZuordnung[feld.key]; - if (feld.liste) { for (const w of (wert || [])) if (w && w !== ausser) ids.push(w); } - else if (wert && wert !== ausser) ids.push(wert); - } - return ids.map((id) => id.includes(".") ? id.split(".").slice(1).join(".") : id); -} - -/* Die Entity-ID ohne Domain und ohne das installationsspezifische Präfix - - die tatsächliche, stabile Kennung des zugeordneten Sensors, unabhängig - davon, wie Geräte-Slug und Integrationsinstanz beim jeweiligen Nutzer - heißen (z. B. "testcar_b9_fmm003_testintegratoin_" oder - "audi_rs_4_avant_"). - - Das Präfix ist NICHT das mit dem einzelnen nächsten Verwandten geteilte - (frühere Fassung) - das kürzte in der Praxis zu viel: zwei Felder - derselben Sensorquelle können selbst wieder ein gemeinsames Namens- - Teilstück haben, das nichts mit der Installation zu tun hat (z. B. teilen - sich "oil_change_due" und "oil_change_distance" das Wortstück - "oil_change_", "can_fuel_volume" teilt sich "can_" mit einem anderen - CAN-Sensor) - genau das hat der Nutzer live beobachtet: "can_fuel_volume" - wurde zu bloß "fuel_volume", "oil_change_due" zu bloß "due". Stattdessen - zählt jedes Präfix, das eine Entität mit irgendeiner ANDEREN teilt, als - eine Stimme; das Präfix mit den MEISTEN Stimmen gewinnt. Das echte - Installationspräfix teilt sich die Entität mit fast allen anderen - Sensoren ihrer Quelle (viele Stimmen), ein zufällig geteiltes - Namens-Teilstück nur mit dem einen verwandten Feld (eine Stimme) - die - Mehrheit entscheidet also richtig, ohne einen einzelnen "nächsten" - Nachbarn zu bevorzugen. Bei Gleichstand gewinnt das kürzere Präfix - (vorsichtiger - weniger Kürzung im Zweifel). Mehrere gleichzeitige - Sensorquellen (z. B. FMM003 und eine zweite, "audi_rs_4_avant_"- - präfixte Integration) bleiben dabei weiterhin unabhängig voneinander - korrekt gekürzt, da die Stimmen pro Entität und nicht global gezählt - werden. Findet sich kein Verwandter mit gemeinsamem Präfix, bleibt die - volle domain-freie ID stehen statt einer geratenen, möglicherweise - falschen Kürzung. */ -function entitaetIdKurz(entityId) { - if (!entityId) return null; - const ohneDomain = entityId.includes(".") ? entityId.split(".").slice(1).join(".") : entityId; - const stimmen = new Map(); - for (const andere of setupAndereIdsOhneDomain(entityId)) { - const kandidat = praefixPaar(ohneDomain, andere); - if (!kandidat) continue; - stimmen.set(kandidat, (stimmen.get(kandidat) || 0) + 1); - } - let bestesPraefix = null, besteStimmen = 0; - for (const [kandidat, anzahl] of stimmen) { - const besser = anzahl > besteStimmen || (anzahl === besteStimmen && bestesPraefix && kandidat.length < bestesPraefix.length); - if (besser) { bestesPraefix = kandidat; besteStimmen = anzahl; } - } - return bestesPraefix ? ohneDomain.slice(bestesPraefix.length) : ohneDomain; -} +/* praefixPaar()/setupAndereIdsOhneDomain()/entitaetIdKurz() sind am 2026-08-31 + entfallen: sie kürzten die Kennung des gerade zugeordneten Sensors für den + Beispieltext im Setup. Der kommt jetzt fest aus dem Feld-Katalog, damit er + sich nicht mehr mit jeder Auswahl ändert - siehe setupFeldzeile(). */ /* Die Art des erwarteten Werts, als kurzes Klammer-Etikett direkt neben der Feld-Überschrift ("Tankfüllstand [%]", "12V-Batteriespannung [V]") - eine feste Eigenschaft der FELD-ROLLE selbst (aus dem FELDER-Katalog, einstellungen.py), unabhängig davon, ob und welcher Sensor gerade zugeordnet ist. Bewusst NICHT der Live-Wert eines Sensors - der gehört - nirgends mehr hin, siehe entitaetIdKurz()'s eigenen Kommentar zur - Kopfzeile. binary_sensor liefert immer den Rohzustand "on"/"off" + nirgends mehr hin. binary_sensor liefert immer den Rohzustand "on"/"off" (unabhängig von device_class - die beeinflusst nur, wie ANDERE HA-Oberflächen ihn anzeigen, nicht den Rohwert, den diese App liest). Bei mehreren möglichen Einheiten (z. B. "L"/"l") die klein geschriebene @@ -4409,18 +4473,33 @@ function entitaetCombo(key, idx) { } function setupFeldzeile(feld) { - // Bei einem Listenfeld (vier Positionen wie Tür-/Fenstersensoren) gibt es - // keinen EINEN zugeordneten Sensor, dessen Kennung sich anzeigen ließe - - // jede Position hat ihre eigene Zuordnung, siehe die Unterfelder unten. - // Das Einheiten-Etikett neben dem Label gilt dagegen für die ganze Rolle - // und wird auch dort gezeigt. + // Einheit und Beispiel gelten beide für die ganze Feld-Rolle und stehen + // deshalb auch bei Listenfeldern (vier Positionen wie Tür-/Fenstersensoren). const einheit = feldEinheitAnzeige(feld); - const erwartet = feld.liste ? "" : entitaetIdKurz(setupZuordnung[feld.key]); - // Nutzerkorrektur 2026-08-28: kein erfundenes statisches Beispiel mehr (war - // für Reichweite/Sofort-Aktualisierung schlicht falsch) - nur EINE Zeile, - // der tatsächlich zugeordnete Sensor (erwartet), als "(z. B. ...)" - // dargestellt. Der Klammertext selbst in Label-Größe/-Farbe, der Sensorname - // darin in derselben kleinen/grauen Schrift wie die Einheit ("[on/off]"). + /* Das Beispiel steht fest im Feld-Katalog (FELDER in einstellungen.py, + Schlüssel "beispiel") und gehört damit zur FELD-ROLLE - genau wie das + Einheiten-Etikett daneben. + + Vorgeschichte in zwei Schritten: + + Bis 2026-08-28 stand hier ein von Hand ausgedachtes Beispiel. Das war + für Reichweite und Sofort-Aktualisierung schlicht falsch, und der + Nutzer hat es zu Recht beanstandet. Der Ersatz - die gekürzte Kennung + des GERADE ZUGEORDNETEN Sensors - war zwar nie falsch, aber auch kein + Beispiel mehr: er änderte sich mit jeder Auswahl mit und sagte einem + damit nur zurück, was man eben selbst eingestellt hatte (Nutzerkorrektur + 2026-08-31: "Ich möchte, dass xxx permanent bleibt"). + + Jetzt wieder fest - aber nicht ausgedacht: die Namen sind die der + tatsächlich laufenden Integration, abgelesen aus der Zuordnung dieser + Installation. Damit ist das Beispiel stabil UND wahr, und beide + Beanstandungen sind zugleich erfüllt. + + Listenfelder bekommen es ebenfalls: dort ist der Name der ersten + Position das Muster, nach dem sich die anderen drei richten. */ + const erwartet = feld.beispiel || ""; + // Der Klammertext in Label-Größe/-Farbe, der Sensorname darin in derselben + // kleinen/grauen Schrift wie die Einheit ("[on/off]"). const hinweis = erwartet ? `(z. B. ${esc(erwartet)})` : ""; @@ -4565,6 +4644,7 @@ function render() { Aenderungspruefung in datenLaden(). */ if (MAP) { MAP.remove(); MAP = null; TILE = null; } if (route.name === "trip" || route.name === "fill") initMap().catch(() => {}); // ohne Internet bleibt die Kartenflaeche leer + standortVerfolgungBeenden(); if (SMAP) { SMAP.remove(); SMAP = null; SMAP_TILE = null; FAHRZEUG_MARKER = null; USER_MARKER = null; } if (route.name === "standort") initStandortMap().catch(() => {}); if (TMAP) { TMAP.remove(); TMAP = null; TMAP_TILE = null; } @@ -5953,6 +6033,7 @@ class AudiDashboardPanel extends HTMLElement { // (Standort- oder Uebersichtsseite offen) eine Leaflet-Instanz samt ihrem // window-Resize-Horcher und laufenden Kachelabrufen am Leben. if (MAP) { MAP.remove(); MAP = null; TILE = null; } + standortVerfolgungBeenden(); if (SMAP) { SMAP.remove(); SMAP = null; SMAP_TILE = null; FAHRZEUG_MARKER = null; USER_MARKER = null; } if (TMAP) { TMAP.remove(); TMAP = null; TMAP_TILE = null; } } @@ -5992,6 +6073,7 @@ class AudiDashboardPanel extends HTMLElement {
Übersicht
+
diff --git a/custom_components/audi_dashboard/frontend/audi-dashboard-ios.css b/custom_components/audi_dashboard/frontend/audi-dashboard-ios.css index 8274a9a..12fc092 100644 --- a/custom_components/audi_dashboard/frontend/audi-dashboard-ios.css +++ b/custom_components/audi_dashboard/frontend/audi-dashboard-ios.css @@ -105,6 +105,19 @@ html,body{height:100%} .rings svg{height:17px} .profilbtn{display:none} /* Unterseite: kompakter, zentrierter Titel wie in einer iOS-Navigationsleiste */ +/* Gegengewicht zum Zurueck-Pfeil auf Unterseiten. + + Der Titel wird dort mittig gesetzt (.head{align-items:center}), aber nur + innerhalb von .head - und .head beginnt erst hinter dem Zurueck-Pfeil. + Rechts steht nichts, weil die Ringe auf Unterseiten ausgeblendet werden. + Die Ueberschrift sass deshalb um die halbe Pfeilbreite zu weit rechts; + in der App an derselben Stelle live gemessen: 17px (2026-08-31). + + Gleiche Masse wie .back (34px, margin -8px), damit links und rechts + exakt derselbe Platz belegt ist. Auf breiten Bildschirmen steht der + Titel linksbuendig - dort ist der Platzhalter abgeschaltet. */ +.kopfgegengewicht{display:none} +.phone:has(.back.on) .kopfgegengewicht{display:block;order:10;flex:none;width:34px;height:34px;margin-right:-8px} .phone:has(.back.on) .topbar{padding:54px 16px 6px;gap:8px} .phone:has(.back.on) .head{align-items:center} .phone:has(.back.on) .title{font-size:17px;font-weight:400;letter-spacing:-.01em;text-align:center} @@ -217,11 +230,19 @@ main#view{--seitenrand:16px;padding:0 var(--seitenrand) 30px;scroll-behavior:smo .legend span{font-size:12.5px} /* ---------------- Menüs und Popups ---------------- */ -.bildmenu,.sdpopup{border:0;border-radius:14px;background:rgba(40,44,52,.92); +/* Blaetter statt schwebender Karten (siehe audi-dashboard.css). Die Radien + folgen der neuen Lage: das Aktionsblatt steht frei ueber der unteren + Kante und ist rundum rund, das Formularblatt sitzt auf der Kante auf und + ist nur oben rund. */ +.bildmenu{border:0;border-radius:16px;background:rgba(40,44,52,.92); -webkit-backdrop-filter:saturate(180%) blur(22px);backdrop-filter:saturate(180%) blur(22px); box-shadow:0 12px 40px rgba(0,0,0,.5)} +.sdpopup{border:0;border-radius:16px 16px 0 0;background:rgba(40,44,52,.92); + -webkit-backdrop-filter:saturate(180%) blur(22px);backdrop-filter:saturate(180%) blur(22px); + box-shadow:0 -8px 40px rgba(0,0,0,.5)} :host([data-theme="tag"]) .bildmenu,:host([data-theme="tag"]) .sdpopup{background:rgba(250,250,252,.92)} -.bildmenu button{padding:13px 16px;font-size:16px;border-bottom:1px solid var(--ios-sep)} +.bildmenu button{padding:16px 18px;font-size:16px;min-height:52px;border-bottom:1px solid var(--ios-sep)} +.bildmenu button:last-child{border-bottom:none} /* ---------------- Tab-Leiste ---------------- */ .tabbar{border-top:1px solid var(--ios-sep);padding-bottom:26px; @@ -319,6 +340,7 @@ main#view{--seitenrand:16px;padding:0 var(--seitenrand) 30px;scroll-behavior:smo /* Die Kopf-Ringe setzt die App per Inline-Stil (display:inline-flex), deshalb hier mit !important. */ .rings{display:none !important} + .kopfgegengewicht{display:none !important} /* Nur die Box selbst hoeher setzen, nicht jedes Element mit .carfix: die Klasse haengt auch am und am Platzhalter-
(siehe @@ -338,7 +360,7 @@ main#view{--seitenrand:16px;padding:0 var(--seitenrand) 30px;scroll-behavior:smo ruhigen Karte. max-width + margin:auto zentriert sie innerhalb des bestehenden left/right-Abstands, ohne die transform-basierte Einblend-Animation dieser Elemente zu beruehren. */ - .sdpopup,.sheet,.beleg-popup{max-width:560px;margin-left:auto;margin-right:auto} + .sdpopup,.sheet,.beleg-popup,.bildmenu{max-width:560px;margin-left:auto;margin-right:auto} /* .setup-popup breiter als die übrigen Popups: die Sensorkennung neben der Feld-Überschrift (entitaetIdKurz()) kann ein echter Rohsensorname von Herstellerseite sein, teils 40-60 Zeichen lang diff --git a/custom_components/audi_dashboard/frontend/audi-dashboard.css b/custom_components/audi_dashboard/frontend/audi-dashboard.css index 30c0cb1..85e9d6d 100644 --- a/custom_components/audi_dashboard/frontend/audi-dashboard.css +++ b/custom_components/audi_dashboard/frontend/audi-dashboard.css @@ -599,8 +599,12 @@ button.leaf:active { background: var(--tile-2); } .szene.bleed::before { content: ""; position: absolute; left: 0; right: 0; bottom: 0; - height: 42%; - background: linear-gradient(to bottom, transparent, var(--canvas) 78%); + /* 26/96 statt 42/78: der Verlauf soll die harte Bildkante ausblenden, + nicht das Fahrzeug. Mit 42% Hoehe und Vollton ab 78% war das untere + Drittel des Fotos praktisch einfarbig - Raeder und Schweller lagen + darunter (gemeldet vom Eigentuemer, 2026-08-31). */ + height: 26%; + background: linear-gradient(to bottom, transparent, var(--canvas) 96%); pointer-events: none; z-index: 1; } @@ -668,7 +672,9 @@ button.leaf:active { background: var(--tile-2); } .marke { display: inline-flex; align-items: center; gap: 6px; } .marke-logo { display: inline-flex; align-items: center; } -.marke-logo img { height: 13px; width: auto; } +/* Auf Zeilenhoehe (16px) statt 13px: das Markenlogo stand neben Text + derselben Zeile und wirkte daneben zu klein. */ +.marke-logo img { height: 16px; width: auto; } .marke-logo .ph { display: none; font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--fg3); } .marke-logo.logo-fehlt img { display: none; } .marke-logo.logo-fehlt .ph { display: inline; } @@ -1011,19 +1017,23 @@ button.leaf:active { background: var(--tile-2); } gezaehlt, das Blatt war auf dem Geraet rund 16px hoeher als noetig und schob sich entsprechend weiter hoch. Am Rechner faellt das nicht auf, dort ist der Einzug 0. */ - padding: 0 20px 18px; + padding: 0 20px 34px; transform: translateY(calc(100% - var(--standort-peek))); transition: transform .28s cubic-bezier(.22,.61,.36,1); } -/* Aufgezogen rastet das Blatt auf der mittleren Hoehe ein, nicht auf seiner - Inhaltshoehe. Apple beschreibt genau das als "detents": Hoehen, auf denen - ein Blatt natuerlich zur Ruhe kommt - large ist das voll ausgefahrene - Blatt, medium etwa die Haelfte davon. Vorher war die Rasthoehe schlicht - die Hoehe des Inhalts, dadurch schlossen die Knoepfe unten buendig mit der - Menueleiste ab. Der Ueberschuss liegt unter den Knoepfen und haelt sie von - der Leiste frei. Die eingeklappte Hoehe bleibt unberuehrt: die Verschiebung - rechnet mit 100% der jeweiligen Blatthoehe minus dem Guckwert. */ -.standortmenu.offen { transform: translateY(0); min-height: 50%; } +/* Aufgezogen bleibt unter den Knoepfen ein fester Abstand stehen, statt dass + sie buendig mit der Menueleiste abschliessen. + + Vorher stand hier min-height:50% - Apples "medium detent". Gemessen ergab + das 89px (Panel) bzw. 76px (App) Luft unter dem letzten Knopf, und das war + sichtbar zu viel: das Blatt zog ueber die Haelfte des Bildschirms auf, + obwohl sein Inhalt dort laengst zu Ende war. Eine Raste ist nur dann + richtig, wenn zwischen ihr und der Inhaltshoehe kein grosses Loch klafft. + + Jetzt bestimmt der Inhalt die Hoehe, und die 34px Fussabstand halten die + Knoepfe von der Leiste frei - hergeleitet aus der Beanstandung, nicht + geraten: 18px waren zu wenig, 76-89px zu viel. */ +.standortmenu.offen { transform: translateY(0); } .standortmenu-griffzone { padding: 10px 0 14px; touch-action: none; cursor: grab; position: relative; } /* Der Griff ist jetzt ein Knopf (Tastaturzugang zum Menue). Die Knopf- Voreinstellungen des Browsers werden deshalb zurueckgesetzt; die @@ -1090,38 +1100,62 @@ button.leaf:active { background: var(--tile-2); } .standort-pille[disabled] { opacity: .4; pointer-events: none; } /* ------------------------------------------------------- Bilderverwaltung */ -.bildmenu-catcher { position: fixed; inset: 0; z-index: 1000; } +/* ---------------------------------------------------------- Blätter + Apples Vorgabe kennt für etwas Modales auf dem Telefon kein frei + schwebendes Fenster: es kommt von der unteren Kante. Das Aktionsblatt + (eine kurze Liste von Wegen) und das Formularblatt (eine Eingabe) sind + die beiden Formen; die Karte in der Bildschirmmitte war keine von + beiden und stand ausserdem ohne abgedunkelten Grund über der voll + sichtbaren Seite. + + Der Schleier gehört dazu und ist nicht Geschmack: modal heisst, dass + der Inhalt dahinter nicht bedienbar ist - das soll man sehen. */ +.bildmenu-catcher { + position: absolute; inset: 0; z-index: 1000; + background: rgba(0,0,0,.45); + animation: sheet-fade .18s ease-out; +} .bildmenu { position: absolute; z-index: 1001; - background: var(--tile-2); - border-radius: 14px; - padding: var(--sp-2); + left: 10px; right: 10px; + bottom: max(10px, env(safe-area-inset-bottom)); + top: auto; + transform: none; + background: var(--tile-deckend, var(--canvas)); + border-radius: 16px; + overflow: hidden; + padding: 0; display: flex; flex-direction: column; - min-width: 160px; + animation: sheet-rein .24s cubic-bezier(.22,.61,.36,1); } -.bildmenu.rad { top: 90px; left: 22px; } -/* "Bild der Übersicht": das Vorschaubild füllt die ganze Kachelbreite, seine - Unterkante liegt daher immer nah an der Kachel-Unterkante - das Menü von - dort aus verankern statt mit einem festen top-Wert, der bei jedem - Bildseitenverhältnis neu nachgemessen werden müsste. */ -.bildmenu.ansicht { bottom: var(--sp-5); left: 50%; transform: translateX(-50%); } +/* Die beiden Lage-Varianten sind gegenstandslos geworden - ein Blatt + kommt immer von unten. Die Klassen bleiben im Markup stehen, damit die + Aufrufstellen unberührt bleiben; hier tragen sie nichts mehr bei. */ +.bildmenu.rad, .bildmenu.ansicht { left: 10px; right: 10px; top: auto; transform: none; } .bildmenu button { display: block; width: 100%; text-align: left; background: none; border: none; - color: var(--fg); font-family: inherit; font-size: 15px; - padding: 13px 10px; min-height: 46px; border-radius: 10px; + color: var(--fg); font-family: inherit; font-size: 16px; + padding: 16px 18px; min-height: 52px; border-radius: 0; + border-bottom: 1px solid var(--line); cursor: pointer; } +.bildmenu button:last-child { border-bottom: none; } .bildmenu button:active { background: var(--shade); } .bildmenu button.loeschen { color: var(--bad); } +/* Formularblatt (siehe Kasten oben): unten angeschlagen, nur oben rund, + blickdicht. Stand vorher als Karte 60px unter dem oberen Rand - ausser + Daumenreichweite und ohne sichtbaren Weg hinaus. */ .sdpopup { position: absolute; z-index: 1001; - left: var(--sp-5); right: var(--sp-5); top: 60px; - background: var(--tile-2); - border-radius: 14px; - padding: var(--sp-4); + left: 0; right: 0; bottom: 0; top: auto; + background: var(--tile-deckend, var(--canvas)); + border-radius: 16px 16px 0 0; + padding: var(--sp-4) 20px max(20px, env(safe-area-inset-bottom)); + animation: blatt-hoch .28s cubic-bezier(.22,.61,.36,1); } +@keyframes blatt-hoch { from { transform: translateY(100%) } to { transform: none } } /* Beleg-Fenster: PDF hineinziehen (Rechner) oder einfügen (Telefon). */ .beleg-catcher { @@ -1129,15 +1163,20 @@ button.leaf:active { background: var(--tile-2); } background: rgba(0,0,0,.45); animation: sheet-fade .18s ease-out; } +/* Formularblatt (siehe Kasten oben). Traegt drei Fenster: Beleg + hochladen, Daten importieren, Datensatz sichern/laden. */ .beleg-popup { position: absolute; z-index: 1001; - left: var(--sp-5); right: var(--sp-5); - top: 50%; transform: translateY(-50%); - /* Wie .setup-popup: --tile-2 ist im Nacht-Theme transluzent, ein frei - schwebendes Fenster braucht einen blickdichten Grund. */ + left: 0; right: 0; bottom: 0; + top: auto; transform: none; + max-height: 88%; + overflow-y: auto; + /* --tile-2 ist im Nacht-Theme transluzent; ein Blatt ueber der Seite + braucht einen blickdichten Grund. */ background: var(--tile-deckend, var(--canvas)); - border-radius: var(--r-tile); - padding: var(--sp-4); + border-radius: 16px 16px 0 0; + padding: var(--sp-4) 20px max(20px, env(safe-area-inset-bottom)); + animation: blatt-hoch .28s cubic-bezier(.22,.61,.36,1); } .beleg-drop { margin-top: var(--sp-3); diff --git a/custom_components/audi_dashboard/manifest.json b/custom_components/audi_dashboard/manifest.json index 6897cdb..d766cee 100644 --- a/custom_components/audi_dashboard/manifest.json +++ b/custom_components/audi_dashboard/manifest.json @@ -1,7 +1,7 @@ { "domain": "audi_dashboard", "name": "Audi Dashboard", - "version": "2026.8.30.20", + "version": "2026.8.31.1", "documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md", "issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues", "codeowners": ["@paul"], diff --git a/design-system/src/components/ImagePlaceholder/ImagePlaceholder.tsx b/design-system/src/components/ImagePlaceholder/ImagePlaceholder.tsx index b33ba15..b0e1a84 100644 --- a/design-system/src/components/ImagePlaceholder/ImagePlaceholder.tsx +++ b/design-system/src/components/ImagePlaceholder/ImagePlaceholder.tsx @@ -33,18 +33,34 @@ export function ImagePlaceholder({ size = "default", className, }: ImagePlaceholderProps) { - const [failed, setFailed] = React.useState(false); + /* + * Gemerkt wird die Adresse, die fehlgeschlagen ist - nicht ein blosses + * "ist fehlgeschlagen". + * + * Der Unterschied ist der Fehler, den das behebt: In der Fotogalerie unter + * "Mein Audi" bleibt dieselbe Komponente stehen und bekommt nur eine neue + * src. Mit einem blossen Wahrheitswert blieb ein einmal gesetztes true fuer + * immer stehen - sobald ein noch leerer Platz durchlaufen war, zeigten auch + * alle folgenden Plaetze mit echtem Foto nur noch den Platzhalter. Erst ein + * Seitenwechsel setzte den Zustand zurueck, weil die Komponente dabei neu + * entsteht (gemeldet vom Eigentuemer, 2026-08-31). + * + * Bewusst ohne useEffect: ein Vergleich beim Rendern kommt ohne den + * zusaetzlichen Durchlauf aus, den ein Zuruecksetzen im Effekt braucht - + * und in dem waere fuer einen Wimpernschlag das falsche Bild zu sehen. + */ + const [fehlgeschlagen, setzeFehlgeschlagen] = React.useState(null); const classes = ["ads-bildbox"]; if (size === "mini") classes.push("ads-bildbox--mini"); if (size === "round") classes.push("ads-bildbox--round"); if (className) classes.push(className); - const showPlaceholder = !src || failed; + const showPlaceholder = !src || fehlgeschlagen === src; return (
{!showPlaceholder && ( - {alt} setFailed(true)} /> + {alt} setzeFehlgeschlagen(src)} /> )} {showPlaceholder && (
diff --git a/design-system/src/components/Pill/Pill.css b/design-system/src/components/Pill/Pill.css index 7a56314..b7636a6 100644 --- a/design-system/src/components/Pill/Pill.css +++ b/design-system/src/components/Pill/Pill.css @@ -18,3 +18,15 @@ color: var(--red); border-color: var(--red); } + +/* Als Knopf: die Optik bleibt exakt die der Anzeige-Pille, nur die + Browser-Vorgaben fuer + ); + } return {children}; } diff --git a/design-system/src/components/Popup/Popup.tsx b/design-system/src/components/Popup/Popup.tsx index 5093c97..d1e1a1b 100644 --- a/design-system/src/components/Popup/Popup.tsx +++ b/design-system/src/components/Popup/Popup.tsx @@ -48,7 +48,27 @@ export function Popup({ ); - const target = portalTarget ?? (typeof document !== "undefined" ? document.body : null); + /* + * Ziel des Portals ist die App-Wurzel, NICHT document.body. + * + * Die Farbwerte haengen an [data-theme] auf dem .ads-root-Element (siehe + * tokens/tokens.css: :root traegt den Nachtmodus, [data-theme="tag"] + * ueberschreibt ihn). Ein nach document.body portaliertes Fenster steht + * ausserhalb dieses Elements und erbt damit immer den Nachtmodus - im + * Tagmodus gemessen am 2026-08-31: innerhalb --tile:#FFFFFF, auf body + * --tile:rgba(255,255,255,.055). Das Fenster war dadurch eine fast + * durchsichtige Flaeche auf weissem Grund, ohne erkennbare Kante. + * + * Das betraf jedes Popup der App gleichermassen und war kein Fehler der + * einzelnen Aufrufe - deshalb sitzt die Korrektur hier und nicht dort. + * + * position:fixed bleibt davon unberuehrt: .ads-root setzt weder transform + * noch filter, der umschliessende Block bleibt also das Sichtfenster, und + * ein overflow:hidden weiter oben schneidet ein solches Element nicht ab. + */ + const target = + portalTarget ?? + (typeof document !== "undefined" ? (document.querySelector(".ads-root") ?? document.body) : null); return target ? createPortal(content, target) : content; } diff --git a/design-system/src/components/Sheet/ActionSheet.tsx b/design-system/src/components/Sheet/ActionSheet.tsx new file mode 100644 index 0000000..0cf2050 --- /dev/null +++ b/design-system/src/components/Sheet/ActionSheet.tsx @@ -0,0 +1,98 @@ +import * as React from "react"; +import { createPortal } from "react-dom"; + +import { sheetPortalTarget, useEscape } from "./Sheet"; + +/** + * Action sheet - the iOS pattern for a short set of choices the user asked for. + * + * Two groups, exactly as Apple describes them: the choices in one rounded + * card, "Cancel" alone in a second one below it with a gap between. The gap is + * not decoration - it is what makes Cancel unmistakably the way out rather + * than one more option in the list. + * + * Deliberately identical in geometry to `.sheet` in the panel's + * audi-dashboard.css, which already implemented this pattern: 10px side + * margins, 16px corners, 52px minimum row height, one hairline between rows, + * opaque surface. Two codebases, one look. + * + * Use `Sheet` instead when the content is a form rather than a list of + * choices. + */ + +export interface ActionSheetAktion { + label: React.ReactNode; + onClick: () => void; + /** Red, for anything that removes or overwrites something. */ + destructive?: boolean; + disabled?: boolean; +} + +export interface ActionSheetProps { + open: boolean; + onClose: () => void; + /** Optional heading above the choices. */ + title?: React.ReactNode; + /** One explanatory line under the title. */ + description?: React.ReactNode; + actions: ActionSheetAktion[]; + /** Label of the separated bottom button. Pass null to leave it out. */ + cancelLabel?: string | null; + /** Rendered between the heading and the choices - an error line, a hint. */ + children?: React.ReactNode; + className?: string; + portalTarget?: Element; +} + +export function ActionSheet({ + open, + onClose, + title, + description, + actions, + cancelLabel = "Abbrechen", + children, + className, + portalTarget, +}: ActionSheetProps) { + useEscape(open, onClose); + const target = sheetPortalTarget(portalTarget); + if (!open || !target) return null; + + const classes = ["ads-aktionsblatt"]; + if (className) classes.push(className); + + return createPortal( + <> +
+
+
+ {(title || description) && ( +
+ {title && {title}} + {description && {description}} +
+ )} + {children &&
{children}
} + {actions.map((aktion, i) => ( + + ))} +
+ {cancelLabel !== null && ( + + )} +
+ , + target, + ); +} diff --git a/design-system/src/components/Sheet/Sheet.css b/design-system/src/components/Sheet/Sheet.css new file mode 100644 index 0000000..ffa3229 --- /dev/null +++ b/design-system/src/components/Sheet/Sheet.css @@ -0,0 +1,214 @@ +/* -------------------------------------------------------------- Blätter + Zwei Bausteine, ein Muster: etwas Modales kommt von der unteren Kante, + nicht aus der Bildschirmmitte. Apples Vorgabe reserviert die schwebende + Karte (Popover) für große Bildschirme; auf dem Telefon soll daraus ein + Blatt werden. + + Der abdunkelnde Schleier gehört dazu und ist nicht Geschmack: modal heißt, + dass der Inhalt dahinter nicht bedienbar ist - das soll man sehen. Die alte + .ads-popup-Fassung hatte gar keinen (background:none), die Karte schwebte + ohne Trennung über der noch voll sichtbaren Seite. */ + +.ads-sheet-scrim { + position: fixed; + inset: 0; + z-index: 1000; + background: rgba(0, 0, 0, .45); + border: none; + animation: ads-blatt-blende .18s ease-out; +} + +@keyframes ads-blatt-blende { + from { opacity: 0 } + to { opacity: 1 } +} + +@keyframes ads-blatt-hoch { + from { transform: translateY(100%) } + to { transform: none } +} + +@keyframes ads-blatt-rein { + from { transform: translateY(18px); opacity: 0 } + to { transform: none; opacity: 1 } +} + +/* ------------------------------------------------------------- Formular */ + +.ads-sheet { + position: fixed; + z-index: 1001; + left: 0; + right: 0; + bottom: 0; + /* Blickdicht, nie durchscheinend: --tile-2 ist im Nachtthema ein rgba-Weiß + für Kachel-auf-Kachel und ließ die Seite durch den Dialog schimmern. + Dieselbe Korrektur trägt das Panel längst in .sheet-gruppe und + .setup-popup. */ + background: var(--tile-deckend, var(--canvas)); + /* Nur oben rund - das Blatt sitzt auf der Kante auf. */ + border-radius: 16px 16px 0 0; + padding: 0 20px max(20px, env(safe-area-inset-bottom)); + max-height: 88%; + display: flex; + flex-direction: column; + animation: ads-blatt-hoch .28s cubic-bezier(.22, .61, .36, 1); +} + +/* Breite Bildschirme: ein Blatt über die volle Breite eines Monitors wäre + ein Band, kein Dialog. Dieselbe Obergrenze wie die Popups des Panels. */ +@media (min-width: 700px) { + .ads-sheet { + max-width: 560px; + margin-left: auto; + margin-right: auto; + border-radius: 16px; + bottom: 20px; + left: 20px; + right: 20px; + } +} + +/* Greifer: das sichtbare Versprechen, dass sich das Blatt wegschieben lässt. + Maße wie der Griff des Standort-Blattes (36 x 4). */ +.ads-sheet__griff { + display: block; + width: 36px; + height: 4px; + border-radius: 2px; + background: var(--line-strong); + margin: 8px auto 4px; + flex: none; +} + +.ads-sheet__kopf { + display: flex; + flex-direction: column; + gap: 4px; + padding: 8px 0 12px; + flex: none; +} + +.ads-sheet__kopf strong { + font-size: 17px; + font-weight: 400; + color: var(--fg); +} + +.ads-sheet__kopf span { + font-size: 13px; + line-height: 1.45; + color: var(--fg2); +} + +/* Der Inhalt scrollt, nicht das Blatt: der Greifer und die Überschrift sollen + stehen bleiben, wenn ein Formular länger wird als der Bildschirm. */ +.ads-sheet__inhalt { + overflow-y: auto; + -webkit-overflow-scrolling: touch; + overscroll-behavior: contain; +} + +/* ------------------------------------------------------------- Auswahl */ + +.ads-aktionsblatt { + position: fixed; + z-index: 1001; + left: 10px; + right: 10px; + bottom: max(10px, env(safe-area-inset-bottom)); + display: flex; + flex-direction: column; + gap: 8px; + animation: ads-blatt-rein .24s cubic-bezier(.22, .61, .36, 1); +} + +@media (min-width: 700px) { + .ads-aktionsblatt { + max-width: 560px; + margin-left: auto; + margin-right: auto; + } +} + +.ads-aktionsblatt__gruppe { + background: var(--tile-deckend, var(--canvas)); + border-radius: 16px; + overflow: hidden; + display: flex; + flex-direction: column; +} + +.ads-aktionsblatt__kopf { + padding: 15px 18px 14px; + border-bottom: 1px solid var(--line); + display: flex; + flex-direction: column; + gap: 4px; +} + +.ads-aktionsblatt__kopf strong { + font-size: 15px; + font-weight: 400; + color: var(--fg); +} + +.ads-aktionsblatt__kopf span { + font-size: 13px; + color: var(--fg2); + line-height: 1.45; +} + +.ads-aktionsblatt__zusatz { + padding: 12px 18px; + border-bottom: 1px solid var(--line); +} + +.ads-aktionsblatt__gruppe button { + background: none; + border: none; + font-family: inherit; + font-size: 16px; + color: var(--fg); + padding: 16px 18px; + min-height: 52px; + text-align: left; + cursor: pointer; + border-bottom: 1px solid var(--line); +} + +.ads-aktionsblatt__gruppe button:last-child { + border-bottom: none; +} + +.ads-aktionsblatt__gruppe button:active { + background: var(--shade); +} + +.ads-aktionsblatt__gruppe button:disabled { + color: var(--fg3); + cursor: default; +} + +.ads-aktionsblatt__loeschen { + color: var(--bad); +} + +/* Eigene Karte mit Abstand darüber - das ist es, was "Abbrechen" vom Rest der + Liste trennt und es unmissverständlich zum Ausweg macht, statt zu einer + weiteren Wahlmöglichkeit. */ +.ads-aktionsblatt__abbrechen { + background: var(--tile-deckend, var(--canvas)); + border: none; + border-radius: 16px; + font-family: inherit; + font-size: 16px; + color: var(--fg); + padding: 16px; + min-height: 52px; + cursor: pointer; +} + +.ads-aktionsblatt__abbrechen:active { + background: var(--shade); +} diff --git a/design-system/src/components/Sheet/Sheet.tsx b/design-system/src/components/Sheet/Sheet.tsx new file mode 100644 index 0000000..8ccf45b --- /dev/null +++ b/design-system/src/components/Sheet/Sheet.tsx @@ -0,0 +1,103 @@ +import * as React from "react"; +import { createPortal } from "react-dom"; + +/** + * Modal sheet - the iOS pattern for a task that needs input. + * + * WHY THIS REPLACES `Popup` + * ------------------------- + * `Popup` renders a card floating in the middle of the screen. On iPhone that + * is a popover, and Apple's Human Interface Guidelines reserve popovers for + * larger screens: on a phone they are expected to adapt into a sheet that + * slides up from the bottom edge. A centred card is also harder to reach with + * a thumb, and it gave no hint of how to get rid of it. + * + * The card was translucent on top of that (`--tile-2` is an rgba white in the + * night theme, meant for tile-on-tile layering) so page content showed through + * the dialog. The panel had already hit this and fixed it for its own sheet + * and setup dialog by switching to the opaque surface token; this component + * starts there. + * + * WHAT MAKES IT A SHEET + * --------------------- + * - anchored to the bottom edge, rounded top corners only + * - a grabber, so it reads as draggable and dismissible + * - a dimmed scrim: modal means the content behind is out of reach, and it + * should look that way + * - opaque surface, never see-through + * - the bottom safe area stays clear of the home indicator + * - Escape closes it, and so does a tap on the scrim + * + * `ActionSheet` is the sibling for a set of choices; use that one when the + * sheet is a list of buttons rather than a form. + */ + +/** + * Portal target for both sheet components: the themed app root, never + * `document.body`. The colour tokens hang off `[data-theme]` on `.ads-root`; + * anything portalled outside it inherits the night palette even while the app + * shows the day one (measured 2026-08-31 - see Popup.tsx). + */ +export function sheetPortalTarget(portalTarget?: Element): Element | null { + if (portalTarget) return portalTarget; + if (typeof document === "undefined") return null; + return document.querySelector(".ads-root") ?? document.body; +} + +/** Escape closes the topmost modal - expected wherever there is a keyboard. */ +export function useEscape(open: boolean, onClose: () => void): void { + React.useEffect(() => { + if (!open) return; + const beiTaste = (e: KeyboardEvent) => { + if (e.key === "Escape") onClose(); + }; + document.addEventListener("keydown", beiTaste); + return () => document.removeEventListener("keydown", beiTaste); + }, [open, onClose]); +} + +export interface SheetProps { + open: boolean; + onClose: () => void; + /** Shown at the top of the sheet, above the content. */ + title?: React.ReactNode; + /** One explanatory line under the title. */ + description?: React.ReactNode; + children: React.ReactNode; + className?: string; + portalTarget?: Element; +} + +export function Sheet({ + open, + onClose, + title, + description, + children, + className, + portalTarget, +}: SheetProps) { + useEscape(open, onClose); + const target = sheetPortalTarget(portalTarget); + if (!open || !target) return null; + + const classes = ["ads-sheet"]; + if (className) classes.push(className); + + return createPortal( + <> +
+
+
+ , + target, + ); +} diff --git a/design-system/src/components/Sheet/index.ts b/design-system/src/components/Sheet/index.ts new file mode 100644 index 0000000..4aa5dbb --- /dev/null +++ b/design-system/src/components/Sheet/index.ts @@ -0,0 +1,4 @@ +export { Sheet, sheetPortalTarget, useEscape } from "./Sheet"; +export type { SheetProps } from "./Sheet"; +export { ActionSheet } from "./ActionSheet"; +export type { ActionSheetProps, ActionSheetAktion } from "./ActionSheet"; diff --git a/design-system/src/index.ts b/design-system/src/index.ts index d7f7924..54e41a6 100644 --- a/design-system/src/index.ts +++ b/design-system/src/index.ts @@ -46,6 +46,9 @@ export type { SwipeRowProps } from "./components/SwipeRow"; export { TabBar } from "./components/TabBar"; export type { TabBarProps, TabBarItem } from "./components/TabBar"; +export { Sheet, ActionSheet } from "./components/Sheet"; +export type { SheetProps, ActionSheetProps, ActionSheetAktion } from "./components/Sheet"; + export { Popup, PopupMenuItem } from "./components/Popup"; export type { PopupProps, PopupMenuItemProps, PopupAnchor } from "./components/Popup"; diff --git a/design-system/src/styles.css b/design-system/src/styles.css index 22a55c1..d1f10bf 100644 --- a/design-system/src/styles.css +++ b/design-system/src/styles.css @@ -18,5 +18,6 @@ @import "./components/Accordion/Accordion.css"; @import "./components/SwipeRow/SwipeRow.css"; @import "./components/TabBar/TabBar.css"; +@import "./components/Sheet/Sheet.css"; @import "./components/Popup/Popup.css"; @import "./components/ImagePlaceholder/ImagePlaceholder.css"; diff --git a/package-lock.json b/package-lock.json index 90bd351..72c80f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,8 +19,12 @@ "@aparajita/capacitor-secure-storage": "^8.0.0", "@audi-dash/ui": "*", "@capacitor/android": "^8.5.0", + "@capacitor/app": "^8.1.1", "@capacitor/core": "^8.5.0", + "@capacitor/filesystem": "^8.1.3", "@capacitor/ios": "^8.5.0", + "@capacitor/preferences": "^8.0.1", + "@capacitor/share": "^8.0.1", "@capgo/capacitor-updater": "^8.51.14", "leaflet": "^1.9.4", "react": "^18.3.1", @@ -37,7 +41,8 @@ "jsdom": "^29.1.1", "typescript": "^5.7.2", "vite": "^6.0.7", - "vitest": "^2.1.8" + "vitest": "^2.1.8", + "xcode": "^3.0.1" } }, "design-system": { @@ -516,6 +521,18 @@ "tslib": "^2.1.0" } }, + "node_modules/@capacitor/filesystem": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@capacitor/filesystem/-/filesystem-8.1.3.tgz", + "integrity": "sha512-GNBlRkaXEEb+6WP/YsDXr2zygyOHoieuye6viyd2ZkEdBwfseG41jxfarVxLWH0r0owhyNUbwJ/Qi8fubqr6wA==", + "license": "MIT", + "dependencies": { + "@capacitor/synapse": "^1.0.4" + }, + "peerDependencies": { + "@capacitor/core": ">=8.0.0" + } + }, "node_modules/@capacitor/ios": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-8.5.0.tgz", @@ -534,6 +551,30 @@ "@capacitor/core": ">=8.0.0" } }, + "node_modules/@capacitor/preferences": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@capacitor/preferences/-/preferences-8.0.1.tgz", + "integrity": "sha512-T6no3ebi79XJCk91U3Jp/liJUwgBdvHR+s6vhvPkPxSuch7z3zx5Rv1bdWM6sWruNx+pViuEGqZvbfCdyBvcHQ==", + "license": "MIT", + "peerDependencies": { + "@capacitor/core": ">=8.0.0" + } + }, + "node_modules/@capacitor/share": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@capacitor/share/-/share-8.0.1.tgz", + "integrity": "sha512-3cSBKBCJVon54rKDROP2rqGyeGks4pBh9TbaEk9S375Kbek/ZHe72N50zIa0Vn9Eac/SuhwgehO/mmA4CsUOiw==", + "license": "MIT", + "peerDependencies": { + "@capacitor/core": ">=8.0.0" + } + }, + "node_modules/@capacitor/synapse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@capacitor/synapse/-/synapse-1.0.4.tgz", + "integrity": "sha512-/C1FUo8/OkKuAT4nCIu/34ny9siNHr9qtFezu4kxm6GY1wNFxrCFWjfYx5C1tUhVGz3fxBABegupkpjXvjCHrw==", + "license": "ISC" + }, "node_modules/@capgo/capacitor-updater": { "version": "8.51.14", "resolved": "https://registry.npmjs.org/@capgo/capacitor-updater/-/capacitor-updater-8.51.14.tgz",