From 52982fc6a2f36306181d1d246f7e22bb8bd46cc5 Mon Sep 17 00:00:00 2001 From: bhakti0509 <119113248+bhakti0509@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:41:01 +0530 Subject: [PATCH 1/4] Added about us page --- .../com/trekmate/view/settings/AboutUs.java | 134 ++++++++++++++++++ .../view/settings/TermsAndConditions.java | 86 +++++++++++ src/main/resources/images/Pastel2.jpg | Bin 0 -> 9049 bytes src/main/resources/images/aboutus1.jpg | Bin 0 -> 2041 bytes src/main/resources/images/facebook.png | Bin 0 -> 889 bytes src/main/resources/images/instagram.png | Bin 0 -> 43630 bytes src/main/resources/images/linkedin.png | Bin 0 -> 902 bytes 7 files changed, 220 insertions(+) create mode 100644 src/main/java/com/trekmate/view/settings/AboutUs.java create mode 100644 src/main/java/com/trekmate/view/settings/TermsAndConditions.java create mode 100644 src/main/resources/images/Pastel2.jpg create mode 100644 src/main/resources/images/aboutus1.jpg create mode 100644 src/main/resources/images/facebook.png create mode 100644 src/main/resources/images/instagram.png create mode 100644 src/main/resources/images/linkedin.png diff --git a/src/main/java/com/trekmate/view/settings/AboutUs.java b/src/main/java/com/trekmate/view/settings/AboutUs.java new file mode 100644 index 0000000..f5a0fcb --- /dev/null +++ b/src/main/java/com/trekmate/view/settings/AboutUs.java @@ -0,0 +1,134 @@ +package com.trekmate.view.settings; + +import com.trekmate.manager.SceneManager; +import com.trekmate.model.User; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.ScrollPane; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.*; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.stage.Screen; + +public class AboutUs { + + private SceneManager sceneManager; + + public AboutUs(SceneManager sceneManager) { + this.sceneManager = sceneManager; + } + + public Scene createScene() { + // Fetch user details from session (mocking user details for About Us page) + User user = new User(); + user.setFirstName("Bug"); + user.setLastName("Optimizers"); + user.setEmail("treakmate@gmail.com"); + + // Creating labels with information + Label welcomeLabel = new Label("Welcome to TrekMate!"); + welcomeLabel.setFont(Font.font("Arial", FontWeight.BOLD, 24)); + welcomeLabel.setTextFill(Color.YELLOW); + + Label missionLabel = new Label("About Our App :"); + missionLabel.setFont(Font.font("Arial", FontWeight.BOLD, 18)); + missionLabel.setTextFill(Color.WHITE); + + Label missionText = new Label("At TrekMate, we are passionate about adventure and connecting people with unforgettable trekking experiences.\n Whether you're a seasoned trekker or new to the trail, TrekMate is here to guide you every step of the way.\nOur mission is to simplify your trekking journey by providing detailed information on various trekking routes, insightful tips on gear\n and preparation, and a community of fellow adventurers to share experiences with.\n With TrekMate, embark on journeys that take you through breathtaking landscapes, discover hidden trails, and forge lasting memories."); + missionText.setFont(Font.font(17)); + missionText.setTextFill(Color.WHITE); + + // About Us section + Label aboutLabel = new Label("About Us"); + aboutLabel.setFont(Font.font("Arial", FontWeight.BOLD, 20)); + aboutLabel.setTextFill(Color.WHITE); + + Label groupNameLabel = new Label("Group Name: " + user.getFirstName() + " " + user.getLastName()); + groupNameLabel.setFont(Font.font("Arial", FontWeight.BOLD, 15)); + groupNameLabel.setTextFill(Color.WHITE); + + Label membersLabel = new Label("Group Members:\n- Bhakti Satpute\n- Sarita Disale\n- Priyanka "); + membersLabel.setFont(Font.font(20)); + membersLabel.setTextFill(Color.WHITE); + + Label conceptsLabel = new Label("Concepts Used:\n- Inheritance\n- Polymorphism\n- Abstraction\n- Interface\n- Exception Handling\n- JavaFX\n- Maven\n- MVC Pattern\n- Firestore "); + conceptsLabel.setFont(Font.font(17)); + conceptsLabel.setTextFill(Color.WHITE); + + // Create images for social media icons (mocking images) + Image instagramIcon = new Image("/images/logo.png"); + ImageView instagramView = new ImageView(instagramIcon); + instagramView.setFitWidth(70); + instagramView.setPreserveRatio(true); + + Image linkedinIcon = new Image("/images/logo.png"); + ImageView linkedinView = new ImageView(linkedinIcon); + linkedinView.setFitWidth(70); + linkedinView.setPreserveRatio(true); + + Image facebookIcon = new Image("/images/logo.png"); + ImageView facebookView = new ImageView(facebookIcon); + facebookView.setFitWidth(70); + facebookView.setPreserveRatio(true); + + // Create an HBox for social media icons + HBox socialMediaBox = new HBox(10); + socialMediaBox.getChildren().addAll(instagramView, linkedinView, facebookView); + socialMediaBox.setAlignment(Pos.CENTER); + + // Create a VBox to hold the labels + VBox vbox = new VBox(20); + vbox.setPadding(new Insets(20)); + vbox.getChildren().addAll( + welcomeLabel, missionLabel, missionText, aboutLabel, + groupNameLabel, membersLabel, conceptsLabel, socialMediaBox + ); + + // Create the back button + Button backButton = new Button(">>>"); + backButton.setOnAction(event -> sceneManager.switchTo("SettingsPage")); + backButton.setStyle("-fx-background-color: #ff0000; -fx-text-fill: white; -fx-font-weight: bold;"); + + // Create an AnchorPane to position the back button in the bottom right corner + AnchorPane anchorPane = new AnchorPane(); + AnchorPane.setBottomAnchor(backButton, 20.0); + AnchorPane.setRightAnchor(backButton, 20.0); + anchorPane.getChildren().add(backButton); + + // Create the main layout + VBox mainLayout = new VBox(20); + mainLayout.setAlignment(Pos.CENTER); + mainLayout.getChildren().addAll(vbox, anchorPane); + mainLayout.setPadding(new Insets(20)); + mainLayout.setStyle("-fx-background-color: rgba(0, 0, 0, 0.7); -fx-border-color: black;"); // Semi-transparent black background + mainLayout.setMinHeight(Screen.getPrimary().getBounds().getHeight()); + mainLayout.setMinWidth(Screen.getPrimary().getBounds().getWidth()); + + // Set background image for the main layout + Image backgroundImage = new Image("/images/Pastel2.jpg"); + BackgroundImage background = new BackgroundImage( + backgroundImage, + BackgroundRepeat.NO_REPEAT, + BackgroundRepeat.NO_REPEAT, + BackgroundPosition.CENTER, + new BackgroundSize(BackgroundSize.AUTO, BackgroundSize.AUTO, false, false, true, true) + ); + mainLayout.setBackground(new Background(background)); + + // Wrap the main layout in a ScrollPane + ScrollPane scrollPane = new ScrollPane(mainLayout); + scrollPane.setFitToWidth(true); + scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); + scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); + + // Create the scene with primary screen bounds + Scene aboutUsScene = new Scene(scrollPane, Screen.getPrimary().getBounds().getWidth(), Screen.getPrimary().getBounds().getHeight()); + return aboutUsScene; + } +} diff --git a/src/main/java/com/trekmate/view/settings/TermsAndConditions.java b/src/main/java/com/trekmate/view/settings/TermsAndConditions.java new file mode 100644 index 0000000..26fa954 --- /dev/null +++ b/src/main/java/com/trekmate/view/settings/TermsAndConditions.java @@ -0,0 +1,86 @@ +package com.trekmate.view.settings; + +import com.trekmate.manager.SceneManager; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.layout.*; +import javafx.scene.web.WebView; +import javafx.scene.control.Button; +import javafx.scene.input.MouseEvent; + + +public class TermsAndConditions { + + private SceneManager sceneManager; + + public TermsAndConditions(SceneManager sceneManager) { + this.sceneManager = sceneManager; + } + + public Scene createScene() { + // Create a WebView to display the terms and conditions + WebView termsWebView = new WebView(); + termsWebView.getEngine().loadContent(getTermsAndConditionsHtml()); + termsWebView.setStyle("-fx-background-color: rgba(255, 255, 255, 0.8);"); + + // Create a VBox for the content + VBox contentBox = new VBox(10, termsWebView, createBackButton()); + contentBox.setStyle("-fx-background-color: #f0f0f0; -fx-padding: 20px;"); + + // Create the Scene + Scene scene = new Scene(contentBox, 1280, 800); + return scene; + } + + private String getTermsAndConditionsHtml() { + return "
" + + "Last updated: [17/7/2024]
" + + "Welcome to TrekMate!
" + + "These terms and conditions outline the rules and regulations for the use of TrekMate, " + + "
" + + "By accessing this app, we assume you accept these terms and conditions. " + + "Do not continue to use TrekMate if you do not agree to take all of the terms and conditions stated on this page.
" + + "1.1 These terms and conditions govern your use of TrekMate.
" + + "1.2 By using this app, you agree to these terms and conditions in full. " + + "If you disagree with these terms and conditions or any part of these terms and conditions, you must not use this app.
" + + "2.1 Unless otherwise stated, TrekMate and/or its licensors own the intellectual property rights for all material on TrekMate. All intellectual property rights are reserved.
" + + "2.2 You may access this from TrekMate for your own personal use subject to restrictions set in these terms and conditions.
" + + "3.1 You must not:
" + + "3.2 You must not use TrekMate in any way that causes, or may cause, damage to the app or impairment of the availability or accessibility of TrekMate.
" + + "4.1 Your privacy is important to us. Please read our Privacy Policy for details on how we collect, use, and protect your information.
" + + "5.1 TrekMate will not be liable to you in relation to the contents of, or use of, or otherwise in connection with, this app:
" + + "6.1 We may revise these terms and conditions from time to time. Revised terms and conditions will apply to the use of this app from the date of the publication of the revised terms and conditions on this app.
" + + ""; +} + + +private Button createBackButton() { + Button backButton = new Button("> > >"); + backButton.setStyle("-fx-background-color: #CCCCCC;"); // Set initial color + backButton.setOnMousePressed(e -> backButton.setStyle("-fx-background-color: #AAAAAA;")); // Darker color when pressed + backButton.setOnMouseReleased(e -> backButton.setStyle("-fx-background-color: #CCCCCC;")); // Restore color when released + backButton.setOnAction(e -> handleBack()); + return backButton; +} +private void handleBack() { + System.out.println("Back button clicked. Navigating back to SettingsPage..."); + sceneManager.switchTo("SettingsPage"); +} +} diff --git a/src/main/resources/images/Pastel2.jpg b/src/main/resources/images/Pastel2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db6442ea8ea632e45218af59a555c7d17c9d85fc GIT binary patch literal 9049 zcmc(Ec~}$I-v5~~kt7rvViI>8VxmKu$l}JLIEe|8;4;CWY**RBngFsW^|}lZl|@^` zh;?ZVQ8b{~NHN-57Zf+#>Mn{^sY_j3x9i%$A$&P_kY}WZiBgRmiAYf*L}>`{xg04 zPbB5v#DDyB>SMV)>7wLbc<1xUotiVX9|}^~t!8t~bqW8uI(%cuZ}RkogXd%3oeq9~ zh7^6>|L*X|gvr+~FYK=HPB;E}?n1)D?|->{TQl1@loqU+`)C0A%!R7%#iNV4v zGnw`#@jG0)+BGwms-_CGC8bNYCSNoF>a>%yB8ukyrTnU@4%wZ^kit`DU9vy<2@WSY zHZ{SQM-N|C>k_-Sk&o{}4<4}HMV?w`#xi?qchVNUhu!24ov$2uD1C8N!kS>W?gu8! yw|9PK$9Iv(*XeelwZGnAnZ2;r0~73d5tt?IHDiHOc1KxYtN5W5ZM)0fF#2E8b3q&c literal 0 HcmV?d00001 diff --git a/src/main/resources/images/facebook.png b/src/main/resources/images/facebook.png new file mode 100644 index 0000000000000000000000000000000000000000..2a7ae3edd0cf53539677732a9e17166263dd6917 GIT binary patch literal 889 zcmV-<1BU#GP) DvUBWT3n$*cc>KcYvY-n}RS ze}IXJ9`uGJq%%bf2@$G^2QP-i6ER+tihv~kNDTYlwzbd#71FY_W2RONZh@Vh-7Sax zChyeE?DsSC=FRM@VMK})DUwud*gQiR^ihUM!f=Li%u|k=^~e*3A8WsHvsXTA90( AD6iUHhUIH6~*|zYF-xV!#CMm;ZW#bMITp|qb$T7n)AIFn~V@lije?b^d z8wofOsCOENOO!*=Z}aqDTCGtI7XvX*64njM!4Awk{~KTvZe0&z=0h-#+Ypq&1%KQR znH_(YR?k%1h$T8Fvf}K^pQ7t|R& E z*9|QI%5Yp^1@M#3%N7bwfX8#c^j3glN@WF>{011%1fU#pDgfn!2Y{tO0Pan%iF~QD zBeohG0i~^~ 0|9WILXTXYxQ$d5LbQ)q{-==2Ce{J?QQQh_6DPv}n1oV5 zWmL9DLI4<0*w}>QZPx%XZg#7Ds2mwh?}#re&ML$f)*a8aK5?7>C}J$# 3Bzkf5R&aaH(ff<01Q@rpLvHE zbjpsI-vC5z*depS2t~3w#j$6%YquHz I P00000NkvXXu0mjf#+H|p literal 0 HcmV?d00001 diff --git a/src/main/resources/images/instagram.png b/src/main/resources/images/instagram.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e3d2d0f4fac627e106ab1d102dd2342c39e609 GIT binary patch literal 43630 zcmbT6Wmg co?oQc0)JW~hDLYe=cH}7rAO?WXT5oz{J><3uHB`0*@=A5LX+>Z2W zy?L5)==;cgn)F+$4B-;LP|>+LoJ-F`Bn%Kqi3PT%mz2?!&K)i7sSzV_(JL$WDD6Te zGDApL^tPsFV8SQO`GzyLC>>}JrKm|$&>U44`os(n5tUd->l^lR%Yle~+@z=rd&Z?y zh^Aji74aO|e)aX}OQZkha6V!Tm1xR^Ll?#v$txj5?~vM?)`AP~6z97m=*|OyNfBet&E55gollofv^%crV1}c8Ah5F+SC%-)E2?i8paf#E2tJg-0iv$d|ZV% zr-4{pg0EPei=b$PmiBJV_Vffzb|usT=ioFcEgjPol5zocb{4dwCP3xrF1EiLng{ zgf>9J#_q41VPk)Npu)!B`woM*%X>u85NiJXC!OBIYDKCgiC&n0C_USg@Sv0MaeNmO zwH?be*DV&IwB!w8WCLyDy$8=yKp`Jl92-bc_)*nPH?h!Wu(F%@mnR-5#By~h8RtUC z5XLXLreBqX560jH# _+8-zS&U+r^{I%!~JUo7gdC(m^x=z35pfexY4ZUvgFdx|zz`xmPPqPjLL5nf55ZVp| ziA7GRqTr))oA%V?%88;#6Q2`X_E>hrx+#*e)cl);aaW8*qbv0n$79)JvH}`O-9n^& zp~=jlpEv`rox?1`Qh(-|>m|UVv^d%F$L{)orJgeXsQo-9E_T8YWLE~LEZIZ7#gj8B zIb7tw?R$?-{7$~93qimk0kAKKn!#g!L+JkvjZ`E$D?zyrbnGN-)`rt(fT}u#<-H9Q z#0ZShr@R$O$VS^+gC#eEhIst!Ma_LeS9K<#Z-dudgJZ0QUC{cO!6dr=CHI|b+LPQ; z9#&T!N{(YX10ahN*vKa?gE~#5lpuw*hXp6aC*~EGiwrEC!shCMv%?hg$;buCO;gYj z#$m )~%D^f=raz`7=N6XSj%gA^32;RKVek6hZJp#tYENnHz zg!=HPRhU&Fc?%(VXl7&^Dy=iJjHV7-s13U~PywVXlBnt3rD+$36$4!Mwi <3(U0=rh)Q88 z+jXQLr}0>;o+(Skef>NXRE__EYLoo> zXvURg)KKg{@z4b@lNpLK01Q?Rkp$jSX&I~&+w=G_exfK;1Jp1 zt5mVCkaM0f^mpCp%J#8@bd@vJ)aRf^e~KAjc&_3o+g|E}ju|1 2jKq`f;bZLN+T`?lSiMUN-9Gi2~3fK-A@#i z;#0*#&;-L;iwCwE=f0y(I}%$8!E=G(bmL%Ih64Xl2i~z!3IpoN;8q@C$zGtA4MiJC z5-w@z-LX?vkw)#{7Vv|-IWg{~$urP|xK6z+7oDdow{!Id#Jhq*P54pzIGAD-D%swx zL!GYa6}w`3+bvVZL9yL+jv>sO7|HvYCMVB7A}%uo``wgCezX~q?6ew@h+l?N6E0Z} z410-$FPfM?W|=s_q8ru<0JO-BrOWsay3X&=u{cMU$!YJ_9SIx#-U8AQj|(ML*4E7_ z>oNHfr2hGN^iYh#kxjuUn`31ULy>jBlXjw$w!@IN14vt;NL!#t+n}-(VU +SpDMip_W8l^Ef7V-WiPJbTz%&yh=z|c~gb>$6Pzn)YJ%R%(C@EiX z6I`%|g_VZ|rH4V{^g@dC0+ODdfvR<2)z(zi&T!S1Xw`;fnR|C~ZauGg`)#$RNQpOT z^jH!;uBzSX_TN%t*7z*t6$uqJ`ED(Ev;P%X>TyIh8p%v|dcu)`FbZ}{OkCgj;Ff!V z!vv^e?|qcGn;7EP=TIp|7^0B>K$^GDdC&P6CsQxE?-dvsDn5B{^#rY-^3hHZ=H+Mh zTn8S%eKvtKgPH$6d)=1%Rq*G=U*_-xzN1kSb`BcAY;n9MSfDz%#*;K$O`$b8jf-9c z^w}-(%8qXV*!!4;7nkA=y%Bm)V`kej?5$aC5V4Ve77!W77X~YvLx~aP?(&Mge1*}& z4&=t_zWLidJJ&s%++By$eY4v=YTBJq(A`?lJxJYs(AV84(H$2YvW^(o@d7}6z(&6W zlCDbewV?2IBs-c50$oXfz9>Lv6reW_&>j}(Bn -oC|Dp#ye5Sb?5GO8O3m}&U zmR{v3NxUox?IzNvHs %NO;B6k#I$0UEY1L|!_YwY@@-Pc5C=;wUA zA|MW&ez5(hsL{|-)f&tl#@+~4*`t!fm9V`RN%!+gs>5VkXLi#w3b}T*A-{S;28Mou z $%2uik{(pNBg@+X++K4O80%O1p_-shMJ_9b>7HV5t^ysUfq*gTUlNxi{}T zq+k^=)P${U2h3Vl1T4$)HT}e_&B1K=joB6^^U6prSMFI@vE}H`AFiOluMhb(urR=E z|2n?&kBaHy)lzCuoQdNwerE%tp!wqs;M_^p6YL zgSb;PxTf2S!~K6pj)UD2_ml0@Hjk;2yOyoJXM%DTU _;^(-+pH*h8+CcQ}# z-Ln!jy8dZ3ub3tSz~0f|kZ*_~SAf$89G){e_V&sb!0IEm`vvf9Lusig+R>P9`wG2x z<~$^M6{(~Nd(svdVoQ~^DjTsR8eu3CVIU)`-A8T39Y6m|X!f^Db8}4JuOiYa789pk z0{kX_6DNyAJR*=zV#{1*Bj&2NaccDRaHGinZq_928U?ruMYY7S%;K*!St{n`2CQ z5RoM0)7NQ&fuk4*s`vh&vQOd%9U}9SClc#1hVv??Qhja0mcAtT0SA=*+957DhxnaQPA4UU827I<4ofc&An{U&x%5YnrMR1}Y#p~b~E z$&s|riK1h!XZ-p%lJ}XAf6PPpNRD(A?g~@^HD|=bQPt&{M&$XV(uw4SX}W*R9|m3U zFYx%hgs|v$f*KUhJMB}yUPuj! 8F$RM w;-s%^XjHPBlas2t%?Dct!@ zXtH|G$%#LFY>ZD|kCC*4*`CGR>BWMH179Z*@>wA8b?vU-*rE_OV<|5)vGxLlgL*$n z3ONvBbP-CASV+*nxdQenF!FZ_#55<#L>CZYOZ~ejxc|PWy% +bL8N0Eu@xs7-t7~ zTtj4f;eAyvhTNCTuyG3F5spQ;IU8vX&(q4m7IW9oM* UY zuN~_~XfYjpd{Lw!&kf`xID?Sn&Yy<-b;@0*3yggMoIYazLwdmacj2e_l*7W;JJ=DT z%2#Jah@VMkHp>X@e< 3JV@G<<)1LD0_k{%iYj* e71;wr588A)wc7$?eFN8F_qByl;&M G6Q(|;Hyr{sFBs~$M+7mZ{M@x7}MzV= S5eB7}g&g<8A$yVg}>XIGDJFjz4 zRo1-q0Na^JYMFo;5~NxZ08;PVg}3;LF8Sf&RWrTNb=97e9eg;+82_5?;P#|CI+23* zngMhF5S35jC&4-@k8OH#W LAGZ8v`N^{QlV!$6^ued?yqXY`JX(QXZ6uWrZh7}g zD1{E%lnsbWv~W)Zuq#G01#eT0=Zn{~yXT8Ur9sT1@abKcU>Ij3_&pJ4dbo{7D2jo@ zuSbD{m9WH%=!8ZZN&CWNG1XSGyX9N;C~ij#gip)94XNy5dZgn`t?4 P zWw}Yp6p3^w=H}tU(`O$vF%(?-VhMFmfu6e^?9VlREVFy&&(*OQe(;GgeIxp}m2iS$ z1N_qS<5$_ulb|~#l$8y(f^%-1l{4tZRoJtqzvyJFr_+#p{A?9lke;vn@Bmckryo7X za&bM~#P^qx8VHRMxqbwmPd7J8oX(=}mdkT=mH*tv`%>+#hQ7|@*M+yo0~2>#PDDEN z_Lp=3Kl^C}8?gXEu_^MQ{vXUT!HBnDB&G|ht2g5IusL}+j}u>WdLMKT{(Eg@JXyV9 zeXOG=$@VbM>S>DUDuAvLOWFRfogll=cIlhUwjEW!0}YKmB~2xDA@X+R7k&M{-5YCi zEv@V3&ZMDAywAFJn9v#1w_ZeA_q%4;aD3;TmD!nKd1vfnCMqbjfL@<1YKKDl>gwgw zg@Qq|)!}OI3v7&^P0m6)P%}UzBtr#JO%Q)mAJ_@a)#(uL;7*b8+1>nS&Pp@q15E!H z{O^x&LgyUX@#fIZ-`sOI&J`o>JcEeKY6REUfk1Shz-(5V8Av`tw#Iw{d>O_6K4sfg z6+q1#xly?6`3!V}&&%$U{%Wq9Rq$j3TCo VJBVD#^ zI<76q9J -4Wg}7vC$U y8e)$WE|7V1u0a@(Ryk5ZkHbIhq;w7PZ3!z-_7m#%WqpH6R!OpXJ zK*dtrY0SO6%?p*p>u#J%j8zyWjUN^LI~JzN{wFc}XWi1Lgv8FlLv2+LzrM>v`o)H} zzROy2Xfvkq={;ZO5FAP{DKKm}EB=s=z`-txw+Aghd=Aa%PXL}BBL@>23vyl9@z~o< zx60?aB#Ix>gl=@86))nMd45wa>vmUe&=0+6?c_JW>xkj+7|U~b0&g|M)We`>-y6rs zBUg^luAznBzlw>^^W;y*k}6l%?#$~lDI@=@ +P59M1O}>+~xb73|I|TEaFOTFmFuM9ZU9jfuHPpgqPqQ8lTl$d;CO){+*gX@m z_O6c4uy{}(i!roL|0mH~yDHE?GTSsTAv4>=JpWJ(f9{a+XBUmrt=%erk~d}^!b|P; zDy5QL4S+tO^jRj~j3yo~DFp`L=E5L@e0)W+RlPlgqEz;m?W3o5BcIj^AE5N|JnTa^ z)L?==NYV{c#a`4A%hP7i*ZB?Jg%4<5ej-^skE=k&j%T)I9{uCUzRf3-NjKM%`0n86 z epg%y)02P`{0Wr-5#< L?WW55L6+@P-P$@(TSnA(zj9yH 5{Qym?N_tQqEy`BvXCJ_+akCyhZf z*Y@Xr-CnlDJ<+ucezu9l(r1i$<5tdyL;S=}G_#5P{AX`%dH7kicTz`wLG3v&KA1`r zDU=WlgKU&8%K%5;f5?q*lqtLW6%Xn9SYOYsAL 4Z zxmYRlLB|QUI4@m`LV}ofY;*yJw6EMezlvbA8Us6Oe$hL@D$JBu0*pkWYVZp9nttHs zG09-Ho* oR1Z)?W<9kzw8&ToPycg6Y8ock1qD_4;dD&B)F`p84nsE&{aaBZ ztEI(CS3*?ve>tN>Y$z1AdqiPC=_DmQqBf*O9vlxR>hQva@BPdqV)L_Dk}M=*dv#cn z%oJk%QS1c~+Wb+nJ!NW=m5o%^v3N5!6%jgPRPHR%%?->ui*>TvV?ZaC@Ip7zFV(yB z{tV&GMmlRtQ)+esD)@L Bk+0y#}yFFfME3-QguWc9d zhdn;?HRTTU4;iswCFXSMXSw_IM1hX^1g}y#b}6M%Q9OpXU#iaxxi`Ng_L+i5OKzQf z4eeBY _Ol=l zn(5v>RyEb+2x~0)E~w`t Y-)xdaFeJ@yA~ZX&d*#~`LvCws!$H>9Fe>@v|We|+%@AAU)kQ{(Jv_@G=b zH-ZN>kYi=ag+-BEVHWX^;KhBvPOu5^_8rk!2F=tWJ&&Lj`bfbHkWA>mEGk)ISb-Ob zm`w#9J^0vER%1}HshMaImB`o;7+5MJ4iak 0Yu_E zJ3yLuMndVGBomsiWYRkvJ%FU&@swT=fcp2CD0QtEDkZZ4$gl7E`u`ObN`2QibogQ= zq7ul`zAeV&mKiqC-HIAK{~u|-{agTz?*|1*;YDqADCh$&+Jt%h=jJTZv(y2*t{8<* zz2DA4MQv?__lS_RaB=uJBS~^ursAkQ2Se*HeS+RFJ!f*>oaD1R4v`@9eC1_{7?X^I zgye4&zd~;XC3zYC`FCXXmtnbcmf)2(SmJ7T%Xadi61--GT%2a4Yi>}~)Yh6AMhz0} zPgCl 2TpiLzbnVEr90UKO@mMZw z7yiDc!#=v9%@H%!g}VK!5-j`TglQFxkjVJth54ro5Z2G95kMxsQr*Yb)o*_c_{#jZ zrP&rY^>^&fjWgDlDGIR*A|^C sMs}Rc&+5U)k(7;1Tt?|dt0Nk8rGzu?{Rytwy zOEue%|2%~ouly-CaZoupj|G(qZFrM9Cuk7Xr|RaJD89UL!2Y2f>wn@B$u7LEgD<^L z5kG~P`Lg`*6=*VN7j?RA0bFx0@7mz*;t{mJ{K zdRQfz>z590c7Xa2w **?bx-O TH|;Gll` zUWtvLcV)-LI&frW@MsC@yq{S8`TMP1wO0Q8V-^27s|D#)7xs8zSIU#?I%4DA1E_@O zf$jNy1GH|iUeNKj4t2pyy5+z^*nJOqYkrUbRZU(FEx^Aux2m!QmV;K_xB_jW5uDB~ zGEYB~?YP@?bb}#bIZ;2r%hA8WlhlI`mNMSdT^DyfFaac%e)@B!bYIUV#aH21mP6Iq zUM8b$NcB*?=BRC%S$m Bk?-s*wN<*Lfw` ?UQ&N97-DZE|FkH^1vMU#BW(^TD_re8tuG8C#1I6vi zbH+yvPsqu?NMxmReYKnRt`|F8mKJ#Ye$)@8m+RrsIJ8JJNM|pSDoq&rltt42H2(0U z7 S9RAsoQw=+lf A*;~{L(>b@ zh||AK@ODYgNbs7HFu|UZQ6ZS2rXFeaH}*;Y{y>VO(5pHnM;CBqo9kj|tFD}dQ&V-v z_KW5ny%-wwJD=QGz^t-(PVj$z58nIy-(G+QUoqWv9BYWU8kteb_c4O(>IQ>3YsgML z@w reOWCG2b6 zMD@W1{qi3q&cw~X!&&rgbeI+mHzt`*zdb;Onl4ce@=C9kQA>n}D*6Q%Msp>&J2San zsL!@2$g&PD(s2B*#Pm{z9L_=|i$+Yfkekzy06S};+>* $`YTt`W zB&_lENGBDoz-ttm-F$p54mA`K!wwD=8IP_rvB5>*lxsJP*{ 0)&3l&(`-DnXmn%K|oa>=&wiF`Blv)1Nn-K*O)BstLA?OLPg zE(b-&t_{5H>tDU ~1BM#2xbn~r{5GuUDnjVXaGLzlJ=SjTJxGu3q#XU*Quy@G{T#$&- z`Su+ZPVoyI 2C=>g)YU(c&(%!$Q86yN?H8ofOh?+@U7C z=Z3jX@k(6Ii1+@(>2t9O>8XU4UPSQmz5n6a_;f;!c%+G#Y)Tdr=hg^CCsKGY(z4cf zt>w6Wzt$Urq^9@} ;OyWW z%QDR*Rjn%`n1YV+U6cHMsfmPauZh-AOk5k-TjqQA^bv0fONRQPvO}P3@-j8yA^ktB zbJ8Y$2?Y@GuJ`_4&nBE$%fx+5f#+*7*B@SUrZuyNd=6mr32%|1Q}1iy%SPG>!qq5` zo%JteD9c73)GwL#YcItl%bP2Hi@|4?b{8oAM|nP*chhg7!h~E`JFwwTW(-13C+8|T z59f51->!Sr^qjPM2dn9~8asV|{qxKk^1i%XI`V+de4U)b-^5)x$&_66#kML}>BZUk zJd@hp#uc4!u-EqqhPitWO@FPnTsg;+@@dbv1Z&ZpKgJXW=Onrga|WUNgw0{aI|`g& zNe>B6&Nw})3T%^$m#j_AGBg<@I}1u!tWB!c*kES62}=R1=osdu9D{nZR8*U9k)j+$ zl+`AO7zU5|2KdQJ;7WE=jy$uHNaNLJ_X<+DAb>AQB9f8G80x+Kei4wlul Fc$m*s&(xG*()y`t#_{Hd@M+)F)K^gIQ-%GIOjbseMwca${@x*Sn{V^0&JM zAHPI5EnsL*(+0)yMmzAaIq8sfyV&L^YCKX+@u6_3gsJ-ogJ~%Hr6z^{(d2mklwvsH zr8aU3GOx%FPEWjTA>udEwmr~ExGjR`H*y0Wo_^g!?j)MCyS3vb_gz%dabZc=B*t$t zY7+CjIcw;8AVhHz6>>gRD6|!`hV{646MXfK=d!)wkDu^AwEF8nZ1*5n#3I5_zd%Q{ z>YHShse;`Iq509K0^{z9vQslBh~L(3TD!`G;M4x2W|0ZuMW~>5lM@+HxWI9k6FdA< z`Z=+Ogs2?HsY!>{`y6NANR?Z_eO67Xa4n%bF?xU?gDEOW+!)nV$}ATo@w723Nj@;P zlmJ*VWe!PFFk7@@4yj)-M>KyIiAFF-a&!+zHr xoEKSpRIx41twG=7wC;?q*NFTYL zCzbr!!ym)Lhkmw&?JA1HFY_VoQ=hUH(#|^0b2~o#qHZkquBGy{67=f8obnP$R8-z7 zmUWfmkP_4D!wD3!1HTcH=Qir%ZK^WvJDb|H1UncO#FCFJU4W%m-)1c{9grJeijBh^ zkk9XwdcJPro;@fHl5f(S-DA=G0IR?}ptSEgb_ )Fi=}0ACKU!dG zKkD$ >8+7je18>KFRrMFUjCKsNGFg zG6L?BgvcxnzWd2DcU(WqEtEsz(kp6eWDtA)7S5+|=WlURBg2C;Z9CcW9CMUr(yA3x z1c#vP{v|ZOg`~F7DpfZ_hn7oiVn{{jggiyfp0xBi80J;x$Sv)I<=cEUESnq{AD)Y5 zM7p@n9u@kayEIAf6b67@xTH4 c`V_E- z1vk wD-qAIM4YTh92w9$I!*ow9wr>TN`^ zni69}`g|=};fn^A;#WK~_o~2sP-#6py|ksNbJ^!)@}vn`xjAt4B9G}pDei}JP9s$E zVM<(drp9pp1VdH^#E^u%vwAlgG_P^3FB}D$EqF3*Q$eMFpTFRQCHH?9G$K^JOUxPd z=jvS m1?=Fnd*>eWq&c5@^?($yhxAmduOPhVhs&hLWdO1m~?TG zUaR!6e{hi!JQeMP(8HHVj_{qQhEQ(OWL+zX*EnELKGRb5^J3+RAn_e02ReSXmQVfE zvx4X|`P%)SLsb8m5Uvep@+GI}X^@1d5~z@6%6#}{*QU1HU- we%;q%DVXhi&-kWt#ejun0z_CN{1S*` B(z$rd4JcNufBBlqk@#3mz}m;lz@R_V?ba9}lU*zH zuy<(+Y=gs+->vxe!C`ane*iZs14JL1a4#i06# >8 ^-j@?{W{VHk08e!r8QhR;N zj#=Ph@MLdipI}tyrT_C+LLobIEElrq%F(*lccuv!eJk Jk2VYh~7kp!VEFE_vI7IKQ~cI#^<_ zo-nGsOi%Zp9i6}zc}D##>GTg5rvFq{qANfbxy8Bq%GJ|O8MOPK{|hUq?2@AdGQZJu zEXm$PYUO2TNlBLoaR}n|?&!Z#h}TPLqbFzkJ2T+o+?M|L13`-ih<2P~p=Bl*#>pS2 z_Bj#KGRKP%1Tm$`W&YyicJSsbGyn5cw#- 7GLKN3$A|6$G;6HHn?^FiA zbeZWtC=B9t(ae17g44f`F0t{yZobGAZSqY%`t3lq{-BgAC~}>0K_+u-$eyx|r{p1A zkZ?>CsTdD1^9tF`ks-Wj0ZTM?v*13iizn=Q zwhaT`dES>&W G^s$LM1+WSZZx~#OVXq0dxE)85EB|D`QD$9S&joq610L8x0KuvvA*@68}L6RL< z2*lM#k?nE&Fq=_QqgqFm?XG0Fc4cCVvq$KkM!U3JbB*p{DIr{Qj~OHzvNYq9p`K$w zcoZ^q+!PFRZZBXMVv2GWrlMb@CdClyz3LXm#aNR_ICRJNvhNvoK@-n8wc2aT67L+7 z^WO4B $w>XK%;NPe<{CrVEh zpfbm-|EsVpS;M9yhQ??!FAhW_w(m+JFvLul?QG&a8ot~zO}^bH1I*|LDCB|lQ3ne3 zt 4Fz0 wyhs9KbzZ5*{aLjkm zNvzw7l}wPfJr23%KD?pN`z?w6a*zk2%*<{LC!ABujehkBSueEWRJBo}OZBNp6Feo7 z*nYo`xQi~a{D6zPRS_2##m0tBN+eB)NeRR)M4+K&VS_(})o=u|!KcD#IPtT=Yr$wZ za t{lq`e?bT+IroH+O!S+CiNF+H}f#b8L*Zdl<{y?jTHX- z5G1Y}NtG3b;Je19vkB}AVQnw*_yUr<|G+(uNU1800!Iq<^dTrC!*}S0iMy_GBQ9~C ztuTsUuYk4KbdPir&P!#MY~AR=V=~{}adhjfg`Ws&Z4*B3f8p)o=cj(>`^TkNZ`l51 zRFd(NfZaLVjFFEXuDA%Qlj>{w?or1ZpnTZ3PK9+!A#?5TlyXE7kNW}l34g~|6#FY2 z&9=I6-I22~M->9?uC6hMJzVjY^rs*cZ#B~Eq>!hDpo)oNUm(z`A4Er{Y!fInW%oG_ zQOA(Cr-o&)@Y8@cCD$9IiPbTtEf?vXf`y#=glb_)W3{C%RhL!P7o^pTc+} 7^YH={Xirob+PjClErO+0#c& z)?mMj3sqHYRY{8EZMh*xN;q~gmx^ qQ=NB lptmR$ zWN3Rj+O z)1N2Ez2?o(Jw3P%tmuY3S;%&Eg23PZ6oN^DH?K}BcD^iR4bh<2HHyfKi)2t$ZiSg} zpz?)EcKOUesJqm(AigO7F}WP=`WB<1tYq=jF&_V 3N(l?MtP?2;cSuE2bh30LvTqx#T>brvX)8^JAKaOdG$0emhb <(ER0*=caeWNK` zi&HBa18TOCN`~HwqzGP$rOzodI<1I@;w(~r^aX1+f {ShhxyzOamAtBL^Irm< zkT7zL#JzS?DFa?P82$b6e!W_u$ $u3|X4@SMcJ>=}APJqxa-1r%A1%D9Zp zs-HXxO6JK|48}M_dpy!DNXU^<4wKf~Rqgl+1RayxWdSq>kI}tKAC_wm@q^icgl2I4 zJNCxR9I(3yc!c3TKb=0|_PsGU4X0y=uQ51zQUYQIg1ZU#ItYUif2z4oK~NbxyW~6W zrB{nd{u{~XN>nbxhMjBtBTJ`_l53+i=Kye$|5o^m5eP>=EsHzdNZ(KB!{Wzfwm+=@ zr}($SZ0U`PkJ`B}fZIO2bj6FJEZd`C)Qj$$fSp9kt~sNdz5>Sk8=aYozUbpRfm+;{ zO3I4^3jL!I0p%qG%n BR16g9{ycK!69rhq@Z{9rYWpFQVd(dEv ~qu>X%kYzT3!<9I*65k^-3Q>OkWL-LgeZ~PO zm8xMkk-ojQ5FrET1EntRi}$;7#fLj4jnmDqVnc$lzAy6#*5H-E2P-to%