From 02fa01b23003eb4429392092cd0282d44a11cea8 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Jan=20B=C3=BCren?=
- <DirectoryMatch "(\.git|config)/"> + <DirectoryMatch "/(\.git|config)/"> Require all denied </DirectoryMatch>
diff --git a/doc/html/ch02s12.html b/doc/html/ch02s12.html index 5faec2fe0..5f783e5ef 100644 --- a/doc/html/ch02s12.html +++ b/doc/html/ch02s12.html @@ -14,8 +14,8 @@
zypper install texlive-collection-latex texlive-collection-latexextra \ texlive-collection-latexrecommended texlive-collection-langgerman \ texlive-collection-langenglish
-
kivitendo bringt drei alternative Vorlagensätze mit:
RB
f-tex
rev-odt
Der ehemalige Druckvorlagensatz "Standard" wurde mit der Version - 3.3 entfernt, da er nicht mehr gepflegt wurde.
Es lässt sich ein initialer Vorlagensatz erstellen. Die +
Anmerkung | |
---|---|
kivitendo erwartet eine aktuelle TeX Live Umgebung, um PDF/A zu erzeugen. Aktuelle Distributionen von 2020 erfüllen diese. Ãberprüfbar ist dies mit dem Aufruf des installation_check.pl mit Parameter -l: scripts/installations_check.pl -l |
kivitendo bringt drei alternative Vorlagensätze mit:
RB
marei
rev-odt
Der ehemalige Druckvorlagensatz "f-tex" wurde mit der Version + 3.6 entfernt, da er nicht mehr gepflegt wird.
Es lässt sich ein initialer Vorlagensatz erstellen. Die LaTeX-System-Abhängigkeiten hierfür kann man prüfen mit:
./scripts/installation_check.pl -lv
Der Angemeldete Benutzer muss in einer Gruppe sein, die über das Recht "Konfiguration -> Mandantenverwaltung" verfügt. Siehe auch Abschnitt 2.9.4, âGruppen anlegenâ.
Im Userbereich lässt sich unter: "
@@ -24,7 +24,7 @@ Druckvorlagen aus Vorlagensatz erstellen" auswählen.
Vorlagen auswählen
: Wählen Sie hier den
Vorlagensatz aus, der kopiert werden soll
- (RB
, f-tex
oder
+ (RB
, marei
oder
odt-rev
.)
Neuer Name
: Der Verzeichnisname für den
neuen Vorlagensatz. Dieser kann im Rahmen der üblichen Bedingungen
@@ -44,102 +44,7 @@
werden, z.B. für Kopf- und FuÃzeilen, und Infos wie
Bankdaten
mehrere vordefinierte Varianten für Logos/Hintergrundbilder
Berücksichtigung für Steuerzonen "EU mit USt-ID Nummer" oder - "AuÃerhalb EU"
Ein Vorlagensatz, der in wenigen Minuten alle Dokumente zur - Verfügung stellt.
Keine Redundanz. Es wird ein- und dieselbe LaTeX-Vorlage - für alle briefartigen Dokumente verwendet. Also Angebot, - Rechnung, Proformarechnung, Lieferschein, aber eben nicht für - Paketaufkleber etc.
Leichte Anpassung an das Firmen-Layout durch Verwendung - eines Hintergrund-PDFs. Dieses kann leicht mit dem eigenen - Lieblingsprogramm erstellt werden (Openoffice, Inkscape, Gimp, - Adobe*)
Hintergrund-PDF umschaltbar auf "nur erste Seite"
- (Standard) oder "alle Seiten" (Option
- "bgPdfFirstPageOnly
" in Datei
- letter.lco
)
Hintergrund-PDF für Ausdruck auf bereits bedrucktem
- Briefpapier abschaltbar. Es wird dann nur bei per E-Mail
- versendeten Dokumenten eingebunden (Option
- "bgPdfEmailOnly
" in Datei
- letter.lco
).
Nutzung der Layout-Funktionen von LaTeX für Seitenumbruch, - Wiederholung von Kopfzeilen, Zwischensummen etc. (danke an - Kai-Martin Knaak für die Vorarbeit)
Anzeige des Empfängerlandes im Adressfeld nur, wenn es vom - Land des eigenen Unternehmens abweicht (also die Rechnung das - Land verlässt).
Multisprachfähig leicht um weitere Sprachen zu erweitern,
- alle Ãbersetzungen in der Datei
- translatinos.tex
.
Auflistung von Bruttopreisen für Endverbraucher.
Vorlagenverzeichnis mit Option f-tex anlegen, siehe: Vorlagenverzeichnis anlegen. Das Vorlagensystem - funktioniert jetzt schon, hat allerdings noch einen - Beispiel-Briefkopf.
Erstelle eine pdf-Hintergrund Datei und verlinke sie nach
- ./letter_head.pdf
.
Editiere den Bereich "settings
" in der
- datei letter.lco
.
oder etwas detaillierter:
Es wird eine Datei sample.lco
erstellt
- und diese nach letter.lco
verlinkt. Eigentlich
- ist dies die Datei die für die firmenspezifischen Anpassungen
- gedacht ist. Da die Einstiegshürde in LaTeX nicht ganz niedrig ist,
- wird in dieser Datei auf ein Hintergrund-PDF verwiesen. Ich empfehle
- über dieses PDF die persönlichen Layoutanpassungen vorzunehmen und
- sample.lco
unverändert zu lassen. Die Anpassung
- über eine *.lco
-Datei, die letztlich auf
- letter.lco
verlinkt ist ist aber auch
- möglich.
Es wird eine Datei sample_head.pdf
mit
- ausgeliefert, diese wird nach letter_head.pdf
- verlinkt. Damit gibt es schon mal eine funktionsfähige Vorlage.
- Schau Dir nach Abschluss der Installation die Datei
- sample_head.pdf
an und erstelle ein
- entsprechendes PDF passend zum Briefkopf Deiner Firma, diese dann im
- Template Verzeichniss ablegen und statt
- sample_head.pdf
nach
- letter_head.pdf
verlinken.
Letzlich muss letter_head.pdf
auf das
- passende Hintergrund-PDF verweisen, welches gewünschten Briefkopf
- enthält.
Es wird eine Datei mydata.tex.example
- ausgeliefert, die nach mytdata.tex
verlinkt
- ist. Bei verwendetem Hintergrund-PDF wird nur der Eintrag für das
- Land verwendet. Die Datei muss also nicht angefasst werden. Die
- anderen Werte sind für das Modul 'lp' (Label Print in erp - zur Zeit
- nicht im öffentlichen Zweig).
Alle Anpassungen zum Briefkopf, Fusszeilen, Firmenlogos, etc.
- sollten über die Hintergrund-PDF-Datei oder die
- *.lco
-Datei erfolgen.
Das Konzept von kivitendo sieht vor, für jedes Dokument - (Auftragsbestätigung, Lieferschein, Rechnung, etc.) eine - LaTeX-Vorlage vorzuhalten, dies ist sehr wartungsunfreundlich. Auch - das Einlesen einer einheitlichen Quelle für den Briefkopf bringt nur - bedingte Vorteile, da hier leicht die Pflege der Artikel-Tabellen - aus dem Ruder läuft. Bei dem vorliegenden Ansatz wird für alle - briefartigen Dokumente mit Artikel-Tabellen eine einheitliche - LaTeX-Vorlage verwendet, welche über Codeweichen die Besonderheiten - der jeweiligen Dokumente berücksichtigt:
Tabellen mit oder ohne Preis
Sprache der Tabellenüberschriften etc.
Anpassung der Bezugs-Zeile (z.B. Rechnungsnummer versus - Angebotsnummer)
Darstellung von Brutto oder Netto-Preisen in der - Auflistung (Endverbraucher versus gewerblicher Kunde)
Nachteil:
LaTeX hat ohnehin eine sehr steile Lehrnkurve. Die Datei
- letter.tex
ist sehr komplex und verstärkt damit
- diesen Effekt noch einmal erheblich. Wer LaTeX-Erfahrung hat, oder
- geübt ist Scriptsparachen nachzuvollziehen kann natürlich auch
- innerhalb der Tabellendarstellung gut persönliche Anpassungen
- vornehmen. Aber man kann sich hier bei Veränderungen sehr schnell
- heftig in den Fuss schiessen.
Wer nicht so tief in die Materie einsteigen will oder leicht
- zu frustrieren ist, sollte sein Hintergrund-PDF auf Basis der
- mitglieferten Datei sample_head.pdf
erstellen,
- und sich an der Form der dargestellten Tabellen, wie sie
- ausgeliefert werden, erfreuen.
Kleiner Tipp: Nicht zu viel auf einmal wollen, lieber kleine, - kontinuierliche Schritte gehen.
Der auszuweisende Bruttopreis wird innerhalb der - LaTeX-Umgebung berechnet. Es gibt zwar ein Feld, um bei Aufträgen - "alle Preise Brutto" auszuwählen, aber:
hierfür müssen die Preise auch in Brutto in der Datenbank - stehen (ja - das lässt sich über die Preisgruppen und die - Zuordung einer Default-Preisgruppe handhaben)
man darf beim Anlegen des Vorgangs nicht vergessen, dieses - Häkchen zu setzen. (Das ist in der Praxis, wenn man sowohl - Endverbraucher als auch Gewerbekunden beliefert, der eigentliche - Knackpunkt)
Es gibt mit f-tex eine weitere Alternative. Die Information ob - Brutto oder Nettorechnung wird mit den Zahlarten verknüpft. - Zahlarten bei denen Rechnungen, Angebote, etc, in Brutto ausgegeben - werden sollen, enden mit "_E" (für Endverbraucher). Falls identische - Zahlarten für Gewerbekunden und Endverbraucher vorhanden sind, legt - man diese einfach doppelt an (einmal mit der Namensendung "_E"). - Gewinn:
Die Entscheidung, ob Nettopreise ausgewiesen werden, ist - nicht mehr fix mit einer Preisliste verbunden.
Die Default-Zahlart kann im Kundendatensatz hinterlegt - werden, und man muss nicht mehr daran denken, "alle Preise - Netto" auszuwählen.
Die Entscheidung, ob Netto- oder Bruttopreise ausgewiesen - werden, kann direkt beim Drucken revidiert werden, ohne dass - sich der Auftragswert ändert.
In Lieferscheinen kommen shipto*
-Variablen
- im Adressfeld zum Einsatz. Wenn die
- shipto*
-Variable leer ist, wird die entsprechende
- Adressvariable eingesetzt. Wenn also die Lieferadresse in StraÃe,
- Hausnummer und Ort abweicht, müssen auch nur diese Felder in der
- Lieferadresse ausgefüllt werden. Für den Firmenname wird der Wert
- der Hauptadresse angezeigt.
Hierbei handelt es sich um einen Dokumentensatz der mit odt-Vorlagen erstellt wurde. Es gibt in dem Verzeichnis eine Readme-Datei, die eventuell aktueller als die Dokumentation hier ist. Die odt-Vorlagen in diesem Verzeichnis "rev-odt" wurden von revamp-it, @@ -166,7 +71,7 @@ die verrechneten Mahngebühren und Verzugszinsen.
Zur Zeit gibt es in kivitendo noch keine Möglichkeit, odt-Vorlagen bei Briefen und Pflichtenheften einzusetzen. Entsprechende Vorlagen sind deshalb nicht vorhanden.
Fehlermeldungen, Anregungen und Wünsche bitte senden an: - empfang@revamp-it.ch
In den allermeisten Installationen sollte das Drucken jetzt + empfang@revamp-it.ch
In den allermeisten Installationen sollte das Drucken jetzt schon funktionieren. Sollte ein Fehler auftreten, wirft TeX sehr lange Fehlerbeschreibungen, der eigentliche Fehler ist immer die erste Zeile, die mit einem Ausrufezeichen anfängt. Häufig auftretende Fehler diff --git a/doc/html/ch02s13.html b/doc/html/ch02s13.html index c59057144..5c4891415 100644 --- a/doc/html/ch02s13.html +++ b/doc/html/ch02s13.html @@ -63,14 +63,14 @@ Verzeichnis umbenannt werden.
Dieses Verzeichnis, wie auch das komplette
users
-Verzeichnis, muss vom Webserver beschreibbar
sein. Dieses wurde bereits erledigt (siehe Manuelle Installation des Programmpaketes), kann aber erneut
- überprüft werden, wenn die Konvertierung nach PDF fehlschlägt.
OpenDocument Vorlagen können Makros enthalten, welche komplexere + überprüft werden, wenn die Konvertierung nach PDF fehlschlägt.
OpenDocument Vorlagen können Makros enthalten, welche komplexere Aufgaben erfüllen.
Der Vorlagensatz "rev-odt" enthält solche Vorlagen mit Schweizer Bank-Einzahlungsscheinen (BESR). Diese Makros haben die Aufgabe, die in den Einzahlungsscheinen benötigte Referenznummer und Kodierzeile zu erzeugen. Hier eine kurze Beschreibung, wie die Makros aufgebaut sind, und was bei ihrer Nutzung zu beachten ist (in fett sind nötige einmalige - Anpassungen aufgeführt):
Damit beim Erstellen von Rechnungen und Aufträgen neben der + Anpassungen aufgeführt):
Damit beim Erstellen von Rechnungen und Aufträgen neben der Standardvorlage ohne Einzahlungsschein weitere Vorlagen (z.B. mit Einzahlungsschein) auswählbar sind, muss für jedes Vorlagen-Suffix ein Drucker eingerichtet werden:
Druckeradministration â Drucker hinzufügen
Mandant wählen
Druckerbeschreibung â aussagekräftiger Text: wird in der @@ -79,11 +79,11 @@ Aufträgen oder Rechnungen als odt-Datei keine Bedeutung, darf aber nicht leer sein)
Vorlagenkürzel â besr bzw. selbst gewähltes Vorlagensuffix (muss genau der Zeichenfolge entsprechen, die zwischen - "invoice_" bzw. "sales_order_" und ".odt" steht.)
speichern
Wer den Ausdruck mit Einzahlungsschein als Standardeinstellung im Rechnungs- bzw. Auftragsformular angezeigt haben möchte, kann dies persönlich für sich bei den Benutzereinstellungen konfigurieren:
Programm â Benutzereinstellungen â Druckoptionen
Standardvorlagenformat â OpenDocument/OASIS
Standardausgabekanal â Bildschirm
Standarddrucker â gewünschte Druckerbeschreibung auswählen - (z.B. mit Einzahlungsschein Bank xy)
Anzahl Kopien â leer
speichern
In der Vorlage sind als Modul "BESR" 4 Makros gespeichert, die aus dem von kivitendo erzeugten odt-Dokument die korrekte Referenznummer inklusive Prüfziffer sowie die Kodierzeile in OCRB-Schrift erzeugen und am richtigen Ort ins Dokument @@ -112,12 +112,12 @@ angepasst werden. Dabei ist darauf zu achten, dass sich die Positionen der Postkonto-Nummern der Bank, sowie der Zeichenfolgen dddfr, DDDREF1, DDDREF2, 609, DDDKODIERZEILE nicht - verschieben.
Im Fussbereich der Rechnungsmaske muss neben Rechnung, OpenDocument/OASIS und Bildschirm die im Adminbereich erstellte Druckerbeschreibung ausgewählt werden, falls diese nicht bereits bei den Benutzereinstellungen als persönlicher Standard gewählt - wurde.
Falls beim Ãffnen einer von kivitendo erzeugten odt-Rechnung + wurde.
Falls beim Ãffnen einer von kivitendo erzeugten odt-Rechnung die Meldung kommt, dass Makros aus Sicherheitsgründen nicht ausgeführt werden, so müssen folgende Einstellungen in LibreOffice angepasst werden:
Extras â Optionen â Sicherheit â Makrosicherheit
Sicherheitslevel auf "Mittel" einstellen (Diese
diff --git a/doc/html/ch03s03.html b/doc/html/ch03s03.html
index e64368eea..fbc4f88d3 100644
--- a/doc/html/ch03s03.html
+++ b/doc/html/ch03s03.html
@@ -617,7 +617,7 @@
invdate
Rechnungsdatum
invnumber
- Rechnungsnummer
Die Variablen in anderen Vorlagen sind ähnlich wie in der
Rechnung. Allerdings heiÃen die Variablen, die mit
inv
beginnen, jetzt anders. Bei den Angeboten
fangen sie mit quo
für "quotation" an:
diff --git a/doc/html/ch03s07.html b/doc/html/ch03s07.html
index ce29a7a81..8831e4e23 100644
--- a/doc/html/ch03s07.html
+++ b/doc/html/ch03s07.html
@@ -1,15 +1,15 @@
Die Klassifizierung von Artikeln dient einer weiteren +
Die Klassifizierung von Artikeln dient einer weiteren Gliederung, um zum Beispiel den Einkauf vom Verkauf zu trennen, gekennzeichnet durch eine Beschreibung (z.B. "Einkauf") und ein Kürzel (z.B. "E"). Für jede Klassifizierung besteht eine Beschreibung und eine Abkürzung die normalerweise aus einem Zeichen besteht, kann aber auf mehrere Zeichen erweitert werden, falls zur Unterscheidung - notwendig. Sinnvoll sind jedoch nur maximal 2 Zeichen.
Als Basisklassifizierungen gibt es
Einkauf
Verkauf
Handelsware
Produktion
- keine - (diese wird bei einer Aktualisierung für alle + notwendig. Sinnvoll sind jedoch nur maximal 2 Zeichen.
Als Basisklassifizierungen gibt es
Einkauf
Verkauf
Handelsware
Produktion
- keine - (diese wird bei einer Aktualisierung für alle existierenden Artikel verwendet und ist gültig für Verkauf und Einkauf)
Es können weitere Klassifizierungen angelegt werden. So kann es - z.B. für separat auszuweisende Artikel folgende Klassen geben:
Lieferung (Logistik, Transport) mit Kürzel L
Material (Verpackungsmaterial) mit Kürzel M
Bisher haben die Klassifizierungen folgende Attribute, die auch + z.B. für separat auszuweisende Artikel folgende Klassen geben:
Lieferung (Logistik, Transport) mit Kürzel L
Material (Verpackungsmaterial) mit Kürzel M
Bisher haben die Klassifizierungen folgende Attribute, die auch alle gleichzeitg gültig sein können
gültig für Verkauf - dieser Artikel kann im Verkauf genutzt werden
gültig für Einkauf - dieser Artikel kann im Einkauf genutzt werden
separat ausweisen - hierzu gibt es zur Dokumentengenerierung @@ -19,7 +19,7 @@ pro separat auszuweisenden Klassifizierungen die Variable< %separate_X_subtotal%>, wobei X das Kürzel der Klassifizierung ist.
Im obigen Beispiel wäre das für Lieferkosten <%separate_L_subtotal%> und für Verpackungsmaterial - <%separate_M_subtotal%>.
Der Typ des Artikels und die Klassifizierung werden durch zwei + <%separate_M_subtotal%>.
Der Typ des Artikels und die Klassifizierung werden durch zwei Buchstaben dargestellt. Der erste Buchstabe ist eine Lokalisierung des Artikel-Typs ('P','A','S'), deutsch 'W', 'E', und 'D' für Ware Erzeugnis oder Dienstleistung und ggf. weiterer Typen.
Der zweite Buchstabe (und ggf. auch ein dritter, falls nötig) diff --git a/doc/html/ch03s08.html b/doc/html/ch03s08.html index 523930e20..06ef0ccb8 100644 --- a/doc/html/ch03s08.html +++ b/doc/html/ch03s08.html @@ -1,10 +1,10 @@
-Parallel zum alten WebDAV gibt es ein Datei-Management-System, +
Parallel zum alten WebDAV gibt es ein Datei-Management-System, das Dateien verschiedenen Typs verwaltet. Dies können
aus ERP-Daten per LaTeX Template erzeugte PDF-Dokumente,
zu bestimmten ERP-Daten gehörende Anhangdateien unterschiedlichen Formats,
per Scanner eingelesene PDF-Dateien,
per E-Mail empfangene Dateianhänge unterschiedlichen - Formats,
sowie speziel für Artikel hochgeladene Bilder sein.
Ãber eine vom Speichermedium unabhängige Zwischenschicht werden + Formats,
sowie speziel für Artikel hochgeladene Bilder sein.
Ãber eine vom Speichermedium unabhängige Zwischenschicht werden die Dateien und ihre Versionen in der Datenbank verwaltet. Darunter können verschiedene Implementierungen (Backends) gleichzeitig existieren:
Dateisystem
WebDAV
Schnittstelle zu externen @@ -23,7 +23,7 @@ für "attachment" und "image" nur die Quelle "uploaded". Für "document" gibt es auf jeden Fall die Quelle "created". Die Quellen "scanner" und "email" müssen derzeit in der Datenbank konfiguriert werden (siehe - Datenbank-Konfigurierung).
Die Daten werden bei den ERP-Objekten als extra Reiter + Datenbank-Konfigurierung).
Die Daten werden bei den ERP-Objekten als extra Reiter dargestellt. Eine Verkaufsrechnung z.B. hat die Reiter "Dokumente" und "Dateianhänge".
Bei den Dateianhängen wird immer nur die aktuelle Version einer Datei angezeigt. Wird eine Datei mit gleichem Namen hochgeladen, so @@ -39,13 +39,13 @@ so sind diese z.B. bei Einkaufsrechnungen sichtbar:
Statt des Löschens wird hier die Datei zurück zur Quelle verschoben. Somit kann die Datei anschlieÃend an ein anderes ERP-Objekt angehängt werden.
Derzeit sind "Titel" und "Beschreibung" noch nicht genutzt. Sie - sind bisher nur bei Bildern relevant.
Unter dem Reiter Features im Abschnitt Dateimanagement ist neben dem "alten" WebDAV das Dateimangement generell zu- und abschaltbar, sowie die Zuordnung der Dateitypen zu Backends. Die Löschbarkeit von Dateien, sowie die maximale UploadgröÃe sind Backend-unabhängig
Die einzelnen Backends sind einzeln einschaltbar. Spezifische Backend-Konfigurierungen sind hier noch - ergänzbar.
Unter dem Reiter Allgemeine Dokumentenanhänge kann für alle ERP-Dokumente ( Angebote, Aufträge, Lieferscheine, Rechnungen im Verkauf und Einkauf ) allgemeingültige Anhänge hochgeladen werden.
Diese Anhänge werden beim Generieren von PDF-Dateien an die diff --git a/doc/html/ch03s09.html b/doc/html/ch03s09.html index 4e146dc56..7586da908 100644 --- a/doc/html/ch03s09.html +++ b/doc/html/ch03s09.html @@ -1,13 +1,13 @@
-Das Shopmodul bietet die Möglichkeit Onlineshopartikel und +
Das Shopmodul bietet die Möglichkeit Onlineshopartikel und Onlineshopbestellungen zu verwalten und zu bearbeiten.
Es ist Multishopfähig, d.h. Artikel können mehreren oder unterschiedlichen Shops zugeordnet werden. Bestellungen können aus mehreren Shops geholt werden.
Zur Zeit bietet das Modul nur einen Connector zur REST-Api von Shopware. Weitere Connectoren können dazu programmiert und eingerichtet - werden.
In der Administration können folgende Rechte vergeben - werden
Webshopartikel anlegen und bearbeiten
Shopbestellungen holen und bearbeiten
Shop anlegen und bearbeiten
Mit dem Recht "Shopartikel anlegen und bearbeiten" und des + werden.
In der Administration können folgende Rechte vergeben + werden
Webshopartikel anlegen und bearbeiten
Shopbestellungen holen und bearbeiten
Shop anlegen und bearbeiten
Mit dem Recht "Shopartikel anlegen und bearbeiten" und des Markers "Shopartikel" in den Basisdaten zeigt sich der Reiter "Shopvariablen" in den Artikelstammdaten. Hier können jetzt die Artikel mit @@ -16,11 +16,11 @@ Stelle können auch beliebig viele Bilder dem Shopartikel zugeordnet werden. Artikelbilder gelten für alle Shops.
Die Artikelgruppen werden direkt vom Shopsystem geholt somit ist es möglich einen Artikel auch mehreren Gruppen - zuzuordenen
Unter dem Menupunkt Webshop->Webshop Import öffnet sich die Bestellimportsliste. Hier ist sind Möglichkeiten gegeben Neue Bestellungen vom Shop abzuholen, geholte Bestellungen im Stapel oder einzeln als Auftrag zu transferieren. Die Liste kann nach @@ -52,7 +52,7 @@ auch der Grund für die Auftragssperre sein.
Die Buttons "Auftrag erstellen" und "Kunde mit Rechnungsadresse überschreiben" zeigen sich erst, wenn ein Kunde aus dem Listing ausgewählt ist.
Es ist aber möglich die Shopbestellung zu löschen.
Ist eine Bestellung schon übernommen, zeigen sich an dieser - Stelle, die dazugehörigen Belegverknüpfungen.
Das Mapping der kivitendo Daten mit den Shopdaten geschieht in der Datei SL/ShopConnector/<SHOPCONNECTORNAME>.pm z.B.:SL/ShopConnector/Shopware.pm
In dieser Datei gibt es einen Bereich wo die Bestellpostionen, die Bestellkopfdaten und die Artikeldaten gemapt werden. In dieser diff --git a/doc/html/ch03s10.html b/doc/html/ch03s10.html index 99c9db07d..949375af7 100644 --- a/doc/html/ch03s10.html +++ b/doc/html/ch03s10.html @@ -35,12 +35,12 @@
Für die Erstellung von ZUGFeRD Rechnungen bedarf es in kivitendo zwei Dinge:
Die Erstellung muss in der Mandantenkonfiguration aktiviert sein
Beim mindestens einem Bankkonto muss die Option - âNutzung von ZUGFeRDâ aktiviert sein
Die Einstellung für die Erstellung von ZUGFeRD Rechnungen + âNutzung von ZUGFeRDâ aktiviert sein
Die Einstellung für die Erstellung von ZUGFeRD Rechnungen erfolgt unter âSystemâ â âMandatenkonfigurationâ â âFeaturesâ. Im Abschnitt âEinkauf und Verkaufâ finden Sie die Einstellung âVerkaufsrechnungen mit ZUGFeRD-Daten erzeugenâ. Hier besteht die Auswahl zwischen:
ZUGFeRD-Rechnungen erzeugen
ZUGFeRD-Rechnungen im Testmodus erzeugen
Keine ZUGFeRD Rechnungen erzeugen
Rechnungen die als PDF erzeugt werden, werden je nach - Einstellung nun im ZUGFeRD Format ausgegeben.
Unter âSystem â Bankkontenâ muss bei mindestens einem + Einstellung nun im ZUGFeRD Format ausgegeben.
Es lassen sich auch Rechnungen von Kreditoren, die im ZUGFeRD Format erstellt wurden, nach Kivitendo importieren. diff --git a/doc/html/ch04.html b/doc/html/ch04.html index 6f8b6f0f6..3d5642df8 100644 --- a/doc/html/ch04.html +++ b/doc/html/ch04.html @@ -1,6 +1,6 @@
-Globale Variablen liegen in einem speziellen namespace namens +
Globale Variablen liegen in einem speziellen namespace namens "main", der von überall erreichbar ist. Darüber hinaus sind bareword globs global und die meisten speziellen Variablen sind... speziell.
Daraus ergeben sich folgende Formen:
$PACKAGE::form
.local $form
Alle Ãnderungen an $form
werden am Ende
- des scopes zurückgesetzt
Das erste Problem ist FCGIâ¢.
SQL-Ledger⢠hat fast alles im globalen namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist. Unter FCGI⢠müssen diese Sachen aber wieder @@ -39,7 +39,7 @@ dies hat, seit der Einführung, u.a. schon so manche langwierige Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package angegeben werden, werden die nicht geprüft, und somit kann sich - schnell ein Tippfehler einschleichen.
Um dieses Problem im Griff zu halten gibt es einige wenige + schnell ein Tippfehler einschleichen.
Um dieses Problem im Griff zu halten gibt es einige wenige globale Variablen, die kanonisch sind, d.h. sie haben bestimmte vorgegebenen Eigenschaften, und alles andere sollte anderweitig umhergereicht werden.
Diese Variablen sind im Moment die folgenden neun:
@@ -62,7 +62,7 @@
$::request
Damit diese nicht erneut als Müllhalde missbraucht werden, im Folgenden eine kurze Erläuterung der bestimmten vorgegebenen - Eigenschaften (Konventionen):
Ist ein Objekt der Klasse + Eigenschaften (Konventionen):
Ist ein Objekt der Klasse
"Form
"
Wird nach jedem Request gelöscht
Muss auch in Tests und Konsolenscripts vorhanden sein.
Enthält am Anfang eines Requests die Requestparameter vom User
Kann zwar intern über Requestgrenzen ein Datenbankhandle @@ -110,7 +110,7 @@ push @{ $form->{TEMPLATE_ARRAYS}{number} }, $form->{"partnumber_$i"}; push @{ $form->{TEMPLATE_ARRAYS}{description} }, $form->{"description_$i"}; # ... -}
Das einzige Hash unter den globalen Variablen
Wird spätestens benötigt wenn auf die Datenbank +}
Das einzige Hash unter den globalen Variablen
Wird spätestens benötigt wenn auf die Datenbank zugegriffen wird
Wird bei jedem Request neu erstellt.
Enthält die Userdaten des aktuellen Logins
Sollte nicht ohne Filterung irgendwo gedumpt werden oder extern serialisiert werden, weil da auch der Datenbankzugriff für diesen user drinsteht.
Enthält unter anderem Datumsformat dateformat und @@ -122,10 +122,10 @@ überwiegend die Daten, die sich unter
-> befinden, bzw. die Informationen über den Benutzer die über die - Administrator-Schnittstelle eingegeben wurden.Objekt der Klasse "Locale"
Wird pro Request erstellt
Muss auch für Tests und Scripte immer verfügbar + Administrator-Schnittstelle eingegeben wurden.
Objekt der Klasse "Locale"
Wird pro Request erstellt
Muss auch für Tests und Scripte immer verfügbar sein.
Cached intern über Requestgrenzen hinweg benutzte Locales
Lokalisierung für den aktuellen User. Alle Ãbersetzungen, - Zahlen- und Datumsformatierungen laufen über dieses Objekt.
Objekt der Klasse "LXDebug"
Wird global gecached
Muss immer verfügbar sein, in nahezu allen + Zahlen- und Datumsformatierungen laufen über dieses Objekt.
Objekt der Klasse "LXDebug"
Wird global gecached
Muss immer verfügbar sein, in nahezu allen Funktionen
$::lxdebug
stellt Debuggingfunktionen
bereit, wie "enter_sub
" und
@@ -135,7 +135,7 @@
"message
" und "dump
" mit
denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
packen kann.
Beispielsweise so:
$main::lxdebug->message(0, 'Meine Konfig:' . Dumper (%::myconfig)); -$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});
Objekt der Klasse "SL::Auth"
Wird global gecached
Hat eine permanente DB Verbindung zur Authdatenbank
Wird nach jedem Request resettet.
+$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});
Objekt der Klasse "SL::Auth"
Wird global gecached
Hat eine permanente DB Verbindung zur Authdatenbank
Wird nach jedem Request resettet.
$::auth
stellt Funktionen bereit um die
Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
vom aktuellen User abhängen wird das Objekt aus
@@ -144,7 +144,7 @@ $main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{
Dessen Einstellungen können über
$::auth->client
abgefragt werden; Rückgabewert
ist ein Hash mit den Werten aus der Tabelle
- auth.clients
.
Objekt der Klasse
+ auth.clients
.
Objekt der Klasse
"SL::LxOfficeConf
"
Global gecached
Repräsentation der
config/kivitendo.conf[.default]
-Dateien
Globale Konfiguration. Configdateien werden zum Start gelesen und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass @@ -154,16 +154,16 @@ $main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{ file_name = /tmp/kivitendo-debug.log
ist der Key file
im Programm als
$::lx_office_conf->{debug}{file}
erreichbar.
Warnung | |
---|---|
Zugriff auf die Konfiguration erfolgt im Moment über - Hashkeys, sind also nicht gegen Tippfehler abgesichert. |
Objekt der Klasse + Hashkeys, sind also nicht gegen Tippfehler abgesichert.
Objekt der Klasse
"SL::InstanceConfiguration
"
wird pro Request neu erstellt
Funktioniert wie $::lx_office_conf
,
speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
ist hier eine Mandantendatenbank. Beispielsweise überprüft
$::instance_conf->get_inventory_system eq 'perpetual'
- ob die berüchtigte Bestandsmethode zur Anwendung kommt.
Objekt der Klasse + ob die berüchtigte Bestandsmethode zur Anwendung kommt.
Objekt der Klasse
"SL::Dispatcher
"
wird pro Serverprozess erstellt.
enthält Informationen über die technische Verbindung zum Server
Der dritte Punkt ist auch der einzige Grund warum das Objekt global gespeichert wird. Wird vermutlich irgendwann in einem anderen - Objekt untergebracht.
Hashref (evtl später Objekt)
Wird pro Request neu initialisiert.
Keine Unterstruktur garantiert.
+ Objekt untergebracht.
Hashref (evtl später Objekt)
Wird pro Request neu initialisiert.
Keine Unterstruktur garantiert.
$::request
ist ein generischer Platz um
Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
at a distance benutzt werden, sondern um lokales memoizing zu
@@ -176,20 +176,20 @@ file_name = /tmp/kivitendo-debug.log
ist der Key f
$::request
Muss ich von anderen Teilen des Programms lesend drauf
zugreifen? Dann $::request
, aber Zugriff über
- Wrappermethode
Die folgenden Variablen waren einmal im Programm, und wurden - entfernt.
Die folgenden Variablen waren einmal im Programm, und wurden + entfernt.
war nötig, weil cookie Methoden nicht als Klassenfunktionen funktionieren
Aufruf als Klasse erzeugt Dummyobjekt was im Klassennamespace gehalten wird und über Requestgrenzen leaked
liegt jetzt unter
$::request->{cgi}
-
war nötig, weil einige Funktionen in Schleifen zum Teil ein paar hundert mal pro Request eine Liste der Einheiten brauchen, und de als Parameter durch einen Riesenstack von Funktionen geschleift werden müssten.
Liegt jetzt unter
$::request->{cache}{all_units}
Wird nur in
AM->retrieve_all_units()
gesetzt oder
- gelesen.
Inhaltsverzeichnis
Inhaltsverzeichnis
(1=$BYS0+l}w~-S80BRWZ#&3em4Elw7b_vj9Y5H5X zS>W%g+ku&E{*b>zyzvl4DAv|JoCaw|;b-VG;)9Y*| zkB;|aYthWaaT}FJq}C?hoAeLgxN!$&9u}hZl!k_j)ePI!>KHaasFbo$8fvT}GYg&q zgs0x*H(}iv`wP}K;*s aFb$oJa=)ZNHK3 z6JtW (!DNL_1vLC4Ny@2=D3bTwoDg9E8DkUo$lzkmly+ahtmnm znVIo*3Ul*!2_^iO s%@7LG0;9bK2 z|If4SQz3oOH&pDMIxWpGL0`^%W9~UCxQ98QoiRx)@|3)j?jv^0Ubdzd8;)<2S?F4G zCb(^1(6Y<~Ay-V^WsTY4;Mzb=bVYFLcZqt5QCn|w^Ul?--}~rfcyI6b&;8@pC*jYh z3#lJqy+eVtkId-{h}@yqasKj@!i|biYl9Z;?=}q}e%+xb<1*1Bvji2;#geZrwb_1~ z9@jdlCX4iMtR&R_8ludNXccD}WD59LO1tahd1zAE+;v{ie4Oi?_F$ry6rX;m5ECEX zDEYAj+MSY5ww8@ck$vP0NA%Vy1wyQAk=~f;%!B4Fe(<4-NR#*RgTTVtPUN!{r?}uW ziaG(vUU b&% LG-sd6=s1|NkYVc(*8PTTFv-aMf zVw|?6E+0-*EOTqt&^G%Om#1mIdFN8N=kozHI(yY2?9uDJfyTZr^}-n$n@Bva8j7(f zz>>QE^+#SaMnjcCUw!WF+n1p;n)%CS(r^qM{NTZW=9;HHq7$ _C-!aQKX-C)igUe7K2(@!pMzd3V5|QPygMBemC2F(yNASXPYwf zkrTNSm{!?#O|z*8+k*PEr5pWd6$RCZPgZz-n02QJ@%fPJ)b9V?|M#`MU(bS-QQs1k zfVO5u((_yCMMFpg{$2EtQ@Xc|gY|hJVE>5F0+R$%+@5JqNRB(V=R>Q>5|3@(+Vv X6F#~cVSg{+e%0E>)z;0e zeC~=*j%V*%=jA6md1|@uBnjWcf1X@|^iSKi|C1bHfB|%XOGq|O@C_XR8|9WN02}y`8zA;y_1`#A9gP(n$ODl2zkYsh03R5e7a;I|)#3lB1^=rm^8iqinF!$i zv-k}z8ciz)AD{ygkl%XA4^V)D*8HgD`|nFr|0@o$lK!U^Ne_{Yi|yZ7?VsfMAIbSY zk_&7k48Q^yfOR |io300tfJf2RluA^vYm6Bpk<(|? }k zMOfg(btZSZ|J3-uMO NTyI?=zbp_lP&)dOx z*3(SZ!0+jxy2RmawOz#>se3LA#x0QIJ)0|kMt4?M7iN;P)XuiM>q#&+HbfQIkcti7 zyR76+^*HLk@)9C3%l^bZ;*~dGHTvZA(&aBf+v>Cc^}g4o$;3$p!SlNLmOJbFRxO*| zi8FuG<9htj_AZUn&O;FsR$&*bQAX45qxC(uUK$n1qMWO<*qj5FV!GnFLR#T<&G `x}_PLVmGU5Y2Jzi@vHB5Vn5_YODLBnOqy9b{+{6dP V@
MJS`zf=}CLfUUzJtD`k5}^d!yUqQ4*gar= z%1IqH*1{7nUf*B2fUk@w=Ac$xGJtfbncM!K^NZ4BLhKGW$rVUwn5eBwIN)CX-@rvt zbVsG`7x9pTW2)7%VYOh?o1gPR{)n vp&zUNUeIqa49^(*KiERr;v8aD=@2!MD z8ML{W%zlup)B0fenXI8b^h6S;({an#N1~d_*{=savM_O0LpU%@)xjyFlWYetSLu5= z#Pu{N#nUW;CZ}X}Fhf2ukTJ!@ur_E~CGE?R FGFItt0u0I~!E(IV2>Fh@K zi!jd43;HB;)?iX9=6vUXZ8)l;Sj1Cig;uW63#W-fx>WJyt>xUm@+n#>b;O^){+>0a zPITZ=2stwop>?D=Y9dF4lLI|k#3K=z^3#`~nkV|CSBRpoT$~7r+>kr-a_)6)9=1>C zI(Uj1I@xE>7_EX`*YI=?k~{|%bS>7B826$=u=E=@koNCHIO3*F1r@u;>ExINMu_yJ zT=i81lG_a3qT`#Xn`^j1y5TAhR?#mPZS0b~xLLI*6EcCp)M9Yhr0kBe?xf0KHe9cI zqbfpRnue^0jxNI_yZQBtAm7B>^`=WC1hzxD7VH$9XSN}-3$8bFw7APAsQo&NI=d|a zosT? &-CFo)M`z!--S^dE|T+_Xm;EPV5aWH?;4t zB#v{4yV&E&ysis3k^7)NyUz+*m=*OrIwQYHQwAy8TH}-jDU?6mKB^^8Zq8PEDbu!; zg_H(2Vnphpu~ <0`S4hG|VyYwJ@)P5-fP6~q!C{IiKhy(+{2P)Ev zY6%@%4)z@bQ7dj&Ca-YZNM%f!cNPwr%aOhHni13Eg1apHm1U%ktXeVo#>-jL)&feK zx`60>R%FT-^6P2GcZ4Q!0M^(ZdjN&AlV~bMPl8PMpAtx#IF@l02m~QGic~*rqt+Q# zQ&~xJeX9n?6tu(~&@YE0MW@)|qZ2p8&&i~}!n8(dW7_IAeJ6iec0Oagv6`t^{{9w+ zLu&Yp;`OdD#YcfItXUr|vNPyZFat{8v8A*+1wN-^9pzbga&?SdHR6Qr$01UQHHC1l z6aXTdF@u^U@59tL$I%~*ZRT-Vy`YGWMa9Ly*C#%gG~~^9AX+?rfG55*w1~{x*Amc! z#A~4@0TzM@0h7CvMq`AtJCCmSZ!a#DotHz@Y;embRe}TMg4V?ITA@Q{36u7!7}1s1 zL6V$GhC5N%2DCU;kYmew_ba9TM@vWbWs>ioqY~vc+riEP^L0yJN9))NrMsD5-r#xb z3L@KTxA`B~py6|HWoK5_aaTaqBs@Xz&2j;3+M a}wo9?tX2KJ$a^4?S)5=}#PlbZqI9P*%T%Kglnxg9L9aI9Z^B63rq?J>$fQSh~*S zK@p3$Usg}06$-Ug-v)D9;t5fLrReVsLEk+60jFv@+8Zthv;Df4Vjsj&ma|yoBOys` z(sL~p3-OG;C>aD1Y#BjK(>c%f)>F*>ELTHet%tq8+=-u(#Q9k-$;@cD2_5#+`OB|~ zVzJ@OKt4R?YebmgLs96=K$73?LZ?G^b4`oZm~?b)Inf(z4EY@BQ>P7PxuxBcON6uj z@vM6h`b7?#kuvw?(IaRc_t%teN%G1r&ZZc2Y}xX#h^B9R$Glqm)a&eah%?ghW*?2} zIoCT>6cYRPlXZ@R7)u!3Li<&6^^XcVKSDH6L4#JKaW1LYOQdu#;M~Q!IPMs64qgYs zQP?jI7#p77mspi%tIQD)Tl+&cB|c?9^*AqLKag;fMhw5h?{UcceVOwO$Xq+H{=Eu+ zN?ng0GZ2U9?KMBr5FAUw3KUVO91Ku(dYtrWHrjC*ackEM`L&UbbsWY!n!QBgS*ieB z2TkJ$Z*E4|0s#bifhC-Sl-Usj{*(a3KBuB!QzT9dY`Vj)jH?AJ%)$ZhS~CKL)hth$ z_G ?qahBCf7YX5nD&P?`Cfn##9ATCyS> zSnR%*Pa9hGh_lPp?H)stVMuyr=ss%-rJ*D-g{#UBQ!nI5%S?J8sd02E**Iwl=(lZq zM@NnJr1Hb#s*CvuvgsSTi>kYeO9ZsS^<_vy9US7gV(g{ q!1M- z7jY9hm|kPaRv1KC;#$) zW+h}ayrKJm&aFSSq;gxe75@I&9F=8X%9uS(tHwx6-fW+4Dqbq?B%dzsHphDb5h-H$ z|7CAR?*DN1|FAdre>nUfdvpH}b8~b3kIwyHX#h6i{l~`92e6(0;csEK|30gRNJ`2g z?&Roh;ppy0`j3SFJNN$& !VJ-%@^RL&VF0_(} WPCVa05_-T$M;uCgVKC`4FI^Qv`OxirQFCYQn6)mw~Y^;-Xx w(C9qZ_`)6Rf0xVhB^B^M4CNjS`lYR#%w $ zV%g5gud>i88Xa!i={t6m8>*y&DROE0~7;#u0U|5@7^%#kk!Z@MdV%=bF=OZHEYf zh>Dio_u=YfoQ$n&Q~VN$wWJk10Z+6v>&;~voi`Fa$2`zUwKGwfK@k1%wTz-QVX*Te zDWHo33aNHL4)n|yJmq3H4!xKG!EYH*b^iU^z_SqH;R@oj`m^t4`-kW9aS?h+HPcsp z`V938^G>0y9V2Z}#pCAS;1ggdVGI449rkdkhS;-vjCKcx9+uJUO_DV`)(N~8rY~a4 zgfV3;fiwOKkxz{1xLkBdvQGDF2n+wv*HW@nyjDn^NDu|d%s2|7UkgFZ2d2>QD@;Qk zcHz4P)(_+b=BeTv{qF8v5>N2v1FyJ`p3QnL45li3Vc{P;nXTg6CabhoY85!IXx+Lo zT1-xH_}b6~N?b9@=U|oTX`6+vUoqN0C=9% zJeOzrZ7By=3=MjEZ@ni8k)@^d|3FowYiWjjeslF~%0p^w^pr;j+oR_*;_1zuC8ZSZ z9p_kq*ijJ@*?9OeTBlBCg6-&(R8`faaz>ghSG}4%Mzf=9I3U&4;o0Ji&Fbt3(TI4p zps)11O_p+(6Q2x4S-wi(%TJX4Zm!KyQtTYp_GMP`3)?h9!beRkZzTGS*xMh%zBU6x z5os5zpM12fn|$J>DR?gUr6gBG!CT`e@3Hq=>w^{a_8PS*;2+}`$P=Wr-U~Cz)w9c| zCIrr?T%xG8ljnUf2W_IKrW9rW8h-!#L-W2Tj0SvO-CEAaA9OyE0o)_87C~LJObU}x z{wnJN*LWCjQ^67~wiO$?0hZbn0`DssE5U0nO~U6@+y#;@a|jOeRjnEJ7*9WUruOVO zjd^x26EdTcAONpA&xYvfc3`+V$8c5bcj)~J ZCfJfr5Rs_(rbmj zHkUgU6HgvHb}qd!P<$zPZMsB!p>iWr_521mt@1CM`wV9);ewJ6qAYL^H-Q0G(m^)4 z42H`YQ?$Rxp}h^FES)NR&8K$KUw@5IO*5AH^s&AE$zXq=NYShA)TiWpt?6?b>YLx2 zgDRfCeZC-3_uOwyc{ 6J^YsdpUVdh*RyFQi#o~%Rf41o=L1LP6?j>B>7w>^_q;( z4U8BQMTvt$a4RjGlXd&Ws=H=L^;F!z1@4CogK1hYzFoZPZY25>g#5f?LBW?f;|Jb6 zvn3p?ca-SMh1`GjlnQDvSD Q)ap^4JvXmBiJQ%9Ri;z%W2|duiR_krcusR+dFHwQIIs8G85QuZ3&K zN0qN13x3uJQD4II3~f*qF=B7n3HM*fZ>IiWoE7r(#k*@ihWFL7wj5a=kBHgyWPO)U z)`-$(WDXx<)9=$gGow_zq`pynTT$h+##;f4jBjTXxj-@d24B`4=~R?OJ^s*q_lX$K z*@H9AKMDg_6`neUrrR*T=T;;ORr>I@X3w3SJhG7YD@-yWy*Ut=r}Z)QX#J%91l_@Y zUjM}#dI`xKImcE1LskRoj z<-c1s_qoB;8O;PYpgyB4B*>vDXcXf9mE4ql_{ore>U+0=#?@G{&)a;kbA#hA;N@fX zS@jt4I^)%;x+)|4VZ%mDENW+v;9fOhl%H?j8-gEyHo3IFk6nXeKHWAb?YNUK2V>`d zj9H!Q?mlqx`Knf~w>A{%p)=CfYv-B$!hYNWzT>$opiT>amd7*lXreSXN<{j5hzwIk zIH!buQu;ZLr{xNXE|Of4xjJ*KiE{;lr8v~A+SkenKgO4Pi~hxWCTy##9tn_dYzbr6 z6UvOrR7B6FUX!R1tctB)X}lM uCV1sIk z2Zxd&edsHcaK(20H_s!v#_NteJ$2>$Nu1R5t(5$@ovgdIE_F0dRV||Gj?`ArA(QOO z*MZ2@xzHM+O`{$B_`yK_Zlcw%tP+D8)frLfB5K^UZ8*m{AQB3v{XW|Bxkk6NkY*40 zRnT|174x-bs +^A^%~So4Hhs3W;G) z2z74$_W-IU@wn4tv%z_^1VrH=Pu>w?f?>HsB&*4&^o)nLl7giaUFEd$;+ZjJ-t*La zHj%GRQGFh~Oha{Q*@F43ROoDza&1Da`C3Bta}#kDp&M!B6i5<%AItM4!nG0G+ooeZ zvcAgG$8an4V^}JG=RD>W)2Xj`Ij=fuFRgK=yyGQhsQhSM3L9%DV;zaXr0e;#s{I9N zYF2E{UWsU=%q!{fu<^TN%a-(QKs#meT;3(cq*4;`O8_M7{<~MBf!phqN+l(}ujU6S z1w5!JTz {gnM-Q9>nGjT=`NpkrLv)Yh#VsN7b3fQ6?NvTsKIGA9dhAwz zz3yx%9C>AGYuq%D(uLmh$z8)OX-XOA=U?yp3@Y0AT1rxNs&jiuKK!7$^`0wz@8at9 zmQ)c-Ibb1U_JYslhIxeD*8BXs6pZb`JEoCZ0gt|4TDmB0h_2r?P6$okLA0B Jz4?5DVrMASJb9MBoGO-NCTzw?1b|DA)KNp5lziTd9upSb{dRf}o@v&6 zy}?$jxKy@Uaw`1mY7zUV2?Ry?@{1caT|2RxN(|x0kfI1%z?c&v8kXG9PrmNr{`* zI9#j?x?b?KXS4E&S6mTKFRJLQJ~XrbLR-H?mjGu9bwd!BU{WgQf;H{IOUBb~Kec$i zENoH2(*z6xmOeJBsF(PEO#iJ;X=X|9c$P=EH*oekX~`4KF@=DaV`n7v&+xX6wl~(< zI;(RV{}8gExDmzH;bFFEvUfpQZ8N;Y@5%EmFOw*r;I8*w>4=7!NW;)~4B|RAJRe(` zRGl+Z((T?^h*v!#?S0^_ow#+@*j%?;YCK<(;TGKUwBvJ$;|{Z;&JAVSV}}pI0XM?m zr>#j(O+Ua+85BKz9L?p=rK@?d_IuFF(Xfv;-(FGLqJata=6g3kQs_x(4_ueMtVlg{ zwM`j)Rauj-OXjh>MX%9Pn`5W6`XLMV)2X!=am7 BxJtr(6F8Cks0Vw Qy1P>BaaYgoQbTM8x<+B!xJ{g+=+mS~0=r5H29`D})hH zR)a|W(?(2`PYldH{Es#mHAvSbQ2`-75eZSSClNj|@Ie+)LGS? B)ub!_Cb5PinAF@35e t}OUu@zWE*z;}ne!)FKBk#u3W7-4p~8}nlh85-;lk1PDrFrWsP^NAQj zimXo&dP`)*YUD5`@ih|Ul1^eqg!GQD;d=NV4L;%(dfu0gKG{}Q#!gf}f0wqgw0kN3^daJN=e7zgDed+g)_<>qhM6btO~&BDieiz@SMlUp}1K zMybUzZ(Nmg1>MaoY?fOp{0)3Yx_ws96MROx&i0bL9G|eLYLpRAes-tjcovhfE6sGG zr4!4ZTe6=5uMVfLsMOhCr|wixCnQ<|=3{Tm%dVVK-R(^oT(quhO;whQHSzWFINs=N zLNdVQ{Cvu5Yij)W_Vx$rCjH92b|>Ncoh#diIC$MPuXoMuoKu#)DeW6q6qtBj5_2W= z%e$ju6Dez|IrB}od=gFMeHu3L^0?EoSs84?5rqcQ%9~=&g-6p`xOw5lkecv s`X HLRt8 zYE=BXTZEHd3yb+$rOD7|Trg&BQ}(X7rQq4reN&nQ(i;`0!gIVXXQl2z9$zXU?SJ2C zP3gKeiGKFw>({V#dRvjZuQllXG^D89+dduKnzKf!Yb)~RH)^>p@-nji2&B<7#Gf7C zd%}I??CRn2rJDJvl$q2R_f2mx_~Xo;h}$h} 76zuN9b@w~;;7s(GZY_&g`+x~z4TT>vZUsn2ui4b@~PoSTtc z$DR4%>FGiGxkTfXRmS(G5XPtYv yzM@EVMI=La?-f2ZePUc_-G{({x}VEHGTCXy&(qQLLuKb zeJ%EjcHTd^P@SaPzrF8IZJH?tpP~xEKFJHdt`smUkotI$%j?Z8Ytefn`5ngka!aT3 z?^Jo_2iL8j@AJu+tnFVAL&_G4v(QZ%O-}k6CK`lB^o-PTwTJ{78HH>3UlOxa8``nk zKg2X`;bW;g(gLq(S8;i;rxq?z1w$vYTwSO8rx=SJZW`rV)lD4wyT}o|;eH;)wF*-6 zZ&!lWn*yXrE71xe_P5$&Sufc$+`36?p(l9tWm8MAY+p6iD0MWoRgKNvUjY_|L$5CC znZ;mVl{uTr3-jh|#l0nUBza+IL*pRmTI8@|OjBXUYqAgcr%{9VcX@fuzcpT_T`49x4$HWyOq28@kEEsD@J+OH z=y$3W`s;}j>b%vPPggEGeDUJbH-PwrY5XF;JNb>RBPg8prE{$f+$+wH4W8X4-}ecf z@B_Mk3fEtu%kf??O^loG$$d79OBd?G^A)$VkU5$)j7}csH )XX`89Aq`qNqLMNAIbVkF84D(RyVNJ|ZZ>l+I6E@BG|+$p@8u z#g$k{I#)`m8)>Vn6?pdZsoRd@UZTlQL!i12bVmXA-rGLUY#Uu>u@+bi{UYFfN#D#T z*||Pl^p5qLQfkFpMauM_8-?K=uT^KX%wx*5J%4L=39;EfmK%K@n}HTG5PB-LB 5_+w)5 zhe*yi$9HYSp}Q8#_0R9<&wbC=z3G|Ax=RZ_!O^E^-FQQ{kkw9#u`2B1GTip8OUkk> z{S$SgRF_oX`7C+=w^Ni9SAx!)^;JG`U?F`>f{T14Lsnal8Hq7uyqlUuK|6B!RbHov z`q|$cX`h(eRl-UPzbH~<6nxQL81+#4G8Vk&7${$mrjf$b?TuQw64ClpN)XoBp-0`_ zd{scv?9&vv;fL0=#)(ZyhS?N&i}a&=T&8>iot-2E&yr>$}XDr*^&% zldYuQ5u3^`FQ__B_*PJ&Z2Jjt%PTdn;=|qt=sLU^mx_hv;Q_dy$m@~M9~Q9RU`~_l z@>J%Cyzu@q{@Nlil2YP8&49&Tmq}*e$w19n6C_>;{B{^`qrtuG^N$*XzhUg?<}@T* z5u+RBRJa`S%J8L5 qU^#4)-RaSuA5I%in!_VAriJPP%6U&Kh+DB_`BatHymt2 zCR0II6bZdp<=>jg$>#UJ51r9H`#9irN%qXc;fT{dw^Jz-uhWxepoFcTl-8@yRb1>4 zKg%wC`x>*r;&y!QoZ6G~!!mGBIX!e*OZLpyWHZZi zlHxAgiZw?d~UVA(zMFvkO#Rz}< zH1wUvUs3z`(H-^RPv$9Hw@kvBFOzy|mgq+){iH80aUOuWq**{ONVCN)lCM7=IZHW7 zd*i(tzf)kQTXk@<|F%61U-UiMYA!#Dy|cR{P8yr9o-o@LK2NW|rd>oAM^VgX=e+rb zfmNPrC#K+tby&4xwT}_1XwsVLMmf zIXsY_U(2fbu{JG~oN;!KACvwep)&AEN0v{;re$9d zZHfo=Jxq4-Vk1jK(ySN~$q%-9JgG-AXR4PjuQQ^K{ltA@T& @C^ z1w8C&fz7<{a2IMb?YRK!HL&dO3MzTehj?)#Cd{>2`pn*Wa{c)`-p` hl|zl*&gxcTpGUQZ3bt(8Yr0{p*k WSd7rQ{@G(@4h&l7|Z0M!tqj&hr8xxJ5N{iOmcqLLpv+Tht^?jF;8N!AS67WmWbu3a$e zg G=y$<3s)r=vk^dohzt@xR< !n-`#in(JX0-z#6Xo&JZ^n2kD7bd?}n)RyR-0hr2(4f zG%w*Kw!Gg;-AE<8=?_W{+7s`5LE2u6Uc01HVczXlJs1=(%Oud%)B2iTkEKwn8dmx( zIA6WiWOX5E5=F}QRB6On$QwDV$||?n;u(Z!HMmif<^{c9=6U)8UO_+p>?vEX2%Tu~ zF-s1v!*3?tzf8Vf_RSUa_LZlBLw^ijt)pA9>nzFCFPLv#bx3-#idy`xV>VTq{6nT= zT2 IMyjPWaOK>(KOiv-F5x(NQTV$p+@#l^4Pe=Xzv8mXd9X!jSH&-&*f9~U+o6a zbt7mJbay1YOCH;_E7E3V%PO$h^)2jW9Fdj0C`O!`m@V=L_$tpO*~sIj;JGv-5yn+= zcaiX-FBj$!zaD4>+MU{LD}0LHRiJS?d-L|H=xCupu>;@LfRJIqj}Jb>a^Wp?*RTs7 zzacCxZ4yB#=~a76tlM7uypo6d6YuF1W@h;Be(@MO7_73(TX=qtO9pjO@0)T>!Gomf zH{FV3n@ZAQJIIW(J)lE c{kc`e#9p-E(?_;>-A?FH6mReYoS6?W^A2=0 ^2}~KK z3JR}yHoC=qzd>K*rDC|}k5kqUmXDQL$zdmMDKf$YA_Acj6%qQ^9|fimU}}t5S%%y( zg>+Lu1b{*nC>?Uh7NQ4%2p|RQA&$gzk^^Lf6_`?nG63(xARZ?al06*q0!j)xnF8X- z4<8}65K`j15Jby9gCv=l0H2_w7yy1xhYb1x(SeYO2=NI>iXwkSL6S&F#lg2Ih$7#_ zK&&8Sl3;zGkQneR9&Ab$2hoB6?=iFtNauKnE_e}iX2nGRT%1WD_5=FOl7fGmYbHUo zAy5$^QLt+ TkVIyufxik710d;;OW^654!8u|>EMr%N`QR{AVV@BHV`ri&@&ei1#p=Vb#fsw zK|Ub~VGf|r0>TY=XF*ix#3ckdh%bi_7v>NZ6XPR({P!vga5) ;@+cIcOmgwBP7-yNn|CAU5bIJ!H8FS3%Hg@cJ?XSo{X;a-mZDqZ|}cO`7Thw zr&0U;);JS5rp^I%e4Ku0-g+d2J;2owmK=|Fc4qL%A(Mk!leTce`mk}CAlh~k=XrAl zQ|FK0OUA7n_lz~cO*#mUC>X3v=7<3I!<)eIaDPlKA${^_3oco Y4|H?&Y2Uj?A6 xV}jZyeQ#B4=2* z%W}78JR|G!SN2RI9FO r3Q>~Mn9@!Ib3<_he1%TeygX`gg^ZBDr6X!NF+y(53) zMC7{CSCmyL+>;ma$Y;b>Z@&)DT>zL@)v>{k2zzUu$vF2zeB0{Io(t ?u))cRe>YR7TZJJuKa76ynhRc <<&$T6+*{$GE%i_1wd^TU{%}Qd`Y)`jZ#cF@z@pa z7n4qS3(T59-<^T_=K5MY4iNzXwf9gj{`qQ#*AqYif>szv4W@lU=@(~hdn#?|O~0Ew z0LudFIM?$bSI^q;wq=Pu*Wxb90xoCLUIAXdp}htOWYW^X^{gKbl@Zc*s^4i%3$5?$ ze2=Qr@9@9YX;I`i>Mw;@waMO^9w!{=8{<1DExp{ oiSZoA;60kSPWe*C2I?g62!yEZRjC6gA$FPe|unIWy)J7h=v$}FES zK47#P6y#(1)T`_|E?M@MW?PTz#nw+oH#BINk2zWVkcJHFo zgjSIiQ-Vj7FFZGE7aeop-`RPveGTeu@1@ior_+lo-|cOm8Mw)dS@-^Wc-X 3;11D<>4JMCxdOBQpZW8*+_I&1>?*UoM5)D55_jN*51W{^94th830 i8C(E{ z22=aZ@!=$*mdy`(aBiDzUaHR{Wldo+xR%n7;ec {3=y|vfRJP-Z-6XHwo3yC)8tf_q@3ee?S(}U1 z>9Y6P>Rz%a@e`b^*0;m}+yGRF)LeLSxC^Kap}hn*gI^prA;swg5VTDHKS=Bfhl9b= zo&q0 rxez3LI12ML%fkckXl_Ar;v)r+rW1G&;)^rkwo7njk zC;WOavyIumwK~HCLIbM((5I6F0#43ER&<`$+ci6tR=i$XkLcIiCz9JOrxdML!XaPs zZW(D+X1QjZ9GVN?`<2sT6+M8s5(o?9a**Jw{t`ro4 z3Y8KcQC7Z+JwOzmA2Z9fVJOp@7x1IL{tiY&P4tIofxwS&vKX?bKynG>(lf*SQ{aG> zF6x4V{+9+vou~8a|CnrsD{;EKX-hGF#>ZiBFo{J?6uj2&0a*cg0l@)!B0ofu`jyfE zMgGq{J7)!6^;Z}}$kc$|VlaG+ZG`eN6Z<4y;wkuc(*J*&0i0p9!tmZs3giwov->jk z)Q;?szJ;O54bR$yf&{eap0CW*%$*%0Xx7@AeAk+=WV{kvvrbcw9O>kxOLe;3Q!7_m zW%j&w0-fU`?yD${Th$yG!V(rTgSq*yqBDAfIrBdDmKqV2p%eJJK5#8g&VR {U zMgq~Fp_c)|N2t*m6rx`pF!=-(hAX8pC|dQ3+uCDTJ7Y3kHg_a8Mfs$1HxHfTi|vkc zu-t?~tO37MnWMQ+qR@1qjnCM8zE3qi;fPnp_*`3@um@~u^OKinR=RaHtJR2Igg@c7 zbl>kT>Szg-ucGRbeUgO&9|pv&Q=H6frzKp5UdLcr&qd#`O(>SIzSr%-{uKJ;saU?f z@rd*=@u)8JGT(}tv%qwQnJDupZ#RavhGvEqx?GVE6cH3xd8$&d|9q=uF1#Cv!5*HA zQQL}}g3wigebNx=SqR UKFzuAJee0!gM2?S0H4k~}9#eTFkE z2CHx$xI77E1ytLh7vcP(b<_)nSk{&yqlv7E8FB6W6(N1O`~baa!{GJoyj^*eRFAPc zf4-4DU* 3>{q<7+gP0I#Dty^>$$^L7G1Lud-=o%0;OfcJ~ a?mB)+i#C11W&)h@0Y9dE_>eU9bu2Gxp{*+ z 4)jI;3jar#py2E+m{KlkTpIF IjT8t?jKS?eT%12^xwIYQd}{lvrV{P&iNB?tbi~8(OZxU;NvFhV^9|BOH(d( z+>R10qh;~j<_J-%OBkI#^YFduYq~0Y@3$@=<%}Jb-_Y~X!>;$PVer+b;8I8NB#)1e zZqw9H8p|CKT%4kpW|}1tu7 Si kESnf 2k#oe+0Y|f7_KfK27e*Dxm3Ya)p@=ep}!`haBf_epIYYIx7fVy)I8Rspo+gwo~ zgRFZ?S3v=)7>(!rDUGgbQn1+SnETSr9Sc1<#Kj!#6U;?NJ>%;ZfD4k^Bp{39>6GY* zR0N&o$+>|-%*4KS*tc+BW6O|S6=a;!)H5@kEki0I-8p3gZic(kz*Gs8A9f<*ieBKJ zFyy8oin#3w%}+xV@fPV55r1yD=p*INWsgB &|L;! zM!78qKQ3Ft=(SF8U7bKiYBJaLG;9ibBsO^ZdH-6`gO4TdxGY4w@C}-0w@n=|pa=z3 z>GPhUS_o?uZoi9u-bFy(5(LJCzYmVkrOp%_ZQNg)sJ~Vj{%f>j{6r;$Cnb*dUm6@O z*yukBX_Wy~NIirUaGO_{5EarcB~c-b@e>u&MMxaL5kq?w?&7)a6j-pP)cM;0?Vp#x zfbL^;Ijpej4eiDrxuK7CF^M!wgxUJ}oZhvigLsnEVl#N`vPG4l=t~FHY%*Mk8~Iu+ zD?Ex77iWMqKmK`Ufg!>u78Oup%qKU_uXAY()yd z%v}ulMPrfrW$4+{Fix>@ex-6ptlE(M0K%gdi?Z|K-SD?xqhlZQa2FkO$H?-y?ER#y zwLmvTkI_8zJpM%>$NNM?Kl~I4Tk9)}AqkkVEp3hC5#ah-?is _5wX~qLYTuT zPMo3y+o` zzJ{H{x|FQ)^D &$_}=h6J@2f&>=C=0`g zA(0ss{U9@3(!e3kodqSPxB~c40u^Jl&jZ;tVn`IazvQ3B00iWyW`ewuSx#ww{hQe) znP)&>eoQujKdRf)Ay2leE-EN>wKD+DNa}3DH $s1K$o&M7XS5k-A84Fnpd!S_R+>`E6A3eZ-vDhE=C%02vK3R=a!Yeaj9 z;A{ZkKcS+m|1>ZQH6mV%R@?gLn?MRcup8XBh;%5ErL@jg>}=Ul;%7-@RT8eWqc$&S z#mueRzI_@C7HC9UNubANVsqCLSMPSHEcb@6#LulvI(o>1KE8lUyMem<0N{H_eVA~Lm&|8`%RvM-=ib|#6giVVdF;% zd!3wP@y+86JaS)Fek;*rTpdY3>e)H;N-35V4lNTlO=0I&Z-UXjX51+9s0AVeG432X zb}B`YSjmM*_o}*_{oQ>ufPTGKFyNvQfKMgeZ5V-98|!+G6&&q*pV@c{X;tEvv@)qU z9An3AerDz8Mi(p#=Y8vKnP?5|2<-_?3!QnYa-zIZnQ@$fbimzmC=ZkQ8{(F?)CKk7 zUy_lilDi6k$SsH%Q}i=Xzaf}fL7V-*HPR)Tbbh#`r6)TJwSBED-<;D$LY6e^O#19p zh=sLFb*EgF=W+;}w6dNzJgLXvz@7?iuI_nQGtPb-zPY~VEak7s3S|Ql$C@-{N?+*d zV?X^|`t733z|6=f@sL&{$u`N(^w}@gyN^JT2o3lb^rrQG2y*ML@Y{&rh|`Ucm3Vkg z{{)M&N?H@qR 39{&oBW@~N*VhOzd5dl#Y{dpr~lu&j|uLtQXA8)=W3tVgL7Pwtg@*< z_zxa+?+oD9nlx%x;<(*>j4s~5RN(JbTGe^1;f?Y2E=7Yd3_6@)+ 3A9%WdMEY@P-%yfF(HY@6~aI?SNi2d`XU37lYWLL<_b;|#69JD z%lX~x?Lbufj+;QpTVGi(sUEkjuwSaZZZL-5-2r}%R*_qT<$|2VxWS1a3qR(AP28O- znfKyjgRr&irMZzMzvKyg=u3pBq+^%Q*y_%P3rteoWDMuBy1OHdlTIfbHmjPym|*ub zwB2hWf%{7r`{PsBunRCTgeF>N+U<9b7Z1ETq01x!TB&bxJzpbd-p;|!Fhxdswq-Vq zmQd}oF68A_dYTw0@gO6+N78iKEBW-_c!QK8R`e`YlB;oYJ&3<{C@7x-)Wr~1fUy8d zYjm&|Tm)OYkE=APvpYCocv&misou8a>FECTaIt2@7=ARd+$8jJqd$R500g%s`IB{Q zC^+14i(tM5ul;s#WMg%V+m9$-Tyx81!p~y2*IiZnW-v=`XLjATg^@>{5ORokIIdW> zECIify(s3fSkrH)8u@OrZU@scjMu_cyT)fDzpR*9AbZoMH^OZVM4`Gs=Zv>+Suawi z8=?w }NBoi4`6Jd`|2p&< zzRAcp(qm=37#4MmU$37uK~>~qazkNcy~my~-Q$f%N1 ~LbB2EgXAaB&cU-z84x4w$kCXfS{0EJc&6fWFlJH_)iu zgo`vpAwf0CF#u&});uC&p$-@kDEv! NwLO~Qrbp}t2{T~Wybiy z*6V{U(^lzZL_Sw}O`;lHcVf{Kxucrc>Ob5-IJbqo9OFpy8NI#qb(^r}D7+}WvappZ zlbAStbHkDKObpN%Dej4^2+uce2;uU%T{U5hSo`TPIqJ5#AcFIh3O@1IXKLudFu-@x zO(ru5aA%N^fcqi%C2>EHA@AH>Sl$#!0usJJ1(|#7#zAOa-5&uu?@MDuvcmyH@m>)u zVCX^+K4a+Ds*A*MEYPpVCGGC%kIjVt)=6I^EbV)(r7y}Egnx&}k?cxKPQvCI2}dOv zU0(O9+4B%`@xi+^R$H(E?-W8wP_+O&v0~Mb3_B1bMj)I$+zDPkRJ?)dxS7Fc(om=W zg>#OU)vI$_Ykfbp)Wz)C6@GO)qM9 VRMcM1&c TPiQfiSSr#s};Ai-mGaXl>>dTJY zn8?pA^7Y(XSllu|^y CXfMjD+~T}c&`Vz^z^YZWQ!wiW1n7_ zAy6O1zj0w@v&DCK5Iet7gGOj#SwFsH^ShlWBi2uZk ~JF*OXWRw|z&z)&9hUC>?-e zD(idb%v4U(xq~oRqs B_a#=i $o*~R&r;$5T z8H;e-Gxf3E4`dYy8!N*-It4P)9 wo%N z6aCT%aTUx_IFJkaD9o%*nV@LW0@1^R(hm)Zo^^8?2;e~yXh^0NX8!x#b>hCE1;Bm7 z>J$p@8_8*nzxyVAgv~CuKR HSk>%xgMm@u9LBnzAv+ z>mFVXO})2{c8r^fHR^!L6~c@ogTyMsW&diEF$rP02^UA;N-f;G5v%@b7uvcKWc2}F zm+`WWqd?YJOp@O=2QwRuH|_O7!r{xAS-sbT$^>0h$gOL9liAN FcSp_Hii}@;y41bmb#2zK8r#Gh54*Q}`Ry9=bFJ+9WSyax?JGq7 zS9ZI>B0iJXAx%DEb6ss1{p*Wv+Y7%-9pe5BdOr9BO_^gAUIun^#j1)W{)0Q1)8_P6 zK_yx|)<6t){3VIO4lt_*s!(E_hm^tjAvl3q1jy4)HV|b+Nf85Svj`&a64aK=9`^fq zi<`B_nTyL~RkW7RKCdJGfPpT&CQ1r+skTGv({ac %1u21g3Ki!iEFNXfe0`D(tmFNAi1>saGUD}+DN}=6h0H~ zl948NFeZatI$vB5TS`9Wf7uQpWp@dEpMIVFxE;gY3%)3z>!z29`*bflGQOC{SR} x;p)j^kPA^gAP zhMnb~hUg1b#5RIp=<%OhiGZKa*bA}UE!zE!kH^{3%{@m{|F|e+V(EVTIJ~yL1AlsR zi2)mcyBn_ W(#a74ObAheKYFpLjH?5<*sGV=Z40t}PONvKX8@M}Web2nODVaF zo8>}2tn-DipWC`QYW#p*HQbHOFE8*rCj#ajL$2};P)F+ ;`}nKl{jVv}C%Xss*Z%i~^q!!98#{(==@TdR<6Lv5bb#As>Rro+c#Q#*5PDcVQW z<&4YcUm?GGqvm>kgw%&zY>;DZZ2CCmMdQu1=EJw-7l|b-d3nOC*(ZQ-Pb(MWIejmm zgBHro^<~xe9U oT3a}@vf@^*dhq}a@_bpLwKnBI7e+9*5MhxqJ zn4uFq$rGGV4Rb+%HRI{pVIXM|!U`n{+b)GU(T33}PH;)1Vu}rqSL+_}DF60rj3x%H z+VHRcm @~W71zVMoDA<1+{`svF z!A=x7(W~&0rrGEpgC+FG1-KtNrAM>ZUlEo{Lso%PtH-qwmTX9i5x9l!0_J_c&wRSP zB23($S>*ut)8rhNU)F@P@9IV%juA*)XnMhaySxUaUz)QtuLVs%@vaSzSx#72aU>41 zPM$8Jn _i9g&GJj(^TqnvX+p}+nDo|BN; zbz*9!;u_I__xz=aQBmMEF{H*1J4xd3Q4nLM*8{*{jmy6@2wcEM;2goA!bevJ0}S_2 z8TL`X_v s^ha8!lZPlUiuSvhgD9K7$1z0@c(X|;vCow{cmfXHaD_D%uHa=phzL} z&w?{}0V77)Fo6G0Fv_-!14ASuE9RhF{U!gjCPvwWu6nuSLCd&|BSsPbAwkGe<){1) z#tQ;^>S+1ktIIg^7kF*vi(^PjIhH+Lld>J4+aJIG(R_9dBVR0M(#o&8`*M S!m#>n_s W8z4$lhfcmUc0|?T ep2yPVj2_gVCAd !9x#!6%v^9jqidAdQC>BSOR#?wP2 (Pv_H{*Uye z3(!{xy$bJ9@p~>;!yMHPliK0;-b`1iX-10G8ZW$*!ZADetPNmisFw1J2bT59>v}T$ z{dr^^4ogg@2mu<1W9N6rUKgjzLY$?I^wxYjLwbacBGC@3Quw2vyLo`O>@h>)&n8Vd zt(@63 ZENDlx(K`z3r+Q-lxqymK+GN`k? zl|wj&mJO};G33%np&ZcV2$S+zb&u7U$?mI#iFH8Nl#EvMS2jZ^Zm+To^|m8(hfG#x zGh@a~v_~A}OY&u_Lef3M$^fAb{gvB$V}UB8vRI{p6%r(@jNrs)i_saYoxydM$@ScI z0E;|EXsz*Knza}GxDUww9%9=L^O%0*#1O+?slxxmL6f$+_XAw)C*;J%rnn2jU*XH9 zL~r7C(*K5vm?h}~L6B~BubvnM{Y(G36S&z6Dy&GCIQPRldfC>3z{;Fq;mUQ;-6$I8 z*~nc(3)4=Hc27onP+9fvNxX6&)7kEH7Od*VOE*cX;UY1pj>I}RW_M*meKnu(d&adH zhI5l$N1_w9Hv(Lqu12C4X#MSBocyv}qDQ_@@smiJCQnBnzs2j3I+e3+V?+EVfgwh6 zvRZFZ+-zQlJ{1UA0P!bLhq6f{#tS(S1B%K-Xn5;??0hgWpO0ib)K3AprooihY2u6w zPZ5O;` gdKH@iI{r;8Lj3)=(Q*p{HSF+V@ zyYpGhtoH$$Kdg%;*wW{wRq}pz+N>X54ncFYU%L?kEvAs^Y_F*4ojs7q*mB^9YkiB_ zt*KKzkN;^^3OGoe%R?*yQ&S5GDO+hk-7@4ioPRO5^H$E$;NpYC>;jryURY6hRskLd zXbmp~S*^Gw-rtfZbyo!p2wE;3-M0qOPTD1rGxhq2!s@*eSi;=R+a^~K49I-`6xH-> z)WU}o8%;d_@!SyuS3yfr0M;wC&Y>36Rjw4kOiV%es1hmi$KVM$#j)G`se6#=CwhD* zpoEzAMtujdnTtI$(Gf4S0T+!m_B*JM3T=qHLxlP7S8s^s&OQcQMbvkq&x%kUAUY#_ z_HwB2Y&1E71wyweD`K>CxA~RII%Dl;^3j?5Y7Mg@)$mf;ZUZ0p$#sVhF*^$ZiIY fQ KcTRjHs6xsQ!cpL1|!j>6WF8n$D-hIAU^4j7e_DCCH{b z)*SDAl#hhNO`LBS1FRj%RTc>@&v0lZa`@Pr)z!&K{!`VFnKILbHPrpxO4L}^m`J4w zxz%G?vORx!JYI$WY?pSA5-&QjA4Fd r>`m=o}YCN5o%bbdtPWoPord zh_Tp65?z>*xTxX5L*jK?f0fQq5JRTVHWRJ4Fe|a`Pw>(J(cu|zHUo1@Hj+fw2yA__ zvEgyyNp*aO%E4n5-rn6C%}#{pCfZ+T@`o6_kMY>S0lXjib_f$GJ8Vx{>^5b0-7V?K zIsS5ngh;7(S9QyJd7m5i#>v1UI#qu^V^AfvY)^|beyCw`UvB1i|6)vZbldEp=m{{H zI0pg~V)BcqfX1>w1q4>nR2O*x?bQ$}C~x;}DfsF#z&nQ)#?+`ybkB#0r4 c$@Hn>{C%I!@ zvr1X~J4c7Etfx-DYM!u$HSIutbghd(`SLx6vF|x*eym-631<`XKF1b;W}AIdpgK@w zX;+RLyI*nmn`q@>dAtpICQ+TZ^M7OaX(zRfNvmLO ~@S!a~|k-Nl+v9lEO z{sgVL0WlL>rUt5Ghs)r+h@bx}w!_XeatWMOF>f=djQ^5<@A}W2u1I4V1(7u?0m|rH zUa*e9neaT)VJZ@Sh~o!qf#s~Ui%b60cqeZ|{LYYwiHHD~_rZ6m`d&Xx4iN$Fo}=S} zcN<_3W977dYx(DK?G&ce`5((Sn5}oNKVlDLl)8JG@y)a070+Kxn5C~Z944@jS+}Ad zDUN@l{3S{@&Z}PiH2$_**w3Sq4-xCf32!1B+T0lpw{S1E=nR2~mC>He2Ocjg7;@*K zSo^EW+4e5zF8+}@F= Y+>Bi{^XS!fcp0 z|M1~=vL5(x)Erj~{6*_h_n`X1gRr>+zoO!&xo$@g>>EpK@PAIoIm9eg&CLp5PTi1; zJkmT+g{$fxSHvDo@BTRYRp+58l}wntl(3LK>AVi-tCCH%`hDquF G@WB5ls{($s zHTP1cxJ)eNi~C+{4#7<9;T`+Q-Q2c5)~fyiQMkpT=va(0=domjNR?2o*@0nP*$qqH zy;P<1aN$n|4QszJ(4UF}`vxoTNrp+(sS*Pu1| R=Cl(*tRfw`PygsNuL`}9-ZnPSdMJJ@ZdVP?4?Imtne(F z_D2$#kG3S9bWa^yVPnqu!=jY)>wh0sG)nW019|<}wmFZSs<^SD5W&dI{4{!&@oBFq zrr3m=YROswVXqpaT_Dg6@dr`QgWT^sY9m#kRn%eLnt?(RtyEuGmC5S9-86Ehto%4e zS4%VCII9aY*ROn?5n3npzsNevpt!na4dX7s-GaLe?(XjH4nc# e$@%RwWY%+Gw|36 zZzt_TZ?cF0Vv`2^?gw~kRtn(=Nk~W-1W20+pR-o86G!lMvCRxJVF|Yo2VqzXu7I&P+IPGuH!z5PZo9vqc@kNzJMxj`6fD^aTuqE{lbm zMZT1SD&ayiJ(Hy+%!nk7n%Eh+A6*)~{%o^Msw+*W-=t)v*bDN0d@6Y~(8CrRPQ#|c z%&JuiMvR6GC+VQl$;?Ci9uu(C%kD^JCWQdj4?H3! tieYSOnabczT4`Kip1N-u z8>2%xOPABW$PhV;-{ Gn&gMh;tCB87}wq7L+z>@yj7Vr~Y zF+y&_q$|-_g(y!ZNP_2(#$m<4c+jOh7-$1~3aW&WebzMpW!`B}YJ%@lFD+0cee|Q! z;V}r0s;?2nui0W!ST_Rk9KEZL1JMQyi;`KGq6C{A|B;iq$*V)3DtDrKEr5?Dkrlxt zbZ(avU12+N8BPvALKa1G$ki`db95HGH@+fP-gRCzqaN#ne$gXNmP0~D##%-}4uru5 z_ZGSr5f9NhitkZ|qQ*X^UvA2%Bh_<`pBuiI&g<=R&Pj`LK2u$w<7pW5IP1XDf@qjQ z+QoqFzsm)^sjn2GAKZob>qnWU{-HF^GE1w^RG2vHk->jHULw)zNrP@;5yD heH@;LQ%U_&F z5(@h`6%B1uw?({E)I21BoHx`rS?&{5CKTzOYJQXbxL1)IsDZJq(WwO{xG>*qo62RE zk7kR_O}^c@Wyf#CsD)f2`2-!9kfUEKuRf}eNi6PH6HwL-0a57kiH1{R1sFbdht1pB zL*^00Ro;{^=j<}f7~Nsk;p|~Dv4Y6UN_UfCT*#!}_2Z|qN}81k (qC|s|OW&$lJKQYXViWw=I>lS0R zm#$NRk2VV-pX1j_nx*~IZ%@sVS^qLKsNM>RUQLwgVS1V~`Z%GCr#49`{(6QOmvZ$y zN}A9vumPRGHVSX&8ZcZnXZ~thfP1$SrD#AelSg--3;1Z??a(SqDv&Q%j5 wy_%w~+*Xrr^+@7C$hxknVArfz!*N(TUGmUKYpJsmQwZ%GxCfk3g03P!uX z2m)o`moqVd3e-TXF_D5O@|5mX!)-8n _s$M%k5K==(H`*7;9ddQ(5pc}#_D6Y^Am}=JzGC+ZSw{NyC zT&0PDwOc4})otfy_&7)X>wdjT+DW2b5&lnxudm7@cFE>gzz+%P?{$qoWuH*LbZD5T zXnc- WGfbPjz5Rsc9W3PAuL!7;$6$-WUogA7Ghs2{Yo)F+ zS!wEt$NYY(Z~$fKd_#{`t4TzYG mwY@}Mj5TSmz$tc{8iyyjQ*cIH~tcRS$^3oeuNL=gG zYa>dUNvtZ_Wh-Cpoqu= Npcn)X5|Hj7o-`>^yLH#6sU3$ibU0bh=pfv>CgaYDX} z{zgj_R~pLE4_eHdzP^u7Ur*CdIShSY$Bs|C6}cRReA`;Pf%mT-c1=HK{-C?S?e~_S z+n!t72?1BxloFkZsRpo@6_cej<4@qF!{h>C`~abpHbE|+%PVszQ4X*PE9%klJ~JB7 zER9Dj_d7?8-g@H%q5>`2WAnqW*;OtQ;x5kflo!8tUBnQSv#CT=%}QSZ4+s9$b;J6x zND}2p=v5mAk{{WP>6H{SOhy_A%n=zAVx!eLa=`f&teTwbB+csk7XN-O*4To|Mtaem zwb(25S&C6c(x`iX%3QQu%bJ>bBM9AKRcdoPzWv;@`Hr*>B$@0P!;+9 YQ?{M<&wKB(|$ovFVjJZVT+?Z(Q`xWp)7f(@Gn+Px*elT|1X`pD09Ax-;to z!GN^+PNhh9)SYAKTWIH$Z&43QZ5xZXs(;o%!hY9LZgFcP)m==yldlpcS>2ZD`>#@2 zPtH`FVlx#9B7>Npzm5vj&!@u^4m71>46Ks;w2el-CIlPng y{CQKZ{qPc~%Yd#O7_HWB 110Dw&C)x3TN^ah#OMfYj0N zN1$-W(hEWJ@kDx30ssT_2n#U?VxfbFrw6eAGl%rQW{CpW|BfX6*DO(PZubA}z67v? zwq;>iK;aY+dLR}5kKRiRN(ciG6g&ifb0sBFN2OcPSs9O!`xq7~SK6ld5zA|p&o zqw(;{Kyy3)a{YDnVM6dutgd%@y_0Wl43!Ji95-9KQ<-bHOMwRUm~>D6HOClb
u7KgjnvoE&!&eBoaSAX7#v0HFp?7jmp 8iX>FyOysA@n2WEwcv{Py{pypO1c&-w4}z7fbwx zECwaV_zg~NN;8{9dTOTzvLVTM;_g!NpD_l|ZP_kg%I0-0gl7PymnDmF&tT6mY(&1x z*%Tt!+UY3s-Rx!|3~Gy?=!IOnz`1&H|I+CTEu=8g)!@d*cj7^N_tZxh6F%-9pd(;G zsfU}3x)G_B+*gCCj^Ng*&zf0Mhl#zygz~aHHYd!5;|_rJEE%VCqT}7ncQUw=DrE$6 z3-f}%)WK42VHyL4=t2$kkiPd^ZV5ZpGRvj*5%FAr=gTDf 3B0i?Iyu6KlZHaS;nRr(5o^b+N&6 zI_WB^1RG%B2Oj%`)w{*#_0P%v{(66=RW30DD*w1RT0#Aw%#MZa54QDi0ipOPCsNu3 zs2UwKcZ8|846Kc5&~GmH={nNp=}^dudlA$$^Y)U?`NZaA1{sJGU%XTpYGR&9l-Fq; zBXaO!1n*yLInm{|ayX?0=3dl# {i ztupp77Qt32Lu=}`8Jk=~BpX76-7RebU0vSSPCO`&P2-=Ang|$Fic#PrjfA@VSqq&s zcr0)dGSP^XXS%a7nzCz?b+D!z+pHE&oQOJ65>PJhVOe%*O)Rf|^^*7cV=KYspBTl< z>+1tiUqqs 6grMx)$jeR0I `6E2Or6^DRiDbiuA<% z;n>9DM|hVGX(>s|?*oQRdfF;j*|ijh?vbNwSF{QNZa4+*RhB`)thF8-Px-`t5`jR^ z-Oz}@%HM}9`ba}|lIY IKA8fU9>tyS{&Fs$xmy# z0Xltt+w&@ujzJ1hKL-LmF%fBS;2kb!$$lXdmnlCzk0?UhN|zp#C%kLq1u&b{|AciW z!aP zUlBwix!7L)R@WS)nEX+z3H7o@n_-s?U=7?v;fE+Hj+O-FedVe6WmqzD@Dq(6|VikI(87yssr~0 z^5AZ!Z=)HaXAAwKW~OVK0&6G-+bJ)0F7wh#;R;9k{KTU=(m8QI=n6B4DY~r?c$$C< zXD`|u!L^L ;FFq(#UryTc$ z=v|qpq4AT-Y-YFIiuDUk9pb|F^u_cD@?1I{kr0eCN>lTwQif>A<}h<6h^m827-$l9 z^t3}~A|jHnkb*gQ6A2=up=jIaT2^|2`phRaxJ1sPvi8LoJfep6Wswiq7pF-iLlJ`a zJ$|Fi8Et!;`1=*RCkLpxMpP}207PlnV8QJWVN==8Qk(qM`I!$)43ViwyOaEYo?MB_ zmB&G5Y)W6ZI-aia7|Dx)BPlv^TYNZG$|Ei$3bw3@aE8a?W8OCl9J@SR5Lp5ewK+ot z< #<<} zs0?+)=gfLS38iSVwEpc)eNQF3-4ZsG#V3ja)vYmIqv%Qgqz;uLL6jJom7?Ku=H=L5 zm*j*HVW*8D4j**BMHDcY43Nvu1wWBy+uToC`|L&!SA@TsPHp;tiFikQY7pTtNfG)% zyRC{~gL=QJm^h+AEeJu^XZ`2v4Nk)j4)80AvL`mMw$@IgJ#NFU^T(sCrc(VLSYM{_ z*u0z0^Ktg0li=&;#oe_u!LJ1r%Bi}7Wl8s>G;Jz@#0#^Kx>1(Y#zK{rbWhl8=%>~P zvcdSxSjPBb)O^Lj>&P-W{Yp~?&H>YxpZXKWNtVOW=aR9?j2QWV_M+=7FWg7sgFwZb z4?MY4WJGFU?U{;8RZ}B$`pq{n;v &L&hX1PI4~-ejVMq; z3mq5pnvJYtp+>hIq M2lGRy3Jv;nbe0tH{p{^&ceNE|VDziCLeYIF z50nYL+Oz{O>;^8R{0r=Q$;)@k^^q0rsmeF`aA02b zafA3AX6ZIx!>q73*hFxJr1W#j`6SkgttK7pRUZ Y7g-6vG1?D}J4 z@acluDOeP9@n7`C93Ew*X8xq>i3E^6csw2+W(NKhNm$;5uaC`9ByTUJBp@82@o+Dp z=ASa>Wz$Dsb@U0PC$d`1u3mJ_12EJ0?F5Vb?ca004t%vrvQC*?zxQh$uRd2;J7Mss z3%0QUmJ9!~q^ +&sOEXRh6W(j3E1^ID|mZ3js BwZV)!@W$QJ+;Oo}W<8ej&f zaw=Caqf%z5d`nOrMx+|q6gkHwtJjAyV6gn4(Yj){;(t^raFq1<0v>LwddrvTv&g+E z_$XkPf>tv$y XX3|J zmjS)oL{z7xfc6W!ZnS`7*sUbuos}A3s<}xo_Je_)8|7uFM=?!_n`I(w@N-J;v=oz* z(_PIjr@kk{#gV!kjOMLkO=yeN=_=t;YMrlq>Q~Z8he;@vd)}lAir&$%2N3FI-0GfB z^THFht3xx5R im5;Jz-*y?wzX^<4rvIQ0R(19f%(pl2AcyS=Y zVt_M@fV`@#Rru#n&j@bha8=J~1+Yw~LDd&Ez~n0TTXeB8L}`(eEyO`4#bDaCyw(mz ziKqaw)h0v>0?(vBQrc1v^sW-nP@qF39eh@Hze90e%Ol1ge~E%&&8b#^X<&A0`S7~u zK@ P+A!P_sMjm5?!^TInW)X<5WFuakJN8ZvVW_zKGn47N&7 zb>)+DRmt8DO442~XBXXy8t5sy=0iE7b}@|?!uZ7DI2Flf5Wf1kzUC3glFe}dy{dr@ z=5 9{5GaX?lax2A4SC1|%}-c>RQcd{DXWaJjx zTogf23NFM$AtRNmBL>H`IwnF4pf9Vf9<)Nx|3$jZzXY+V3lsZBM=DOnA668*StxfZ zH(V;pzk49Hs{GvAK2Z*Y*>F8gIZ0z#dkV|wp>cTVcSX^TlQw2M%bqB5Y=Up%lq3Vd zXpn7(n~_;Gh=-)vQp3>}$vZC?#7?|U6=-53O#ncUBhRV0_Z=j2HAwsNj5D+y;dH5y z{g%Gn3N1od8<)~o{GTJ&$`Gu?!rh(ncxWs0!(jnG#pJhXkJW+eJ*pAV^3iYwbx4Os z^=Sz=LIwETj4lXwqg6w|TGTVN0VKBJ@DpODnxIk%1!ucpvTY;2wGs#i19sU3wt}Ao zN9rpt!s^e2%}VQ?Iriglb&wq(;pV(T8=jICJ*me2l1)fNmhZ8}{4l9UV6ZJb*9&}{ zKPblF5167X!o$d;)+yE;^`a#dn3g7^WgJW|0EEKk2#b=}m$iZhF9ej8qCtNHVM_M@ z#b)Rs0NDSbY5>^(a_v+R4E_`O{ssOGCjF)10ob`gNjMNpsO)S2&i{PR0RTBuLSTS) zaUf`$Teu*2!66!Wn(w$Fis7KrhM>*<6>=MrL!6^<{P(I4Ql1?$HmFw=f(U|x3xuYI z#MO)=29cWh_o`+d0t=iYiHraP0`L#n4>+$a7q`oa)b*@&ggRI80I3ZXeoM2mS^(~? zeP$DNL7ai@da}tZp~CisK7AaMW(E(}og(qzmV6&10uTQ#w5Qi#8_gO~v$*|jA;ro6 zP6lz;hG$qMG%XQhG 5G<`fp&$@EV>1M*3)l_o zCB_~3$Kvtl9X%9$POgj)Z5Q&a#iP@LBn>T7_oTn3_g8pa)yU7WR5FhMP5tVfTPfO< zZ@E@2^ez24E>1$ph`E4Q_#D6dB$#S}>yR5giIy2#feC(FCAJdLLRF>T7f~%Q{8>zh zjs)~l`#VWq&$FUZqf4LqXcm{F3xM)E!6~0P92t{!-WeQqD>3OuUrSb83LE!i9g`ky zlG~HI(T-df=uS=SqAQ>lc)Zru_q_1wpS=oyICv1|S(G|tGf;8S%@#tS4(l(u(4~Z8 zaj7(l?q~F)ywD5QYqXrHy9>