From 94b0443fb4bc663701aa87d6adfc3fd0ce2eb547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iker=20=C3=81lvarez=20Fern=C3=A1ndez?= Date: Tue, 5 Mar 2024 23:36:49 +0100 Subject: [PATCH 01/14] Cambios iniciales realizados en clase --- .../java/com/uniovi/controllers/HomeController.java | 11 +++++++++-- .../resources/templates/fragments/gameFrame.html | 12 ++++++++++++ src/main/resources/templates/index.html | 1 + 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/templates/fragments/gameFrame.html diff --git a/src/main/java/com/uniovi/controllers/HomeController.java b/src/main/java/com/uniovi/controllers/HomeController.java index 60274ca3..cf2a2013 100644 --- a/src/main/java/com/uniovi/controllers/HomeController.java +++ b/src/main/java/com/uniovi/controllers/HomeController.java @@ -1,21 +1,28 @@ package com.uniovi.controllers; import com.uniovi.services.PlayerService; +import com.uniovi.services.QuestionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; +import java.util.Random; + @Controller public class HomeController{ private final PlayerService playerService; + private final QuestionService questionService; @Autowired - public HomeController(PlayerService playerService) { + public HomeController(PlayerService playerService, QuestionService questionService) { this.playerService = playerService; + this.questionService = questionService; } @GetMapping("/") - public String home(){ + public String home(Model model){ + model.addAttribute("question", questionService.getAllQuestions().get(new Random().nextInt(questionService.getAllQuestions().size()))); return "index"; } diff --git a/src/main/resources/templates/fragments/gameFrame.html b/src/main/resources/templates/fragments/gameFrame.html new file mode 100644 index 00000000..852f9408 --- /dev/null +++ b/src/main/resources/templates/fragments/gameFrame.html @@ -0,0 +1,12 @@ + +
+

+ +
+
+ + + +
+
+
\ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 1cbf7699..3496b8ad 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -8,6 +8,7 @@

+
\ No newline at end of file From 29563360b4f26bfa50c215a0885fc9a79d5386dd Mon Sep 17 00:00:00 2001 From: uo287545 Date: Wed, 6 Mar 2024 01:59:35 +0100 Subject: [PATCH 02/14] Reverted temporary test changes and started implementing game view. --- .gitignore | 3 +++ .../uniovi/controllers/GameController.java | 24 +++++++++++++++++++ .../uniovi/controllers/HomeController.java | 7 ++---- .../java/com/uniovi/entities/GameSession.java | 13 ++++++++++ .../resources/templates/fragments/nav.html | 3 +-- .../resources/templates/game/basicGame.html | 10 ++++++++ src/main/resources/templates/index.html | 3 +-- 7 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/uniovi/controllers/GameController.java create mode 100644 src/main/resources/templates/game/basicGame.html diff --git a/.gitignore b/.gitignore index 922ae81a..2a91d5e7 100644 --- a/.gitignore +++ b/.gitignore @@ -92,3 +92,6 @@ target/classes/templates/fragments/footer.html target/classes/templates/fragments/head.html target/classes/templates/fragments/nav.html target/classes/templates/index.html +/database/hsqldb/bin/test.log +/database/hsqldb/bin/test.properties +/database/hsqldb/bin/test.script diff --git a/src/main/java/com/uniovi/controllers/GameController.java b/src/main/java/com/uniovi/controllers/GameController.java new file mode 100644 index 00000000..a626e9b8 --- /dev/null +++ b/src/main/java/com/uniovi/controllers/GameController.java @@ -0,0 +1,24 @@ +package com.uniovi.controllers; + +import com.uniovi.services.QuestionService; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; + +import java.util.Random; + +@Controller +public class GameController { + + private final QuestionService questionService; + + public GameController(QuestionService questionService) { + this.questionService = questionService; + } + + @GetMapping("/game") + public String getGame(Model model) { + model.addAttribute("question", questionService.getAllQuestions().get(new Random().nextInt(questionService.getAllQuestions().size()))); + return "game/basicGame"; + } +} diff --git a/src/main/java/com/uniovi/controllers/HomeController.java b/src/main/java/com/uniovi/controllers/HomeController.java index cf2a2013..0f000ac5 100644 --- a/src/main/java/com/uniovi/controllers/HomeController.java +++ b/src/main/java/com/uniovi/controllers/HomeController.java @@ -12,17 +12,14 @@ @Controller public class HomeController{ private final PlayerService playerService; - private final QuestionService questionService; @Autowired - public HomeController(PlayerService playerService, QuestionService questionService) { + public HomeController(PlayerService playerService) { this.playerService = playerService; - this.questionService = questionService; } @GetMapping("/") - public String home(Model model){ - model.addAttribute("question", questionService.getAllQuestions().get(new Random().nextInt(questionService.getAllQuestions().size()))); + public String home(){ return "index"; } diff --git a/src/main/java/com/uniovi/entities/GameSession.java b/src/main/java/com/uniovi/entities/GameSession.java index 4928b0e3..28108db0 100644 --- a/src/main/java/com/uniovi/entities/GameSession.java +++ b/src/main/java/com/uniovi/entities/GameSession.java @@ -10,6 +10,8 @@ import lombok.Setter; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; @Getter @Setter @@ -34,12 +36,23 @@ public class GameSession implements JsonEntity { private int score; + @Transient + private List answeredQuestions = new ArrayList<>(); + public void addQuestion(boolean correct) { if(correct) correctQuestions++; totalQuestions++; } + public void addAnsweredQuestion(Question question) { + answeredQuestions.add(question); + } + + public boolean isAnswered(Question question) { + return answeredQuestions.contains(question); + } + @Override public JsonNode toJson() { ObjectMapper mapper = new ObjectMapper(); diff --git a/src/main/resources/templates/fragments/nav.html b/src/main/resources/templates/fragments/nav.html index e7c5deae..057df43a 100644 --- a/src/main/resources/templates/fragments/nav.html +++ b/src/main/resources/templates/fragments/nav.html @@ -22,8 +22,7 @@ diff --git a/src/main/resources/templates/game/basicGame.html b/src/main/resources/templates/game/basicGame.html new file mode 100644 index 00000000..2ee1e83e --- /dev/null +++ b/src/main/resources/templates/game/basicGame.html @@ -0,0 +1,10 @@ + + + + + +
+
+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 3496b8ad..f81cdb56 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -6,9 +6,8 @@

- +
-
\ No newline at end of file From 44694260f9c73209d0654c950dac48cc576278e2 Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Wed, 6 Mar 2024 02:30:48 +0100 Subject: [PATCH 03/14] Add stopwatch fragment for the game --- src/main/resources/static/css/custom.css | 21 ---------------- src/main/resources/static/css/style.css | 19 +++++++++++++++ .../resources/static/images/stopwatch.png | Bin 0 -> 82332 bytes .../templates/fragments/stopwatch.html | 23 ++++++++++++++++++ 4 files changed, 42 insertions(+), 21 deletions(-) delete mode 100644 src/main/resources/static/css/custom.css create mode 100644 src/main/resources/static/images/stopwatch.png create mode 100644 src/main/resources/templates/fragments/stopwatch.html diff --git a/src/main/resources/static/css/custom.css b/src/main/resources/static/css/custom.css deleted file mode 100644 index b4adbc86..00000000 --- a/src/main/resources/static/css/custom.css +++ /dev/null @@ -1,21 +0,0 @@ -/* Sticky footer styles-------------------------------------------------- */ -html { - position: relative; - min-height: 100%; -} -body { - /* Margin bottom by footer height */ - margin-bottom: 60px; -} -footer { - position: absolute; - bottom: 0; - width: 100%; - height: 60px; - text-align:center; - line-height:60px -} - -.bg-primary { - background-color: rgb(1, 85, 20) !important; -} diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css index 4b741f5a..7566394d 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/css/style.css @@ -59,3 +59,22 @@ p span { background-color: #1c2530; /* Color de fondo azul más oscuro */ border-color: #1c2530; /* Color del borde más oscuro */ } + +.stopwatch-container { + position: relative; + text-align: center; + width: 200px; + margin: auto; +} +.countdown { + position: absolute; + top: 53%; + left: 50%; + transform: translate(-50%, -50%); + font-size: 3em; + color: black; +} +.stopwatch-img { + width: 100%; + height: auto; +} \ No newline at end of file diff --git a/src/main/resources/static/images/stopwatch.png b/src/main/resources/static/images/stopwatch.png new file mode 100644 index 0000000000000000000000000000000000000000..b25b636c8f900db19c867ce43a7bb47b55fa8132 GIT binary patch literal 82332 zcmeFYhn>W1oF1`c6hOf?z!S}O?*8^MaZ~A7x>%} zw*PIALqLfhA~1)sLjS+#!QJ5Xv;LAI>ahQ9{NL37Z`c3d zN&CM8|DSdE|Hsxl9Rh#ZtlV-PK^lDueUH-3-;sxy-^w7PqZ={*DtYSJ#V-F0GG3{- z(M~eQPASa%zB2eJe65c$-sKYi`y}GEv)s%r6$M35K$lUm*VDC64|8{jqxX^~*x|hM zg1wP1As>$l8aDv`_4Q`LnbMc%DcnZ4UhO6X%G}j@BX!@QB|rDuVii3StTo`rA~mVb zbBB5U?!`iMHzgo?+UIYJJe>QhM4!P*m5opKee`m$O|c;gFWUvuqB4H$Pv}^Cb{@R2 z$&gn+i?phIbUv&wEfL>I{4hy=@$+0I_*^4q0i{z{seI)?GITp~yt-CFJ6n$OTPtpuZ`G^m)r4I{~s4#5>rgP|ArZ*WIVh zT$!1lXg+5$09W>jmp5#5s`zc!6@4WK(mByShiu(EZ8|h9l^^WL1uzPKKt7?O)fsD1 z>KUM}+H(1Kk=*a?<>ur-=r-6&*cuBW=Ji$4GmTq2jJHm7d|fC3Z|xIR_v@elA`}${ zcwMNbt%uquv7q=|&*hGm?~XwoFCJ64D6C~WK|YEA2FosZrNyPd`U&}lh_D2DmwK;! zWlHPh5eeIe#eVT~=#8bV^TyGqluz%|VHqg+RRDC#tx!T3xlic8hEJEx0`PER_FbEO zzX+p$(fh2h8aFZo(m)ucR{_M2vGc^QDPiDdMg1P?Yyw3gt=F19UBtX#ZCLC1K_!Ph z2obN-Dh@L2DS`galosyrXgM@N{N9z*U% zG|dc@9+3GL9vo7hd=~xCjI`w9I?k5D1l*gb;bBtr#4=uCzuMxowCdM)kyj#QuI?`5 zxyEg(!4jZ1m#iLM&GQl}YPjIKVw5J9{Gu%w>4KM1#zKS;L`95bb~!iz2q{IrzIvIF z7v$*4@Rlaf!aa(8^G}~3UU}s&N6BKkXyH2}7vY1+ zs6(Nz9%}=tE0~ca;JX9yjcXQ{mO0Ty;RTDoK6lYyKK^M8@K(4`R>?#{|I^bumh3Fm z;6k{?LjQOMUlV?Px!pom<+Y=DiLdO^Mzw-1qix{S@rvkV?T9dn*0fG2+ORWyo*C%H zhbK8$g)Zk{dO2wP2z(O#do=0O^;bHci3M5A9AcOfj8dea!3c&7DnCOUjoS-4bds;W z#d@j6uDxQZ*%p)k&0eSxsrxdOF%V#k1^ssTaY|x6vJnIYO`R5n_9L&X^_E0*`0mX5 zO8Xp+?DCV4ro=HLd6zh?+-++k8*hUR9B5AzLiu!bBf<~V`YZdIi|p8}%hRX_X>)&m zVKa@6x93c4SXC~wesPUE@Vo{YD<}Z|ksjIW=8K%+4Pjcw!fS{_wy%%H-f-drfuJQY z5R9x|iT*hyYp_#-_bV?i|I4W9YS3!dwSdBCX-}DTHiIfzNlcTZOOddoe0qliprgWn z2}eXL^sobh;!jq?EF4Rh{SfRFMD@Jt`A}k4H<$M+*KR54|G391^(Xt+w5z!ksqT9+ zV~O^f8sBdR4I*JXPU|{2u(YhwB{PORb6DM6RE7es-9(Edf?ZD1U9d!YB-_#ZReKEk z%cDl7{+Qp~8T#;VbzgIgTyRTHj+lcTnmE{@krt`LIs-_4XJ%%uSLilKApMxIb#lme zywuC~5q1%5scXWDl$q3{^j8MfBqwB{FNH`$Q{usxcM@CgJaT9z_i10kkvffA#w=ep z3BW&nB8Yi#FCh{fly=KXAb

`Nfw@-iL_*zPm8;MG2ZnHE~XPo5gMwTpECzDPgXJ|Ad^9qOyMX9;>gyQ`OJtfl>Qq}@S>j-~+b_W*`>)4g;QI8L8`CgdH>WHYxM zkyW&d9=K>Gwh-yWj09R|ge76^IC(7(A;iQMpj2W~aXn|-z|H5fb*b*98uvF1JP09q z^Yr$9&xmOxS|2hhI!Oz@hQ90$u-vf;KTn>`4}t0<5Swt6xa$8wY_eS%RJ_)BwZ9Zk z)j)07_IxkYV)vv64(Xo>!3HBXAajoe9Zd}-ewfMYk|AJqouF}s$2G9yx)C!AvH4jd z^-n7Q4tyq~!n_@SS4)^Ms^8?%;^S9dLNSV6^d2+UCc%LVAJSg!V>QNsn!kV8rBa>A zsZD8RvsiD>zG0CQD`w;Do&^ZuNmftvhF)bGZ4U<(Z=8-gJ5r8XBpPrCyo5s0Qei?X z0Kpzp@fuDz*!L8TM6{#Ev`E`fKFdoG{rQ(Cv3U4K@E7==zw#6Sv3Vx*dOqKhG&fTj z`{;-lCCS{N@7spXqM4QOLRGB%f}cV97arLup4o$|c~!z#vBL0E_9@btf~e0C+@^xR zce@9{qv#%%D0bDDsdH?9t#Q^VkkJkSZq&qpZIS>FyhkCy@uw8<1P;*FD=zv|xjW^l zs)c&Of$wIZkd#UNKGGz0a~ch*CWgXiY*!q(?+qV`_>okX0Yj}-IvL|>RA(*&Dn$>8 zmV}8@OEPWI+wWayvi)&t<aaRLvnlP*3L`k7VMU-UK$*{J>d4~Np({4EP z7%|_;k$MC_&~`ML$VCl#T&Mrko8*2ZYR8*G`)x>VGWmRg{{tS*r7L<)O&z0t^XTjM z^VM2Djuwcwi&j)=81zOc^hOkOT*vNIM^eDLn<$lQs|`WMB+tyMMd!6A$Z0vCY4NU+ zeaX>!wR(_dCX3-Zw5Icj&6gS8m-*LEZYb2g+stw|TT09*lH+Q$Z!TMN6M~(O>W2AS zOFx*hIjrXUj*gB1^f#`=03HLhP%&_}Oav#g`IYovJe?iSr@CMZG#Jm}oLBx9q_6^+zrn>4(9`wHS#LFB3(7YypVj%FTZvO8Y*53d4N6@GH;4 zw1kaD9g+l~^mdH1u`9y1&T>(?eiF$WR`(E7gGqd6f6O<9#k8N|=qL`$HIhi6$=V+P zPNQ=$>3VqI(MgULMi|?j&SPY8xXyvLy00(uo}1%H-T1J2g?-yB%4NHX37Fd%W=$9k zp3vfH!w!`Osk>p1Q9?dZR8Dj56=r^&$w1x;2QPkWG6DqFR8>ko^X8j3adoX~VP(1K-=5WEm)um}o7RJ6JMyh2Hp&N@~&MK{7eRl{g&}0}fYT#>`w(%&4qPM^_RxxFRXqXuck`|1feZWl5Eq9bUq`>&>D2gxL z01&PAK<&VYU8xtF4<1%3A|6qD8(+FUh~tnrc2b5oO@D>GVhnyP(cjs zKNH8|o^9<)roqyW-@C@56V=^ruZg5u*)3lLKphshgUT0%p1qKXnBZ)K=U=w*^ogWL zs2<+wY{{k@Cts)|&v@zh>+PoRZw>2C{7AskU#(sW41|)Dy7RQ}#jrHWlupM#6oxEl zH554621ZK~qLBLY30~%h9D=0-t*=D=Oix=&Y;DBPXTuZ6Men)v)3;9;d%na+76d`- zM^Ko#gQx-M>dlfLJJ*~8cM2@N!#NYQqXF8yUs|Fdogl6>;|H%Ork#ShI29Tcs8z81BjBUiP6>t%x6NbKAL%$7p|@?w6eH zY8gF4`%IA)yvXtjC-P%MYqNEzQHrHTIlh|EuFVer$nCx<1*KY0VRW;!GV!6JScdz=BF?r9Y zo;+%I@z{b9q~xPu7$k#+nA({)QX$<1o$$nOXf^D|*r`kBS>yM6YQ629p zU_0^D%1UG%WC+(*O~sw_z$_^3XP{q`c{*mq3?3QVvo#xwrxTPbwT(6*Xc|h*7?MzA z@sJ5)TMLcTLY~WXtVzcR+$whi4uz;E@o67B!JBu@l$kFtR(tXxH=wLUO42P9xA$B; zs7__3ZeOPm1%yxMwWd|Ytv>z8Uf2!^dB2(5q`XUib#j_aD1(QhBK~LK8yO>^F^*vH z#MxlCYG6K7DWCc;S^u4wu5R;kpP4F~#K`Bm+*@)sXlv_u9#pJe_E~SJz(~uWam|1d z2(ScL1Dq7}ZrsqLz=K3d(|b5}RM2-k9y`LU>5*np7+4SMl)g?(*mSbac()@NWqeSY zj6pDr?%S6yb2yh^=)e^OK1K~`0KW>7BoMPk33q;DmG5DX6J?zFQfkoge7{5B(j*|V z87Kt~LxI_%xSd1(oeA2tjLnrVcbE@nOXoJRHUW@{oZYbAMD4! zv5{eUBo**Z#Rr>p)1nK~ZRZyBBKqz5GitX{4500w@S7&rY+V*-j>x7+y0=IS@bCFu z&h=u-S`1ixR*SNo1-17@`f1<^K>v;&h>h$43^RXqMlRi~xE#CfC3gXQr!i3lf_dxk zyDt+(XYI>Qfl~3A3}=nlg~q_5cwT~`P8C2#bhQ*UDdTYFbm*hBfI@>fhkVU$VjnT0 zOR9tMtA~NDAgaM zwkrj?4@2*-zZ!hAeYo?7mO{S{g)V-lr-@dO6qj3@7(}ERN#kTd!dJXC3sT+2M|USd z6K2K=MfW5x$7_4^8hRz_I~a0Sqzn1UKDf;eYP+Vdajh6&;48uB^w?KN2!;z+eI*O&h}2)1-+Z=e@qHg3 zAU1I9g`=m!0?)Na6uiS#n{k;iex@Ovv*1-Wa8PfcA@yCH`Is6|?l3SFCrkLduUxko ztzNmdFSn_HKj)UnjR)DcApJGi%NPM*jdPBa4-=DQsh^gBUAu5naKDGuY}xolekv&Wgn-R$k&7! zkMn1weQ#f>gU*UR-Jo(wDzKLC%U*K}t*eY`l-eWGFN*yPCaAYUd5y-I!a2^xJp(1B zUrL>*zB%8_r^x)d*4@xo>Op;V3(harvr=GN>sKXrO&$Cv&Rm}kFJd72Y1d*KIL)cA z749A2G{W%k)q#X`&>@g?>b5uzJu<2~g$U2P*;Fx+^nRnC_T3(8VbOh?`q2a^DA;u#!G2k{t? z5{H_KV-rlb$ZjUg$6P=CfA$7ZpET1!QC8zF%jo>!=0Cq|+SA%y{h_{eT>4O2%cE{t zeWT3hGNO{XG06IWg9AXL_U|Z$5Hs|`TX8Axi{f(mI1NArCxgQwDzM&q|F|eU`HVr&vX2F z<#Rr>FL4&(H8kg2Jz~R}%UjV!>&*rctLwi+%NiXVpXwh+=3xB9B!$sEG(#rga(#Lz zLcDWurxD+@7en=T5#v?*W5&2<=PCS5@2@Q{v`x9yXq5?zA=MS!hm%m#b3G+_D>{GL3n)2y;Qy3cE#@S7pJ4>>_#-*nAv34{NuKR>e1GmG_lGsc5}{lW)|=Ux<_ z0s;A+0*qg;xG?=~Z-yqWIuwA}wEwhT)Ai`tT*Svg<>UR6{r4G1Wi@fsulbkmdY3OqN=hj) zq!U76hMaG|*4yknU+xy9!bb!kvw3i*!-BvI7{*};Y@lL+GRrkwD>&(0ZF`B!_PVyn z&}l$NCL^2*m9fs><=FGk6mQS2t6;FV+{P$V=0g8G^&#(4Uin=)D)!qPSfWn~MZB0P~Lz>SG_2hllcw z?#$ppVmx0w3P%Wnkr)bqLp2sfg=?$I|AQr!W!ExBa_(idjR7lo#JtO9N$&m0-IK*$ z$=7%Dxy#`_C$n{=FV%au-cxQ;USz{ra!Vf`MyKN~<>v&4Ruw z=D0u+1@Hm8+mJxg$4Bsf@2s!=)oWgt3Q&~7)ijcbloh%ZJYvr>MMt+P4%DILe?jM} z_-`!$5vq!c%J0}%zrTOk$*HJ%cI3C`%aXRXCrWN~xCz8-CQuCH;96X)2jUe4f^GPG zL_XfVLy(DH-FP(h)?J2)Qf3p zpbEj`MQAZ*tnGxP`jAv+?0$f0-kqDC9%X zMcn{^&qx5TR(8S+V}Rg1yqURq0SuI1Bm-D=d%RmPoX~3mI_K9}Eo3))uiPJd-k%PQ zj*X2`QxCeriP6@d-90UqD#*%8dFaqQdX;2UX_T0lgCq7gc}3%s<@D2_ft~LotABsZ z&d$F5T@GvE`6MVBrDeUly9@lddF>Y6#W@wTwPgg>I3^ZcJdk0*lTlGgHJ#^^x}1J8 zb`vmw_LuNF$Kxn9Z?N0&87?WxYA%(IryMC$FS~bqy54hSWo5m`o#of({D-z_!Sf*g zlClSo`UJUBk0SQ)NdOOrzt?K9-sZcxx%%VPfO^z?xsGRl^PLs`$Ky`8$BD1b0?7|M zgz1Q~eT&dU=E>u33Q(>0%QhU%iclivqUG*|J}`K#Q@86lePIwi|M+szS+|V*u>k0+;3N;eaFxo{z7~ z4V$JK$lz^Z$HC{b1D-jT$Y$d|RN0sfXzCIYGa5-^Fc*B^t!?R7%$U5JRkf^e_nFM0 zqSFAiUrj{66bVj@k1K4ndwV91r8jV7a9Ewg&}mlwZ1L0_rdVi^PM&%R$~xo=^Nq7CF{StWT+_i7punrF+{EOtyR#GKr(vtZZxz3+395 z1410AKm(CYGcZT@W|n>hjeh}lDvakJKRc4!^_v@61V$4s)(YofA_NI;v=6|{)tZ!P zW4(>8ZoPF$quEfL1`@W{%yY8HXW^_cFlV za_pQe)Nw~qI?JDWF z1ay!^G!0rbOh~hKQ>sugKV7ayk#K=LPyf?QV<$;pf z(;JM|_hggkEx@O70W5ZlkQ?NCFtGoegowi9kUU#lmYA%agx`hM zSAbIQvUKf2Z#q&?Zn_TyC^GV?0+^2l%(YLvZ_!ZyPCsadzZjBigK+I)PXu-@wmKc- zt+KHJ9+0Bj>`tF)ee-wnrkDY-X#TknOltEW!)EopLtpsZkI^)alkgJNLj5X-o&MllrCD+=4@nQ$Gj1$RbDV&Uv#k**pEq*a zLP(;K0t4g$X`gdzWo?YcB@QqIILSZ5m5vZDYN!+Ab#&-N7CRR4I@|IRJthD%%F$w3re=9Bka z>CuvuCDF$rKX?Hvy*)uIhPt)qMYU`yGYuP#EBa&}cgJ^zJ=Z1Vd%lfrp_=cV(#Rud86@L;QI$3Rx$$0{stw}_tN}AtB3excTxRpd z^``UXJUFu@ss{%h9{CBAoObKo^YN4l&6cl^SD8NVdj~q@)!$Q!H9?Sg9M=B(W4fCe zj^iRFDg|hWv?0HM*&&-(kBwRBCNtuPw?s`7rv40Sp8M9}!ikufYD=M5L(g-~$8vwl zJ1Pg`3v^6PSchrnS?s*W;j`HkI^G~i^c1YrjkaWPqXkiA-S-7sFNF<)$8!g)7B zAK1X>Ebln)p2r!r+Ngf(bva{91(&aEg2oSs2^+ux8Au3feI2>z&|P0Wt3mrLvB}Bc zbi8PM{QHMtGe{x7tJ5%B>c- zo8Xi{XGpZtU=zS(mj5ID{?Pk|VUTXLClYjEyqkg=`-Q%HtK$(}L+P5z?r{C3Oamk+fCi7J2BlFnUcwDdEG8fSQWopCFw$xikBZ9=SuP96lYa}8 z6bGjdeW5S9^YphSsToFvL)z#?yr_v8=tr1WQ)LDaKg;wnshj?W3Dbx$zN=HTNrau7 zB0A8%=(mBIiTP*bPMgzLi)1i9r1LTHM=O#pN`p@h4#K{;$1q~ z>O@i-r^jU--||I;-P18LZnwzFQ= z#&3Q&z1Kb%*HkFhs@^^Z$5Yj_RrIB2{^tu)kl;r*StY!^OyV(rmJOe47ct^?g6grg z`_^3Yh1EvM+ano}g(r;U67}EVMg2uv#1Dio*J`Q1l4WXry4VO~W)%2Pz)TmbkKQXvDgM#pgFxHl9|tmMfH5+`JwGGtgsNaz+nlFMgOG|F-&ZpnPJ29<%NyX<>VTiI*C(N>HivtCzvq&8o7uRlFkV9~>Pf=ECz+tuKP>39Lu@iwvl5F_|u*_D9=>L`5q17>oIGE_UziJDIg zy|O{A92g_M+94!zh%s1#962AqrJnCRrVH4-JunO)LS2D_(a4Rx9-zu=tyzcI z_j)PQF3RhqvW>4s#*^E3Ef|iH=;(o3!Dbdhnnti(w}ogzfCb`v@z*gcPRWjt=gzb0 zDwiEtWUnpU-JGvBEBbRWz(McC#~n{>RxGTSrWaK4h0Y4 zga9WR2c4R~5J4APk6}-1qAYsd>Sa6^w6fk>!Og6X;{C}=xkK%j5Ko3BL$pUKFoWR>!VxiDaAgRvrcl9+)4T0!U}ebz(RB3`-br9D>G3x-FyXE={GMs6=oQv9N2~ zbK#@XGaL0@1<@PBaa&A;X!{9779Et68z;%CA9=hhJ>o(h)6Dv6byq(3M3-_mqi1uw z{>EVE%?h2%>kExz&g{lc~36NNiNWqMF)bL#%> z`UwggPz^i=Y#KV;6(TriO4UaOc@p64H#hwhkLQgnf)5U96Xorx)o|OT6w?6;aO@+Gf=AW7Ij{b0g*Nd7A!d4^8_ojf7|C zYb|UWKIV)1`9iqfZ_S3B^9~dRopvk5+9zsyz^%TY&I(A8@0+Gx90zn7Tqo``cRv?$ z3DLp;o(s18Lc7|hOEtJfNyELJf-yM?1(u7KBe1ugS3K6Jr(%hccU*F*d?($lt^5n+ zN40$NPbMZYxQ1gtB@$26%haS!<||SMOL`;2`s}N%Esc#GB1aRg^pUF3a^qBWw9}G~ zf(K4at_yn|!x2>VT~t&s26CKFc?2CZ5$5;4*UV@zy(tW|=n)AjG#$?Q`+@zli6)Dk zVDL)b@v_rhlVGyT#lZHm_;?oy3lmtTsVRyYj60Vd=sI#;!_=p$wE#xPHbqD9T{!|f z=%#SZwac!`ZdC2KcnuJClwLE>voAk|zdcp&V116RLK(Q19lqv z?M{xTG&)~x(!)+R%%NQy7koKQTx)Ul?vPEk5-L?M>mJ|myu@M9U%tJLSZ1_8z$y64 zU&r#i<|w4nMzh$=h3^e36cp9BL~U3BOXO9BDk>thFP9z7bF)vfo%^TBL~lKJ=MR`l z;$Ldjt~DPxBTimjl>WzNNwduj90=R2+_&A$^KrGY|5W-o)AcQrsdN?sT=w*uXI6^7 z&^42gwIR3K8{5qrAQL|Gb6P*+77QnLn=0N8&~RAhRWTFqbYz4&rOa#oV|a0VNJL^Oqg*H2&4+%UEfpNKTF2lj;>oqSlU$ ztpe}>?UH~05mQk}R{_P8+e;V`#aLQ*pUGzaVT;DW>`E`ylhtic`zjv-Z>oJE?vk)8 zc@dvr#XXAjNn$+O+$w3dV8;2QK~Qg~c^VZx`#qE4=T~@%?(#j`W;IisHuy>0^IP9D z`OWg%#>7Ig zfh^-gRkCbU{L6vD^?kZPmc@4UYq?gnKaA}ln{taw#abqx;nRCX!}`5TPjDSq@5h&a z;&8Lo0t;Jv%3`$>yZ?`myRSM~^T<3f?q6Aq=>^k;2%ieWT8KO#DkdxuKsH8TVv~8Z zgz7gT^=1%(O-TW3_{GVb=VF`d#=FN{sd@uZwyyXUjYNE9aujX8GKpuNE{VTFkzJ288dl@jqLl&+Oms z7Ct5UdBZ%p?L8e-+nn*5z52#^)I4-3mq|LmKAw2AKHkIcErANVHTG8J~ZYRi%WR2FOUEu;RVi z))LhV`xP0jXob@T>^Z4n+OyQ8uu_O>s1ToZ;uMH)lcsQ>6^X*e;9b%GQO0H*Ux13# z^_$qD1Q#AUqDjbOwjLcGhEO)`kGb@&q<&1zeSnBiT%3vt5v;Qi7N=6+*nGX|QgUP; z=~d&XOP!ID_8puDW@}|!5E8mQc{vak9!^I|nciRrmw0(n`+*3A$F;|ygrudThMpTk z$cH`iLrzSjOOTx6NvYm?=`@1LhVR|)<=k^8k`3=o_`vJo?ZK|&rhaApKCq|pZM)2V zWo`kWLeS}YGQW9*`i|NGb3J)|Ju=lKtEnc#h@v>ye@dgu{9LP8HNhz9v7|yxO)bp+ zH78xNB8|h>eY?6HE| zc$pd=Yiq!KW2-0Dj`VawD&F!=sYFzQUbhZv$q%4qVbQp`9pUi)gtPg&U$M!#N+PyE z9M-ur`|ae^%JR499~C`4f`|Z2dVMR$)X5)~OaujU zD{-~v`3!hP%v!)A1{76X`C1;@b6O3Frx!%qL4ykzR1F2BA2=FH4(HpeV2Q8f) zUyOoYKXCmE;~LvS+nzH#=FGRJVpSMFJ|tF`DaZO z(^~$66OkWlx%0gDkfU(X{5)SaQz<`ecoi8n?d<@z?s7{mwgIDC8xf^i8q--^k-_Dy zZ}ShCjC59W49u7NvveLm#(Xu&^C&JoaEZ-9=7;k}`-i*jNTH#nnmj`Q*RxR6_0ZAa z*jUeG!+P&)g;1A%J;C|O3QiFRHz5rv5*V!XjEETu8y7>&9cTEzyzqy9DN8b)PR6XV zxuMi(V>@L|%kt@0bY1m1xwHZuJxebu#}Ox8V2k|183zkfU|~LowVF-0?$za?a113) zy)q2WuK7#Bs`O&LDO?sl3kF|+kD7%&uZO@Tvx@i8H+cmy2V?YkkZyn`xD3Vf#&L0P z{lxGgk6SBp8u#e&^6jC@X$atE+>L@XL{q{IlE>GZ%jZ+DSwv$T>6y2%H$?YpCx^}> z{jFC9OiY(~4BVAnIwMjEb5MxXlTEX1{fnP5D26E`$1#RrRhH6N`WEeq!`8NhK0dhc z^1H5LXYy}j4h+njlJ1Oti;M9<^x12(=Yzt$#Kg#mn1OMu4EGJ3@@SyKHiyW0p(Hfk zE!@_9I>Yg%9E#hz@QxC{| zI7t+!LYtg8Mc21LR^RN~O)FTUFtB4$jjp(OwaDVb;*}$_>ty?@R!NC_>68UQ%D>vm z!C&72O1~7_RxF+cA6On+xZ4Y+&WWYAE*D#E-I>aHt^~LAjJ$ zm_lC;6oZ(ceTH$7ml4LkyuJ;i_q?aU<#?EwiIC{z2C0Y2H7(UP5;Xsn9WgA%Mk7Fq zuDJFTxEz3*o-vXl=;#jzfCGSd%u*RQL;bmYyJ>k?gT*qjw*Yg}Epb#{70Yh`lh?bD zZC(3$&M+{+j2O&Uci*3_RJ-3`zdoOU9?u#!GNR437psgv4fv}YI<1BGDJMJ1EONI* zT6LEY$tAYMMr6hx=KV<|3SPM86=f+Uh!&)xOO~mg)ldPAFR%=%3NP(DG2jPVRG&2K zHC-2L*TNpp3w%kWQ1_&xbHEg3=H(cva^*Bqw=J=d;FE4vZ4 z`r|0;&DWqTvkPUvw8ywz2w>sEmd=A>UWnY#j-(5=ZXPd}q_Ry` zlQGdmzY2g_K5ObNAp`}z7)kXEmaAnAy{3ltgk%UtT26(zb0kifoZ961@JHs9{jcTJF#m*DB`dV{7DjM zPXax%6C`iDL%r$jzFCbTE@q4s^2xqwO>SKrYPYh$+BtKxK(?QK>d;`vT9$YCC$Dkz zH$9}k)UvuIow0Mp^zRVYH#e!RnjnLyY_7_IYhoWGt91H{)m6Pfn$Xj4BPuf(Ydgf^jlmE?KkJx5l-G z*f0_l)nU`!d!(v_jE|zo7nMFR`L(vTb}0(1Qp(VejE@^jG}wopj|3mV_fr=Td}6di zjJG(NE>Ldsa5muQ0HdU$EDzcTXQ~rHLC>sEE!}Hc*=%SpS!{6%bqLxreNP#9yS1q( zY-CGqCGmwn22+Jr`+0+ym~9>rUp01i+psW^~9k&0wPcEA(`j$2iRj zL3ZD&rh2~_G?EE#xqrQHyj|5Gc^cb0;o1b#oxg+7j=2Pp&Opt07Bolp+6D^yI*s;_ zl!~}9RfI+_HBU_p_7iPw_8v2AODbeIoG_-^hk=P>)?cxg4mdkNvUP)&l(HG2D#?-- z$&K}}>Z@AP>A=zSonczAtCko_r7cmj6wkwkHuBf2^MLtb1k$bz_6)XLstKwa{z9X& zgrC?G`^B17B;HvD+I^U&sER_)dnSxNjD(Gq^|43}7jTJ8Wgy2T6-Q;6kA0LC%IiG~ zb9?H;KpFW&@IwO>lKdhNG`ovsy;_IzaO?S1JC~pTemDLr^QMDfeIs|EQt0-T&*@Sv zSjziuY-h`PzqfDt5?yi1lJm0B`ov{hY0}wOw`=Jq_61S~nTmr01uPtxm>d*xFzDvl zt~F=;{Kjp`6cV1e!fy+(?9LA5!=iVXi{~>uU_8X&>rSS3TqDl9&m{(q4a6PDm15hI zVtwv4e-2>Dzp`0r#ep2J1Av9l1!(i;i=4sZ=o)KS9d?I;aqn|`$ow!_sn-u( zhJC;J={pPBP|8FV!IG+B*&a*2+L^vk`b>n}ej<`FcgP;7s_$moYxM{m;!mJ8EVSP` zb!Rx?vZWVgN4Q^eZbgxTe{)NZjlc9Mrs@BpsmEf`bN%HY2@%)rb^JwHAfKQC+xsPA zqH42YE`!8%t->|WIDnFxp1OY&x3>DUg@PJ!FV7)Axbbd&WvXyY0zUX#CwVW6F}7ND zLLDIm&n$eRw?sHwUn4dvBc;+cQRDng)f@g=ixa+ zzlt6kC>elPDo?n{F(pJc_EUNOb@MjjUW}jlMl;z_qG;86E`0)wmpX$pGTn@nd{1kT zE_Y`X^9?)NscG~6aP7@6EZqnaqZi2p=7%@unS80G(&S~(@OgJ9qsopQFuvIzBVZ)y zE=n)Bn!+yNZZglcoGWDk7JcWevz*&@&l49IR-vM|P#EMB7MI^y;6YIP09Dv${`>}A z8GrM4PjR4cFw=Hb1I6m+cwJ-Eb^mW#eR!G@1G#L$M27o<4F+Q-=%_Y}nZm=#T+H@o zOKfZ~McneLo3(~$f7`5ZC7e3{3wORlR)tGBK=zc{@H|W*g$1Re2?e}uztIQ z%dl%AsAa0yVn$oGKdNJTa5O=qoNDV~Ws0B%?RiRExALw9J~ET}K3vzX(U|=@JWf{w z6a!b;lE^ltd9fV6AcPk*<|q0`tvu8*EgLL8_{6O7x#pOZ02}Z7t?cLKG;^(&fb=M7 zX-QoL8VQ8*8nu){0HK<58yw6*oE%>lGF)@&uiXSU!SyZJR zt)HX-V6oT~ikQomp#5ndpYkq);P@Wb+_gPCA74(1!*bS0h41CGHnlTs_mGNXZXj@I zAtDZ+2aBxMjRgmg{s_$<9)r0O_nR=52Vtyn(AH&pYN#O2-n^)c#c`UPomLg);e;-cr9hy8@dsB$UWIPBGQ(bSF`l;nAvl3+Q{(S)OyQM-E@OZpv$Jk*2}Q} zw)5u_%DmV2{po-|nf;)E70W?Y=wZ3;cn4e+YC5#x{|aE#U9EFulk~mzr5;`PORJoA zyUkiJR&8eme8(cA@{X?F@CnLUFz?{J9^*T2e~KoX@7HXX1b<5L@4JPps2y0pblY~H z*~JG*eN8-UqC*chyxEGFwpg_NO1)^;qG+jJd&nd>_?5=?7nDO6XPnteU&Qe6FQlHU zf{Ve&9r9U*Usg1(v`0vR*%Ljfd*R&q;4i1DADdhn=nA+ZFjuhPN+RtuCnc-x0Ttka z0F(XE)D$6K!Iqq%w8A$v)+E{!fNae6Ft~C+xc2*4%H+`5D2x6la4P7st6yhU4xp|e z(u^bD|JKG^YUMHg4LfmWe$n5x+zQ{GubVM=A;`+}w)ghRaC3CH$i(fVDD_g)W+il8 zQ7Bw5ki~uw?e^$~84)RhU_@Pd#Bw4?;ncLXyR;hd4NV&Z@}%!`Tan&Qc!L;eI>P%w zw(s{64Zzby$43?d8v){#Nr-Mjvw+-TvVjK;W8)?iyY=Gl9;CF$u--(^Ofa1S$ec$G z<;{X`hD*%Q%9D{g_d*Prbf+fEs*l^TFfJ4&P}?uUriYz4dAaz&*%^q@-1>5TsAa3? zG$nC3dn7~YmW8kNm1`gK^>xSfa?xkiQJPE7zJG~X4;H)f8Ir916}n|h>ZZQpN6eeq zs5$`EbJc5%{5A?)Qg?fsr4^uC57Z7&uwl$nZ~S3b@coPB&VJSc>G6%pysPZhRe4G1 zvx*YP=hLd|#M@6j5IXDhG&=l~F<-cT>0Z(BB_(jqa5IBDX_sA-g<#2LM8m^m|H+!w<%HfIpc)al{agoi@wMyafn7q2TTli2*A=fCM&KZRxmhQ6_so(OKwJa{5 z;+3)Gl=ZLW9AZ(n4{r!-XmMT9uX8C^=NY`0XF+FAcZT}>Hd?dlnL3*ON*q}k>cO## zfggRU0CIO615fX-A(;MMCgTX)C*`%1&CdAa`$hJ{kBUMPv{2k2nNR$SXOsrwHZyuhdL6yx++fH zJR}uJFcXcG8I1tvuNIFSvocccAb~~85>fs${H#*H0S|0M-I2I#Rlq$NaURSyQo)!I z*`{xBS>@c}C<`U3@fE6o@3z0THKc*O<7I4zM~RrntAgzdkAeL1q04o|pt$~s&r-{C zoT$IW3T}l}>}s{miL%U?JoIJ=RolOY6wV!QWgZxaD~mw-EH}Y;!wN=wyFg#~yplG% zoNbf$z_=L+f`Hy9FOv&@(q11WV4}jX%Ij|tQ2PZ5`j4)spyPsf|~1#o+F3C-b6)-<(kIwbq2_rg#hx6@EF*-Vs!|hx?r@J2#^? z*B>vO?@M5harDg&d5X;;6v!0(e>7c#Tc*#~&s&>q+qP}nwrz8JYO`(Ex2-l~!)9%6 zvu*Re_jg_IUr_fmGw00tXw1hKCmASTXQhcrnVB;<@7dYu8fcDAuJW{{GN(P#iM)Xxqp3VSn>?B{?oi&@8v4ATK)ZLiWAlCemIr- z^RU(E?r&6lMNRaaNY3rw?F0TxiFox>H%8x3VX$D9!TM7``CpPCacxX^N{P0u)1I+& zbTXa;ZKeYy)!sasSB0^qDVs;-nwy6g$Y6AX*lCo({E6!C?#6>}INquD@Q`Jl z|Bb$(3k|4&J5LQi)i}S=i)k=@`k;NMmPPBB&01YWqtgEGrwy$H3bFVS=OraPHoWP2 zS7dUpNs|))X%BvgEYstKAdBalPp(!A(nasFmeL>n9#cZ0Y(A{|QVxY&t~6{izT4aj zab^||ZSM6kO=Invzq3K9gHjX?Y7w3C5JSC=1G zBWClu*Lnt#2IqPp160M)0(||o+)%}9Q%rm+S?#<*?c(P0=EX<(2=~=OI%qykIc$9d zmj(~IIe2n2unP<3i>`YvK#CoG^-DsxHMwOHNxc&fnK{{NDsR%9e967*e&X@e;+s8l z%%Z~*>DRzZk3hwGKU4Guf(qd!UT{4!tpt!z#ZbmYiIVHX@m$3&pgY>X;i2*#*!m-O zq8xm`pzS`9hjG??D4wU!8Ahrtu)THvL;z=uyjzK-TisIkV_CebZ`KIB`>5pIh7}W5 zZGecgwYkmzyhXd6so=+6N(mLwi5DT>5)X7}vDw?^5ppAkJ*2@#XZV=mA?~^cDJ2W)6cZKTPrP-nW+HaH@ShM9PGZx4i&s%Z^OhLq<-G-_SoH! zIO^d0pY?2;#E!|0`*X=Ux#;}Vkv}SNEycJ6m>4p-i61ut=)IiQ`@?9kyqn=kA<&WU zeQ}hLgVHaP1mVA9)J?rG;}&!{o%JB$3>yc+@KjCDLKXVYJVW@Qid)G0!lP3u^jQ}K zMx6=z^JINr+tj#NYC3Fb+li%b+sMPBSS=9&F|_cg0%z0FnRdW1iQm_fro8^OS=}uc zuOwUg#%<W8OA_?J)a0s+@DdJmTpAAeHA@m z`C`$7%XN4-@ruwGD}K|5v;8IvpFx{Bj6{+w0dZ)@yHOXAHPAy5z^;zx9BqNj z_3IO=Xn1()y7LLp>be*3xRMEdJek+(wfwo(3xRgv^E!*MuWyIBKjn;TU)){4 z_AtW3PivojrGrc28?So!aYrPGEOF6cpp;P1^m?2nBX6GYmG)g#Xvp8WJ5oj!i4hm2 z7&_0gaOn9kkl(346KTgz*vuH&t#|+kz|%0}GX3-PS-<3!)utH@? z6}{Cq{|?K>4n!jl1KKuoIe$z#Er|>!!^~ws?~?JT$?8w|hlIOR?ykh$4O2ws^p1WT z&#~^*ik&W0HG@2=4JOZxn}*|u$p=B#<3o;4uPb9Q5jGjAuv5oHl=lYl{l&R7203pQ ziA&5sr6HNhkH1NhB-GT@y9?UUkN*2Z+Lx2eGz#a7bzd&p4vA7nCnO&7yJgBQjG2gw zBju0_&#HJrQ z-Z+(m?A}|IUS&&Qbla*tCSVzZWGxDSjV(y|5_M4Qam=xIh`k$495jgU+!aczUe1C$ z*B`g~>*36m(5d&`iz##t>*r!{MI_<2++lG<+mjmi0+p8RCf%eDC9Ql>G9YKx`9aox zPM$>Kb+H=vDC~!f{yPEEfJ*LF4U~^}^;GhBe=K-5@-Z~B0u?I!Pp~`9nk@L81p_1o?t&?^`Bd#n?z)nq@(81Giy!A2 zP+*Q$ny3K@?X%#%oObv0Hz*CpmJ(qiaO#z${mHCNzNk9GlP@|Olrw}|euu~&OU>`Q zyL`Bg!OO@>XR1G47Oqp3`@Xuuptvx2D4~ItUDRJ^U2v>^V5?TdB`|m~FEpyBaE&R$ zMkeN-SvBIjb!J4M?_BJ`4o#Uy1c5oFrb_7tAcgjC&??5sGida4(FSY+D%4+qscC>0 z1^W3}MoD%Xr5}-dt#1R1%qv@)Zn$Las~TD%sS^k^-z1TS zv3FkNZf#Lo!jhOk7EJm(fECL*!3X{0Ex?a0>@%qLGRB|S_o~V+c|RzkS8&fGI3ffH zs3Vp}1k~VlrUM&Y-ZOookdGFZw4STBidO|e2|E*1*8Q+6G)y#7sXw{}=LN#iR+3Gl zigPP1+YDXGeA??*DR8xe!C)5j)XnhjF{#U#Gt`*L<=4#HpLpmv{mxsKSiH`3Bt{%_ za>M$I#WZU4;)gW+jJz4?wCg7#6yJxA<@GH`=disK*&9X?3E}=W<{yulRb-xRzdfg- zxP7~qjo1C)UO88R%NsEOo!E$Z^D}uX9%;B0$isE4(VvOoy~kFN+bu2MCo@!yT6!RsgD!oo_8WGN5ZJYv>c5Wq}r0v2r27S(Fm!T zVIV3EE0ECrTbSUM>{V+!dHtCA)_2@qY#s72n+A3#l-BO5 zZ#efm%-8+;A&0!tZ(Xjww5|Ew5zZByK2 z`1{)pWI@1L8MkzguV4#!_s!T;Tg_6pO9jO*OMRBxa2c{t%mi%FzY;TSZM^b&YHVz3 zbD26NF(h_Lo%~Yw;Xpv&U2H>9svQhxe)y=Dnt`0Z*}mzLJH?R=4c8S&(Xl2n9(5SEnkBy7pWeflQM z1Vz@84FxtzrQE}|R0RUPeO*?1Ei5+P9f809Ps6Bf73&fY4eW!Nl$M;j?TAuQjK6t_vWdQt3E@yToVdTE|`i^RRcqQ6}3pi3XE$}R23*db};@%j_ymNWXX zO5MstDBf~=o?tx8sGw0O;xL}kXopo}%V_<~3vzjR<^rp z`~;IEj`VN%7nhWK;CFzMVXy+EeoLRP+tSfzYc2Fm0V{GiEG8u0%R9@I4iSW)n4MlK zeE>0P1>MgI$_llOB$xIqvY2!rdh)VMewTbnH#oNV=ZLk)J}=?X`ePOR zyikPvaQQf&A}JZVCxw`8(ic*pQu0FkpQ9%7#D%JKSGZF=1HF>nF3!&!!xOsiy0ty} z=P~L=lDI39Bw~**3IGLzf7$&=^qF`SL$$@8%_UhN6zBqs7ES(nJs!NT>-%O)w1L;@ z4zHiIgBdyRLPhp`Z#fY`7>AVCOl9JzUm}DE#447#Q9Y!jzIt6u^v@KDUw^z_l2h}8 zux%&xn+FGwh2!9-dQ~WUF|qllVP!Aqj&)XJMl^p0L=>og9RhsuoCn86fgFu3qBaINe``vw7@G)mF2Of8}@!x2rGc5vP1gN5&fq&R2 z=)8s730`{3*4z)Hs2ubfvRwhj*v5scNyD9Rqf zupS?mnH6FA9aJ_eF4WU|iX^9(xue@QsVJ(n^e(JI?P(UXaqC6Y>s*t+2tE)ytTrbN zNCLHa^y9Mga_vvgyQMLaVeOvXx9>oHZ1MD!Dv`05m)8pjwz+kq>?BTPaRT{kVj;tIgSgeaAQA5(snDP^Uq`ONE@p6%LAIctMWN2d6fAb zb;)uWZoI@3D2vN3f3|zL^H()99&s^GQ_16LLpa&!iPS_%_?4JVe> zH@|2Kdz}YW93}+;WS={gfcGazs(rWv>9Dk%%6!flU-wJU!31upUjo1*f5J}-KdLks zdG}i4{Qd>HR_Wz|IgTx6l>i zAJ-&N@j1Mq8KSFMcm8;Hhd>y+)W#L-HzXwoPFdE8FHx#4cC2))1P7;@gn|Ou*f?u% zc$}Hf`~G>^I+f2G$DV6?1LiM0Ex_(R^}VGR^YZ27edM*Wsxz_Ov_e_Jb2#H?M8=}k%~GwyvUkzBLPu22D@U5!y&3l!wT4 zIKf$`*I$r%i!Sr&$iXhlIWcZYjoZtPA@Mn=HZ zbdyGZMS)mB=S=rGKn}9?@u_4Oc?)`fxyKRS=A@vc0{xzfIRxBpCVxt0+fM8GubvN$ z<@C^Qqjlr$PZzlZZEdJD6(W7lv84X%)aVSDUfhtFtM(A-)suSM2VcLC5uGhgib+tu zZr2Nmi9reYe4kb`&wIO~$TQ7f&9GPQ^bPho& zvuH08X%5BHI&mxw4^zs07vS_esG7qotUj)aA1aoFFAWMA$Wrh}GYV)NK5ep|CbD3` z(UCF~_JG^df#54V)bV(U%!UejJ#X#I=5}nknJbYdrZuWX@OwCm|E-uUzfmu!$rxeb zuTJF^U5XSLv1-z!gKF0zdy;;WLGP#wtB)|jtd&|*CYP4@vKJ16+~?ovJ>bA9zpB<~ zCdulsjB6udBasGoj|11ZI|}nKZ_F4{fXe03dorFcsti|BBw72W z3cfiYh0`~g?TD($FmnR@X2yA=3*5_}fM5#4<8;w;C<1Qx6^l`igXy!ZSa@46Ed=Rk z$!;2J#{d0snD{cFNcMJeli;;J;JTQS)n^2DKB$LCsh~Y1F>$83%P6|xfcv(xxL6iL z+=O!=E151EbYq>u@f#kCMjhOmXx4+v*;kz7%J@5R^r%B}YBQhb=}ya%(ZKuTW;na` zR2gdF;Nala>t!&;c`p3bcS4R%ZPaRIJFBWHyA%{WJ4rJ#_bE-iT%;pt4wJ7>tQ_q% z&Fs*9dhZWFb^dA`bPb)&=^O=Q$bJpEeZ4(oHtCOm)9LbQ95h2IH4bVg=JURwoA1LL z=AWi+WABb{Bzw#G=eIB8*N7 zgwZ1-XS%_S&6^fx1>f>@6h2gAEZa{5(SgbDtw6P}{|E~!taJ~GLH7p~@cAkZ#xR)c zLU!{srf+{B5}Qpp6l=-2!V`4!akH+IiL9 zqiBs*9oJ+oXPJAW+0ahI@W-D`UT?G+a6#{zPN#+sKqKblwDMy;iX3pc93gUVM1a44 zDYBY8lth2y%j_ahxHZLOMkga1K*1x*E)N7<86fDX@pfU=;C}mdUEE&K>w?wL z!-u8M<(#g;!4!o_uZ2=MY$;7`Gq`_pJ(#Z+LeoZ9!b5Qv2c zriDMd)>8J^pgduwTpg;a9lEe-Z3V^D#DhDkSEZ!*((m|@)(y{e8(c3_$rN+$vK@jG{4++CGC28W*7%OcNz>MIdT!aY=u+DVl&2T8{x*E zEEI^k#TtU8ye%U|-`L_SRNLX+j%UG7n2|yGu)69g!m?JyS{WSavq#lB=9LRH7A8OCB@V%9mqc5uDIf4G^Fn++E21?F4DE#_?RyVZMi+I&T06T zk@keRX{8KpP)){g1G&F5YZLNpm`z2D27wh(1ecGC*<>|^;fukjg}~f>hX&*qQaATm zB+gyPgD{4F%x&M4*|;Im6k4}%!T6}DFFjrBqAmXBJ8`1+>h4CLt56mXFsp6LUTt;k zc72(kUH2$>;bcXCKcn;zVP;V^#z&5QrLVWyePHA|UvF*IJN{$IYIVo+cDNn;!-dtG zn?nK`%+|Btlr2`aqX!Q3|5|_)lc~t@Q4$Wdb~W<{2%-x4u`D*5Z}2P9#Du@c-;MeU zg5Q{Y_Yn;6d0a?fkO&yynJ3Q-Jal!)>FC755}{&b^TtlhdkVQ2wKL&6V4kwTz4SCX zjZM~CX4PNxE!K`~MXJHO96m;TFM&8au5beDY~9@5cu^;YyZ%b=>{)enwVA`R42pe5 zx*wG`TLk)e+X&qM?S)nZ8w#plQ&UiuSI#Sbi_;!*4M+nYTyOT?^v`6s=9(%HhR>kJ z1Z=tbJtn_$H(soSP?|l)_2|j9S#t)bAW;VVXrQ@@Y52^)4x~2-?4a+Z<#Kynv5DHE9%`RC3&R0m=MACO6Ua*?GYtui zb@9*;RWJtx&TphRx8AETGr3b_mF>1Zh>&yuQz5^+hr>CY`Q7jS)O>kH+htCXyDZ*2 zf1J(}Vaj5vgN~$xEA6gz?o&zS5JsbTkCIJD^M_E|_Ijf`J(U6ua#Q3jIkb2bQoc~o z+cGIk_%GkUyY!Fr_9UQVv?pzNdekkQws@T`T8|b>f>t9UB}~RrZTrLXa?eD3ESkZ% zTCkbI3@Y1X)WWG?Q@SMSC#$ezF-a&wPD;GWblpGR+Fkh6B^^oimw-V=wWzBuwjj`KB?iv0kO!9!NF0mhv_)vZAEmj5unlpLDBQ;QHaBuBdGo zqlqvVtKK{6-t>IhcKgjd*Um5ltaE1DVbHaQ(SORuWzvKXYSbYQdDqtd@RcoO9nLH< zh~0JG`ukVoQ-v#eR*0yqX z`vR~V7FKf#7g!}@kCZCtXSk9R*$WEV=B{b1=EH@~n>|0C;8JojkLr4wx%%wjt|h5* z=2`-D3o%hvEKyS+W(EGWSV zXYLzab>YrdTRN3M2aHS9l&j<&9>?G74gLC$RV*nSi%4D2+5&kGpp2?Av9S7ecv?{K zLNxg0)zsX*$OPhYPl(BHIRaSj)MlIB2`V2@`o4~!%Yp!&0Zht_6s*&;Ee+k1|4sDPFw zFGLN)?=%xHHO@o5-V3Mx zR7O8NS$qR4$4wr@XV}?kSb6F#&$miP&a2;KQ-`yua(Yt(eVS-V`m|y4Z?1mJczwV& z^2wNs&+qm#ohke^hPJQr;cjCRIV9p`pnMJsRZYMI#5_$t;Xbo9ztJ zy6|R++egm!Nsf}&I#*3$=r~x(Dwee8fe5i_d^8Df0V&@g#<#)e+e1`T+%VzbPeSJV zK-7Yumu~`(2l`IvbC&yKnuEehEZ8Z$3U0(e04I{5wE=N$Bq{i(tM_QsADNl^7~+qT z1R=2srM#=Z&cQLdJ@!jZJ4&(NnCJ=>MGgaxge#l{g_ua|H2&MGs#vC6PT88CZ2UDI zhpK6LWp<`}ce#mN5bO(uRe}m2DrXmz;~5-Gx<5*dCdyb~Bv6Fazub{rveqb0X1((j7Z;-vVa2z#L75IDuj#eIQ`Ml(N)|)S_*OQPa4VoqUPx9> z#ADjvTPb9+z&&mniz-AT?2#@|zK6_{9f>2y!-lR@&({4=sQ${bv$OB9 zYRZK-i2bx=99-z1Q2%rTnjTuJD=S;q@9E0KJXY7p0Us(II&?LidyDmBK1QQKfP;eY zsItGlvhB2jevEiWGi_GosKg;B;RN$x3QZjm(Npd zOf%?xGUKYvz~^Z@y3u4ifYu|)PP<&n38PjEl<0N^3y&yo9y%AeAIU{f|N6z6g8T+M zCcs)l7t=zlbUcRE{_}P7bMP(bXiF3a!D_xvUz-OLW3H&0vCsZkiL7#NXK0IeBRa>b zyr(@cRxO>@L97r%Y6lnl;lf{A4yIF(35b88a~e;dls<+)0SZSwas&q) z0sq79`$DzWUwnLg<1hprL}ME=cqJQ~wgiH3->p%#KdG~4tdb>3J2I&8`tpaWYs*ZT zfxZXx6UG6J*nq#4omT3)FC5tfFz&WJm*WG4#?+hcfk&#P>1#R`?KG^Z>~%mw-msoHE92$KKkAi4xG2h3+v9rVFC|FWT{yj5QjZ3B%{AXv}@Pp}ss< zvL3t7gLltFM{k5MP!zhh*;}x!{!R~dq9_4wASi$nkwKf=VHwu^cU)2-kKN&frFA0h zx*}2Qj!I&odWq`tp3aB190ELTikqk|qZI`urOEOYsn2JhkQ4Y!k$kk}I2Plv6$_4m zpS0m7(7@kcE8APX24K{~P}RN?>ZNhiO&kk% zN>6hxMLS%{gqYN-t)~7R74D9&qabA9Zt3(oPh{(x%;rQ-=hbT$a2mRt>a9u|-_{(I zM@ZfUzS)iLi;-?+vzQd12 z$#3^OT|9`#=QP%=*3cb~J9c;ZTjveC#2L7c=bk=e5v7BQDr(%yTX$C)ec+YO6TUa!kpdDB+?Mwwo0jR6^ zLQ9_RY>*zmEDPjga<+ksPod!}*N*z(Y>Blp0xp{bgAq}yD#!K6h|N%&jRmi!6A}(+ zCk-*wOh`l2Emv6zozoLvNYD=oXuF~YYrd&W>IXYH`kMh4KZbmdJ8pce#Ug;FcU1)o-$Yo5l4I4=)`3Ht%^@{H>}od$9Zu{LyoU|p#RGiqRy|3Sze}~Z5Rs=63ds@lLvP%h3q^@1`DZo{c&n= zw)70kbhfngyJ{z9`bnIH%H=a~hZ)Ef!UDP)?JRI5dHlWgD;#>}Slha~ytL+-#_srJ zCn_VzqpI=avv~xK!n!2}nn6H7?T7SYt>HJ>UCcxO1v^dQ)izT_MM2^2|Ar;D1&zPl z^``_D31>YYc-nCWryv{xIvHsP|G^y!@XEPJzA;M9DH*$8ovAt9XM zoLuXLjnfL8#4`H@q?SZ~C*y2YI+pWmB_F-IbQTXV<^m}Novg8o~NpG49g3K9N8)oGr_m5*=y&rho_b>SKS zV*15)c+a~@=>2Yvx>_U1%3H@KDdu?2N>+(S)L@+2x`$!T9(EoftYjsxR#RZape!K5 zD070YAiWeD0MLFD2Y-O4%tm}mp)L;o%y79dsMVVZP(AwwH~K@=#PN7gq9QiAcMljG zdS8utgFj?R$P3Y3+KbAflo)dg-+==#{yXF2x>zz6{{EUgL4eAM=4Ee4`$7fZuz^(Y zd!*{ESdBt-W`h?0r&X4jRWbrT7ltexw#rA3f3Tnb(uE!Oy2g&gM|V}wp-Jk$g1t=t zyjBjvX8sNQR-bhP!~r)J1=wGTY{JiohhGEdN5k9hqqKOv7WqID5m5SE{^H;2RH zXa-KbTmkVlYH__)fl*XW(ixB;xyN zA#_8Kp$@$<^qb8_a}qbL(|rR3U1;99QnGeJYS95>okLar|E-Jl6K2{)LoXEWA~XBp5&Ix3nS!Ieuh#%o8oY zIz^a( zX8y^u`Q>9Y^DBZ+Vef}9=iNFEA5d1gA7szRfxE}aJn-wX(P^|@{`KBiH?C928fk(i zhkvJyWCTVG_|7k1kDiShmV7P<`i(1%Enh37ziSclx={d$cF3*cG*#?)zd(N>XY0v} zODsZBRHCZK6^uK^MVku5r&fA{nOA?>Q`$OE%BN%PWCE0qF{+7A7ailIFRf*bRsE9D zYr(M{GzH2#YX{Vg1VlTehuv;`4#yzyM_{ifnr-K10Dh#Zppb`Tf~}yk(OfZ_tFIURGIq4Jd)qJNCWd^<=ya#ksAG&Lt zBe0d0)SytMb&hLVL#I}Xlbn*vf;Vxca(SS%X{9M@Ptkpq^)*Eu4Z2U3*S0B>GVmNo zjIvoP1zuIV$G#44FlfiC)8iC3F!+%|D&O|QccZ%@h}sb1nK^U~ zoR7O(TIgNphbT{l41A~Gy`4ter)WWefu-k+w^LJ8CEl{3!&O#HWXWM(93W~jqwve>6p)mXbKOB`5$iATkID39F%1l z`GP+n*4({)SwVB9(jwlzsaY&!bZR%Fx`<&_T-7dLKg%xpp}9b^6Bltdo1Y&>+s?!+ zg~U?d2`EMKQ&Sn>kvRRB*gi*?m%zJ2{0xE>e#vZ&f#o^Mad*-e`1nXv>a?!5+J6Bp z#PVOXLFQ~MlX=eDT4{fHx6&P%{gC0qhdg}Zf9SfYVBccmjjVE(s+#y2{3+D+vPzRH z=#2+(nE{`9-d;igy>|vpjt*?7e{ci5{0;P-0rS8pxO?Z%JnaU(?sDA*BIY9NX(JbY z!C1eAR*_0NRW1oBX&O1X@UgOmui`XjI3#>*1c3B4nGBtw?M9=l;_BhAGblJu)YF6T z#yNZSS@`{1N0gCBUY&3`3WdvlNdAUQx*?*ZnVLYH6eJ7+P6+0B1~~->hGI5HT5`=^ z6w0clekEBUYvx|?6n)8TEd1dv)LPZC|1Uf^DN|z$+8w~EXR?ru`Cn%I1~mMk_t|{a zK&%)_;>QTYznTn9bJp)Se-Q7?<+xV+9QEZQc;r8i2sFQ10 zV<*Zm;2zn3;Es@@4Y3d|-jL7!g18(300bLgz%F}UkuCuGmqUs^MfUma2p@aHw(9i= zd#K+2D3TN5?(hHv<@V(W%GlLYcLHL9VdLgnn)sI;{I4$G+nF|1^{Un1Zysq62dKs! zW8z=bk`3MR#>*;A1)ZqT&~{wR+kZR(-j$gqZSA*!H|aIsSHfZBV2?t#Z)lWC2Oylg z9GHK6D{`#UNUu~bk880{_>1BLk>HDEq%Qkm;U9I)(yOmol^RaGCCh>k2XCfexql|I z^2CylNZG^BeX96ZuK`Kie>P%VaS>gagG<$^%Abm)wp4yh7BqSut_KU}T^k{8DE^aGQnHXVuNnsc1|#-5-6M;=IAf+pO$vkY-CURYAGZ)+l^4DLIRjxo^D9fnjZV7rQgvLrBr(O<4Y1Q8^#C(O=%PKR(sm%XA zBZW&B2U~G0RmpoP705*Ko2SW~u;Q>^{I^S!D!qtG6%Kgc6gRxXe?hd4(}R09$Dqzc z#{51FT`Ar%0;nAjvanFh56dx%o)-JR>d1n3GfU58U*F3knf{%TZupx9aN&=q-Mj>0 zt>c(kn{P%xJuscR_q|F>dA5@zNe!C88h%BpS;~`>#i2Gc>0yme+|Eg6JU$;m5v(#>K~F3jHhZ@3AP{h4@q3Sg{&$l9pG zW;@wS(EmYd7|C$kmAzq&3Y@k+aYL&{MtB_fqX{^M~>#jSAm6Ev*cg4}tYPSxt z8Tbn9JMsT4M$wA=_WQTp%Iw$hzA0#x;z7ItM}LG|JUC!Oj)Xg8>e&*T$qR9wSDYvK zJCPt=z$LX(?%=<<2$-$5jXz(olT*|*lgL4eZzoF8W15FnxrOz`o0PJW&{Mc=zO819 zwYWNf7u|uY$$b~!{&b<<@O8Z_Ej*~zcO z%WW@NNm;Qo6-FIjujj-@&%{7ag`gFk&PNGg{|&nT?KF0!$kq1pD*K@%9&TASaR{2J z&MCtV6Ciy8?S3lUWD1P8ym9tTX$kvq_xTnZdQH<-GdkhV3NYe-NC62at}kbsl?KPh z17DEN>ugzYFkViFImv-d){s@N5RBTeWFJ%{I(Po}r?Y?1NFl1tW)C^qj^+kkFph%x zkIcwHG7d5*FX>n?4){hMwdYp0zeyqoTcMC>u-4w?J4w<+zdAhaT?Y`kV-A$g4amQ% zMr!?uMsM2ZXezcjz{5PC3{jHN_AI;?&*)pA{ns4LHAhxRYGW@v=-YMzWiaKJ0UIY% zkbCxq{i2UjHOY?{_)vYhTHt8*O|jMP$lXqI*Hxl%-tUiRm~I#Qq7gS;-7n>|o-X_C zF3`GnFX+mOe7UoCaX1UOJ%@?U=JMaY=)7nF;{CC=w^3yjT}jy3^kPdhhAhgC2o1V>Wr> zX{-77h~K--kgb4s@<{5IM-bwPcGQa{EdP-#WDX4ln;7){{O|VQ=;wCP7h;~5sS85R zSPWV;|2)rS&i4+0A{Jkl@8y-XuoF;!?G}992=?1~8m-hk<-P87y}2bJC-{|#Cu-rr zfn#aU0uDnO;Yv0*Cg8>#2Lov}mHQnIox0D41$e#5D;c|nb?n**$~Qru)ws<5=-BsA zuP_&_5l~9ZsLUBtD*n54)p1mtg{xb zM*RQqnbl)?-xNk?2m7^V+ot#gL8DO~pir`cQdSo%8e_9^^>}<&Z2OxcY&bJUSuCUe zo+qE!DX5aSOJ*?Txx7r+u4&X0{B-;q)p^;2&r}UAgx>MrNSW=?agR$di86BH9Iz_* zb}y$f|9WNYi0X9{dg<{28Oof)6a(5HW_HT+=fjh&$IakjfbsucCZDlW-+6(WA|S3p z(YIip=z~>~O6?_+ox?UN{%1*s3mp?P^r=k;(3e1OzPlhG3#n|M67sid{Da=1yV)BM z|4|E$cO?)j=+yoBwkxJfACO;aCbD^v7ixsbS9$5HY=ii+@7sL-0|SkpCJA`xJsBWX zKpn8qFi~>C4MZUfE!OEv=mXOjUx(-E0eyj;WUL^j7JFb&tn7EtYT1W7W>pRNr*Mn= zGmtmef&7k#7rL}tvqv<;d7hij4pZ#*T}{0rE6-$NI)lL|D#Q4K9^zu7`-@Z@PSHG6kkEB37Thz^OH2k>=uWv1HZF& z`|CVUk=`gj&xLAEMt<*;#*^9Me3tHq6DSGEq0%(1Qrm<()wujJT;&_xW6{Ts2%IP( zE;~q7)THH~j`STKCp6`cdYtxhV+tM^y440QJh?x7G7+RoSMyl1Wn+q(-7(P*k@xP( zUQtIaU}OF*7hb?iO$^kZ)1ohWdYnrdQF>o&-4t4FSpD*De*&T{9*-*$GBWZ;*Ig-r zm!lG~t-;Ios)H^MK7-=M+h8YH9DecMt_7>~<;<%qmt0==uK)}+;Jq0fE=?44HSWFn zS67gVN{X`abXb!yRHWphI;j1$>KYhg^t$yX--!u6o<({eUnv6@U> zCzGy+j8eUu31<=pNc@MDCzzIx0i{(wm>UN}SCC@@FAojgPS-VGKK;KIKsW)2!HwMO zcWCajVkc#t4V__OoAS+q&L}T(N8c)l&WAb53Te;(=_MFHbGmDIi#OBK$CW(|h&uv- z5ltxsFyOB0{B*!gPC0}4!>~ryJkErfIM&YyAM|*!?&G+I(|0-; z6@R+QY5T`y;eJ+p=|TSl(DmG1{*KSd;j&*e6Ca9I#?c{4D|a}kvI{t~!v7_p;Prx# zY^tkncSK5xC96-4GS}Sdvweyq8nr)}gb`F1E^W{z(03usYdV#PZJ zSlnBbmZa=92RD{}LLI#$_X2nJ7GNh0N#uxvlZ5xk&sERBEe5BhnvR%_#A*Cs5*XP5 zeL6^`WsLpCS1y*$bHcabgqj6qik{$Vt&+NeV(e{k$L1*PbiN8Q=;_*Cqsrho{1N%g z)Tm=8VG_E#PlJk}C#BilDWrAqt`t-uh;b<^~htm{RL0%q{T<{O9`TAVP7873`Xh0X z4kzS(pb$s=SuN0H^zNtjpCzD+i;Wz+=zGVcGg;EVEYxWK?@5?W(p-q6fuJ2JFK@^P)mzHb7AUwyBYtd;=^#x;_{42HLye>K(;$demGEb zVv*{dlW2%3G%!n>!y!aRH=pe>w9n;x7oM+vKD!`vcC5jKBAd@iga?XTKKwTHco`x- zHy|6ieZZEA#{)?r=8y~J@1rw94C+CbUtOt`<>e?=!|>e>#~a~L&`iYuM2adb!^hh# z_uK2k-$w6CqEtFfxfn(&rQ8^0Azm_DjxQU+5&F*Enns3p?61(>mQeR+A)a1Sa9F&j z=QETjG7!FqNApud)Jip-zeu#W*oFlk*W7`2(+7!3)DH|A6kJh<<>fq-Qc+_(CF{8K z13GvgF}6aSvO(_deHiV}w^lp%k+&$gsHUG!Dd7oe%*G!zBA1oH#9jXu$LEzwpAm>5 zX&|mPC>wh%lV8Va@wryRU{w2x)F}^POp&l~oEpNdr9$3kzuF9;hRk3!BnO;13WWkz zOspp8_t(eaOzmNrDL&;+7g8j^icw5qspD> z^#S1Rjs$&rz`KN6F`yqXbh7~Xft*C`z6RRfwN_!IU0tzANJ`TXuE?;rlh?7K%a^X! z0!@$$Lq3BUU4@9#4g)~t$w1)VcMLoI1LvGFD)BIDbdPJ~Axd+C3G$UjfqnTsIF|KA z)`S?T{3}P=r~fF^J z{t~H*8RSa)-J5OXnq-B}+P{gd$;MMZi= zSE*Yg01r_-l>%f?NpP=d|I)>Oos#(43sY-mUdZqj%8HoANqsoX_7s1&TvlBlCg3RBT%flwgJOK>RPQA=gUq(h~gr&sPUvJY5x;B{ncY8?hIm zcA1-)YX98}H+2`?q_*?VOHf|cgtoKVLbsC#?v}gxpb=dQxrQ-QF%=&w1xN2bcN94a zM%#b)N51>|8C&{Fql{We*vI8_&d+uM0-w$I1z;p@HFBZ7*&CMdZwAqogRZWJ3xvCD zM&*DOjn1aq%|yb%VGxotgu`=P$MrJThC|bfN8gC@U%QM#J_piVxpG=m0{xj@wxg;Vz=Lc_MSqm`C;zXo(SzraOp){P zsmYbn`RSnlvmFD$AtW3O2=LepQb6sdpw7c<*Kl_CP33Z88I2;LrIma;a;VUm7BG?( z4m6+hizDE~P)*vd%4v0|R0lxuz(`8*_jcY40LtObFf1}^w_mE~Q_N{u^%|f2Kbp=m ztjezK)-*^f(n?54H%OyMO8C&--QAs1(%sz+(kUt3-L>fM+LL!5-#>n>gBACjSB!BE zr$ih&)sV`u&%z9(`8LzFU<^k>M<)-XjRX;iQKGCiULnGGhqZb3Xg9i1(f%CUe+7Q- z8#^ghZ^sHMQh8j+~aD0x=OcE~RP3O261$ zzi)Cp@Lu(N3CMrM2F$AcpCmAo#L)$>XPZoq3KQprYil4VE6OzLOf^EYghaDUE)=b~ zmEC;=&0=LkbVx~IAci$>L}Emz)vucZ{L*|lmaf1I4hDFS117gS*1q~N1E*u|+)=eP zQ+ApvGz!1Es`Iw2V1bH&o(_%_va5t@XBgrWbtjq6Bb5CJnNBF|_rd&~;lGwLZxI?m zr=We3&ewI;2G-R}N^QPFR>>;^;-n^4ZN^T`%hU?Xw`oH%5nuoP5fKU0+pm42+~`UT zq5|BW{V>p1oItaefl4&6Pe1Vc)d=uA*7q>A{pGoNNeB!`40NMg=LiW`zZbD^itF>R z+r9f?eJ(00f}9i<+0{u6ZLXPLlq7~#WGky>tW2!s@dPjNo{?c`1Qh@f24QuvIEbLX8xULAJE*~?9bQiE)lSs={+`3TQ@0a*k*aLDeF5) zmpe#1NA#ijMP>e&{G!c4ko$QMth&ak^xT}$G{M#c9T;o78tsaq08oS;FDOP6)*gNh zKPasF#OzS+nK5JD=#JsT6Lb?C@_(=Qs5>@u_ydb%Z6Z#74tE+lIYl2Bh*>z_Z9j{N zON-1CT1NUx82pR9>Z!4Av-S9C7i$KWvu)x^MNbEv25sLGLErtWe3^Trq=LVXbyRV= z-F$wc2^fN;7{1%=N3?x=ZG-|~Xb&e_H7m-b(_9x&Nits4a;1`s+#rBZ8@c5 zc%b=cc-4Iu0OitZKiXZfIIe0;$(K|XlmZA-Glh_!M9|&j~ zF;E`%d+tZzP`mCQ%OFO5*N-8%%a@lK&Bz{W7sIs;Ht*dbaX-$$fb$bGsd%CGG6QZP zI$@v>EMl-pT3D1R)<_pUs<}dn1417KRbH22Rd6rSTYTgM9>ecZDU%;km_}4@CWq z1Nt*BHoUFkdQ!L7r^w9~Ik^VxS{=Q5f->$a&65bpfWyESlBmnS>f&n8^`sM~&Ylb* zwnOeAo1F2t`DflSo+BEt!_L5gGdf!y4w4mxRw8(udRTgfeeMUGb3JwjSuqGYA!v=1 z6q(`mL#FU>e^DNQiCT7EXcqU5fFYdy&Pc6}WPGRu({%SDeM!4S%whY7fX6+X>m|eo zSSC7pstXl;|0qcw|B1w00zQzrDm_FxoDz3S=Ee7DrBMnvXu6iO?t7(y%dIyJ*(!}#EW1N1J|PB8+A1bPRd$yslhSi=G#yRF-ZmN zg93+ddHD`P^I|>;R9ZZTascvsv`_y!bqbvw=cKaS{2ptPJ7q~#WZ-FOH> z*vgc9f;R%>IYlQgk9McKl$Ec#Aj^#3ZrHXLjcXSYMJ8(f{HVfv`xBnj9~q5Z?_$RS z?AU`7S5i1EXoTaw3H^OPnMw~MO%)@}p6(Qpc%*XkHOJS05_Q%$t|VUP`Y?$psr5QS zfLnR56Onjo`1p=L`g{i(lnLPxiVvW|zrvh*l45mH6*z_I@9< zC4n|eSV()RBu0~v|2%G8ilDAzj(OAiO!ot-2#yMKNT75KJ~SWO(Ei0H^K!uUe`UI| zo7rOpGQ`Y-aSU<@-~;Re=Y4FxxV6n11_r`R5eZk^OYz6omxUFvGW8KBX=k$!rydb- zkkWINQ=!|NM!&lOsYOf<|K5*JXt^D++aJyi^ijRd_SHZu-uU#i*D?yu+sRLmM)6FT zj_|G@9&VePGW;EKGW@QmV_ALIc7uzm$(x$;D~pS$Fl z$QflxZ12B=Y+MUclFu(Fe~P1I1xB>Sv88fo?gQ!29z>l?$ItMa*6 zB00vJs%zoB_+`S)2i}^M9%Tab8ZghPh@A`xVP9<$tgNmjk5&IAi%b_kRTyN6v2(;M zcweOEhzi6dCbAaDY$h3HfLQCn9+o~+Gj&EfoD^^yWk`qfad2oRi_>c==;$-!#{BG* zPG=z!4(*;3xLtdCc-tf8Yap0 zXvlgP-bjo6is(sgoOHWBUVgYTGyJLXmoXdmUSXnfGJlw0to_BCdb(t$d#SO4jAEWT zsu<2l`moYk`0C%Ay|ZZi-$9}<+qtRP!(o66t#{LWvJpsV)eWu(ko$&@&9qBaG3E|Y z$9t5UvqyWP!6%>9W@XJUfu}9hDo!gg^>@k2x@dzlH=X3YeTH-LZ7I&q|Ex~YI=mU1 zIfu`huebHp)QmKPu*C{4=P~PA^KpcM0d(g?HPan(2hvY0 zk~GXV)voKbEodaudZMkcb(1i5*P1tcg$Ri zOU+NAi^};fgPM^#KSC$d{ULW99jahQBZlU1^BBdVt_IyZ-6hw9_UA9w)+aGQd-1^Y z)9vyEMG3SuxaE&ESC^~cR@yODFgxaP*dHnzOepK6=X@c|%8KejH~14>F;C)6^!9Cj z_F|UoC|;FB1|GE6@;y5qw|${|8(5G7VT(Z7t;8RKbslPE+$mZY#HS_S1VIueqfl@f zpL>q$YC}}9R*Z@h-a+AhCLCF92^Bsg{487}fLSiAF<{dsK zy!wypBQFe(`%6Ln?}+otLa2_@8fIVq&DQ0%)%K*4q%%V+7k>HZH! zT>~*xXXfGiy1r(Uf9Qc^lhKNvoJAzAH+q>2eAI`3v;->FC@_(Rp6cw%98|(SHOPVT`c%(?$;*bC1~p z^wSwf%A3DIXuZwNtKaeph+nqWI$;&i5QI!SBS@Zt=U@FM^KtT|X}edh^ceEax1pPT zFKV8T4FiRWS1NNymJO+rU#m!_qkKOJ>*~KV`@p0c%L8ke_)ml-2_)}yXtTYle!jgK z=pYzBg*ArEPp2Y_^WN+Esl#wVUkv&*p+oR_)bk2Wt5}lbrL6&~fPw$zuuxumvCRYV zUwq?#6VtW797S4cq`Cb}<>WNFKKES-f-CuM+rdmp=X~nyvmzVi8Mqe;t@}PYJ#zL3 zEjcXn0{uwK1L*5#d5Bz3vnuFt%pkpJYCp4`O&XTB^cA<5Eh~ONrJ0zd4t;wIATX2e z5Rfa^vqNu{X}>q&3}~4Dm8&;i?n`a?w7;%hBQYXLtX8(6G(ty4_EU#C)DSO!@TjA- zZ7vmrOIsx1LD%k z^jR?ba8@z!zkdIYu4RL1NL)dsu}_1xsj9;L+3aWm;Q6D4O6~k$MS)ln*O)KOTsL2u z1zzqBuOT_5z{kN5+6s;&yo9&JX$a|cph`n+Ixq2uCM0b#BWgd_)&rQ7#~baafXESO z)YI{}Y;&QSLb`A0pER%9`}Detnxefiw}!$V~ZgH#w%tZTbWWPwu>HgDqo$IbImUe?6l8G z*t$Ov-21>j{LI^zBL>A}mEk}%g#*DHNt)CDbcdBHRaI5O`_m>3Pp3h|O37?C1nEVZ za*h)WRM2V)BB3F{kw{L$XQm>>X+4C6Wo|u>z3vxEBH@_BPp9jDGxHgf8;2=*TomHy z(-^-EStm_>Wu#-itEXqRpy%OV7_8%Kr}UngQLi7J#Z_6M8oPn!KDIp{mdbd5by3`; z=BXYi3QSiz#~_E55}E;;Q2NVDuGlmu)XT8J-&(L98zJ^0w3XdPEFR&6&xXUvy0dCL zm~y#z;OmYEB63%TN@M;~Y#bxkk^14}%w|ALn(`ra!@eMI)cjm`xoJ9)+XF@-_OtB{ z_*dgVOyLNz-K62u!efk}XPMF6?8X6P1QhooX|D9jm{jk=$LkyS?_MwBb zmt_+XVeR6Rr(~rnz#$RB`aoq~F!GUH<7lM$xC=bu{}t=wzwv!*=MmUN``*GZf4u9R z%U5N@b2}L01v$$t+*2a{_{t?-GJ*18hD@!!9p=rufL7>fD2*KVD<@L8!)9L0mR>k& zf;vVTMOb^)^?aF(K%lAf?ji8yvfBX!^L#OJooROAFFnqL%vFR!aAR2SqOrN+l9a8V}dbAd{#^w3h@= zTDL6Ik8=8PVy3)y76x8cWAEwmqCy>}aoQRzh-#1{v0`kpRAZ4mFTd7cMk@-f|JzQR zr0wq6akCT=+*Lgtpd$XUko?zDv|vPo$#d!Zmk&hZN;v@-{2WRM^OW5MBn%8IeRtCT zRCY>W!Iy#Ndc7ZVfjgpoz7;Hl2-e%o1xM2rgIcfi{r218V5J+Xz1MFDJGdBk{5 z@0+YJdF7meq3yTDv#0&mXAZ%J+S)6P!X2qQ*C0zg8|cI<3-Wb4y8-~p9QLqiq!#`c z*2>Fgr0_41g4KH2bW8BOV}$C2t6Jz|HLTL-$YXx(6$%T=uK&gR9(kdS-N}2YRNa5# zyaONQR}f5lx~k>X^Mp;*u_LAS76*qy(&iiaW=Kxv}UsZ zU^d&huGy10t(GCc44%PN$2FqVZMdi83>n#BId$`bOH+$jXdIRc&v~@@3^C>#s zp-Zm>Iu+SM@SZm?>I*-i)wTo#1?hq)#Y7f|Xi0M%y~djrH({aO4KhmC0WF12E){5# zuZ)HGi&1eXBozzT5dQgj?e|?{pJPQegST@tp;}KLWQM6!TUZF2eHIcHe@i0Tvqwx{ z$a5JOoZn=EAJQB+0zZBFbT+csY_n+L)TMKS?M9mUw@}wMRnXntR~dS`ZmUQ;4T%r| z^)S?FbvfXHHdf$yT1jikj0vw6`DddC{L?+}tJ2Kn^H57m9I!yO?xwp%Je~eMTQro; z2;HAHBjFk##gY-uN%FJvS zO2>z!yF7TT!*Uy>rAJ6BrNTJuM6(Km5UsOwJtn*=fJB-q*T8-AM!Zr*Xie8JOg@mc z>wuY*ntDEBcKJ=rc<2}t%Fb{~IDF_%wsVy(EC@I8 zot2bC$HLmGb)1AhI*N4veAKw)G;iT#_|^7#b|?3x`oY{`MF3g@C2%nG24xDz6ruv% zglh?Hzmp^PgX-pcMLMJIR{ww1@y76~bDC#!oxa`OZCG-~#XF!? zGPsZ9!}f>P!(J2C)v**=X`)x~2IbPjF+J|1-2FC(TEeX*YwkEajJ<_Wk^&Fxl}zse zOFA*+c|K}%d$jTW*b^sP02*XzYw;W17tcqdsbYm6iEA``3a=UB@!`KF*P{~&MfO=a zf-E8;e#CZsQ7~JE&G9+@LN$`k6VMw@*tIU%3npraS4WFR62}GwtE3gLZ&vdMTf{M^ z;ZTX5XgC2+^}oqcz_=JNfwoE2hqI7w`y?EKlsVbbJGv)C6=bKc|7FGVfqp&?*0QD9 zjT3|d(s1RoHJb4YNH2t;V5U@f#1k(_^}=)Vpg1ZXef|Z{8qvgh#NosC@6lOPk)W>q zvAQN{Vqxb69XiqP;@;ueMnI1{;M<>chde#*(_8ufj+5@j*roW?&<4-ML&!x8TCKS_ zB?MD$+XFrzynDPJVx7*D=BD=mDa*n|vIddSsrz<~HgefJe4LN3J~M5$&!q4I# zlWE{qLW}jrKF)T*{MA^)@L#sSbt7wbnx{<+KFkbV4!70Hhp>-42oyi!Isib?4oY}VX-);=b{46-ObNgfERnyj~EjAF!Id&5DKZ?eQev*+B zH&|SM&j}n};dZ~>{6`iTAu>rx9~s--m;;rF=rjzNGrr4vkx*Z#J&YB1?C)EeoK8ZH z7VFoeL}_(Ff*B}7%=UB7xaQdS<)`Ky@xX|yoXftD4~vXe%Xv1FSX zOd78-l@W2ljeo4Y*4TT{+6$yPos%3D!f>~gcDu8k)gT(%6O90H9^WJ#p&$v5%Q~}} z9MkFj>U7MpJGB@T=%>T^i{f5x97Y1=j_?Y_WXN95BM$n=bB?41}{Z z2Z{Rs+i6p&G4#g86VQR-c7)KGA;WI6z_^;5m+B9mY8sLq(|3SrO18LZ?neo zhF72Tf1$kb>FoYSkA4=w{4Z@)qrn=T-IUi4;5BqQI-V21*nHU7jM@4?Z$VEMs2k>uH0<;1&eGxR3nm%7+b+s1@VHCce@c3t4zx+c5tX=pIav{Em(vsj4S!3d zF45{{>&;3Dz*HYOS<$)GtY6LIt_N1XNL)BY6-UL?$``#WzHSWW+H*WBilP3EGKj0? z9*9GqJkYJ)qEEW;$AauG@7*}^B*on>eq+JKtwOnT7LYUjb6t~w8YUil3jL)ox}#FJ zZ;EJdVHcxO^umhpJ&Majps^0mp#I}Nudv&X8t#^mt20?N4Qyi;wXoZR3W4!T9ihk5 zCk*FeSqgLImq2UP28{(nZEiR#;+?zJjymKRh;#v~=)&)1lj+PcGI$xcquoe#bEZl{2>_K!R+8^x2h(y;AD3t~66G^iPkHM}iRK5zu1n&=&y z#NnQIjsXXG9_>dSV}-3d{8z`cP4)9V$;iEgerlRc!r2Fem^(G@YTA0*qurs=_79mg z8X+*r-Y1UD-CJ!|C;Usc2W8G~v(3MPsc95uV;xU?21?oNEw5h{3;m|N`UPwup~neY zUYOE1lSa=$07JuKc{q1QcD}=R*}N6^TI11*@2q=(1wY?a-E8lb*VZ~!rSZD$x<$f( z0TVEeb?n)$_u3jv${GwA=EVLaKai7@d`~Hr>mWy5#-i};?qkE_Hbay64!y^y0!|ZN9 zmbZJCfikaWOwrkU|ra}LN;UPr(0{~616#xp1=+Ne3BWv7M8 zc4&X`gD#Ls)8P+?;(pon7)j;xv0UcaxDoiB;}N8Iph%~+OjEEa($3&T9@+X|y1?kn zNpb+({K!tV=_@e4zN%636d*HYH`R z-qNj7mHoiGC67@)U>5eY^KI}tGRz8W@eN=oNW;cVL`%kCx}btlHpKz|qt&lFL;n2}_mj?~MMf(DfGvG?ff z>+8x*_S67=i|R&$!aY9`3mZC5LuXr6bymF-$)LE|K+-9Bz(IeyDboiU<(L!VIj>Ar z$Hlx1B_^z#wvNQJGZ4V|I^?<*DTn-|P=AxSb8fVa)bjYN112 zkNx;(U`yEj8{Mmk15DpKSV#Fohg0ecFR_9RugWy4a~Kn=W1yjdhmDqi5Z=R< zI%Mx$8qwV=oOcddtIF6YppvNOXq5zo%?cr zH{+$itG&~BF&{QnnlaT9p`mi7Q4~fV2x)@#l^^unP&gMtFO#vd@zocWfo4vemU_)hvygN8YhYPqEV;EH$>bgVAIa zOc8>VH-Z)@xmlpEq9&v-WNW5;5x=9*_{S(!K4W`In|B9fkJ$XsYR#p5K2Gq}} zX!D=}eQ~lf-6@_yAQ6z0mGuaL((u&Jh6_X^{^jJ<9^iJ|c2NMfJ-ixC_9hEES7c(Z zg-fKp|IF)PcOzFEvUp>_6_KapV(ckjccA#({>b}yl2P;rS5WB2N-f`F8k$d_ znQ_p~tiz@Z*46c=26ss|!dAc@PrG`-gI^QQt%TFk*=FC_EmlOAPJPZzXe+bnl<}Ng z9L~rZKamJ*=W@9J?R#=c%KZO2TzM^(EkuAq>rIIgqaNz$s@u(Bx#z5g)06yX*q>g; z`LBE3euQ3d)vai4&Kn7QaoLxjsx~P3Z~ZywyAa|*rdweiVZcvHa!KYkVAJ>xvlO6q zIyowkX}evp?$}sqKhFX-pa{|hKMM62!wqkQ`*%POh4Vevf@Y%I6W)8o>=}CBvu$(` z{&J7Nbp*jRlVqS|x$CW%&<&!!l&|VPEyI-Q(p+_Af)@QhOoY8_JplW5nh`_{7pw=m z*}%O?qmFHP==x-Mne9AS@nFa9zCJm4%vmDnG=pTNGR+VWeVeU(_UX;Z@$!{q4$H6G8d3@l8m zMSu*+V4&1&oCXE`Y}eGFE@|?7as`_+QFk3nT&lW?HQ$J@Gy=Fur5);6QVTT>f}=gg z11~>nYz=bZgQ`9#krMex9z)arT(}+l^qJvldSVduA!VWN1eU)b5@vUz%$jIDuki9R z<`y9G@{|XGH$uD4UkoQ4hr%kBy^B1T6_>F)IMDL)idpKI$I-I0KT4>de|MqkX?S6} zM9HfHvsuf_9^uXVWAmxzP2zWRb!JLwxCCtT>*vm>0I}9L{L+M0RK$=-{w~hb)(@(Q zCZ*UN@@~x#u2hlikNL7c(Q>nR*(H$UtXK6BC48_iGcSf*@IMgHG8fUhHX}!q=eBGT=Cm5}` zR-jhrLWp#Dlh{?%v2^TtYF0gxP8}nKO%^5(idu#&!a6f;Awf1e>J$*r-|<2M@6q zx?i?HU51gQta^J6T!5=`r~hB`WO;sOLkr9$TSqghfu$pPYKCIfP0^l!^$e?C&-l zj}~iH;?izrMyc^$WqM4uBiC|@&L%$`3Qo)K6sxv3p#B%C(xvd=Ik_yyDdQG;w$Nl`GohS^;&&B- zN-^nx=Sq2<*gE?y>8Bp~#2```*8cfUmPw7a^U=ooC09Zm2IY`!VF@uE z9E`B&KfRxwV7NnRY-TMkfAT1)x;i_5zP~yN#iotlOm{o(0(RGk%1R`peAl`)ybO~v zZz#UCP^~NszRjmc+>N1hY~#0Rj)KUa+uixsRXH0AEIvPR1SY8^G8p&|{>G-!n}s6? zy&I1s$c&MS#%bhdyy^vAG3LjQfC_Y-ExBj=Zav*F`6kX7hxoqdOVP+@LZZ(E^Dobi zAEc67I$m1kC}oJat+iLh@5U{k(z#;5?~W@*txbd7;9u=JEF!w+QM%ip-f=2C5=N+R zpPv7$_B+7>j5PUj@+wN$_t0rOjHY{8IyhjDfp2BG92P{Y__{uIe_NVhN;2V092spd z@;pq*Zs@4R3j{yQpA)>()e?NrAxSrd97KWR{|%t zYw64Zbj=r36(f@qGf2Jq@wxDT>gmFiBISJ2%GUtUkq?D=*qa}pb`kKRVqFKWNU#SE@b7XAJy6l()v{kM0d`QK!?C*#@&G!QR&kJ@P4 zR5Cvw(YEQJGm2rP%PuYBLoX8#JwYFuLfMZqu{L-T|7b44CRZ0&?QEus>_K<$z8U_Nu7>?u&Gw)}hM9WgS=oOO;``gj^ zWF(cu)@FqslEtN`>-Og$sunc;&g1UM+An zi{z-rT7d(-=VFt&d2nkg-6t)7&*=YoHAoS}$}%zH|ltS~Yp^W0o9LyzAd=YAi5pNMc9^`r z!=8(NyPA=>V~eOz!^a)s1E)3Tt>3j>pq+^(ocTKZ>J|L*BBe$0!Zq5ukhH;)yu?b_ zhdfn-0Z|#?9aBc1QsTM;>bY_Zw#LykPC@`e#i_V0uV3vX!_H`c8>@qn9uRjV&15Dh zE#}VYdvm`&n$8!lSeCL0P`Qxll81Ab3qyw?@#agjbJ16EZ-ly?`|R`zucUhIwv+g5MN#x&F21jAGEV-z?z z?#O08tO5apWeF~$>dgHa6^+hD_W%-_PHdBS_EJ$6=$5a-iqh<6%~_Mz?ejvo==k?O z0Y+LxhUX&@pXOmWSB+8U-g(|a!=#*L;-B)QcYOTcf?G7rA3drY$H!oiSrR~bOJGRS z2&Xy*t3iwu39~E^=?ClPK zJw4~@!%eU;MADzx8Ga1p1bKsrfemyAp_Tbpz%lc1ft02l!`jy?P0ScODxt;%vI(|3 zpYZ}TL4aJrv&g}pGL8z(#@eETPR7W1m1@wwgr@|RFm;-^ZLGVevd zPvgwLLc+c~i+%o-O%|ED;XPP(9$xoLd8ah7?*D60q2C}}gn@&?QK}IH!W_kaF3k)to_5Q{y+4a(^z?nUBZ9lU zz5Ookw9Utc#>emsqgrqIo7G4r%VraI#a(anz867=Vc7g`A#`?j*g+5@`}z7+D{R4S zsa$6$H3`_*dRzU>OeyBY{#lHLQc$hVZ`q;WK-RK1eFsc?_b#Z$^F0VZJlxy4lvGw) zH>45y2l|stnFpw_xnq48kzaCsX#a2BCuq#618V8|#EX=JLzt4cefOJT{oh;eSQ8*j$`P%kJLNO(r--HqEz82FrS57UoMXKwR_QXe9mnBxQKL`CR3n z;PNb7kx`>(Nw7sOVEkf&3Lxe4mA2FW@~4aWLY1`Api4ceQdT+c*`KH|NdJCOr6NOPQxnXu?wDr zzogzoa&*X{I1EDd>C1Va2a~4{{x_t7*}BhUvo``a)_ZKYOR%xabh+p~Z#F2|QJX2( z%!74p3u{STmPfoy9iU$=-=C^FD9#&4>3W0L{?p#}}bO>u7+LM}}<%YLs$=tc; z_>21aM8HdEuoul{ze3=&Kka5??}ZmxFZ##OIY$jzWn$!-cu&zB%9qQ#zT1ZluGqFS z!$TfxOyH1=2l}A5$NTJo)E}oV%1W*X5gXxHMC!rj=z9~K7QK24UQTaVbhI?#OuJ73tx~|EKpQ1&CM!?ij!PR)Z%-&ob(fzqD3!diMckgPlShCzmPe(FN-7pEg~{HvJoN)w#O}@H8?IGB7Bq0+i_LXA* z-|hrHgx~g<-+xkvXbZh}L(IcM+M9oVNqcaNrU)eXN11fT-{wDjd^qG`wc>KKVmFG$ zGP#$Kqee1`GnOsqbF~}tzVCJ>pl=(=CaEov_6s!URVgVIna5Bf^X>84S70PjKI%_lwoV@G#K4KP9Q?tvs^=-PSx-Oa-YD zv1;#9rSUk?b3}e)k{Zo)GmZE5q@{S~+#U}3Uu3+o^t!j$>>d960*S$gYI;jeE#2Ki z*>Pa-yhKarQ8N4si|Xa;vMYO3Y@+w|$3^;dKD*u$6^Fx`O$VTT($87Qle^)XG#WC$ z(4K$!JCtOnT^}IcpSBfyNyH7ECTPiY?sKueniDjh?IQQ#`H3@@K^`??>4v1#5_avJ zgoPLPTi3U!H9L}?wH_+1qrVxV5gTX7GI~c%Xh;|s2^xHVkJs0ACdLAEc=)!6^s&CT zryiL4fI3fmGg|v%>lY*| zM;%t8FFhH3&pv-4e-Rf2x;$>;p zxx=fX>tCWW&!Ia~1e^6*UV$o(``#ZFo$vTx7}BP`V4$AjhgskA7OLc+1D+WzkL^2S zr2R*6rUcKu`z$pQLbWwn@AA3Te?p@WBm|6QBX$x}26PQgvv9ser?sqiPP$8L>qrKH z9Y_DMLljw2bsWD__34e@vn$s*z{;-u9g*P|PLjR(dn6mK;+zZPTAi_djA-wemos^K zv%Wf3siR?H%BrpX609c@z8@1_AR6Dy4i04V{@&l|Uus`Ep#NI7x3cXFtNB0PA%~p8 z4$d^(Mg{|kKII)#J<>nr$i(+S{r%S8Gx!2br!~9A^J(AWOMFWAm@qEyRb+?$ns=cT?s!SnkfsPK%SRJuH^zp zNGg4PKa`Q;aq7bBT&D?pxLAi0k>CmC=XUuucbtwUn!g^Ah-?j|YNLe~|HNE5yzZnO zv7pDFFXKpPFZzZAthOC4Mt;FfS_HpA@9yoD_>w_UT549WjC#90OFUlqA7A1S0xCYY z^W4vwnSIeQWl-5?;v+kd#!yNgO_s=1oC$-Y0c1J7jcfl&lX>y=2L?pHaYD$*MAcm# zb$_NP0GNB=Blw=b02k6{3neuDE^fY4m)2+%JFe8q6#9v+o_FtjPk&iAsB1#o7mJ&8 zf1wUK%RO508v$7SWGq(4e5N%H>tME2ww&M%clo*Q@)h5hYZur(cQ;|S~CGw zne<2HwnvTkbU&3B2q%POFd))0$lAHH=nZnw>vr5@)#7sQ9;Yb0iqHQY&fnnk#=01w zr>_L|(HajFBM@86OBoXq*Iv^K*c5bunpOqK&ypPlXf z2ju*RS!ljQ5x=^uk{M3Zsls)MWv3})-SCX+7~nQ{a6Z6mKXze`(N3eW8dc{VYE!XNtlNVkuxrJL>n@}k&ajY#a80OCHLjr#Npoh0VPBun8^D zGh0#({5&O7PVdtJr}SvrY`U~{9x+E}Zz8Ut=5iSqio3Z?cn3M*L&M|&j5sqx1tCYw zTT&b{g6WC~zGkP5bQUMQi};(L4PwmXJjyYqZ%-BvWHAcyOSPOj&FkK*nURX}cZ5h) z@Lp+ONS0UBUDbdutwvDw$VGeE#X4|_9m)``Y1s0svoVsobb|LOFy&*qF(90sRaHy> z?3&iE6Z5*b{>V+j!GJT$`#=ZuTt0=5!v5BSe%cjpb@WE5B#u+f;NDoPW8v9mv}<$Z zOQ)fhEc@4$%ubc7)a+1tput8=w`e2-dyyfU=24rz-IUo`zP*ueCjLJyfQEab10!EQ>45;qs}nfyH~`r(E^Q=D$KCME550-X>s1EL`pD_Fm3wlWUSaGY{vV8IJUk z=f+pbCI(h4ngb2U7lI!N4Byh-qk>a7O3SVB=cW z!L4!OTCO0+F8m|UTgJ9iTT}G3RS{+?SBSf|2T?umP!eaZrQr^+Oi=JcDtO*>H_ zwb_e%(P;b?e9X*5ip`(uC@Cqsa7+`VxM-Cj7B64|=DaUX^Vemp@INxi)Gzqu`mU=X zv}9@Xg-^$hn@jUw?n=!qGr1Wjgigk5SRLIP(1b&Axi6mG)My1j0@NzvsPVp1HrPlE z`(yxwYI#EO%$&__e>=tf^+$i;M!$z%{;bOg1Br@4ia>&IAyU@)E-MQ|=ZNynE}w*k9)WpQ7LY=*(kPZ9MJ%FZs9o7p(yr)pRMCFYGe4|ms4G^r49BR%airQzYd;9G z^f@$zMjK;i!l0X!UwJ5lzZ{%yN?C_==-%c4@sPI@J5GfeFRqdmU~sX54Sr%Vn6@4b)o^1 zfdTA#YjxhiQorY60_-P5=ouIoUi2dP>kf9cJe%7+7Jma6PYkAfsbVvP?g5n_z_Cck zrzrjLV6m5%&`Ag9zYQgFnQ;eV5F+Oc_=6;=9MBeiA`p^I9UY8peXHr`diwXT#p#zx z30sDtgcqgedl)$r`bYz#OyVYZ-$fXF=$zz}rO&kGzc^lCR|y}vQQf8EX8ix${Ulq* z)>c|~#0sN?1;gE7$FhYEeGa`Lh>h`NKHA1RS^p=7aUSG7XYrQ0weE2}rlcVWiji*i zF2DDppBCz^LWw;eaWIy=MsG4an|6~xJW?OrP5*9b$s~B2y^FgSNyPLoTWu9>&rR;j z3l-XPl~FK|As_KgII@S-ppYQxk47r~sKts)mYjNkJz%_=MZb2TdmmKai>T6WzzvGSQ2%sDO0D6b{sWC<>ESv_sOhn{9{qHbnp0b4q5KjfscFf<0mw7tX z5>)|#fk1%t2G|Y~yxrDt5olQSX~7M*p`|5oxDR>h{QcziDjVmzyr% zqkZ5yM@%nQws}dH;Rmy;fb?K-7g+vc*n2c4Q$rb*R@Y$+05rbdkdxu{OJZFWk*&P`CQykK5SVcg=Ygk8Mv(^DURjTk&GlKBx{-zHYj{=r-*;M6~myIrI zJH95flcfWdxMAOaFYc$RB*U~ai&F?Nt|Tf9&L^La{?)p=l&K{nKrTz)Kn_R8 zz_e{BjYkHlj*!#57pz<`-e#df+2?#M5=!T{k=W~K#s;8NGS8Py+**qV1YOJpwQT=o+`2%wJwa*=e7=et!6;bG!uaJ&Ni#PG@d!+IRsSMiV*O4jbfM z-FFb5A^Q6<+$h6MRkfJIV&Q#_;qa+hM^L{^{g1dz%(cCxi?7psmn5lh_Y})NQH&&o9mG1Bb8EM9jQ?vLJf zMkD`TD56hJ_OG{<9>&YmsB&}3Gi5SXtfUf|{yaFep*`6r)q-hM65Cq%?QMTl&I1N9 zhplArJ16by(!2hIdJ=^Xaw>&OU$MsWCJ9n%Fo%+4IB%`bw`_Q|^4^VPM0Cc;@CO4- z)BXHG@%v%2tuGSaqR~pqH4!ffnM3Zm{N`a)f!y^18*OUxpc(PP!+6$_8Y9g+Ju%T6 zm>4AwOuJt8^xkbK?U}q$aQE5GXDEZUW zI67sH)C>@7>Cd0m=!X}993{e?p|pS`)`A+18mo(ZhiS8^!n0?z2JENUq{`P1o@pig z9s*P`XJS3bqeq;0LpwH`R5`YJxRJ53-zawEJshGp`W=nL!qd6!3?IewO%uvLR@(eU z*cwPd1nZs)Ck;LRA+(a76S6HW>O*=1!l*jpHX;}7Dn{w0 zVUy1P24eKOos=1|QtcYKISHtP=aabn%Jph=84p~No_dGLMKweMo-NKv&Br{6v0ME- z`Vg_H5;bBQ8*wIr_pl23ctRHaX*~5As74|Z649~w{(%e3?%mo$sm!pAw!2**iRcVu zupqsq48SNF*hf6AZ32!3R(AFKpqgLsEbpSmzbmll)*w1+qg<=C;AOJD42!J*5$qTU zVF^BOy_%6{vs_Y_P|_gkDH?}bhC-1}W&0qpJ%XTajQ<94^LO6>9S7h{{d_QY4wsy1M<$Uc4^Ax_81lvQpe zt~HWk%W~Utfh?;k07!40Dl~_F>z&6^LsnW@-@TI;rDz@wiG9Cc$68Qs34Z?ndvFc@ z!QgLq!U`SjsT?QWSF7Ew*Gh>d6ZtpY)JC(vGXWUAUqD$0qBHs_U+#8GK5=ss;G}4z z!px+bd5q0-OmALtnu7qZuO9+M!U@+dlQx|<2KxAyD=nq!3JVKw)tnFRm5j7Oi|c2t zdh5<_w(N?AW3_avnPbX0+ZEaQmx6aB=r@nKi?)==o{=SsadbH4UZ}L7*UJ;V@$|ie zGq0un@e=-KZ#b4nvlv(Y&N_CM^y|M4bx)zei2^rr#)c_#pk|$gH|X%NkmC5sg0MP!dUVF_Gn+par?K$4bECXG zyTJ`7bBee>aV7!5 zV!nNg5VYC;G;;Ofo}R$`$;>Jd9_H`Pf?Z6nwbIeIn)58ve(WN8dYbjwNG7J2;dasODLvNQ@zqN47qJeMiA{-ul(Th(g%JAUG?i-i+a3MJIf5+iFG&HrF9Q#*R)Ullr|()q&Y+<@ouhjKp1sq|cr`$YUxIL?DX~pfaiq z4h*+OGcW+6h*=_`O^#nw_5%isdR_YNx%NX62xUXu^B-e82%(SEB&UodJJ)Ixn>iMa zM1bsJpS;hknOs05HjglpQ+jW(<;2-rt@eEf2@Z_cRyA5&iyl~ot6 zt295-4Fb~A-K8LnfOL0*ba#W&(%s!9-5}lF-Q5j)vd7tDoGb2t?^|ol^}bJDOm@q$ zzpf4$>8xeEpZj~v=P&A?vUt5;7EeT_eiK4Ni1Hl9F$~zERaSZJW$b4#JoeBixLdCN z+RXnAQuonn57|+W`D%apM%ae0_a)QR9p$(<^CIDVJ6xuAx%`FR3(sV^{BT{MSPX-P zF8}Qz7M25MAG;NyT=sUX+_L-12{r^8g72(-*vyqtdHt@W1u8FKX_Ax4?4wGw#FskV zouS0vWaf;&w+_MWLqz~6eEM>l*lp=i4M=->sv;NyYfiNBN_klK+vVBM4!Z~W1J{Nm%=br=+<=w*|19D8UavRgbEz!I5_;rWx1k$nDTcgp+ z2U6RpH{7{|%LW&^;N1U>v+I~CI+}*VVpMX}O!X|mUfiRHNi`n=LRF17_hU<~jypfP z{8KwNh3Q)$bj72RUN%nZEra{%zYS(u-Sy6Z;NR5V1d9TK9lpXktO;xOjqC4Ip%nlA zV=wU`F07)rrh7OFRFJtU<2IfFrTZ~zi?76H@(=~ z#5~)HDP&A6Az2<6F?WwtrA%UQB1{YH|xW2(I= zX+|;Z>K5gYhQ)v2rQ0np)W+HdzH5cy&pzHG!{!f9_W}O~7rfJcl=9xQ{x{@PU#|iR zNw8Nxa(e%k5%8NnEyEN{nMNbg#6dKYKTwN|N$>?^O)Q6TlcBT!I!Lzd-J37Q=hcF3 zbU0?;F0G@unxfRPRs-w#+DGh$q6P#k2g^&5L(?9~nC>H0yGQ{qVjM&)D(y?x4}w~{ z;VH|JV%GY7%diJEkW}GhtY%XvpgD~EH%0>@NPdqd;2xaG2`lXMrMuD#?9?`j2Q0c5W#b4_0l@6nq3J zNU)&Pj)Y)#&M?XyFPZL}?YDWn&v)X#Vhm~!GSIsdMUfHe z2D_x*?#lQ@pH`1Yo$cS4a0tk;3zJ~U zi!+thSdn?$VsL2n@%l83U~$!tulvv0c6_>W^XtoF+w}i`Dc%BU3~~n)`JW!kyK-TX z@Io6M4!Smt;KrfSbFj;=O=e!+-R!XOBsL%Zc6e+;y*^ zfRT^Lb6E&^Lp(!!!H_nR-HV0#yX5Qo(OxDj^D_C8G=JDAo$V-yHtIZ>E{>vMMrOB| z^L{*W`_foA?q-aX>OEqTO4{QG%3^&nD<{Geb)AY);o*13vkc{*9!It7PhXlq(sbSJ zc5ra;X*0V=q)?RafLTRAk)1{ly2f=xEWyp}CxqMp zdmh^VD?aa?CgefNRw``x-#E$L7Y+YBsRLv1$~ptdn;XA+)6sNhRi5!sN4B@{bo>U= zdl7yp%}>C(1!DqfIvcm6S&+X!PVXrhDY@28(D$t+a%R9}a9i7Nnr=(Hg`nq#q63!dl8y>Zm9A70--9V8{xoTPF) zIMd`0SCrVdf!E2s$xkrcJcDVm1s{vhRHM-V`ZrdCCLS&0)=1BQ39B~*3)#P4+!#bA zMEEq$hC$19R@$Jn6Nj)4-+ZP_7+idC%&m#ph=KD3DVU?7T~&zrVE8%=s>9m&~c(#xdC;WVEE*~WPPD=TsYa{mO&88hKT?~M-SFdTaFQ<4>^=0JkB+BlN6wKUx9g(M?Z`+7F){H4$ow3K0D&Lf%TB9))5WtS z%*<#?#hM4h@OK#Tne7UKf`5P-PxO2(jQ^Wx`nRC)pXax$ZR}OmX;y>-@uL|C z15oD}06+%T2|wG*Rk z|K(}FpIrj4gdo+B&HCYrY6;Z3&oy3qV9;y8Rqmn(u-X--=tm}twDB%O6tYe258xg{kT!TuTnML*UKRw2&m-CsT@OknDlcl$6o}Y|(X91v zD8F??gvRo}Fnn#xrGk5rx z3VeMjXwG*!ekvFM&Ggov-PD*Kmtv9jRCQ>xv$I2DytaNtyz;x(54FDtjn~_-boY{n zOhiv^$9eV+#iNg@R^{QbSXbJG*l&VDhFpP%!f47LFXN)ZyPERBEO;@Wdt!<9LG?7+ za_pkCm$4BY%3dX)Xs>oh#IV?_SBWgrmAh49MU^2~2tV>TN`1?jW3N@KO>*8%bs{UF zw{WgjRM?&h?DYoKbyTXGTs78Bqr07LqOTq1_tP#r*oB%0N#z&Z0Q$cKb!_gnRZz1)vcB`f{AyU2$X&=D|7X06V))hciEO! z>=DiDd1AgOXnk>W@tDY=0{M`M5~KI-*4!F`Nt@N9d;jh)ZN#L+uo$%W+wAmp-Xdv% zE}Ic$Dd+<}t9y5aZdci<*nx2qDj3tBMO3a~QtZIQcD&-8eSNecEU7z^a{pPW26Pt6 z>HIBVFQC=dPgFB0AizSvrzr@UJa+uO%Ww7a@#=II*}{(3pbrJUi6?c*I{*87)pzSw z%Qxw6^%BAj_&Si!F^$kM#{GNIN~xIx9Fs)K*bW1Yj)+p?V?qG(07lx_gE+x}|8(Ej zX1Sc;$W7m{u5lih6=TI7B zSEd1bMaw(`@;x70WO!fpJkw`Ca@lU-D0rM3!e@76Bo$XU#z1lU*7amHW9^K?ACTn{ z@?T&VDVK*Q*cp=_wF1TV)^M_Nj!vzx+_Rq4&kpBIQy^0$ktbKzGSV^K4j`*X*v*Y& z8KufKzpB}{i9QqgB4D$DL#u9!j(-Q#g=PPJ7zm= zYin7cK}^bUD)&UQb!z;4J@AiqN{d~*lFjgDBe{*-3fo#yA zE|<(8(58cxh|0CgJXt-*00X3U^(h;f=>DpI2c9_6U8*Kbydt?e<}~#YcIsBYMw#OWg6iuL4Z-z`8DT^+2|1OnnV5=jX7PL27 z-YT}z0TpnC?vR0Vxun?0um=3jfOnEOQuG^lIKHZg2op3<(Uw{}n%y+R(NB2R4=1<@n5H8UtR#pgOYu zN)pi(A!q*+6ojje3SUdfVXoPv--~1U1q8$MQYEiq?$X`T&EYI^$f_#!>uQB=G@KYY z1vND1e|?`PimNy-_kgbmVo&bED08C;AFMMXr~G{WZj-G-O#rEsIkk_CFKK(mdfS!M zO`go}4}NW~9<4T6oiZ7oQ2QlT?|iaKBN3CZAs(`fkHjNdaKFF2Gt^Av*hE@^Y?>x< zxq^gk73>Nu|HMRv3aa=1HA5q8t>?MM{LLuR>i_*M8-7${u=XH*oX*+>At!19qGdd^ zW}dB_H~;-ZPd2KSSHV(XS5So5F;^``n(Kint!AT!oVEQxkCtZxT-EZu1^S+N%w}Nf zsiY0rClY21Frl@VX%hYM+I(=n4aZI^zFRsOjL3Wm*Qo>uYX>u$vNHhyjFyEM6iXWq zpYAWCZYI+OytQ~u4_)6_%gCB(4 zY@aD)(n!oAw|b>gSmDV=(E1w4;7n&$DH1cCe7WFlwuoedeBW6iGi~1e@)DNXIck`! zKW%kueKr^^li+T8J`mYbY6EFD>UetWh!E zaTM$zK-n{|!0!>3<7XY4thq^bdV)GBs3k%U;9U#@AjjI%eYb+me`z$lOM#$l?VYO* zysY#mT+QvsJ*&|e=$Ifv95tk&MA*1u)6+q5!iU`NgR%{%#-k$HK;m`xSl%X^wRNo0 z;>z|Lvt@bIJxK1)WyL>@_wHbu|F#XcBSJbjs{w~lr`t1-o51VB%d15RgGk6|(_NA2 z!OT|k5M2&^LyWJ7ZJWMJL34c~7{tDmM0$NC~< zYwM|GvvVpTAS7M$?kj~y0be$fw~yU-kRu_l5ImbqJWzdi>qLY*a__DOB<)om;R-~ zZkj0I)#}aWbOlDt&XLq~JpjP~J{DOPl*X2*R>KH~U|^qWBkbBSO)oGUc&9;A%0y~b z#cggILdWH6(rTxn4^B))YR<8IJ<>TNVZY%8HmBdC{EH0Di9I3lYy0`>aazb^b#fQ6 zLyizUJgilxTpX`kLdCmtG>09TLaP}bLF{5uzk4P}d0X6eMTwdX7;)r$EgJXY?Qq`? zE9m@Sa9FYaTyWq2jd{urEI&*zS41hU*cg$rXpthQDSfdtf^3?M)ofXkj@L1cPxtXe zKXN57`_n6B9^ObG(5Q%gZezo!PP?&uy4-|ahe-`+W~>xa)$Ko!@A zEXd})cP%3Lpw)c4Vgw@Eq*RVZ!8=;9cqLY;Km)eEgAzCV2MTJYEjOwiy;5H_MYK|> zNYbbO(*lJ5M?5o}$bv2zNAEj(*bap3YV2lHI^s%+LJtmks^H9`<;I^WT~w&H$^M70 zQ-P;ks^JIvwuGAPYtfCrnVRSmN&J(+3^W`DZi)*0OZq*28rHE^3Sneaj z3;>NIpsDZ$;>r>`S6@*@L0#;M(G4q=wQjA70gG_f8Fva}HazrTsQOU@eS=DMk3X+F zrVrtLeEDRTk-~Q|bH}Ef(L1T=DT*XiEo>la2?vJ2F0)!);4?0`u|;%wQKar7TXzhc zpJ$K##_76eS=Z~upTD)Hudjb5QmkxqcXnETStjRo{AeK)0FZw4I-SNn?L_gn3ndP@ zQWTL6x-Oaz5T^O>*Yj6j%fBZ(Iv-EZ8ZxbQ4Kng{nY-Ts8GLaL!7@l4-|p;S<+M9; zO_kPR@l3kn{JCpOp(_i4}GJZ7T?}@IrijR$8umX;EE-z;iZrvGvjoTvBkQ zaFaf3pROJlF)o__;65GzZalHq7eFBgEzvQ3QH?)Hd z%H`ljA$AKuVuqT%^8m9&9_Jy@xUFn`(tzsu2j0X1;!tHT9 zsQH~gsae@V@T7B@)^Ekzk)K`Q=85=sCDNL*{*)iytp^&~yN%1y?PuT_`7_)wbE^^E zO`c&_-5%x%LKfFp`i;EPIg$(4(|prf8g*Y^WKd9X)6Ukz2^0yvo^&1Lp8IUy0QEsc z)dgs;%VFeOCD*cx)|~Dbjm>}GBk3hS_B=q01lC~0DiF@jok@TwxIwPf)0z`fvKxf2d zGJ8oIHh{c$cMqNPcOd5g;F~24o|k#G-#@_kk*e&3c@iia17fLsMC^8lkM#(d)j z(wsM#qI_ayTMh*sf6C&1X-mkc`QmCl65NtTaqOyV7u$|M0JbGL9g+9uv3T;tHajEt zM`j*aoumqInh2w_<=V)Pw_ZpQiy>6aO=0&={7oY8%a;zWk7~Ho zswYMv?>8w!JCoRGbgPpIij~Sul$u1sYQJ(7UWGK0fTzb(*yz6%4v(`AQAMC!YU#14 zN-`Qv1EC;9m?+XVjRu)xSOL5)w&MKKSSZo&=^5bJMHq#9Bi#VoVfeK`yNw?RqNueX zoUVrY4W0Dl&cZFvwCA@kmQr}|-1xE|Y$3uOx4K>axl!zgB_B=&iiu?Z&f`kGcw&|_ zVlCw5ZaIjhQO^9HJY${1dDafOU12tD*572lgiGABAhc~)!_ZV3B~OY^R*r}KXYb|i zQrZ4w0)`SOQYq72!A*H{;v&tUi11>3BBxvc={iFw08w)suv>ikbheo)GgGLD3?`O1 z-o}m`TVssiO}+Lc`<;p0*Q8leTBn_H55jm_3b5{X<%Qw*;4L~GwWG`MzHeF%jM=KW zDdMu}7~YuN%+vN1k#ZQupRM@-F}>Q?y%QzB8yAP2{}Zmg!A_Kfm{^?GzL3<32Wm=j zB>BTF)SLbw{b(LCyFawh>bofT`_L7*BF3$nwx^c41RYCUvFofn=wr2gz0LR4Oja-U zDnEHgV}R?iF4b<5GV~ zr*S%z0*0F=N93fs5w-nxQoc#PCdd{nvt5sgE()8UXKOwnETU~J$CQ+~6$n`dE_-)v zHvb`Bq%@{T$2_(LRp{NDfsIr9UHa*Ip7%%fd&bk+Nbk(MpK-AYJe1Fz{`)y+%_=#C_`UL9k1I(wKO)tSq^42=YQL~+y zy-Jk;DdK3OLCn^Ph%nQ3Uj)6y-q`GzhR73bt6sJOBM{#k8evEBE;U3<;x}N)g$HC@ zpRShB(WA*|%Uv|Tnty!mv;|Cg@*=Ir5Q@ zR$3kl(0WeWeeXk1@z8vLQ?q^v%F3*Q=9AHKVb6eY!Uj5&YjHYevhQ2&nedM!1^TXj0pRbIPIrfC_%9MES$`D$2|PZscz4en5?<@j94?-XK4YG^@SQd zXvZ|R+!>%?7Csg|*c8E0XsOm5+x7Z{c%_k)9Jk?eD+=isl)-;r$9cT&qC_h!k4035 zGB4cSc)C*g$Q7XueC607DGob?h4+n|7*ywbltB#fk(Zj>K6V(~Lt`A~!Wf+`+kqEx3@1fPr|XZe5Cb}W|ca1loH z7d^o4nef!+)yDr8BgOP7e~zbVH6LV&n)rh&%k4VVR|)wWy9x5Nxf-K^_6&Xhi%pS@%V>gc7YiXCEYl6Jvx>z|#aam! zoFzg>wUDn(H>Cj2_9C%b>8l2NZ5fCrPSm#bEw$_912c7)$bDZFsgpv9?EWT58jd|0 zYenF8IQpG%3I9@&4<($tOk!tZP;V|*G3B(I$(mhS<$ZO!D#Oj}a5|0|O&K9%Z(pJ} zhDTRban?e1$aqvnG(QUg`n%eQ9eU)D-8CQEAlyBEHB23iu?uZ{O_mA{;bABWyGpwc z4e*~k2YND4l!3?Tae$HaA4WHD9>3+pkdP66u&mU2g zsJG#vQ-u1=?uyLPry74xbdwt)2WqDTVl< zet*;8&cY`sPQs^@!F_3HJ2VxxS~0*p?T)011ce`;A6l(un~alC-g-737NU_$JUKWh zm$dODyuq)G5hH9Gi>Ga`T15kw3?8;utMUO&4u?Mfz9)6<=3?jei641M>3!%(eyul= zMT&!Mu`8`c|HTE~UL6f~#y?tI5rIw*J1Qzl?j-M*j>$yDtaajpXjKCAgxikkHx6>8 z9JlRR_Kd3`)iNw1A{qggGd8n2`6?F>5CHnDDxKFrj8D*T#SGW4h39CFZu4rjkzAG_{nOA{+ISpomSR&Gw$7^S%A>ry|86Qj%u}>?D zR-+w<<#pfm(#G~A3u7_kEpMm3^Csp3Pq6v>axqd@oHfj1!uk6^)68f zhodn9;8_*c^X(#eQ(C=x3pBP|W&Cba+?Y0FY5U_ALqxLiOE{&XxmPQ-WevRnRzqrxVgdq&6Y6|!R|kBBDwPun><-+(2Te|H zY|w1$B=e638_Jhk+~x|&`HbylQ*f9$0Zb#=-;!iVQ+T zhSjeEcsMBqMI6?!T_>=O3u)SClP{P0qH>Lz@^(K_(N=%$%YVE*#YV-Q$zoCaYunRQ z57IBmyGL%%?_+jHdk}q8ZFdy{vhznir9>)q&4sfO=8vX)0kPYFCS&4#n9J6-TByI- zUbJjF9tvv)2wvU4H%SX#)9RTOpC>Q9S7{Q1YNnlO}l8>%)eMAUxb0hrEY`38t;~pLx!7 z9IoDd9TiEBk1M$BX=OZrw9+{d`@$Z6gF4kuKE_fd)*HENuF@#>%AlyH>Bel8_tE|`8ya%WGJrfF$q z*zj8JE{dOl#)Uvb8unnOyxL(oX}T5>#!t)KHT56EoHPLHE5iC5nhC)IRIYKK3%VRn z3N;!gLV%IdH>TbiRcF*b@Inb z7Lnf~9*fIc(MU9o?k_*vFaA`iv92^}sxC{}6ePym|8;T>?`_A@-ZsudS)E!QMSSYW zqg$IeR%)0BqZ<&O1X5 zXEva_F#uZ&>(gwX1=%p8mo)O%!@?oxK)F9je`}_VqQ=~J>5nVTwk7-n1N6qTpiRay z2+`0}vEMylYR0_e0bfnXd)Eixr`L#noPLpsV937JDo0F0+KVSNgJ4K!nfXP;YEO)#ixS()cDf)Rqs&hMqU!Nf*0YiL_yL?01zhZ;BBAXdBwptsee1A#l%M8z7`u6J&fgd< zo)#DKqi$(4sJlC7TUDtnJY!a7!=1R{4xnlY10~KIfGEfqTFynXTB$4)Ow=4{f&|IgQ2A$A;OBrHIxK87u3gKiELLn1OB3KBQpQ7*vGTk6 zQ@pS`X@^mBlk4Mh9?E+j;=#|e__DKRS z4$AZsK~R~i!{~bEzCEzG>g6TxkP7EyXVg{tf<-W9bq%+ab1L9+VW1MSQ*QOvE*?v* zf|BIO29UU&52{npF1pOZvzf`h+r8U8e_n&7m4Wr@A^i-iMfL0nH+b{jB zR`MB(J|)69&1D36i*UawEoMu(^`ZdpI_1B;c>EP}X!qmhq;RJUV?yVVp|n@q+49%t z3GXrk%}sz<=j1fZQTnW~iCep`Y;2;%;w>p_!&B9Q#0HQinN`EL4WqsZo_(Q8ej4yR)dV9pDFJ3>7hi<;srX9a#2v}5$5S4kaL`M3hZ6nxTOKD(tNDwwide)PL@k0gzFGOw!ONQjrUP8CM zYOviaFyVaYS9XDXSgfvidonxyoao{`H@>+~g)s0o?T+0BofHD}8C3Tnfqn}TD%08p z5PnD=Va$r>Um|3x5;v3ZB3d(!MG3;)eGLX>5;$SNmgIfum1|8Z8YT$xT6(&4oTEbi z^ysymF+-Zoly5&&cNx?C7>q#uZ*qbXHwK+){8RCaMbW^=`xzZcVfaHx#D_tIAWX-U; zb<~KHLBqIf*I9%4o?H9H`sr%&)Z{H@k<0qa!SLaXsW-sK3hm?5-|dRo{Eqzan8d<5 zYND*?dofaYUB)J>*FB`iuJgK^o~2x_)#>E2v!7qr#^dF(xkPT;yR^qMJ4*Eb#O7Oh z8b73@Kvfgl!Os_iQ)5i9d4N+>24nOcsE^!wVU>v{c6R;vB*2IE*R?sV*Xyum8p64f zly5E1YjvA%Npe?~P2KcQ@&0H!p^3vCF*hmHSP66RlZ#kw zIHMVjuBe&`LW;ePr?4THH3yhzI z{e22pYo&SJ=4n+Fdw#KMRjO4UEN>_9|NQTdJla^jO|&A760OIy4&&Y7JhPY818!B? z+ezxG@2FWmw|f~-<6b(PLVikXs?}(ZE0xTRUbm_x!I~9&TcohMhsl^uh&SNQ-6EIm z{E5F_UR;2ze|rR-s=FQt-})UKK{}OC;0M$IT4ra}^pQ~(N->?b@pq05+-L3F$5%&} zU%t$~+-OH=y6o+LOWVqi&Yy^7n@TO1{V^-BVkX)e7d)shIQYw7;vL*V*=>qOi1lL!olMDW>JwL&Z3iHGAYPM@B|| zhG4$x-rU?o!83w2A6_Pe1)ha$tJRgemq)880k5>VSep3RGC5&}AA_cL4B3yPW2irOoLFTLINR+ zp3*l+zRnfOckeM@CVjD1y)G^KJ4J};T?J}^e9-gA<};U_m02_#y-rD#p-B|6h_E#a z2|uxPpWW4xi|n(*+1gi?Mg#aEtYT+MKbV_-&L_Ua?{g8k&mI1FzH#Qxl zt40PwEg6K;%j*Burb#jG5+#3rq_2D5UqW{^x~hR7#vwT374n0-GQXvBLQf7?bQa`%uUD*+lmLv;fe>Z(Gz%R0H%Zkl_QJ(3Pv*!&Mzm)#1Y3 z`Q~{$By!G7uHE}AmJa9;LT)|>LW2&Pe@!xQU)A=a9FEAKK)nJsXwMWBGx-dIgcAx} zgW`Q!0ZR2Xr!%6%eJA6P5QY!*uAN)<`-gDcD+{P8{m3t zy~4);jGV6uDk0Vu+=;7GVYN3?&Rk>u3F-No zHFjP|UvqroC&tp%C7x^9)&GDq1}kmMJRtCJrhIDUQ687ZF}tgq0Y2dDZWlC`j)&`X zQ7s1n@7?kw@C@_X8~8T=41rz?Q7 z_%pS=LakmMJG~N8(7%h8xi6pl=R*kg`Bp-`H81m69$dKO7J7IOSR;79<4|VreG&2Y zTxTn4d@>gRq8-OY&3;M-w%6uAYPL=ATbUJVbRYpB(0>MghvcJtUD_3AaA;o`SlhR_ z^wLu7zSL8N{(Z#UP+1Y*H~e1wRk-2<3HIY|dRx}_#hKt=Tww(e_am0CI&RZJgsxvs zvmD8V68u)86JyC>6RC`s4>E;<2u-}|AUrb)J^aGxI8NRuG9 zIH(6J&YfbU>+(m1pgXMI%d@UMH`wlA?I)hDv><>PTm<|Cn;`z*7Y&WsDck62Szog(%O!f-6VM7=H{&Z^vY3juz z=`wwjRXxRf6S>LnxcZwF{^;{@i`x5O21oOc+J3&_=BYu=X<#HL>lVLD4Rvxf zCABH|xi|xIB%$<1(l4!WcqevMqkeywaQH2ybDVOVqRGFYTTM$xQdxFD7CO?zk%XOtub^rv}KX+eSh zArL7fzG^v$MS9)U(MboX);mMERJ&6-uZ8Nqa08IJOy*aJn$CEZaCzO&Nt?fu+f~fBn#D#0=LteWUESGO3CGfZ z@5$e}s(jK%PED50i%nqP$cr7aQ}QseEvu~D1!`(IP^^Wv&nfm-E&E>>6R3D{q2TnY zRVsiPx0J<0l1S+fxnzPrbG`q7yUkM*j3v3sxf_H?5K4F2M%mW(q81{IfYrMEPlvI- zyqDl`x6kuU;PDu?@6bdFa6vpav!RR*zaXS))ngoH101a)weQU)rj=%lU7PY`T&`PJ zT62ltqrBWV`mKLRiYZ*z@ZuyHA5Md47QGJNh6}YxqwkD1od&ONd)EbyQDiu|IiD}a zV&65M{M4??9QC0bz!}3tU*11uEEu2_zab;O0{(LxUS~#-asOYo`0zd8z;!`$RMq-) zmdaIkzW{MXKGk3)D;+LXzw~>130BmjLYVw0;r#Dz2*pZe-d(Yw*xCgb>kB=D$s$Ww zHWaW(;huxaCU0VoF(*5Dgtk*Xwz7FPVkG$Xp zEKc9<$v@ftoqYAQL9o^u$KU16d1C51Vo$~dqqE@a%kw!9(oC529NT6~&X(=1T4gkA z7jK}1IlgLOv2mtF{pAe03v0S(MJB0@KWJ<+kqCQbTU}RSC+d%@s2e#3a z%fw-gx#r+Z_q;?gU;SDjyTklq>~)F!*9!eSAty&Arg1aeYgMzQ`Gz!t_hML4tMTRL zDR=HUx)pGzvZ|juNk5&G z98s)0?M%(nEK}K5(%wG31X&5su<^fq{Ef+gR;_nG(TGW-v{V`qY3W1rrpQ&+BY)=8 z^XUpgUR|ls-DHDB`siFQwyuZ6X2weBx+i{~x9+D-riV&`+JZ^A1!=l2**d#U zRyjgvXmvCpVmb$WdcS)+-95m4BZu38jqe*Oc)(q7h|X?@B?f6XlSmWz=pvQMtynWZ z+S?76pRKUp1O{asg+e)DmnDA3&oy1^ry2iHnnYm8x#%e;*U3XVqJmYzA zfy1`v3{?n)zykvMznzF=HapkqhwH;=)O?WiQr7n-S&2%#;xNUE#Jdhe1Y`RmkyC8r zrZmVCLL~nkA9F_Hqb@PeOL#6<-v_LclFjz6M-%lu+ka%6rmmA>O<=$B%cSv6$fOeF zfNt@~iU9Q*6XH+WIbu;$BJ@SdH3PGkZma}9EeZR+?A)HYLpki%o#gHctw*5T^Kc+M zwcV@~gHgKrleyZLXzU&LaVX6ijHn`L<>x^~hX9Fd6I#bs&!ageFyv!{bP$Y6oQTD+ zAVN)Va;CFuA>}F z3>7b3rdIHJw$g4>><2k@`;RZbR)=RfWmHi+5qD$+p1lEOO3M9!aYT&O`{ZJE3rsux zCFae1&-z?*;L`7|b&L*`67f2p6@s)q`iJ!(?bGJh6<8*{Zn&+HRAsZNfT5iq8Q-lb z>uuNNTpXGzoEsAU7#LLkAX+(`4N+d0Aw#VE8=o{shOq3YuKR(I8D%(`BmQGfum>5r zc)_2fIW-2e(&^$I8&iDP=~2y}IQ1Q4{DT3C)5C|Nj(@%Xnoc@@Txga}mMHhy+($!B zT}$TBw){oU)I2gw#^H06@UP4Vthpi}Q3eGQ6S{5?p)OfaQUXKdC(7rX99}y|ECoz_ z0Os?1?FzQel4gvggJ~)d1 zp^*rARmy}fXJ_3(Qbw*7gX(|s6m0<@QZY(vgtnL1*=*ZbO**xG#EUv&&u{YB`@4bu zJS6vfm&+YYnO`e|;20ME8FDWf_qWz!9u4vVSr9}cpkNt^N=c*M3y7q0mI9P{&33+_FghU3Ti_x)D5K=6y zRtaYyB0&HEUIo9TcCx5({vj4CElXLR-&3qk36rqXkZPz%BqMg-nSpO#{rIHT zSnJ`n7a0S$41AFZjJgnnE?cNkA>_mnnGS*DE=crQ8VL<^w&M!xp6F=knlDd$>S=k~ zv*n_XGiyY-DJ}s?F=iQ16*HPLlSY(%W@gqYEb4zPu__bVULPdAQ_?*)eo=znc;`er zC^tIh?&0iF5Hg#wHpE3)+lNv*`iIq1Sx(NEl@aX!-e}RjN@bh@}eQ2ypst{i;Pl zVOw^7e$|n|OOz$tzY)I&{8qhQ@j)$KHv&WRCx;U#XG_{UfLo{e1<^0AG-4UeUTpcK zHDWca4@VdD2YXZ;t7>t{F^FP6_rXmPt(V=BLop;FQQvr}%@eP@?T;Bu=UR`fTu zK(?_oqfD?28gkldu>+Nq)bHENZ*v^W{xbaYbPk6=rQ$PfXrWaUc#^Ol#thXZ(JkFWh`6NYN}9EX6{r&gAG~pG7hd4?rr9gnR-SDBcC44RRA1LU zUycd{EY_S<-1!|7@u%}JGc44d1_SL9f{R#E2@WFT-JGo)({e+-ZRJoZC3D!d^u8nu zG{;BgS(pLf5_*BA1@ECU|h-7aV zp7E)Tq}VBuK=2FyGobp|W;fkL!{qUxKt|aMdf}NZXNF8uK~Z5N8O?%b+s@isCRPU* zz3NR-I8nslYO!*VD#)ZX(_vO0Yt-3*Nq(hW)t-5??< zARR+1CDPp;LzlqN-O`P~*}mWR{tsuJb$(+OGkc!B_C3#Y#}zn)C6j?2{sxQk_jaad zsDPllqe2nit>_}&80yr_ED7#zSY%t>9oO1t|D14>V&vl}kYz2UD!U^la`7 zQjwb>n^+d2CweXI?dEsO4Se|L&1N-WG{At9I;a){5I*YX>iD~{ig~LEz!@%&-~<3D zAVH0KH}+?UCgSj0nj2>YEVJci98d!e;M<(y^9!y28=@k1#Ly(uMphrj8{08@gGj9 zk2wY(6eZB=QwjLi&mX<^20XIQhS(~Ul<`U2c{Y7a1k&=DD!4cJyWc8!43RW! zl_9x*A7?Z1Qb%%+oBJf}wnD5f2l#jsa?#1XlfeBZysK2ZB^}H}7UTaFIEj1ySTITQ z2LhCygmIk{DFQle>)4-^YMX&}P^mHV1J2$)?LV4VjBEYcX_u#{X*!^k>Vd=})$Z9c zih>L}9-fWc>H;vd5c>@( zAU7Bpf`su(Vu!n=e_Is`i>g9j)AMNu=A(}jfve|GooRdTQQvDA9Jq1_NTu#WhB zDstviQF?aswXa!Y7882=w}(CfIWk2~1hT`+z@WP;Cb36%`InHLE}$*Jc1@e+)~cgT zIW_(lFz3qu_{OpyGczWZ7#n$@L9?q{TmI~Pm}^*=d3oq$Ld=f=|N92nr-ZUdH05rb zPjNmTsSZkYmsoT!zfxw3lEh3}Dn$M$oja6i3Lko^1e8@%0EAT0iXDSKbuoLOF#t+A zdx?2HY+CPNo#^>TR23YdF{HN>@3r*tp_AEX@tp^L2ax-rOY;%hQ}iU3a5 zCbAH{0vr3R1;Y8C@+laCqGs_0t$yR`L<%?F-`KpIN~~=^>iRl}k$|J#_K@BLi8R?~ z`;uU&G1Xs%JrEbghb&q)@RbZ_()#v3daE&DRvaNlGQ2C!sow?*HIoK^-3TvmL@M z|A`cdZfTdG7K!C&hoWn$oyXgr@dCPwt-iyGy8Gwru~%Y0MV6mW(leAbiX-D+ynamx zNoKTOHkOmSD-F&sEk|0c^P6j)dsorY+(OJgSJ&l=H2k|x{2mZvr;R4U)$+y2`$8P` z+Jh%O{UWIS#4nJSAZ7U--j^QH@kCqg!pw`itdW}=Pm$eBH`pPXc4mvC@-;WR&5{MT zGGhn^2+L-|VC*wj9R1X518nMiT)X{6r>b`y06qI2fU`FC%w^P--pUf|&H)|RCKfdV z1F|}~-USji@ifxy5BEKrS1}(Y?*dqR1CaJQE!I$)#gurgAocI5!>i`i&Y?az0hg#AAiAUg04l+k9|tnB zUAocS;nt~u98C{%Qi}AtOK4xZpugJaUycR%8mQ$Px_T|3J}}LUJ_k8_bXF-1S7T^Rpnpy zmpXfIO#5Ic&~Q60!FQ+X=1dfQ;Evv$e4*)yTmIVJVJQ{3RuLi}W`(84Lh5=aEdsyR zx)JFy1;*v9o5(u=DgertL0oN})ZNUofcvBjAl*|i%+-frYb z;P2H8M3b<>(+<@6+y-xjd?}Wdb>jo7{*EGb03XxPAGl7U(vKbmE;>5!dpt#JD^`m= zTo+W~Q0lq&-G7{iF%dA0q$5x%Mr|1-)PR!#fnQ)&i&>no{d%D^$9u2q;iR4&JmS^H z^69gZ6w)J2_wQ6EHM1Kh(TD5j=AAg5A~CN5c@xQn-WB(0j+s(hYEY<_-drbH&r|{t zr$=OIk4i|T?2NEIr&(b!j9G!pO5UDy@^@uw}@KY)-xKq z>cVwvv{9qbFA*f3Yu_IYD8>+p9sgX3L|yFQ`892T(p+$NP5vrZZOaYQ_wVC?N6T{y z)>L~o3Z5;oyJrhQxDmkE8QS!O)uSC>x)3D%-U`c%nzW6zE^P&d)RFAo5xj*6GR0~G zop#aQE>b!oI8pLr6l2AkfnGc-kbqM?gH`c zVUZDt`(%drb|UD_%)J7Q8NdfQPuk^deN0(Au7DdZwyOn-HXk=r*li6?dk-RQq$s7y z{t;KZr*4wx_Y)B0!`ZS;-}8nQUvM`=X0MHwf(>Jq>ky0kAO1NVfKP~D;5enP zKt9^p(?ij1#vDHydsVUfqd_4y*^M_p&4Fg*Ds2zVc>n+ee7T$meJF92Me_M2bhW3| z4!9FCaZ!l4?};tebNqR6vuR|YxY6=6mpZaE5H<4xux1Ebala_j2yEIbm3Wd02J&|> z$2R=_6{FH! zol06dnzGsDVAOL4SwVzvMGmlV;Qr_j6OjlvV-9{*)wJUrO7RsR+`asn{FB8FgWxty3s3qw?g5H`*T=bXV?hvR_I-xRnkk;9^xWYl3KI}m1J%E70TopA zrw70ZE#R(#%ajnU;da>XGM~b^F)~(oM=0cwmvCr9i0KzcdNJdfJE(0aYXu=Go{YAF z#L3tHjV0YTeA63PxPVbU4kMuWtz_FM ztXxw?BLJb8hYFdo7uNo8RIkNPrhM^robcom-jB~nq#>YaFsC%%luTYOHHW5s=K!wO|f}@L+=(UysDf@i2mZpvw+7m;PIJ1)NV82 zjX#nkbd*#eanCf^Rlqx>lbwqzPLN>lUf|}$jagl5Xl&?L+oNEETH|J{A*hm_&9!pY z$W#xlIQNj>We`6Yd=B4bH1(aM@_K|E&K_Ko*1N(OQYR}o8zasy7PX8WUq%0%v#&xU zVU|NRb*YlAM3Cl#Dr+RwRWTeS@k0hGT zm5v~u+C%&OgubKL{*wvsf<_(N1HoL$I{Uel1M&%X252`H{zr9=-w&Jv=i}Ly0)jgy zHjb)DFIDg+X_Kjt#4O$xoIdjdWX=gP1R}Q^PXLdr1LgWy1M;V zSP66I;xgb}Uq^AKOPz`=0ph*tdN$uV+&69@g%xa9L?qu=pek1QZ-H>OS)-Px%A;|19hv`lE-j|qEusu1EB+VHN8|U+QERlvV-~8A`ctj< zhz&wUXAy~G+2T-WZ0C6*j*ENNaQ@TdgWJPAKrl}SHkfau$1l0N9-x}RkX;!*tKzTv zy|CNor{__6!}}KCU?AYWOpE#IV6S#?g^ToPk^yimFK>I|v}=WBMkn9gaY)w9Yq7GO zC~G`h<5SHAy?A%BpiGvhYL7P@X}0>zQOAN|vaG)}HK-VN@`I6KgIgi^%;@rHK$9vI z{8PYrhv&^(j9}V2d?53Flxa zE`%Sk4}bgH8X68(D@yAa;coTdZcb2kp~f?GvpsIA5n|g0d442tVr5}jx_q3T)_aSv z8r#`*$MxhnkQ=9qp!&~I53V70)~kjiA++9~qQp)@3@|k;?SaHYtHG(jq3nAP#jole zmr%)CI(4;X`{S49;Vp#J-MGG}sG(G|L>7PcN@H$|lE~!IuKLc`O%(xKp^ZqV!6;|D z;_X}Uggq6N=E;d1>_Pz343!5_yj(K-Esgt?RD~=n)s%z+y{4+u^0~x5va+M1t9Hj{z z(S|=KJOT*V#0nDx#BQn?sCfu41<&%m;iYdJ7u zLxgQ61Q`(NRdM(1xqvvDC58!!Zfwryn!mD(B|yND4%gp=q;UshFUwB<7YpE#ge)(O zt*68+!%8*J8mC|fOQ^8x4n?sC96|lntahz_|6Px}d3tL8Snj(}{mV+F?TL%+6Lowr z`h6U#>8kHDBG4KUyae*5$DY=4;!M)$ff7FhoaWp7Gd|ZX=5yb_lq6p$vRgh0lkN8- z$hK0|!EinCj`;@ALl={o$v-O78^4Z6GdN=Gp(^)|*qAB++t2>;YCN0=V8`C*Bum|m zSfp=)KV}0Hiy<^U7owgFS>qPS#gHa8T$S|oYQyU&JfDc+PfG~xH2e*6%uDz?azdyR zBp18Wdpa5g`fdaK04my!Tc>uLvQxCp?46j+tCE z+bi$FAQ3x?bAK9iz8}7HNXZKmbY2;mK21yC)IC|Oki;VAi%ANvm%sFn^ANZgN`znGXLljLx+9u5va+_FC^!CHYt|)}A+*o(^Os!1 ztPl~EaqaHHVR?oN+_B-Ysm=QLp=2q(&ev03I&H>SxbrEJe6w zCRT2GQrK#^j6J2IX|)yJIA@Nqn+TpfjQVssk}3Q4#xE%7<_`eEGRb|;S6S0!$PEcB zF8>PB3kh~yTw%)b-x(U9e$Igch{ZW9UGIhjC-*KSlF5kmA{`qW&S=i1@=8QC11MxT zuCF8jAfuj+o8BJjB5EI?ZvL6D}pxf1VoiRiay{r=8Hqdd74WPuwmIh-d|nr zGhOU`kK3I(w`MCT$JROPM4*-|p2LCQ1Or8Q_7}>$uh>-Rw*fIp>3<#iVd%7>Z?2aBkn;^+2 zB_bknY`L0+Qn##!QGn{$!JZ&r9fWXZpz@Y=H@~cWithxp5nCiKCu9XR(s{PK!@|PY zRhvZ$y(F8@qe_K`$zYC^8#D+mqqLJ)oF4TnS^E6FC^9(f(qiJg6p?RF7e#1~QCslT zh0!CqWjntmh5I>xaNUfXkHGIM%_MAxxD4wR`(?|w3wfw_i|#$f9eH=6Y$Z3H(tLi$tMH#UG$_GaZQ9^wdjI&5`+n}UYH?IL zp?qPSSfUh;w3DT##Gj?5!X;P`m!wojz{|t)Xg=y*gcnaI;8di3}bxmsOVolAHl&BwpjCiw`Ukk$a^goaO9wh9CyV*YQ(++6h1Az1d&^5*3oo@B=+J_zu@@cF>qH~)!JmrkV&7T zv@W?TEcMVHG3)T?7DL9P3RsdQ*oJBq&gSqKiJ2Q_)N=>qH-S0Sd8MK`}%9z zR8K!%4qD<&=LFt}qVp@-ADl30O6!80-vmCa5Y5;Q()b1)Q~tbbPGP5zK!r&O zhF}Zyb2zfU|GVtKc`9x+-{Ps~hOl1mXbAuKDNpF#J44N~Z+6!S?7SD61F=X;Aw+c> z#l)R7$*rvdXeo>iv<{;)qAY^ZZcd?aHW+ev;yNv9JKaERCVJz};UT%t=g?3^6U(u{ zxC?GeUKH7EL53Bffb%mW-|ghoCXP3)41*PWs~xK(9qs$~4+Ak2H!0R#;dz1#F5bAB z(vo7c%5kpL2*5-F8_+tk9RV;WzS96-`JR?SLOe-b@&V4Zmyf}fHXH647U=M_-UE)~I>&Q-@OlSA*`x%(&pjcYDJ;f zj;R;V-%Sn{5KpbSW4{KqKHZz{FMHXz7{cw?RkC6^7hE^51jRi2-fb3H+1j4W28l4Z zGy+Ao-zwN5OFX-t)N3YDJt)9?hz1WmmOmNyIgKUUQEbLn0o9ql@*^)8pdcG14X~i16RCCjTdZgPRTq?#7(PSmCIydgFJGQEVPVwe`@}o{hY!rmKlK%WWfQTS1 z!PmHQMt+*BO7z>LZ>mmZtCE9v96+Nexd7ByyBu%dFZ@!J`uA#jO2Wq3;3A9%zq7Zv}nXWPp zZj1B5j^N1GbOg)2ztm7fjw3;*1PXOE!;1;?JOhn}^!1$i>sB?1RxqZ+?`Qt{znLrW zZ{8r{zp@0J8vDxc|GCX^2>6cnkgpiDL22V{ikh&-b^9Nz}XtWxlln7cj3Lh7|61ZVPjgD#u4qaR-TD<6lr7rv6f8 zZFE$W_xG1)6m*3za$1EH+uMpGktPq+?W};?L}D9ligoz7&|__SN895y z%0u>qSN0Q_$XMU^*0So5H|Js>_xEr2_gLhH}09`S%Tk^aXK{~a4R7LGB(gi=d>TQ_|e*6x3nY1 z+WHtg6#p`zyXmPxr^s)DL4#*1xA289MH)%T zoSO01Yq(A>pY>kd;JWD`qe=@5SPk{57PgaVTH-H`xDZ#^UE||8&i)z z{Lj2cyZq-0H%bB%7)0tqvQNHxTc9ISm%bW*Go#s~p z5tob;Pt~OFET0};p6q7wo4i=c3iE_+ZEDNHysEzg1@>4Qi!NX01ZJjJ7JNTM$`zZ> zIX(H&6Xz}T`$pwYlZ_$3tRPU-i%l3KM!=Zte$p|9rjsrw5-$&o8k64WuCkio4pCj9 znZ+KwTq`9MFV2a;uI#XLt5)Go@Jdkz$}-BUI%=UjFEezd>O53%CJ)FL z(5HCIt2R-d=&?tqa2l)f+NgdfbJp0k5#``8Kff1?pH>%joDDK^>*M{dF1$@OT&-=1 za!>sO5!(-ebuau8{{ZbTFG9WJ11l?Ql&RnLC-`%nt<*>(e94APZ&8aud_5*~WSOM&^lf@~dAJB)-C||C&c}hO z*Gi7`bm^A~P1zzp82D#fJ5JQX8b*&jspC|y=nSc#I2ioDCM$$ck zgpeEJkmL<^buhm3Be=Rhv6<(>dv-(b(T&P5s$@x*Pzsa)HC5f@{% z)tx*a(`~aQ{&bsW3EJPDuDfyQTogUit8^9sgAe28O5gVnOu?Wt0B$C--$#uzTXVXR({W$;`_5N`#sq=_Y$ZrUGQi67e^wI8k)plC+q+KofknJuezyybgkkAQ0Xj~eS z82iI|H{(v)-hMHX#EK;ZeiDj9Du+Jxw85U$7drttP|m&UX80w3s_DvmQSW2ZrFx8#Sf_^78cS4UI z)?XT;b@9gDI8hjRk5SF?l3=bC=AseR7|~I+_4;qgxS+B%O#96pTW#9+T}bqXx<3W2 z)5ePW;YDb14R|?W!Etj+gUFSoLUuYe$ohF@?^RpzQ8?_ntd5 zT-&v8;2mc7k-~f{d#TO@JT7e#yC|@BoinF*DL*$Ux|)`HHzuk%Bc>C~X~!<=ul&6c zs=j4FoD@MDYmKwYfzGLT^ILFB1ormf2@dqj{PI-xm-V4$Kl4Z?x_o-5X)Ij?ba3V$ zW9JnEp#uB?57)*#8%gobnGzp*YXOX{b1gd)OuE9J!3B{3NOnU=Of?>J2=qGw1Dve4 zGo+`BIsz5|Xr_j7wUt5qz$S)_s-gE%k-WSjkyc!Go6jk_Z<6eho7*`)mIIACDZWLo zUr>t3ue+_27;C6QWdiFZ?5kIebS3P>&EhPxi?c(qz6Fjb7iS#Ek9zLAuC(6EXMr04uG;O-tc4 zlmTFaxyvo3S=!R7u#37R4=!WBgOZ|F$ZQ(-3D8ho)8P=Eel}y6$N-LY6FgvKh6_AG zopeaZl|U*@7z8if*J#li;K0x(wmu?#yUz^F#CEvoI2aczyNLyZ~^ady*Akh` z#CxjdC1$BiF)UoCIu=pQGTmdTN-EXgCIUraOJ}zGbzZ9(EV_~>x(H~173W)El^Hc9 zyrFCRFwA(opR%Pu4>MxVFW`Dpks0R?@i z;{uSAle^M)pSV6)P?bLTS8J<(Ku6#sF*X^`R!yS1$bMTj;OT@?Nq_&A!KD`;_)S@) znrQrepnoy<7f^X$DAxy&B7k-ed8=6$2@~+D^&#vEicUdJ&NGoU)?;jyFw2Y_y|q&Z zDJ=0Y!vKBPd3_5v5I)LKp!U$eP-^{b?T|3_bx%b2PLAqIFlM9^;M9RR11BwpI%^ucJ*Cb;%vF`Xxk1R%BtZ5zu{(l3M!KK8}w{0U9mAq zLi8`9#I>taMdMY;ZNAClRQw-i09^~O@_&0gC?+x}NAE}bZ2Uh=hmw(p_%3y*l%t~~ zv@crk64)k;ZvX+4Co4c??iCv=YxC^y-`4$`0wHrCRPpF6MGLqMpS`XwXB_n?47P60 z0@#7tl1PLV);cbxC>H1YW3RfQQN8c<J{4ToW!&cI=Az8D3>cp%KC>xe039g2FdqYc#=d&`mL2g(A;|>jqL7T6qny<1{JZ|=& z0Cd0&&J%%p@N%gUqBG}_d>A!Xv8q2mGm~VySWh)@dL7y{!ZD+bO-Z&2tLBfeQ?Q9} zt-fGp5{w?m-`M?n$qu>?F*s#b`&S=v(HJ|P6<7;bcZB*GV9uQ(27q{naQpyKTjrIZ2BI^%gokJ>6qqAnXAE$vlLG;T}y*P5fkJWG%RhV`F10%K&3E>&q9% zdJUUwXKjJ+5eSac1kvS4=J2W&W`0 z*PB2`xF>n*ohKL^jU(yTwxaa@J$rV_Y#{?EZoslipIuUtn##>0#afv$b0sMlU+CAr zS&Qy)0ZJ(%@KO^&#q1e~va2EBFDW$UmketNKxW9PFDH(~ko!OHVBPb@0{-!zS1vDK z61kJG=Vyof`{=(95V^M@|IdY_&>Dk*MPm?aX-NOO(!UP?JLIeXxo$3^krYsKAVn7! z{qJ>EfK#F3f3K^Fz)1r7;-KMVZ#EhIok(W{I0faSjn0YD`m|FhnI z7sCMVsl^QMitxV+`3I8t@3(X!{Y&vHBYe^SyAa@Z$^ZK;|NnOX|I_`yCYY1_jeB0a oc(I}^C;j$6KcD{x1N-**lA<=GMs`jaxYHNP^6GNsGG-zF2TKs26aWAK literal 0 HcmV?d00001 diff --git a/src/main/resources/templates/fragments/stopwatch.html b/src/main/resources/templates/fragments/stopwatch.html new file mode 100644 index 00000000..c75f640f --- /dev/null +++ b/src/main/resources/templates/fragments/stopwatch.html @@ -0,0 +1,23 @@ +

+ + \ No newline at end of file From b43723ee3eec56fc30879051b80ab313d87cd913 Mon Sep 17 00:00:00 2001 From: uo287545 Date: Wed, 6 Mar 2024 02:45:54 +0100 Subject: [PATCH 04/14] Added security configuration so only authenticated users can play and started question answering function. --- .../uniovi/configuration/SecurityConfig.java | 1 + .../com/uniovi/controllers/GameController.java | 1 + .../templates/fragments/gameFrame.html | 17 ++++++++++++++--- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/uniovi/configuration/SecurityConfig.java b/src/main/java/com/uniovi/configuration/SecurityConfig.java index 5782663f..f20bd068 100644 --- a/src/main/java/com/uniovi/configuration/SecurityConfig.java +++ b/src/main/java/com/uniovi/configuration/SecurityConfig.java @@ -44,6 +44,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .requestMatchers("/home").authenticated() .requestMatchers("/signup/**").permitAll() .requestMatchers("/api/**").permitAll() + .requestMatchers("/game/**").authenticated() .requestMatchers("/**").permitAll() ).formLogin( form -> form diff --git a/src/main/java/com/uniovi/controllers/GameController.java b/src/main/java/com/uniovi/controllers/GameController.java index a626e9b8..ef478375 100644 --- a/src/main/java/com/uniovi/controllers/GameController.java +++ b/src/main/java/com/uniovi/controllers/GameController.java @@ -4,6 +4,7 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import java.util.Random; diff --git a/src/main/resources/templates/fragments/gameFrame.html b/src/main/resources/templates/fragments/gameFrame.html index 852f9408..3e3ada51 100644 --- a/src/main/resources/templates/fragments/gameFrame.html +++ b/src/main/resources/templates/fragments/gameFrame.html @@ -1,12 +1,23 @@ -
+

- - +
\ No newline at end of file From 45063386f45277b378a33cf4d78813d384cb0e1e Mon Sep 17 00:00:00 2001 From: uo287545 Date: Wed, 6 Mar 2024 04:59:06 +0100 Subject: [PATCH 05/14] Added some fragments to show after the user has answered a question. Added internationalization for the views mentioned before. --- src/main/resources/messages.properties | 5 +++++ src/main/resources/messages_en.properties | 5 +++++ src/main/resources/messages_es.properties | 7 ++++++- src/main/resources/templates/game/basicGame.html | 3 +-- .../resources/templates/game/fragments/correctAnswer.html | 4 ++++ .../resources/templates/game/fragments/failedAnswer.html | 4 ++++ .../templates/{ => game}/fragments/stopwatch.html | 0 .../resources/templates/game/fragments/timeRunOut.html | 4 ++++ 8 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/templates/game/fragments/correctAnswer.html create mode 100644 src/main/resources/templates/game/fragments/failedAnswer.html rename src/main/resources/templates/{ => game}/fragments/stopwatch.html (100%) create mode 100644 src/main/resources/templates/game/fragments/timeRunOut.html diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 642af222..879f1985 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -82,3 +82,8 @@ api.doc.player.emails=Correos electrónicos, separados por comas (opcional) api.doc.question.category=Categorña (opcional). Nombre o ID de la categoría. api.doc.question.id=ID de la pregunta (opcional) api.doc.question.statement=Enunciado de la pregunta (opcional). Texto que debe contener el enunciado de la pregunta. + +# -------------------Statements for the game fragments--------------------- +correctAnswer.result=¡Respuesta correcta, sigue así! +failedAnswer.result=Respuesta incorrecta, no te desanimes y sigue intentándolo. +timeRunOut.result=¡Se acabó el tiempo! No te preocupes, sigue intentándolo. \ No newline at end of file diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index 5d0941a0..c9ef30d7 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -82,6 +82,11 @@ api.doc.question.category=Category (optional). Category ID or name. api.doc.question.id=Question ID in the system (optional) api.doc.question.statement=Statement (optional). Text to search in the question statement. +# -------------------Statements for the game fragments--------------------- +correctAnswer.result=¡Correct answer, keep it up! +failedAnswer.result=Incorrect answer, don't get discouraged and keep trying. +timeRunOut.result=Time's up! Don't worry, keep trying. + diff --git a/src/main/resources/messages_es.properties b/src/main/resources/messages_es.properties index 6a1b638c..bb3d19de 100644 --- a/src/main/resources/messages_es.properties +++ b/src/main/resources/messages_es.properties @@ -81,4 +81,9 @@ api.doc.player.emails=Correos electrónicos, separados por comas (opcional) api.doc.question.category=Categorña (opcional). Nombre o ID de la categoría. api.doc.question.id=ID de la pregunta (opcional) -api.doc.question.statement=Enunciado de la pregunta (opcional). Texto que debe contener el enunciado de la pregunta. \ No newline at end of file +api.doc.question.statement=Enunciado de la pregunta (opcional). Texto que debe contener el enunciado de la pregunta. + +# -------------------Statements for the game fragments--------------------- +correctAnswer.result=¡Respuesta correcta, sigue así! +failedAnswer.result=Respuesta incorrecta, no te desanimes y sigue intentándolo. +timeRunOut.result=¡Se acabó el tiempo! No te preocupes, sigue intentándolo. \ No newline at end of file diff --git a/src/main/resources/templates/game/basicGame.html b/src/main/resources/templates/game/basicGame.html index 2ee1e83e..e2330ef1 100644 --- a/src/main/resources/templates/game/basicGame.html +++ b/src/main/resources/templates/game/basicGame.html @@ -3,8 +3,7 @@ -
-
+
\ No newline at end of file diff --git a/src/main/resources/templates/game/fragments/correctAnswer.html b/src/main/resources/templates/game/fragments/correctAnswer.html new file mode 100644 index 00000000..f708a858 --- /dev/null +++ b/src/main/resources/templates/game/fragments/correctAnswer.html @@ -0,0 +1,4 @@ +
+

+ +
\ No newline at end of file diff --git a/src/main/resources/templates/game/fragments/failedAnswer.html b/src/main/resources/templates/game/fragments/failedAnswer.html new file mode 100644 index 00000000..1dcc620b --- /dev/null +++ b/src/main/resources/templates/game/fragments/failedAnswer.html @@ -0,0 +1,4 @@ +
+

+ +
\ No newline at end of file diff --git a/src/main/resources/templates/fragments/stopwatch.html b/src/main/resources/templates/game/fragments/stopwatch.html similarity index 100% rename from src/main/resources/templates/fragments/stopwatch.html rename to src/main/resources/templates/game/fragments/stopwatch.html diff --git a/src/main/resources/templates/game/fragments/timeRunOut.html b/src/main/resources/templates/game/fragments/timeRunOut.html new file mode 100644 index 00000000..e8f47c0d --- /dev/null +++ b/src/main/resources/templates/game/fragments/timeRunOut.html @@ -0,0 +1,4 @@ +
+

+ +
\ No newline at end of file From 4687f6ae63a411216a231ba64c468d0a6fd86efe Mon Sep 17 00:00:00 2001 From: uo287545 Date: Wed, 6 Mar 2024 05:04:21 +0100 Subject: [PATCH 06/14] Implemented the basics for the question answering system. Waiting for the implementation of the GameSession to make it fully functional. Some changes are necessary to improve the visuals. --- .../uniovi/configuration/SecurityConfig.java | 3 +- .../uniovi/controllers/GameController.java | 42 ++++++++++++++++-- .../repositories/QuestionRepository.java | 3 ++ .../com/uniovi/services/QuestionService.java | 9 ++++ .../services/impl/QuestionServiceImpl.java | 25 +++++++++++ .../resources/static/images/logo_correct.png | Bin 0 -> 45766 bytes .../static/images/logo_incorrect.png | Bin 0 -> 87918 bytes .../templates/fragments/gameFrame.html | 23 ---------- .../templates/game/fragments/gameFrame.html | 22 +++++++++ 9 files changed, 98 insertions(+), 29 deletions(-) create mode 100644 src/main/resources/static/images/logo_correct.png create mode 100644 src/main/resources/static/images/logo_incorrect.png delete mode 100644 src/main/resources/templates/fragments/gameFrame.html create mode 100644 src/main/resources/templates/game/fragments/gameFrame.html diff --git a/src/main/java/com/uniovi/configuration/SecurityConfig.java b/src/main/java/com/uniovi/configuration/SecurityConfig.java index f20bd068..f71e9e60 100644 --- a/src/main/java/com/uniovi/configuration/SecurityConfig.java +++ b/src/main/java/com/uniovi/configuration/SecurityConfig.java @@ -44,7 +44,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .requestMatchers("/home").authenticated() .requestMatchers("/signup/**").permitAll() .requestMatchers("/api/**").permitAll() - .requestMatchers("/game/**").authenticated() + //.requestMatchers("/game/**").authenticated() .requestMatchers("/**").permitAll() ).formLogin( form -> form @@ -70,7 +70,6 @@ public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception /** * Method to check if the user is authenticated - * @param request HttpServletRequest * @return boolean */ public static boolean isAuthenticated() { diff --git a/src/main/java/com/uniovi/controllers/GameController.java b/src/main/java/com/uniovi/controllers/GameController.java index ef478375..2541644a 100644 --- a/src/main/java/com/uniovi/controllers/GameController.java +++ b/src/main/java/com/uniovi/controllers/GameController.java @@ -4,9 +4,7 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; - -import java.util.Random; +import org.springframework.web.bind.annotation.PathVariable; @Controller public class GameController { @@ -17,9 +15,45 @@ public GameController(QuestionService questionService) { this.questionService = questionService; } + + /** + * This method is used to get the game view and to start the game + * @param model The model to be used + * @return The view to be shown + */ @GetMapping("/game") public String getGame(Model model) { - model.addAttribute("question", questionService.getAllQuestions().get(new Random().nextInt(questionService.getAllQuestions().size()))); + model.addAttribute("question", questionService.getRandomQuestion().get()); return "game/basicGame"; } + + + /** + * This method is used to check the answer for a specific question + * @param idQuestion The id of the question. + * @param idAnswer The id of the answer. If the id is -1, it means that the user has not selected any answer and the + * time has run out. + * @param model The model to be used. + * @return The view to be shown, if the answer is correct, the success view is shown, otherwise the failure view is + * shown or the timeOutFailure view is shown. + */ + @GetMapping("/game/{idQuestion}/{idAnswer}") + public String getCheckResult(@PathVariable Long idQuestion, @PathVariable Long idAnswer, Model model) { + if(idAnswer == -1) { + model.addAttribute("correctAnswer", questionService.getQuestion(idQuestion).get().getCorrectAnswer()); + return "game/fragments/timeRunOut"; + } + else if(questionService.checkAnswer(idQuestion, idAnswer)) { + return "game/fragments/correctAnswer"; + } else { + model.addAttribute("correctAnswer", questionService.getQuestion(idQuestion).get().getCorrectAnswer()); + return "game/fragments/failedAnswer"; + } + } + + @GetMapping("/game/update") + public String updateGame(Model model) { + model.addAttribute("question", questionService.getRandomQuestion().get()); + return "game/fragments/gameFrame"; + } } diff --git a/src/main/java/com/uniovi/repositories/QuestionRepository.java b/src/main/java/com/uniovi/repositories/QuestionRepository.java index b1495aab..22b36f31 100644 --- a/src/main/java/com/uniovi/repositories/QuestionRepository.java +++ b/src/main/java/com/uniovi/repositories/QuestionRepository.java @@ -1,10 +1,13 @@ package com.uniovi.repositories; import com.uniovi.entities.Question; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.repository.CrudRepository; import java.util.Optional; public interface QuestionRepository extends CrudRepository { Question findByStatement(String statement); + Page findAll(Pageable pageable); } diff --git a/src/main/java/com/uniovi/services/QuestionService.java b/src/main/java/com/uniovi/services/QuestionService.java index 9bc96b7d..e2ef7259 100644 --- a/src/main/java/com/uniovi/services/QuestionService.java +++ b/src/main/java/com/uniovi/services/QuestionService.java @@ -31,4 +31,13 @@ public interface QuestionService { * @return The question with the given id */ Optional getQuestion(Long id); + + /** + * Get a random question + * + * @return The question selected + */ + Optional getRandomQuestion(); + + boolean checkAnswer(Long idquestion, Long idanswer); } diff --git a/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java b/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java index a07139f1..26c7fbf1 100644 --- a/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java +++ b/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java @@ -3,6 +3,10 @@ import com.uniovi.entities.Question; import com.uniovi.repositories.QuestionRepository; import com.uniovi.services.QuestionService; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.querydsl.QPageRequest; import org.springframework.stereotype.Service; import java.sql.SQLException; @@ -40,4 +44,25 @@ public Optional getQuestion(Long id) { return questionRepository.findById(id); } + @Override + public Optional getRandomQuestion() { + Long qty = questionRepository.count(); + int idx = (int)(Math.random() * qty); + Page questionPage = questionRepository.findAll(PageRequest.of(idx, 1)); + Question q = null; + if (questionPage.hasContent()) { + q = questionPage.getContent().get(0); + } + return Optional.ofNullable(q); + } + + @Override + public boolean checkAnswer(Long idquestion, Long idanswer) { + Optional q = questionRepository.findById(idquestion); + if (q.isPresent()) { + return q.get().getCorrectAnswer().getId().equals(idanswer); + } + return false; + } + } diff --git a/src/main/resources/static/images/logo_correct.png b/src/main/resources/static/images/logo_correct.png new file mode 100644 index 0000000000000000000000000000000000000000..a815be9f0f298b256240040642792d66111f8145 GIT binary patch literal 45766 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�c8g?0!OB^O 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/images/logo_incorrect.png b/src/main/resources/static/images/logo_incorrect.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e10f7e5a025a2b52e496e6fe22a0a5b4e94b79 GIT binary patch literal 87918 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
PEV1N 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 -

-

- -
-
- - -
-
-
\ No newline at end of file diff --git a/src/main/resources/templates/game/fragments/gameFrame.html b/src/main/resources/templates/game/fragments/gameFrame.html new file mode 100644 index 00000000..8266f007 --- /dev/null +++ b/src/main/resources/templates/game/fragments/gameFrame.html @@ -0,0 +1,22 @@ + +
+

+ +
+
+ + + +
+
+
\ No newline at end of file From a10a666a047303ba1c5cae41e0e238efc65db20d Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Wed, 6 Mar 2024 21:04:31 +0100 Subject: [PATCH 07/14] Finish most style for the game --- .../uniovi/controllers/GameController.java | 22 +++-- src/main/java/com/uniovi/entities/Answer.java | 6 ++ .../java/com/uniovi/entities/Question.java | 1 + .../com/uniovi/services/QuestionService.java | 2 +- src/main/resources/messages.properties | 5 +- src/main/resources/messages_en.properties | 5 +- src/main/resources/messages_es.properties | 5 +- src/main/resources/static/css/game.css | 33 ++++++++ src/main/resources/static/css/style.css | 21 +---- .../resources/templates/fragments/footer.html | 1 - .../resources/templates/game/basicGame.html | 5 ++ .../game/fragments/correctAnswer.html | 4 - .../game/fragments/failedAnswer.html | 4 - .../templates/game/fragments/gameFrame.html | 83 +++++++++++++++---- .../game/fragments/questionResult.html | 60 ++++++++++++++ .../templates/game/fragments/stopwatch.html | 24 +++--- .../templates/game/fragments/timeRunOut.html | 4 - 17 files changed, 218 insertions(+), 67 deletions(-) create mode 100644 src/main/resources/static/css/game.css delete mode 100644 src/main/resources/templates/game/fragments/correctAnswer.html delete mode 100644 src/main/resources/templates/game/fragments/failedAnswer.html create mode 100644 src/main/resources/templates/game/fragments/questionResult.html delete mode 100644 src/main/resources/templates/game/fragments/timeRunOut.html diff --git a/src/main/java/com/uniovi/controllers/GameController.java b/src/main/java/com/uniovi/controllers/GameController.java index 2541644a..d89d8be8 100644 --- a/src/main/java/com/uniovi/controllers/GameController.java +++ b/src/main/java/com/uniovi/controllers/GameController.java @@ -1,6 +1,8 @@ package com.uniovi.controllers; +import com.uniovi.entities.GameSession; import com.uniovi.services.QuestionService; +import jakarta.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @@ -8,7 +10,6 @@ @Controller public class GameController { - private final QuestionService questionService; public GameController(QuestionService questionService) { @@ -22,8 +23,13 @@ public GameController(QuestionService questionService) { * @return The view to be shown */ @GetMapping("/game") - public String getGame(Model model) { + public String getGame(HttpSession session, Model model) { + if (session.getAttribute("gameSession") == null) { + session.setAttribute("gameSession", new GameSession()); + } + model.addAttribute("question", questionService.getRandomQuestion().get()); + model.addAttribute("questionDuration", QuestionService.SECONDS_PER_QUESTION); return "game/basicGame"; } @@ -41,19 +47,25 @@ public String getGame(Model model) { public String getCheckResult(@PathVariable Long idQuestion, @PathVariable Long idAnswer, Model model) { if(idAnswer == -1) { model.addAttribute("correctAnswer", questionService.getQuestion(idQuestion).get().getCorrectAnswer()); - return "game/fragments/timeRunOut"; + model.addAttribute("messageKey", "timeRunOut.result"); + model.addAttribute("logoImage", "/images/logo_incorrect.png"); } else if(questionService.checkAnswer(idQuestion, idAnswer)) { - return "game/fragments/correctAnswer"; + model.addAttribute("messageKey", "correctAnswer.result"); + model.addAttribute("logoImage", "/images/logo_correct.png"); } else { model.addAttribute("correctAnswer", questionService.getQuestion(idQuestion).get().getCorrectAnswer()); - return "game/fragments/failedAnswer"; + model.addAttribute("messageKey", "failedAnswer.result"); + model.addAttribute("logoImage", "/images/logo_incorrect.png"); } + + return "game/fragments/questionResult"; } @GetMapping("/game/update") public String updateGame(Model model) { model.addAttribute("question", questionService.getRandomQuestion().get()); + model.addAttribute("questionDuration", QuestionService.SECONDS_PER_QUESTION); return "game/fragments/gameFrame"; } } diff --git a/src/main/java/com/uniovi/entities/Answer.java b/src/main/java/com/uniovi/entities/Answer.java index 044c90f5..a9528dba 100644 --- a/src/main/java/com/uniovi/entities/Answer.java +++ b/src/main/java/com/uniovi/entities/Answer.java @@ -1,5 +1,7 @@ package com.uniovi.entities; +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -19,9 +21,13 @@ public class Answer implements JsonEntity { @GeneratedValue private Long id; + @JsonIgnore private String text; + + @JsonIgnore private boolean correct; + @JsonIgnore @ManyToOne private Question question; diff --git a/src/main/java/com/uniovi/entities/Question.java b/src/main/java/com/uniovi/entities/Question.java index 143ce474..97edb412 100644 --- a/src/main/java/com/uniovi/entities/Question.java +++ b/src/main/java/com/uniovi/entities/Question.java @@ -1,5 +1,6 @@ package com.uniovi.entities; +import com.fasterxml.jackson.annotation.JsonManagedReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; diff --git a/src/main/java/com/uniovi/services/QuestionService.java b/src/main/java/com/uniovi/services/QuestionService.java index e2ef7259..d56f9b8a 100644 --- a/src/main/java/com/uniovi/services/QuestionService.java +++ b/src/main/java/com/uniovi/services/QuestionService.java @@ -9,7 +9,7 @@ @Service public interface QuestionService { - + public static final Integer SECONDS_PER_QUESTION = 25; /** * Add a new question to the database * diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 879f1985..5efbe414 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -86,4 +86,7 @@ api.doc.question.statement=Enunciado de la pregunta (opcional). Texto que debe c # -------------------Statements for the game fragments--------------------- correctAnswer.result=¡Respuesta correcta, sigue así! failedAnswer.result=Respuesta incorrecta, no te desanimes y sigue intentándolo. -timeRunOut.result=¡Se acabó el tiempo! No te preocupes, sigue intentándolo. \ No newline at end of file +timeRunOut.result=¡Se acabó el tiempo! No te preocupes, sigue intentándolo. +game.continue=Siguiente pregunta +answer.correct=La respuesta correcta era: +game.points=Puntos: \ No newline at end of file diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index c9ef30d7..4d004495 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -86,8 +86,9 @@ api.doc.question.statement=Statement (optional). Text to search in the question correctAnswer.result=¡Correct answer, keep it up! failedAnswer.result=Incorrect answer, don't get discouraged and keep trying. timeRunOut.result=Time's up! Don't worry, keep trying. - - +game.continue=Next question +answer.correct=Correct answer was: +game.points=Points: diff --git a/src/main/resources/messages_es.properties b/src/main/resources/messages_es.properties index bb3d19de..69ed390d 100644 --- a/src/main/resources/messages_es.properties +++ b/src/main/resources/messages_es.properties @@ -86,4 +86,7 @@ api.doc.question.statement=Enunciado de la pregunta (opcional). Texto que debe c # -------------------Statements for the game fragments--------------------- correctAnswer.result=¡Respuesta correcta, sigue así! failedAnswer.result=Respuesta incorrecta, no te desanimes y sigue intentándolo. -timeRunOut.result=¡Se acabó el tiempo! No te preocupes, sigue intentándolo. \ No newline at end of file +timeRunOut.result=¡Se acabó el tiempo! No te preocupes, sigue intentándolo. +game.continue=Siguiente pregunta +answer.correct=La respuesta correcta era: +game.points=Puntos: \ No newline at end of file diff --git a/src/main/resources/static/css/game.css b/src/main/resources/static/css/game.css new file mode 100644 index 00000000..df1257b6 --- /dev/null +++ b/src/main/resources/static/css/game.css @@ -0,0 +1,33 @@ +.stopwatch-container { + position: relative; + text-align: center; + width: 200px; + margin: auto; +} +.countdown { + position: absolute; + top: 53%; + left: 50%; + transform: translate(-50%, -50%); + font-size: 3em; + color: black; +} +.stopwatch-img { + width: 100%; + height: auto; +} + +.game-logo { + margin-top: 10%; + width: 35%; + height: auto; +} + +#bottomGamePart { + margin-bottom: 10%; +} + +.points { + font-size: 2em; + color: black; +} \ No newline at end of file diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css index f7efe348..6c24ab8a 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/css/style.css @@ -64,21 +64,8 @@ p span { border-color: #1c2530; /* Color del borde más oscuro */ } -.stopwatch-container { - position: relative; - text-align: center; - width: 200px; - margin: auto; -} -.countdown { - position: absolute; - top: 53%; - left: 50%; - transform: translate(-50%, -50%); - font-size: 3em; - color: black; -} -.stopwatch-img { - width: 100%; - height: auto; +@media (max-width: 750px) { + h1, h2, h3 { + font-size: 1.5em; + } } \ No newline at end of file diff --git a/src/main/resources/templates/fragments/footer.html b/src/main/resources/templates/fragments/footer.html index 911b20a1..0579216d 100644 --- a/src/main/resources/templates/fragments/footer.html +++ b/src/main/resources/templates/fragments/footer.html @@ -13,7 +13,6 @@
-
diff --git a/src/main/resources/templates/game/basicGame.html b/src/main/resources/templates/game/basicGame.html index e2330ef1..a856b23b 100644 --- a/src/main/resources/templates/game/basicGame.html +++ b/src/main/resources/templates/game/basicGame.html @@ -2,7 +2,12 @@ + +

+ + +

diff --git a/src/main/resources/templates/game/fragments/correctAnswer.html b/src/main/resources/templates/game/fragments/correctAnswer.html deleted file mode 100644 index f708a858..00000000 --- a/src/main/resources/templates/game/fragments/correctAnswer.html +++ /dev/null @@ -1,4 +0,0 @@ -
-

- -
\ No newline at end of file diff --git a/src/main/resources/templates/game/fragments/failedAnswer.html b/src/main/resources/templates/game/fragments/failedAnswer.html deleted file mode 100644 index 1dcc620b..00000000 --- a/src/main/resources/templates/game/fragments/failedAnswer.html +++ /dev/null @@ -1,4 +0,0 @@ -
-

- -
\ No newline at end of file diff --git a/src/main/resources/templates/game/fragments/gameFrame.html b/src/main/resources/templates/game/fragments/gameFrame.html index 8266f007..8aae6c3d 100644 --- a/src/main/resources/templates/game/fragments/gameFrame.html +++ b/src/main/resources/templates/game/fragments/gameFrame.html @@ -1,22 +1,75 @@

-
-
- - - +
+ +
+ +
+
+ +
+
+
+ +
+
\ No newline at end of file diff --git a/src/main/resources/templates/game/fragments/questionResult.html b/src/main/resources/templates/game/fragments/questionResult.html new file mode 100644 index 00000000..19de9430 --- /dev/null +++ b/src/main/resources/templates/game/fragments/questionResult.html @@ -0,0 +1,60 @@ +
+

+

+ + +

+ +
+ + +
+
+
+
+
\ No newline at end of file diff --git a/src/main/resources/templates/game/fragments/stopwatch.html b/src/main/resources/templates/game/fragments/stopwatch.html index c75f640f..76ded351 100644 --- a/src/main/resources/templates/game/fragments/stopwatch.html +++ b/src/main/resources/templates/game/fragments/stopwatch.html @@ -1,23 +1,23 @@
Stopwatch -
+
24
\ No newline at end of file diff --git a/src/main/resources/templates/game/fragments/timeRunOut.html b/src/main/resources/templates/game/fragments/timeRunOut.html deleted file mode 100644 index e8f47c0d..00000000 --- a/src/main/resources/templates/game/fragments/timeRunOut.html +++ /dev/null @@ -1,4 +0,0 @@ -
-

- -
\ No newline at end of file From 22f2f57bb7a0804a258474eb7edc976b601d3a6f Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Thu, 7 Mar 2024 01:56:20 +0100 Subject: [PATCH 08/14] Internationalize question generation --- .../components/MultipleQuestionGenerator.java | 24 ++++++++++++++++ .../QuestionGeneratorTestController.java | 7 ++--- .../generators/AbstractQuestionGenerator.java | 8 ++++-- .../geography/BorderQuestionGenerator.java | 14 +++++++--- .../geography/CapitalQuestionGenerator.java | 19 ++++++++----- .../ContinentQuestionGeneration.java | 18 ++++++++---- .../java/com/uniovi/entities/Question.java | 10 +++++-- .../repositories/QuestionRepository.java | 8 ++++-- .../services/InsertSampleDataService.java | 28 +++++++++++++++---- .../services/impl/QuestionServiceImpl.java | 16 ++++------- src/main/resources/application.properties | 2 +- 11 files changed, 107 insertions(+), 47 deletions(-) create mode 100644 src/main/java/com/uniovi/components/MultipleQuestionGenerator.java diff --git a/src/main/java/com/uniovi/components/MultipleQuestionGenerator.java b/src/main/java/com/uniovi/components/MultipleQuestionGenerator.java new file mode 100644 index 00000000..d8409cc5 --- /dev/null +++ b/src/main/java/com/uniovi/components/MultipleQuestionGenerator.java @@ -0,0 +1,24 @@ +package com.uniovi.components; + +import com.uniovi.components.generators.QuestionGenerator; +import com.uniovi.entities.Category; +import com.uniovi.entities.Question; + +import java.util.ArrayList; +import java.util.List; + +public class MultipleQuestionGenerator { + private QuestionGenerator[] generators; + + public MultipleQuestionGenerator(QuestionGenerator... generators) { + this.generators = generators; + } + + public List getQuestions() { + List questions = new ArrayList<>(); + for (QuestionGenerator generator : generators) { + questions.addAll(generator.getQuestions()); + } + return questions; + } +} diff --git a/src/main/java/com/uniovi/components/QuestionGeneratorTestController.java b/src/main/java/com/uniovi/components/QuestionGeneratorTestController.java index 82ba147e..bb954701 100644 --- a/src/main/java/com/uniovi/components/QuestionGeneratorTestController.java +++ b/src/main/java/com/uniovi/components/QuestionGeneratorTestController.java @@ -11,14 +11,11 @@ @RestController public class QuestionGeneratorTestController { - @Autowired - CapitalQuestionGenerator qgen; - - @RequestMapping("/test") + /*@RequestMapping("/test") public void test() { List q = qgen.getQuestions(); for(Question question : q){ System.out.println(question); } - } + }*/ } diff --git a/src/main/java/com/uniovi/components/generators/AbstractQuestionGenerator.java b/src/main/java/com/uniovi/components/generators/AbstractQuestionGenerator.java index cb4d46ab..81006a95 100644 --- a/src/main/java/com/uniovi/components/generators/AbstractQuestionGenerator.java +++ b/src/main/java/com/uniovi/components/generators/AbstractQuestionGenerator.java @@ -6,6 +6,9 @@ import com.uniovi.entities.Category; import com.uniovi.entities.Question; import com.uniovi.services.CategoryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; import java.net.URI; import java.net.URLEncoder; @@ -17,11 +20,11 @@ import java.util.List; public abstract class AbstractQuestionGenerator implements QuestionGenerator{ - private List questions = new ArrayList<>(); protected final CategoryService categoryService; private String query; protected String statement; + protected String language; protected AbstractQuestionGenerator(CategoryService categoryService) { this.categoryService = categoryService; @@ -38,7 +41,7 @@ public void questionGenerator(String statement, List options, String cor Answer correct = new Answer(correctAnswer, true); answers.add(correct); - Question question = new Question(statement, answers, correct, category); + Question question = new Question(statement, answers, correct, category, language); question.scrambleOptions(); questions.add(question); } @@ -84,5 +87,4 @@ public List getQuestions() { protected abstract String generateCorrectAnswer(JsonNode result); protected abstract String getQuestionSubject(JsonNode result); - } diff --git a/src/main/java/com/uniovi/components/generators/geography/BorderQuestionGenerator.java b/src/main/java/com/uniovi/components/generators/geography/BorderQuestionGenerator.java index 1bbd4475..f791f1e5 100644 --- a/src/main/java/com/uniovi/components/generators/geography/BorderQuestionGenerator.java +++ b/src/main/java/com/uniovi/components/generators/geography/BorderQuestionGenerator.java @@ -6,12 +6,18 @@ import java.util.*; public class BorderQuestionGenerator extends AbstractGeographyGenerator{ - + private static final Map STATEMENTS = new HashMap<>() { + { + put("en", "Which countries share a border with "); + put("es", "¿Con qué países comparte frontera "); + } + }; private Set usedCountries = new HashSet<>(); - public BorderQuestionGenerator(CategoryService categoryService) { + public BorderQuestionGenerator(CategoryService categoryService, String language) { super(categoryService); - this.statement = "Which countries share a border with "; + this.statement = STATEMENTS.get(language); + this.language = language; } private List getAllBorderingCountries(JsonNode resultsNode, String correctCountry) { @@ -64,7 +70,7 @@ public String getQuery() { " FILTER NOT EXISTS {?country wdt:P31 wd:Q3024240}" + " FILTER NOT EXISTS {?country wdt:P31 wd:Q28171280}" + " ?country wdt:P47 ?borderingCountry ." + - " SERVICE wikibase:label { bd:serviceParam wikibase:language \"[AUTO_LANGUAGE],en\" }" + + " SERVICE wikibase:label { bd:serviceParam wikibase:language \"[AUTO_LANGUAGE]," + language + "\" }" + "}"; } } diff --git a/src/main/java/com/uniovi/components/generators/geography/CapitalQuestionGenerator.java b/src/main/java/com/uniovi/components/generators/geography/CapitalQuestionGenerator.java index 951292fc..e5d91727 100644 --- a/src/main/java/com/uniovi/components/generators/geography/CapitalQuestionGenerator.java +++ b/src/main/java/com/uniovi/components/generators/geography/CapitalQuestionGenerator.java @@ -2,18 +2,23 @@ import com.fasterxml.jackson.databind.JsonNode; import com.uniovi.services.CategoryService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; +import java.util.*; -@Component public class CapitalQuestionGenerator extends AbstractGeographyGenerator{ + private static final Map STATEMENTS = new HashMap<>() { + { + put("en", "What is the capital of "); + put("es", "¿Cuál es la capital de "); + } + }; - public CapitalQuestionGenerator(CategoryService categoryService) { + public CapitalQuestionGenerator(CategoryService categoryService, String language) { super(categoryService); - this.statement = "What is the capital of "; + this.statement = STATEMENTS.get(language); + this.language = language; } @Override @@ -24,7 +29,7 @@ public String getQuery() { " FILTER NOT EXISTS {?country wdt:P31 wd:Q3024240}" + " FILTER NOT EXISTS {?country wdt:P31 wd:Q28171280}" + " OPTIONAL { ?country wdt:P36 ?capital } ." + - " SERVICE wikibase:label { bd:serviceParam wikibase:language \"[AUTO_LANGUAGE],en\" }" + + " SERVICE wikibase:label { bd:serviceParam wikibase:language \"[AUTO_LANGUAGE]," + language + "\" }" + "}" + "ORDER BY ?countryLabel"; } diff --git a/src/main/java/com/uniovi/components/generators/geography/ContinentQuestionGeneration.java b/src/main/java/com/uniovi/components/generators/geography/ContinentQuestionGeneration.java index 7e4ccbfb..b1d476ae 100644 --- a/src/main/java/com/uniovi/components/generators/geography/ContinentQuestionGeneration.java +++ b/src/main/java/com/uniovi/components/generators/geography/ContinentQuestionGeneration.java @@ -4,14 +4,20 @@ import com.uniovi.services.CategoryService; import org.springframework.scheduling.annotation.Scheduled; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; +import java.util.*; public class ContinentQuestionGeneration extends AbstractGeographyGenerator{ - public ContinentQuestionGeneration(CategoryService categoryService) { + private static final Map STATEMENTS = new HashMap<>() { + { + put("en", "In which continent is "); + put("es", "¿En qué continente se encuentra "); + } + }; + + public ContinentQuestionGeneration(CategoryService categoryService, String language) { super(categoryService); - this.statement = "In which continent is "; + this.statement = STATEMENTS.get(language); + this.language = language; } private List getAllContinents(JsonNode resultsNode, String correctContinent) { @@ -63,7 +69,7 @@ public String getQuery() { " FILTER NOT EXISTS {?country wdt:P31 wd:Q3024240}" + " FILTER NOT EXISTS {?country wdt:P31 wd:Q28171280}" + " OPTIONAL { ?country wdt:P30 ?continent } ." + - " SERVICE wikibase:label { bd:serviceParam wikibase:language \"[AUTO_LANGUAGE],en\" }" + + " SERVICE wikibase:label { bd:serviceParam wikibase:language \"[AUTO_LANGUAGE]," + language + "\" }" + "}" + "ORDER BY ?countryLabel"; } diff --git a/src/main/java/com/uniovi/entities/Question.java b/src/main/java/com/uniovi/entities/Question.java index 97edb412..8b834d55 100644 --- a/src/main/java/com/uniovi/entities/Question.java +++ b/src/main/java/com/uniovi/entities/Question.java @@ -22,11 +22,14 @@ @Entity @NoArgsConstructor public class Question implements JsonEntity { + public static final String ENGLISH = "en"; + public static final String SPANISH = "es"; + @Id @GeneratedValue private Long id; - @Column(unique = true) + @Column(unique = false) private String statement; @OneToMany(mappedBy = "question", cascade = CascadeType.ALL, orphanRemoval = true) @@ -38,12 +41,15 @@ public class Question implements JsonEntity { @ManyToOne private Category category; - public Question(String statement, List options, Answer correctAnswer, Category category) { + private String language; + + public Question(String statement, List options, Answer correctAnswer, Category category, String language) { Assert.isTrue(options.contains(correctAnswer), "Correct answer must be one of the options"); this.statement = statement; Associations.QuestionAnswers.addAnswer(this, options); this.correctAnswer = correctAnswer; this.category = category; + this.language = language; } public void addOption(Answer option) { diff --git a/src/main/java/com/uniovi/repositories/QuestionRepository.java b/src/main/java/com/uniovi/repositories/QuestionRepository.java index 22b36f31..16bd18dd 100644 --- a/src/main/java/com/uniovi/repositories/QuestionRepository.java +++ b/src/main/java/com/uniovi/repositories/QuestionRepository.java @@ -3,11 +3,15 @@ import com.uniovi.entities.Question; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import java.util.Optional; - +import java.util.List; public interface QuestionRepository extends CrudRepository { Question findByStatement(String statement); - Page findAll(Pageable pageable); + List findAll(); + + @Query("SELECT q FROM Question q WHERE q.language = ?1") + Page findByLanguage(Pageable pageable, String language); } diff --git a/src/main/java/com/uniovi/services/InsertSampleDataService.java b/src/main/java/com/uniovi/services/InsertSampleDataService.java index 072d9c69..19c81993 100644 --- a/src/main/java/com/uniovi/services/InsertSampleDataService.java +++ b/src/main/java/com/uniovi/services/InsertSampleDataService.java @@ -1,5 +1,6 @@ package com.uniovi.services; +import com.uniovi.components.MultipleQuestionGenerator; import com.uniovi.components.generators.QuestionGenerator; import com.uniovi.components.generators.geography.BorderQuestionGenerator; import com.uniovi.components.generators.geography.CapitalQuestionGenerator; @@ -8,16 +9,20 @@ import com.uniovi.entities.Associations; import com.uniovi.entities.GameSession; import com.uniovi.entities.Player; +import com.uniovi.entities.Question; import com.uniovi.repositories.GameSessionRepository; import com.uniovi.repositories.QuestionRepository; import jakarta.annotation.PostConstruct; import jakarta.transaction.Transactional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import java.time.LocalDateTime; +import java.util.*; @Service public class InsertSampleDataService { @@ -27,6 +32,8 @@ public class InsertSampleDataService { private final QuestionRepository questionRepository; private final GameSessionRepository gameSessionRepository; + private Logger log = LoggerFactory.getLogger(InsertSampleDataService.class);; + public InsertSampleDataService(PlayerService playerService, QuestionService questionService, CategoryService categoryService, QuestionRepository questionRepository, GameSessionRepository gameSessionRepository) { @@ -60,13 +67,22 @@ public void insertSampleQuestions() { questionRepository.deleteAll(); - QuestionGenerator border = new BorderQuestionGenerator(categoryService); - border.getQuestions().forEach(questionService::addNewQuestion); + MultipleQuestionGenerator allQuestionGenerator = new MultipleQuestionGenerator( + new ContinentQuestionGeneration(categoryService, Question.ENGLISH), + new CapitalQuestionGenerator(categoryService, Question.ENGLISH), + new BorderQuestionGenerator(categoryService, Question.ENGLISH) + ); + List questionsEn = allQuestionGenerator.getQuestions(); + questionsEn.forEach(questionService::addNewQuestion); - QuestionGenerator capital = new CapitalQuestionGenerator(categoryService); - capital.getQuestions().forEach(questionService::addNewQuestion); + allQuestionGenerator = new MultipleQuestionGenerator( + new ContinentQuestionGeneration(categoryService, Question.SPANISH), + new CapitalQuestionGenerator(categoryService, Question.SPANISH), + new BorderQuestionGenerator(categoryService, Question.SPANISH) + ); + List questionsEs = allQuestionGenerator.getQuestions(); + questionsEs.forEach(questionService::addNewQuestion); - QuestionGenerator continent = new ContinentQuestionGeneration(categoryService); - continent.getQuestions().forEach(questionService::addNewQuestion); + log.info("Sample questions inserted"); } } diff --git a/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java b/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java index 26c7fbf1..ffa08335 100644 --- a/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java +++ b/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java @@ -3,6 +3,7 @@ import com.uniovi.entities.Question; import com.uniovi.repositories.QuestionRepository; import com.uniovi.services.QuestionService; +import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -25,10 +26,6 @@ public QuestionServiceImpl(QuestionRepository questionRepository) { @Override public void addNewQuestion(Question question) { - if (questionRepository.findByStatement(question.getStatement()) != null) { - return; - } - questionRepository.save(question); } @@ -46,13 +43,10 @@ public Optional getQuestion(Long id) { @Override public Optional getRandomQuestion() { - Long qty = questionRepository.count(); - int idx = (int)(Math.random() * qty); - Page questionPage = questionRepository.findAll(PageRequest.of(idx, 1)); - Question q = null; - if (questionPage.hasContent()) { - q = questionPage.getContent().get(0); - } + List allQuestions = questionRepository.findAll().stream() + .filter(question -> question.getLanguage().equals(LocaleContextHolder.getLocale().getLanguage())).toList(); + int idx = (int) (Math.random() * allQuestions.size()); + Question q = allQuestions.get(idx); return Optional.ofNullable(q); } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 6785d07b..d7930d51 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -6,4 +6,4 @@ spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver spring.datasource.url=jdbc:hsqldb:hsql://localhost:9001 spring.datasource.username=sa spring.datasource.password= -spring.jpa.hibernate.ddl-auto=update \ No newline at end of file +spring.jpa.hibernate.ddl-auto=create \ No newline at end of file From 3e803a58be5c248c91648fd4dbc9060071f6d7dd Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Thu, 7 Mar 2024 01:59:12 +0100 Subject: [PATCH 09/14] Fix create in app properties --- src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d7930d51..6785d07b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -6,4 +6,4 @@ spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver spring.datasource.url=jdbc:hsqldb:hsql://localhost:9001 spring.datasource.username=sa spring.datasource.password= -spring.jpa.hibernate.ddl-auto=create \ No newline at end of file +spring.jpa.hibernate.ddl-auto=update \ No newline at end of file From 350f98bf764167a75afb1c27f86e2684938cc8f8 Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Fri, 8 Mar 2024 00:10:36 +0100 Subject: [PATCH 10/14] Implement game logic, persistant and with some exploits fixed --- .../configuration/CustomConfiguration.java | 3 + .../uniovi/configuration/SecurityConfig.java | 3 +- .../uniovi/controllers/GameController.java | 139 ++++++++++++++++-- .../uniovi/controllers/PlayersController.java | 4 +- .../com/uniovi/entities/Associations.java | 2 + .../java/com/uniovi/entities/GameSession.java | 52 ++++++- src/main/java/com/uniovi/entities/Player.java | 2 +- .../java/com/uniovi/entities/Question.java | 3 +- .../uniovi/services/GameSessionService.java | 31 ++-- .../com/uniovi/services/QuestionService.java | 14 ++ .../uniovi/services/impl/GameSessionImpl.java | 60 +++----- .../services/impl/QuestionServiceImpl.java | 12 ++ src/main/resources/messages.properties | 3 +- src/main/resources/messages_en.properties | 2 +- src/main/resources/messages_es.properties | 3 +- .../resources/templates/game/basicGame.html | 16 +- .../game/fragments/gameFinished.html | 21 +++ .../game/fragments/questionResult.html | 2 +- .../templates/game/fragments/stopwatch.html | 2 +- .../templates/ranking/globalRanking.html | 2 +- .../templates/ranking/playerRanking.html | 2 +- .../ranking/playerRanking_table.html | 2 +- 22 files changed, 293 insertions(+), 87 deletions(-) create mode 100644 src/main/resources/templates/game/fragments/gameFinished.html diff --git a/src/main/java/com/uniovi/configuration/CustomConfiguration.java b/src/main/java/com/uniovi/configuration/CustomConfiguration.java index 86bc6ad0..dbb9eb11 100644 --- a/src/main/java/com/uniovi/configuration/CustomConfiguration.java +++ b/src/main/java/com/uniovi/configuration/CustomConfiguration.java @@ -1,5 +1,8 @@ package com.uniovi.configuration; +import jakarta.persistence.EntityManagerFactory; +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.domain.PageRequest; diff --git a/src/main/java/com/uniovi/configuration/SecurityConfig.java b/src/main/java/com/uniovi/configuration/SecurityConfig.java index f71e9e60..cfdbdc61 100644 --- a/src/main/java/com/uniovi/configuration/SecurityConfig.java +++ b/src/main/java/com/uniovi/configuration/SecurityConfig.java @@ -44,7 +44,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .requestMatchers("/home").authenticated() .requestMatchers("/signup/**").permitAll() .requestMatchers("/api/**").permitAll() - //.requestMatchers("/game/**").authenticated() + .requestMatchers("/game/**").authenticated() + .requestMatchers("/ranking/playerRanking").authenticated() .requestMatchers("/**").permitAll() ).formLogin( form -> form diff --git a/src/main/java/com/uniovi/controllers/GameController.java b/src/main/java/com/uniovi/controllers/GameController.java index d89d8be8..1d0dfd7d 100644 --- a/src/main/java/com/uniovi/controllers/GameController.java +++ b/src/main/java/com/uniovi/controllers/GameController.java @@ -1,19 +1,33 @@ package com.uniovi.controllers; import com.uniovi.entities.GameSession; +import com.uniovi.entities.Player; +import com.uniovi.entities.Question; +import com.uniovi.services.GameSessionService; +import com.uniovi.services.PlayerService; import com.uniovi.services.QuestionService; import jakarta.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.security.Principal; +import java.time.Duration; +import java.time.LocalDateTime; @Controller public class GameController { private final QuestionService questionService; + private final GameSessionService gameSessionService; + private final PlayerService playerService; - public GameController(QuestionService questionService) { + public GameController(QuestionService questionService, GameSessionService gameSessionService, + PlayerService playerService) { this.questionService = questionService; + this.gameSessionService = gameSessionService; + this.playerService = playerService; } @@ -23,13 +37,19 @@ public GameController(QuestionService questionService) { * @return The view to be shown */ @GetMapping("/game") - public String getGame(HttpSession session, Model model) { - if (session.getAttribute("gameSession") == null) { - session.setAttribute("gameSession", new GameSession()); + public String getGame(HttpSession session, Model model, Principal principal) { + GameSession gameSession = (GameSession) session.getAttribute("gameSession"); + if (gameSession != null) { + if (checkUpdateGameSession(gameSession, session)) { + return "game/gameFinished"; + } + } else { + gameSession = gameSessionService.startNewGame(getLoggedInPlayer(principal)); + session.setAttribute("gameSession", gameSession); } - model.addAttribute("question", questionService.getRandomQuestion().get()); - model.addAttribute("questionDuration", QuestionService.SECONDS_PER_QUESTION); + model.addAttribute("question", gameSession.getCurrentQuestion()); + model.addAttribute("questionDuration", getRemainingTime(gameSession)); return "game/basicGame"; } @@ -44,28 +64,121 @@ public String getGame(HttpSession session, Model model) { * shown or the timeOutFailure view is shown. */ @GetMapping("/game/{idQuestion}/{idAnswer}") - public String getCheckResult(@PathVariable Long idQuestion, @PathVariable Long idAnswer, Model model) { - if(idAnswer == -1) { - model.addAttribute("correctAnswer", questionService.getQuestion(idQuestion).get().getCorrectAnswer()); + public String getCheckResult(@PathVariable Long idQuestion, @PathVariable Long idAnswer, Model model, HttpSession session) { + GameSession gameSession = (GameSession) session.getAttribute("gameSession"); + if (gameSession == null) { + return "redirect:/game"; + } + + boolean currentQuestionNull = gameSession.getCurrentQuestion() == null; + + if (!gameSession.hasQuestionId(idQuestion)) { + model.addAttribute("score", gameSession.getScore()); + session.removeAttribute("gameSession"); + return "redirect:/game"; // if someone wants to exploit the game, just redirect to the game page + } + + if(idAnswer == -1 + || getRemainingTime(gameSession) <= 0) { + model.addAttribute("correctAnswer", gameSession.getCurrentQuestion().getCorrectAnswer()); model.addAttribute("messageKey", "timeRunOut.result"); model.addAttribute("logoImage", "/images/logo_incorrect.png"); + gameSession.addAnsweredQuestion(gameSession.getCurrentQuestion()); + gameSession.addQuestion(false, 0); } else if(questionService.checkAnswer(idQuestion, idAnswer)) { model.addAttribute("messageKey", "correctAnswer.result"); model.addAttribute("logoImage", "/images/logo_correct.png"); + + if (!gameSession.isAnswered(gameSession.getCurrentQuestion())) { + gameSession.addQuestion(true, getRemainingTime(gameSession)); + gameSession.addAnsweredQuestion(gameSession.getCurrentQuestion()); + } + } else { - model.addAttribute("correctAnswer", questionService.getQuestion(idQuestion).get().getCorrectAnswer()); + model.addAttribute("correctAnswer", gameSession.getCurrentQuestion().getCorrectAnswer()); model.addAttribute("messageKey", "failedAnswer.result"); model.addAttribute("logoImage", "/images/logo_incorrect.png"); + gameSession.addAnsweredQuestion(gameSession.getCurrentQuestion()); + gameSession.addQuestion(false, 0); } + session.setAttribute("hasJustAnswered", true); + gameSession.getNextQuestion(); return "game/fragments/questionResult"; } @GetMapping("/game/update") - public String updateGame(Model model) { - model.addAttribute("question", questionService.getRandomQuestion().get()); - model.addAttribute("questionDuration", QuestionService.SECONDS_PER_QUESTION); + public String updateGame(Model model, HttpSession session) { + GameSession gameSession = (GameSession) session.getAttribute("gameSession"); + Question nextQuestion = gameSession.getCurrentQuestion(); + if (nextQuestion == null) { + gameSessionService.endGame(gameSession); + session.removeAttribute("gameSession"); + model.addAttribute("score", gameSession.getScore()); + return "game/fragments/gameFinished"; + } + + if (session.getAttribute("hasJustAnswered") != null) { + if ((boolean) session.getAttribute("hasJustAnswered")) + gameSession.setFinishTime(LocalDateTime.now()); + session.removeAttribute("hasJustAnswered"); + } + model.addAttribute("question", gameSession.getCurrentQuestion()); + model.addAttribute("questionDuration", getRemainingTime(gameSession)); return "game/fragments/gameFrame"; } + + @GetMapping("/game/finished/{points}") + public String finishGame(@PathVariable int points, Model model, HttpSession session) { + GameSession gameSession = (GameSession) session.getAttribute("gameSession"); + if (gameSession != null) { + gameSessionService.endGame(gameSession); + session.removeAttribute("gameSession"); + } + model.addAttribute("score", points); + return "game/gameFinished"; + } + + @GetMapping("/game/points") + @ResponseBody + public String getPoints(HttpSession session) { + GameSession gameSession = (GameSession) session.getAttribute("gameSession"); + if (gameSession != null) + return String.valueOf(gameSession.getScore()); + else + return "0"; + } + + private Player getLoggedInPlayer(Principal principal) { + return playerService.getUserByUsername(principal.getName()).get(); + } + + /** + * This method is used to check if the game session has to be updated + * @param gameSession The game session to be checked + * @param session The session to be used + * @return True if the game session has been ended, false otherwise + */ + private boolean checkUpdateGameSession(GameSession gameSession, HttpSession session) { + // if time since last question started is greater than the time per question, add a new question (or check for game finish) + if (getRemainingTime(gameSession) <= 0 + && gameSession.getQuestionsToAnswer().isEmpty() + && gameSession.getCurrentQuestion() != null) { + gameSession.addQuestion(false, 0); + gameSession.addAnsweredQuestion(gameSession.getCurrentQuestion()); + if (gameSession.getQuestionsToAnswer().isEmpty()) { + gameSessionService.endGame(gameSession); + session.removeAttribute("gameSession"); + return true; + } + } + + return false; + } + + private int getRemainingTime(GameSession gameSession) { + return (int) Duration.between(LocalDateTime.now(), + gameSession.getFinishTime().plusSeconds(QuestionService.SECONDS_PER_QUESTION)).toSeconds(); + } } diff --git a/src/main/java/com/uniovi/controllers/PlayersController.java b/src/main/java/com/uniovi/controllers/PlayersController.java index a998b69d..a32bd5ae 100644 --- a/src/main/java/com/uniovi/controllers/PlayersController.java +++ b/src/main/java/com/uniovi/controllers/PlayersController.java @@ -101,7 +101,7 @@ public String showGlobalRanking(Pageable pageable, Model model) { model.addAttribute("ranking", ranking.getContent()); model.addAttribute("page", ranking); - return "/ranking/globalRanking"; + return "ranking/globalRanking"; } @GetMapping("/ranking/playerRanking") @@ -112,7 +112,7 @@ public String showPlayerRanking(Pageable pageable, Model model, Principal princi model.addAttribute("ranking", ranking.getContent()); model.addAttribute("page", ranking); - return "/ranking/playerRanking"; + return "ranking/playerRanking"; } } diff --git a/src/main/java/com/uniovi/entities/Associations.java b/src/main/java/com/uniovi/entities/Associations.java index 1d1db3cc..28493169 100644 --- a/src/main/java/com/uniovi/entities/Associations.java +++ b/src/main/java/com/uniovi/entities/Associations.java @@ -1,4 +1,5 @@ package com.uniovi.entities; + import java.util.*; public class Associations { @@ -81,6 +82,7 @@ public static class PlayerGameSession { * @param player The player * @param gameSession The game session */ + public static void addGameSession(Player player, GameSession gameSession) { gameSession.setPlayer(player); player.getGameSessions().add(gameSession); diff --git a/src/main/java/com/uniovi/entities/GameSession.java b/src/main/java/com/uniovi/entities/GameSession.java index 28108db0..c124cdc7 100644 --- a/src/main/java/com/uniovi/entities/GameSession.java +++ b/src/main/java/com/uniovi/entities/GameSession.java @@ -10,8 +10,7 @@ import lombok.Setter; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; +import java.util.*; @Getter @Setter @@ -37,15 +36,37 @@ public class GameSession implements JsonEntity { private int score; @Transient - private List answeredQuestions = new ArrayList<>(); + private Set answeredQuestions = new HashSet<>(); - public void addQuestion(boolean correct) { + @Transient + private List questionsToAnswer = new ArrayList<>(); + + @Transient + private Question currentQuestion; + + public GameSession(Player player, List questions) { + this.player = player; + this.questionsToAnswer = questions; + this.createdAt = LocalDateTime.now(); + this.finishTime = LocalDateTime.now(); + this.correctQuestions = 0; + this.totalQuestions = 0; + getNextQuestion(); + } + + public void addQuestion(boolean correct, int timeLeft) { if(correct) correctQuestions++; totalQuestions++; + + // TODO: Calculate score + if (correct) { + score += timeLeft + 10 /* magic number TBD */; + } } public void addAnsweredQuestion(Question question) { + questionsToAnswer.remove(question); answeredQuestions.add(question); } @@ -53,6 +74,16 @@ public boolean isAnswered(Question question) { return answeredQuestions.contains(question); } + public Question getNextQuestion() { + if(questionsToAnswer.isEmpty()) { + currentQuestion = null; + return null; + } + Collections.shuffle(questionsToAnswer); + currentQuestion = questionsToAnswer.get(0); + return questionsToAnswer.get(0); + } + @Override public JsonNode toJson() { ObjectMapper mapper = new ObjectMapper(); @@ -65,4 +96,17 @@ public JsonNode toJson() { .put("finishTime", finishTime.toString()) .put("score", score); } + + public boolean hasQuestionId(Long idQuestion) { + for (Question q : questionsToAnswer) { + if (q.getId().equals(idQuestion)) + return true; + } + + for (Question q : answeredQuestions) { + if (q.getId().equals(idQuestion)) + return true; + } + return false; + } } diff --git a/src/main/java/com/uniovi/entities/Player.java b/src/main/java/com/uniovi/entities/Player.java index 2575c789..824290ef 100644 --- a/src/main/java/com/uniovi/entities/Player.java +++ b/src/main/java/com/uniovi/entities/Player.java @@ -36,7 +36,7 @@ public class Player implements JsonEntity { @ManyToMany(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER) private Set roles = new HashSet<>(); - @OneToMany(mappedBy = "player", cascade = CascadeType.REMOVE) + @OneToMany(mappedBy = "player", cascade = CascadeType.ALL, fetch = FetchType.EAGER) private Set gameSessions = new HashSet<>(); @OneToOne(cascade = CascadeType.ALL, mappedBy = "player") diff --git a/src/main/java/com/uniovi/entities/Question.java b/src/main/java/com/uniovi/entities/Question.java index 8b834d55..ee6440f6 100644 --- a/src/main/java/com/uniovi/entities/Question.java +++ b/src/main/java/com/uniovi/entities/Question.java @@ -1,6 +1,5 @@ package com.uniovi.entities; -import com.fasterxml.jackson.annotation.JsonManagedReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; @@ -32,7 +31,7 @@ public class Question implements JsonEntity { @Column(unique = false) private String statement; - @OneToMany(mappedBy = "question", cascade = CascadeType.ALL, orphanRemoval = true) + @OneToMany(mappedBy = "question", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) private List options = new ArrayList<>(); @OneToOne diff --git a/src/main/java/com/uniovi/services/GameSessionService.java b/src/main/java/com/uniovi/services/GameSessionService.java index 1f032301..e0e69d9a 100644 --- a/src/main/java/com/uniovi/services/GameSessionService.java +++ b/src/main/java/com/uniovi/services/GameSessionService.java @@ -2,13 +2,14 @@ import com.uniovi.entities.GameSession; import com.uniovi.entities.Player; +import com.uniovi.services.impl.GameSessionImpl; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; -@Service + public interface GameSessionService { /** @@ -18,17 +19,23 @@ public interface GameSessionService { */ List getGameSessions(); -// /** -// * Return the list of GameSessions by player -// * -// * @return the list of GameSessions by player -// */ -// List getGameSessionsByPlayer(Player player); -// -// HashMap getSortedPlayersScores(); - + /** + * Return the global ranking + * + * @param pageable the pageable + * @return the global ranking + */ + Page getGlobalRanking(Pageable pageable); - public Page getGlobalRanking(Pageable pageable); - public Page getPlayerRanking(Pageable pageable, Player player); + /** + * Return the player ranking + * + * @param pageable the pageable + * @param player the player + * @return the player ranking + */ + Page getPlayerRanking(Pageable pageable, Player player); + GameSession startNewGame(Player player); + void endGame(GameSession gameSession); } diff --git a/src/main/java/com/uniovi/services/QuestionService.java b/src/main/java/com/uniovi/services/QuestionService.java index d56f9b8a..56b10bbc 100644 --- a/src/main/java/com/uniovi/services/QuestionService.java +++ b/src/main/java/com/uniovi/services/QuestionService.java @@ -39,5 +39,19 @@ public interface QuestionService { */ Optional getRandomQuestion(); + /** + * Get a random question from any category + * + * @param num The number of questions to get + * @return The questions selected + */ + List getRandomQuestions(int num); + + /** + * Check if the answer is correct + * @param idquestion The id of the question + * @param idanswer The id of the answer + * @return True if the answer is correct, false otherwise + */ boolean checkAnswer(Long idquestion, Long idanswer); } diff --git a/src/main/java/com/uniovi/services/impl/GameSessionImpl.java b/src/main/java/com/uniovi/services/impl/GameSessionImpl.java index caf18492..a7cf289f 100644 --- a/src/main/java/com/uniovi/services/impl/GameSessionImpl.java +++ b/src/main/java/com/uniovi/services/impl/GameSessionImpl.java @@ -1,23 +1,29 @@ package com.uniovi.services.impl; +import com.uniovi.entities.Associations; import com.uniovi.entities.Player; import com.uniovi.repositories.GameSessionRepository; import com.uniovi.entities.GameSession; import com.uniovi.services.GameSessionService; +import com.uniovi.services.QuestionService; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.*; @Service public class GameSessionImpl implements GameSessionService { + public static final Integer NORMAL_GAME_QUESTION_NUM = 2; private final GameSessionRepository gameSessionRepository; + private final QuestionService questionService; - public GameSessionImpl(GameSessionRepository gameSessionRepository) { + public GameSessionImpl(GameSessionRepository gameSessionRepository, QuestionService questionService) { this.gameSessionRepository = gameSessionRepository; + this.questionService = questionService; } @Override @@ -25,48 +31,6 @@ public List getGameSessions() { return gameSessionRepository.findAll(); } -// @Override -// public List getGameSessionsByPlayer(Player player) { -// return gameSessionRepository.findAllByPlayer(player); -// } -// -// @Override -// public HashMap getSortedPlayersScores() { -// List gameSessions = gameSessionRepository.findAll(); -// HashMap ranking = getRanking(gameSessions); -// // Ordenar las entradas del ranking por puntuación -// List> sortedEntries = new ArrayList<>(ranking.entrySet()); -// sortedEntries.sort(Map.Entry.comparingByValue(Comparator.reverseOrder())); -// -// // Crear un LinkedHashMap para mantener el orden de inserción -// LinkedHashMap sortedRanking = new LinkedHashMap<>(); -// for (Map.Entry entry : sortedEntries) { -// sortedRanking.put(entry.getKey(), entry.getValue()); -// } -// -// return sortedRanking; -// } -// -// private static HashMap getRanking(List gameSessions) { -// HashMap ranking = new HashMap<>(); -// -// // Iterar a través de las sesiones de juego -// for (GameSession gameSession : gameSessions) { -// Player player = gameSession.getPlayer(); -// int score = gameSession.getScore(); -// -// // Si el jugador ya está en el ranking, sumar la puntuación, de lo contrario, agregarlo al ranking -// if (ranking.containsKey(player)) { -// int currentScore = ranking.get(player) + score; -// ranking.put(player, currentScore); -// } else { -// ranking.put(player, score); -// } -// } -// return ranking; -// } - - @Override public Page getGlobalRanking(Pageable pageable) { return gameSessionRepository.findTotalScoresByPlayer(pageable); @@ -77,5 +41,15 @@ public Page getPlayerRanking(Pageable pageable, Player player) { return gameSessionRepository.findAllByPlayerOrderByScoreDesc(pageable, player); } + @Override + public GameSession startNewGame(Player player) { + return new GameSession(player, questionService.getRandomQuestions(NORMAL_GAME_QUESTION_NUM)); + } + @Override + public void endGame(GameSession gameSession) { + Associations.PlayerGameSession.addGameSession(gameSession.getPlayer(), gameSession); + gameSession.setFinishTime(LocalDateTime.now()); + gameSessionRepository.save(gameSession); + } } diff --git a/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java b/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java index ffa08335..9d04d51a 100644 --- a/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java +++ b/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java @@ -50,6 +50,18 @@ public Optional getRandomQuestion() { return Optional.ofNullable(q); } + @Override + public List getRandomQuestions(int num) { + List allQuestions = questionRepository.findAll().stream() + .filter(question -> question.getLanguage().equals(LocaleContextHolder.getLocale().getLanguage())).toList(); + List res = new ArrayList<>(); + for (int i = 0; i < num; i++) { + int idx = (int) (Math.random() * allQuestions.size()); + res.add(allQuestions.get(idx)); + } + return res; + } + @Override public boolean checkAnswer(Long idquestion, Long idanswer) { Optional q = questionRepository.findById(idquestion); diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 24acea3a..abc095bf 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -99,4 +99,5 @@ failedAnswer.result=Respuesta incorrecta, no te desanimes y sigue intentándolo. timeRunOut.result=¡Se acabó el tiempo! No te preocupes, sigue intentándolo. game.continue=Siguiente pregunta answer.correct=La respuesta correcta era: -game.points=Puntos: \ No newline at end of file +game.points=Puntos: +game.finish=El juego ha terminado. Tu puntuación ha sido: \ No newline at end of file diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index 464b5f7a..25f62d3e 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -99,6 +99,6 @@ timeRunOut.result=Time's up! Don't worry, keep trying. game.continue=Next question answer.correct=Correct answer was: game.points=Points: - +game.finish=The game has finished. Your score is: diff --git a/src/main/resources/messages_es.properties b/src/main/resources/messages_es.properties index 208aed0a..f7311554 100644 --- a/src/main/resources/messages_es.properties +++ b/src/main/resources/messages_es.properties @@ -99,4 +99,5 @@ failedAnswer.result=Respuesta incorrecta, no te desanimes y sigue intentándolo. timeRunOut.result=¡Se acabó el tiempo! No te preocupes, sigue intentándolo. game.continue=Siguiente pregunta answer.correct=La respuesta correcta era: -game.points=Puntos: \ No newline at end of file +game.points=Puntos: +game.finish=El juego ha terminado. Tu puntuación ha sido: \ No newline at end of file diff --git a/src/main/resources/templates/game/basicGame.html b/src/main/resources/templates/game/basicGame.html index a856b23b..b8857e11 100644 --- a/src/main/resources/templates/game/basicGame.html +++ b/src/main/resources/templates/game/basicGame.html @@ -6,9 +6,23 @@

- +

+ \ No newline at end of file diff --git a/src/main/resources/templates/game/fragments/gameFinished.html b/src/main/resources/templates/game/fragments/gameFinished.html new file mode 100644 index 00000000..ee10d9e6 --- /dev/null +++ b/src/main/resources/templates/game/fragments/gameFinished.html @@ -0,0 +1,21 @@ +
+

+

+ + +

+ +
+
+ +
+
+ +
+
+ +
\ No newline at end of file diff --git a/src/main/resources/templates/game/fragments/questionResult.html b/src/main/resources/templates/game/fragments/questionResult.html index 19de9430..cffc9471 100644 --- a/src/main/resources/templates/game/fragments/questionResult.html +++ b/src/main/resources/templates/game/fragments/questionResult.html @@ -7,7 +7,7 @@

- +

diff --git a/src/main/resources/templates/fragments/background.html b/src/main/resources/templates/fragments/background.html new file mode 100644 index 00000000..a9e8fbfd --- /dev/null +++ b/src/main/resources/templates/fragments/background.html @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/main/resources/templates/fragments/head.html b/src/main/resources/templates/fragments/head.html index 1ee3832f..b75eb3c5 100644 --- a/src/main/resources/templates/fragments/head.html +++ b/src/main/resources/templates/fragments/head.html @@ -20,5 +20,6 @@ + diff --git a/src/main/resources/templates/game/basicGame.html b/src/main/resources/templates/game/basicGame.html index b8857e11..432cc621 100644 --- a/src/main/resources/templates/game/basicGame.html +++ b/src/main/resources/templates/game/basicGame.html @@ -3,6 +3,7 @@ +

diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index c86c392f..1205a29d 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -3,8 +3,9 @@

- - + + +
diff --git a/src/main/resources/templates/player/home.html b/src/main/resources/templates/player/home.html index ac02901d..82e49c48 100644 --- a/src/main/resources/templates/player/home.html +++ b/src/main/resources/templates/player/home.html @@ -4,8 +4,7 @@ - - +

diff --git a/src/main/resources/templates/player/login.html b/src/main/resources/templates/player/login.html index d912fc82..8958109e 100644 --- a/src/main/resources/templates/player/login.html +++ b/src/main/resources/templates/player/login.html @@ -4,8 +4,7 @@