From 826cc2eabc1c68576cdb2b0c4d5c23a8721e1434 Mon Sep 17 00:00:00 2001 From: Zabih Mansuri <3010192@stud.hs-mannheim.de> Date: Mon, 21 Oct 2024 22:35:46 +0200 Subject: [PATCH] =?UTF-8?q?alles=20angepasst=20und=20gepr=C3=BCft=20online?= =?UTF-8?q?=20shop=20funktioniert,=20fragen=20ob=20die=20prudukte=20in=20o?= =?UTF-8?q?nlinshop,=20sich=20=C3=A4ndern=20,m=C3=BCssen,?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bestellung.java | 31 ++++++- Kunden.java | 9 +- Main.java | 75 +++++++++++----- Prudukt.java | 17 ++-- Warenkorb.java | 88 +++++++++++++------ WarenkorbEintrag.java | 26 ++++++ out/production/Online_schop/Bestellung.class | Bin 736 -> 1875 bytes out/production/Online_schop/Kunden.class | Bin 988 -> 569 bytes out/production/Online_schop/Main.class | Bin 2889 -> 4205 bytes out/production/Online_schop/Prudukt.class | Bin 1317 -> 1201 bytes out/production/Online_schop/Warenkorb.class | Bin 2714 -> 3434 bytes 11 files changed, 188 insertions(+), 58 deletions(-) create mode 100644 WarenkorbEintrag.java diff --git a/Bestellung.java b/Bestellung.java index 3d4f4da..e6cc4b2 100644 --- a/Bestellung.java +++ b/Bestellung.java @@ -1,14 +1,43 @@ +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + public class Bestellung { private Warenkorb warenkorb; private float versandkosten; + private LocalDateTime bestellDatum; public Bestellung(Warenkorb warenkorb, float versandkosten) { + if (warenkorb == null) { + throw new IllegalArgumentException("Warenkorb darf nicht null sein."); + } + if (versandkosten < 0) { + throw new IllegalArgumentException("Versandkosten dürfen nicht negativ sein."); + } this.warenkorb = warenkorb; this.versandkosten = versandkosten; + this.bestellDatum = LocalDateTime.now(); // Bestelldatum setzen + } + + public Warenkorb getWarenkorb() { + return warenkorb; + } + + public float getVersandkosten() { + return versandkosten; + } + + public LocalDateTime getBestellDatum() { + return bestellDatum; + } + + public float berechneGesamtpreis() { + return warenkorb.berechneGesamtPreis() + versandkosten; } @Override public String toString() { - return "Bestellung:\n" + warenkorb + "\nVersandkosten: " + versandkosten + " Euro\n"; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"); + return String.format("Bestellung am %s:\n%sVersandkosten: %.2f Euro\nGesamtpreis: %.2f Euro", + bestellDatum.format(formatter), warenkorb.toString(), versandkosten, berechneGesamtpreis()); } } diff --git a/Kunden.java b/Kunden.java index c8f4da7..7be2cce 100644 --- a/Kunden.java +++ b/Kunden.java @@ -7,8 +7,11 @@ public class Kunden { this.adresse = adresse; } - @Override - public String toString() { - return "Name: " + name + ", Adresse: " + adresse; + public String getName() { + return name; + } + + public String getAdresse() { + return adresse; } } diff --git a/Main.java b/Main.java index 610a82b..24ee407 100644 --- a/Main.java +++ b/Main.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Scanner; public class Main { + static String adresse; static Warenkorb warenkorb = new Warenkorb(); static List bestellungen = new ArrayList<>(); @@ -45,30 +46,64 @@ public class Main { break; } - // Benutzer fragen, ob er weiter einkaufen möchte - System.out.println("Möchten Sie weiter einkaufen? (1 für Ja, 0 für Nein)"); - einkaufFortsetzen = scanner.nextInt() == 1; + // Optionen für den Benutzer nach dem Hinzufügen anzeigen + boolean optionenAnzeigen = true; + while (optionenAnzeigen) { + // Warenkorb anzeigen + warenkorb.printWarenkorb(); + + System.out.println("Was möchten Sie tun?"); + System.out.println("1. Produkt ändern"); + System.out.println("2. Produkt entfernen"); + System.out.println("3. Weiter einkaufen"); + System.out.println("4. Bestellung aufgeben"); + + int option = scanner.nextInt(); + switch (option) { + case 1: // Produkt ändern + System.out.println("Geben Sie die ID des Produkts ein, das Sie ändern möchten:"); + int produktId = scanner.nextInt(); + System.out.println("Geben Sie die neue Anzahl ein:"); + int neueAnzahl = scanner.nextInt(); + warenkorb.produktAendern(produktId, neueAnzahl); + break; + case 2: // Produkt entfernen + System.out.println("Geben Sie die ID des Produkts ein, das Sie entfernen möchten:"); + int removeId = scanner.nextInt(); + warenkorb.produktAendern(removeId, 0); // Wenn die neue Anzahl 0 ist, wird das Produkt entfernt. + System.out.println("vielen dank das prudukt wurde entfernt"); + optionenAnzeigen = false; + break; + + case 3: // Weiter einkaufen + optionenAnzeigen = false; // Schleife beenden, um wieder Produkte hinzuzufügen + break; + case 4: // Bestellung aufgeben + kundenkauf(); + Bestellung bestellung = new Bestellung(warenkorb, warenkorb.berechneVersandkosten()); + bestellungen.add(bestellung); + System.out.println("Ihre Bestellung wurde gespeichert:\n"); + System.out.println(bestellung); + System.out.println("Ihre Packet wird an Ihre die Adresse "+adresse+" zugeschickt\n"); + System.out.println("sie können jetzt weiter kaufen"); + optionenAnzeigen = false; // Schleife beenden, da Bestellung abgeschlossen ist + break; + default: + System.out.println("Ungültige Auswahl. Bitte wählen Sie erneut."); + break; + } + } + + } - // Warenkorb anzeigen und Gesamtkosten berechnen - warenkorb.printWarenkorb(); - - // Kundendaten eingeben - kundenkauf(); - - // Bestellung abschließen und speichern - Bestellung bestellung = new Bestellung(warenkorb, warenkorb.berechneVersandkosten()); - bestellungen.add(bestellung); - - // Bestellungen anzeigen - System.out.println("Ihre Bestellung wurde gespeichert:"); - System.out.println(bestellung); - // Alle Bestellungen anzeigen System.out.println("Alle Bestellungen:"); for (Bestellung b : bestellungen) { System.out.println(b); } + + scanner.close(); } // Methode zur Eingabe von Kundendaten @@ -77,12 +112,12 @@ public class Main { System.out.println("Geben Sie Ihre Daten ein:"); System.out.print("Name: "); - String name = kundeinfo.nextLine(); + String name = kundeinfo.nextLine(); System.out.print("Adresse: "); - String adresse = kundeinfo.nextLine(); + adresse = kundeinfo.nextLine(); - // Setzen des Kunden im Warenkorb + // Setzen des Kunden im Warenkorb mit Hilfe von ki den logig herrausgefunden warenkorb.setKunde(new Kunden(name, adresse)); } } diff --git a/Prudukt.java b/Prudukt.java index 6bb99f5..441041b 100644 --- a/Prudukt.java +++ b/Prudukt.java @@ -2,8 +2,9 @@ public class Prudukt { private String name; private int id; private float preis; - private float gewicht; // Gewicht des Produkts + private float gewicht; + // Konstruktor public Prudukt(String name, int id, float preis, float gewicht) { this.name = name; this.id = id; @@ -11,6 +12,14 @@ public class Prudukt { this.gewicht = gewicht; } + public String getName() { + return name; + } + + public int getId() { + return id; + } + public float getPreis() { return preis; } @@ -19,12 +28,8 @@ public class Prudukt { return gewicht; } - public int getId() { - return id; - } - @Override public String toString() { - return "ID: " + id + ", Name: " + name + ", Preis: " + preis + " Euro, Gewicht: " + gewicht + " kg"; + return String.format("ID: %d, Name: %s, Preis: %.2f Euro, Gewicht: %.2f kg", id, name, preis, gewicht); } } diff --git a/Warenkorb.java b/Warenkorb.java index f1a4016..adaf235 100644 --- a/Warenkorb.java +++ b/Warenkorb.java @@ -2,52 +2,84 @@ import java.util.ArrayList; import java.util.List; public class Warenkorb { - private List produkte = new ArrayList<>(); - private List anzahlProdukte = new ArrayList<>(); + private List eintraege = new ArrayList<>(); private Kunden kunde; + // Fügt ein Produkt zum Warenkorb hinzu public void produktHinzufuegen(Prudukt produkt, int anzahl) { - produkte.add(produkt); - anzahlProdukte.add(anzahl); + eintraege.add(new WarenkorbEintrag(produkt, anzahl)); } - public void setKunde(Kunden kunde) { - this.kunde = kunde; + // Ändert die Anzahl eines Produkts im Warenkorb + public void produktAendern(int produktId, int neueAnzahl) { + for (WarenkorbEintrag eintrag : eintraege) { + if (eintrag.getProdukt().getId() == produktId) { + if (neueAnzahl <= 0) { + eintraege.remove(eintrag); + } else { + eintrag.setAnzahl(neueAnzahl); + } + return; + } + } + System.out.println("Produkt nicht im Warenkorb gefunden."); } - public float berechneGesamtpreis() { + // Löscht ein Produkt aus dem Warenkorb + public void produktEntfernen(int produktId) { + for (WarenkorbEintrag eintrag : eintraege) { + if (eintrag.getProdukt().getId() == produktId) { + eintraege.remove(eintrag); + System.out.println("Produkt entfernt: " + eintrag.getProdukt().getName()); + return; + } + } + System.out.println("Produkt nicht im Warenkorb gefunden."); + } + + // Berechnet den Gesamtpreis aller Produkte im Warenkorb + public float berechneGesamtPreis() { float gesamtpreis = 0; - for (int i = 0; i < produkte.size(); i++) { - gesamtpreis += produkte.get(i).getPreis() * anzahlProdukte.get(i); + for (WarenkorbEintrag eintrag : eintraege) { + gesamtpreis += eintrag.getProdukt().getPreis() * eintrag.getAnzahl(); } return gesamtpreis; } - public float berechneGesamtgewicht() { - float gesamtgewicht = 0; - for (int i = 0; i < produkte.size(); i++) { - gesamtgewicht += produkte.get(i).getGewicht() * anzahlProdukte.get(i); - } - return gesamtgewicht; - } - + // Berechnet die Versandkosten basierend auf dem Gesamtgewicht public float berechneVersandkosten() { - float gewicht = berechneGesamtgewicht(); - if (gewicht <= 1) { - return 5; - } else if (gewicht <= 2.5) { - return 8; + float gesamtgewicht = 0; + for (WarenkorbEintrag eintrag : eintraege) { + gesamtgewicht += eintrag.getProdukt().getGewicht() * eintrag.getAnzahl(); + } + + if (gesamtgewicht <= 1) { + return 5; // Versandkosten für < 1 kg + } else if (gesamtgewicht <= 2.5) { + return 8; // Versandkosten für < 2.5 kg } else { - return 10; + return 10; // Versandkosten für > 2.5 kg } } + // Setzt den Kunden im Warenkorb + public void setKunde(Kunden kunde) { + this.kunde = kunde; + } + + // Gibt den Warenkorb und die Produkte aus public void printWarenkorb() { - System.out.println("Warenkorb:"); - for (int i = 0; i < produkte.size(); i++) { - Prudukt produkt = produkte.get(i); - System.out.println(produkt + ", Anzahl: " + anzahlProdukte.get(i)); + System.out.println(this); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Warenkorb für: ").append(kunde != null ? kunde.getName() : "Unbekannt").append("\n"); + for (WarenkorbEintrag eintrag : eintraege) { + sb.append(eintrag.toString()).append("\n"); } - System.out.println("Gesamtpreis: " + berechneGesamtpreis() + " Euro"); + + return sb.toString(); } } diff --git a/WarenkorbEintrag.java b/WarenkorbEintrag.java new file mode 100644 index 0000000..5af146a --- /dev/null +++ b/WarenkorbEintrag.java @@ -0,0 +1,26 @@ +public class WarenkorbEintrag { + private Prudukt produkt; + private int anzahl; + + public WarenkorbEintrag(Prudukt produkt, int anzahl) { + this.produkt = produkt; + this.anzahl = anzahl; + } + + public Prudukt getProdukt() { + return produkt; + } + + public int getAnzahl() { + return anzahl; + } + + public void setAnzahl(int anzahl) { + this.anzahl = anzahl; + } + + @Override + public String toString() { + return produkt.getName() + " - Anzahl: " + anzahl + ", Preis: " + produkt.getPreis() + " Euro"; + } +} diff --git a/out/production/Online_schop/Bestellung.class b/out/production/Online_schop/Bestellung.class index 5fb48b02495fca6ca47ec7e047d1e966b0315d1a..47b30bce6c99145db1daf8b289a8f7bfc5c09b9d 100644 GIT binary patch literal 1875 zcma)6U3VH)6x|mn1Cyap(o)-MGmW7IQbGG+8>rPZ4Na9aQ6iP)(*-VMnqeku7*hL3 zeDV+Y;?lKDnq~cX@WHkGQR=xfLm-j5oQL~0=bXLI-RImt|N7}y0Ly5q2qCN>qTv*x z45?>)kC#kt^-3G9XQJ&gMDH1v;ofHm=kg5&F^2iE(PPsTJ#H>Ly{~zt-Fq4^(y&B3`vH3 zLpTF&b$0B5D=fY9`_E37<{%ouyT+a$Fpe`wE11=A7Uvk$2ZB6Ib7=J#;?GB97-nim z%qr67yoNV$fg!OsiNwIFDlXwo1#fA%j5&t$9!J;ci&D*QbMqm0#TM=8axD8f!=+r_ zPvhSv9?%sH^LU#i6brQ_`Us0*fRx~`6GMG}5y`tB~w=Z>DCXISNLP(8n}>Lc4FtGEDQW!b`BlKah9@rJ0Vu z#LRCCGhcrb>`%*mVR0X+!oof>g+pB2hyDZkg;AsND&jQ85rK*rW{^gLP)}3)r*MrJ zU8j?qn8i9-={_EwV1ssq?D1sYN-_;$lh%~Q-{eG(^%(_O$|y;MKgDMO?Gnw>~=pR>!Qt{C_T8d#PT-HQlpFy5P(NXyU)=ec!sC+H-s<#0T~6X A*8l(j delta 396 zcmYk1%}&BV5Xb-9rQNn{i=g-|RxKzc(Zs|HCpFP{mc*pTCV~eM5^+gmXe8l42p3)!(3nJa~e5#&j)AQRIv;R~upFo)j7qtfACWq2#!8f?_BuRqzK$ Ci#I+1 diff --git a/out/production/Online_schop/Kunden.class b/out/production/Online_schop/Kunden.class index 05447b217409496d4d61fa2186d1021885be3620..b197446b367d13f306ee63b9eaec8d70472756ea 100644 GIT binary patch delta 285 zcmcb^zLSOP)W2Q(7#J8F8Kft2l}@~uqr;w_TH=?Oo65)_qM_-Nl~|UjpOcuEt{+@d zl$n=q&B(w7RN$CWlv-SzIys9`dh%-~X>Mi)Mg~>}0U#+jS&&(wUI=KU5CaR4WCfCJ z44e$?415e648lMW1qNmy$>bcJNdNj??~mF``BPY0enZ$}v=3*`uI za5oTPC@R$Zo`nk57&gXyBsxkuTz~TPkgQO1sY8at`h2zdNMk<4u>XIleHy%@TpGOG z^`tnNjt3$*;{!ilMLFE>^T3PzG?>#vk0vX0lfBzyYLzU?uwGv{i`i4tz!Aq@RCPH? zd>PS1Y`;}XhdSVsk3tWX8x~MySUVvuUsYMNdX&&bb~%q76T7Gx*o%mJ&QQCf+LM=R zBwEQJ375y*(JHuN_&Q5P3QW4aeb&U!DU2s%C|NrVO(4104sEgIFp0mIh6p`^`ZFKm+lGbFeSJtW%LA~nW0 zBh{~i;XZkvqd$S}vi$?hKDdElH*c`=JqA9Yvw|F*OLXQ@gn<$j-k?Y|Ny9^Il1ByN zHY~QHMj2}G2#?b?hp`Wo>}%?9jg?!h0^bOoLDVHrI8atp*^2E_S~-g+G3qI{=q}K= RZF-+!pFESSI&3tt`3G#)?m++m diff --git a/out/production/Online_schop/Main.class b/out/production/Online_schop/Main.class index 409e88d9cf6bebd730e63f5e16bbea5a472f1e5e..6aed3044ba379a1903e1ec16b3b38e1d99981b7f 100644 GIT binary patch literal 4205 zcmaJ_Yjjjs75+{#$-SA}@E8aXZ0Y5l@JIw&XeS{Mf`NhIp@F1{Z(DdrL_gWb7zuFO6*!WbKd*x z{q1k>b8eo!a{eg*EqF1A5|nBP7$`%zz>LGzQL7w-01JnHDIq9f9h+3U;O;;`HS_Y9Xz3V-WMOP-(enLd(}I zsq0WDEHSVY%V>NiM=U0U?WHke!gSPfszbUxqZbn0mMhJ@Zbktl!$GXTN)4+FtVX@S zEZ+(qRJ5HY_bFj1rR)@d)paN#Z&VW2yk zlv7n3E%2)`qAc4cFlWD$7`>44?8G>xdGoPAhAsM~CvZ zD_p#svq{Hpp1h`h3=DJhloOY(qhqhY?6ni)((!sYE;;iSx^7*)*(q&Lx(b7&mFrOx z`>5QF_2w2y#-&m@Ct-3Tq5PnuL!fCgh6R@tdtsFsr;9|0ya`OlmJo(sE4!P?#rNg`wd11(?#IWNH&o7H$c@P^x^?{g{BZ-HP$Vjg zr7~Hm&Pvah z#0*&*&C6u=R!evXe{Jl3@JZX^y4HZAW)P2~lp3|$3CHqsF7;keDLO&R#^y#s z+nR}U-E?K7 z9bv$T2%}nMrF>GNjjl{*j!HEboCrzAXR(evEYs)N83t;J&6VYrf4eYj^TX1iILUO+ z1>yipH?^|d1ht$sg;I2LLcKz$+W6f;p=tkpK? zTgLV1tKv4_gFB3i9fs-203;2RP3tZPkKOq$Hpe->DJ zjZIUjs^Kz2;`Ns*cKdc=Ayae-vu`PMm8aR#)icJgd67Wi8*G>02?W^YqnN*^Inuyd zur6CM4Dp1&e1V5pFL17uQXr)RGZsU7?CVs4`>>qbllm zXOx9Pp;_$i^1HLkLvuoN+1)*Yd0nS5e;8&s5LjPUU3OC3a~g|7%ZE_MdgTxrSgp!e ztMgT8EhlRNL%4B$xmtVkcvq_~e~fC;SonIDvYyYfjAiXDb#N+)a|VEI#pCxC?(FaDBJ=p*RyPA zaacShZU6Y{pz3yxcd0?RI#^vfgswr{uIAo4K4+*oqm)x>{B0aBU9S&fzyG`EEUXd4 zITiMm?it46aMfv~YpTxSNC`UCo__9OT~n0@@-zm{;~k(Y^OAh?-_73O)xhADqiV-{ z{T=CZxJw{hUQ>P!9}+l;`KooFz;_T2Yf2(DPLm2;H0KANif{#LBVza14i)g?Wu>q~38C%76 zzS4K{)!mNm;s7Edh8-e_oxp!1uJ|E2w?MpzXV@yiYViV|Wvi4QJI~-p#43O$YWy6fl;OwRwHY(7(jDa*exgAe z`WoZBAp|4=3hPz*eNlo|+&gTHWdCGVyKe{Kv zdZ%L1C-b}uofyJHD~9lys2Y5v&^dzvGIj)ycC92Khw+6Wd}$*2EaCwwa4Pu(o`oa) zTy=S6CH+c6q2;KMwJ2Uqe#@24~pT(J<(lR~_-NRBb}*7(W+)gx%>8pc=8sAC^z w>+5HbR!0h-wd(%`AhtnnF2&E;F2OJG0&ATse$Dbr{E@vNTYth|@K@CQ540ay;Q#;t delta 1375 zcmYk6>u(fg6vlt=c6VmGJGG=xq=hzPTcPDvDu`iAg*9^DUSzSgsK~TT+ijOAZg;s^ zT?OxgDB}$;SiIF6LQAr>lo%8IqVbF0O-xKo{Nf*A6U8$F0r$hZ=bSnFobx=-JNuXU z{Qmyn0Cq;vT}X4v%#!yGW)Jx z$(Y-%<>spEVVgW|hzQIMg9Mu5wgZ`zlkKuHwlg%G>50%xn?bwxC^D3D_DNaLbRLlW zK6@lrcY58Pp573))d=`McKoEL5e}QR$ClRvtP$C80LVxOIy;A zCSx!{RuOdU!}2w+z9BJa9kd$Lmeb$Z-ZNB9&Dw9r%m_<4YVZUr z6(L`N2n%@9;3@L%tX5b1jG{QcFJq64NVm>$`Q;8@jR?nh&g1&L8`oEAFB-hW%Wh6L zD^Dus`lEB%RJt*q$yi4csgZ1i6Yd55RBa$7WRwAT3Fc!bser+w4w;k0#Y_ zQM%`*(u$H~*6JNlFrpMu+7eCJB; z5GMk1g#v`RmkknyJzG$m@~f{AlsJSY=j-mO=={~ErS4@&)s@q@5x>Ekk`?n7Z+pE0 z=}KQQLeD)C-4NiMdpUYMKS^!b)&dO`!2)Z7W9Y$gf<5raFGV4I=YCbi zCe^}bwTUfiD_eb8`-sS(VHt2nWE^EL?@FXgUzqoJUrrI04>&99m#P>aGA6QDt7Wpz znAo{OE#f1Iidd)S@UbiyWW6de`IOJZxmkIe#|1{?a{*XG^qTCY>3rcfl`hE7+o=8~ z_zzojI&{*rm@-dZ|Lewz!6CtgmKhd^QI%7eJ3Je5*KH{~RN%lo$h*Yf+}yHBa_>_cIe%;z6QkBNS+*sZCB(l96xNMV)0O$JAIKO@ zBrYcU0sK(LyHdAGnkIekz4xAb?w-5fe}4P|@B)ntVu;I-6eN%om_0Jj%=*9__Un7? zBdg;HB%j$s+j}k$uT&4xNFgmFqu>e@0eRmYbw|e(B@N9JOQ5iGnV{*p_ORbz$c%y< zW(8t)S3nr-Dkzx4yg=f;YuTsd)!DnKV2QnQ-}+#84!sms1U8LV+iJO6Q+J7jtkash z&mc0_H+t&pk?YjdHxoeMJML$26(t$h6kNv*f&67%#?Z6+mP;gO=3r#)^#m3xMm1D< z5JBRs;--vSoa44Y?lOlya7^lYzM_Y5zL!vUa92h}K^5A6l1>yMNqdfa!uYL9h&9mb zUC1?=K_ko&Lo<%!V(&$6|Abk>rWK^+VlEQm)!n!XHXh-r?vR*=Oyy=+c0p^p1><9Mz__!if~^%Z$-5%(>w zN22!!*a)hr)5-A(?HlATWW>P4TrwyDlS~pO0uq6TL_29E49DW%kO0SFWbD%Z2$lO literal 1317 zcmaJ=ZEq4m5Pp`o19~ler^Q-PTZJnY-(QL`RusJiYm+whgP*prfh+Wm+$}Zz=Fjj) z7^8{Aq#yhN{wU+@-6h3BgzV1j+%q%J%+CJ)bM_0sHn!4;AgUpzBaQ^a^btSd;Oh9MQcHMrn-yu}Y=Es6zwtgO9Pr8=fswkH! z9T`kBM64zQGnHvp#~kJv;yqVb9$9P3x~LI(WODvalevk~ z-&?XxnkTs}$+uWANAuQd#Ze=}Qeo6;683;SQ6|(I#y(Dfil+2e~c~;8r&|Ub7PlmMotG?@$@*x#v z=(I8kl+(D4I~wk)4&P%~JHI^3K5;st98e6JUgHhvxTg%Chg%o|0~&9*-Ruf)t?oFT zey=jx=^@KMj{B!QF$Vr&2p`O2Ww=#gh$`=P_be&s26WT5gBMgZN7=aD-1LGD52^P2*8`~nnC>ZRJ3{BVawY*5$RaYyB z>HC!?ZIU)=nv%A(^yxlkn5NU1A!IV0X(vDQ*Z$n;5B)C~TKBuVD_O=&CwP$Vy*l@t z?>px^XZP>_eg8uMBltrMO=#8-(h)|BK-*>GiZNI;to-2Fxyv%=3bY(EEz=zqXzuBq z(GU^X;u%$4vp6{7IL1=Othg~~XpSNdT|=vmP1r0Doi!Y36>MjYYiU}pW5~Q@kj$C` zbvLEq5uVnqPkE;K7}~H!;c6FX?a5@F>U_1}rqaDLacsk*8XnWpf$ajD*1IE8V}4#> zYmXnNflaFSIdyl3j-BWfh?uT)4A*u9w)ONjph^elsW_6@tznOjE_4ed)*{tR1hhq? zG9_PRs+b}APhy{rPoPI2WO>K!HQ$X$6uUkh{n#%M%S$)w*ovM&oYpn2F&x04hEMAF z6b>>{a4rz$jWjtjVp=getm6rliWWzf>?=|^e^SR&ILgddq&s3=GZu>k)WhsWk-{+z z$8`+j)9Xq;y;N~!iC*n0fo$~?V%mdQhZUK29ch$O5sV0Q2WXR)nOk&|W+_=OUNSEi zs@A-;4#Y5uF%745jANpvn)TjDsjPe#tq01*V5XH%_0Fgaq;;Ie)3hb&DWgOMtr5=$OJ;fk#V5L5|v1&TwZGbH=pfRJAlGo%60wYc{7#_r|C>^*J}>O%NNM7HY2qKBzYw_Q?LN;v z=M2|Tp7Aly&o6K{jApKYw!YgCeRrW&z&m)7i@gGWLEBKMBea6v6%0In6FYa@Ktfq} zgzn%Fp)4cX5!$hWBkwM+e)J~{B~Gm1q{7z>#djYw1ZJ*NJ)7|eCwc#dq;N;_wkR{Resz^L~%)1m374{DAlr!qXoQ;cO#9{p}lQNj!I}>$P?~e_gFF z-Aa6B4Yx0(L&SZUxSt^IBSiI-dLiS>*AT^&qL_|9l*j2hk4d~)=dlT)H6D>TnS38_ z1-Tw(9Mz~Tef{s@g$LVhlsO#pB5m`n>XmHq#sVMK_(6Rr9HEVpZiLe5TS4wYZGJBo`d6^@M+WdkvYp`h=0{;qv1`vVu~}T8ke_9#YeJdeM63zrQUEzZ ztGDq(f>uH~fY2&yMWw_wzNH9$tn#PYp5F@^uHQ$(lTsIB|A@Dm@MHXh-w~SrjQ?-o P*WAUp`VD@I-=pJywMi6Z literal 2714 zcmb7G+fy4=82_CRvLRV04VSiDS`=srRIs+%+E6ToLSsXVQiE;1bP3zAB<#lB4GP}1 z)+b+`KIn|&i*KFLvGk(j_~e8BM~=7O*wVHNd=2sAHitJ+9WGxH-C7nb#$D-anqOv4=$s2fOT6+{JEJfpH}6i3EwTU*N* zjvIr5x(39dDri*Egk1s+^O~)j1(nt8k~1S7PWur-CjO-PkX%d#kjx>FRmi7Eo5T zVp+deITTt+;vLB7FKQAaXj)@$)Y{?mc>d z2AsyYf-@>6Fj+%{xi!btSBS+b%Ub*{8P>?GO)zt=t!pc(D5i*`GVhZyoI_f{^D53G zv&ooRAJ$%y5sKzR17t|U%%_ss7%t$Vf>}Ah7iuASCISa{8hq6lgHQ<;Ij71W$qcys&SwKC!NfCQ}lK=YpA^7 zsp0Qq0g)za9o_Zz3=<4&?jGqY3~KToJ-tp*LmoBGxmvC;qm=?|jlM-d;3{Hgb=%R* z#ezkG5}8u5X!4jvKpmgFFt|%zp%lWa{O4s* zkzb?C6PWK5>UdA_`8uT;dJ2Ab4&H?r`~k}4yJ)zB*w(W7TQA@>KAULF^Nyc-hK@j^ zr26hyK#r2YBJ?2iHKvsI9fRK^Hgq2?ALhOG0uFHpfZF8Yxt1580C*}12?hn9|i4Tk^lez