From 5a048488ea0cf36f066b67f6fa64b3e5ef5e70a4 Mon Sep 17 00:00:00 2001 From: Tobi G Date: Mon, 24 Aug 2026 15:29:37 +0200 Subject: [PATCH] Selbst-Update-Sicherung, Service-Prognose ohne Servicebuch und Sicherheit neu gestaltet - aktualisierung.py: Backup-Ordner verliert sein manifest.json beim Sichern, sonst laedt HA ihn nach einem Neustart als zweite audi_dashboard-Integration (Ursache des raetselhaften "gleicher Pfad"-Umbenennungs-Fehlers). - service.ts/audi-dashboard-app.js: Uebersicht faellt jetzt wie Service schon auf die Fahrzeugmeldung zurueck, wenn kein Servicebucheintrag existiert; eigenes (kuerzeres) Oelwechsel-Intervall wird jetzt auch ohne Servicebuch- eintrag naeherungsweise aus der Herstellermeldung hochgerechnet, statt weiterhin unveraendert die Herstellervorgabe zu zeigen. - Sicherheit neu gestaltet: vier Sammelzeilen (Fahrzeug verriegelt / Tueren und Klappen geschlossen / Fenster und Dach geschlossen / Kein Licht) statt einer flachen Liste, mit neuen Tuerschloss-, Dach- und Standlicht-Sensor- rollen, Kreis-Haekchen-Symbolen und einer Detailseite je Tuer/Motorhaube/ Kofferraum in beiden Frontends. Details, Verifikation und Sensor-Rollen in AGENTS.md (Abschnitte J/M/N). Co-Authored-By: Claude Sonnet 5 --- AGENTS.md | 175 ++++++++++++++++++ companion-app/src/api/types.ts | 5 +- companion-app/src/daten/profilAdapter.test.ts | 2 +- companion-app/src/daten/service.test.ts | 94 ++++++++++ companion-app/src/daten/service.ts | 76 +++++++- companion-app/src/navigation.ts | 3 + companion-app/src/screens/Fahrzeugstatus.tsx | 89 +++++---- companion-app/src/screens/Service.tsx | 16 +- companion-app/src/screens/TuerenKlappen.tsx | 52 ++++++ companion-app/src/screens/bausteine.tsx | 47 +++++ companion-app/src/screens/register.tsx | 5 +- companion-app/src/screens/screens.test.tsx | 23 ++- companion-app/src/stile/screens.css | 42 +++++ companion-app/src/tests/beispieldaten.ts | 10 +- .../audi_dashboard/aktualisierung.py | 28 ++- .../audi_dashboard/einstellungen.py | 33 ++++ .../audi_dashboard/frontend/app/bundle.json | 2 +- .../audi_dashboard/frontend/app/bundle.zip | Bin 232382 -> 233244 bytes .../frontend/audi-dashboard-app.js | 162 +++++++++++++--- .../frontend/audi-dashboard.css | 26 +++ .../audi_dashboard/manifest.json | 2 +- .../audi_dashboard/veroeffentlichung.py | 39 +++- tests/aktualisierung/test_aktualisierung.py | 32 +++- 23 files changed, 866 insertions(+), 97 deletions(-) create mode 100644 companion-app/src/screens/TuerenKlappen.tsx diff --git a/AGENTS.md b/AGENTS.md index ac2f219..916a6f5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2309,6 +2309,38 @@ error, not as a permanent reminder cluttering the tile before the first check idle branch; the same information already surfaces via `integration_update.fehler` when it's actually true. companion-app never had this line in the first place, so no parity fix needed there. +**A real bug found the same day, from a genuinely confusing error report.** After a successful +install-then-restart cycle, a later "Update installieren" attempt failed with: +`Konnte den bestehenden Ordner nicht sichern: [Errno 2] No such file or directory: +'/config/custom_components/audi_dashboard_backup' -> '/config/custom_components/audi_dashboard_backup'` +— note both sides of the `os.rename` are the *same path*, which shouldn't be possible given +`INTEGRATIONSORDNER`/`_BACKUP_ORDNER` are built from clearly different string literals. Root cause, +found via `docker logs`: the log line's logger name was `custom_components.audi_dashboard_backup.dienste`, +not `custom_components.audi_dashboard.dienste`. Home Assistant scans **every** folder directly under +`custom_components/` for a `manifest.json` and loads whatever `domain` it declares — by folder +content, not folder name. The `audi_dashboard_backup` folder left behind by a successful swap is a +byte-for-byte copy of the integration, manifest included, so across a restart HA loaded it as a +*second* `audi_dashboard` integration. Python then imported its `dienste.py` as its own module +(`custom_components.audi_dashboard_backup.dienste`), whose `__file__`-derived `INTEGRATIONSORDNER` +*is* the backup folder — making `_BACKUP_ORDNER` collapse onto the same path for that rogue copy. +This duplicate-domain state also explained two other symptoms reported the same session: the panel +intermittently doing nothing visible on "Auf Update prüfen"/"Update installieren" (whichever +integration's service registration won the race), and the frontend getting stuck on the bootstrap +"Lädt …" screen after a restart (confirmed live: with the stray `audi_dashboard_backup` folder still +present, `audi_dashboard` appeared **twice** in the loader's warnings and the panel never finished +loading; deleting the stray folder and restarting fixed both immediately). + +**Fix**, in `entpacken_pruefen_tauschen()`: right after the backup rename succeeds, its +`manifest.json` is itself renamed to `manifest.json.bak` — structurally invalid as an integration, so +HA's scanner skips it. On the rollback path (second rename fails), the `.bak` is restored to +`manifest.json` *before* the backup folder is renamed back into place, so a restored live folder is +never left without a valid manifest. Covered by two new unit tests (manifest absent from the backup +folder after a successful swap; manifest correctly restored after a forced rollback via a mocked +`os.rename`) — `tests/aktualisierung/test_aktualisierung.py` now has 8 tests, all passing. Verified +live: deployed the fix, deleted the stray backup folder from the test container, restarted — single +`audi_dashboard` loader warning, clean `eingerichtet` line, frontend loads normally. Manifest bumped +to `2026.8.24.7` (see section M below, same version bump covers both fixes). + ### K) vCard import for the workshop contact (built 2026-08-24) Service → Autohaus (gear icon) now has a "vCard importieren" button next to the existing form @@ -2404,6 +2436,149 @@ the pre-restart file swap). companion-app: `tsc --noEmit` clean, full suite stil bumped to `2026.8.24.6` and `npm run ota` rerun per the standing rule in `VERSIONIERUNG.md` — both frontends changed (new spinner/restart-button behavior is real, visible UI, not internal-only). +### M) Übersicht/Service mismatch on a blank install: two real bugs (2026-08-24, same day) + +The owner tested on a **blank installation** (no Servicebuch entries yet) and found two bugs: + +1. **Service showed the vehicle's own km/date; Übersicht showed something else (or nothing).** Root + cause was worse on the panel than in companion-app: `termine()` (panel) built its candidate list + purely from `letzterEintrag()` (a real Servicebuch entry) — with none, `km`/`datum`/`ziel` all + stayed `null`, so `vHome()` (Übersicht) rendered a broken/empty service block, while `vService()` + already had its own separate `meldungsPrognose()` fallback and displayed correctly. companion-app's + `naechsterService()` did already call `meldungsPrognose()` as a fallback, but paired the *raw* + signed `fahrzeug.oelwechselFaelligKm` with a *computed* projected date, which could read + inconsistently with `Service.tsx`'s own primary line. Fixed by adding the same meldung-based + fallback to `termine()` (new block right after `oelTermin`/`inspTermin` are built: `if + (termin.basis) return;` then reads `oelMeldungsPrognose()`/`meldungsPrognose()`), and by having + `meldungsPrognose()` always return `restKm` (`Math.abs(faelligKm)`) so both codebases use one + consistent value instead of recomputing it differently at each call site. Verified live: emptied + the test container's `service.buch` array (backed up first, restored after), confirmed Service and + Übersicht showed byte-identical numbers (8.687 km / 28.03.2027) where Übersicht previously would + have shown nothing usable at all. + +2. **The Ölwechsel forecast ignored the owner's own (shorter) interval from "Einrichten" until a + Servicebuch entry existed** — it silently kept showing the manufacturer's own countdown instead, + with no restKm shown either. Root cause: `meldungsPrognose()`/`fahrzeugMeldungRoh()` only ever + relay the vehicle sensor's own manufacturer-interval countdown; nothing about them reads + `oel.modus`/`oel.km`/`oel.monate`. Without a Servicebuch entry there's no known "last real oil + change" to anchor a custom-interval projection from — the owner chose (asked directly, see + conversation) to estimate one anyway: back-calculate an assumed last-service point as + `(manufacturer's own due point) − (manufacturer's own interval length)`, then project the owner's + shorter interval from that same assumed point. An approximation, not exact — it can never be as + good as a real Servicebuch entry — but it's the only way to show a number that respects the + owner's chosen interval before the first entry exists, instead of silently ignoring the choice. + Implemented once in `service.ts` + (`meldungsPrognoseEigenesIntervall()` + `oelMeldungsPrognose()`, the latter dispatching to the + existing `meldungsPrognose()` unchanged when `modus === "hersteller"`) and mirrored 1:1 in the + panel (same two functions, same math, `Date`-based month arithmetic instead of `service.ts`'s + ISO-string `monatePlus()` since the panel's own `monatePlus()` only accepts `TT.MM.JJJJ` strings + and the vehicle meldung's timestamp is ISO). Both `Service.tsx`/`vService()`'s footnote for this + fallback case now show `restKm` alongside the date when the owner's interval is shorter than the + manufacturer's, exactly like the existing Servicebuch-based prognose already does. Inspektion is + unaffected — it has no owner-selectable interval, always the manufacturer's own. + + Only Ölwechsel has a selectable interval, so this only applies there. If `oel.herstellerKm`/ + `herstellerMonate` are themselves unknown, both functions degrade to the plain (unchanged) + `meldungsPrognose()` rather than guessing further. + +Verified: companion-app — 4 new tests for `meldungsPrognoseEigenesIntervall()`/`oelMeldungsPrognose()` +(restKm/date math, the "already overdue by the owner's interval" clamp-to-zero case, no-fahrten +fallback, graceful degradation without hersteller values), full suite green at 142/142, `tsc --noEmit` +clean. Panel: `node --check` clean; live-verified in the test container using the exact same +blank-install simulation as bug 1 above — with `service.buch` emptied and the container's real +`oel` settings (`modus: "eigen"`, `10.000 km`/`12 Monate`, manufacturer `30.000 km`/`24 Monate`), the +footnote showed **8.700 km, voraussichtlich am 23.07.2027** — the derived number from +`28.700 − 30.000 + 10.000`, using the vehicle's real raw meldung — closely matching (not identical to, +as expected for an approximation) the real Servicebuch-based value of 8.687 km / 28.03.2027 seen with +the Servicebuch restored. Restored the container's real profile afterward; no live data was left +altered. + +Manifest bumped to `2026.8.24.7` (covers this section and section J's manifest-neutering fix above — +one version bump, both landed the same day); superseded by `2026.8.24.8` in section N below the same +day. `npm run ota` rerun once, covering both this section's and section N's frontend changes together +(see section N). + +### N) Sicherheit neu gestaltet: verriegelt / Türen & Klappen / Fenster & Dach / Licht (2026-08-24, same day) + +The owner asked for a rework of the "Sicherheit" screen (`vSicherheit()`/`Fahrzeugstatus.tsx`), which +until now showed one flat list of every door/window/heckklappe/haube check with no grouping and no +lock, roof, or light status at all. Requested: four named collector rows — **Fahrzeug verriegelt** +(new lock sensors, state "abgeschlossen"), **Türen und Klappen geschlossen** (with an arrow to a +detail view of every door, Motorhaube, and Kofferraum individually), **Fenster und Dach geschlossen** +(Dach = Schiebedach), **Licht ausgeschaltet** (Standlicht, showing the text **"Kein Licht"** for the +good state, not a generic "in Ordnung"). The owner also supplied a concrete mockup: green +checkmark-circles instead of the old plain-color dot, only the second row carrying a chevron. + +Went through plan mode given the cross-codebase, backend+frontend scope. Before planning, checked the +real entities available in the test container's `core.entity_registry` (`cupra_eu_data_act` platform) +to ground the sensor-role design in what actually exists rather than guessing: per-door +`binary_sensor.*_door_lock` (`device_class: lock`), `..._tailgate_lock`, `..._hood_lock`, `..._sunroof` +(`device_class: window`), `..._parking_lights` (`device_class: light`). HA's own convention for all of +these is `off` = the good state (locked/closed/no light) — the exact same `state == "off"` → `ok=True` +check this integration already uses for door/window sensors. No new check pattern needed, only new +sensor roles. + +**Backend:** +- `einstellungen.py` — five new `Sensorzuordnung` fields: `TUERSCHLOSS_SENSOREN` (4 positions, mirrors + `TUER_SENSOREN`), `HECKKLAPPE_SCHLOSS_SENSOR`, `HAUBE_SCHLOSS_SENSOR` (paired with the existing + open-sensors), `DACH_SENSOR`, `LICHT_SENSOR`. Matching `FELDER` catalog entries under the existing + `"sicherheit"` group — the Setup-Menü is entirely `FELDER`-driven (confirmed: its group headers come + straight from this list), so the new roles appeared there with zero extra frontend work. +- `veroeffentlichung.py`'s `_sicherheitscheck()` — extended with the five new checks, each entry now + additionally tagged `"gruppe"`: `"verriegelt"` (all 6 locks), `"tueren_klappen"` (4 doors + Motorhaube + + the renamed "Kofferraum" — was "Heckklappe"; the underlying `HECKKLAPPE_SENSOR` field itself is + unchanged, so an existing assignment isn't silently broken by the relabel), `"fenster_dach"` (4 + windows + Dach), `"licht"` (Standlicht alone). `gesichert` is untouched — `all()` over the full flat + list is mathematically identical to "AND of all four group results," so no logic change, just more + entries in the same list. +- **Consequence flagged to the owner**: because every entry in the flat list (including brand-new, + unassigned ones) counts toward `gesichert`, any existing installation shows "Zustand nicht + vollständig bekannt" for the overall status until the three new roles are assigned in Setup — same + "unknown beats assumed-good" principle this project has followed throughout, but worth knowing before + it looks like a regression. + +**Frontend (both codebases):** a small grouping helper (`sicherheitsGruppe()` in the panel, +`gruppenErgebnis()` + filter in companion-app) turns the flat list into a group's aggregate `ok` +(`null` the moment one entry is unknown, or if the group has zero entries at all — never `true` via an +empty-array vacuous truth). Both `vSicherheit()`/`Fahrzeugstatus.tsx` rewritten to the four-row layout; +each row's own label text changes with its state (e.g. "Kein Licht" / "Licht eingeschaltet" / "Licht +unbekannt") rather than pairing a fixed label with a separate status word — matches the mockup, which +shows no secondary value text at all. New checkmark-circle indicator (`statusKreis()` in the panel, +`StatusKreis` component in companion-app's `bausteine.tsx`) — green check / red cross / amber +question-mark SVG in a filled circle, replacing the old plain dot for this screen only; the rest of the +app keeps `.dot`/`.dm-punkt` unchanged. New route `"tuerenklappen"` in both routing tables +(`ZURUECK`/`navigation.ts`), reachable only from the "Türen und Klappen geschlossen" row; its detail +page is the old flat-list style filtered to just that group (`vTuerenKlappen()`, new +`screens/TuerenKlappen.tsx`). + +**Verified:** +- Backend: `python3 -m py_compile` on both changed modules, clean restart in the test container with a + single `audi_dashboard` loader warning (no duplicate-domain regression from section J/M's fix). +- companion-app: `tsc --noEmit` clean, full suite green at 145/145 (added: grouping/unknown-propagation + test, chevron-navigates-only-this-row test, detail-page-shows-only-its-group test; updated the one + pre-existing test and the `beispieldaten.ts`/`profilAdapter.test.ts` fixtures for the now-required + `gruppe` field on `SicherheitsPunkt`). +- Panel: `node --check` clean. +- Live end-to-end in the browser against the test container: before assigning the new sensor roles, all + three new rows correctly showed "unbekannt" (amber) and the overall status read "Zustand nicht + vollständig bekannt" — confirming the flagged consequence above is real and correctly wired, not + theoretical. Opened Setup, scrolled to "Sicherheit": all five new fields were **already + auto-suggested** to the exact real entities found earlier (the existing stichworte/device_class + matching worked without any manual searching) — saved (one pre-existing, unrelated "doppelt + zugeordnet" warning about `Front left door`/`Front left window`, present before this change, dismissed + via the existing "Trotzdem speichern" override). After saving: "Fahrzeug nicht verriegelt" showed red + (the demo lock entities report unlocked — correct, not a bug), "Türen und Klappen geschlossen" and + "Fenster und Dach geschlossen" showed green, **"Kein Licht" showed green** — the exact wording asked + for. Clicked the chevron on row 2: navigated to "Türen und Klappen" showing all four doors, Kofferraum, + and Motorhaube individually, all green "zu" — confirmed the detail page and the "Kofferraum" relabel + both work. + +Manifest bumped to `2026.8.24.8`. `npm run ota` rerun (`scripts/ota-paket.ps1 -Bauen`): picked up +`2026.8.24.8` automatically from the manifest, built clean, `bundle.zip` (233.244 Bytes) + sha256 + +`bundle.json` written — covers both this section's and section M's frontend changes, since neither had +triggered a bundle rebuild yet. `Installieren.cmd` picks the bundle up automatically; no separate step +needed for a self-update-based deployment. + --- ## Working conventions (observed — keep them) diff --git a/companion-app/src/api/types.ts b/companion-app/src/api/types.ts index f8fd40b..a17f1cb 100644 --- a/companion-app/src/api/types.ts +++ b/companion-app/src/api/types.ts @@ -88,10 +88,13 @@ export interface Tankvorgang { edited_fields?: string[]; } -/** Einzelprüfung aus _sicherheitscheck: ok===null heißt "Sensor unbekannt". */ +/** Einzelprüfung aus _sicherheitscheck: ok===null heißt "Sensor unbekannt". + "gruppe" fasst mehrere Punkte zu einer Sammelzeile zusammen (verriegelt / + tueren_klappen / fenster_dach / licht), siehe Fahrzeugstatus.tsx. */ export interface SicherheitsPunkt { label: string; ok: boolean | null; + gruppe: "verriegelt" | "tueren_klappen" | "fenster_dach" | "licht"; } /** Feldnamen an der laufenden Instanz abgelesen, nicht aus der Spezifikation diff --git a/companion-app/src/daten/profilAdapter.test.ts b/companion-app/src/daten/profilAdapter.test.ts index e4957e4..f802b9e 100644 --- a/companion-app/src/daten/profilAdapter.test.ts +++ b/companion-app/src/daten/profilAdapter.test.ts @@ -94,7 +94,7 @@ describe("profilZuFahrzeug mit Fahrzeugstatus", () => { tankprozent: 62, reichweite_km: 385, gesichert: true, - sicherheitscheck: [{ label: "Tür vorne links", ok: true }], + sicherheitscheck: [{ label: "Tür vorne links", ok: true, gruppe: "tueren_klappen" }], }) expect(f.odo).toBe(48250) expect(f.odoBekannt).toBe(true) diff --git a/companion-app/src/daten/service.test.ts b/companion-app/src/daten/service.test.ts index 3e622f1..544cf9a 100644 --- a/companion-app/src/daten/service.test.ts +++ b/companion-app/src/daten/service.test.ts @@ -5,7 +5,9 @@ import { kmProTagAusFahrten, letzterOelwechsel, meldungsPrognose, + meldungsPrognoseEigenesIntervall, naechsterService, + oelMeldungsPrognose, oelwechselPrognose, } from "./service" import type { Fahrzeug } from "./profilAdapter" @@ -252,4 +254,96 @@ describe("meldungsPrognose", () => { it("liefert nichts ohne jede brauchbare Angabe", () => { expect(meldungsPrognose(null, null, fahrten, jetzt)).toBeNull() }) + + it("gibt die Restkilometer mit zurück", () => { + const p = meldungsPrognose("2027-01-01T00:00:00+00:00", 5000, [], jetzt) + expect(p!.restKm).toBe(5000) + }) +}) + +describe("meldungsPrognoseEigenesIntervall", () => { + const jetzt = new Date("2026-08-11T12:00:00") + // 30 km/Tag, siehe kmProTagAusFahrten-Tests oben. + const fahrten = [ + { ts_start: "2026-07-12T12:00:00", distance_km: 400, status: "abgeschlossen" }, + { ts_start: "2026-08-01T08:00:00", distance_km: 500, status: "abgeschlossen" }, + ] + + it("rechnet Restkilometer und Zeitgrenze auf das eigene, kürzere Intervall um", () => { + // Herstellermeldung: 25.000 km / 24 Monate Rest bis zum 2027-08-11 - + // daraus ergibt sich ein angenommener letzter Service vor 2025-08-11. + // Eigenes Intervall (15.000 km / 12 Monate) ab demselben Punkt: Zeit- + // grenze 2026-08-11 (heute), Restkilometer 25000 - 30000 + 15000 = 10000. + const p = meldungsPrognoseEigenesIntervall( + "2027-08-11T00:00:00+00:00", 25000, 30000, 24, 15000, 12, fahrten, jetzt, + ) + expect(p).not.toBeNull() + expect(p!.restKm).toBe(10000) + // 10.000 km bei 30 km/Tag läge weit in der Zukunft - die zurückgerechnete + // eigene Zeitgrenze (heute) greift zuerst. + expect(p!.durchZeitlimit).toBe(true) + expect(p!.datum).toBe("2026-08-11") + }) + + it("deckelt die Restkilometer bei null, wenn das eigene Intervall rechnerisch schon überschritten ist", () => { + // Erst 10.000 von 30.000 km seit der Herstellerfälligkeit gefahren - + // das kürzere eigene Intervall (15.000 km) ist rechnerisch längst fällig. + const p = meldungsPrognoseEigenesIntervall( + "2027-08-11T00:00:00+00:00", 10000, 30000, 24, 15000, 12, fahrten, jetzt, + ) + expect(p).not.toBeNull() + expect(p!.restKm).toBe(0) + expect(p!.durchZeitlimit).toBe(false) + }) + + it("fällt ohne Fahrtenlog auf die zurückgerechnete eigene Zeitgrenze zurück", () => { + const p = meldungsPrognoseEigenesIntervall( + "2027-08-11T00:00:00+00:00", 25000, 30000, 24, 15000, 12, [], jetzt, + ) + expect(p).not.toBeNull() + expect(p!.datum).toBe("2026-08-11") + expect(p!.durchZeitlimit).toBe(true) + }) + + it("liefert nichts ohne bekannte Herstellerintervall-Länge", () => { + expect( + meldungsPrognoseEigenesIntervall("2027-08-11T00:00:00+00:00", 25000, null, 24, 15000, 12, fahrten, jetzt), + ).toBeNull() + }) +}) + +describe("oelMeldungsPrognose", () => { + const jetzt = new Date("2026-08-11T12:00:00") + const fahrten = [ + { ts_start: "2026-07-12T12:00:00", distance_km: 400, status: "abgeschlossen" }, + { ts_start: "2026-08-01T08:00:00", distance_km: 500, status: "abgeschlossen" }, + ] + + it("übernimmt bei Herstellervorgabe unverändert die reine Fahrzeugmeldung", () => { + const f = fahrzeug(10000, "hersteller") + f.oelwechselFaelligTs = "2027-08-11T00:00:00+00:00" + f.oelwechselFaelligKm = 25000 + const p = oelMeldungsPrognose(f, fahrten, jetzt) + expect(p!.restKm).toBe(25000) + expect(p!.datum).toBe("2027-08-11") + }) + + it("rechnet bei eigenem Intervall auf dessen kürzere Vorgabe um", () => { + const f = fahrzeug(10000, "eigen") + f.oelwechselFaelligTs = "2027-08-11T00:00:00+00:00" + f.oelwechselFaelligKm = 25000 + const p = oelMeldungsPrognose(f, fahrten, jetzt) + expect(p!.restKm).toBe(10000) + expect(p!.datum).toBe("2026-08-11") + }) + + it("fällt bei eigenem Intervall ohne Herstellerwerte auf die reine Meldung zurück", () => { + const f = fahrzeug(10000, "eigen") + f.oel.herstellerKm = null + f.oelwechselFaelligTs = "2027-08-11T00:00:00+00:00" + f.oelwechselFaelligKm = 25000 + const p = oelMeldungsPrognose(f, fahrten, jetzt) + expect(p!.restKm).toBe(25000) + expect(p!.datum).toBe("2027-08-11") + }) }) diff --git a/companion-app/src/daten/service.ts b/companion-app/src/daten/service.ts index 96a9895..0e6a3ad 100644 --- a/companion-app/src/daten/service.ts +++ b/companion-app/src/daten/service.ts @@ -154,6 +154,8 @@ export interface Meldungsprognose { hochgerechnete Kilometergrenze - der Nutzer fährt zu wenig, um die km-Grenze rechtzeitig zu erreichen. */ durchZeitlimit: boolean + /** Restkilometer bis zur Fälligkeit, falls bekannt. */ + restKm: number | null } /** Prognose rein aus der Fahrzeugmeldung, für den Fall ganz ohne @@ -169,14 +171,74 @@ export function meldungsPrognose( jetzt = new Date(), ): Meldungsprognose | null { const zeitDatum = faelligTs ? faelligTs.slice(0, 10) : null - if (faelligKm == null) return zeitDatum ? { datum: zeitDatum, durchZeitlimit: true } : null + if (faelligKm == null) return zeitDatum ? { datum: zeitDatum, durchZeitlimit: true, restKm: null } : null const restKm = Math.abs(faelligKm) - if (restKm <= 0) return { datum: jetzt.toISOString().slice(0, 10), durchZeitlimit: false } + if (restKm <= 0) return { datum: jetzt.toISOString().slice(0, 10), durchZeitlimit: false, restKm } const rate = kmProTagAusFahrten(fahrten, jetzt) - if (!rate) return zeitDatum ? { datum: zeitDatum, durchZeitlimit: true } : null + if (!rate) return zeitDatum ? { datum: zeitDatum, durchZeitlimit: true, restKm } : null const kmDatum = new Date(jetzt.getTime() + (restKm / rate) * TAG_MS).toISOString().slice(0, 10) const durchZeitlimit = !!zeitDatum && zeitDatum < kmDatum - return { datum: durchZeitlimit ? (zeitDatum as string) : kmDatum, durchZeitlimit } + return { datum: durchZeitlimit ? (zeitDatum as string) : kmDatum, durchZeitlimit, restKm } +} + +/** Eigenes (kürzeres) Intervall ganz ohne Servicebucheintrag: die + Fahrzeugmeldung kennt nur das Herstellerintervall, nicht die in + "Einrichten" gewählte kürzere Vorgabe. Ein angenommener letzter Service + wird aus der gemeldeten Fälligkeit und der bekannten Herstellerintervall- + Länge zurückgerechnet ("Fälligkeitspunkt minus Herstellerintervall"), und + das eigene Intervall ab demselben angenommenen Punkt neu hochgerechnet - + eine Näherung (der wahre letzte Service kann näher oder ferner liegen), + aber ohne sie würde die eigene Intervallwahl bis zum ersten + Servicebucheintrag komplett ignoriert (siehe oelMeldungsPrognose()). */ +export function meldungsPrognoseEigenesIntervall( + faelligTs: string | null, + faelligKm: number | null, + herstellerKm: number | null, + herstellerMonate: number | null, + eigenKm: number | null, + eigenMonate: number | null, + fahrten: readonly Fahrtdaten[], + jetzt = new Date(), +): Meldungsprognose | null { + if (faelligKm == null || !herstellerKm || eigenKm == null) return null + const restKm = Math.max(0, Math.abs(faelligKm) - herstellerKm + eigenKm) + const zeitDatum = + faelligTs && herstellerMonate != null && eigenMonate != null + ? monatePlus(faelligTs, eigenMonate - herstellerMonate) + : null + if (restKm <= 0) return { datum: jetzt.toISOString().slice(0, 10), durchZeitlimit: false, restKm } + const rate = kmProTagAusFahrten(fahrten, jetzt) + if (!rate) return zeitDatum ? { datum: zeitDatum, durchZeitlimit: true, restKm } : null + const kmDatum = new Date(jetzt.getTime() + (restKm / rate) * TAG_MS).toISOString().slice(0, 10) + const durchZeitlimit = !!zeitDatum && zeitDatum < kmDatum + return { datum: durchZeitlimit ? (zeitDatum as string) : kmDatum, durchZeitlimit, restKm } +} + +/** Fällt ganz ohne Servicebucheintrag auf die Fahrzeugmeldung zurück - bei + Herstellervorgabe unverändert (die Meldung IST die Herstellervorgabe), + bei eigenem (kürzerem) Intervall über meldungsPrognoseEigenesIntervall() + hochgerechnet, damit die Intervallwahl in "Einrichten" auch ganz ohne + Servicebucheintrag etwas bewirkt. Fehlen die Herstellerwerte selbst + (kein Sensor dafür), fällt das sanft auf die reine Meldung zurück. */ +export function oelMeldungsPrognose( + fahrzeug: Fahrzeug, + fahrten: readonly Fahrtdaten[], + jetzt = new Date(), +): Meldungsprognose | null { + const oel = fahrzeug.oel + const roh = () => meldungsPrognose(fahrzeug.oelwechselFaelligTs, fahrzeug.oelwechselFaelligKm, fahrten, jetzt) + if (oel.modus === "hersteller") return roh() + const eigen = meldungsPrognoseEigenesIntervall( + fahrzeug.oelwechselFaelligTs, + fahrzeug.oelwechselFaelligKm, + oel.herstellerKm, + oel.herstellerMonate, + oel.km, + oel.monate, + fahrten, + jetzt, + ) + return eigen ?? roh() } /* ------------------------------------------------------ Nächster Service */ @@ -219,8 +281,8 @@ export function naechsterService( if (oel) { kandidaten.push({ art: "Ölwechsel", restKm: oel.restKm, datum: oel.datum }) } else { - const m = meldungsPrognose(fahrzeug.oelwechselFaelligTs, fahrzeug.oelwechselFaelligKm, fahrten, jetzt) - if (m) kandidaten.push({ art: "Ölwechsel", restKm: fahrzeug.oelwechselFaelligKm, datum: m.datum }) + const m = oelMeldungsPrognose(fahrzeug, fahrten, jetzt) + if (m) kandidaten.push({ art: "Ölwechsel", restKm: m.restKm, datum: m.datum }) } const insp = inspektionPrognose(fahrzeug, buch, jetzt) @@ -228,7 +290,7 @@ export function naechsterService( kandidaten.push({ art: "Inspektion", restKm: insp.restKm, datum: insp.datum }) } else { const m = meldungsPrognose(fahrzeug.inspektionFaelligTs, fahrzeug.inspektionFaelligKm, fahrten, jetzt) - if (m) kandidaten.push({ art: "Inspektion", restKm: fahrzeug.inspektionFaelligKm, datum: m.datum }) + if (m) kandidaten.push({ art: "Inspektion", restKm: m.restKm, datum: m.datum }) } // fahrzeug.hu wird von Hand gepflegt und kann leer oder unlesbar sein. diff --git a/companion-app/src/navigation.ts b/companion-app/src/navigation.ts index 92481c4..bde607d 100644 --- a/companion-app/src/navigation.ts +++ b/companion-app/src/navigation.ts @@ -33,6 +33,7 @@ export type SeitenName = | "fill" // Sonstige | "sicherheit" + | "tuerenklappen" | "live" | "einst" @@ -64,6 +65,7 @@ export const ZURUECK: Partial> = { sbuch: "service", einst: "home", sicherheit: "home", + tuerenklappen: "sicherheit", live: "home", } @@ -90,6 +92,7 @@ export const TITEL: Record = { trip: "Fahrt", fill: "Tankvorgang", sicherheit: "Fahrzeugstatus", + tuerenklappen: "Türen und Klappen", live: "Fahrt läuft", einst: "Einstellungen", } diff --git a/companion-app/src/screens/Fahrzeugstatus.tsx b/companion-app/src/screens/Fahrzeugstatus.tsx index d253895..7426183 100644 --- a/companion-app/src/screens/Fahrzeugstatus.tsx +++ b/companion-app/src/screens/Fahrzeugstatus.tsx @@ -1,19 +1,24 @@ /** * Fahrzeugstatus im Detail. Vorlage: `vSicherheit()` im alten Panel. * - * Zeigt die 16 Einzelprüfungen aus `_sicherheitscheck`. Entscheidend: - * `ok === null` heißt „Sensor meldet nichts" und wird als unbekannt - * dargestellt — nie als grün geraten. Deshalb ist auch die Gesamtaussage - * unbekannt, sobald eine einzige Prüfung unbekannt ist. + * Vier Sammelzeilen statt der früheren flachen Liste: Fahrzeug verriegelt / + * Türen und Klappen geschlossen / Fenster und Dach geschlossen / Licht + * ausgeschaltet - jede fasst mehrere Punkte aus `_sicherheitscheck` über + * deren `gruppe`-Feld zusammen (siehe `gruppenErgebnis()` in bausteine.tsx). + * Entscheidend bleibt: `ok === null` heißt „Sensor meldet nichts" und wird + * als unbekannt dargestellt — nie als grün geraten. Nur "Türen und Klappen + * geschlossen" führt zu einer Detailseite (TuerenKlappen.tsx) mit jeder Tür, + * Motorhaube und dem Kofferraum einzeln. */ import { StatusRow, Tile } from "@audi-dash/ui" import { useDaten } from "../daten/DatenKontext" import { datumZeit } from "../format" -import { Leerzustand } from "./bausteine" +import type { SeitenName } from "../navigation" +import { gruppenErgebnis, Leerzustand, StatusKreis } from "./bausteine" -export function Fahrzeugstatus() { +export function Fahrzeugstatus({ geheZu }: { geheZu: (name: SeitenName) => void }) { const { fahrzeug, statusStand } = useDaten() if (!fahrzeug) return null @@ -27,8 +32,10 @@ export function Fahrzeugstatus() { ) } - const unbekannt = punkte.filter((p) => p.ok === null).length - const offen = punkte.filter((p) => p.ok === false) + const verriegelt = gruppenErgebnis(punkte.filter((p) => p.gruppe === "verriegelt")) + const tuerenKlappen = gruppenErgebnis(punkte.filter((p) => p.gruppe === "tueren_klappen")) + const fensterDach = gruppenErgebnis(punkte.filter((p) => p.gruppe === "fenster_dach")) + const licht = gruppenErgebnis(punkte.filter((p) => p.gruppe === "licht")) return ( <> @@ -36,45 +43,49 @@ export function Fahrzeugstatus() { status={fahrzeug.gesichert === true ? "ok" : fahrzeug.gesichert === false ? "bad" : "warn"} title={ fahrzeug.gesichert === true - ? "Alles verschlossen" + ? "Fahrzeug ist sicher abgestellt" : fahrzeug.gesichert === false - ? `${offen.length} Stelle${offen.length === 1 ? "" : "n"} offen` + ? "Bitte prüfen" : "Zustand nicht vollständig bekannt" } {...(statusStand ? { subtitle: `Stand ${datumZeit(statusStand)}` } : {})} /> - Einzelprüfungen -
    - {punkte.map((punkt) => ( -
  • -
  • - ))} -
+
+
+ + + {verriegelt === null ? "Verriegelung unbekannt" : verriegelt ? "Fahrzeug verriegelt" : "Fahrzeug nicht verriegelt"} + +
+ +
+ + + {fensterDach === null ? "Fenster/Dach unbekannt" : fensterDach ? "Fenster und Dach geschlossen" : "Fenster oder Dach offen"} + +
+
+ + + {licht === null ? "Licht unbekannt" : licht ? "Kein Licht" : "Licht eingeschaltet"} + +
+
- - {unbekannt > 0 && ( -

- {unbekannt === 1 ? "Eine Prüfung ist" : `${unbekannt} Prüfungen sind`} unbekannt, weil das - Fahrzeug dazu nichts meldet. Solange das so ist, gilt die Gesamtaussage bewusst als - unbekannt statt als sicher. -

- )} ) } diff --git a/companion-app/src/screens/Service.tsx b/companion-app/src/screens/Service.tsx index c37badc..a46b5e7 100644 --- a/companion-app/src/screens/Service.tsx +++ b/companion-app/src/screens/Service.tsx @@ -18,6 +18,7 @@ import { letzterInspektion, letzterOelwechsel, meldungsPrognose, + oelMeldungsPrognose, oelwechselPrognose, } from "../daten/service" import { datum, de, isoTag } from "../format" @@ -70,11 +71,12 @@ export function Service({ geheZu }: { geheZu: (name: SeitenName, id?: string) => ? `${de(prognose.restKm)} km · ${datum(prognose.datum)}` : null // Ganz ohne Servicebucheintrag (prognose null) übernimmt die - // Fahrzeugmeldung selbst die Rolle der Prognosequelle, hochgerechnet mit - // der echten Fahrleistung aus dem Fahrtenlog statt einer Servicebuch-Rate. - const oelMeldungProg = oelHatMeldung && !prognose - ? meldungsPrognose(fahrzeug.oelwechselFaelligTs, fahrzeug.oelwechselFaelligKm, fahrten) - : null + // Fahrzeugmeldung selbst die Rolle der Prognosequelle - bei Herstellervorgabe + // unverändert, bei eigenem (kürzerem) Intervall über + // oelMeldungsPrognose()/meldungsPrognoseEigenesIntervall() auf das eigene + // Intervall hochgerechnet, statt es bis zum ersten Servicebucheintrag zu + // ignorieren (siehe deren Kommentare in service.ts). + const oelMeldungProg = oelHatMeldung && !prognose ? oelMeldungsPrognose(fahrzeug, fahrten) : null // Bei Herstellervorgabe rechnet die eigene Prognose ohnehin schon mit dem // Herstellerintervall - die Restkilometerzahl daneben wäre nur eine zweite, // verwirrende km-Angabe neben dem Fahrzeug-Wert oben. Nur beim eigenen @@ -84,7 +86,9 @@ export function Service({ geheZu }: { geheZu: (name: SeitenName, id?: string) => ? `voraussichtlich am ${datum(prognose.datum)}` : `${de(prognose.restKm)} km, voraussichtlich am ${datum(prognose.datum)}` : oelMeldungProg - ? `voraussichtlich am ${datum(oelMeldungProg.datum)}` + ? fahrzeug.oel.modus === "hersteller" || oelMeldungProg.restKm == null + ? `voraussichtlich am ${datum(oelMeldungProg.datum)}` + : `${de(oelMeldungProg.restKm)} km, voraussichtlich am ${datum(oelMeldungProg.datum)}` : null // Der Ölwechsel folgt in "Einrichten" wahlweise der Herstellervorgabe oder // einem kürzeren eigenen Intervall (fahrzeug.oel.modus) - die Inspektion hat diff --git a/companion-app/src/screens/TuerenKlappen.tsx b/companion-app/src/screens/TuerenKlappen.tsx new file mode 100644 index 0000000..20d1a87 --- /dev/null +++ b/companion-app/src/screens/TuerenKlappen.tsx @@ -0,0 +1,52 @@ +/** + * Detailseite zu "Türen und Klappen geschlossen" - jede Tür einzeln, + * Motorhaube, Kofferraum. Einzige der vier Sammelzeilen aus Fahrzeugstatus.tsx + * mit eigener Detailseite. Vorlage: die frühere flache Liste in + * Fahrzeugstatus.tsx (vor der Aufteilung in vier Sammelzeilen). + */ + +import { Tile } from "@audi-dash/ui" + +import { useDaten } from "../daten/DatenKontext" +import { Leerzustand } from "./bausteine" + +export function TuerenKlappen() { + const { fahrzeug } = useDaten() + if (!fahrzeug) return null + + const punkte = fahrzeug.sicherheitscheck.filter((p) => p.gruppe === "tueren_klappen") + if (punkte.length === 0) { + return ( + + ) + } + + return ( + + Türen und Klappen +
    + {punkte.map((punkt) => ( +
  • +
  • + ))} +
+
+ ) +} diff --git a/companion-app/src/screens/bausteine.tsx b/companion-app/src/screens/bausteine.tsx index 24f034b..882f7e4 100644 --- a/companion-app/src/screens/bausteine.tsx +++ b/companion-app/src/screens/bausteine.tsx @@ -7,6 +7,8 @@ import type { ReactNode } from "react" import { ActionButton, Tile } from "@audi-dash/ui" +import type { SicherheitsPunkt } from "../api" + /** * Leerzustand. Aus dem Design-Auftrag: freundlich formuliert, mit einem * Hinweis, was als Nächstes passiert — nie nur „keine Daten". @@ -94,3 +96,48 @@ export function Werteliste({ kinder }: { kinder: ReactNode }) { export function bestaetigen(frage: string): boolean { return window.confirm(frage) } + +/** + * Kreis-Häkchen (ok) / Kreis-Kreuz (nicht ok) / Kreis-Fragezeichen (unbekannt) + * statt eines einfarbigen Punkts, für die Sicherheit-Seiten (Fahrzeugstatus, + * TuerenKlappen) - Zustand ist so schon am Symbol selbst erkennbar, nicht nur + * an der Farbe (Vorlage vom Nutzer geliefert). + */ +export function StatusKreis({ ok }: { ok: boolean | null }) { + const klasse = + ok === null ? "dm-statuskreis dm-statuskreis--warn" : ok ? "dm-statuskreis" : "dm-statuskreis dm-statuskreis--bad" + return ( + + ) +} + +/** Fasst ok über eine Gruppe zusammen: unbekannt, sobald ein Punkt unbekannt + ist oder die Gruppe ganz ohne Einträge dasteht (kein Sensor dieser Rolle + zugeordnet) - nie true durch eine leere Liste erschlichen. */ +export function gruppenErgebnis(punkte: readonly SicherheitsPunkt[]): boolean | null { + if (punkte.length === 0 || punkte.some((p) => p.ok === null)) return null + return punkte.every((p) => p.ok === true) +} diff --git a/companion-app/src/screens/register.tsx b/companion-app/src/screens/register.tsx index c019469..d67d1f9 100644 --- a/companion-app/src/screens/register.tsx +++ b/companion-app/src/screens/register.tsx @@ -18,6 +18,7 @@ import { Service, Servicebuch, Werkstatt } from "./Service" import { Statistik } from "./Statistik" import { TankDetail } from "./TankDetail" import { Tanken } from "./Tanken" +import { TuerenKlappen } from "./TuerenKlappen" import { Uebersicht } from "./Uebersicht" import { Beitrag, @@ -60,7 +61,9 @@ export function SeiteFuer(props: SeitenProps) { case "home": return case "sicherheit": - return + return + case "tuerenklappen": + return case "audi": return case "ident": diff --git a/companion-app/src/screens/screens.test.tsx b/companion-app/src/screens/screens.test.tsx index be522ac..b17f9ec 100644 --- a/companion-app/src/screens/screens.test.tsx +++ b/companion-app/src/screens/screens.test.tsx @@ -99,11 +99,28 @@ describe("Inhalte kommen wirklich aus den Daten", () => { expect(geheZu).not.toHaveBeenCalled() }) - it("zeigt einen unbekannten Prüfpunkt als unbekannt, nicht als sicher", async () => { + it("zeigt eine Gruppe mit unbekanntem Punkt als unbekannt, nicht als sicher", async () => { const { container } = zeige("sicherheit") + await waitFor(() => expect(container.querySelector(".dm-sicherheitsliste")).not.toBeNull()) + // Motorhaube (ok: null) steckt in "tueren_klappen" - die ganze Gruppe + // gilt damit als unbekannt, nicht als sicher geraten. + expect(screen.getByText("Türen/Klappen unbekannt")).toBeTruthy() + }) + + it("Sicherheit: Türen und Klappen navigiert zur Detailseite, die anderen Zeilen nicht", async () => { + const geheZu = vi.fn() + const { container } = zeige("sicherheit", undefined, geheZu) + await waitFor(() => expect(container.querySelector(".dm-sicherheitsliste")).not.toBeNull()) + + fireEvent.click(screen.getByText("Türen/Klappen unbekannt")) + expect(geheZu).toHaveBeenCalledWith("tuerenklappen") + }) + + it("Türen und Klappen: zeigt nur die Punkte dieser Gruppe", async () => { + const { container } = zeige("tuerenklappen") await waitFor(() => expect(container.querySelector(".dm-pruefliste")).not.toBeNull()) - expect(container.querySelectorAll(".dm-punkt--unbekannt").length).toBe(1) - expect(screen.getByText("unbekannt")).toBeTruthy() + expect(screen.getByText("Motorhaube")).toBeTruthy() + expect(screen.queryByText("Standlicht")).toBeNull() }) it("gruppiert Fahrten nach Jahr", async () => { diff --git a/companion-app/src/stile/screens.css b/companion-app/src/stile/screens.css index 8b46391..0ea60fd 100644 --- a/companion-app/src/stile/screens.css +++ b/companion-app/src/stile/screens.css @@ -486,6 +486,48 @@ border: 1.5px solid var(--fg3); } +/* Kreis-Häkchen für die vier Sammelzeilen der Sicherheit-Seite - Zustand ist + so schon am Symbol erkennbar, nicht nur an der Farbe (siehe .dm-punkt + oben, das bleibt für die Detailliste unverändert). */ +.dm-statuskreis { + flex: none; + width: 22px; + height: 22px; + border-radius: 50%; + display: inline-flex; + align-items: center; + justify-content: center; + background: var(--ok); +} +.dm-statuskreis--warn { background: var(--warn); } +.dm-statuskreis--bad { background: var(--bad); } +.dm-statuskreis svg { display: block; } + +.dm-sicherheitsliste { + display: flex; + flex-direction: column; +} +.dm-sicherheitszeile { + display: flex; + align-items: center; + gap: var(--sp-3); + padding: 12px 0; + border-bottom: 1px solid var(--line); + width: 100%; + background: none; + border-left: none; + border-right: none; + border-top: none; + font: inherit; + color: inherit; + text-align: left; +} +.dm-sicherheitszeile:last-child { border-bottom: 0; } +button.dm-sicherheitszeile { cursor: pointer; } +button.dm-sicherheitszeile:active { background: var(--tile-2); } +.dm-sicherheitszeile__text { flex: 1; font-size: 14.5px; } +.dm-sicherheitszeile__chev { margin-left: auto; flex: none; color: var(--fg3); } + /* ------------------------------------------------------------ Galerie */ .dm-galerie { diff --git a/companion-app/src/tests/beispieldaten.ts b/companion-app/src/tests/beispieldaten.ts index 6ca44c4..18e7b08 100644 --- a/companion-app/src/tests/beispieldaten.ts +++ b/companion-app/src/tests/beispieldaten.ts @@ -13,10 +13,12 @@ export const beispielStatus: Fahrzeugstatus = { batteriespannung: null, gesichert: true, sicherheitscheck: [ - { label: "Tür vorne links", ok: true }, - { label: "Tür vorne rechts", ok: true }, - { label: "Fenster vorne links", ok: false }, - { label: "Motorhaube", ok: null }, + { label: "Tür vorne links", ok: true, gruppe: "tueren_klappen" }, + { label: "Tür vorne rechts", ok: true, gruppe: "tueren_klappen" }, + { label: "Motorhaube", ok: null, gruppe: "tueren_klappen" }, + { label: "Fenster vorne links", ok: false, gruppe: "fenster_dach" }, + { label: "Türschloss vorne links", ok: true, gruppe: "verriegelt" }, + { label: "Standlicht", ok: true, gruppe: "licht" }, ], oelwechsel_faellig_ts: "2027-03-14T00:00:00+00:00", oelwechsel_faellig_km: 11750, diff --git a/custom_components/audi_dashboard/aktualisierung.py b/custom_components/audi_dashboard/aktualisierung.py index 0a4a7a6..e12bdbd 100644 --- a/custom_components/audi_dashboard/aktualisierung.py +++ b/custom_components/audi_dashboard/aktualisierung.py @@ -16,7 +16,11 @@ Dienstaufruf noch läuft. Deshalb strenger als install.ps1s bis feststeht, dass der Download vollständig und plausibel ist. 2. Erst danach ein atomarer Tausch per os.rename, nicht Löschen+Kopieren: der alte Ordner wird zu audi_dashboard_backup umbenannt statt gelöscht - - reversibel, falls das Update Probleme macht. + reversibel, falls das Update Probleme macht. Dessen manifest.json wird + dabei zu manifest.json.bak umbenannt: HA erkennt Integrationen an jedem + manifest.json unter custom_components/, unabhängig vom Ordnernamen - + ohne diesen Schritt lädt ein Neustart mit vorhandenem Backup-Ordner + eine zweite Integration mit derselben Domain. 3. Schlägt der zweite Rename fehl, wird der erste zurückgenommen, statt einen halb ersetzten Ordner zurückzulassen. 4. Kein automatischer Reload oder Neustart. Ein Reload aus dem eigenen, @@ -231,11 +235,29 @@ def entpacken_pruefen_tauschen( f"Konnte den bestehenden Ordner nicht sichern: {fehler}" ) from fehler + # HA scannt JEDEN Ordner unter custom_components/ mit manifest.json als + # eigene Integration - nach der Domain im Manifest, nicht nach dem + # Ordnernamen. Ohne diesen Schritt wäre der Backup-Ordner beim nächsten + # Neustart eine zweite Integration mit domain "audi_dashboard": HA + # importiert dann auch deren dienste.py als eigenes Modul + # (custom_components.audi_dashboard_backup.dienste), dessen __file__ im + # Backup-Ordner liegt - INTEGRATIONSORDNER und _BACKUP_ORDNER fallen für + # diese Kopie auf denselben Pfad zusammen, und ihre Dienst-Registrierung + # kollidiert mit der echten Integration. Das Manifest bleibt als .bak + # erhalten, falls die Fassung zurückgerollt werden muss. + backup_manifest = os.path.join(backup_ordner, "manifest.json") + if os.path.isfile(backup_manifest): + os.rename(backup_manifest, backup_manifest + ".bak") + try: os.rename(staging_ordner, integrationsordner) except OSError as fehler: - # Rollback: die alte Fassung zurückbenennen, statt HA ohne - # Integrationsordner dastehen zu lassen. + # Rollback: erst das Manifest wiederherstellen, dann die alte + # Fassung zurückbenennen - sonst stünde HA mit einem Ordner ohne + # manifest.json da. + backup_manifest_bak = backup_manifest + ".bak" + if os.path.isfile(backup_manifest_bak): + os.rename(backup_manifest_bak, backup_manifest) os.rename(backup_ordner, integrationsordner) raise AktualisierungsFehler( f"Tausch fehlgeschlagen, alte Fassung wiederhergestellt: {fehler}" diff --git a/custom_components/audi_dashboard/einstellungen.py b/custom_components/audi_dashboard/einstellungen.py index b7f3c72..fee6837 100644 --- a/custom_components/audi_dashboard/einstellungen.py +++ b/custom_components/audi_dashboard/einstellungen.py @@ -81,6 +81,19 @@ class Sensorzuordnung: HECKKLAPPE_SENSOR: str = "" HAUBE_SENSOR: str = "" + # Schlösser (getrennt von den Öffnungssensoren oben - zu heißt nicht + # verriegelt). Je vier Türschlösser, dazu Heckklappe/Motorhaube einzeln, + # wie bei den Öffnungssensoren. + TUERSCHLOSS_SENSOREN: list[str] = field(default_factory=list) + HECKKLAPPE_SCHLOSS_SENSOR: str = "" + HAUBE_SCHLOSS_SENSOR: str = "" + + # Schiebedach (offen/zu) und Standlicht (an/aus) - ergänzen die + # Fenster-Gruppe bzw. stehen für sich, siehe _sicherheitscheck() in + # veroeffentlichung.py. + DACH_SENSOR: str = "" + LICHT_SENSOR: str = "" + # Vom Fahrzeug selbst gemeldete Service-Fälligkeit (ergänzt die # App-eigene, aus dem Servicebuch berechnete Prognose). NAECHSTER_OELWECHSEL_SENSOR: str = "" @@ -160,6 +173,26 @@ FELDER: list[dict] = [ "hinweis": "\"aus\"/off = zu.", "domains": ["binary_sensor"], "device_classes": ["door", "opening"], "units": [], "liste": False, "pflicht": False, "stichworte": ["haube", "hood", "bonnet", "motorhaube"]}, + {"key": "TUERSCHLOSS_SENSOREN", "label": "Türschlösser", "gruppe": "sicherheit", + "hinweis": "\"aus\"/off = verriegelt. Für \"Fahrzeug verriegelt\" wichtig.", + "domains": ["binary_sensor"], "device_classes": ["lock"], "units": [], "liste": True, "positionen": POSITIONEN, + "pflicht": False, "stichworte": ["türschloss", "schloss", "lock", "verriegelt"]}, + {"key": "HECKKLAPPE_SCHLOSS_SENSOR", "label": "Kofferraum-Schloss", "gruppe": "sicherheit", + "hinweis": "\"aus\"/off = verriegelt.", + "domains": ["binary_sensor"], "device_classes": ["lock"], "units": [], "liste": False, "pflicht": False, + "stichworte": ["kofferraum", "heckklappe", "tailgate", "schloss", "lock"]}, + {"key": "HAUBE_SCHLOSS_SENSOR", "label": "Motorhauben-Schloss", "gruppe": "sicherheit", + "hinweis": "\"aus\"/off = verriegelt.", + "domains": ["binary_sensor"], "device_classes": ["lock"], "units": [], "liste": False, "pflicht": False, + "stichworte": ["haube", "hood", "schloss", "lock"]}, + {"key": "DACH_SENSOR", "label": "Schiebedach", "gruppe": "sicherheit", + "hinweis": "\"aus\"/off = zu.", + "domains": ["binary_sensor"], "device_classes": ["window", "door", "opening"], "units": [], "liste": False, "pflicht": False, + "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, + "stichworte": ["licht", "standlicht", "light", "parking lights"]}, {"key": "NAECHSTER_OELWECHSEL_SENSOR", "label": "Nächster Ölwechsel (Datum)", "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, diff --git a/custom_components/audi_dashboard/frontend/app/bundle.json b/custom_components/audi_dashboard/frontend/app/bundle.json index c2f1b75..212b356 100644 --- a/custom_components/audi_dashboard/frontend/app/bundle.json +++ b/custom_components/audi_dashboard/frontend/app/bundle.json @@ -1 +1 @@ -{"version":"2026.8.24.6","sha256":"e0d8c7a6f4cc7fddc59b252e02e4ebf50002f3bd4e317ddb315670ef13299d75","bytes":232382,"gebaut":"2026-08-24T10:44:09Z"} \ No newline at end of file +{"version":"2026.8.24.8","sha256":"3eddc79605bc979da46476cf000c2fb501b8bc510148da60b56b0b49b9b603c6","bytes":233244,"gebaut":"2026-08-24T12:43:13Z"} \ 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 6c15fa128cbe119dbbd9b1e26fe06842f9f78d05..d485b28343c6220938219bdada001472680c1a4c 100644 GIT binary patch delta 102909 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 Lk|znk>qGwn{x@XG delta 101928 zcmV(tK4ipN7Dxj*+7);ZCnPh3hzwKvfQPz?$ z&id0aPs>(6=TXVGMjS&8ZzNb2>ZRZJ(7EH4ZDyWx$qcsk+} z$ecy7=leM?r+L~PWO+lhGpJ>Qnr`aXl;_ube8l@@mcJg28vh4dJA&e2rK;oqEN&%x`6)7Y#KkcB>l;mfEbC zo|ZZ1@Hz9l3huQG#v(yK3~y&$0jS!bm82y<%aiiDUWe}MP-vz2Yye#v@I2@Fr)-q; zMP4^5tmeT|{X8p*-8?x<)^pdncn#SA<=1N9smR^su z>3o@NoRnTri7Wu3&5TNWY&g?Uz!|-Tc^b6%MB@s4hfD3Q0uDl|JK$x12-$`(CN}hE zGr!??FQU9QjKW)fMc5bI&Svae4$x%dO6-s$j358wAOBJNN9{iW8ayp{?F*0kCC21` z_|cl=Fu&BV);LL9KMP30)QxO%4P76WwMO5sZAX26nq}v#wv+Z-wJ42iNm7=GP;&$Sy_vdoR-WrB5-LngqVhZ9e9ke+3Fj7+Zi?p(p!BA=h~2WxB6j+pcsXF z*W=S{)WWsl32<;h06d>13sMob(FhW=1&M<^I+JDl3zCa6Px|EvEGG^*28(LXGaPdc z$-~9T7fDRX;|0lpIVHcs)~^?JF3T^YJU#(Tf*fay`Zp~mI3JLFxgdGW#~CDloh(Qi zMK{-w^iw4zCC?+6Co>Np8|VJ5oPl##N$GSny1PRv1v7cR1ncMYCrqu^!-Sx59{#M? z&yRi{-`$-bdH?yJszUFWsWPw{RqbByJiv1P3@3FXyiJM^fKnxo1B>8`)|Wan##11` zQ@))6>U^EVfW3A;o&JSSMu7Eyd*yu@_INp;IAia_T^dX)DvIPRWnXX+YDj!)oU?t_ z=l(4sFwW_u2+tV>l=_*6eSUYhG5dt&$_!!AN(x%g8`*f0rGR}% z2<-Gi_A=DHgbvW6mcS;jU~&y6C5cW)kXU9lF^*aWi?60(ayd-;!G+JQvUClf5h{ghbgz3Lk{5)Y^W{T zLGmdQN{D3d8#%WD;IkZmk>=Ah=M}_(-3Ke4^6+(@N7s;ve%Wh<&<2RZsMx(sKSAet zUS6{|;cb5kdv03NLY%P?>^$fE8W{l?1^%3z6nvzsWkZ$UTgB&g7T^Oh+ZQvKJhegq8I zK8v|uuP=?NLu*icW5SPOejM)OU$FyU^DxTKi1R60Bc7g>!{!Qh?;4q?jt@X0eh7d9 zlh)-U*ytd&^YR*oh+W4@ZX~Fokk868YyHC}gl#r{#BAJ4>I^qz;0|M__N@tMK%a|a&3?K5F7271s>5Bq?K8|=5rY!CQ} z^sKS^)Hj29t;h?b6(q(5D6g97BK{)_42;+yNqOwu-H8}r?nXRHJ;e5NvA_t=VJR(j z5UW@8t*@HjqHI@@GkL*}_g}@+ojtB9LT9_LI8zBY(?{eXRFL@*Sf1F@RS_0HO|I zefaTPwVgrjI-3HvMrnzB4^TxEeIk&FMkx1_ zFg&O!O3rFiMEn$b4BG(^?xN&TjNFb!d$Y)Q3=bjJB`r(EU3bO)86F+uGHI&{h%&^4 z*EVWr7JuOqa|b}r5a=)&GapKrb{`R?#3oxO$d^qE09v!7h$qD6ynubCyC3d15P3mx zOB)W2bc(ityLW3s+M{DSOxFlIC~$HAa!o6hntbNwb~3lE%=`YVGTe@av&y7)*RH@u z9Zws;fLA%Ao$$8IqqInHBr@)Ecq>>jk#jRCCVvr7M%eNOoY^Vs7`>6DgXApOaZ+~0 z25d1@>kVWvEq)y`6RVCAIW7u$e8oxhHm3l!(<$I&f!Ik6020o$?A+Q=tjFy*nglzX z!NT8)`oqAME(kRVOD)N0zZFd;qiexOYo-RKmFBjO0$X77;{vHP{?1jmybSZWKVxM^ zEPs?!c3~N_>F&?`ySt-f;4agVTM%Y@iFgWE)DeJCV{c)x8o!#rItJ*`>hAO80v2$s z075j9XDl^&mLOKSwV2Q8Y^G&6?@t)qmd6KShM`aLEFc_E2)K2V9k_ak+oSV@4;ifW zK82HO@-ube%8Ggoc(C=^^Kl&qROdf}ZbF*s^o&}Jy%S!QZe+b}_vtAodi?VjgH93}m zVt{)k(aj0S&H!52(U(00oTO>*8z2%$uFyyFM(hyF#FjolDM2xbwxoc)os$tVDSsni zAsu+pm<{pWI;(>iXx*>_<#^Kbjx$ax< znz96xMev(9_X#C8LMVyv6H1`X+iN9^K%lGm2ql! z5o;j=b~;)e;yivsio^?6_jza<7=N=9IfDntSAeAAgjX;E@D%pc4I(sc_DLS55ea6{ zOaTLup%XcIqAn42Hp)(;5uTAtqJ7>{RapHPLc5~J!8vA8^@iuxnADcqLGAp7Ek{~QURuH*|JgcgOAli+MWlv^GJI@!#vjmf4HDb^wp;%KZBFyaB>hlEQ+$zID=N6H{Q+ z@L=jhlTF~`HX!?H)IVQ141Zt=6tS`MQkI#j;C`g9lolBwT@~Hrr_(dSTN@QjDqW4l zl??Y)?_{?c*%}OB>-&@8iJZ>hcH(&?t(4k{8z%dBf@i<5yS|Cic*N(oqQzBIimBYX zTG%LatmeU{*eR{7_3+4-G{KHP`?l?pJQQ}7E1{telMKYs#`%w2`bVv;ad zc3|N`^=$c`LgIARDt4Xrx2{T_!`j*d()XwHI#;ebghlK9p1Mp{iEbA>FR-B3dEQ!W zbv%fpZS~Z;QM!ptb*KHiyT)lBB$aX0k{53wUOD+z#O&ewx8~2{s+q%{l#KcRzPq>$ z3v%o7E^b5L#eK`W8-M054k5en(#>4S{r1-FcL&vjF!~ob^vvzCmwEp6ldET;%NKQ<~lzj(|PH$vno4E31@;EJ*)Dx8zDsr_U#1c>&)*9e)Ei- zAiFuNa+?_2_<3}49G<}+pH8rW&740^7S)Ar3On!vBM8BY3CHrIpf7RQYT??Wp;@Kxah1NuRXQ}Qbe&eIiJ%%rA(msO z0u@2thdG*5?$rBq!FE=Oy@(#XX)i#SMqw{0L)b>jd?4TMS zBS3!LIa&viiLHm{Lbjnp=Nh*z46??KIUbO$;sKIi9Cwb|$F`cr4iPLnpCVnfVzFDF zLoCE_43liqparxJYZAtW3E{dNi5Nl~J1?t)T`Szj0e^MRUxF~EF22H*e>BdQJ3cVU zz~S%Ug$xR~F<3NuOKM>Iq zjE-e=?3}Gy)vQaHRw}80RRZI)f!V;F)&f?@4xr&x^RxL@LJWeb-CGZKT1gD)Njx)` z(m?elQ{dfG~DrP-x(5>0InLn})+GJHDbp63gOSPL)#bl6Q5jKfV>XY4v0 zi=^MzAu~3wXGBZR@BsD_|D3=Y_$es;$8Z&>{Zfa$$3I{2&nI;^Q}A*hcmQAv9n}UC zEdElJCg z^vv3M7A1qgxRXw%w_`3-KZjZ4(vyt;9e*f|S(qAr#{D75 zN$n0Zu>>~K&%U(`x}sTw!Q8#KSvN4E4H_42aDnJ;_i0|vC&Bi?u|D!W}Uf_i`eEkZmO}= z_*oh3tIz)3-3~AfSAQHfOHGDjnpio2c47D6!oZ|MXPeY|dBr$5xbYj=nx0#Cm(j3IR zG6^xaW&r?*^*Tis+1Q45KvVBP1=N*RO^Cikr-Kc=(!=&fQ8^ zeso${Iu^OY_kVblXg9ipd5Tij(y)i%X8eSgt!+nphZZf2dxyON#^nvJP6UVraKHmv zZtucR4ZG2~sRCgVFwctJiAVgC#D17|J4Ml6o!qgL-)EOPVa-nXh+Er8r>)v);^qJ- zr9d|;>k{c<#afCaGGahLSWDSwuM{F+Yr))nthtFrg|ySokK zz%{}1owB4)1q}X}e{oI{pvm^Dox8iv%9EEnJydGSM!dzvHG^A7>7LbK_7gnw0X`P* z7s^Y{(^{MOXQ+nNuo#TJHo%g#969OQ5V&q)lcN+f)drJd?uN|s16Z(a=*Nes9JU6d z3_8)_tACGo{NRZ*nlrBC#7{Q4Tfi@Ttd`qO@}g9rN4@L?g@}aN3{D<4o-nAH&Z?BNUTtoqz&Sn>npdB0S?;H0e&Zod25g zqWlyk_El0f(=`2-ltYb|W>C23zjy<@~4-HNUZ3|Wd z`wR@S+z#i+t?a6#cUV8dUo_s*BsgL6LsX@;3` zi+vNe4Wm#4VAu~=p4d7z0EGRp(|)%4Y_0QrWz|ku!xX+&!GQhn313y)*?zdbypK24 zNq-!iEH5*)@Pp6H*~Eh#ruW2Pow*x%u+KCf6*N0Dw*KlIBom9dS_f|G5{AYQt3$Qj z?$9=ViN_LOdJV(P1YeMVh|PGtdG7lt&{(zY6K@8!&C?s7?YJ{L%%-FGd%{O?c*X6M z%RHJaq<&)EeAEUD28r)mH}_n3JLrZA{eKq`^zR}f6#Zlg(+8F?{RxHXPbf^EnInv^ zbcAvC#|MpZHvZpt{IG37?43Md+|~z-{j$3~cfg2%wJlOCeatfShGjV^g2#^uWT@&iLy{(g1RyCd$*}{q{|m}5d)?Ya0$W|pTP~M9+|~$g16V*c z$sM7JHR=>$e43@rv8pWQ7d4(K$+D-h~d`f?xQ(&6{+Z0&Y-iE)c&nVmKvrYQD4S~)!rhlwJ4Ndyl z#J`knrSlw9Hrf=}-h#ktyWN4n<})m_{en`qH#ab_xlMuX?akx=uXgO8%~rel0-Iic zhRw7^n@_2k)op5Kt$qBDM~~SFo~-_K(CK5tTm+qogY2J-`@N-hAcH3q>;#uBpi3oW z@BKu4f((rl@xhil7UFFn;(xJ}ZDv$ItT(sG;Gv3Z$8hHhbbTl<~Yc zDx)Uw1{6TT)AW43fot;?OG0#pT2{?&9 zQkI1#p}b^BWMoo&j6OC>UqnBxMgznDs+{T3=)rtZ-DCxuvRIl=RG=7Qiz_ff_*oS{ zYr=jaD$6`MotB)e9PH9`W2$N;9=MO3!$nO^eYr5Y-(JfAcr{AKuq&O%xT_ z81nu(sqLv;D5&H>_emchEw_MrBRlg=&}^Oj<~kPqnNBFLN8D=_lTlJOyqf2?q&lAw zaAA@^;W|Qck8^;_iNR)vq9uIc+Va`aktb#XB=@}FrN?Br*?*T2$Lz@KkD{VL&_ObN zQ!MVJ+ga|BWsQs}CtJU!$pysWcau}#_;_LO#Jm*bO`?AMat@ z-^1wDKbg9|SaUEPV*p7qp_v&^ONuJUlp8+(U~-_f_Wb(s`ie>NfKN$Ij}T#eYqzP=4z?uu_|YXq=4XH%_(rYDV!- zRJ0WlAU46ytpe90nNdnGB5*0daW=Z144WyQk%>{8zz}j^D;Lcq=Gj>uO@g2#_9FE3k{tCztF0Tq8o zFkAAInB#kB{{N^ahacW!Z=OF+6$|e42pBXv-9wJixZ?Pe&8PGGUHwywK=3B#16j<| z5uT_(&gYO~eg{aBG@;W)-p9*UMc{wdeQ2ib&)jQpE$HE76yc|;mRITb za6-flf1^-xsE}Sz4I{|!?v@%W`uu+dBJ#1k8bcV!9`0YG2u1CXuMmPJ{;bvOSZ=9}_MO;emiK?$p?utH z|4S;0?Dd0+lW!jKWisLqt5v@HtuvEkQ4N+ilb`pbD|aSWi_(oh zllKcd=r}YvUzEl2X!81@^pg>JNW%N(d;Oj~T9hUop9~hI;YLo97FK+}XOz!2hg&_O z;d7o*c(_xq^P`>PyF0$vGm3w6E8pXmXO#7dW0G^zi~WYS>5^JHKHg>6rd|H5AJNf| zqWCE)MD)*FfC=M<-x^cujh_^;*jWuaP4 zY80j)F&F2;Xott|?)u8?+w;0YQ3K1QA@v9lh@<((9`<5ChlSg{CtiOJiLPhxB+RGd zFzXJ-9Ve4u5+?G7hMJRM6w0#+2v@hTj)QwEnrXF_FMNO^qJ0-Aql~)_C=LCaiw5d& zbgY2CC4irYTeJC$95Uh|J1Mi!^ob)>>+hT$RHS=@@jXRIle+C2vb$ z1B_5Q0Wh~JMJN*`PXmAR@3U!`&qv0gHe2hkNjTMkZs%nf~osn?667&o2i(d4-6 zPnu2AcD8bK<7SgVJWjKfm--w-pmTROSt4_|3{_KPZq|M^0ZMM?$If4bh^`o|862+$ z=#3jS?CSVw3_E!%P6|A|z`dkizi3HUVnxGyseOmNqP_AWyfA+i+KJ4m1n&lCmqVbV z4KqMrT;9%R`Zkf45xWolQ@QZ)jJfAj4^*UuoEL0Zeh-NNe3&!W35nnG$d{v!IC(EDd5VX(e|J@0EL+MP%4tgdYm_cXtblszsyI)8#izM}4NybTal)a(gxDtrTXNSOX9Q+yesiVUwT|J+PN_-z%;yPO~ddT!wmi6el3fn5N3o zG)2w!^nX=HAaB1w%#{rB8859vg-s54l}teRXgE&iEH=3W@gMEg_)$qVD@$|E4)8oc z=@Sb}0~Ny7LdOfCPAS|Jb?QMyfU%?uincH24QvuTd!@MySq=JN8gfb@i#l-kO&@NArHd3o;%L)Xb&@FU9I31Ypm%9)F8-K@q#7kbo zc|k2SW5I>kP$_}ru~G+NjfF*gBzdAGZqx=8{yIeo3reGDAmlkhEn#IYFh=jpfXKN- zOms0pnA!6H(~#Z`A`n}=Ksu9x%{I(QQzGrbMx%fQMUklsY-NIrRP%61{Uu^4?I1FY zQGq~;!&iDW<3Bw)*alLa1f{4A|}bp{Lvkl$bj!t5jTN=>4Q2%hP{RKbX&GBMi#Hb^(Hn zodJYj4RocaRYfH2h>uqi!lk8ZUTbbXMB>a`s7Bp49>kl6N1)DQ%sehN@+AXXz>y^l zTdYpaj=0b-5nC$78!YOO4^FXa9myp$n$om-@gGt;AXc`zFJKx zPuHW|^=)fT9=B6RTMikmY=S9;SpBG#sL!+7-Qs1cG*t^!@I68Yq3Ka^j2efOGlg8~ zOKz(H7vVfQJwom%J=R+oek*+v7*T=4vE#zRX9XR+iFkiG(mj=ocSCfVC;9+mhh+s6 zwGc=_SCN4Hfr1} z^bs(u-^FTi3*1p>jTar?ukM-7PPk~RR0?>(Z*a}t9A8&9M{0yfxH80}?^3(OVr69u zWvS(vtXzLQniZdH$s?FWpYnAy%2l(jLe?})(RdxE8UEKmru7Y7nccUc3Sbb5SaY!J zjL_Y&=Bacy)kK&OE+zUP$&s}KAr>y+Bye}Dtm6fX7=Xa?d19|ucy3M5m&lQyK%|z6 zkzGMC@1JI%$C9*JsA>qS<%2V_k4BaI+lwA@iJK6Y_NJsf})<^X!ble2VJUROO_ zbs%nk$`M545E^658&xM0wtg+(WJVO58V8 zqY`mf+arEuef|Zz(?o`M^BC`AbW}eZO~Ysne z&_{k2*{QqOK{~m}llV2Djr#r~YLuT_X>5g1i_;FG3Y`jXP!HXZRa!*Y704J>2PzSM zBMmDIq0ZRGC>l>x;Ehg_YHIYU29f2HVI;s)MyGqp4UO|MiL*u3N2>rYaAYV-}vcyg1YZxRJ;9< z-N4^n@3?C_jGpF;)w#aL^U*@;T*h;cD1Tix+PFHZ_R6!24%W69#=OW|^Pnpe45Wag>;9y&NLeW@D|l*@nKBgtAl%TPe^&Kn0+CUbE@pu_w$(2%`i}3wUB+;k)!)6CgxH zXQ9BB^owGfg1*wrF%<*N50IG-3*oNeAP#|n1oAsYm2#Tk+ej`i)Q_XzTrO$+;Q$y~ zB}0l$#%J_{N3j7p61YC&sa$^rw3^4fq}nD?9uX>Qmtm~LgEGQ=YQmn!kA+QI;qO5V zuqI|&v6@S2Vt>OrS6Il->NCa#!}+_Cf-!g7tJLP6~8O-6VBwZK&3%nvS&v z@^2NweU1jpY2m0S;T2(i#+MNo0WE)VL-dSo3e`gPA+7ZEAkxRW`#GLaTdy2#6!w!w z6+~Ehju@*126}S{+wGPlL!FFZxv>oZgGpjiU7&O@=pA)nGwprAf5Mj;_XFrCtkVGc zZF$pw6A5eOO{q}D!%Y+vKcu*FpoAJF4GP*p3c0{W7LtX5tf~21%`;!fD*>V*+yxd}`mFn8y2S;&wwPgaqe+4OY8-HcXTHT#DQ z9pz@1>3qz>tRH~mo{w3W_3I6!8eW)f3r!fj06?*nmr5A{Bmykumv9*Y6n|<5kVj=S z=Qb%}=6)gHoVg|~MDojo4;*$EU#i79^Uz^DaK;{8q1o48SXUb_N_h*z>I@D8Z{l~7ADx0tif!tg2+|hcM4do1RZK$pP*{a_a zihII&M9Q|565gh?c+FA)!+%X*kn2H?t1cZ0Vv&!?r<^2|Z{qM)<_~OU6U(%*44+xH z*54L(-mU*#EPM7QcAQ#h>aws7n8|PPVt*KHAkJF{xq?#)1l?{^_;0GPD=(fS&H#yN z;E3Be;w_u5T-ufi3@A&NHuY#kCYL4mrGP6>+x;@s-z1l#$Qfr;7z;(+QFK<+*V@qP z5|@q|0U3Xz_N%ulnWeL8POMPn7{s5L&ZoMT?Y7)Q^)MK>4pgfJ@%CiNrH;6ClnTva z9f1wgt zHTV1y+^FBFY8CEm=r{nC`t6QPL+e}?RsKbBJWhX<@vvcZl@F_#(5=L}1(yq@r{YVf zv|{}f>`sM`L8@PY7ywwH+Lw&a-T1OQh02QL6#a9}7C{zCsO%tgFIQNWh6Mm&YEF%a zDB?1i=? zC%X>a*yq?OYy2Rw?@o&Cv5W0;J1GSw|E+(M`5vEVY`d^?&AGZ`rPI?z&gs}_WM^@` z-mycc7nZL)mO3@t?)O+Bce3rWB0T(x<(zJpnuXaeTX>K-9w+5?a>{em*mE?GaI;>N zsZop=XY!7zVZ6?Zousq!9A!%U(TbWlvmb%|NB?sD(aq{g&wK{yfboGy8)av#l;3~v zKdxA|(gPcdU%h%2wi)>|=|Kgnoo0h$hR5aLuI=Bosl8+rK3!wcC|v8jSX*tcS#ErC z`+B3^##r4NpMP2cERj0A@RBA)&DpqA3Pn81T%5$k0_~fbd?AB2_ zg6$QVX{Eg;bHVm3vpw&;Q2Cy&K9_$PS67}rl{ue2d9o_Ac2+y>XEO83)0NJe@*%gf zw(|VBYHaQKlV?v=doP}Kp6EXFI)ZLxtu2Qy;3&JX`uzFRwyNamvuDp%IdW1PoH(#kaf*e+F5P4S5~23rGvS)(t+X{nmR(x!qew#t54RRXyEDysh0w}`j?;` z0Tq9)GwqQpy-kGg-uF?;3njp5kJ)W0y5UhBm!?-Sk0~>oVreLA-+P3nkw#M=HFDm5iyKd9za(xla4Nt)Z@ zHW07C%X;ApjU3=S@_I9eo|pAz$%puPK*F9swtR zA4@!;D8kOmm%!HCg?N~Wc>qjWd(fDR4#ccgEDBtgipGb}GI|!2i&?EI$ta$jbU#yxf}Av$&@1#%VM#zS8tLiMxFA%JRV#=6Yk4OUz!N?Uz&K zbY9}n)CX=7a42RMAzD0jFX-g6*JwZvad{oykgNR4X%GKGLo6FdhCE?$Oo$|stZ zeYp!KK7+;i-xFJ@u6m?scdXvj0D3}fSR2?ipoto4Jqv(s3$L?=I!Q}L3h$HA%a`~D zK{C=SQm$Xx{D9B1bixYP7vRw`LnWTo&Z|^-@lywST3oSADspvt<__i#T|>ct7&HnH zfZXZBjoO~R5KWM92J!eoOkQbLIVZz<({eGmp9t6g8(2vv1|9AFwt41GVVw$%r=@W3 z6WOsY&BC~{N~|Q^x5uM7;|h`jPNrJS6C+O1R1k2o=$1#tG4w6RpC-C?62B?n*3@>2 zUbygZdkFK9s^Q!;OawK5?-up)jvwX6b;54=xI-N~Y**eF?cuqsS+ALm-1V@@ zS?4A1t-=4mO6gsV7EuqVjG+!|fpD{3WNf!!Nyeg#Wf}WI2dmQ&BII|e$MshJ9?IWI zE*xk_6Lw}ke-RQ#gV00ULXNJ5YV zNN*{!j0{no@*8SJPg+a zv2T|@%St_0_JQ#zE9Mf;7S?91r;FS^(pzAwj#@FK^p49LZD#?^!`o97<#@cC1|^HL zF(r!E6B*Hgy=$1k@ixjsLC&lif+-UhOsM1m@+Z%W0G9fU*~)`|c)wHnR@82RW^W8% zIgy0MYTynX{^^S=Q!guY`BGo_6~25ESdx1@&9M%=vVj4IF&3(#k2>@zLjd1*Ae6cY zQywBM{E@leQtr14b6fZ$b01Rf!-csW1X5>WdUnSCd$8UGejfXoIZ(Vx8*0+ra}r71FHuLraZf1@9O-C?4jl1Rm7+dJ zqy($;@s>tV*t0TdRKHJQzcQR;s2J%R^&|D10Uqk2&eGiRl6wZ*N(y7N=(d`gvthdy zg`7L-AQSFdRNFJBv~wQSAL;Wboy9#u_J#s%|VIpj_pNA@dH72x8U4O< zUHOEWu7GZie$kpqo#G<9-$!z@AgNyeWiXfCOG(2icb+A*o`z@fh>Q?4br=}a2EkhI zabT)nr}pc&PAJrdZNS=g*iNA<(6{}2=quMPWOL#1|E$fmf2B>U2)X(gsixOWf^%n- zClsH5v%!d=oPh)&w;n_rATDd?$Su?-#7pPsEE3y;&M8Z>vc6Ua@%3di(Ch?ip%5Ar z?(zQ=NmfDqnQEjgGL*rmc8A$i<3P2$kWk2buL1yJn3)A#mE=;@Kx83RSIDEvQTVzG zNSO{Y>1lx!nA65=u1Nevw|wFSAq^qCFvU%mY9s*{f9Gyt%ZGPbyIs19r2AH}Hf3D^ z3*qz6pxrQAUK}H$ZXSZD^Ak=99 zJ)BrA$?EBL<>2{f(*-MXIzeB_GX9jK<;Ce}s$|7z0N}C0B7;4_RwBOqAlySZ9VP6L z-@~XFI*F5PLd(b*suPfdaqfx;H65IFWoLesf0R~Giqbk3q@^-FjfIu zn!ZQiF3@GCL58z4t+7d{U{!WG~^p1w30b7g?w9(akZl?jF=GUR%Jky1dtE=F0BhI^rGKsxCnJHc(Gd zT4SM#K89%+J$dUdqQot%u#)Pm(v|`{e<0dbm6X(Jt2nm0@)8{qQ0!`t+o#);k$D`@ zj?PT9B}EU*3Wr{OIN^kx6w*5e@@<0?A#m*gB~q^-kjcD!E5VZC)YAr{Kp2aV+>iG~ zq`(Nt=;J{i**{e@`X|Enmmf`zsSfxJ(_RWZP(TjY^f^1$k2|}3c$%b89*2#oe|d~r z#z|KK^9jLJs?tcyLlEHn-eeR^GA66H_@zBypC-_NOjIfu>y8h=+li=KcFT1G2sKuF zVB8m00op}-$F$|v*Q-XL9fk6MVhv>}^rq=~iW?-=VviD?o!tk#$;cN@L#%PzV|cKu zm2$ng7`wA#V_lz~o{r{vYp0|Mdmb9Ocoe+8~`b}M%0 zLntG@zGLr4=yLr~e_)Tss0WY(%edKspHm(#`W+eZq9;`0pnEyB|Qp0p66I z=OM?5^G*N0Kh(eP)&6~ls!%=oEJG|f8~JQF5R-p4Vz>C@&pt}K1D+GIj0stW1D{O> z21neY+#U2TS?MMe49bB3GnRnTpwT#ug3*kTMH(B7L2-|ks` z=0JA!xdqwP7cN-W+73|Hpf+GIVDpFXrv|97amDCeRL*Xv6^b9R|wdSmHFad-CjQ^+JWxxl>HpEc8J-v$e*iAwU!jtvXiZg9ixsHq3%7Vx6Gs zVU*N8+F-7-di^|;7DUw}t%_&A-GMgufBvG)cZA z`bB{ozdaRbQth5_wSaOnx=;W{jC`^Pw-mygLQ&vDQ20%cQITf_;GFxEvE(E1b46Ym zR4db*qAxi|w+lAAW~riZlpK}kUHjYhz^l19V_ysG*%xG2aE%=YrDI)dknv+?uH4>5 zc*_P{*a#oL$9#V8fdL% z;o?i&Aod#AYXsX8B6lP!^RtV=V(4=9y*kMh8wnBwW zVvMH7gDURPwW*ccR_u9K$?RCiSFpBH^v$5^Vom7bERn{1=P`*skMV6|E^d`kmXerX zDwLD9?c`NNV_Z+i25$zIBN*dj>!zen=k4bC*Mr0`T%SL7s=l_@f7)W=_}6w_MBe}G z2&w8NNfKGBI{S{)Im^R#H#hDwbEV}|gy~T(+=9!uyh~O9jFxanN5wHig>OBu&H|0C z_nA`I?-EUR+?Bab$L0yserD^5Q&nBk@y0C*1jP~SjQa0*aQu|H zC%BfP|?)Aa_Xy{#;D0dCNpxD7c3$gTXlev;e*Y=Mn? z6VU~H=PCNUYIkO7aRr zIqZ?|K7SKOkLqZkg%9-^Pd?HhGnM`=QXlzCr=-wn5qdY&AFgS;G5ohI>WhD!i%@R- zwNrm1sncs2w&*VS9487G9w!W(juTe=5;;0{7!%A@c_y3E(eJuN_`X>OS~y{hT>T+| z=P^zN8765;fBpq&sMh1H*YTh05V&3koU6oX;L5pW(j989)tvysGOiSlO67R5nzw*S zC80pMT5gbUWV5r7+d4$#)K6P(ENpC6)K(e`gWCXCK&ZcQg3ci26}2LETE~fpq21}_&Y+T26~i*B$~5^XpyP(H9e*RdvY^W*Jcxz>E3=7?*v}?2 zp--x>RS8P&3mG!9p)^+=#Z|z5)LZ51SxBoX^u&oRR@0zWR2GM}iCOs}PEzhaiNQmY zg$ys-kz(>&sWfsUWsXDF3Du_7!B(FB#3CW54XLg&aQ5UE=v~EKcHP6`?rtYlEYA*V z!vm$x(SI#c9`2-zs6bAXB=>uHcuNZ@$SYKV0g~8}fEP3Ly97(BLdNnc4Vz#0er1s} z@?xqM5Hw=~%w9n{MFg2%LP2hp6SJ0(iWea~&V`Wz2YCaF9pM2}fy*AG&9?=Lo1#x7 zZstbZEG=MULjK`=(>b{Aq z{cbMvn1;|D~EXE0OCT`bNhwC=rD5ilzKjTc`&(|Hr+TK4`D+WV|s zP9W30Wds8H%xE>MPVMU$$ZrDFtr`1O0HoN54B>?bm>+&40}E$}_VC=(P(TIwEX;b^ zvVQ?&0&GDB4V8zp5fDt!cLr4Lh$-&?#R^%be3#1j33O}WAgE&On6-5X+OW7l=KzjUv$$`JIjFor<)$>(oULs zO4VaD|J;=Jpr4dI=+{XNAHJhMoD>G+CtkqDDkyq{mX4JM#>y?9_(HFH;%gV$6@MQ% zsT4a=Z+OBwVEm!>lpG04b2XSe`({d0d7^^^5=m+gW&57gB8LJ@w;xkO`ak3i<_zm zaoR9S_N?L(QY5RBFihPhU1=*mqhrM^T}L%*ir=AzDioZJ8?FmSc4SnUnSZ6md~9c> zMflsS68Ckzmc}!4w4EyjbnOon7%n(+mJ~+9rKaE@m$hZyJ)P95M|&2Q$;vf@q3f}& zyOoW(YRs*D-qQW|?X8oFytr3_!B;Lin7OB6)&&%k*E$*^);%Vbsu;cNvD{_I2<~~Sm4Vjfduq{6nxwOa2z7J@h-UHg`sa=^iUbVT=F6IzmyF8w| z^rNz|mHQUa{aO)>#39bzozkXl62t9vc~uXa{fHYml$5^6P!VT=s(-e1W}d0{&Kjlk zQ)C%z&OK?Qx`UEsfrk!4mkE!873bgOfwXv&&#;sGa^u4=H?MrRUxqQh-mM%xXoM-cAV?Z$29B#heBy#Y`+jBB;hZYq17q%~LTN5hurK(smFg4JH`h2eRdEn* zUGqvEfg$QcXdhhSq_01)+_T+rqSBd*YG>5oW2j3yogffROgE^fS7~G7v$z5>NRl0-2A_z|J;euVr$E(} zdtH#0kxE*(ShHM@c=lIhzsw{YLQmNy8Xl)U`+)b>ayQuyLH)l*XF&hrH7E*g^QFn9D-CS&)ZpF6Xj5 zWV~6;D~*2Xwouq*K-X8?u0L!lywF0oYDnqY^WJY(=@>5`glAdRInurM$^W|L=VI&T zgK+Fj&7WEGTI05@dk?}5hxoqEgc0Sg{QZ(amVXN;%MM2EJ6%xbqX*%@iI>Kr2jR98 zz0mAiDvce4mxF)Rxzpb_tNwddvX(9OL3o|f#{b$}EL)J?d{_Dpa$ z?0@HtE4JseUG-GVcX437f$_WS#)to)+mbL}g;$C)wO@WWhvD1AQ5`h4*$<^^wF%_O zIs4wW&c46Tq;G2g%`-u9Zh?*=-3pB@5&>2!oY=4is$pd^N-4ICzFn^)|Feb4NI%F! zx@8drjE`+vh5H52@E^bs{Ww}Lj}0q|J%2p7yW93@jGN~2WwW;#P>lP2Yj4}V+1QqJ zU0jq)BOi9qTihjW`2_>q0%HB6N4+9MU_Z>P0Tx|i0>ym+q34Hm{S9-iKA-wx;J6|A zLE}L1%0EKjst+Lfhqxd94rGe$hLy9Fy|8i)b0uNzu|^fp3#NzM{s8uiirs^hy?=1- zFy=~^#v@=J9;l@d9Hfl{pWTE%>=+ofz_#y=U3RtX3F^oW1j=oz3zaV%zFh;n8|V;0 z0ie2xNVi2D6?N@lU4jrJ4r5*4Rb4mm=~e}`?}p#0ySwZFpzfDKf8~340Au_CgK9&^ zzjtrCH{qkS0n6xWd6`!64W#Ubdw<>C?k=Y6`u>ef0cr25dDHd3V?0!T)oiNxo90#5 z-@|xVsy8YgGstNS!@avZv#=?`dfh?bbJ<0$T7Q&}MDK05 zKG50*Cs||L$4iTw%zqoc6A8C(!>GbW&)9K{N zDm)kv-}ROPZ-E8h0?K*&5#jTe@JTBz9oFlIkiLx)ZdC)YaR{Aro@0gD4_oFncN-A$ z{W*Fxe4D8t;JtX8b|zW9!++{z%sF>N*c}4(JG@`V1-iDAhKG1xy`?Uz{l&~3q(Uxv z!9C~mQEah?^n8-D<5yk3xXhR4n&^U@Z6aI^RJ)6PjKF;S82DC>g`BLeOS~q4v-qO` zap(d4eaRbP{)mT*&Lg`H8(P&ApDTn1r1ut4?oH-O$)ib)S&%_0z<<%A_>%TWM;|Zk z8Vj40DyRx9s4yW-E>t!(Rb(ZIAqs{eLoBu}&pE337ZG^vL`p^@CmUi@@I!-Kw0dV;{FnA2(GOs|WCo z$C`WlzG-!R3%b6kdp0{j3@?5A&F&5DpIPcl>8cZzl#W-;<3@PC>hSm%x*#4cL3{mrYQwh`L{PmgNHzxU*5iRVZKBGAyIMClS2ocx$)u6an$L`&~M z?AJgQ>7xbzqC$3pD)u8=9mK5A6A>&kLK2({1P5G36NI=joqvG5t<0dKJEI%@Q zTiraKZhwpee`J74MK-$Nbhhlb$|1+}mUxY>9Qv~$N-U)S;u{PA>|;E6m0^?PEOBlw z7~UnsnSS5P)_o_d7W<`gbj*&|D)wonPi_JWVF*ZX|2}@?>62ZQww)>ppIxE@Y2{lt zZ#D%BL3ap`JVBYfM?L+u1c;Y|-~x@z1XWD^E`QZwU5}*39AQbiKg2r)TeH7<(V$*; z>j(|(RdXU-(zwKO6}v7uSA^b4Wo_z{`09CXIU2oVZ#QrM@E1`S(o@a(MFRM*AZ{E5 zx4XP6?TQ>|Yv=l8;3r))QqNM|vsCr$R(7gwbg)VdZ`oN`hs(>e1)Z6D{pxEP{=qF0 z+kY%W??h}o^eEFKZ~1G=-sd_NujC35yKeGokH{irn&=d|g^&f(p^jGf5;7$>DQ}>I zBQE02I=QkRCOq0KkHu}Mejmnu45cXI)<%<$3$YKKOD3;Qgz;2@WWg&Y489;o6?Gy*2qeuIGUp7WE8{ch1(9fC0 zp?%jA4cI@bGH0Eq_{8BBR)C_w7FI|vF>9NnIc*VV7RicYuD6mWAcy_-xSeNwHC4b% zyGq7}aqV5;gylY2wHHFYwmOFPb2i3BLhf6HM>v#T)YOu14B`D*jq1i(rhlP3^FC6G z`{t5^IOoje-Q6g~C1T*r1UR_@XHlvYdZ@rW7Wpt}m*(E9eEI?gm7>=GIV` z%xWyPeJOnE`}&zPGWjZUp}5OO*6SdU5k@5ac`kQAV*3>}whLCIw1AB>@lwENHpgUq zOOfXPNMRVK()snq2m+U6-ve{fWERM}I$nj30*^Bc{Jk zM_4Dv3N0(aUmC40%cH9jGkz_Z{ywn2f2PZYN1%i4i{Q~=ZF`#@CWgNT3_b;h z1t1B4Z8m?vrb-Y#*0Z%JzN-uW1da-z2taK%uYeyR=*q&-(}nS07snIEjMY0#@^>Gd zZ?diGBcpt3Z^I{LX$dcU>5wdpbIiGL6>O%z}YIX!Db))IJ1 ztG%zIg`18Ih1J(Uyo7_MwsN`KJ4QKmeYhYiC6$t%1UA!PJX{!SVPXH5x)%$0u5i!2 zhjb63pXQSUX$;j^B>K`|W6Ja;g zSq&DC`1yR5DSx1q3fv}f04o@82nVC=GB_w_;$pM%N_Ti`p5(^La?T~;4`BD>KtS=` zvcNof2fHF7PUpFUIrn3TWK4i(Uo^%CoCS>&>j(-RR>r*EQ4d#g_bFT3BXJ@*^L;Jo zOiCf;C~;rB4lXc`vQksk6Q~X{IfMkRb-W~e;}W$GWq&O_SXen8LaUC2s)Nn7_KRnC zD{?_12z>F3&%^EhzM7c@s&uL-lXZA%ZVeX*I;*yzBfJ&JVq=F+zSl4NK+bV#JS!jw z0m6FcLiY^Vxi*u|8^l|q;;|p`PIkS%WQCvj^3iy5W(>%U=Nv;G#Y!XaG>fm{dkGKr zL?(l}w13d>fqAN9vS1qXX#+SD2c|@POBk$}GbR_fJ-1|XPh(NSoPI2#vTpE@Tdg&2 zJ!>x(*;4h{`qj=eoYg>2lGQ5vy9XWWY)PDI+zLwN9`xuts`8$rr6uc-35b`^;L&(Chrek{snSaBjOM+&eO(SICyzQ@+d5b}4_p0$^m0o`p%*wGmnOJ7d^Zrew6O9v6Pm#wMDkv*g@5Ohj zn9+XWE1F^v(b+;~e(f1D-jdnE$A9q@UT=xkp)w4kItYq%?X@YYbt2BazhG)O?NMX^ z$bY4eP-AsNQeaZiRjQXgX(u@WkvPCVVLW4{UEdV1!Ca3p@{qkUvX$p+;tAv>4aG`^ z7eZHhfg=@pGp01wrHdHtC|xs=(#eY<3#%QW5O5@BQM$l6_Ih$!Yru>Q(YBzUTiEJ+(4t9kyiH}e8+bBd#>?W+GINq-aLUlq{)WD;GY5r!?(Oe+ra_t=%dNm0*D zxMw)3?v3WN_G~`u>X_}>eAbOv5m&Ybc&ck&;?B*RP;t>maiRwdHP8xqF1zrMEf@8X zY^Cf&t!l0iUW!ick-;8CL76}W$w}cojqO<=5-q8Oa4d!bL#7HqCfZY_1>La9PJb~g zyD_C@nH$D?jT>8chuvs)>L$FAeY<&ig`k$8UBS-Zz+Ugf*kSnuG{jmjQZ@E$cQ{s) zp^-jxg}&YUiReAs)fHT6Lx3xFa@lKKg;CVF0Vp7=1euvq9t;sq0i+iV1cDoH`BgK` z2yLGmhvR+=ZH{8DZ+mktV|Mt-d^aYhRMR)g|7x9z7B{ zAonAH5-g;*$lqO2PyAkESBycl?z3H@X`gaAy%d%s+l3MDhGo$ZqY&LwB?a4RAoXB9 z*5T+MOvD;~-lGZ+$v19{n>iUz1i;8thjP17ILXA*2>A zuQZlP3G=lQv2GAw1g#I|Jhz zd-iVJ*}IvaJ+;V%)G8<%OeQv0sZ>wgO?BdK?w>g9AySy0A!4G#?o60`TZ{6+ENEhP zBPN0gu)KxF%^d8iIk=%YxbYW{(kw5bzDMA{xd;3Q_F6O$*|ovE>wkiIcOJ}pu$Q4# z%8h#Pc7iB@kj8quZoL}PyH!Z<-V15fz^;TOjrJy>plb7i+N1_u@c&8Stx93JG7iIC zcV#Ge9YSqpX5Olq*`=A;_3s7DrfSDb&J|AV!pZqz)`k*g-bx2T;^$X*#UdUe7xGO$ zJ!sU{BL4D59XLmH;(z>0Fcz;OU_T)LFDOsF2r!^|ATqk*A!6V!c5@W*W4T%`wC>dH zFT*|j3cqnF_|0JN{8g`C@C953a(2Iv*_uKQ^)4p1t1?l^_bbT{>?~zsB!kq0-a9yrC#Ly#%&CacpxGKRKG2N>Ngvz-w>)e zSB4$@HE&Wn(aM4(4ovVNXjUDkzHzG(Z=_1ra)0aGqE)2ICv72n-Gpz2jD$O!oVse( zj&E++4#T(iVShgZ6ulw&zTsOdVd(;$6{ei#!Ort{mc%5LO9Cn*?NqrcCh4E8ib?wL zs+gqn^EXMY`GX9H_(!b@IjFz89_|MQeB;Wn#s}Z->iE;8`$sF}!Jg=)a$k42OK9d- z%SCmyTv)5+Zx3YgYWXsBRtp3lSS??;SuVd}KHy6k0Dp`)2FysvzN;z-`Rre1W#r+Y z61|Z7JPfb8hmLm4p<-Ytq(n3(WHXsV99%y0Z*k-rjtK3daX2TrIV|EHG^kDv_4~Jn z|28r1P>694c1-j~GS`O{ZrSc1Rialmy_qXw4ntk{%$htU#Z)C%E!5mdq;#75H%XCu zpPKkmu_ZPm<;FTOEEQ9?$kUe zPTDg<*BatfraCPUW1a5I9+G0A#(78?&iqhw=5iGu-p86NdTf|CB*HekZg$NoZ~pg$ z96T!`Va6POsOfszYb*xo0z^yIncMy6IGB+kSbsolab&qK!VBEzG%Tj5zQB?xeRX{H zX@p8yLLA(d>IC1V`oKk1jrux4!}lbF3^K1Fo0o|>*8DV5`YGKF-uN`a8`x06aj>3gZ-)b9g z&%Wbj?)JzTYIsY-2-?iQ4{8@KWa_o!1PC zrpAYfxCkj*<^^NzYQ4~Bl~=UC!13dneq@-OA|$ zyy>b7I)lLE($UOys`HY2YPR5p7Txo@xb4))oZ2dATd7j9p!&&q>q^NypcA-DIRj{n4s=O~(wD~3_d^QL5BreCT+ESQFB3h{EeinFN}F{B|&9G8Yq z0Um#W4t9cRI2CghGxdCgvQ$w$bBmOwNGbLUitVQMy3HS0w?%cGPSwK9s|z#N3zNBI zPEkxWDyXh(k0$ji`jh7hf#H_a#yLK!$LE%n48fU-<)^5gjeulXnLLE z!H1D9E2#owg!85e+X^qJ*WC-bU@+G#8Mu7-OL`;D+E>vuZXZ3$W%=S})aX763MT?J59@_pSsYt~9E zqEM)N?fc~;RFgZRyW5wUB>8Y;2OA-t@cwdX7so8Q+#lDR?>f4_1+AC*wqj2TVCbUg zXnq{-Nvd!TCxigUyOwR+`zN*y4wc4FyU|YcPAsDRAT(#>ok*^uJstUx@YH{t6VlCF zYTru+1CA#Y?a6QV*lqN0e6%N8@AOi^Ry0(H9`$%B65DV;q5)daH`(uKM^tv$ z99LTdd!V$@KprMv%F9(MG_7pqF}hx*wxqTrGObFi2_xPGGz!336(kLt)P06f$F*aj zRhhG4eknGLyOyCvU1cMMRy==FXeA?s>TSp6E7#cW*;le*OfaVXZf}yJKOB(%NGUH1 zunjV4#a=;S^2sr3uL#6Wp?~e`Uo5c}caGm{n1B7aWgS$Q1=L~Y7*Fq}-Tgv2=Ij*8 zrDPw@8K&c7M#MTW$(@HXwAf$}V${{Bk@6-$;xE2PDKYrl*U!U~QbvD#>~sPzEM!Wd zq8^NR+9srM(YBDapmcDlv<4;D{3?Q0D;U%ADUMbTnmf4umP_}ged&y{Q_!D%&Y>k_ zM+M8cUl{)x68gx{on}K(APt*KGYs|Hlx9j+OUa4m-$-*O{icDz6r7~&N(a)s4 zuF(UytEJk}vt|XZSsQkvNIcV&8HD;lV<}fS{JzX6Ae?am%N&1m*8VVk^fKe#L@%?W z^tg9&IV(Or$3zYk@%dd^l<>96CM_poK8yO)(ZSTWSl!9szQB!63$dHsV9qMOqNmWF z(!9M@e}7efUy~=+;{yLZD4=3C!I;WMtd$xUc_Z-I81Q3%nwe~W%{+Z>Y-XDu)Qi)M z_J)*KFUP!kIm>^m*J3jKl!a6kwM;XZM>Wn6&W(pFXpS!5uZk495eG(88QCm^KFU$} zemn`231(30Vi*xvwcx6ju>oKZYz;TIA4PRTPKL_S`ffD9wST*MXly`dwljs%p-a37 ztj_n)2sCHz{#(g=sAswPvco-R%d5ut`mN~WMW$k%rqO=^Ui7}MLo;O+A6KU0m9u(M zN@2M+^GK7HkDu*N#zd-~el;7g=Wh(WO2c3AuaYFfTv=R^O8Nr6wH6U_fP0*8acuRQ zBbPu6S5UD>1ff@tDO6)Ix#Y0lU-59lFw&v+?l430T>)?#u%>9N<6B?WX4mvB7h&18 zRmGAC`>cP9K1&&bC20T30x!*`FpX*9L|4%!enb}2Ey@mn$+X8us(+=QE+zNHRh$X{BX_5xzgbu6HT!y!IBg}2rar;vQ{Gu zjFh`nx6@v&g;Yhv#1zs*Axe~fMgG~foGI|D1eqj=7yX*AQ)tAUz{VB=3SRN&SBn3P zX+6W;p8O#uak(3xtAKTvzEuGifB6L!^DRfT^DiIKaA6p(IdJp)B8iG1Gz$Tor4hOB z2;?4imb)+oCS^;hs|U z#Zozva26_MEL4gtRINEEJFlANRk!g}X`tm}zE%O5DS0K2yrIM35=A~7f3vi#|D&#? z?M;;SGK#v5inTW=Z_26Qg6ajJbxOOnNc2$@7#f@{4w9E;FoaF5|H7u$&Nf=PFx%-m zXx-defySd+6l_(`(8Y=Q2|FU-J(T;>S_Aux2_PdRgbHuBN@C+{QcSv|Erpr}LKz9y z_pwTup#&TYCO{Gte-+^{kLTrNMrod}uj}jUUoG|Us|Wv){$C#`7bWd}(BFC> zo)_JRV(#}-B4eo{KhY+NXRGks7CJT|h})Fn_3P`4x(mcM(mGl%z}!6zpU-@SHy>;v zl4Mf?W>Q8Z%$GnF?RhF8t5!fzRaUzsAyC?=Y6hgZ!iVmML{`f8f2eju6=9?c3~M#w zRYIefWQ6jZX(lUaD}}NHz9Rrp7B!|EUjI@%TFrAaePcz&BhmA3xXXs)XvF#<6*i54 z#XzV`YG0zoQE?%&4I2`ir9@;cld5G946PF7O+}eH2I3x1g>cEfd0eqP!Zv;!b3Q{i z$ZpWQp8OsXiF7OVf1%Lu$EqVeSQWl5MB_?_DSE8YwNi>y-A+_b*wNpk&>RgQn=&Zy zys*1(f`nY55Hb}qA0nLHBrU6A_9es|h4V5jIF0tNJ~bOS1$ro7wTvG}RAVY* zZDMk(`PPml!l&Ay$6+BKY(DJY-@Y#%h}039?YVIgVND3S`_=xa{c2lc!>e=HQfJGn zb5dJjK?{>$e?ntLlsp+dt$CzAX{EGOj1|{js}C$E?|f&9Jtg_e22_pmHLcWBiLMCX z)0I*aI;owcHkho3tC=$g*?)DAJ)N&As=V`687j#=Luyd=>{R>|0b_AAI1Wa|QU4f? zR@{Se1l=ABjzV_-XAMQ}#kU7^>a9M~0vj?X4w`cre=tu9APe-@2Ev#_d9ogWV1T&* zry_ZmM+N45wacfFOcCgw!v=0o$sax>aY`27tvx#frah9uOGr8i!3eAW43>c=EvQM7OMZ7>X z9lWU#e-PR1@p;4ytC%%`vJ1h}^rlidw#q=flB8VW*gmukSd{Hqq>{m(jhP7vbq@mqGT+t^=l<9Sm$}pU|I4{!zhwfB<5r3K0 zf0a{&;n>tqO}*-;GxbZ}7WsQ8J+05BeWxxsO93G!yv(M5)t%Iobl`AS7h_%N@Jl}4 z{Zqz-J46aok369t7_=NdImybG>E-JbF(~li1zh2!0FwEpH8bd%lMs&^;E&LVkFx-+ zEcuGdrqzmls#{l__jg+Y0LUmjL!12vf2+uV#(uR<%V~$`qqf~&`Kczn%t>%-%4_5> zSWPr9ZbZ^cezN?Pk{8EqKVP%$1AKz^eK`dafnr?Ce;wPFws39LQWWi6+pL9a^Mx(I zwduQL=ibJ+q8+sfuG(N!vNJw4$YV5A&b8jt}@mUgo|4D03%d04(w0JE`g zxJIyR&(dC&z?sUu4=s!YZhU#wAc?PAaH3H|YSGoNHPil2GpVl|;+}Z#4cJ9?Jckb1{ zXy=SddDH;>;osiXSN|(_mE|_BjFg75t0?m=8CLJAlJ=ZcpnRL`J8SNNL6y@0O*tZ# z@R^>`$itEjHg3B$i_Vywf4mV`FDH8lve3%)2841zn4qR16A&)j=SV^sO`_rxzXi%Z zEB9x0j=}nx7@30exv`PUV04K!(6)#!N17A%I0V$gS| zF|4&+D%z9l)Gytd86qOypbjv_4)P1X zZw3clne)3;@2bJ(a-8951> zCjoEIqp;gh@LKE91KOj;aM~AhOh;BJds}Wfv7%15pyops%npt8Y-GEvd{q~zv8k^wxrsQ5}7%x-|+bq6`Bu zk3Qug3u#`sO~Ozj^m9>y-4W#kD1&fHrv+ojRWkcggUpbt%EBA!XT_4Jg3vLz0ulHBOte+5vU0yZ%Mzk-bqdfq5mB*}s zEo4YaG_fWxMn(R+NBPDxT1DtdlI;D`pq8VuFo@ z>p~SutP$$0e`uHO|{yH@T}X5k`}Rh@mZlg ztG(}Fnm@9N$?ryUKn~I*L^=MdYy~V@0H$~Tna}d zr_v2o@{zUmIlHw^|ehm zso|e7$sq+v&2wCY{OoA6js`s!eNj{H-!>&OWuS5>J5d%`hjdQK`J ze`UDp1az04Dk_4zi~eLNcf~kc7Zp_&N`$u;Gm*5Z9us?wQd^TrvV!T4a%^tf2B}i%P$&X%MU1qI4Zc^QqqcNSCT6-6<-p`w7cGU0!7I#hsjn0p3scX@;!1T5^yT3n61 zPz-+P2EE!F{q0S?3hU8-l;XXdS&1r84BwTnub-htRDT02Db(yqb*X00CiT{te-yXF zS6buTO(fDvkga7g;7%YD9q|XdaXCSYxUdGKd3)87a=G1jh&y(9i zgUJdTh-I(gv63h@e-D{|q&gDZ$%S7}sOI-jEO~ux^EX~!$N8w+wp3E?gNI`W4@#rS zKy>F(oI{)PFwLR!e?76l-5GViwQ#FNHpwkSHmhs86KJbp1vNK}%x~rfK@Dr}TLP8J z7pP!BslWZP@a|yLa2<;lfzTHdjlShcSqO7Eqg}Z3^M7s>D5F=#5-yNXkpD?PR#Atckwd2q{$wGFbfyL=>1r52%{Yse@6?1FbkOSq7}j{B!pQg z2=nd+2s7;NXb|)6?}M1&e=daCS0I2xn1zBcq5)k*D|8vkkU>5qV$FYC31Qx~Lzs66 zVH!;WgxTc~W|tt$M;P$+H5|H8cjp_6Czty+%hs&963#UDumNa{f(*xcGq`DQZFNo6 z=nAOQ)*8FBf9$JU98Lb|pbvEQDnQY;colxwyQRjxqL~5 zbJVhhih7^RI=;=R)XlIN_gk2ykB%j~6;2zBr?j&pnFHM`Z4{tatv;iuoL4{B*VX45 zYvSt5&`fSjZl3C}MVd+Z55;-bEg2WHv3*}Kp`V!}8LMYb5?95?vOKONQ8KAq`^=Q# zEz7a`f0vkVmN))e5{_3E_t%sYym^MjoMg*z0#Q^wk2urX8m47!5Ozx)x>U?ZUF6gl zpE%ffNMf}W(O$H02?ggQngtg86&|BOV4^roww0%ffwl0X0o>r=e-dld4q zbRO3STlXLI`}Y9{&5bY%KSijD77uSwVwb0w#694 zLEmHA?T|s9#F3fZ0EH6fT~{te?H!mz9XO}i2`K*`O<^3IuVQIrSbDqD$edhJNU65k z??snTXaOL9lpZrF*ZqKnBw$<88ZN6~l6TiVxWX&Ga*`E>&!sz|A%KayW)pog`=)oy z0lVQ~dX52~MUxgF9VK0L7nQJ#B}R+3(LO(>Sx{G<8SA0mBXB8|bwID9E)z3u{|Fm? zkadmM!o~(_^VED$F@lJ{4X0QtM^CD9^p5i0I)J8s)PSbAaq-y+gQ@5ZPe?eKl_1T1NrKfNJ81>kbuetIC)CQDrIfl}a;4;v3Mmq&iUgxlM58?qd!*_m zYP&0&S4PGaD&=W0aHQse4x z0&XUM>-Q2BN^>hLqYV`kQwG(%4RcovN zP*r;{c&O`PfE4+2bK}SRs;1O;%L=5|Qcd087;LH9+Z$UO4<6{wC|RxUk2CBE{-KjCNn5f(HcwG0W5k!_ z>spY}G5XJ#*fViA@NfCRyXB@X52`upI#;@J-=kBSBFFm- z!Btj10U&xA7fFd;iNuN;w?p#?l?xev9=cENgdt$YIGdu568`KX$Ss!umwT)^1vXU+ za_w1xX_9DVY!oxH_prSvS3j`fh%@)Ud|MyPqOJy_1m!FG zYKqZP75ZK|VPZ+JZQ_s1q(ZHMVhtB!IYCok8(>CAsUIZP99l9G*Fj>}qXCXX@{NU0 z@ilbtG$3ifB~eBx@kIxQPG_w{>z*6hSyK4J+$=wal(QLO?0QpNVHRr}NlY~B&}>Q` zar)7y;tkYNu&A`3h}E zS3dFYTsLb;rhF9|1%~rtD(aU`Yyl+#KsT3lYyl^K<#wH$U?u8GRxB68X7~{!t_c*y zIV4P&V7Wu!g_+i<1?%f%EWlrHg@>8-erTrbbKB~N8ZD4P?}-*AmcE8hS?nVG0W9a{ z0t@^CeSK6Xn;}uMzCg>6wVHr#8gGsiz_U1KeGs%VIOe$d#PrC>3&YmN(#V{4!OWr5 zmWGmlTWI;vnc+h@L;uhdG2g^_MA(}Q-gSRpuUe$X)E7)4gtDcZQrLZqHkB zd+y`*oa1)o7a@&W3AN`wYS(W#cv&uC$+*S&64uXIIoDUIVU~!8g1d8(vc=6kpv-F} zR+PXeSM)%Z&+DoKY|t0!90vp*{VI^tKRV{99s(IZXr<_1^J~HMdO8k z-x7kD7#^{$!&3K4zubNeUepdQv;65a!=x@P`rksoZ8*Km@-dYkPJ`u3=|m>ATSJ`| z5H@`mJ&a2V9ABUr`@tnf)1RkB^`(pEJ7sI((eANwFGT7rqV%0#rm1pum`7NFnoqF# zc`)}|Nl+<}Q*^N_H0wV~j-yUT*?*yb6;&sR^YgTr)#dcdVOl-U0gyj?v;RUFS#>mZ zuAj?#KF1UQ#O3AHZjzCI_WQWVWm-|E)-wXQuu|UpxUObaFDTrYyB&)l2&pe~QbyXIW{qW=Wo0VMEREl7 ztJAr=fY$yc=dATubcELb~~kfKp96Z72^xN$Svm(6ME&11yQF5 zF)p4;jFj#fgYE{di3Nb@bld`x5q%Y2RjcZJQkakjYj4s(!QIrb=?VZVO-?BNT(T)k za3PI}4UVi@Ql58}RHb74m!V+{K@hqmDhI`5SkHJ~rb#Ev{Sg#CPnfrVjiB&3K<#fd zs*wAoL9`4>{&vO{y7~#G^ZhMt4GqV%wx&$c`i7Gbn609aW(!rIr)D%Xj7!XQnyK=- zWK^6eu2*TdRUMhoIs7{eJ;&wD7$%xUb)MWLB+?|q zMA7D5Bk4m1arO=_118U3U*-o)}ONI{g3(oGmoOT1@*EDph zYjA?un=naIDRU)#0HA@%bgZ89skWoQ6kN&#$bZ?Wt>|e-*RPM9*73hUrfg)vLb%c} zpqG_9hUu}O1ocD2GW#|?VwXjZ$m8xV=B-j=0^IUUc`N!Wv>l#*;N~e`KQCLA42UI7 zG#fDwa3vM`{mgAggtqP{SAcIC_#0W^TA}hOH4NE3j{p9Bn>)r%N6O;7%v!YE=-tS7 zUr))nmbrwpI@86`PIZhrs-qXhaRhuz)GgURNlWZnMUBG+|%SXF~ z&T&-Uy&FIiyTws??6n}BpJfl^!Q2?z#kuMryNJ*AAOU!M@;(x)2AQM?yh~ZVnw_6d zn+qTri@g|wipZ9-9QcB)(U|5dir&d(f!v-7WqNfPm-|5dXY*+qf3B_7y$kiQys0(I zTRd*>T5}M_*MSnVW!n>Hv4T6vf{J z@Xe3^4vV0s+GP|Aiv6#@ z!T#6Z7Bkhs$V{-lQ5+DOdPPb>;1+1Nxf1Q9gm%!7bZxK_?WBZu+7D|X^&xA9|18t$ zaRm!}T30YIdP$h`OP64D0TqA4tK`s$MEecA?uA|RBvTr+7+$~ zU*;yBwyRsvY|ZXFS-d64BF|M_tcQpW4a=o3bE&kWv4^YMU5!_;oA*N*o3hFGq+`M= zp6DIPPR-P?;4oI4b~_G-m@k(h6YcDc(xJH=jyEKQ56RpQsS|Z1qziv`8eLS@R-6l@ ztQL~!LGvZ>dN$Mvsjghzq_-ruA~tVmd|9_pT6a*b=8{@@n7gD_pvZ$aaK3P9C{&eN z3%(D`7OKthTA|>lS%uB4&(ERpH#;L(s5Ie3iG-vb;9->KYXx# zzfX=0MgdkwbVL}v+M<6-^&*oXE8fT_J9r>ZWFw0n^v8k{_`V-44PngfTJC_{MVdro zf^rR-VG5X0*ih~jPFU$gR!cwx`OnL#c?P#+qc~C_vy_3n?-hb}b~-ylMaJ%WMQLff zE4SOacSz7Am5yo#Xg%4mc4gwDuA^3_alA{_;=qs1AVkAKvau^>>`5zY!sI@Iwg%8A z9@k%shiu%2)1tfDQlKG58uWE@ms!^{8EC2f%T|*+>g8|gasKXf=x9l*ZOq98i z9;>Rhf{vsa@pVXqu{AZ&>#|Zc`{NM$P#x3}l)|`jcrGAazu#yt2z}(VVUQ>*+va6U-&*m$Qj;;8$}cJp z+)8EIYJC^t9jWq56&<6;9Hr~`u;j;Uatx4Jg*>I$Dm9pGwX2#nw27h5Zqt!j2~shw zBC2olXI(`uSB*G`jZ7_=*&azteGmTDQUUdUp*~lGwXa9&;6O}2D&1y&v|!|1ZZ zMV58Xrs&H2nUWP=I+0}$QzxR!NR@>coAbR=ap*&s7Ced&x;DzPL)!3?h=0NnAy-8@-JJ}M2ba^N)4WyN7FS)9dpS$cVW zeVOIS?9ybl#1Ia;HLS~@Wrm^x`LP1UdQWBKBQyccfkTh;@nlv|WB`@)P!%1VouQu@ zIqji%L`JsNPx39Lg0ze=fO7p)W#-F&nXSj2bSa}bpb62vfmq-_yYRFF|L+5>x2KFv zNDMt3T4T+3!+ks)*VoDeYTtAN&zs~tpWH12fwk)E>taQ%1=K=a4`<{zQPzJq+P5MB zCHDqK@f{R1rGz1G_o96m@4KNMCM@qh+IlF@3JMvEp)p`9?%qWUqLRF`fh56y(i%&5 zB8f&8SV|pn|0jJDq?}_v+Jg`Gdl;}XC(*(ZdSB)dnjYO7TwgEfucF-Kk(<*QTP$_D zBf1SaE}^Q>rwVYp*5Dy zpG!9UO){SU8m;7@hhO=5AB?_oRcqAggwFei>+4^8iGn*y(}hJ`RoAG0;7R0^C{y7s z&4zn&UQZ0UiP=UZOgbi^D`C%;l)Q5 z5V-Iyj~MwcnS0G4kBXk3lDu$^4u)JU=rRwJ8HEs~j4bOik&brsD|H6#q4}i(=Tbga z9d7r%jAB&>%ThT7t8meO(%hQaroEpUG*!9dcOz5#gRh*y!zxCVGx)qQctkf+&^gS_ z*b6|YxyoOvhKT6A;zRtHaq~Ha^!@&wG#E|U@OFsF?%b0ECCj#?+at`g9kSfnY%KY> zJNUKU;F}6n* zV;i{y`SZU0Ie4H4p{(Y7V>~vyKs$V(`{hcfPlR@BwmmZgw&?6E|D3tdi#pRG_hFR_ z>B8ckzLBHNcreNtb{@B znW zXBQV)f3=sLrp4R*!jJt)T-}O#-4f%X=p5f#+3TQ#&net4%=}daT7xS05ahc zb1H52S7{-ThO(rJC9wib?86BxMNW}kL6cN9$sNy06Jk<@bZZqQ09`fK6{|oL76xWW z0?|%knOP2fjzP{rojufqG?U;JUi8kE(@)30(D}Z6O}dH>nfpGgt?e3_#+>M9oYs8B ze*`uLVSD)oKqV=}9CbgZn78h88la0|tEki-0jOI9jW#ufX381X${Y&Jqqi$Y-uq<5 zut_LtyicAe4rP*F-npERB6n8o#;`WVf5td7K6UfL6akR6m_Mc<=Pb$}gNl5aDW;^f zjeH(2DmNs(p$8q2mUU+74~s{+Hmxh}f8N!@$d8I+!{*iz>c(LIqGYHDpt*s?T6jBm z03lq$IXi(8!gGTb^zL@*wB2g=i><%##c~cc6=j9|^h$dZ6qW+MsAWKL7b8j2G!`OZ zxUeu`!AaV{I-U@%DNp_`o%~W@DEH-3TKGF6h>Zu^TeKOK(OO#9rg+??g!jymf64B1 zJa&baR*8u;08wgf49ksR@I@s%JU~uG6abY-ItlFPrbrD59|&OXHib$3^+Aa&4XOGe zSgOyq`DZs&Upm0dAIA1z!{$-|Iu}8lb{h6L{gz4G__dBnf4!4g21?hC zw#Uq9hc~>7xZ{NipkAwB5bvyIVkvk%@s2DLF>W|7CWnNkv0}^jb;DLMY^!7}$&Zf1 zP6zvhwUeGax4eS)R{#S#dEYeP+dzQo+=FJ~AUvd{6>;BsWSgxcN&*&T60NSKBz9QfB_7Mtxmh6<# z&3J8x$^gi0*VtNHG_M-RVU9_ime`D`fs1PvMme_;J zEjVTn0tVslq#9t4VGXM<{P=Bx`>KfcfU(l;(apdRW*-#|?pw2dR5ZA+IBxH%>z-{4 z5$xTlZGS$E6SCKC)^{}?clQGuF=YA97+Sp3q|lytAH54gs=3^Wb_^LKiO3y!5cZ=~ zYpt{_j-GamUFJ@-e=k8sw9mlG?uf1v;Tx0D7j4e9sk|e7b>5&?P&uE*Upk_b!=k~T z3|6nG;=Jkri6dL^}Z*p)sRT) zBC)O;hi2auIHC@7za#_F2% zkqK4f#yo1lPEF7|@U&0PM?9Br#ko>R)gyRW-;ktv8nOUFdbhj?LdDo*(kisF0{9~q zlBb0w($rSre=v1gA#Y(_Vd!UAH%%%FT^iln+|+S)NPIpdSs-Rw7&=&8Ay}!7FIIAR zbJYsTM2T3vS&28WO1y=Cq!+<5wZmLi>lkU18M#LHpx{SltMtjl13*MH!-3eBvoRN0 z%C&Y;7{^U=9p4KCU-H0HhLR!zJQ6dn>W7eFtU4?T?Ht+<-yfEgZ2^(J3H{ap z;K%Mgf1~FsU(+w|-Fru`Z<@Cv7N)L)E7@N8Rz?6QJOMo@F;pi2VAg;n zQxUreauv<|R$XP;t#eJcS^)T5sI>?1-UP#NZ>8Y;v$%&0BVO-m=5k z$RCqvKdvUdahgrV$ElwieFs<-99vq54_SNS^ux+8e}Z2;o#kiQxj4t*-OrRD^NITV zGZvm#@K04lMc&0c0a)}_2H+CA7{co3Dg5(G2LHTM#WNM2{WmPki)ipeUwl+$fB%r? z!kK&;E8OsbN)z?;3%2-c0so}2YH5mgp`W4LYN!i13p(xndAcr*#78J@34cS2{Ck7Z zZ&Ub55*T|+&T?ybVyQ#2DIbK`kfvOICg-cs&*}QTpVP3Murw=%rujTo{&4W4m|=p> z&oZ9-UP5I%Jr3CE+jc0q^u6(6&1L z(R9+CjGdeYaN1^#GLbU1VsItTr(7yr8R;NZt4Qb?EKg_MA}~G|d9+u$s(64CGcTb= z9yvktSYioif97#!SQ%K(e^0=RiZgG(%a&!U8tcoD&Dq!(7uw4y>_zk)A~t?hX-*rv zkGorRDSJIH$E|kEw7z*dydd7)Vtuo()%yjsp8h${ij+k_1|lK=o?ZskkXr!S=YCe{d(OMu13QZwp@-Dey$SJAsvqMkJ!z8Mef25G@|N|J&r*BJ^U z6jd?Bv<>vZmYbAEZwonS0PqtXWEXEN39m)2>6iO~dTTsXNysh-%(!2<^zyu~9b$}s zY3r!Mm*_FpYK*lRe`Br3Slcn)dXPrddY0u`IZ2cEv*Hs>+ZITF%>vJ@L;Qrk_YQ(m zNsfjuu&Y@G2+U)BVD@?#m_%-~-{08W+Sm$|6@L}|mf>l*M_y}#{v#DCfex@dm&%r3 zEu)*{MRd#cA|Qj4E5vkYaR~&3P65-Xzitu(^s4M4oz>N|e>hL3X%uJO7rA53ASYuO z+~tZHZh13A$H9#)+SY=Fq(-3_VK#Kp!`uV+2E+cNVyLAjn}d5VD~yp|l1^!Y^10|gYSQ1rX31-G4>PEB2OIsLiV^%9Zau(X@NYQi(@*>p4j#%1@F(0% zH{mDz8*XhQ@QG#AB(uO$`QWd~+gU|0sTtX3TJ2OU z?VXv`GzOx%npN6W7=ESUtfGjvXv{eM(w$WfVRJaqe{719sVc>T@!G&tPFAwxNfww# zt~7<46>#bd*K|v(8j|`k*Nh=rdP&`}k{_*ot-2WFqSThQYXfC;XdaiEebnxQat)O)I5$iNw`E!CPwoCpSXBH9 zuI4Y9f51OKlYzIJh>A!A29}^25x5f7QlJ%r3IGtQq25vn5Xe3b00OMUQGSdB1a?v| z3S&a-EF$uoi3%hhhVm#W*eZpEUYa$IDwxTbJoM6_L#j~#6XB|EXmLH^sG;&7LkbeZ z8_1AcfsWC?8k1H{OqvrWZ9_Tc8ao)Q4a534f2|S>3<+kCE(YL1ZF#Ch9F0DSTQaOBk!C0=)936&|!*c zm5m{M*N*!Ttxvr#a2}OtP~yzDAO=bunBB?*JVLMJs$if?0nRILgB0K4?nvKIyAGz& ze=zLcfb<+L7D6)mjDjv2sxOe{*H79MOIn>|J-4M*BKO?Jv{~o_OfX8tXF!2-i3YTC zo6wcpC2dxCX1jRrBy%HQ0>SW`mn3Ge8A``xFDFS$VL!agx`pSj>?y*vpb&S8>&{Sb z0#FCV7AYmgF&ij#h(IgjzPhrDU$W@ue`!P#48U1hba7(kZ<4qHnEL3%ppgpD2;Jb5 z{HQu63*QWd>eDn{qzQBTa>}iZYN^bW0srLMgNEW7IdWArTqa{?`3I>Y`6F4HucBgk zqU;>?1+eGzLNRB`7#fd{zDLAm99S;n`>A+6A9ypxBXTru#(ic4}f4Sn? z9DDg11v|JwUvZ&-O{2Fd^dQ&zF$PT&2Pn+=kU2iuqBWC=T%dP&>tPcsEv3?QZ^+DK zO+J%3T>M2;Ne1R;;J7r=Ls=q)H6>+{1y#&UTSj)iO=0D3v=BSdT%Z_SIec_?Jh{le zl)vDg!9e}pR+`{F_|6L8_eStBe>W-Ia}42kJW0N15d!aJc#l2#HweAfXj%P6XhoOO zcJ6uIO$ZOZGiULglLq!l-F+t#Oh1oE?VXzF`ugj-TZ>&Gb11@M?+&$Bu1C6kbkq+Y z$P)W7t%e`SpnBoOk%~S@Yln~Otx=k5%E@B*D?0>?NM$|CZPL??`vEhbf1q$@dZ%bK zuT#4KudRIz{N`c0^sc^69oiXI=5=b9<~-|u&btfX?(I;Pb+m|7si3eG(rBA?0E87}sWjG)|4b4$YXf z(0(2*sOq1Qv{DscquQ0=e|L4vCLSG4-i<$zirz_!Y@yE7UNO6%Rpgl$7Qd^fUhj z!3??WGtL7cPh`!Xjiro)L`I~;axag&@|>lSmGEeC@1p~aP0*$9f2Sb>>3FcOx-$OS z^)>z7RDU-Dd6c#S6yO`%!`*yc=a${Ja$c|O`WmRzXC&;keJP^Yr4l!k0Pb6YFkkp} z;tRh@CHyM6@JnMRqBz-t6pRvbDdr8dEYVBoNX6cwlXFe)_9*((3ut>!@=JWJ?XkAZPVHo8FHWWTVqSV8FEd2$SP>uls6P>SEW_k9Fp|MoTUjj_!Sf z%=KuL)4JBoR(#C*<}C4dl&WK7stkFQ!fm#9FN{y4Jj#dY+2*hbL?x|aHNKhz>WtHH z>Xum1#PW3al6?(y*&X76CQSi#b*2Ej`qh4MhesGI?I>pd(?7En-?wP_~GEShF!iS>u#6UI3f9})>T=Xm-O zZz#1Sde~RE=pPV^8KrBA8rL!)9{~ldR4_xe%46+d_1X1U<${KaGpy+UG|OM7W6ZLR z(YNX7V8)|i{;1O2R1Vx!e;HLrIdD>4C4UoFhAselV*Dv2qx|tFk!0s-S;3?Hv82oL z4~-S1S~-nAXGXW2Dk#zYWon|EG8qq@fyRuxwT{(>=P`{(zZQ4zhFz_31&B>QOC5BJ ziB_OJin*CPyj&VhXD|XJj@=WJe_Ob5|ECl+#3}BPYEuF(6=GKgf6h&ES8=`?fNTx| zooVM>TJg%m_}<=h-*Tjm-jg4#v5@S(H)2|5f;W$9*UQlwIcUyufso+QT<`rt3uJer z`O!jVB76_LgV+B~^j?cMc5bv<`M&5r5IYzaMO!ABA#1y&z}O=1z?ApfBMV`NnmNk8vOoFA z6Sd!8wMi`<@?_=0XhtUZ%FSrM@`Xv<9`H8c+RPhk!%VW~H?Gh7DXh=j*irvN_D6G} z?T5rKB#1_j!^Az3D!keOdhFVzJTOanpeHf6OL@SS(zx$p`=pL0$mfT1cs0Y=uO?Ij z#_MR0=g?9Se*-$CCZGexEYv-Op!d-a8UiH$3~kw)k$0~>3q z&45k?bG#kD-D-4qOD?-WCOef2NC7erY8p5#8Z4mtf1Sz&tegder4^DcK&79a>9T6G zSKRfI`$<*O(|A0wLPr@f9^)EORMO~Hs_J3a-+wPFSW8I-C86E6aAZ|e)}5iz z33?|2ANZ9Lm4uk8q4B+P`ZXi7&#GrtAl(H2pisi4>aK|1PMtg+nETZAwLsPEV+`3> z5a`PMuxNUH+W2~X{Y-`|u5{H>eyeN^;HNPGEL=x_5|&PE)m~$6tlkOm z`!IqCz5Nfk@L9IzGvKs#iHO50i)n)o*R_94vWN8UC zR=yLK;=_9EY3bhi-YG1bywG*yiq|?=KV`4IDv`9YnxRd96kg!v`dRNoZhRw^x=BZ1 zD;png-Qr`U3g=an=c_ZC@Q}jd0(I4IF!i9$9|Pz+LmG^J7X%74BRI@4`?U-tuEkjQ zHm}i<(n-Rgu@sfUV>c|+g zdWcs-*F^h&VggnWSw`1mB)Q$tx}wpG+DV1JxeSU`KBy5?q>y*}%djlqFT@y8` z&Od6sGH$r_!>sG1Zt^qJG_Ir3=jbi_N6vRLWDD*NckoXGmhYQ@#bmxw-Fof$V|Z|5 zb-P!Mv2Xm{5Bm!8={Xx?khat02WCjL6(41Sn4;%@qoQQU-9GROFkuBF2GQhCeV<5U z-P(*4Z;W|ZUteQnVe37zSHCtEg7yeoXIRuvx*{(rOS7R_U2&Qf##zDI+{wOT;$uk$ zbYU`xlPxh#%JQ4hv#NVQ(S3zyeqJtic z7Sd#YWf6AOuN`UmvZKlaVLpl$%carZqP+&s2joQi(scsyXJ*z=5T8FcFSYAcBs;ch ze>3rZkVGaVllHqMAfwYL`CmLx`IJnb$qJmjg)-K}PG%mlWG})xg?H!fWD+@x#0tIS zupQxRi&V}E9-!thakd`Eh*m(JjIxeQt`~cM{IAT3OzaeE^-*F9mo*w8$(2W<>ahaTTkf8A#bRLAgEvLReN z`o&jMP8&;!B}NulwsXdp{g(kCf6kN=Ty^Y(2)8Ss%z5$Iu=Duf1|DYy4$MtZqulh8 z?*NOh8S|LiC~qrf)r=18T6ZnIzFtFD0qG&C#fID?aiR>e74x1tGG5gz^)VWRlXwroqokqu_on6C)9sO1k@m^nfd%}UCve<(vLoH`Xl z3&=g^?4k(m%0^ryljdy+ zu144KxTFd**Lm_(qBd32L_^CP1}ZKQ<%N%EiV~d*k$QOr+_3UABYws7{t&iR8Re?B zjB=HmQBK%&VW>K7H(c`mp`e$1R_pf0<8nN<1#-sO7ir z(iv%>k;5A4vW5?83I9l8eFk0t+CQ=IpC}}c;R+>sfn404S}|H>7OG-!G;e@xTJRq+)G!I`OtM$*XjQgb{UFkS~;o4xye|v~yEhOjd-$z1%aMX%{&HT@3ZMJk$3^?m7)j(r!!5uICfK#rqBv2 zMZ+i?8%}TN5i&&IaQcuRb89N61;xLaf#Cxq8yXf@vfMgle@6QyhHj9hu4fj$x;N18 zV9xpZH04By=VnA?PFK;HJvlZ7o6776-P`+@dFOPQrTSD|f&RU?xY z%2_;h2Xtr?WTH@rf8#~q+E*LBpB8XMo-*GoD?nm8bKk(#pTj_UBBrh(L9Qsyp&Xgb zdh=mMK|(5v&6s!Y_{J*$Hze2WrF}2VqC~JqigLAfH^|4M-oA{^ax_@1QR+nOYi*!c zRE_9-e~1~H9n_NS(0-2+Ka_&B-=%TxA2W*sw`@z zv(az%#MtzXS-e=a*xhue3-p@@&J9 zX2i-vYf2CxaZ=8vKylF>Ou29*AugM+&q=24J6S}f%d)gAx7K_oakGr~BwAzNykevbOLS~mSodFbo<~%$Oj8t0e^1;I8I(kwaOAO7H zw=8eBymej@>OUy~S0?o|HHhC?UYvwp_A+4xhM94M-?0z8+(#TIi#VZl)x z+K{hk()_tHsIro0wt}*w{J5vTA!Fwu)GO!HY>cT``lP~^rX%AS#lp0+JY%97DVs@o z=F$OwUMKea(0d*XxY(!sC)*-VWmfV)x1eI>N1Z!_-R{xZxi_D|zTDI6f2YH3l)j=P zlzrTHh;Z}<-~y(i>2nEyd|3FWb2kE5m|#Y81gza%6%Q_n4#&#yqAyR@+5rFSbi~&& zbGC0uG8QEwrPG%f$a-3IZ%F(U!d{-DYBiyM9CAY`eo-pjVc;fxDudyTlbo-dbAUpNxtp|hbMiIH0I=VVxT3Lt z+yt{8aDFEkDg@VkjHAu32g-6%dQ|XO1y1k<6%T z)guPDNU(Q=RRMA=#X;EslA5;M)X-8kzPYtA`0>Y$2SHorPTdJvjOv;)eVg+w^q9@Q z-6MtW1CXigBHeJAa>lyHT&Voric)}o9^x54Hd>tzCFU~h1Ljk;cW)TvPCCV*PR;kZPKz%x zx%aGi3^zb_dW4-sox8sr9=z;HiDh>7r3)Nb72N%=$4At;>iYP<;TQXRLg3cQ|zizr1YX;_~i@{}+ z+WAU{uGqsxUt7y+~#K9X=KJns4%xFSPRx^>5hWUyw|* zCO*XL@ry%}S&ollAo(3J>SVij_2C={hrw zuv(7lgzmuv-BO@Hdy;6`#<=R8oE+{xeZBkUeo>4qC z&#}GVw~p;vI48|Cmv&IZ^0-4%4W^9-A3ijm1pw@d2m+iO-bVYwzi7vpMQ z#-k&-CVY%?*oF{)c8z7!L<0!_J$};^(DJWPQq!zK0U(LE9k|48j*lchlB8?(7f4qW z;U>7~w3K+wb`JJQ{_0a7tDL8KI#m;U%CNbvD4VB_BsEu#JLwQ8h)z zws}&l0c&~l`Hc;0U!l-2cbaURVcl%oDcU=9kH%0U>{} zGiFK16X{dGGuDuH9;2cW>44$RIAZzAV_9?UcI3!UK#mwE$(yV8VC~1BcAoC8HF7lH z^22VdBMN1{;5Z8modOdOc6QOP6X#iawX>ypHjxwFH%n8O!~L;}G!aL*bVKuo6AdwY z5b%lv%u!k0SyX?~)x4OUWz!HiGnh=#i|ZsiN#b&HI*W_sM855a zvv^WeX}+qOdfgE~;eJ}oit`viSh}jVQ%Sb{HLcGPr`6?6UD#S30XGRwbC$xPoW}Lp zs?WS?@EtHL=exyudYWe|JEKY`sjAfxGMU}sjRTZ*PW1TV`P|Un?H@pm6Lo*3fO|}; zsN+`X*c0+moe*`(WfB5B`0BuPPT?AtY0<%ZuTm5|jpy+=t7gRr$nTc`x)x>fHC^ z`S3f;_Q2#Zs*mYx98V8nB!GWzoW`Y+XBn43-`ts|u$ubzRd;4mn}JPAW=WGSp&YMi=@)ECeji8JtT=+{9Y^tHoK<&#@4v`O zRNzg!M{!T?)@~dK{rfZyjx{t}%dW52X3Bt&hVZtShMAy_!Bc?XIM9D+{Pk%J|9w(b^Kuma`w##A!w*>xC<8os*Vo-F`kh{dKm73hRkr*cM_;7#X*^E5 zQ1|ZlKTs-dyEn8zvenT>f(n?bS_Ky;D>mg{cxF{mZ*OmtA1Cv^c?7;KLLy< zrKAY1BrF@&MM;kQv=&8;f=N8lVjNrnC!ZqflNLHsM)`Q2?WL0`+MwtQvbU+AtAuN_JJ$N(Jr&FF4yetHlG96VK?&>+PeJ``|q`H%$ zSyh2Q(<;1km==H!?mbS5v@Fv*K;IU3-r(W9a|Y{K^*RDp!TM+G!HI17wLXvY^Fvq# z2cSfm8gef8E4o_h6Md!zXn>5E5FB}Y3P=pe&SEx&Efjwj5x}rF(#Wmb4WgeWy%?*& z2jkw?G^?iBMON*XqtS1ZKzxauD#LNF%+7)09AV&3lFYt<-AaL=?RKb6M|_dMPLAqa zjp{5#5(`f7nYp=3x&Y#;*XzxMY&D#y=EWq9VX?~a>Tz97W<~Z@8XW!pB#jGLL~Ms{ zIW*8A+mC;|x`&K^C+uKc`)o}0fB2&WR4lNEo@#M4LO3h8@Vqzs-0<>Pv-=~Wgu|W5my%}>|PRfe%^fp6j7!j z^4A&%oxG5kAMvi&!0*%m$wW#3lxaSOyYu$-bHgnn*8JUXf2P|sSH8&l3X(zXNI%U@I`BdDR(ymjf^I9cJwM zP6d1Xjsll`7n{Jp-_6WVgvn~bJYf7?r2&67kjAJSN%KYx)SxZ&+s+d1$w$?ee{f=o zCJeX-VU8{`Bou!6&K$nR$20wLrT}@x+nKR;zRU1q1MpEVY9MSCWu&-MwCEiS?IRlq zX2cLGsEuHJ*jjG*ydf+E;(} zx8GrE7UvSH;y}Mw-YE)YjC$kgti&`o8i!cxWE_q;6tFP0oe;cHH=Ra^WX_D>x;z%| z)6+vDHM&5dWQ-b9w5)7ojFhi4xfG~|SqtvC00bE$?>LTrBAV)qIy;LPh&-fA&>iFT zj02a(*XfwgcpA_caK}lJey-8>xf6fRfO>~h=Uu2P{2-*dz~hbK=9VXtT+I}U2^@td zH9Gs$3FU;Q+AdnJm^|izSkYUSs1NhIcZKY_tWV1^fS&Y(tiplSq`xQXEds%l@dOV{ z(rFt^mM`LImgo_&qtbfXU}Wk<@Rq2{PN>lKBs!BO>Uer5qn;g5ME*5=Nb7&=6S*Vy z-dxyw69*Sv^gB@IbjPcesC%3+C58jGyNVcQ8S;Cng zJHVh&)Zeh>ewh3Hczi_Z9xt+7eKr-3$4bh3Zx9@hMgW9W6VtoVz}!ra^wJj|pw`U5 z^nA2>j<`U`gdv|Hqe_@EA5LfG!c1c8cPsk zL7|?#OYLQE*N_z)Qo$}cw zv~utJD>|?RVBHxoQ~=l%Fx|WlVZtjGrmsqrjRHZr`-J&!(}_0;|V z@RP6b2kwtqo?bc0&XC{B5H$JgAsLV{t-{#lKGxTlhOGf7e~Qw+hUj+G-hd5O(F~4R z^1;&Is_cfXVg~Ga|7PLr9V=RZ9c@ZyUrpg1f#hcvPTkS zx?$JMn{wqF$-g-o>r63~gft378i+BJcyX0%#Fxt&P=7@RUg2!%h#I6^^$LB7fZ^0L znJEcNiy*e@f9a-I31Qu1uEepj2cgHHQHdk<=(#Pmie?*)%XKp|Xl<9Zz)#9lofH)3 zBSB(i?36lkk8^nc*OrIAJGqGS8psl$ z^{Igli48Ng6eM=75XRyX$c{c$H84eG2FS2Q#PsbBW8MIC2OBWQnPwzSG#&rv|BW=J z>GlN!G=Hr>4PbazrkCk|{y*|1JMj7W-&jocwO&%Ylz(sROJ_lOmw$g*dDo4_RmaFI zE+2|rV%EgpS!g~2zTCQVuV1$4e;_U6&b}2Oz zRl>qw#DBJxFS%~EvT9S=`v!aas`7@T&FMP-{lEPmoluUJ)&EjC%Y{nVqz0C`i^vst z%YVDw449Ye>wX}3Ua`2(mD|(^aiUY8lu!}XH{@XUDC&>;p{;TTkolyV!TmT%>jJC( zkSX!dg)|R%o>$Wz^5-Z|+M5*@ab;I7iNA!Mje7~MOh;VI@@m4Kzoc;ycJlfH6_uT3 zAm+Ddax$w6-e#7=3A6<$Z0mo!6*ZLUEPp?5j>FnJ{8r$~AsenO-tc60+WD`TvzFNL zD7M0j*sQTUa%4I4vYR2#f&=UZfwWf0SjMrG?;DN9Y}Du?A+MSkRXHJ@7Zw5`zTw09 z4IfU68$SH~`zzk*Qr!9eiZ`~r^LA4F?l*a!+|cB#zj`cRO11WDF)aHd6DXaknSVu> z;v@`T(T#t&08l`$zYhn0CX3FdGvp?zXdGq#+x@;_2r2A7OlG{i1E=SA6j9BVcP20! z!~gf@aYAsvyCFJ#fZtS;U27Oyr1#dJ9cQmQ9m`wmt^PX8(}S}!WF>=tyPs}xLsvR0 z>`>gBc~UPWBh512*x(b)o2Vz$bz(RfmoSPGOuNn9!hWr4!pWqLY?&m>(qMGuhhRZfGp zB_{-}JHcqQ{Xpa~eD-dZtM=*fWPv6IosEsK4<}Yud6Jb*l~Xi1?DX%;D)YE5)BTJ( zn<@GqI-+8n4RAYIjy(>x0oN5cN92FGWP_iI_^blDIX}Vf^R?^{_x}T5T z6WBOJ_lJ+R6><8n!q51BQBzGuY~oek~E%D$rmV@rPIrFJSl$xUz!Qh z%X8Hn^iksmic1|%;-WW=)A|hP@>6z=Sg8{(=Pc9PeTKUtlC+Amsor1p1m!3=|5~H` zMy(ONb;@u?wR$m$>v=_I8wH*4^5iUrrO4=#B{QJ%K3xFT$KOvRbwx!s%C>xvHs5rB zUyZQ}{+buFuW4T4=OhTe#4~>%qM4a~IKjqgTeUH5Ifp)Q+^EWRi&V|?v?L(|_F{f( zX9#+lK+`3eRU^sj6^%wm$Kq?9l3)qm>z}#>q$Pm_ei2ua-leCLXU7t}|~ z7p4z$3BoJjEVD&;(WAfGO=j)#`ug&x2#{p}cbpFO1SfxSj-W-|oTZSULodsjS(eTv!G_ML^IrZ4JBPE23xu6<{CeUV$eo&e02+HISV$Fmy2~smtPl$M+u{`^v z%GDE;187B-ufo-cd+cfC(+i9T0%6cC1hDwIM zfVZ0TFvUPq=wg2$H=x*ng-D(MnJtnxL0AmO-)Rs5d*6yqBLy>N__jyC5lG0#PZt_Q z=+_iW-GK(`6$cuk0S6kDB-mJragW0S*aH5D=8FUxBC;b@4+cW$f}Sdn)C{(%ZecXj zzl4UOGj-18BS|MN)8c7NHdIi_g$}Gbdja*-GTQg5Krw$NU!n^`+|Ye8mIUW_W@ks8 zQo$z;x{lQ~zJlevL^0{f(lmW^emwjF|IixX4+2G0$2eLm>A@n2PL+$13YjJ&!dc$? zBxOeOr#(2ay5b^{OjgWnW~HN92Wst*E+Ve~^Zx?8A5Ty3z`4Eih)N$TO7$l+9=%L+ zZuEACxio)_``xQ}o`tauL6~X#=A)SyAItGjSOXQv?&wTRoZ_n`6kdogZFSGZrBi%# z4237+k7nUZ@zg0?8$jU;@w%tx zS@t?TQ``85jbJ%bC+$yF>8Xlq*ClzSG_%s0-J^fAR6G~|5KmTkeK;yT5%*ke9lBh! z=;1`%F75PmXUD;C+&#lYcirbmCc?D3|Byc>-6svRTs+%>_yTV*gwu%>CMSV-t=8lz zrL31z|DaR>%@z!6{Owh~;HrMum6}&!xw#>Q%j0CKE7)tL_^7 z@r{2b&QjlM;`(~+Ww5^f+N&(>BF<9ZFalb}s3}LWcnOO|o4I>-hJh7m7ynFYtzFfJ zYZP>rMsb^l_X&LdefLQqp7?5BY!ue{Ir~nV?RKxwy}J5>N|Pt(w0|OVuzgzMXb?jD zzwEtRciTvkF!;W|0>ZdtunT|y@J=<%Bg=nw$t_t{$(NcgwUz?G1ObU8*d!>Ll6lTN z?Aaf%JCA$zd+D?1>>ucT>8H>CWPZs;1neJ&#Pgw+zm&nM-xMgJIRX&dF zt$VdHjUw;iQ=Y;p-3o5`+FOoTIq!D1>D!uPfwS}C=ln^<%k_l{M-xLV#pvlOPfvd$ ztfZv>>=tpGi!GawjFmA|iQr%sPIepM^t^=sex}nzi=^SbbXw2FG#&A!iWx}h+{W!w zUyIq%0R1dJM<2*a5wN&pJxB}b0TkO?yXcV)o^a;=(#?1UW$Q0j+4>Fr^?yOeL*j9Y+|@fTh-vo*i^( zo#;6NXaQGe1oVdPfeb}5pef(6u{7L+(PyN@3{gE!yr+z(v<`HMk?>SFhkAbwORXc4 zdc;~+Bt5I!FPz5h=#x0)t0vZ&h(!m<&SD>OVeUki(Du&C*7+kDWy01Mp+tK_6L8=ehvuF2Qr5(4;F^6SJ?=*(W zAQBf)sDw_vOOD}VUPXU9PQf`~hqyAl9Iqhpm?n2&Km^ScXrGXEt4SYx&*v$m+!qYA|9dW9PrV5gd#3>apnI7F9Eid%x zB+o-pt(ZXH{47l*4zU9G8kmJ2NJio?ACEA^8-rx7GVOn0590(8d507wd+Bc5OT1%* zHnsTcPfJ2&l076?Spr+Ax41VeLLAHw0iJO6KOON5uw1S6A{0@sN z8#ONqlgQTRB?0S3uA+;~<}Z7oRnP{OfF*Ww0$)Q&0*Ean2W<2TdS&1Noi3$JR%_6H zo8yb>J51=PNaF=8gU%nuvqX7JL41sKfCt5ik2-(1speHQm_V?{1b817VB71r$c`y) zL?+Kjoc0p;8mKK{e9+{TF$PeIca&iQhv%oKq`45e)KA+7tr@#Epg1q0$X+r3I?N&B za+wjTe|CB94v0Rdk;|9*EftuTI%V!H_>c;~7C*8>52DEV#Ewho!8vUspFTT3M`LV| zQFMQdk_@!Yr|*7px3>5%+R{Z*~&F1HPu3E za1K3A3xnm#<-V6wCwUC^fYZnnUFAH^i{^P^r_c68e!=uJgW^c4wv<;2b=xEB_VHj> zzKgTy9AJ0Y|V1Pl}iK@kYeOkv^C-T>Jzxx#pA$LD_^ z@s#5!A8b0#7x9D+9M6OCu%(PoaQw(?i{)D3v@Lv369U}iI%7b?G}ey2*c%K|=+{kz z5F9VGEdF}zr4BdYxShKVQ8H$}?G+08>mYXdY_r zZbn%5DMtg4SCx@jW{ir)(ifj^DlM8P`Nx{|vA$p0>Fa+zQmiCZInzq#P=-uF=LI$Lk`%Qt6%(~s6Q$0g#>O5H6W92r$(4&yk!iimu2wio*p7oex$Cp|_UEldbXrirHRs-+y3 zkU4T9&0-PJ7G^s?eg?CRhuh|{ufgAD5)~4-?U4{R2AKj*}Q-D?RQKc!L zE?TOJ&J^4x#s#VFsM&<6_>L9ShtS1rGT2H(f#4xML)yOR#X}%J+9Q0R&F&U3@6ymq zC<1DusxBYh2FqQA_V9n`HiVy#Zima=3%;$91mrZR?cWgr6OptlvGRkktX1hsLK4^j(*|pW;2;P z82#?;eriSTQWWl7NC_p^k1EQK3iO!#z@*~>`C;Fu;pKb^G@pOE{#aG8ROh7ILhTE| zA6iSHmyIo#A4g%Igds>JQEF8B)Cxnx;*@&ec6~D*(W|v2%QK*>aSDdfZlndNP{M@B zPh6`Vh>3ycGyA+1U=C7fhPvY1z(=H)zdQ7-p# z7TcVEYYx4!1}%RF=@|oQFTa$A@dGE(hiDlFXTVatv*>Jiey#&Bm>@#G#?JK!Rcqjp zZQcXW4+hCGM$DSQbNK?mGidSL4XD#@q4x!N`P>M@Qd{d|9^_%l^5)RM!j0N%SpK}! zn(O@^aV3Sgco)m<3&c$tnrzsZm3l+%VW~CL`%>kLl1_hvv9}-H_Lmn+O7)nDB$;S7 z-%DEXk;{mW1>*6*O@E|`ltmu*=>bQU0G zksV1{>pkXu&o1!V9e)p11(wuI3dFcXnR5+vGiy_ zV{c%I`Qd+wH}Qtkj9btk0sx{o-?VS^ikC_uweE+Q@r*+j%3h^)@Ug2fyh*Y{;lj3% zO|e$xy0pt#PEzP%9+8v5a8u`ga&jf!j;|?jVHclkX;#NxI=~J@cLG_qn zgacDJEGq_(dQFyGXPK|jSujx$%hQ;W`oaP>7@>Fj1?I1N{vnxoDDkf?DyETOF#BW} z&j!8cY|TvujF4z(UHd|a;WjR{ixzzVDK96*3xLsrP!9z*=#E1HS9DqHnr`xU05A z8oSWMXV8{JZojbwyh+X_MB8um)AIP7&o(4PFzw#ST(zF%pSo!xxuO98Bh)uu8rr-PW_VtG~ya}(=NfrYl z++4B~BJYAgey-p~UMVwS_D0drU~tOEDa(VTN`(e+3-zv9ff z^~7Q&hgtp3iZYHda~-OBUb;_;Enf1ywqx9g5DC(Q*&v7p1JF)*dXr;dV7U@Z!N&r? zL@_PIF>c0y%^{*mQ=tlbu!{z$Z zu`!B4t2n0zXZmfEK7ITMzo3IX5zK}2Il@?WFsz3lgmKUvX0>=B7|wwq+<GFT5q+gb#rIMO{ zr}_zs(xWxm^VotrMQH9!t#_hjVPqHY=pK)f#0p=s%Kn=-bnPSZE|89?(<==G4#8Zx z6_iaIqCPqG8c#CuHlDN2KxcuG4%l9+#S;52(u<#m+>>nf_#I-bp+!mGT9{nlIGNBr zQqtq`Z$l9?9k7);#2A0RyplXb$3kggrn#uI^|`$bnv}^FX|_SGl}u*3hd5OI4e+o| z$M?qlxN}9w81uAu(0kDFf`m*ug0aoLtQ^Zmu)tVL|Ekkb^#k9vElclM?#d=tniNV* ze(oi23Ev^MI#w3%&6;3Q-X`z)fE7Ps7oDK6Tl*nf(UF@57gK*Tg%>}Bfl~E23HNZ6 zr*x1aPm(2);NN|XK$_$KjfMLVs-3^JV9Q=E_1Mh^H!FMDr3X_C(<`<$=ckAFL~b{V z#R(AGwO)ss3+-TO6SYnu# zwx=J65w0KEG#!6gG07lrbB{N9uq!#n9c$Vf?_|YqzE8!&ObW zmDtcnv3wxguJEFLAX(3?1ASe6fpRdc284P_ac6x=pQhA~XTL*l8ZIx^a$L~ZW@t~PDDsLx)%;@Q!UV6CD0u&3Xm zXrR1u$xJ}Jj%$wpbh0GImy8l`;-SI zeUGgG*V2D|QC_@DlLTx0#qX_;ANkKGZoYA}VMSB-`7?B^bnN5F%^)&+-vWOc%*&z!W+Lx$f1x1uV zb~g~kWtszTnQ{s-&(`*~nErg#HheDAcdj8n;%`fBpSg86vN(d%?d=mlz^S`J5isC&Go!B*%uG={Jq9Fro07t5o87t2>*%~dni2=rGoEaN zHLkDg>yDOB?$NTvTHYv}Qj*XgmFVH^6eZf~AW!vEp8xwq`ksUKgwse$lxr`vkb8fn zQJH&;knlG1z0z$TS_dYjA8D!Ec-eRN^nM$tTEnwx>|0Bl;3I~vFLyT%F?CU~gC3Lh zIxt9O9xr_$=^CJ6Xa_)rZIdOL$l`7eR$_<`z=Wo8bh}*LJOnkN8^;6Ujnww%ba3|& z@Sq*ypgva;)+rQ)sl{zM_!Z&!*+qYJMW5K2XTCc=JbwMlv1^^@oNG`7^hYeWicLVc_En z7%qIN!WZ_Fz24tD-hYlCYVbik0W_k4hhwh)+{Zyi0$}c;*F-{r+BJUZPJ5%`o~IcRD@XH{h;3zH=@GuJZPO zA>ERk)@(S znKxA!(8^Uj0-KAUjTC?9Cg)^=f3!!p!J0F_D@T5TaLkL+GB@co3pQrkHKX3W0GZFA zPXU3h3?lOBe<+wcLGikPNCqH3uKLB0<)-UdMCiPPFdNXZH^O_9rqIV5n#=*p&C-sB zpZ+$Tk`YWA6&ziQ-G`cGkb+UBrwu(F%0wO}Kyp>?u~T(QV=R9TbeY9Vo~d4MYK)`7 zKuwdL(frl(cygs;_Ij$vrKJpmekkd2`Yi_ikRF0mG5-;|7t@}6e!sVZIjmCfI1m`_IAKP@UuAWIJ=_$HUK;R4Ysx>jT?>U z8h^L|Y_wSU+=+kA>6+05(rBpfxfN!kI)jxdU5~v9BLe(R2S=;sj) zHUy$()@46qJs$0Yb$ZqEB}4_wEcAgPinRc^3h>GqimMoCQ4f#QQ;&Z5=^iuS-2XqWMw zPVtaWG0W(htzL{Uhep|P3v_pFZx5wK%!(U^T%x3hX`wJ(&7yNg1c3y^aLuGgGW_e; z`p-UM1EhZgl%dF=w;{2()M%M$(mo~ph+|! z8K!7X-2jwNHRY#iDZ`*2N;)mX$G)x@|3uFNg(=?UT5UnY_dw|CQjG7*1`!;vU75FA z&0&8*k1`H;-QQHTAFKLxMCMQ94=vSFETyK{)+*s1)8BW zB`uM@UP;jhHJc-rllOngici22R?G`a#+m@u9n z;T;UU&v2;mB<|xKz(&`bsMOt@V^a}^@n;bxVk)9Ew79R&frs>eoHItDTcwX5Z5@Bn z-A*gopF_i1u6MS9)+pErt)x^?2FYO&l7=S4NA>YG7?2OGJ_B%PNORHlX@+Qc=_A3n z+bZxg4OmORq%N1x3_6h(>DpWi0=?p*cPA9nRiZds1@E))U??>uhI0-Y(tzNf(&k=z z^&jrO(+u``0=y^U@5cK8FKS;YEDe8WPPqmR=lWrQqA>L_2O@~o z$gSLIH~o3$^(4(}jY(95)nBn8Zu^s{_m&Ltcr)4O9bZhyn0N`jkXTpjU{bnR7R4^c z;7jw#dn!!lX|jST1iI51iMXkNuMf)TFyUmBFcZwKe@@PbF)a3-W4;} zVKkLw73!C6ryaNYxNRw=ba1yWcRL?H&N0F#Xq)f{x9o(5?Z=Z|PRYjIGG}{xKc`sp zQo!x62aZaYDKD_dw9+C$>~DYOF!z!FqH6=>sgVE2TmX{~Fl)Gj-MYN5MnGHYbgtB# z3V(mgme;>7*j0Dd!F=5tl-*6M=(3&m)>YD9hCwaa^jQL8$XFBlPX6e-M#a+iE!SvN z^yBRI=9Es4=p_{LNoY*!;*}5!9*7-HqUpC*!NPk+LwC`rp+AnOW&wX@9(xZ8%sd)X z8z~;Wp+8d!U!z;BWM#yyr@rfF)Qo|KKCFaJA-&flAniUT2ztcm88>cVX<#a_%R*6H z1|62Jv9l&uo_5Ucn7-t>*^blur7uwyon5A>*p3UC6=4A(7{_UP#Yd(;h~US+;%??6 zwuh8`Wm`4*?Z*+xDj9!i(cKaG{U80d1``EPb#QM*&)T7_v_|BK@kh`Y=*X7(DO>IN zQcL|LGbqQzm`}X1w8po$Px3bLn&o?Pmx6G=)yw+sar(&YY1y%`X(7zpQWIQ}SJF2< zwYBySb>4Mv2OMvMlrU8F6&*J&0wVyq|!W;uf z+4H+`>oj}Xr(uThM&>0sE%C(4WG)NNIiwdBN=9r1V80#>7N2o+C0>{5iJ3{8GrZ_$ zU=ZO5-5s(wOrUn;ZMGclC8<4eE#@YHJEqQ~t)YpPco?XJS=FXdiuqxv5Y^>@R>2GvA#>)$u$YW8k z&4AO==rRUF`!pn^6MB>ZQ#jMQ`yX$E}K75sk})MT21-3JZX<V$^07mKBafj`;wkGbiokp+V5wRA_EXtAEX?HCi zoP9#Eug&#NsWs2$_zynJF^AC8B}Zd{somyHfX}W8z7`lRkZmaW$GlUsRVbWc&C5YS zm4X+RoAZBmvnfahPH9V<_M_}0R`#L+AZzJ!`z;~xJbTDE(b=(7^4SgaN zrRq6~qhRN@;uub7JMs&~xwb3W3j=-~)Z}Nwd0+i?2#-(>>b|cY)P5b7m9l4>RR#aU zW^DMktYmNSon@4N9U8XMP|8LbJA%IzC{;aZ{EB~55smZUE_0i;&w!mzCq6Rs0q*25 zw@R#sAP#_kBVU2_OO1T)8cckg85oaV5^fd(P)U2CF3U^(G5e&y8Ecb z;F^Er<=6DU2pagyP3R5sT=8x;FV$IL_d&b;!up(wo@=1U@lieT?`t6BT0**z8uHT( z6o&YJ1^%zW3>s|ZDYj)#>{+m0@o;D~^!j86nBCth_9r*a&+ZRUTar=idfznVBK1MzF@oX0L49oGl<-j3E)2da$DywykZrOix zjAkupRvLkClM2DsppVhieT+GCTRS`R`P`hB&3Mw^aeyQc8Z5+lw)@zE2mG(%G~i#L zn#Zj3aXeV`;}N_Yqk;+z+7(gOw#sJBDzozGJN&m?Gt14oc*QDUcT}jlk11RK!6^q- zt6Hw_KHlMd0n>*{y=gWp<*I*fSADx|Hk!JnJ7v?dYL4DCtIejZ+YPg9TXo%W z%xY-ZHM8nFrrm5-jGBqVFdVbes8$Rp4sWUzr;I;CqtbwqhHdE<{9`t&PE~iznq4<+ z_)~5)^t$O(4cja`bsff6sljinQlqcopK{H1=yH0svCaM)wrqIelJ z0seB?aB5){V5-^;zhc%ab$}J{(r}s;z*xnq*zm`(8!+su*@Pysaua|4?;6J0w5+;s z!PGf*$3beTo0eT|z>7MLu51F4)v>jD#Q{{7Evt#hwyM>tQHREBK%iwPx+X$;LZ7>?ETEkTV zWLAX|2o3a)rK(lE$r^v8>!GaE^-u@6fi@~op<1p1NM%Nn>@hU3)h|GQ#Q{WB054_0 z4}xQt>i``rn_9hQR3r+(f3v5Q!T~6|RzcE%)ljM9x+z!fCa#BC4TzF1YnTm~GaD8* ztbz()6_!*5$6Bq|k=BrO#cxLADPCYEDox-U08zbGhhe4*7nXla)2Wo9Lzq9DgG##S zB@O_90!9Y#yItMV^& zq1AP^hN=}r1dP5}2L1tqqqG5>vuq;|!^LaR#mkr*%x0qwbPFuNwgD^$xePJ_opS~H z5YkpDaUuiJojQN=rzS4-GVn8GHb7uDU+KUPutTQ?e63uuasDbblq#mxV2ifV0M-Z0 z$Dz!nVKnzO>VsH&5Ni)6--F4w5&bDE>NXpsTdny9=>piW z+5)3N$^j_cf!*~Rfmd^!$3kja$nK%TYIA^e1AM`#R6+xmO&w%S18AUG2Laba(nQt_ zvZ;yuy>5RuDq$U_DJPL|lBetuhN7pxsN8JU>x1kKQPL!aR}R1+>-lB$J2gGq`Wg;hf8fv$9Qr{Ke^A8lM1L8` zy=+y1HC6^Vx6Mk!C^y4KBk#d6>W=(at>TgaAlY(u&?(f!rBZ1+xRL?JhGhZG!fcdl z4v>FSt%{T5;4-OH?I!#L;;Yk9evf6sTL%12eZ>q^ZaQ^#o{vwNi_kCD=&ugNu%Qt@-6}xLx9AHk3aurMgo7B4w@vOkBe+7## z*B)5>1B-t!1s+U+yTh=`=#r^8dbv)aDUJ)>$G9>LzDy0aOshbyRwdn-uCk43kQX+R ztJ4IjLWu$<#G=j|oIH>kP~3r9$d|2}js#YA3>ZMYD(}rU*xoE9PMFYo&8`53%7A|c zr(T0Oacm$~02mh>-<_=jH3J7;ZTPkc3$qM30eZA`%43=aWhS=t5HifvauZvz>ueX^(J2R` zypPiNudm8g3ud>Wql~4M3w!3}uiAezM_??QZ<|-|+BSy~*^P3;!0l`LvWDYgukLLP zz5hOgjFdq9;WC>xE22dlH(t5gHO=2_LR*}i@dl@Frw!5aD}w1ysp--GbG zhwv*(xx?=xe6$$Y~eb^@(o%ZB!T5*&lQ-yhSfv`9c6UJ$Ex==Ne;e~N#YQ{ zQSCW~?E~Re9Is+@yjypbUV7*QSN=kr>ylbIr~u^z9@rn%u4gps1jx5ut(S?_ z?UjSC*d;03&ff>0rL@_6SpWZI>;K+*dl@J1;r!Uc`LW-2TKd=T6wQC?2aQ^_OQjVs zXS-a5SB__tn}J2VMy**U!2@%CV9x)T%=v)}KXBpSc8d3>?-ViQ`wpqu0iNeVn*gj^ z&x6HccWZW|<~RIqwejD;=kUO8|0&t+eLa+d8l5_@r8+fpD*#P{{&Ij5z%M8NvRQ*^ zE>}}47iI|Nq#>SHTl#+z#T*y}VE&$4h*hzLSTWb^ALh3YE95P2Ny-HYS{oC5PQAO*>wFbHa(!QIR=AG-X&z4gbjI< zu)#M8D+S+LxDob~ z3u1ye0cfw4uF-U0)PS>kqh9xFAl3g7JlsEjFKN@QTRj^CRm%jHJxsh;@tZ~vH0@r^ zvFm~LRq?40(&j*kgqN zI{>Nicjb%!<3@jpzId+c(Q{Hd(Gy8>Ut532cg${pgN-Si9EU+s`>kT?hY!9eZ$I2RLvOkF+%FNG`~_VGXX9 z#U+4$fqE*G_|TYdX8jl80kSGLMJMG3(ijeb*5!}v4;>touCUKW?j!#*G#W5InkWRD z_i?cG;$VNPD}$|m&0rga!B#epHJv0ZN~g)dNouA=4J>HTDWcqqcS&VUttOr_Pz?$w z1qnf=0=1q_AumYPf~J8mItH5#){opLf>z1sr#jhe{b}&#Gi9 zQ3JQdv*#)!V*fj1wIXA+_Me8;hJ@A1Z%1mq0WyCgLjgrrx-RmIVeOCmVPL;j0>%&-wY4g8qd};4ohC!?8mEyZ8GHrM0gqaS_MI)G=aWOc*`nRP^hMl z09eftdN|B5ow4NI9UxVWS3X(vXV`*}`}L z`1^kWTxO(Er%yf-XS3`usQ^l46FuOlu3|BoTLpeMz;HwQt>ap+)*6fniBj3qZ)mIe zpV1a9gDS&Km9|zX0fsuZdFd{&9zDLU`7Ab-_!kngfstVPM zmSbp^P+6t=C))DvW99={qX_m3D)1j3RNw~{_(27JP=SAVP=Oy*;0G1>0pJG}_(28! zM^=G9tMXpBVLqUfnnH{4h~JexwhH*H_yfy_9lEZ^XQnuKQeO*HHeMUgL~?<@%VWedu0^Hz3s_ zj<`||x<+VIKt6uV-|dDMWo~b8y4%f_?snVWUcJpt)y5MNkjd2W@h(VX>LaFF$^iBJ zlA7K%*QVobaTG{5ss4Gg@$Ng~l=OeNaLcogx6|Qe=ztb}yW7TF?8GJa=`Emto{`Do z4H-a*c%nTXlEgb3c|!t|fl#v{sOOJMyZ-jJk0{uB^#4=@$~!N?KYD!5@16UzpAwSS?GixJBnpz*s4tOJ;@o)&Af*6tcjJFLV*9gS z+5*75*;LKZ)0VYdZpP#8M#B2DulsG)qnGqTn;DHsIG4vba@^P5OF*sZO{Yxr0?M^rzT!k+S;@9&sQ18(d_G9Gw7(RThc{c(S%udBc}llUl} zP;~p6dTAm)pBqXiK zb)58O+W6c>)~ow29n&t}IPI^waXN5gncoR~0#^`tQuWXsIcFDlBKFa(Z}K58jYqe^ z60v)cT~gm(xm`A-x66Ne;*#P>++LnO^NWnVSrV(j;tJy*!1&p)J=d|)VMlD(yZJkt zvtA=K=?Jy)W4-fZ`QF;T&=5xMyk@gW{m89&JE{xf)O5?-ckt{0U}c zpq}fUo_mX5TH-sqWSM@|r(|*sbKc@jOh^=vk$8%FAdodACDXG{I`e|0hR3a3ZMQMJ@p(2&BWha#_~ zzVN~cNNNPpgZ6(=ghtaOx&pKULR;!vZ*+y9IqtCd4Vm?O9<7u^;!}7alZZ&O@J0+k z8ssnHXF5z?3Lmm5JEeccq`YSXArnvolx^h=#iuk&PuUM?qTaI~Yv$_x%IxrIdqe+r zVF*DsNyqeWHid`5jUl>cWJpmc$Pn>$9Z&ims4Kad5}1F(p@W9N=Zw}>2A}>i3zBr2 zpW`3kMKD&tz%pZ~$CRP+)i`y`XygxOJu-#2*;}`|57| z{R;G6z*Mwy z**m*toh^TVFXIpE?pWM#?Cmd%mw>G!-W)|E;(IVH>~?SIEnd}~ zzRus^4y~=%3 z)a+Vrsi0kkl7lK(bXBQeyyYuPQVvtKC$mg${xf!E z+aX5cZJ_%)LxNfL01I@PScYS4m^~u1XbIv5yrh5oNFFQebq z{=KN(b~qI~l#0t6umG64F5@4&34h^_6T*LEll`rjO(5jvz%gxDv^K?AJ$q`x5BPip zuj{YqCxd@mMP=|E7j`u_QroO-T-naOOE%Y(EDY(U_nl?g7l@tbcTv(!@3WN3y3Gqs zq>rZ3IH=<)2`kt3fo)wop<~wT1G9;IuVMoWY?f(MIZV5QbMH6?taiHooA?iM1Pg!D z$Q{{u5D}>4pmJ^0%*K%eJfV4Dy>EnN(-{CE9yD);Mnx%KSHmXWy;C-un6BH#OeM%Z zYCvij1P%-Lrm&K_-)Z~+xMCetui@_ihXtdr!4DYXd*D@O{Ro6Du#W4BSs5500Ny*c zZz%w&0Tls3h>RNiXg2nMu>pg^f0%y&uR{r^5*olGF;*FP6$bknSO-132G+q`;0pbR z)d3o@f%U^eD;v<4S-u&XFcC+9JhKi!)&?02mAdIb8)g*&DK|_^Zw|niHCW`PU5CFR zbPd&^Yy;qQa7OJKzys*6ARJ~D{xmE22U@5?$K?U*7shSj04YVlQv+Cg^#FhB9l`Vg zZtR;O%v1&H!Q9rJBL{_I#Q`}1po8x6-mZl9bsaf13J~~@j?dsvp<%Cn!2f7HVAdmlhU~A<8Ype>x0-gqV z2%$5laRe>H+XjFQMJUuox(k25n`8x+T;V7{vDm!X$iQI^D&}TYPw+e#C*@_9*%WMM zos!I%kKlGp*PryY+D14#g!Ew;C}Quj`GmLyc^M(}B=N6=fT4&0`SR;* z^678*Iv(v0BLAv|&hdXpTa>acSzn37PtotiJw& zdQ*ceNOuy?rSj@CFY#Uxpb)=Ylhw$TF0nrJHjpJINpVf7TmN#*c~^A1rhvG-3C=(A zwWYRLm+1VW7Q5Pp<=ZD}>pG5lid8^1FSCO3(F)3800kG{R2zSoFD70eH)K|L3rx$% zTb-6Eff*SMfM^p^9M*w18z->92|6ZLCT+t!%MErqLvM1mT2&js0%IOTyOGVqZzckq z%Sq21dSh+wJ`vD;c3S5qa08f^VS5$u@oaRJDC=Jv2Hm<@|8ZsdrC#oscUnrC^|QH& z45^43@p*32Ny2}j>#XYLm9PS5Fq=-*0)gEJU#o=tEz$P5b#Rs~gjJGBNu%HmV?r!l z>zinH>$d2;=ur?CmMw?WQV_0*MT#tw~S! zeB25-1i?K-#DyMAZEH>!O^HhF*Q3FrwG|f_Hb`gA));=!uX*ITbpOShE=InRO85Pq zR=S06-rS24W5xjknU$Qtkz ztiBBOVeWtBmJKf#dO!CPdo1a5mkxsNUq^w~=dZUSzG+pu?Q81OC`pLYi-@uZ7zSce zda$m@R6!>?Xl@ETp?8~%OjSseCH3d7X@!iGUuWp5o*HjKPaI+8;M3pol>lTwo4<$J zmc@3ynbOm7Z@by%7@s|%VkEZ`H+QUWpp zor#tCIfU>0H%^)EX?*J(-rsf9R~$6$;8XnVV3!tC#jhGftq<4FwEFl@tUo{MvjeUB!rL*|hphBjiJp0|wXD zc&vmmu+u1<5ak(eb^+mx*jgI`*}%-eD@F&V@)i~x($dfyXOygXl(>k?d^@#O)_7H4boZYz*>wKLi7$wPovccOI~Zrm<=_ z9XzscVjx3UVDQX0b?uW{2lj6taZ%9oAgOy($8q8iV2j)m%|;}d()(~Wqs)| zndBbBw|PA2eUo9Pj8hEH&kZkFH$2o~z}~xmAC(3q9H9LOq88T?{FaG!afjKovRX$m z83(JxF$XluS`1Zc=fIPD(G&%5uN7uh!ZvQBB3CEMfBf73qqfq=kt$8y=SIb?YYCRe z&rQ)l-zSqehz81k{O|vV@+RGHrH@B|{sHNK z!eYfm2R3~$rJ_oO6^Cn)FKkpQx+pDXfmq;tVLx7R5HCO*$ix{2Ga&Dq`r&|1b)@rT zCsPEn*NRNfCQ4};IJof*ZL9=H*YP|-scLgIDj)JPlkRJI+vy&b@N z3;hE;CX&NJ5>@)PCMabHjRS@NUE0EbeX=l-ln~4rH2=gZ@s4w1Vhz{#scpa~Ov!#4 z2CR(%V2v39>5MW$6}#OsK`f$W(Vr4<+ar5m(|0YO%_qAzSJx+>_s zyEqK5k{9a{hIOXQmi5E~lZL>UqtV-V+-fZEVv4cZCD9@N%u3VQLO@ z3z!mZticru_iJ=DV5CiItcT=!0;t`}{0s4KSG5pv5ilR-u_)jpkH(RIcO6}UT0#b$ z&O9$}qQWqL(zt+5N6AC*?nw_=2^QpFof6qgWOm@mc7HF&C?aWor=W=qc@K@aYYHzR>NHSnvH5s0)#kZamp2MTRfdvQAWQY+uj2q7#7jy3D9~}4WjQ+AM z>s-g5HNDAyRrGq5{c`kwDto6p^o>m`oJ)@ED;nL2+UV0? z{BVj~d~X&&o66O|8;`*N1T8)Sm66a|^N0Ygp)yYedR+RvT{iHjc97X7VgU1K(nB!t zJJr9SQ6cPOA?yKvcSq(h8f{UJ2JLmog*|Eu8?kgqb)#1xn<>c)^t|}=H*V-o6%ov) za6~YxXT;Salq@%>gk3R<=M6BY5xfUsKbpp94aZ$?&_mk?4RSI;)fpxN1(dGbAi73` zw+Uhk$0!CKMku^yftihX;SSHlxC|TjTo&1=+ps$5Blo3$&D~dC5}LsvjwdNLcAS#l zaVfgk3y`@-K%>2xPc-dRKLH9m{ZTu?cG_*Lq+6vOQIs`%>2{zs7H(|m^HNDamfqm= zzI(|a+TK3qpdA~Rw07P=U+eI{!}`0wm3=x3$&^pUUHdFRcq}v$Y=!*x)LlGWRJrlO z+;)&W8HBKZ$4ZHz$k`ilcn7(@j$jWcf-m#aW z{gm36M@$Dq`ltR7D$$M+a$s1qVb*C@!0N$CLxKlYk@+?FX2TkPDBi+wddjE2b5O$Mhu+w`i4v$k9Wu%=SA&+`fKAGX zKXp(mf$IU2^O9HISi5weoL$mo2mg8>&V_t`ICh_KRs{ShWQ-9?X{KogCBwA!A%Ew6 zVDEl}cMIvAql3Ly0)`7cRDQhNNx#^-monti@5-RO%(0AZ*9`3vs_ZO&XT!@5zVzrO zpLVS8XQ$AP+)M2^RZ))k;=q5RtxF<^RK=!s|zq~#s0fm~c^%@lEev26avQ}^t4L~-|qZVY-O9#X=rB@%Vfd!p{m zl9>BdQT2*&p`%t9;n4@Fo;fGovAWcGn=il~N)&A9(_i`<+k_=N$_nvj1FVYYE+-!8 zuWR;mkYcO(*4D##K>VxEwFNwdhQaXG!mLW6vHjS;8b>P)y&Qpdg*-$_3-G3YeD+*u z<_#Eg$X_M_J3Aq_mH#FtL3&wiD*}scGeG>aXa}Eo1Lt}NPx|EM*O((Fco(`l@p{G- zrCsigT;_cD3^>wwN_mHeOoaAS(&25#k&L5bVH|CFT;ENtBHRW<@x`{XP&GULFOJPSF$V!nx&3ESUlWoYqJ09||dTdz=1dXA<&y z;4@3VMXuYXC#`~I>voBw^Whnt)V_ETZf|?-TO=i5|M(7%U`0F>D$WJBriLP8sN#SJ zbujWH&3J@)G#dgRQiXlMcb2?Tdhkv)VM=thl%g^%!iTVPrtbb}biQMMCSd0QTH6;Y zpfo$Ur|$Ii$Ey0cv{Wy^s?0)O0YW_zCiKOhW-p$E;P zdx1n{LN6D3TD2SZ7A6>vpjYf8*VjP4hNh2h9}Ry^$S}S}8yumSfSPh8K@mukJ?%+H z+GF<#juoAqT8w9)-$p}d#7KYN0H1#y1Ta#q^t&3VpzwV8<~5&x*HUWP*tL=#xuPvT z+qb~WTAr5n5J^3ht=~0j6;cHaqZ>`3R8*4A-FF@NfT-r{fFIBTnC|F0NIwCSOc#f+(%8b%kE$XHsOibctn!Rtoa2}|VYjzqb3B`d z8tZvODS(HDP9?a1IX4MCblqQ+^sMyFtb^)g+L{b3|E8^Bi-%|KfqDLQi9uP>tKkEx|kpZ)>`SldEx?m&B+lms+NqUh?`KP~xgJQHu@Wf?Ro`KCoiw(gNE7(cs{K8KG0WHtC1TRBjQ@SBl3IDVKgP$i~#8{z823Cc+_oD26|qF z85^CDU6z8v6&Q#pbZ_W>7;}1xBoUY^BO1-faxDhn<%F2r*u|YN7L25pZW(U&@iTR$ zmULf}C$U(KZXkZpKWgD=Xsez34|)zlWX_98KFehC-YB# z4M!kciLF2Lo`H_7nnqUf)qJNt#AT8ft1i6xnQ1hpV?NwV5MF4^xJq$ zxdm>E#Gq=O>gnbQrWRCnpq4P6fHq99hp!A!0cIR!#7i9x`5kH04j$bjYI+NJ8eey^#ILnTv|Dl4Q*;Ke|Cu z=Pzvqf$_aH?@`fV6%vyxoxQ)sdRr5A%%K1fof z^6QB(4YE0rgKYX)m3~{zp4e9)YG- zJSgMoARBMU+rn$Q-M!c45{7OEvzzR}IiG8VdQN!-TAak;mNY&U zJ1O#-Zg;*bB_Rk^s#5(l(dZ_BqX^TXQMfcH4EPFY8LaAa?D<{lpb@I#yV5Q6_ij}k zd?#sxptUkW$ZLbN&H!Z1MA8TKh_FCeSSdsr;uRa*&(hc!U>$Qt+b#w(?`sl_KYtFy zh=6MO>2Cqugph#*&4R`xhcb|9Q12B7R`1EMzWf}lFVm6#W`Ms0rzyC9F9o<`8Qfqq zxOf;b75~R%MlFp@S-uaXMHNDZ78d$Cn?MgZoGjK3ET&*hBt=ZzlXlzJhs1s7K6#{} ze=a8Ik$Q)roFuRuSZKE?E8fhoSp;X&N?k(*ztU2tyXQ_xCj-eF_b&CrdE+t2DazP)E~hb# z>b@SWb-@w9-C}g76K*kLUbyQKl$88%n5cay!q1H~&k$zb0v@=3G_mIktRnny>zr@b zpcNNvlsnJvecfKZ2*6O+X@jq5CbKWrOPR_S6H^Fd8V{0bfI#y@qTS}cw%+CR!R5xd zZQSPmdWhI|`9_fVZuOC^z#6x1&bz zgG5Stgq&gNRWzCjoX5tTIMLXHItNBjq|7e4unky;sTHgE@>8c2)ov?KA=FkcVb` zn+5UAn+OGA?V@--VVkoUKY)9bE5!7HI>=CRPFrWUY&LkVMqQqA+|uP=G3juYL!pm* zwd~7LZthNhK?&R7hLCJOigvIEjU#>%eFIJX>?4|pe+4$Em-Q1BPOjh8^f%>1PvHmG zmL`gn4P)JS-;>Flt{5^^p3+HJKS&HJp^21Nh#AOoP6OuBrCjDkoWxV~T=&?aBpzx9`~(TX z8&KLrk9OVw31dGrQ&l`dnD~*C04xz2K1RAUj`!c?GZ~|3I0S=b#+{{#H~OXw2HDoc z!_B;Zb)X_hy!y9^^zX(1|}_?BV_9Ey3ACz77cRH z(<-0R#20U6$?0_V9i4B@9~8FcMGtm~`&+X;`qaC9 ztd+hMMZ6KF`C4g=adksX6$OQqtms$BVod%&8^1&$2Jco);llU3g5hcvik@& zO5nsJl=kEr38%+9s?B5S%TJ0`=b!$6n!Vp#eHf3tmAcu>yl^iD-Af_lzs~6CN_4-` zxe+nsfM<5>a{82_vptw-#djqUFaDXdFIS^@9Kd>7liXlPC ze$G*fgFqo8l1&{&G+F@$#uAvTClfq!eTkj|2IE)6syc3knc;w_odA9g;3ETwI> ziS$h(6MKgKW4=YTp)4>!<2U9E3+ z7r>f!Y|E*XmdfGNi!WEpj=+jwzKGYL0R#g)LP+TL1TH$UK_QO7!Fw}xZ7|2Xo^E(! zg}idZ&a>0w;>>^11yZ7a5}X+s&?<}FT8+3^)jIC6Q14){Z{@x1!>r0-Tg4q$v8BW| zxA{XPZB{X!e@X5NG2p2&(zY*&6v}bW3F)^l@(1NTe&R`cbc@@c%M!+}6po1Y$ppth zgH#yo##4;l1Xf66`zIn$;G41em)TCYv>5hC`!42+@@CWV>a{0-@1|qwJzJly_^#}J zIo#&d)s`HHpi0}3{P-%)*Q0;5VHEUyv1)M@XQP_8O=*wxet8}5MY3lq=UNJ|t(0S_ zxgA-9E_MJ2eVXiOArErFOQ<{+0RyuAn9L~j;!v@vo_||DFvh5g6$0?s1q)qak^)CE z6sBMy5*b3%C=^70C7u?Z5oFrmjr*s#1S!}4Og5XlSv%sLg(fl7BSZcPgt13?Ho=nx zH|(Ifw63SrMx2;ME0RXw_E@HNrMH;c?J^G#Ab{7w>+4dePS5Q_OSk zq^^XQUn0R@V#q7hfCbOKZEtTKfex^>hyOhKB5h#KoA`!On1x=b8?D~^9yJ#W6qYiN zP!mQmAzCQzEL(TfJGYwGRv%{7*LdIW>q<%^s(Zj~CNrO1VYWgBH+eF6pJvEXz!<|r zfd!9J>TjKYkf8OHyH^9cwmsh`<77?fht3voYYWf5&+Z}t;Oy~0cKqN0eSsmm0!~t! zWJ3;AR#+razLzUuL1a~TM6y~V(pE(XqEL0^6i}i&*=)a825UT~MptZpN<=78ZbIlO z&dlq;PwKvP+*=SLEfp-lYs|S$Wy))Oqv|&i8StNfVEfTXEdCo!ZT!istUKgYF&!1JQK|C+?TXx4-HUesPh~H;@DyKp(Mk{-a~uq zio@%YJOWR)_=^>!Pn5e#v9P%-4r3Pi74uA}cXnv{fvrGGS*JHL5XQ%~CauC?g0Yxt_z%iZwo+7XnG5k=JmvoLP@fOiq zN>LW2n7NS;^}X$-=?GX*@GtZsN)N)uuJ1n4xO>q%^UpKCYJfR_L;Q*-TXp!>3JN~e z(z1A9|DK`xdy|!ji+lTm8J<%xeFQV$U|CD`FY>3SaPyLLEmil#d;IG@oqXN zIqtTXz0EUwIWs6uXuOJo&u)F?(p+ZA3^D34)>J`m>ZZUiptf({E2rU2ozk&h3AdPt z5ki09HwX{PLB?$6RN?*)o7%ABff?el)~? z<0UyjaRcgVXuM%5a~PbQv8W=3Nf@4%iwyw>Qh3+Yj*HVtG4Rnq%A=;_f~5fBwJ9>oFOj>zH896kUNg z`+KKvU#m+!@%s1fjo#$_Ro%&gw8w*gK7f-V$>(@zAzmL?W$v!l4flHoZY+-O(NO0= zKC~FREajxTWs7DOJzAS>7iy}xGaz07WsT{?H|kzkd2#ad6;Of7^R>|gqX^Eq&gz(W zZ@3BA%L<@~9EyHJ%+}?NwLri1`1Rp1^!<1Q_UHhKjb)erB_w3?YVppkus^wNSJ*chAl|bKoVIx+Wf- zW2@}aomUtHG0}2gL2>nZ(QMkP>GT@(mijL*s#dj(x51gH`o4|hK@yEMm2-l$J3Yc9 zlk7D0Swx$RXp<$q*rEJ&bB8Q{Qwu7^`HqqE%Ka`(yu=Z6plWkis)a`8>;f}K?|IXZ z=Gkkh6{V(1h$`uGksi%%hh`8ZPthAb#pcFP2$p;6%&F*31x?`)uSS0#k-0WMv(9z9 zg6xJ8;t-EQhwU_#0p5|0i5dL!f{lWRZR&v7Eu6lx4{fD=+<8%$gt;&Du-|@f|r8G8msZ+HKU!5;@(9;ChjJF{a6U zM?G!mJ{h7CH||7uzSmoG0RhjySWGo2rTSxWj>1I{@NC399U{wV|D4??ppXxE2NOw) z<6%rwc`xNR6dCrpSG-Su2A}>q#bh=-<)NPk^+urmJva}^a^jg z(Nubkb_=|G7fxgk?bld~K_NioDPdZsFc$CJx80B^@J^&|$`p8ilE4rpQ%kq+_R-yu z9}u*a`@_zn+*Ympmon|dXaUf~+?lf7mNjo#dyo0fFqWrYRaJN^a&4*@Q>Cy1tX4dm z`1CrSp*Na=p0vIikI|yX=Ga{ygFyDA4252&@n7WU0a)Q1PQlfoJ^=RG}FUwov1(%paE8RR^NsD`mR|e*T^-_W9 ztxJq6r@~cE;%P+pcv$9*G!gEU9zRHC35~F%f&B@~b&K=RPmMA$BO*SXsylQ7v^eio z`}i@IU1=hJ2;(<%2Byb~)lzieZCGhk2NiYlj=lWi$S3A@G_DwUl46kBJ~S(JEY4{c zbskjmGV!_Q0wz%a`NW#5n5gp--p}>Ux+B<^`tiz<>izt=&yKja36GJ6rQ423yu;XI zmU#zVN!?=Rom6)WOTW)_RKG;q*^rHgH@uRL=XfQ54G%?Y?(jPzgDH_f=p1b=so%WP zsx!p3Bq$37U=bemv;|6wC_S`$gwP+Y9@;%BUSD)1U0-y(=K7-Vs=IyZaW&wdlBV>v zs#uim9b9fm#c;mPV*Y;%!f4e_qHQ z=ROpFnBQZkaQ&4!^KX{kV_)7ElIHeubyw((v=bz|y?&m!XX+&o9oV}x^cMckV|s@t zJ+*bN_onVG7HFw|pv7n@JPJ$;)3Pn~7ghxwTI_&V=4*OEvm>S)N92igS+AwFmhB7R zbAN<20OLc&XIE5V5Pr4}eFgv%Ja}%GQu{i8tB`uLV)P~)fOb3ugPH!Xq|>e#5~w{$ zk}SU=J8W)FVhXZ_$-#LAP6MMjX>ysp}PR%R+olG?-7tLYoMQ`2wQP!1Nvn_N7)tI z`A=M@tu0(FcjrMqG}i*cAD&q&Z}q-gw5hxiyDd=;Cm5-v7W4oBdpY3lqWjB??tkwF zCB0ZdbYD!?q-O5d1(;YNCI+`GhW3s-Pt(86pSWfC_xEnu+LdRm)1Id@x8O5>7t)yv z__XzNQpNuCOd%Ohu3HY)2dhAj@a;XQX2<~AXS^T{l zo?V{1w+L3E9qaUNi6TCx3H7(hB~oJ&3+zyXk_`&V?6Wcw`CP?lv`OEJvE3HvPvTk- z3MQ8!0bWxcn)qN|4e`c|L>o$flf4DZB%4yiOKHQL&fQ^-NLHOBc(n#JKVMs4OeU3F zK|wxT4N;V#OlOFqPaJCgieX3oKwogo$nV)36n%%o7M>6F!vuaUjK0o*g$GO*g)SWW zzQf;hN^J?}H!mYzr>ijieo4fMF(5_Ed5HF3i?ch4=$`fR3=ruK_kw_baTgdK%Zi(c zMRdlmV|bAklyVF&quKze*3U>fUuVSu9?A}Ik)JZXVJ0k0)PlVcqP&lCWw3|_^b_=KCZacgxtw)P#6+!H+j)w9lKKDt+<^m%l;oVOj3|r1!NI|~{@3rD zH|U72MAd`&?QLZ)dw~x0N`zc0R1kIpDmbbh^r2wCaf30VGfYE61TdOF5tn)v4kN(@ zb*O$qblOkhdi~;KM znEph49y92{W|3M#Hr7a=&sj@&fP2na#!IthB7K z$?^)NRpxsVC;ld`m-{sJ2dm_vCfGH(txgCTbwNfWA|ly;9fYKp5A8L}Fk7(G&YsGx z0=@Js(ne;`)W$~G5F}kU*Y5{HVcmjRXmyJ@`lo^*BcIT0l@$4VX>@|}>QRb|N16RH zJzBTyI;E7EB?%#On71O=N-vQD)D6N(3FC4Y8iJ|`o>DFfK}IepB5!oU#C$I(enh!G zG4r3L>qP>83?fYEQ^(S96wxUUGSw^s1%1IsoWvTrc{;S0W+V{iD{zLM@6N_kjLN7- z(6PARtC5S?#_drf7J4Jb-Zk|1zQYMAhIadljNLxucKgW~3sx+4`fPAX&Q9;!?exTE=Sn+$3tQXD z+v!_bJAF&D(_gG>r{CDVuAhy+h~Ya{Cg&D^5|6h2zZkxKqZPr5Rw%=Fq#M4G4Sw`s z!}n-ogc;3MES$nJbD0SOnn>YUeAS4Ml3isohO0z^$`itEcXWGvUxOfD#~v>?v-gT7 zSHk?O+A!`FRM-YXPv=}3iVPIaR#}k-5GMvPf@ym z!Wy)npbP(U0HtqWl&8d8`1mv_foIAnCrxJDaqtioVcTuTOFLOdD|h_5G(~)m4d?5eEem~8i3bM*hZKGrC z?jNkXJCl+rPr=;Vt^2xLV<15ooR|_iUV#Uyh=Th^#@@q%g{)CVJgUnKGCIEdd$R46 zzC}nQFWF{LXCR%&>58x;C>judETKnnM;gEOKsl)b5Jzh9WrOnv3X8XID}lks>*s0B zS)3R2E^I6kAquP6ZI}^sdY)I2mAfC6Y<4tfWg2j5aOsL z{@C8ek(KksUV>E4y6u*h7WRM)fBkEiu~>agP@^jw)G#+?Xzi;%&x}tL-=i9jJCDQP zSmmeXKszDU1Os72i8vR3G-3&899cgHOL>iBkDfW@l5B&6#9L$2)HifND3|n2%MdviQo2sv54hg0d`HMRl?X2jTdzc(l$1uJQd z)?1uR+wN2`ls1j)%n=-0o{1;+XW~g+OC5lX-V0cYEE3B=SJ4Q6I>dm6j*)P5iJm-J zf98hqj_gC!wksa}Sr27+st8NPfYgu$qApqClxbAoN9u)S1?ck|{maOBWA-Mig^1YR zWvig8{nYY2zr!+()u?=DI}YzT0K*22r3?tEvHo2P0OxW0;cK(=)lSfxicH$>l){mW za#fk?xD$Xlge<#%zyHIdm6w-c8c}w~E84WmPMr8Vy~`D}5iw$uOLd{30D&`Pz+o zP^OX5*<9wqok~)$x)ZjCfz%T)Cx(oPwo&hHhv$<=jd+MC(pj^`KV2;QWLe;HtNfCpi$)Hjma#v+_djoo zGTGOl?o+lTS$uL8NDIgXlA8UepLRx0`6u{aSrNYP9I%TA`Zb4LbM$LJP1wbW&g>iy z?XTK@#KTYEpe zdh@Ejy|V*vao-AVDfoE=cj2*j_-Org@96b^54|^s9YlL&RUUmf>KvDyv-j}$FhV{m z&_ywpittC>^R)7sGE|oT*uUpdh_hn(YsdfP4^hTjc&wn1A%iygAdz>y|;)-+k5kW z`t?z-zTMq_g>btqdgRrccir~kU*Lms710~Y&=ge%{op;oe#jm^6&8kbua4cFL)olzrbHW$vkG1A2&HzOXorg-G^RW)-s4^waKTxgzR_O4a~12I6T zB&R^L%<2NYo>fxDMjpErWLbujphc+){QaUKb@B9)y{$Bh7^d^2c~-67_&FzV5mGsO zyw4kpq8Xu#w3f<8>kAe^?(>F!_J1Ri!ZP#}uEXkMKX^|#ymGqO2d#2Ci{J&sNb$?b zlNex%2n6?miLXpb-zX=2QHbKrsXa7L;=qXXVs=CrQ|3wJ6TzG`xrtB`V|exy$=rvN z&$Ce)#aNCrc??lTc4y~Oc2O%vD{M$;))FAobXI7l9iC8}ls>W#nv&Fi#oyVl(fmQb z6aTYnxQp^G_Dn5LM&cq`V(_-Kq?_30c;}Bu@A|`i(QvGAIg*chSyb+v@eigv-+N~b z8=o^1UYB{<>HP5$Ba%X&T2_)UUaw#R6R(jVWV`|5z94xLWMLztE2BzlHT}mXh#4cX z*_Fx;?&*tW86@pUYzuXN{6(k;WB69Mpna%RAC0r1oVY`S%BoIR*e1@&tqeUA*2HKD zMb4OtDStkCvA)jccq`=s^oY6CBP^@!bpprzzj+e9IC9e!E^R^=BK5~`tDnpn+mi$T z()9v?t6VBqiz|Qi!?A3}FrF3{Y|s4ZFqsW5)n~#Jc%gqCClgP9JXzW)sXK(JF1_ca zb2mAYkXrN_%UaUJQ`LOG<24oW+2aRvI zoqE9H7|V=pxcvNiSVMzLg|1hhKOcxq81-wJBuE(-AVgzl}@QEt<>V3yT6TZV{g0@YTxpw{amqsaFSkm6zgo1>D#mM~xogZwoxD02} zfT0ih5o5&{-Txg)*O99JhKYK9@xVGLmVS?klb2C9iI3e8{5eF36-I_5+kL5=Gx9E1<{?_zK!37EgM10Zg1zg_ANv!qE)Tf6|Lwu=AaT?G@_k8NW@xJ zt+EAN{C1SCFauk_rlg4GyZ0_xVh?FS=*HHOfqe{wu9QQKSM*L#7>bL5;+(c-?|3JnU z-w8ld*3wY&AFV$G>nO~uBj+m*k>!k9{>y$QWnBec@EwKnR9INSGcB|^%IC6jpfr&o zVl%iSSnqHK6QB|~3)o|#7nNK#0p_Lq4cTFoQN}}6vAX>?yfk@EdN^)n_bob;4JMJbHsy?Kj05x2%`CvAakUR7l+w6(U10d;a{HArvjNrJHF*F6L4;hI{1cz$%`XAbk3IG8;aB zg><7N-i(|%C6rPv8L?(A(7)uK5Apxpc>d}I(mEfhVDnz z$aeqmRS)kj6mWt5HtOyl6O?OCIwyOlPUmF*bcG7&w6WapvD{ay${j2kCoQLc4aNRY zSj-`nl0}^05ir0G!4Jicp(am*B%TwH4CSL#co4zZOOd{3Qu-do%)OlY9(h{@kZEa~ zh*L0FiHg^*2mUs>T$?i2=7!YxL9^*QELTW12JS3>Z8mR~>?Fb6)}fu3{#rCZt{POC=mO_hXgd?0aSg(9 zQv{u$X}o!|q5!u6s)OHFl&2}O?akU0H1%0;FsY<){_Mcas0X|e;)JBPF%N48ud+>V zc_vUpMmTkv*Ve|ud1CzpkSp2a7x;M4q(XKX`RqDQFvtxf;}{WelxvB9rNK^VjpzEs zwf8gM*=daU&{~@b>ljp1IYrtqMJ$J_nj)4{l0VvOv~h|Q7RXN#OVP{}u{4EE5zCEr zrU==RBVkLXmvkF#+&^gvuQ7GZ|~s*?PTos*%lEe>$zdu`%W$@adUMj({z-H1x6sbi+kRCmBgb-oa!&W zFgPrW-&B%+ZEue~BlxFG#FPTSJB*Bgm-~Z>o^nvn^+DZTF{qk<49{BFy1i|$L-qFy zj%W|cZ*4xJTfgoRU2{N-1}?AmkR3hYq<(95ZHI4*U%sD$CvxHG>NG#f9ql3pl42(F z$eVy@+7+{6eP`X~o(T3b`7Y@~aL>tiz=+jV@8ByhJWK$fAjL!IShK?KY z61O*rY{50zuo}e{;Wq7RMK0h5BRddyDHn7@kvLhHWV&d7$4I`&P}3B~>*)9k5dkrc zh_V7>URa4S8Vz;<|#@W0Ps;9i9%E0_;-ryvoKh<^APMbHRqp}|?p-dn-Y$4+ERvyV=OCmYY zR&m{OlVORdcNy9bTMD396Cefj6@HvMJWP+hPt!`Tx&&3C(sQ~XAVaT-;A|DD(PhCI zTbssaaNyyS-l-Xkf!*m>649xN=Rgs-nkR+J(ZW4{P6k#x227)NrHmt2cFOonnJ(~= z!ca&47hNXInDVhV_Iwaw=n{?&#xrier9W_@uLDbL2#||M(Os_EJ$1&{)o0);@=F6# zLBlT#R%0p@1Xo=Mj;f}NKU5#b<}72E5(L5p%%T@oW>K^QQBugx^#H2Uh(*=B>&ZyJ zZlfoECL30hHftxlrw85V&s&vl)#(`%v4Px>=6;=Qv|s1YZ)l&*qTdL|ND5D6P5Mg< zFpl5>vTeenhMPA=&3Tky2YO+VjYG`E3)**QtgPOl2tl#`F8Kc2*EW7u>AZsYi6c0Y zxShM>w3HjarNXodT=^ZX1p3kj46W{-o?423z)t$mV>ot+Vq>BUKifh~lE_$P1V!Yn z9tpDqBCtY(+s_(}PIa@G$PFR!Hi?(=5Lt?gAWoUdAa_5Hyr-fL8dRX;o^`a<8Jie) zqVqtu`aDCrb-7yOCqh8zVA_L_uB-t%CMLysn_i@n2*40M;Y zIDj;ZVDhA-n_@&RSI>=0m>7)qx08)4EtnuLF}uS%-?)*YLFerGm964s)}6CFYVLs% zxT0YbtYu}hsKm-fJr)J3uS+bE&O(%b#e8x`Cg5gl0o>HpWpp|*dj!ioJ!U%~)9hJd zpBt$x)sYvul0UD8d3R(EP-_n~;>nb9SxJZH>itJp)|eP43{8ayo3=gJ)HeqLWpl*v zW7y%lGGzA=TyPKF>N_fIyd%TL<6uJgKeMO^9}L9s={wBj-uq7u{{4|LU4FHHyX&Y) zqtBTR-&)m~@-D~jF#k1n~n@CE)3Hu3_NG7B^@P0msnA_G`o@JmS$EMhfZdKQra+(6yn-IQraoV(*GL5_>#u5(K!QfG* zAy}`o^z)36_9m8ma$D-jV#iup$3FF8*LPZ#U_o^YrPWFA3WP$NA15Aj6&`7%ti`tT;UvqwkjmpOejHJojAATUD- z!Ua|HTOl%#xr{;nSGDt*U>JUclLIFcT2W4@bDZHnipsl91&Pg)>thX!bmg_e`IV+I1vdB$V~fr zraTI`>7~>7s;F9-3(u1_v|B{hf-$l%1liNAb*OsR9pR6?~G3_WZ` zs}mlf$2=2;49YTCVVzJCDizpn8+w)CNimbA`x8nbny+YJ3|yiV#5-9uNyY)xfG|lj!bmBXmA_)Lo)uCETn+z%QX$HH)F~ z*p2oW#AVKs`BZ{H-dkptRduU%k2bx z7vx-z7QRa0<5dcx_-i+*Y;XIcs>s+o!)81f3OGd^prGVx4yh#!0)iQd*bg!XT(?YxYQep)=v+ND2ga5PyS zJ^Ma!eUQXs-)F)@2_3UI;L9_4c=?3iBAKM%t3k9lDr2CnNHfMJ?9!JM_;VX55ZUr#;1SSQB?|4pal46$0 zIH!yYw06v!eEk$!8oD5HrzlL293bBSOL^e+uRtarXR6oke;9RZ;w31deM<#x;^VlY z7xK!oMMaHL@*H5U*8ui;$t|v~NVHB9%KHlB!7weG8;W>FZYQ~pV4@KQsL4*iDT_=W z6im>}e5JT4$+ZimWwq;R-5U>QgDJ0BjM?JKD`xe!+Li`+^2(-A0JJ;zSexFVAdKg* zE+#4{^g%vxe^0(dyHfx`&R!Nq4(-ivh9oG_*6YwJrqlqq2m-4YUQPSx?qzv2?0zTF zZcbu;3uR&gq{Zq|zRlag355_3k~9~2MXG|v&Xg*5R>}JWAB73tym;gVNv-rD#JLel zn{kN*Zb}FrdCW~YHSq^SIGp%5yZX0=^21{NJLn_)f2CpzGy{694(3gmR}Sdsk?(th zX+_YlJnM5y93}R&8qfB)m8;#r#?~hByi$F!@BNM+krm}b#uT4}XRYVYRl%>@2UYG{ z#)zJ75=UX`Rl1FDQWj7h&!&~Gv$v1pnHF)>ZLo)Yj<$m!d2RFwSFS;E#LhZOM&9`Z z&1=x;f0k%7{M~*2ylb50j2Xq5SGofJ_x841W8oc5mMbP=J!tghy(TGKbaIp~W7xty zIbA3+2NWO}cC-Z6SvB#ctRi9&c2Ea<{_gMRpnMX#0a*??#S9A*x>+t;x3?A1PD`7p zB^k&o@gf1HP!H8zuef2Hci05}dBk-f%(JFjG zf6Qh!!CVAJIS`YLX4ZGmw_{kvlSQ~fqmy#P^2nksU-%@~1oyoAI|09@o;Y)emx<4KvdysJ zh7FuK>Cm;&@Ib1VZ^-!Sf0SN&45U$=>Wt$?hzEiy52lZ9n9;+S0&5sk zW?nlqYi+SiEg8$yZnP}1Ozr2-J1{+*mL-;{kVi;Tjq!=t)I!&cs5BxO%9m!WLm=&v zFs{=N)o@Bbg_}3XN0BMV+wHB!{1Y|HZ9F~$9BYbF>x=!9wllHs(ydV3Vu8&Rf9Jw3 z1Y!Yef!phwKhzdVEMdscS9Z{HiJ?0wPC(p1Q&GV%)yvs5$Og*}j9^)j4KLAFc$BOYG<=nL>tN<> zCHSVX+w^(%Z17^QTKB6kzEGcsf4dn~7+16ePz+ur8D{kXiH3h3z=}Yeh*aoS^-qm$ zIi0Ii_cdryf4zjLh85XDi>e8z7IM`8`!C)v$BrsyZ6QDEEP5J#RI^VCSW=ZcS68sz z2qDHX90R2RI6=@%fGi)l!Czx~k+K^w1Sgk*J0jXC5Ty*B6LJK|P&2`%f69t(LZh1R zuBRhX1+~>iq?#w2=PK=nWU3MZ!rj#gQO#BKaI)3WH@nW>J-aHL{|No2Ua*e!{0pm(8Z3^ve_QmPA_*>ceUX27SB);IXyf+ z)0glhWkf+CF=FD0yHWlw#T;c3)wZg)w_6C21g{ZFW2juEJUAnqe+d7ul~y)a>%>E> z3@=kJ93r}T)>2n5qlYH)d-|5|5s<^$rlhgYf~Hl-JX-X6ECa$LRqE!_P&7fYZF)U(X&4a8{3y+ zt=+<4&aHJ=YiahCf3>Kb2ggAVy+IgZYiJS$F=DXP%e&6*u7%Kc3&VWZYM|+E&_jE^ zU`r#TrHl1is@v-~Y@E>$7TT`Hb!0SVzFuRBBi$buvu%rbH=2#2jtFL!z{*C`FRV@P zJeZ-lvw8f=q-466WCV-JQ(R&$JK94DBA51P)VtvkG6hVye-zKGKY1H#=?9ER&d?iA z!YGc-?>0n&!MsgW7eR-v>6F;!jgo%k|b%~csH!XCSP#X={I7X2bklFITwwSd9%ix zYEB>YM)@maecYoesh~wHpI&3K6Kb ziRZww(Lf|;o()A(;i)Fp`v@xL^cwzJwHMc$t+Cq(t(={is~OJDEz48y=vT=-=cLP1 zTP2-5>!!)@Dfu}yhDea#l-xJU5^Fz4UI-vAj=K?QF#(6fco)b+Yf=Fj(+h>w*||0RyNfS3Sy1q_daQ zi`dfAvz(g>B*!jxrI_(+BIK-gEM%Jsi_m$%OEM1RwS~es!}+bTg6AP8GC>*|A8wc1 zJGLgy9w};;_M<-q(vtlBPtcvBwSU1pY2QX}P4X|3m z=kD$9I!p)Y4yM)n0+pCrWuNg`w3-vLdy1N2V*Ddwo}eICwwVBwkv>7GpzOfo!eTQ< z_MG3!$}ngfW4Oz(LBX?SOJQc*I5kJSD1>n>e?t#HP0m3rxXf94B$3%8g4q?J2TydX z-$$>jH>ux;NqC)5e^`imwfFqTfBQdJacgz-TSfCPfF3)DPFm<+I)ziLk)4h$4#M}0 zp&nzzrnpo^v>~2bUd6?gEqf!UE-fuNeZ|=zu#JkgRMrK4II?W0p2EZWY7ahn=3&SP zeGv=7#$@yz%Z3zcF#Anf z_lSmXgyhQ238BeO@BfB;))a>*(?Nk)Y66QW<{s(?3lkIfI=pmY71@I-+j{g9+kN1Z zjGYYh-m$Tj!E|UV84;fN_x}xh)gr~pe`X0YQ>LObvhYM8$%5w9Mv3+c&4%hEe%#Sw z^qCw>yW@t1_4D+)Y*yZ^1j3+y_j8aSm!?XAQ2egin?zPXuW%5}FtjfeFn=)pS>$?mczhJ zFLrTcy-^p7IgU6#t9S24tSo=de)DB7e_Lau;~MTm7*68d z-WJ9UzlMb}1vT3}S6u*m30yin$K*QgXVo5d`*7$!^Xo7x|Fbu~Vo4k49uF?ey1S7W zm_JuUu&Y<953*BYL1hleHMsWALAXF@L@N(6AJUaCNm(v}hy#Z$FHCvHe>bHB4uaYA z^LY|_eqsHx3hR41F^JK=nlACwcM;XO%synI)J$7HP1w`cnss7f9)QgZ@-haW{ghK{ zO*loiCD`B%gD(J=wF>?!YPjZ(wP-{&9B_}Uayb_ye!zm_04_LI$;A=@r*udwg41w< z43;6X0|){c2C&h2QQJn zc+TO;9-;Z3f7TDH6npxxFZhG@1^<-)04B$aw(mVf+YgCAtBkx|*|x8x#naGjk9icQ zFnZHWDd(n&3=KUqRQ^68NkgLrz^HK2&M>KIO9yZ)-~A5}$cNYGM)>naaS}}Q%T0ex zuzQ-LxsQo>i1^xdPN17%ik#}-^P(jC$OI1Mj1a#9f4QQk%M}-zyKp19;_6Y>mO;ka z0^=?;OFZg-x#Lc0v@BCSr(LW${oY8m0@VkVdF7Qfo!Oj=^_(<2U<(?QK)Fv#(bi{@ zKeK>vA^`kHB#xo9>B(|-CX8$n zrZ)aIf6*$;=&rR?wTeW}xN&lV2t>HU-~k+B+zW0?C@-Fzf_hs%noQ?NM~yc<{X!$>Fh=sx#=>`6LOdEi;a9QQ?lo-evg`fWmG@z(Ja*ZxDl^F>$9?NtkS|RvcXSI{~=nKKzbiIynXe6)UCdu ze{R_$s2&OP%}trGvv%04t;!X5ML#gSnle&yDpm(otQ=%>0XQXCxArPZiTM>shZn`3f4U8%!^Pul;bi-vrQGB`INXd73)5yH-13Pmkm)9U7lQY#zyU?(+(C63*Zr`)sRO0iJchVSMn#PYGRy4EZc0$D;5J0dkO zx1Mp)QtMmHpyhOMJjX(FOlSPk_;Y7(KZ6X$Fj=Et!9G6H_iG(R^AjvaiT+XD^|+;B!|e^vL%RugMJM)th`Tk0t}*$hCr@LX>#oJq?_| zQol*!*%VXhxH$&XRL)=ODfYfYXdlO!%K>Wmhvyu233FB4gLEEZf?`Yv4n--92+Wjs(r-#GxgKP8y& zjF=4!jm$?_I>8gx8lq{S0;dMshLQ9$oFv>ZMs9kjyEsq^McgEgiSTwlgA)Sj1VKb{ zx8aSrt+?729U>Nh_?DF<#kpPbC`2@pw=s$ve0OxHI<2*$#%mZFUtzDr74dCV@euzl z9vJL81P(CBp1hX~f5=6R9j`CbMdm?w$>0anL(+bp8(7A@$u{7n0PvaaR}i*`G^dD_ zZhW1+Eb2_HAzrwm*yd&~11SqOO z2Zxiu9Yc?R{xwMA@%T8d+)P3I*yST$IGX~rA)SLD2w#R>e@Vw@ALUB?Tn{@H^WdEm zy&z)ZIk~DjyA^$URU#NScGiXBtc!AI-M|UL2?ho7AzHvg>P2}O-3*_&kv4?-YT)Y`p%6wHZ zX=!U%od%#zf0i`7sgG2^W6zZSft6>N@(AHTa8|Wo8ettDgW4eRVCwZ?%~qf`(C1L5 zudr`CuVI+QfOJPqsAo4n(S`|H!GZS)Gtq874oYrXI&@kt{`+xx@SB~Te<(35;J5D8 z6^P^Sd+i1_V7qnx-uGYr{zs?^&8)xqe^5&U1QY-Oe*g#ogk>0A-F!dk!Ylv)M3?{o z82|tPVRLh3baO9hZe(S6EkrX*IcaTcMJ{7=bG3bEbK|;_==b+4^v)c z)hg#KSz&9-#VAr@5`&U!{`&(MBrqs=_Uz2Pb3_toG#ZUg02=S6uG`<4j4AN%slV$q zMw9sufAE;GWkq;T5twmw9}QVi-c!Y5(SH^ljeAcOyeCFd1uY}30R$Y!!5hoS;O{BQ z{R(~)K}qnNd{5y-@IZlwT<}1H=DaT)qwN_BLd)SSL4r3PHh<$Hktc&^2=;G+AxR20 zsmK~AVXj%`7eUjnsp~&)_>2ENW7(#zt#1?~e_$~YcB1b7ai3rtMTWr{-hBkv|6O2; z6a$gaw-6;L{nD0V^Jr5UN74_i3e8QTOSCF-X7 z?ihw(a*QQJS|ndSc-b-(=Jd`gI=A)Ov1MBkkX8sX-b&^T!)efvJ3x{kuO<5(e*^3n z?UKG1Oi|Gf?~=^(g63g%c_}E0Y*@1OagbzNaG?wDntm`D!^1^kSV8$;@3Cd*f2Kd0 zmVE;3D%*@AbFqdn4D{Kn0>#jG07}+eI*5vJ`~Vf#S_bq+wca^F1NA>1ppR3};}3YA z)lFV7-*MxZvUEk}Q{FdZssv?#Jmh7^@+*6y^X0=}cpkP3#GNYuul)gYLN~YHXp2A^ zU!X{M`J#O*EnlXG}P(8o+ z41r?_!;CV;Wk|hA`7`|Ar5BTRDmPllIGfwN`6 zbYS!xRf|+YWi6b2iF^~3w$RdetTgEtXWaI_LxL9_+@xWO0RErI%$Hl-^FJ1$9)%M4 z#q046DREDl`W2s*2VU_^h8Ftj(vsBuwZN*TlkPQ zORxcmfR>mqrofMga!`Tn@*2WW$Y5HSp!at`-<14!IPE@*xoqvVb_EWs;)3#(#9 zX*1&GQYz&eORk#0pOZy*jU3|Tk0j__tN9|~AYO%-nhW!4f06{eb~JeW`U0K4F_Ot@ z1~@y`cQ98kufkN0+LEpdkzobB@@n$Tz2Ne$ zFqWO+Bw69V!}YHCrudLjC1YxmctOhYmkxj2*Tkr?W5St=0!dlGJX0bX_bFYi2#om9 zP`gj`KQ!Z#e|R`*&|QX#fJ5cFFDVL9!oG5RY77zXbUU5I#qh(|*ETeMZ*;<7JZoq9 z0R8cKdPKgy_K$cd#t%QlY5x)fGfo!7Cr}Xa8&-pnU&Be?E^otx=2V7RH|GcGD5PlH}{l z$Jtjy=$EzrM?)KO{$k@G3P42uq2x|-52=@kFnC^WLsY;EAi0xeHvFE71)grpZMVE@ zFuY!$fvy2l?RH4uu3;FJE)UeZCz1kk6kuE@?wJNN3C7D4gvHhL#mP%hNR{o302`F; zXJb2we^w6y$G6h2%@tkqGf|hJ)c|*BsJ4AhqXK$7>26#rxN)GXO=RjeG!ZjJj2G4j z+`tYL;d+ESv7xoL72eT-^j-yo#n9S}$=#~!T11hm!83%*0UEnJg<9SIcb>5%T@-;^ zl6oU8v_Vzo?|3kemBkMtdB|{jZ#+C$M%fD5f447Es0UVMZ0dLcAY7QgR ze}SWUrAqO~-qNkG7nhNK7W5?k7p>)}QSr3Cbo=32!Jfy8@K1s%9I6wtTJZ$SIl*rA zWj|wXZAQz|1Y@c zml2L&^6&!xZ`*W)|4v=Ib;}8k;S)vYf7%3l;j3%-$9K*3luAX$KcsUn@e)IDWl(~mO_bGM4IbD>ws2b^r7mWrFF>ep7%CQnMB-AnXUKz? z2v)c|%ag(!Zf62pI!=KbPL8cRoD>9m0heS>j{;~m!=k##m4iMX`LVlO(-+iye_|Qn zmT007%M#8$Fe-)cNW?@Ff);T>%k7iFm;f>=c{52q=Dl^B5cNUVTzJrWMZw;@9kx#sCvA|!~Y`>%$+BYYJB?^b={%2B|NcwcoAYzNf+~!;`1o5$dT?o zls`8t(h!LF)*6?IW3mZazE6OYWG%cQ%8@gwuIX-A=k@X{VrRzy|LYqLJopY9zgTg{ z-;%8=z~F@{CSzk0+v@1o`zucPzg}VD3YG z6?+M{*y@LHO;_nMKzf+3A^86fD7(lTPjFvfo^@S?y5jl<%;~j|0Yi#Ha~~5NPuCU3 z+?^2EwQm=6f4*b()1P+uJCLG|1>d=%&$Bv#pgPCj#*3l#d6QZDMm>tq`@2^IZoERI zGvbC_%Ug`dm~tvq|J$RT3HiZv_Z0@J#js@+h+mg7CSyH-gAmZS(Q+7u1a!Qo0QklI z$>^r+YWWm07Eh2i68VUY;uSeKoS>x3O0FfPGDqL9e}L3P1V8-XqZ|Hm7ru{|3m#b4 zulLG&$Uj%sCF;GB;Pw3pa0BQc5Wsg5Tw?^;SbHBQuPynQ0oITPbu$o;h5{@k1-1Y^ zidg+?T{mt5C;E3rwKB0V$}!~!Q*L~C3>!|T1lY3Xw;KlSPRAQ1pKI%>uEm=PPx$K` zyG$g;f5=FHo-R%Oph)7}zm5@ex3YTWqWlf(x$giHg+jVa z%FAcsRzt}E5D9Q8Kx1*)7b=hop`h!EEgO*%e>76Ui#&wB=fh2SUsIl9{YFAT356iN z5<9zB71$j^2n0SN?V&rNfCArvYv!7FfBV~Z{{HNBUy?V2#?*C~gMl}a5F$YaJ-TVq z_r`_{e9K3_dOKCFlr^rx(_2wUFdss(x5O=)2)yrzmEo>se0wVz$ZNl`>-L0;4FhbI ze{auVi4y`CDU9v!BLUw`Fb`}g(pKt5Eq?_DK{Z|y3E$#w04|K~%?iO{OsEb-^JWdV zhvD)!u=gvNmsO%`4H3wh4D|0(;hFG#-47fxKfH1EKc?OYD+T$GF+HJkzsTLMcTu{` zs~bq-5wYkwtU!R?Go3zMO_KB>(a-`@fBHrv2Y5P&lNfC+TvsO&FiJgxq(`3^-hfiH zmEs&0ICQLVmId<{_KLlNx3BOlV1)SB=f`!Emsal7xZAU^xev{X`1hm^UoHIT%gFO% zx&nnNeBV*9uJB>}xN;;09h6y{3>$n5u!Zk}ptXxB`U3t&gpH|NK+4OgT^YPef89gm zQYuL?y~ZZCUn?w;q2aWKTXjOcd42Fb5v_Zbe4XolfcwA$WK^KfKN3jCg4!|ip)Z5y zpSUy+yxG7v2KKEj-EyVB@9HB2hx-&l5V&73gj8ZtRMb2G>jH`P;3xX~N(S^81JCo( za4U|g4b(99SC}y@UtkIe_Nl)je*i_e}fLzdL7z@ zoVnO^H1;2<@Y&LgDHs9+{Q>`1^b~QZO>YOMVOR3VTAaDv4?wKBG6lMKDR_Q4 z)paByp-JEx%kqD7=&q+2)JzgI3m$Im8^*dcFH-WE%_M@P_Z z15KFeuEud)Pnf{s-F?g&Ku^OnLOJSH{wxp12dvXr>m~4~Kbc9jf7u%RD!b22r8I*7 zt&XU19sIWn=A+HPt(rD1$lBGX6FnKv8VMFHouyot%v z{&{2OyQXri?1uK1f1QqMO<^}MrzdK8vdPbioNW!t*gkK5R`NTF9+3@`?&LOhnrtYv zR?(|fs%H<D{ecK zaobi~21afch4rajV6wvoadK>9lKs?`ydkVw?27A@OSPIL)LNx=ovm)qbThXyw<;lh z&KvTgBiE@VcfiK;4sTcR+$g^j$OR=2dPmdIwX?8ppXbb?ZqAC1J(yVCnQC&_awE)_ zo64LTR(qvte@!vklgS9%kM<>es^+q7rK9cY7G7(dR&u?v)5fc5t=(?Ro$>PgxjeVI zEiqPeLrQL@Id!tcmSqiugHJb;_A;wvs8Gw{rP2Ke3qIBt1Qw=N`T@e;SQh-6je~>ogfP$2loq&vhn; z##}AtnNxa|UhR5ZZBv^IY%PB{Rwko^v6b38eO036eT83DH*LXi+Qrsr13;GJZ;*54~QkzwPB|nrjoMVb$JA(^jrl#e3NTacWiVN|xGCWqGp^2CS$U zgJP@LJ1nLZYqBV8=B2vOG%eKDS8L5>@uuGOij0rLq3KIZxNn_#yf9anW2~}4VV4g@Q?>W8?-`1?HFB0Zm zYI@>ZlCkRGTVp;@*4TkuErz)&Vd-VNK@l6Fm0PK!Y4cn<%2RgIwwB$^pxBg#>G?qA z9Ep=ZHMRLU;@X;#uh#byPCu-G`NL<^pIPzq+~a#wVqL84i)&}m*k|*`a$qhbVwN6{ zf5#+0;fw9@F~_#*Tvpibnk}N(uH=k1y{bw0X}*=VELRsMo8$UOb_o^dSiF*FIpK6H zr7Qi-G}{95Hl5v8w}g{DWJxmH5-PpHgqg3XwW3?QDOv4n{naR6vFJjUtO#_on=i<# zW_I8CY%xn^cNY1sQ}~qgytbdQwKGGve|VeB**j-dS9m4Yr&rnGpsS16qT9*g>Z+o) zC-co`y=d1qGsSW8RBN`_uWj4;Y&C27<#DoQmQs7gsQHuJD-QPsqP-NAqGs5~6?5#h zYt(Wwv`^`M9ZN3>$0+jT;UI6s&5C8%oth=tRZ-wNO-pX5V^PsGyaxo>rYRQnf372* zG~!I2@M=ygtP9hXbUdA9quU>9rI}$3WM?j`Ynm`DbGlk;gZZ*wo%Wo0dCp*Vo2AV4 z4xjB+Akmm*ja?~+8CmJJ)hu&bZklsCE9H;#t_B7e-wQ@{dlK_}E#I@JbazY%`P0&9 znpgYUf>bBlWBEel5M2^!D5KxH?x> zQ?)Y36l~ZWHO8wYZR6bnxt(H5QXwWSdrP-V^QJ=Zl|flei$jMLbvjG#bNIMd85G+` zqE=fjB^EQ){;0Re?$!KyH>kC{++x}|kd=}%?h7YoI6rL0h2ePD8R5ffe<{lw`?RhV zCz5`oiFsW+Vx46{*P6`9Y@gLaUZ$nuv2n=S;#SyWn}#)#&pY8f>uk0-A(eZbHnn9d zyToF}_?^ zTjS9n-`E@hCe`BELI-?3d-|RPI zc{0SyLq@5LC$v0T%C*-1=#&8)&)4UP-YiwQ&z{rIx18N>Dx7A+9YO5svRb!~)l<3L zt{wU(J2&kW3anCZGI};=&*zfk40_b0)S+rEYNXbirSznBnkxoX8|iJFGtn?~N^6<)!|dt9Px5n#Sx+yNUPs@o_-+kJ!B0lPdPQ znj3W1D?!<`ckK>WH1xv8v9{ylqK_?cWkssHc@v36WTlzdX0zKrg({dAU z3}i6jd@eG`=$PLPq%sOOpTT& zLC?-=?cK36e>T>1cLgM@-5pv3rl#_}({afwT%p@z+M2wrDiWvc)S*1mrZuBG1MG6x zj+ymlxvk0UsAe9d?X=XXbVoIIw%(rGqdAwwhL+uIa$=1irDv`NoXkE4;|^U}wp#y2 z&qw)&HB9J4EX#3Nk7hZ_DA7(^wqn>Bud z_7U{&P@XKfqc`XMKk!mXl8ibfH-TQa*dcrPyq5{P`23dr)r@L@Heagx-Y1A5HlE)ftX#^Y!go_xM4VdMZ`ATlj2LN=spUkYbqvjQD! z^=hd%W?H@7Sk5t>9bF@ryXt5_?n;Nv=iICofBM`mJ1!fiEnm=AGd8($mSG%2V%W9wY_#wO99f}o+=q>qjI*k(p?Fd}SQSY!9scdzd?TSWLrnKX9VGr~X z1==rd@&`laWV}=qOup172F)CGEDR>Y;)bl-B%5dE+vz%6SBtnMPfZ2`hLJ{FBeU4* ze+!#tt}>g=3}(Nn_jhhNvU-;~otdTU_)oJ?J-1g3Aax+mY(tMT^ z^V!9!({HAWX{p>DG?)6>>5PWQQ*SuyY|TZsgE@0etTXM#1Ro8@_R1OzZIkRGmv?sObH7=4JLfvR3Y`SY5l)H9tW$`egK%f%^PT~njcqC3?a{mPcj*(~0lrAH;D zVdCkuP^y||Ny|Eg5wToJqfcc;rz@p_y%SkUWoDHLE}Z-IPnD3>Dmzq%f7+TpsOR+h zAf@$Yl@l;wW{+}%MzwVsW6n&PS^9w7i&a%!4}^0QQ&)Yuc+B_8aymV)cJXyqsL3;u z*#kK<$mMZ%+Z7M&fnIzP!@}^aV<-MZ*+do-9FjaPCxhOgT9Bq9RWX5E)|==HaoFXg zMY@fd&O{g<$nHw$U>j%He`c3wQ`$B$S8*J2@wVrXo!g8q zorN4WE$qtYlSHqa!I~EG&S7L2I+$c4kxo~ad-XKgHOfwhk-0j~e=4JmG`#jK-+~jj=8lO8HKUpPWY~M_He%0(q+RF|5ALQrq>~p|I6-->Rwf znxJ;}jOuL4<}q8IPMZZ;{47mMjr_V}YV%{e%FXh}!Xj7Wf4H-xl6r0_b9<}1n2Qow zk?=XTEgUgzQBPxH{kXO%Lpm2m`;#FbDwTStw_8-S-J*8f>~M?~n(5iBluv7ooXR({ zLkAPd?z+x3OogzpZNI-URJ~o)sWMRnUULEX>ePtVj|E4z>p5{}neBmD*lCA8J3jAo z(nM>}hhaKLe^v5QQ87qN>h$dn@Dgl(%R0jnUewz8>6tu_vogCbjaiAMN{Ynnxw62j z(&|J7LUDSr#vaJc01jXYwWIgE>UA!8ZD~Qkin+KX-&u#*K@}>a5<+u zGo+ofSOaIjZnicDp*fmRS%Y_a0$m%=z|7~1$9-Wne=Zg($L)lw6B=2YnX?s+)t3E3 zzC2fpN4y~qElVaFYq>G5cIM;dN?a&|ewr8iY%kqdw+>7G5VvRVZl(;Z3&yrhnRTMO zTD^d9_?i2-W{$c8CT_C2r)}K>3>Om+OVMGwFTA!!-EASod?zhgJ*X31LrN~>ttmyp zJ8;h~e?;-x22u?s!&yhp^dnn3L91}3QSleuf~;AwO`o`+2L8fZE|)8!#$e*69*?l0 ztv&P;yNANn{8gt!n;025WI@)qGxPa8YJs|ohLPmOmo2P>Z-TlB@nVUIf4=!J#+mMb z`Rg3G*H9|if4KI^%g2Z;S-l`@RyTTztkH!If88c7!Q5-gdvjgRdI_&*MVf!;fF{nr zyUyy(Vv)t{=uW#o2N_`?KM%OKM=0ccbBb)d2QC{tsutP772hftU(*hAHxXL8^iTeJ zXA#|#_6FS15u7y*XV38twk8~_OoSGkrE@di5im!B_ba-ViocOhID_ud-Ox_Yq&8E= zf2GwoP$?DLpb9s!Mh^{8$V#t^-HqcLaMeC~x*Qca8Mkuu#NOTAF&CtQ?W}oZKWiR6 z^?PaS-ScAME|gSkFQ~g&KDPNSobll!yt^&-(YpEV#`_1{^qSDysCq@C9_T79WEgk= z+*_ti+&>d-T+uBdNU@eMJK)yX4>J@sfAIIo#paE_rv!;z5kW2&_jq8|W$Gy-=_>R3 z2|Qg!3+3G-t!wZNyj;u{wD1es9Bo=x= ziYpbrqh^4o_HVTu)Cx{mL=3SE9@+nOW$p(!dIvnhwg?e5Msl&8U-#g65`|&Ou!F2w(_2IXd4#9v)FM@n%NY?mg5{^XkOKf%HamM9aIje!s z#{Cks{V$6Vg$&G{ka3d%f4PU2fD!tVN~e&FJTKP=8u=Yhn3kNc{^s>WemB0pY=E_r zKp3RR*)bh~+rD1kFk3gER2JX(hvwERvQkdTt_$ ze_+u?dT}cQuX~+TLN=;MbuV)qXd5E+Zvz-I{~f!J$E_r5F!4%2f9ZteOQDgz$tK=- z$2f(4c_yWGlq(U${@=f@!->4kWLOg>lTAqEoPud*Q)H0x1fDDx%sY7>0nfsh8NdKA z4-Gu+0C58Tu4o2%K#*Kg7(8eG@{NE_uI+8_{zbfkx+-%7ER(?Te^K1}UbS~Tl}%-EPuiRhg6v70d-S00&?5o+yA(oOOa^-C3R>g3%t^H#ekL0upUB`eVf5E&d>%1(_&&s;UO#{)S zF88yO-|FulNWugtnGBO~C6bp#@i7R|u`JZOL^BnH^Wt7r;GJ}e06uH#_SSS%Auhux zUxs1ff~lWfjuy!>hW*JPk_m%&;~uo!O@#gNOCqujk9AyUHkwU8upk~Nn}@{y`HcK& zqTNR`_$+9De+Ju6jDJnc?7|a3TMR3>1_R?*hai1VII&eMl~N?p)x$fjuy|_sAmf;~ z3~&|rZY=bg^dpDJ84N}F{oS>-BwgWS{6Gfdp|F;nISVqfiR-7C;-TUZywnha#Yuwp zICc9i*mrLjbnkWz!i85KA{OpTzE2PtmO?a4j-;fEe@wTF2K2%Jv93OKTa%aOGlS#4 zjT8aF+)5;ga9oTzV0eiEVukbhBSE(NbyG0&50GOIFD-S2vs+WsZTb99ae3nX3HSA1 zC?TioE+RS=S*<9*ku(JtjbQyVG;Q48NU{d)qCXZiMO4brFCjhjj2{OtsS2I?bn`XF z(?eO(5LijPZ!=ia!Y&sRC4h%FGCr`iBByqv z7k6In*!0Zl%iS5St}#r2+9}?yC`d|h%=or}e-LT;BPvHOU8LMDVhIG-biojXXR`dl zIf7%?fLO>D^EGe?b};#3`Q(4n4Of5%-6$a4Pz1sJ!z9`9MX6i!AI31;Rn~+n7knJz zEa*zb2Xh>)9$_)^85+^Z%pfUFy55hN$Xg1q-+z8L(jOBio@Y6h*f22Hk`l1rxlSs& ze-3;{leyqim*m8+*LN^;G9qIl=fbasq&qTq<22!zjc-?(dzlklV0WycSjOfg=OJ=e zZs?l1+ZR!x=~a^*zbl4;1#-C>k)~s1zP{kyVdl-1UntRn;Bn-liLj}4!wz*@g4ZNJ zqoptDZ7GneZIe}8aU9+iA&3mLW*TJQ>LWMXe<1KP zo}x=mhkN5f7xD(aaJgO6tx$jCIEH(h3u-gkHhw+z&u*1`e7Vsx_OZ|88nc(T43JF9 z*OxmGNzn0^D5aj!%P8n;&R%a!u^Y-PijH?RqpNh_qdT7yulS4{1A4%UzR>hm9-=D! zfeDV#99U6N(+v(Tum-`@{inlNe_@yI(KTEN3hRQ}lh<{fXHXN$8ipaE7m?m#LWj_i zCLl#YdI`McrChvo&fI(M+_Qha z+1Z(Qf9=jYJJ0*A?JT9G{jHBX8%2&sfxpm#m;HzbEZZrx;0b^9U%go9)?!iVWl|)uXo<5A`9MRhEd}nKT z`R>R%7nAyjQGEFJ{+v)g9L})7b_nqfk8I^SEH=k4+@%KT0_0K;g~9wm<34g4FU_NJkz5|o^X70goa+KV3>^N{Vvt^ zu!Xv2JNG1`5o-~CW%|$)^UAo1uVejU;D#)bOCp=1P`~7XjG%o3?3tw8RTT6@&Np2S4-W1KQd|C){<-7+MC( zJI##K#PfJ7H#p}~^eGscy>ZYUlack_M9!B!`ruhoRY~8&o6ob1hVDRentRYfmE;?{ zNFQbY2li%J$^r1Nj%|8QKfg{+TP1Jb^=V^cbqe`a)PAt^K0?h(IbeFU+nMepH`EXb zZhUvK)Z0^4zv>$#`bh<)MZ1y>=UtJQp>7f9_&nUWY5ZfK1&q?rDr8eq(vHqa7CfU3 zaa`;l_RO8VSh)cH$yEOvsjjyR0T`E}ezVof8s$70q(nrgm%KI0f7t3^X9qD2q{|KU zd$;b3y9cyddHGDsT|FnjU%9IxfeGv3Y<1Ax_%Cje2ptxgeyaOy08PbdPpHYl(-#8= zs9EDGj95DfCmCBczw*&c*8+ae>G_gL=2&sWdPIu!k@JKp{~O86=M4?2WWlu9=CvRA zquc@s#hV7W&jQaD(&fHbU5lL(pme>KN-8vni|cxZ^M^Lzpg6zd*apxdS8$i3va@p|aBe|rl zf>^5hTbwS~o#kJ2kv%|BYWlaM)csQGBnoQWI?rv@|>vZ?|YJG>Po4M(1^Sn#e%OK{O#8hs$=v+s5jj zMbn--=;=J!53YYb-=~$yIFyzt(zqFH#wHW)iJWhi4k+Rkv3efRBUzr2HfKOy0W9V6 zwY`6fJ@^F0(i6qiqabTqQY%1K7{iKI?h_VM=05h3Mbf`0@B*-QW2QegVuReAS!1F4 zB})Rf^|+nBp`Q<}ceP+XZ^;&Y6hrCGXzSmsRIiYpD;V}|PFahY$8UQw!P37yEW|11 ztA?(&ZLjKHWNgFM_p;Rk$scx2RV}@s7AXs9Hl9H7TO49}Z`*Ur-~J*L&rknFcKXH# zMg@+Tik5lTDQMM=XF<>EDgD>hzfolJd)I#zP}NQ0>ryeiC-hT0KGa;ZW|GEiGF_l@ z3-r0p>sv`_F+?Pbimn&V;#qtxzfRXrq^ zgh`g z*Q0GSsl#O_E6>kpUo_C)`LWi9SFaH*@It$y1fYp#7p645r4&(&kmMfANQQWt4r-B> z{!SMRXO&BT+2nqyO%+vUG5?aaA%Neaj5-l zV0-q-IYBsy?ocG20EFX|=5euIr%c zr!KQ;c%@6`!Yj(U>>I*z2Il8FH_hU)GgAs~TnifRSm0G|&pxZ8vnVTx&3;Hi@W^hK z*VE<{3&9%X4(*@ve*RHHc{>37K*v8OjYx^yF!%6d)17y^1kI9WsT3Y(GP)~xP>va2 zhu+XN4A|+r#`oEPq4fck>f}~AdskF8)f$+c@q%_9p7Xu7u;o*5yFnZ0qwaegJUQ}w z@Qw~y3JG)7JUQ($?(;kf2wvD1v-OfNv}V}=Ku-5I`(VTo#P*ZCg04lJ%N0lCgLguG za88e3T!sccw+3qTytFH7Pg%$ZKVYO6xyN+Oqnm0U5UAupD)*#3d{(MEl28w@LWpp= zrj0Er+llCh>(%OGZXw4w{dj7rbfvrJ0#||lLjF$Xg<%I&{#%BXp_-d2Sv_Brsh%8& zr1-hKbl}9>UHG4E6mNt!UMG*V@s>KTMsEQfd#CpH4)i`v@apP9%u&{Ojm+uh??6dSQV@-5)I&I0?pahd{F1hvXlR&KB2T z(Xt{RUX>13e>~myElZ{kd7XIw1Fl@(#=5)+#du?6DYan)nYhPw|M~tiJ#tQm<+@c^ z4g)*0C8EU5+7`DbZhvKwe&g&%kPWJd-B|R5S>tWGZ{H|`>9_~4xQH=E3-=Wfwr`(j zV(6P+SW$)+8)>4i_E0}m8bf48(isgUF;y0l{5&J#Oh};7%yH(QILN&)C0*I&FnHWDBY|YwJC#G7^)u|EynBn(N)VnO8TS z;1CK_t(jNpwOI=2nwEYwCES_{N;g8)O|XZeMHzG5@KB4Ro|GShTiq!`SLIc|5A`XB z#Az#;L<(9_BLn3;k^~%Op4Bf_%c}AP3kv_8C!mxkH^&n;5#ZR1^B|@o>OY~I1#$Y z%x0ALIdOftFpw1qh<3()dw~JiRjWM{6i}1a^cT$qy_lrjMm>}ur`T65ODWC0P7tBfM7EcfiwpH z&zAfpO+=&)0sbZaKPKhx%72}Ky+j~0fQ}zakpz?j7z$$5l7MP}4k2vR@A+pawkZjy T2zac6Jxl^}k+H@BFL(MEW~!7Q diff --git a/custom_components/audi_dashboard/frontend/audi-dashboard-app.js b/custom_components/audi_dashboard/frontend/audi-dashboard-app.js index 8a3ad33..46e88ef 100644 --- a/custom_components/audi_dashboard/frontend/audi-dashboard-app.js +++ b/custom_components/audi_dashboard/frontend/audi-dashboard-app.js @@ -1288,14 +1288,53 @@ function kmProTagAusFahrten() { function meldungsPrognose(art) { const fm = fahrzeugMeldungRoh(art); const zeitDatum = fm.ts && gueltigesDatum(new Date(fm.ts)) ? new Date(fm.ts) : null; - if (fm.km == null) return zeitDatum ? { datum: zeitDatum, durchZeitlimit: true } : null; + if (fm.km == null) return zeitDatum ? { datum: zeitDatum, durchZeitlimit: true, restKm: null } : null; const restKm = Math.abs(fm.km); - if (restKm <= 0) return { datum: heute(), durchZeitlimit: false }; + if (restKm <= 0) return { datum: heute(), durchZeitlimit: false, restKm }; const rate = kmProTagAusFahrten(); - if (!rate) return zeitDatum ? { datum: zeitDatum, durchZeitlimit: true } : null; + if (!rate) return zeitDatum ? { datum: zeitDatum, durchZeitlimit: true, restKm } : null; const kmDatum = new Date(heute().getTime() + (restKm / rate) * dTag); const durchZeitlimit = !!(zeitDatum && zeitDatum < kmDatum); - return { datum: durchZeitlimit ? zeitDatum : kmDatum, durchZeitlimit }; + return { datum: durchZeitlimit ? zeitDatum : kmDatum, durchZeitlimit, restKm }; +} + +/* Eigenes (kürzeres) Intervall ganz ohne Servicebucheintrag: die + Fahrzeugmeldung kennt nur das Herstellerintervall, nicht die in + "Einrichten" gewählte kürzere Vorgabe. Ein angenommener letzter Service + wird aus der gemeldeten Fälligkeit und der bekannten Herstellerintervall- + Länge zurückgerechnet ("Fälligkeitspunkt minus Herstellerintervall"), und + das eigene Intervall ab demselben angenommenen Punkt neu hochgerechnet - + eine Näherung (der wahre letzte Service kann näher oder ferner liegen), + aber ohne sie würde die eigene Intervallwahl bis zum ersten + Servicebucheintrag komplett ignoriert (siehe oelMeldungsPrognose()). */ +function meldungsPrognoseEigenesIntervall(fm, herstellerKm, herstellerMonate, eigenKm, eigenMonate) { + if (fm.km == null || !herstellerKm || eigenKm == null) return null; + const restKm = Math.max(0, Math.abs(fm.km) - herstellerKm + eigenKm); + let zeitDatum = null; + if (fm.ts && gueltigesDatum(new Date(fm.ts)) && herstellerMonate != null && eigenMonate != null) { + zeitDatum = new Date(fm.ts); + zeitDatum.setMonth(zeitDatum.getMonth() + (eigenMonate - herstellerMonate)); + } + if (restKm <= 0) return { datum: heute(), durchZeitlimit: false, restKm }; + const rate = kmProTagAusFahrten(); + if (!rate) return zeitDatum ? { datum: zeitDatum, durchZeitlimit: true, restKm } : null; + const kmDatum = new Date(heute().getTime() + (restKm / rate) * dTag); + const durchZeitlimit = !!(zeitDatum && zeitDatum < kmDatum); + return { datum: durchZeitlimit ? zeitDatum : kmDatum, durchZeitlimit, restKm }; +} + +/* Fällt ganz ohne Servicebucheintrag auf die Fahrzeugmeldung zurück - bei + Herstellervorgabe unverändert (die Meldung IST die Herstellervorgabe), bei + eigenem (kürzerem) Intervall über meldungsPrognoseEigenesIntervall() + hochgerechnet, damit die Intervallwahl in "Einrichten" auch ganz ohne + Servicebucheintrag etwas bewirkt. Fehlen die Herstellerwerte selbst (kein + Sensor dafür), fällt das sanft auf die reine Meldung zurück. */ +function oelMeldungsPrognose() { + const oel = CAR.oel; + if (oel.modus === "hersteller") return meldungsPrognose("Ölwechsel"); + const fm = fahrzeugMeldungRoh("Ölwechsel"); + const eigen = meldungsPrognoseEigenesIntervall(fm, oel.herstellerKm, oel.herstellerMonate, oel.km, oel.monate); + return eigen || meldungsPrognose("Ölwechsel"); } function oelwechselPrognose() { @@ -1437,29 +1476,82 @@ function vHome() { ${teaser()}`; } +/* Kreis-Häkchen (ok) / Kreis-Kreuz (nicht ok) / Kreis-Fragezeichen (unbekannt) + statt eines einfarbigen Punkts - Zustand ist so schon am Symbol selbst + erkennbar, nicht nur an der Farbe. Nur für die Sicherheit-Ansicht (vSicherheit()/ + vTuerenKlappen()) gedacht, der übrige Bestand behält den einfachen .dot. */ +function statusKreis(ok) { + const klasse = ok === null ? "warn" : ok ? "" : "bad"; + const glyph = ok === null + ? '' + : ok + ? '' + : ''; + return ``; +} + +/* Gruppiert die flache CAR.sicherheitscheck-Liste (siehe _sicherheitscheck() + in veroeffentlichung.py) nach ihrem "gruppe"-Feld. ok ist null, sobald ein + einziger Punkt der Gruppe unbekannt ist, oder wenn die Gruppe ganz ohne + Einträge dasteht (kein Sensor dieser Rolle im Setup-Menü zugeordnet) - + nie true durch eine leere Liste erschlichen. */ +function sicherheitsGruppe(gruppe) { + const eintraege = CAR.sicherheitscheck.filter((e) => e.gruppe === gruppe); + const ok = eintraege.length === 0 || eintraege.some((e) => e.ok === null) + ? null + : eintraege.every((e) => e.ok); + return { eintraege, ok }; +} + function vSicherheit() { - const eintraege = CAR.sicherheitscheck; const g = CAR.gesichert; - const offen = eintraege.filter((e) => e.ok === false).length; - const unbekannt = eintraege.filter((e) => e.ok === null).length; - const sammelText = g === null - ? `${unbekannt} von ${eintraege.length} Punkten liefern derzeit keinen Wert` - : g ? "Fahrzeug ist sicher abgestellt" : `${offen} Punkt${offen === 1 ? "" : "e"} prüfen`; - /* C6: Draufsicht oben, grüne Sammelmeldung, dann die Prüfliste - dieselbe - Reihenfolge wie der Fahrzeugstatus in der myAudi-App. */ + const verriegelt = sicherheitsGruppe("verriegelt"); + const tuerenKlappen = sicherheitsGruppe("tueren_klappen"); + const fensterDach = sicherheitsGruppe("fenster_dach"); + const licht = sicherheitsGruppe("licht"); + const sammelText = g === null ? "Zustand nicht vollständig bekannt" : g ? "Fahrzeug ist sicher abgestellt" : "Bitte prüfen"; + // Jede Zeile nennt beim Nutzer-Zustand ("ok") genau die Formulierung, die + // der Nutzer vorgegeben hat - beim Licht ist das "Kein Licht", nicht + // "Licht ausgeschaltet" (das beschreibt nur die Prüfung, nicht den Wert). + const zeile = (label, ok, labelBad, labelWarn, route) => { + const text = ok === null ? labelWarn : ok ? label : labelBad; + const klickbar = !!route; + return `<${klickbar ? "button" : "div"} class="row sicherheitszeile"${klickbar ? ` data-go="${route}:x"` : ""}> + ${statusKreis(ok)} + ${esc(text)} + ${klickbar ? '' : ""} + `; + }; + /* C6: Draufsicht oben, grüne Sammelmeldung, dann die vier Sammelzeilen - + dieselbe Reihenfolge wie der Fahrzeugstatus in der myAudi-App. */ return `
${bildMitPlatzhalter(`/local/bilder/draufsicht.webp?v=${bildVersion}`, "draufsicht.webp", "Draufsicht", "carfix klein")}
- + ${statusKreis(g)} ${esc(sammelText)}
-
Geprüfte Punkte +
+ ${zeile("Fahrzeug verriegelt", verriegelt.ok, "Fahrzeug nicht verriegelt", "Verriegelung unbekannt")} + ${zeile("Türen und Klappen geschlossen", tuerenKlappen.ok, "Türen oder Klappen offen", "Türen/Klappen unbekannt", "tuerenklappen")} + ${zeile("Fenster und Dach geschlossen", fensterDach.ok, "Fenster oder Dach offen", "Fenster/Dach unbekannt")} + ${zeile("Kein Licht", licht.ok, "Licht eingeschaltet", "Licht unbekannt")} +
`; +} + +/* Detailansicht zu "Türen und Klappen geschlossen" - jede Tür einzeln, + Motorhaube, Kofferraum. Einzige der vier Sammelzeilen mit eigener + Detailseite (siehe vSicherheit()), im Stil der früheren flachen + "Geprüfte Punkte"-Liste. */ +function vTuerenKlappen() { + const eintraege = sicherheitsGruppe("tueren_klappen").eintraege; + return ` +
Türen und Klappen
${eintraege.length ? eintraege.map((e, i, arr) => `
${esc(e.label)}
- ${e.ok === null ? "unbekannt" : e.ok ? "in Ordnung" : "prüfen"} + ${e.ok === null ? "unbekannt" : e.ok ? "zu" : "offen"}
`).join("") : `
Keine Daten verfügbar
`}
@@ -1837,10 +1929,15 @@ function vService() { const eigenOel = t.art === "Ölwechsel" ? oelwechselPrognose() : null; const eigenInsp = t.art === "Inspektion" ? inspektionPrognose() : null; // Ganz ohne Servicebucheintrag (eigenOel/eigenInsp beide null) übernimmt - // die Fahrzeugmeldung selbst die Rolle der Prognosequelle, hochgerechnet - // mit der echten Fahrleistung aus dem Fahrtenlog statt einer - // Servicebuch-Rate - siehe meldungsPrognose(). - const meldungProg = hatMeldung && !eigenOel && !eigenInsp ? meldungsPrognose(t.art) : null; + // die Fahrzeugmeldung selbst die Rolle der Prognosequelle - bei + // Herstellervorgabe unverändert, beim Ölwechsel mit eigenem (kürzerem) + // Intervall über oelMeldungsPrognose() auf dieses umgerechnet, statt es + // bis zum ersten Servicebucheintrag zu ignorieren (siehe deren + // Kommentar). Hochgerechnet wird dabei mit der echten Fahrleistung aus + // dem Fahrtenlog statt einer Servicebuch-Rate. + const meldungProg = hatMeldung && !eigenOel && !eigenInsp + ? (t.art === "Ölwechsel" ? oelMeldungsPrognose() : meldungsPrognose(t.art)) + : null; // Bei Herstellervorgabe rechnet die eigene Prognose ohnehin schon mit dem // Herstellerintervall - die Restkilometerzahl daneben waere nur eine // zweite, verwirrende km-Angabe neben dem Fahrzeug-Wert oben. Nur beim @@ -1850,7 +1947,11 @@ function vService() { ? `voraussichtlich am ${dedat(eigenOel.datum)}` : `${de(eigenOel.restKm)} km, voraussichtlich am ${dedat(eigenOel.datum)}`) : eigenInsp ? `voraussichtlich am ${dedat(eigenInsp.datum)}` - : meldungProg ? `voraussichtlich am ${dedat(meldungProg.datum)}` : ""; + : meldungProg + ? (t.art === "Ölwechsel" && CAR.oel.modus !== "hersteller" && meldungProg.restKm != null + ? `${de(meldungProg.restKm)} km, voraussichtlich am ${dedat(meldungProg.datum)}` + : `voraussichtlich am ${dedat(meldungProg.datum)}`) + : ""; const wert = hatMeldung ? `${fm.km != null ? de(fm.km) + " km" : ""}${fm.km != null && fmDatum ? " / " : ""}${fmDatum || ""}` : (eigenOel ? de(eigenOel.restKm) + " km · " + dedat(eigenOel.datum) : (anzeige.km !== null ? de(anzeige.km) + " km · " : "") + dedat(anzeige.datum)); @@ -1961,9 +2062,26 @@ function termine() { oelTermin.zuerst = oelTermin.datum && oelProg.datum >= oelTermin.datum ? "zeit" : "km"; oelTermin.ziel = oelTermin.zuerst === "km" ? oelProg.datum : oelTermin.datum; } + const inspTermin = bauen("Inspektion", letzterEintrag("inspektion"), 30000, 24); + // Ganz ohne Servicebucheintrag (kein basis) übernimmt die Fahrzeugmeldung + // selbst die Rolle der Prognosequelle - genau wie vService()'s eigenes + // meldungProg das schon tut (siehe dessen Kommentar dort). Ohne diesen + // Fallback hier zeigte "Übersicht" trotz korrekt gemeldeter Fälligkeit nur + // "kein Eintrag im Servicebuch", während "Service" dieselbe Meldung + // längst richtig anzeigte - zwei Ansichten, ein Datenstand, zwei + // widersprüchliche Aussagen. + [oelTermin, inspTermin].forEach((termin) => { + if (termin.basis) return; + const m = termin.art === "Ölwechsel" ? oelMeldungsPrognose() : meldungsPrognose(termin.art); + if (!m) return; + termin.km = m.restKm != null && CAR.odoBekannt ? CAR.odo + m.restKm : null; + termin.kmDatum = m.datum; + termin.zuerst = "km"; + termin.ziel = m.datum; + }); return [ oelTermin, - bauen("Inspektion", letzterEintrag("inspektion"), 30000, 24), + inspTermin, bauen("Hauptuntersuchung", letzterEintrag("hauptuntersuchung"), null, 24, CAR.erstzulassung && CAR.erstzulassung.includes("/") ? `01.${CAR.erstzulassung.replace("/", ".")}` : null), ]; @@ -3404,6 +3522,7 @@ const ZURUECK = { Zurück-Pfeil. */ sicherheit: "home", standort: "home", + tuerenklappen: "sicherheit", }; const ICON = { sonne: '', @@ -3748,6 +3867,7 @@ function render() { else if (route.name === "einst") { head = ["App", "Einstellungen"]; v.innerHTML = vEinst(); } else if (route.name === "ident") { head = ["Fahrzeug", "Identität und Technik"]; v.innerHTML = vIdent(); } else if (route.name === "sicherheit") { head = ["Fahrzeug", "Sicherheit"]; v.innerHTML = vSicherheit(); } + else if (route.name === "tuerenklappen") { head = ["Fahrzeug", "Türen und Klappen"]; v.innerHTML = vTuerenKlappen(); } else if (route.name === "vers") { head = ["Fahrzeug", "Versicherung/Steuer"]; v.innerHTML = vVers(); } else if (route.name === "beitrag") { head = ["Versicherung", "Beitrag anpassen"]; v.innerHTML = vBeitrag(); } else if (route.name === "vertragsdetails") { head = ["Versicherung", "Vertragsdetails"]; v.innerHTML = vVertragsdetails(); } diff --git a/custom_components/audi_dashboard/frontend/audi-dashboard.css b/custom_components/audi_dashboard/frontend/audi-dashboard.css index 0f01763..9c31da8 100644 --- a/custom_components/audi_dashboard/frontend/audi-dashboard.css +++ b/custom_components/audi_dashboard/frontend/audi-dashboard.css @@ -411,6 +411,26 @@ button.tile, .tilebtn { transition: background .15s, transform .1s; } :has() grenzt das Umbrechen auf genau die Zeilen ein, die eine Fussnote fuehren - alle anderen .row bleiben unveraendert einzeilig. */ .row:has(.row-fussnote) { flex-wrap: wrap; } +/* Sammelzeilen der Sicherheit-Ansicht (vSicherheit()): Kreis-Häkchen + Text + + optionaler Chevron statt dt/dd. Erbt Abstand/Trennlinie von .row, ersetzt + aber dessen space-between-Layout und setzt die Button-Vorgaben zurück, wenn + die Zeile klickbar ist (Türen und Klappen). */ +.sicherheitszeile { + justify-content: flex-start; + width: 100%; + background: none; + border: none; + border-bottom: 1px solid var(--line); + font: inherit; + color: inherit; + text-align: left; + cursor: default; +} +button.sicherheitszeile { cursor: pointer; } +button.sicherheitszeile:active { background: var(--tile-2); } +.sicherheitsliste .sicherheitszeile:last-child { border-bottom: 0; } +.sicherheitszeile-text { flex: 1; font-size: 14.5px; color: var(--fg); } +.sicherheitszeile .chev { margin-left: auto; } .row-fussnote { flex: 1 0 100%; text-align: left; @@ -451,6 +471,12 @@ button.tile, .tilebtn { transition: background .15s, transform .1s; } .dot { width: 11px; height: 11px; border-radius: 50%; flex: 0 0 auto; background: var(--ok); display: inline-block; } .dot.warn { background: var(--warn); } .dot.bad { background: var(--bad); } +/* Kreis-Häkchen statt einfarbigem Punkt - für die Sicherheit-Ansicht + (vSicherheit()/vTuerenKlappen()), nach Nutzer-Vorlage: erfüllt/offen/ + unbekannt sofort am Symbol erkennbar, nicht nur an der Farbe. */ +.statuskreis { width: 22px; height: 22px; border-radius: 50%; flex: 0 0 auto; background: var(--ok); display: inline-flex; align-items: center; justify-content: center; } +.statuskreis.warn { background: var(--warn); } +.statuskreis.bad { background: var(--bad); } .status .t { font-size: 14px; color: var(--fg); } .status { transition: opacity .15s; } .status:active { opacity: .55; } diff --git a/custom_components/audi_dashboard/manifest.json b/custom_components/audi_dashboard/manifest.json index 6520c29..dc1e023 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.24.6", + "version": "2026.8.24.8", "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/custom_components/audi_dashboard/veroeffentlichung.py b/custom_components/audi_dashboard/veroeffentlichung.py index c4199ea..998d577 100644 --- a/custom_components/audi_dashboard/veroeffentlichung.py +++ b/custom_components/audi_dashboard/veroeffentlichung.py @@ -94,26 +94,49 @@ def _standort(hass: HomeAssistant, werte: Sensorzuordnung) -> dict: def _sicherheitscheck(hass: HomeAssistant, werte: Sensorzuordnung) -> list[dict]: - """Die einzeln geprüften Punkte hinter "Sicher abgestellt", fürs Frontend - (Klick auf den Status öffnet diese Liste mit einem grünen/roten/grauen - Punkt je Zeile). + """Die einzeln geprüften Punkte hinter "Sicher abgestellt", fürs Frontend - + gruppiert über das Feld "gruppe" in vier Sammelzeilen (Fahrzeug verriegelt + / Türen und Klappen geschlossen / Fenster und Dach geschlossen / Licht + ausgeschaltet), die die Oberfläche durch Gruppieren dieser flachen Liste + berechnet, statt hier schon vier separate Listen zu bauen - eine flache + Liste bleibt die einfachere, additive Änderung gegenüber dem, was das + Frontend vorher schon kannte. "ok" ist None, wenn der Sensor fehlt oder nicht verfügbar ist - genau daraus leitet sich auch die zusammengefasste Kennzahl unten ab, damit - beide nie auseinanderlaufen können.""" + beide nie auseinanderlaufen können. Alle binary_sensor-device_classes + hier (door/window/opening/lock/light) folgen HAs eigener Konvention "off + = der gute Zustand" (zu/verriegelt/kein Licht) - ein einziges Prüfmuster + für alle Zeilen, kein Sonderfall je Art.""" eintraege: list[dict] = [] for pos, sensor in zip(POSITIONEN, werte.TUER_SENSOREN): w = zustand_oder_none(hass, sensor) - eintraege.append({"label": f"Tür {pos}", "ok": None if w is None else w == "off"}) + eintraege.append({"label": f"Tür {pos}", "ok": None if w is None else w == "off", "gruppe": "tueren_klappen"}) for pos, sensor in zip(POSITIONEN, werte.FENSTER_SENSOREN): w = zustand_oder_none(hass, sensor) - eintraege.append({"label": f"Fenster {pos}", "ok": None if w is None else w == "off"}) + eintraege.append({"label": f"Fenster {pos}", "ok": None if w is None else w == "off", "gruppe": "fenster_dach"}) + # "Kofferraum" statt "Heckklappe": alltagssprachlicher Name für dieselbe + # Öffnung beim Avant/Kombi - das Sensorfeld HECKKLAPPE_SENSOR selbst + # bleibt unverändert, um eine bestehende Zuordnung nicht zu brechen. for label, sensor in ( - ("Heckklappe", werte.HECKKLAPPE_SENSOR), + ("Kofferraum", werte.HECKKLAPPE_SENSOR), ("Motorhaube", werte.HAUBE_SENSOR), ): w = zustand_oder_none(hass, sensor) - eintraege.append({"label": label, "ok": None if w is None else w == "off"}) + eintraege.append({"label": label, "ok": None if w is None else w == "off", "gruppe": "tueren_klappen"}) + for pos, sensor in zip(POSITIONEN, werte.TUERSCHLOSS_SENSOREN): + w = zustand_oder_none(hass, sensor) + eintraege.append({"label": f"Türschloss {pos}", "ok": None if w is None else w == "off", "gruppe": "verriegelt"}) + for label, sensor in ( + ("Kofferraum-Schloss", werte.HECKKLAPPE_SCHLOSS_SENSOR), + ("Motorhauben-Schloss", werte.HAUBE_SCHLOSS_SENSOR), + ): + w = zustand_oder_none(hass, sensor) + eintraege.append({"label": label, "ok": None if w is None else w == "off", "gruppe": "verriegelt"}) + w = zustand_oder_none(hass, werte.DACH_SENSOR) + eintraege.append({"label": "Dach", "ok": None if w is None else w == "off", "gruppe": "fenster_dach"}) + w = zustand_oder_none(hass, werte.LICHT_SENSOR) + eintraege.append({"label": "Standlicht", "ok": None if w is None else w == "off", "gruppe": "licht"}) return eintraege diff --git a/tests/aktualisierung/test_aktualisierung.py b/tests/aktualisierung/test_aktualisierung.py index d0d7fb4..7ecc2e4 100644 --- a/tests/aktualisierung/test_aktualisierung.py +++ b/tests/aktualisierung/test_aktualisierung.py @@ -24,6 +24,7 @@ import sys import tempfile import unittest import zipfile +from unittest import mock _HIER = os.path.dirname(os.path.abspath(__file__)) sys.path.insert( @@ -81,13 +82,42 @@ class ErfolgreicherTausch(unittest.TestCase): self.assertFalse(os.path.exists(os.path.join(self.integration, "alte_datei.py"))) # Alte Fassung bleibt vollständig und unverändert im Backup-Ordner. - with open(os.path.join(self.backup, "manifest.json"), "rb") as f: + with open(os.path.join(self.backup, "manifest.json.bak"), "rb") as f: self.assertIn(b'"2026.1.1.1"', f.read()) self.assertTrue(os.path.exists(os.path.join(self.backup, "alte_datei.py"))) + # manifest.json selbst existiert im Backup-Ordner NICHT mehr - sonst + # würde HA ihn beim nächsten Neustart als zweite Integration mit + # derselben Domain laden (siehe Moduldocstring in aktualisierung.py). + self.assertFalse(os.path.exists(os.path.join(self.backup, "manifest.json"))) + # Kein Staging-Rest übrig. self.assertFalse(os.path.exists(self.staging)) + def test_rollback_stellt_manifest_der_alten_fassung_wieder_her(self): + """Schlägt der zweite Rename fehl, muss der Backup-Ordner nicht nur + zurückbenannt werden, sondern auch sein manifest.json - sonst stünde + die wiederhergestellte alte Fassung ohne gültiges Manifest da.""" + zip_bytes = _zip_bauen({ + "manifest.json": _GUELTIGES_MANIFEST, + "neue_datei.py": b"# neue Fassung\n", + }) + echter_rename = os.rename + + def zweiten_rename_kaputt_machen(src, dst): + if src == self.staging and dst == self.integration: + raise OSError("simulierter Fehler") + echter_rename(src, dst) + + with mock.patch("aktualisierung.os.rename", side_effect=zweiten_rename_kaputt_machen): + with self.assertRaises(a.AktualisierungsFehler): + a.entpacken_pruefen_tauschen(zip_bytes, self.integration, self.staging, self.backup) + + with open(os.path.join(self.integration, "manifest.json"), "rb") as f: + self.assertIn(b'"2026.1.1.1"', f.read()) + self.assertTrue(os.path.exists(os.path.join(self.integration, "alte_datei.py"))) + self.assertFalse(os.path.exists(self.backup)) + def test_entfernt_pycache_aus_dem_staging_ordner(self): zip_bytes = _zip_bauen({ "manifest.json": _GUELTIGES_MANIFEST,