From 8292ae42a4b0d1c47afb8d893f2ba64c33185319 Mon Sep 17 00:00:00 2001 From: yoannchb-pro <71560747+yoannchb-pro@users.noreply.github.com> Date: Mon, 12 Jun 2023 22:36:34 -0400 Subject: [PATCH] v1.0.2 --- CHANGELOG.md | 4 ++ README.md | 22 ++++++- TODO.md | 2 + assets/mode.png | Bin 0 -> 10478 bytes assets/popup.png | Bin 56487 -> 67408 bytes assets/settings.png | Bin 0 -> 17401 bytes assets/setup.png | Bin 0 -> 14362 bytes extension/MoodleGPT.js | 16 +++++ extension/MoodleGPT.js.map | 2 +- extension/manifest.json | 2 +- extension/popup/index.html | 23 ++++++- extension/popup/js/index.js | 110 +++++++++++++++++++++++++++------- extension/popup/js/version.js | 15 ++++- extension/popup/style.css | 29 +++++++++ package.json | 2 +- src/core/reply.ts | 18 ++++++ src/types/config.d.ts | 1 + 17 files changed, 216 insertions(+), 30 deletions(-) create mode 100644 assets/mode.png create mode 100644 assets/settings.png create mode 100644 assets/setup.png diff --git a/CHANGELOG.md b/CHANGELOG.md index cbd2985..96fa5d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## v1.0.2 + +- Added `mode` + ## v1.0.1 - Removed langage diff --git a/README.md b/README.md index 6fad867..d29fa7f 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,10 @@ This extension allows you to hide CHAT-GPT in a Moodle quiz. You just need to en I hereby declare that I am not responsible for any misuse or illegal activities carried out using my program. The code is provided for educational and research purposes only, and any use of it outside of these purposes is at the user's own risk. +## Support + +Will be a pleasure if you want to supprot this project :). Just right [here](example.com) + ## Update See [changelog](./CHANGELOG.md) @@ -22,6 +26,10 @@ If MoodleGPT cannot complete one of your moodle quiz please provide the html cod > NOTE: This extension only works on Chromium-based browsers like Edge, Chrome, etc. Unfortunately, Firefox requires a click on the extension, which is not very discreet. +

+Popup +

+ Go to "Manage my extensions" on your browser, then click on "Load unpacked extension" and select the "extension" folder. Afterwards, click on the extension icon and enter the apiKey obtained from [openai](https://platform.openai.com/) and enter a code that will activate the extension on your moodle page. Finally, click on the reload button next to model (it should give you the last ChatGPT version, otherwise enter it by your self) and click on the save button (The extension need to be configured before entering the moodle quiz). ## Inject the code into the moodle @@ -32,10 +40,20 @@ You just need to enter on the keyboard the code you have set into the ext Type back the code on the keyboard and the code will be removed from the current page. -## Options +## Mode

-Popup +Popup +

+ +- Autocomplete: The extension will complete the question for you. +- Clipboard: The response is copied into the clipboard. +- Question to answer: The question is converted to the answer and you can click on it to show back the question (or show back the answer). + +## Settings + +

+Popup

- Api key: the openai api key. diff --git a/TODO.md b/TODO.md index e133af5..b8171c9 100644 --- a/TODO.md +++ b/TODO.md @@ -2,3 +2,5 @@ - [ ] Support multiple input type in a question - [ ] Support drag and drop quiz +- [ ] Summary +- [ ] Publish on chrome diff --git a/assets/mode.png b/assets/mode.png new file mode 100644 index 0000000000000000000000000000000000000000..383c76e3fe053eac707602b1a7c8e2b8e5b58a9c GIT binary patch literal 10478 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 w9j8>_F|X|ZvcNFn7RdrNql`JFv1J#t*fB*mh literal 0 HcmV?d00001 diff --git a/assets/popup.png b/assets/popup.png index 33be60955393112eabcc0b6241104f35e903ef20..05517f41769a0720b6cf6e7a7889e8c7783c0c99 100644 GIT binary patch literal 67408 zcmd?Q^;cV8^fpM5Kp{xb;6aKzMT-T3l|pfMDeh97;=!SXmQM=>LUE^fahDdi0>vp_ z9D;=j-}jw&=1-Wl<_A{R$tCCBv-R0~KQ~TOLzxht1|I_hgHTlkrj3DtNq~WY<&6hG zf5UEMGK>Cr;;pSLk5M^Fw~Jn2+e6i%7#KAv1b0?A==D<%6(es949aJZe@|4kS&uO= z9tu=pP+foXgFl3pWOfmh&ZH@)5mn0eSU+t_4c(Q!9k`V`5QB!<(`Xof$ z3F`!9cmq{~T(yYejIxNJ>KR6rW-Q)DhZBpBEd*-P=En8TMrFJWlX7ZPbKl(Wa_rw| zzkf~`f@O>h^-&S}PlN5lkkm@RS9>;dD=VvQC=3Rh4u7)13j%@COn?OF= zZ5IF_A+L^-G_#2@gWK}XP9ky|GmY<7rUMy71*b(CSF*?Y?m?)LL@X&R$=&oDan@#jYGXK=$Yfxb&(kJMvDDZHcjw=zQRUnQlkX zQuBQz>(TJ-<-lq9eU0DTNsXj@+r@j|v~_(z^ii2Baxal$V1(8~7x?$)&AhSk#C)*% zQ#zQ>g{2{6ugF#$@AN{c_y}W(O}=X$`UET{PND@3rRsjS54n&x)U1;}!ZE6XIMWe5 zXr{0f_#*epDJV?{oO;LSyUl=FVFT52(<%N55fZQ{to&uF#+V&}Wib4N83LqCX*16x8F?m)^x9MCtHtt^l0u^T!Ud)*K3#gP$>_#-p zB+7$9#u6c5x@2%ety0_i@$F&cCejdCv0hkHPcb`tRz3VT;>^h#`h6a2a66qoJX2%$ z2qGVz(zL<-_h@^g;JFR*HW140w&fk)5ReeIS;2bLkc8{POrKR=x88XrGRRvou)^&s zuCw^_4L%|?27PzpGtjf6izn@H!JU(-u5hp{2OcPJg+LkUmD*cj!^GP$eZfqk`&@Lx z)P|t6ZY|5-)GFhuFD+Dud#@J~83_dbsx3l56e14RbFUcQL1YDyfi}4vV%_&4By4U9 zb^|JH3s4~`%|l2DPs(O39e%TvHL|8qwZt*CCvJ)m*)^6Ktiak>>|2PV6%-I91Om2~)Z|q!#JfAY zA}f`mqFR)6#fJK$)%bheF%SyAV1~WeFMvId5ld+$qDk&2-HU?LgFlF_>||p)(x=zH zcNlEQX;n-Xg~M;yVsH>L@_y!YRFv;ZKwVAjQh0MX$kNy1AJdgXAlvpv6cac zlA3h--MD{r*@Ycryh9`&p_L@sRD1sPV0xBmrI55W)*fi6lMe@-$b0Isc(qscEqCax z!SRR>uvMq81klHMk``$36YSL478xnX1uLRUepXoHjo^u)) z9T3~f#xgJH#|J)CsXv}7mc^@(_lVZXq}ib z<;g4~`!pl9^97_dab?90Z)a!qgUz*K&17}g%A9DqTz)xBjvDW{Z|>$qVupD9&`QCz z0WiDylbl=AH?`XbfQq`m>j(QINFTB-qMi1)c7vcWdK>g(V~62? ze)xsEcp)1`W8QX@by~m-Q;TFT=TcW+#>9j_S$;Xy+mS?@2#P#+RVTY#Apc#ht+kSv z(oxy{u|t0~mP=HP#7q?(t3Rdj5ZFZAr_o8P?EWnNz}dAN!ymW!MoZI;yQDXa(g0Db z8WmMm$7k*rlRoEeDBwpDO7TKPVr#NyR}sKwqDFu^cO_gF_Xk*@9A>_RT#{?zW$I|)!;<{sQ5+9jm@7rE3lwpRkDi- z|MmnI>cxqTwE3vehKi^3tssfnlVubNRaSos^NAZo;eF_dsM-6Aw?tR0lafmh2-w|v zxT(Q^9cC1Bv`3pU!f(NCyT)Jj59t|>lZRRsAk-fN)Kt;(gTTy$GEFZQ7@uv^oG9oC zV_{9$^`oP8+%+-yU67)t|5_m)aOSq2BEl=x_3Vv_uqgR|HO)<=BERO`>}8y%0`3Z$ zi2i9mx! zD9VL6li@p6_+KBrvCXc~3SHebo}2b!2opB(JWV9*>G8!Qdjds$E^K3C>kY#Q^@^kc zZ+3Rd`2?Wd!Hl_f7dp!^m`n0^e`ESwb7di(MeoA@@Q3hV{WQ1iCX6cpXW)IQ(lY_z z(-Xxg@Lg~(*+L7!bP&@eKstU@G_UEsIw|ZERuAUHGf3GOJ29|7o|Z*GWtIc)vRacn zqC0$;#)Yd=E;Q-l^Ip!lQLX!S%8WYl)`+$nGgyFUno825<}}^cp8v>nL$*T!$&O|4_K>!4w8(fjDMG6nYve#x|o*5^<6d! z^5XbF=m2MKeSF!!ZWT$wNLg+=Id7gh^qnEuaIa=p7v~E@;Hpan4H(gb4%E}Q*1p{P z1~Ik!-K}ff42--rUHz0#5$2D{mB3asQ&^mwSP2NL?nz-8+UFpjHaZC$qTZZ4_3D%M zEi6=Q=9sEL2Vc5_KYkRi7#UY@Jlv<}jnm$irqMIR1yVl>wTYdTBn1|;CYhZhK1osV ziIVcC`Y*$)HtOb?3#t9QPw8{dHwrCZUqurx?Iz!p^2};ddQtuA~XRr zx#n{mlXI0e_45}UA`9S*(E)-D_t`ZI>-!lJD6B2Qf*rvCraDOB#EQ%qO-gQet+rAa zqMmN7K3UT)ahFQ@gffil$Z?$RFYba)0| zP))jX+@*>S?QMS3@WsMud(Y(LeDu4+$2s`yV9NUCeu&^bUsx3K#oQ%{)?+I1jpT`7 zi@{zm>I#3U6P3+Vi}GlBZ!cr2#Qu`zWO-ZUr3K(c&J*)YaqZZl{H#bikS{S>_F|@0 zXMMH`Br$O&%3)QFYqE-lsr3Xt0nZ!14*Uo!Rk8~BAgbis195*vU7=IiB?pu4L91O+ zW?fT6lmo*i601&->zZupOIW#_9oZK~zQ*Aj{nl(VLgx?ODnAA`V?9~!Ap9Xv*q=vh zQJlNIX69qXTRVLz=Z8qV`CdR2+dJNC96h4(mHs3kk0R`*zxkTITL9yO`-KkQJnVn{ z45!`P986z4Fb~-_jxPO6c_67X4vw>(8Mhx@Nndl|_Sk9> zn?+*Wr5+!yI_ytRf)L2JOH;Y-9 zeG-U#1d!lV7@vUV-NSt)brF|w*63#lV)QWxum+e#JLWNEf=Rz&;{+KZKNL{@moXF4 z{*<}X9z!X5Pw?W#@@Fe2d7Kzw?>t-%IK7zCJp-K;AM|V_JRL9tpqxL<`;CFdE==wv^v2Z7W=JRx6tf$yDl%0Q_V`T~h zqIndZ)giLxqP{}-0v1AnHevQ1*i#7^af}C2%2M+vRTO^=88hoaN%iVL{~Oogb|?=G z0BtFDhIkC^0gzBn8;F(&c)Ohv?%h*OVgm4VMA5uEQX@X(n#ml6)))k1VfiC*=nV774Tb z&~6J`frWy_#JE3$0&XCSUlZddarp2RcU8Tnt8_{Ss?8|iD_k-Ktt2w$kdPC@UQ6tu z9HD9a@yUL+1CZ64JE5pAg4^XAG&Vpi*5-saQXs%Vz)f%`Lx;KT5BW{)ae1xC#s?h{ zf9@k7>PIoYMdrSirlX!)2S=3-pBb-0q&YVBK*xthA(g1THjwMF!YddCn<6fY&^%QJ z;jdzcrqd8Hnm%SQW~;zofJIci$*mVL@UnY3UsQKi2pz3(&^cOh(3v}t7{3?GDyBhR znaE;#b|Y+5FaH$Z&*dC6;(3*eAr(4e$paR|+eiv;k{N%!`*WwM+%-~De+6!~qQB+~ zA{FYOvML%bJcp)MJpE-|OnRl}^x0$6M;c|SpKw#CUm(h4h@H|9@N(Vn9UftL=rSDd zw67xa0y#h%nX%|3m@-wb{&KZR+tz!SH%+EVV!hi7cegF|*7f@&`2^$WKgb?8TCIHD zVVxLKV21cbJF+NN{OmVXXUMuzz(Y;}r2#Y7pn!k`Gv0`MLg&)j8d!RqaV?N>$5tnj z2mGw!U3#Po1lh0<^J_&Hp6WqqBs;x|``c&y0F|yHp@v5%7rmzc3(7I6_VW98bWAbz)p8Zohc z(&H;C*F%no{o1kl^9p|RysEld;IA_?ad&X*NtgNre0HSrB7(!?<(JRLf&YmM$r@B7 z|9I8is}+2gYWXvn0S;o4M8<1tHVDlVbT?p{k~W@BPT^2;Pd=E(Vad)STC`%Y0-i-w zrhTV_n9Bj8!xHhk`Q3?ocq7k;`@W=8`T48gdJVptoSuyD&|5f$nm?;;ujp?cS%RG; z{J1a-4TB&6BY#;=D*KMFPT$;Fhlp_b>tkybp(}>~$Vi(OO44>IIN$3gTR!p5*;P8! z;7$Lhi%*wD#asI$s3)L6#-HFfor(LvCKmr(6|Le7Mbyd`}ArK0y zUVZo~p2QoS!BOJc!fKF_UV*=2LR0f&JVG|7R1Y&ra9nw}2jWb-fEme3r3cJI$siql zNd7TW#1E2KWL3C_tA7IrDDJBH3dP+~48L$c?mL{bXgW@xdv}J^#*VJiIB`mbWurSW zo8fm7d$HXLf|C|6?6e)kSK=dQ>XEI5=JXQ@=gU|EhTD-Z6z)%&@Scvm0u6@*WMgez z)Z10Z;sod^s_AgIS2@F!P9(m;Q>%-<(b$)Ns)Dw+R#M-hYw)6#_~U6WbBPRX03ZOr zu&tp>W-#_iD3*t^Ek>xP2}exquGZXq>0R~#`@*6@Z2G6L_CraFCD0+3tc9SwQSw=F zxnmzn3iRzUL`GYM4`NYMGNgc`1P)7+CU^g`1sm%n$U7fp331vxAD<}sykle|BvLv( z_TXs|q+^M=7~WqbSZIJ&$7@%bVn>kaT_D3&a(ZGSgpoP{yrosE^+Y@k`gEu~ji-bZ zguj>tfSU4=t)h|lp9xP7=T~B@{70Xwq};j-Tb`$46dXmja(x2=PuYutM#eSWmjWV* z<*~Lf;UH$7L1+Hp)TzM)VURCr4`v!}*YYy59*@A4ii5P>-KDp^l;&=J`g{J{-_w@U z*Q@#9pWByL)NGLe*JwQ%=KOpr@n29m^Yin%5;+uK?`yZqzVYzOh5yd*$Tya6 ze-=(lkxcZ}M6#sezQx|Dxi6%xlUJgDTU|)WDVxqsWw%Ept0k|z7woB)N+e4ShBqC{ z!ESCF%#;>n=6mGJn(Ci7uG&@*vX|1NdKXe&QihOrFI6PClFcu^L>-ZL)#OvMqz7Uc>?{dm;2d z=Jdh*po^qZvCFHa$v_5KU9q*-iX!5srU_Le6&&B6bKcXoD43sK7laXZ%Pv>?deK2< zzck$!iHL}61#eZRL8o)jST{g`W%}KxO2$%hTd&l4>?9Us zLV;;%-h~NZbKH|HjJl-O&80v-M z&g6~RW(?UWR7x@X0y1294<2S1)-g9d93P>6@h(BG0o-wmX9zj5gt=eRda)fJr`M3g zgvi_9O4DL~ysSgQBD3r`Yg9JA>-D|0PF7Y!eLI?w{xytX>HxU$thXq>qQ^_Sxw9azzN?n6-rZ1Z7EY--) z{*#o^S9bUXQRfv%NcCu`GgT2F{ss0f)gbb~-^#9NfEIAGUO9-d6k-PX z*Dix07QN5U^J)5W!CJ<=Vz{8BL()|do!N}S%KF5%oX(W&?^leV$Ss)kdFZ-(UG?z~ zX~Owq&y^-!F)a&pZLrxjGDp~jg{4p*K~U`E*mX3fyPkcD?;DYj8s^uwOgu&`w$7dx zj+dHr<%*Mc21yz3D6Lr^Z#JfDG(4$q3R5C~U%46H1dU3{Lma1&TUloMaXS+M5-csN zR0ZJ2$r1ctm#f=ze9I0?Tl3Mc*FkbQlDc zY2xi>d`n2s`Pv<*?L=!kFwihJ(;Xr82V`ALWwmvD<%_)fDa;`;H@%AjsucoOR|8b;1U^KF@lYRZ?f#`QTy6#R92 z<-X6M{3N#Y*G$THg93s&ygYZiWo&o*&b|xeu+68BLGp)NOV_S_i5d;<$xVv=@jxlf z%x8J*ORZQJI8yFzku(QCp?$PS2PeN+YU5~5<3F;c#8K&OTwR$SR8QlbSJZy>? z5q%-oUx;7M?!pW`%!qymGdZg}p-og)K<^o5FXLN9%*AMW-?_O@?vQLZSY2-1Qu1<95bM zVyf*!EQSR?cDyF@tvGf96s3Eij(~JXyov>3`8F}>vKMOI%9`@<)cv7~Jk9bb%zOIm zBik0H29}~Yc;|@F{njxZmo)P3qL8_^XM?tP(qlbaFD<%@7$Ez zI;Xj{;}AM+@rc1Z9H#N2ZcKL)k?N6z9lYEFX$zwkZCaG=X^3h@DjE(<1(JV4NS2>t zCp$*8tg!>NtLYXRMcoEO+PLVxJE4)yv3k8aP(RqFW?eV?X8-*x<@FcPo~uDsI!Bdo z9#wSnvi&>oGz48E^bLBn2`ve!#5#Z=t$jWkBis^Fe!&_c?q1(U&a@ZB1@-u&qH~hZ z6^A3kn=T|zjGV0UO4}(KQJ>Lej4&EJNQno2QI*)5F!!f;Zg^ttD3LttTVa!R=l%Oi zj{mQSCV8EW{GFhL6drm&!O;bkkpHxRuX@tannBmk8Oi$h*)4TegD7X$s`GEA$w|mR zF|K-?(+H(g`#d`ihkv_zNlU2-Op)Qiuf0+YoYF-|8iBKGvt6jBKOC67meMiU*Af?D z9{8kQno8#WE@5M}O0cgV1B#m{BO}^QrfBbj$SM1m4-%;Can~=4(SnBF9jYhr{vSuN zSQgdhBtMM)J%>gb1VY)xM@IaC5^C2UG`rSS?*ENr^b!;G_d=n2#EOnpGg^k?{)Lo` zUrV(yyN$jCenymYq;{;$_u)sHv#)%T64B=SaZn{FK91X{yd!vfDX@ijb$K-_Iv7@W zD+C!t0e`Q|TCRxAAlG%JoqBIgggi;UW=-`v`=}pBGG0Cngj-i+lWo%+@1}?# z^V*-ze$=;<463t0;Rne9L7)lE0h2EBZS)KR22N8TvEl0m-Z zk-3c2PVlH7Mm5l+9NZCIwcd-B&l|)B| z7$EBrr)sI63^%UNkj{4WDCX{-nLSNa`gV>AWvZ}sgh{a7e&opV=n4_KIsS zg>)TB%$_yPv7D}&CU_ejpPkBAH#T0vZxSq@@rcjy=+0JCM-+em9}8YQxFhR7m3%s^ z__^4E8vGn1P*%uONoIoO!r;-Gf_mtf*L(R~J&o|NNRxpTRv$c#{Fh{v9DFhAc6CPo`QPv=1iWm96jYtmq z9{DiO9!vLv$o%{}onLpqo+9`jAx*AcZ#3D(s1+1t>-#N-QNH#1Vs{?^@aGgEIK@v+ zMqMpZqC25{tINsg?Q-ediw6Q?BNQoL%w1nIzuflXW4Mr*hz#)vY4YAyy4FIugPbYh zEfN27^RHQMPD-ja`I7S9*`riq=ijR#W0&WY1%<7)^`naf6J4Rmq8$>cAOq~l4foE8 zur?fvyL}axAN(|9cM8~r%OnvTf=OBWsH8@4WiNGp6{C1$aTvec^l%5$UbH(&{W|ON zee28JZ~lT}ivBEIOU=T2SAX@>^%^8`#un0mFumC-Xq!tv$Rl|{uLb_5YN5Iy)I>~ivL00ZDJM0j~$ZV!0# z$%@XH*oMn4tfn+|L7f(3Md?b42hxTK))Y0UAoz!t7Vgi$z=>PyS530(isJqr{v4Fc zLU;*^kfw(i%|sDEe7AWK`8n1>bZf8<(V0QN)794VF6*y7eJgjYLL^hlU;+DSxx2f5 zlEk=UG$TM9dmq3dLivO_6B)Oa`aMJME_vo|qmoz`aIJkAzMxaFzu11Ia(?N^ z@=}_DW<=vq84R_5fpv0M3~!iA@A-?sce$@54VPKQBaQZs>L7N*pI!TFDZAt{ZqwA1 zp?sGdHYKWZ$~iE=&@I0Ri8J93Nd0$gNZ+c-|MCvuEt(}|-`BWJ(`VVUyTCRrT92r# zq3CGgrX#Sym57d}`W^t?FvPrPUrNKoSm4%|Km#@S zO>UZ^+z7IV9Z<(}%aM3K*GS=4o6A=tvR)R*O~Vhx@>fPXL5>zP`OifBKK|I)H46k_ zy{KPqiL^9U3mezM-Hv&?qlWl>lPh-}j@HNg(i)s1+RvJHWXelu6mOgwLN0Z0w&-pB zEm++qmtTqSazI)OinQ0k`$r3k_z{a^ovxK)!g2?qKG-Lxri)|Fb?~$6vF6(NzDv%p2aXBYgj*T9cpX(@39Cy4dslrG==e;R-NK-R=4% znvtXa2PkrSJ`~PO2YgDN$26$i?D~TrGx|O>b@a!d+TXYX)yLgMcJu#*5s6m(MKl7% zZdR{%nUF;9g=xxx@h(uC9lV zvsZh4X`5r3D`LheE2BaX9+lQqO3Ki>I?HQZ5%FVRmM;)^%j2AZASN#L7?}#q1i3kI zBS#a~^6?Y2e|WUiyuIZc)JUI-iLtB|1P5vfJaAxkmfR>kqtkufu$txH=6$Lk6$Q}3 zH{a#|Zu(3JJV*l%XNE;x2eFt&!Bs#s2!(qR&}M>CO%`r@S=ZMNBTeW1KktL)<=mxY z|GdLRby)<SNV+h&(-#x1Ki>e6YNn3k&bEYctpEi$9tm_^-%m^2Y$__I zaG6l-G%=C0aknOPRBnsCtB=a61VD>r4_dO8v+E<^h#J3$` zQ=B69hKNY-M&z8$D08?SPtiAtqr3(k3WWsDKjlJ(-oz~Qqf?VuUUhd2;w9}~kOYT{ z6%U%^(dy#CwV+Qs@k_8d;Ny@}+|F6Pp@6c0uSji~F1P1_nzYbVGmeiq zpr&|$joRbGgaK{7q~7m{a(-8iH$_Sa1~d_54`4JEQr$unR#Kvnpb)D>4GQJ#?%sj4 zNk;HB&(r#32E9(L{dZ_=JjSx^o-~LW?$1H6?cty?+aK1kck^#6X~LX6_)={vx)XY0 zF9YqBo!m96#b(E7umg5oUtDVi>n%j3q=>DWO7oY>P1B-%HgMHL9qTfuEWDtvx%8GT zjQ*n{q0&3C4(m@ZbKNlXH3$@ZGQH0f^g;+^hQ6d-6*_-rQh|hRcNwFs?p)m)-RO@HTuwE zTeOgtAAe3@t32?>o=1G!D|y+{f>A2;9XVnsts^cF{F|2NKHsLqy6Iihg^|Ep3+U#>cgEo@aRc{6=& znOh~+-YANQn4|yqagpUhDZ3@o#1dD<~?b&3AFuOnlHzW3Bx;~T9doAdkGcmBT32(g!>nuptAiF{(rH^dlmI3%d!TzvVzvt{(Zmi94`QaXb&!Fb*egPSn>GLrVl zU_OeEoT>lKzQcM0xAM=`xaV{>GIWaM5wEDIK$=EH|34JGd(r2EpRs@QTlqxEG9*&N zgWT{Umbbg9nJ=$+!rt60;?w$V<@Ah_ZEMbS`r#tDA6aeq@2^*ju&@N}4LPj)D!N|# z9gw|tz$ubn(if>;?flR9Kx}UH3k@xrI@mS)`ZN2vj5(O*Ai*Rla7m0ATlR+_7!Y=w z!MjDP=Wgp7-?xzX*#ExI&p@7C)!%7xAY{;mTQM5n6P??MtxFG)bbZge~B@)5G@Zg^+{Btd5<#&&Y{uJ9z~6ox?`JqY;dZ#EHTGbzyHI~Q1LA?%uoN*@9bQ&XNinAhly4dhZ z0Ep)QkZ_%aU8GwJ>kd-I=T~qQB7!~4s`(Kx6)@#`?0zrFvlu)<^R_)i=DgMKgGeAj zhP4qEBt(x&x;lF&TEiaDKUJszPQ5m}(U(EU4&}>XIa1to+h2igJs&>26DxSBAgxk(K;X z#o^5dEUk{mOhG)@y;ywK^{Y#=HwMSj8b%V6aC_Z4Dq*J#Dg2N@dD=pJIvgL$EHF5iDuRz{KRtQpHy5R8Zn*sN)NRo}w`5BS z6*?M&)h9A|pGU;b?ZQ#ztlv+j_3(%RQwC))nAROuIKpa#V6kYAO=P5lcdgglX{iM< zRd{gJW%rM$(TdA7P+czMCi?l8Cu_PdIz9i^u)Xy^z4?Edqt6}c@t&cnfr)z9QEa-4 z#=is7igO;xY(+lngBB<}y<$A#M#A%fNAf#+go18r&eTNP6vQl|8uFI8Zzf6H)Hs2q z-~xI2Dss}Qrhj&FBb4-ivvP54g`W-0U~$9yX;G1 zk~C%9iQR|!|IZr)e!A1wkj^<;$qM&~JFMR+P;>g)b|XJHd1M97-y60&NOxz+XEt&p z7i4=Wi11fMY6bqD$5;F3BxZeRBZk8VS&T|l9^bQIios!KWZfLQ4R>O8MXa z^8fcsr}zW}FRIW@9A~)aE6l=y|16L785c_l(mwnbC-waXJkAu@?emJ-Zk!>(arpFj zH{3LHzYYZRQGd+kY`Y}i{ki>G!NmEZfWJKDH(Si#LanqIaX+UbPyN10lUK-4mRo#V zf4Fm^s2#2Y8OY~?3MbxnK9|Cu07#enQW|m%YndA-x@%Ah4U(8)0tu!Y75iAWlE_(? z$nnEm$;*p8kF)Jh4t_L`$Jg^s{Q;*?@F!d^2U@ig`mR8{e`%L5n3N|qf4-=ywgi88 zcTGIjJvNZix1*)BQ-5-3WW_f)(Dizg z4xu!IJn1R{W^}hK_4Jq??_xs9*Wk>N4zze$CFUDu!q!4JZy$d1JbUyV+<^?ik|eMY zyC$fjl9gPewE#0K>=_(VRmt3xTG^q^M?*KqDNPGYFeqhH>}u_Jxx(;71=Cs@fTK#h zQEbR6QvffDo%6yZ~#?VlAsqx8-}ksWQiuErMbSTsl@J-jHF(! zg)wjC8G@zRv9G#WNI=tP)`pCn-2>hxHTKT<>+ZHS8guAZ5cYD;+3tdkrL4Q_2h1!# zr^BNRw^=my)PV5+Zt+oPhZOJ>uTP}q)#>ESM+tPBo14r>wt_z?^becW2EbyBoMWT% zKr#9jfFO@%haH_Py==$#ioP~)pdkD;QsUJg3GIRrIozqA+cloP+CSuf8^2FTocmri`-3kH(%X@N!ryvsU-@AWDh|gqZoxZ zgHgO5zpK*UHS3dd7U@@4>>F#GlD0C!3_W!np7j0vLvo(qFWKMMlYC)h*z#LAKDNqi zVZ(K0&n3CgLfcaqwGxZf0xT1=ejwX2F*|vetOYEvQ!BWX9Yw*<~{pK6ntxvhbHRJ!VM}|yo4^@@-jy~EfD?H$i$ny9Q z0Rzd{G~iv)d^xZ=09vR6y=lwoyKvfxp};k{n*1=x6PNIv{N8QhkY&tQp1V!PJQ3Xp zd+oHTU15QrgMS)KqY?ts^5c=sm6#K1aW&2FU z@5iuucKlg21RYaaI0a}tQ_4I0uddd{YcR<(^m7sNz^wv~VcDpV7n7-{Ds+e+nu|<} zJL)vaZH-Z*rC88p_3C_5= z#N!Xltf{w?DXIdWMtvda@TYJ1H`+geS#w8J6|~bS;}Q}evo6WuK=_soaw79#>NnBs zozI5x$ESFWzF~-9+LBb^J9)*VRG6q6Okw|uO`YU4NPO})lh|<-uyw1 zg#S?q5crG0@jCxz`z^!|{QIZ~a^2zioLaBHV(gsVCgqzv zKtwt&;JZ9j{h3Glkggwzc7a2!LIF0-x7Eq!(^q1hB`jf1L<)9zti|}9FM+1Jb(68(&vJd51+p72p7|5 zlgv6h8pN22gCabC`IeMK)-;IYKkws{?V@_zukeoSYbkApl-P-j7T_=a%!Jd_AaUYoJGb~c zIkNX(gBeuaBz0-ndE|x(hWL~xxzvo%_aD*0{8imRAdIj?ZJqf$y}2c^&Jtkcl+c>djP;Q--?IN*@ z7<%SF&PX<5;%7%-*OO!;==bgHb0r@q?3zMd0QQNo2lGOfun*~f1uB~Q1$?Ux?M4#a z6f5^Jc?M?btQj}SV%@%&AaVms(+{b^pgV@iA|pgTW7bLs9*ObUi6v8PHg^u556g-w z(yLx2JA?i|EyVvczYX)}dBfYRsaaaiA(I+kaFyJBJh34d@LB4a2YF22Xy^Auuk6Yr(xQMB6ydg2_)b?w^!%EY(wbv%&3X*+1$?{PLiCBlRJ0OURI&dTsx3H<%GMPwFr;r8Z7dyH9 zKB2s=xw_6F<%KQml{~^bDT<@lYb6AbU_Kv_MY^4Des%&Z5A>4ICVugWbzj0t2E``fvfp3D2-2=Hh=_?$w7uKvC_tjoyJVK~&@a;Hn+yc&36w(vXa zR#0Y?S1IzcNufV&SmHuM(F&!}S}#J-M^AqeFE4oCmZG&|I2@fI?|G- z9G^qe?_<`E>ArS)94~!2qgp6Yt<2kYH)wCMAuKlGI3Mc{J;wCLD%UUjLR87sW`&1{ zRsQkNhI30ok+h>S@Oq41+M2;MB_x?Cf5(|_p#d}Q?GG2Vb??Do`vf&4bBieYq_TGX zX|n%%K?9hgQj}94=;r^# zcMSKLtmV%S1)aLw61(XemBf8Fzti24=P;a^dYEX$M_g8Wi?mO$CJ(bHa&rH5Z0T$M zj@a6#+YCLl`brTk{{B{dEICyXFTQ!^8iDumB{$+ot-qH2V>9&|X14L>N;&?pRL-9m zWxwJ911M@4)c8LC6fqCAsl3u6Cm#_^bI^Zx&agSD9^c2++AueCM7x@i`j$RLw@+)m zZ3-l2%xw)6%shQ39{+a!$|S{}S%>bA-`{zG=iLSLZOwFj(S20>JY4ZwhPoBfn$f^` zxhV0|IcjE-EuT7P#Q-g)pHu|=zFWw@Ur4v-D9_?kalSOsOZ>F^%KkdH*9JwReCSKh z*!(tzPXKemY80oe6?3CDgS#3L$rSJ=QKvY(ks$^`>++FnK1hcP@$yrWfz`N|Hd zL;%6po+SU|etxeNK0BbkHs5@P8wlfR>M)Ouk)$ox2vGsP6jms{9Q;rHS~^y%vg5lz zAdz;5M`iO4QCVN&dW5NMNcEGk(XWXoQy&|SnqK-OS)rw@eknV@JALT}TRPtb2jxE{ zD|%*GxAEj^DAG*a-GUw8=FrWZ6sMKD3|Y0fInl)7LC81a2C^ev1&cV_nMZTOk=4HNC zWgzPhX4SZ7OD(R{ru3)T7uM z-M+qsS#DNLcl?ad!lHD{GwOQJ4c$C)?@+`yIv!dPS2AmtM@5jhiWHLcju|KP{(4XrCEasn^bX>Z(FQ+M3jx;OJKy^%%stF%R z=Cpp(JILSlsE*41Su#yr!cv~zr_NOK*fgy19*ZsJ%zRJ@#_eFT>h0}iebupZq-+`` zrLbX`=k5B-;{?TcSsluHosh|Y)cN(n|K~O7pJ%vfs8Nkgi4YAyFJA!G!?m&3z{rGyN$c((O!=|NDPphr+rvdt#B;njUO)LIZg~`J zkVtkbqg1Jb3zfG1+a4iit|DJP#Y1R)hcDGJe|gp>RjXKaF7R<&vW4g`UHyV%rHU%f2UP)+Ihs^nHZFgj2r9LTq`ZTk{ zi>2Ygyu3qD8YlUURs1CNbjbH`sMn8V{VHcTMxZy&CaD{>uO>cFT5ho8Jk|{^ zf@23g>!JVLT7|@Bn{%R`QJE~yNASd6Imt8-e3A7bR70$Olr0M>$557COgenwXR{LC zgWPadh3^(Pg)9!G)NCET+UC|DX1omaVet#oibDKf)V+03o9*8(_*9Sr1%kVT7I#`) zic?%#2oAxDyIY}1u%JbXwKzos1eXE{F2x~Oafjj#o9B1lojGUboinp%cK_J?dq-w+ z%k}-}Wf7Tjo*a0^8m){|eFVpVP#>1Q<58HNFRR}Da$!@k9ofqv^%%Hq4_ktlaglu` zTlt++;j{7L+I?Z{U<8LTZwbwU>Ah5W2-?3xTnmwun?^JJRW}Lim%w#vs6Y-lI@xgr zobf^-()*2QxPYgw_z<1M+1l*)jDI03M630YtK2wurQQ}nXe$$&ZZm{!aoeR~^4{fM zxfMQBSX59+k>Om0EUR35-3A!5SS6HtjStHgyLO+=ww7JW(L3IyUzpn6{%V?>vd3Z_ z#@Z)Ft;v3p@R0fVMc!Tx+jYjHK&Z~xacmJu##8;hv7AQG`;;M%8~vayQ{sbKit6@e zCf2r`lAG@)$dmjoBVU=}iRvoTc}ueU@iE8v&fZ~mS?e_NPWq<}Y`g!1WwwLqP_qTw zfb{M}%wGpZJtEG*&Q0=EivyF2;4rM|Wc}GY6ZNza{G9|Zwsq5vofRPgqpur43wunX zk<`|AVY%fqTPq>AX~3x+_UvrNnPAN6k?iQXj(!qD48VCxLr2G>-GQW5?nEAeqMTg9 z_-T7d3AQ|j>Dp|k1C6-;6K^RheLbxZ)Dyp}>96^J`+8?@f|%PYJswY!B&B5u0lUvs zGSaKEF7*^$m46%6|AyYt^zyI<{v`t9*k$hMd+YZsMN zd~pU%1Lz}z8bSTGvcA%S{13}cG(=T%oSOxgxH8|>hjcPZF*a+60`9NrVQa%5eRiAl zs&5;GwRIn7E67v;`1jtJ53KXX0ilE>z)hCa2}K&RJ`Up4hXbCzt9TO5;KPprPBEXg zcv64J1wLY2D<%Z~C5+zRE9<9T5t3tCm(B1(b$_%ldjNjoIlv{&Ua$DUG4S#Lup zYnv>5b@?)^!)Ni`efUp6*%e;L!(fo5gL3EimiFI=P9hMZE@v`(MAl0|)QgrAp`S_K zdM0{xyR*WzSvJ%(hch^*oRSt8lWe-R^83+2ejqufI=})GKgto|X$+sw!8vu^KfUi8 zxokCQ=`u8lFlz~qEMnYOR2jWwpmR_v26jJ6;PHf{>piT_kkH)d|KJL9B zZXo@hXU0JU@69O)&<%+m)vi;No1sH5^pAHrzZyG5e6EVz#Jx`KuePc|+jYg<%nW}d zhMHl|RTNS!qDr5iMz%##x58N#kH1AwW46cZYppt~`t$8IXXF%nYno``t5}Kr97195 z=A5{t82;1>x~LP(lX{Pseu_!38;s@;mZ@pP>Af*_Tq}1a)~9Tl#F$)ok}7i}5+W{P zr}L4=K|4W{JH_TVo=4`@g73wG1YAeIgM5Szdvn>9>k_k*VSl;t=q0d9t^WND0`is0 zm3&?sVjc3ajV|;8yp$0==5yNuy3;_q3s2<5wU*dYkOv8Qz>iiQvxD%9GcWUN4gn54 zk59R7*dQ(0q;ebw~U))8H{~_b11& zY(N7(S8o!v_~buEvCFCp>jVL&_f)%Zt!NbIU7LI)^;7zBg|nOs$90%e5DPU%A!$iT zf-GCKq+z7bfxb6tlaHIykboS1Z`{ekrUaQ}9;cuOg&cstjk`HM6v_)X`_mFBej;Xg zVtWm~vta|rnV1DQ<&LwMEl;4Zk^K9_gZkAK`D8&%M7mD$UO}bxs-$TCC#*sR4By(a z@K2<8ycV7Hr<$eIvx(Wktv;7NHd_dASO_GMzwp#P+-#F*B*nPc5gX6Ap0(YpnQULU zzD+oJhh;t%avVak@9xtf-&=2iEQoo`{$Tv?FoP!b&y8Qw|0%=#)BHU$>y`n}hluG* z$iS|#aDLn_zcERdSx=L~%+Gxu*AYw~bO%NAvaI*(_J)^i0{N~t1S)(s7c`uHjL&?B z{V3|T#MWuU*M+uZ8=Svhwa9~78fX~3SuE}c$#LA)WDSptFH;%0c?l@X$k`?;ZmML$ zpr)Ve;_HF$+1>~wdaAZQ8ukF+UvqpM4;%X(^QaK7G2Mer5EuU5xhHW5&oQhlD*fDy z#)Xr%jBKPcE8HHoOcWkAS>Mejk%=2$-r;d(X0IL`zn?5>HCpm$_ zIJA6b(zE95GW>VcQu#n;1DbHMz*w8$WN7)le&1{ziNK*@G&FimaD{o+OBIq|kb7}c?q#-0~beWX9s=#EKtuWrn;(~%K(w)UCP z8eBYL@M&W18sZrxQOoE1o}IsL)a)dgl6TJ{p{_h%k7VzX((zuB7pts3>axX=wCI7I z7P)$4&3*DgNN!RJO*H4~I?lz@k7V+W^U6~TVDK?A*L`>-I5B{0E&h>sH%&cjw$~}{ z$6f`Zu_e%uL)BYBob9Q$V`bLwMqmoB2%5rIVSLIJtMtT?=}OI-chwB>s(R7 zFl)AN7F}(lS)bbBb8FS*<<5bO_4SSjotO(k6^b)+a12cjzTZC}>ahyKC+UPtMh2UeaZFxFP1 z?Bwrm5CA6+oLCZ;@cflJBx2(<8&pQx3>!UAkhXnNv;3%0z!}>+Ysjg#j&D&MTt+zZ*O*cWDbrCKS0n=R%D6!8sAp92T9~>Gvw`j^^h@3Yh_8D zOeLLcSj(=9gvV0eLY=N{e8|hW>uLq0*+9CSYU~)}lmmSx8BDeo`Lf$(!Zy%REMwVUe?oxJYLKMzR{gEuJ@XKs$bnO^{r(gVjU}fbX8}7jl3wSE zk$j@30jQXD&04LB zh9ZjH&MX{bWA4F$`kzb2EVSTKDm%n0Z)h%P-smk-L$%y_Py*p48vl|JX2k73>ludr za>SmwPrzJ%JrBE5)xs=%@dWd^UA$~7eB_^JIo(nOJe>h+#Jd))kqfogpYZi#<<{)* z02BBxg6Q3WhYGbDm%`;!M%$qm;1!6>0(A)~t4TiKx1cknfXDAS`rCy#b(0}27vRHiQ*wIPe0FKCgC=KC67JYP z;ajwYhr=PS`RPtsD0n;^QgAe6r@awFOOYu};Orr_&Wr9UGY7qS#%6x{GJNzs(tR=Y z9!!g5vORaYdtc7V)IMbBIt+Oh6!-o zEk?7>TfRj{De8tFJ&BR48%oL+<~|V>qNT zzw<}pS4Rc&kM>PQ%eyNK!d8k}L|ttJBCl}wbwOIky5w(MUh+^gs=7afSi!=YUr9sR2pW%r{LgU7dH?GciRnI4pGYC;%TQVSiMHkA* zJF)vqZuyFHy!JkK7}8IUI@u$xmT8Z;n)mF; z!IpI*lbkAY<>1Ew09MhH>EfGU!gJ&QR5GGlvCyvrG_9KZR`AaD&hobaD*s_kN*!NO z$6ha}AQV#KjP{59>m5J~!vDW_68zu7|L!RnC+Kq|eGo;%q8D{*TN@lEC-(|oSNEr^ zs=e#>s3U$jQ^?-JA6>_F6W6dDMEwPepl7eD1KJ%)z+s951UA2;lZ&Gk!q*T#em;^V z@}-x~U)8_J20h@IqHQmii{A9s!`}+y7=b_yufv5X4aw^QJv)kjHFdO|kHMY<0x5A{ zm()2F^M7WK{tR#CFomcGYbG58BKltN{oU1CJTFxoD*e!6_~|*WTfU7Z18`ToX>`8= z`Uh>m{C}Z0bEZ+wfve;l(uNJS=H%nTfy2(OSyQ$?rHs5=1Hu!@r*H?? z69KLo1&m@HB&6WElpl52b3DBqqs&emjl3rK7=}n9w$YNojjOEggf@eW5_^SL;6*gS z!Zow0WAJ(3I|)!Gu_(dTM|SFV>FdEs)<2K`qvV4zH1u-e-VvR0EUKtgxtQ~a0B}fZ zrRD$0e(sn>jq)nxtlIlicc;KP&$X#%^0^KRu9c=gVB?euTh#nqfjU8QC(b*Mg&!2P zl3-wsCy1*DK7``e&*9e#c+QWK873I(b;M*ZUNm1AYtO{5xfut|fIyJW=Ftsh9%TEL z=#BZy^KP%3zlaEshl7wd-S3BE#TVX z@GNJ<*(i?r1Z4^v&Sjy+X{9&_8E7AbDd;>X^W!A8h`Z|Gh$b?&8+DpZnh{n(UufP* zL3?u9=Uc$E_W>JhU1T<2|EgjBx-jW#Nw7dQMrLYjwJqkdMqnmS!d-f3AkN1j7Q`}) zf~YW9yHZ`y&O=F277ajp`Go_&jY?N#qD_uVQC;-%%%$;D)NI8Zz4IV2Buu?^&%MF>PL(*LY z_{rnDT1PDiz4roIYnWaD+?vlb`b78Z#M<6Pguj-Z?6}pWeT|za)t2!&VXZWsF_lq| zlA~LOiimxj&&IQezh}fC=&1-;E6JNyVW5EBa;ObA=E6=xdEnOI^Y6A8UOT4B?&DHW?+IP!yAR@41w^gCY>Shk>9}fW_itTKipFwJI&IWE(+m zPK^BdQsLFyf``z2N6(^v4G%d#?9-(9nTLvsk7C$%hUj`LFTQ}_T-qzLJ^Z8YPyq6v z;Z$9xqgz(=J`ke#jrBY6v)by(H&{C;5DRLHGEf)`nY>EK)ZWr|Kc~chR;(r#H|YW! z{tmDF3z ziS6?@Ze4zh>celCdtR{NEDtWY3WAbV{lK`ssG6TT0^2mSRR*S64$GWSz{=_BW1wf# z?Wf;<>MQx|2c>h0_;^On_Vpmv*j!V70}PE{)LhuG$=)21nV&2SuWk=O*iKWQSfO7++E+wz`q2PK)m^ z{GM18I>+%v+}$2xhO4kWvEM|>n5KrgbmV(Ws1)$4ZbL*aU;vt6b@+HIV5|fQL0g} z5fg*0cE8TASVyWRJ<83hc0$&>qN3HQIijm8;FTI*S5jv9%PK42j9u4#yzi$YcTZvR zaPZpro-7=&$m@i0;Yb{=RA|7p$jxdrbo^22ehBY=@jb}dc{;rw^OS{B^KPsR1|TjKSQL*#dccuT}y z+F>`2&{V-mNl9KF_B{QV!fc#M&vduEatD^x-07w9Cw%wG%7YH<$a*gKLzd$|oT?=8 zxR-^|#v6q;S#@}}SO|XG`+qD?O~+tw;HUs)afO%$^Zr5G4o-R+t#1-}Y8F$y(HHle zXh@%%$du#Tma&H zgrC?MpY~-jaIavNWik8D@vmZm$@AaRhJh`PE<(Dhc7|^9^UI3N3`lda4^m7b;irD3 ztfJ8eqvz!|(Pd$MjH{*sIAU-MHMzPwCs4H3?A-k(Bd{;g0hb@z2$%Nfd}$PU@B4412xa(4Be`&hBs#KFNM&{Mhi8Y05WlQ zOtnIS_gRytAKr@zW?MxPWuC)dqOgg2It}E$t$hpO?itY1LAGYrb*oK;{8Z9K96Tbo zE2;H-SCPpnXYUaBWTH35b(K}@UcxbDU4raZGJvjVH9nC$RU)us_5z4hzl3`y>{C3o z4Dn@niR(n(yP-V)Xl=QUB7Cbxk`k#IslHod50 zyK63&TxyTrFdPy%GrT~HRsNm^i`W18T^9SS_YNMG)H~bX?doH9mj(kH_z-B zFtAj+Dh**PpTKh@eI-&kUQG{tlhF@EILXPRW1pc77j9}MDGe_SrIb58GH;g9OQ&4a z?8z#bGcxBqr(J}3DA@Fn_>A{RA6gnyCcY0PBKh^e6#6W;!ZslbkUoDA0a?WJq_ zl)0j!7|eB8t@BWdQ}gG|gz4U7(FX9jgN+7V6p{gixYSGuJq){hYIQ+r)Rez}M{7-1SPo-@<_(oVFp#wuI6NWt)Tx*0E!@D+e?0Bze#1=jdhOHfx zWb}PWm?c&2V-4`eWUg|0O!KX>idt+j*l@+%z8aPAO*>5OMb0(M80@td~+%sA876f|Y z8#dfe=BdL_Xej52dEcf%wD?XHJga# zFA55ic1SQZNW+c-3^I$<-b7@Xgu7mrF2n0>^NA7zZ0K~=zD3KQNJJet?GB2p>Ii}z zWb{Trt_4#8A85MTX{ll0Bs$;BRIs{Yxa+(iM^P{fMpS-T;_dCS`Dutc*<$`0A>1A_ z!v4tdI{B10Xq z@fyr_QH0i!VQV=TALhqmnAYmv9N;nwR?Z-_(lofW>D|k94{@l~)1tE9HO}^HwDlbu zN{em|<*e~?BFb{@M{W6M901g%fEV$IZq1}9Jw4MMugUh^Hv?A17XVkEg+kOM?F7?2 zAQ%;f zc$|9$xTWV~&zARF|7Lr6o-o}_mwG7*x6+6a#EdfVW4e<2R>64ML$C8R`wdR_)MuWP z1#Px2u5XgDAIG*^CnSR8Khn&+k`gDML-sC>Yi4!wjoTH z1a%@{5Dj1b1e*SYko*=Qk^M5_pk7))`_g{itYnX7NchAQijkKtXj&1)_3&zH=X1}U zbu`fBQ6}mn#+ihO@W(O~Ie)VQxS3XXBT8=4bg;W|tw0 zpy>=plM8@vr&YWr^U?&%>iv!))5Q}9uvg z;J()<0mouvtX`V+ro$41LbF}k-B10*)1`sI@rMN|$IdF#zOXqK%>EXflnGNIZm4(g z2T~DS|LI<)f>-&Awos?hC*BhZP8{!%Mlj;KXxd+*k-Lw$L!cHWMH(T|57hR>o%)i? zQSi##)6%XBiBk?vWd=%qqxtOghaFTHjv8yz(%Xq?S+=5 z2*MkicxN0FSW6S^c}Zl&X-(n{BZbI%zxy2-+@apOcqnnM389Qz2x8SCn|+to(v%TEvsWdKt3V69MI3OxHK!b8kp9HKI$4xw^lN z1Wf1Dce2i;yHg=s(Dmk~X{__%g$uBV0-^Lo?{|wAS1e#q$hUbhXHKl(=M(I$3`qv`5K#yA6xcVRYa)9x*6stY5EKl^kr>t!Ou1&Tank3 z7K-FAmIC|V5|T|q<2LWhvZM&Dls=*!StNhAKOH@GfEXQb>^2#p;{k4#B;gEB=YkG_ zB|1&*vc8@*jFIuS0Dqo^0B=gBI5zx6b{!cttB|p~|;TsosZm$E|EV8l>&Tl$j zi4_YgnXWW1Ld?VGiT4v)`~*{vzD_;%&#qLuulw)x5n*Jtp@cX4pSzM&o)_*s>2=u? z?Fds@K;33nrSVlMR*!hN&j$7^#0U1$dD+!`_69;F{*u_* zQwL@cUsXPdqo~aIP3boYnLY_Tw3Cs ztnaEBWXmFmtgpI>i$~|R$x<%6min|=(paC4!RYFb2sFNf)`|1k>H`J-$Xa|2ZRXX( zwH%O701~b^6^kjb0HOYjD_STCMLx(^^WO%s#FdJj`1qBk+k!sB8QGPG)$mOjf5Mi@ zl!lC_iAXuXge%S<|HYVEGYZdf&TLkQ5f?xghl--Mf4^=W>|zp7+I zJwB}`T3F=KyLGwUuO8dg1Ei(^dWes7WOeB4kLhaGF;Y-q+IpiKRSJdTTl#O2z`vw& z^Wq$@tz%BS2l5Wxe&tNbOKe zF5-HWy&Vw&!+d~MLH zm}WkPsm0sxx&9k#kagNqY_&E>Qo5YaUefLI)7niYpDVRa9(X77zFKdc{WlO**HyP4GSKvVNrekF)gsuN9=q z(Cj0H*CHSJ*t?60MHgR0(?~#Rn=ty8>H&KuCM*$gv+asGA`Cd&Qtf4GYpQ~VcMefx z6q5VWX4R20W$l4dq_?FlYv8XFCf@Cn$xm5`IZTNLIimlB&ESi*&b--|)D4r(Boihn zGW7RR~ygA^q68mC6g5;FU~(x1Ekx`pvs%}E1y zH~3(7@2}e(sy$gefTU%4EGO7T2uioaC`sBM`_jH1a&94acOzvx0U6!;>*QL;{B){? z1J=1jztXl0j=?6o8S9_T?l3fT5~;Wf$fM0<&(a_Mp@h;23qD+n;X!$Q>{q{;S%Oww`^knRG6b z=&L}?_;PBM+eWjb$)dTmiJO4<9WZTC6&YLN5~cyFq+P7&T93IOjyz4d9#Hwj{-t>E zb9CHm@w=|VoP%|dhPBA34q8FVvXlvLeqQI4ZgE;H@3dzJX6@^&1d0g!Ne^ctGV$hj zcu|lEa-c<=(p|@1V@X1YG`awpB*c8a-HZJD&KpV`E4A?1>y`_hxs!f?YaOSFeX!rw z$mzwq7sBxc?AiQk6Lpt2WzV&K#n28#46A1so=iisXLj+{=M->7GLGzu}Ih zUwubm4Z77()GIj#_OFD1!gSXmqkc8>I{vqDT};3abA)`-4w)!_mBvB(@Rn(CPaAF4 zx5JuY=AMW=%c{s70q25q`Ye7)GePbbXy?CC$wyR1Wx z+45a1;X9}O(>#uv>Xnr_kbgK&v$x~D;PZ3C8i5Qvb-kEtvFN`8DQ*t!-r}jJ1DT6L zTxtiFjfylB;^P?uHhK0c&Ie*uA+?Np^X6${M9OC%}oIYcBkO=nnku;WjPhQj+$H8>omqvo0nyXXQEW1Y$f^p;v4P3P0?$>=(ss^upt_vg49)*^;9q@&CC5j`A1y?XGhJr5EzhAF zK1xhyTYUxo6+^PcyjOGl56zRG0}`p-mRT0gn0NL5XYJ+LGe9EloT9X# zL?2c75)KZ!C-^`6fuXCS{}0luCMi)jq$Zt-kP?g5P$uKkrJ!3!JUVfTs*VRye0s?R zd#N^MIS+UOme$D(^G3W<|8j)SKCHLS#t*$M)D4DyzRPmprTKKZK6(cU;ECKr`Xozk zz&OWSy#3mD_n{7cXl(}_trc<0WxLF73wet>$&)^8jYlh*qDCNx-mM_>RnXnBB1N2n zqv|Eh8vTV$V*;#%0MDESn+shKTevX^WMmz2y19 zb&6ioqPPRNZVA^T2IZ)aC2>>bBML~OnT~{$1S(0&vO2{XB7KU8$VmJ6X0t+2ng-&R zcG8z}jdtm;6r_GC;zX-?KZI<+J8h>4PLHjYpxKnq5zjIcJ+-NA^jhf$g{*7|j97z( zFc@_u&ZaUzZ|vy!>xw@pylT5-aR~T@T?T@xI*ObndYf4ytyKfZCE@8#ndwg70I8v> z0e9E7AkVRMVF9|LcLMxrcX+3gyk*G)Gk1%h0&011mp?@JHZxL)aXsN%(Oqv7d6ulV z^>YF+_O@dFR-GIVH}v?&n|;Gv$aX4teSiKn&Q~VZx_1amP>g)$$&?l*anBNYe1^^{q2oV8{;8`r z@ddIRn03{JaanI;5^f3w)wNy^lp8h5#n{U<2wfFVRKrg`4*8GzRv;_UImp#d5=X;Y zd1juhpXEWq_tuRR#n9%GzE=+S4opOxB7J-aM*M^B(Bqvz;R_?qpO?|2zLniu`*uU3 zG&c@U@=kR4EXLXENG~VG(NZ9wXN{UL=*Ym+sNe-N>@|rf=0qRqY+4H*%;^~}z&OT_ zgR`0vY=q+l`A(>n8dA7+*cBUYpV-WStAAUY@X%72F4Rv)BKM@$4{JK=yBV3-z1UG! zhV3w@c&?|4)HZ+JxFq(%N9G&JS*JzX^NAYp}g3a|+5S{vj@FylmQvWzpH6jHwc z3GnEK_2G%Hv9T%@F=CSnO}+Ld4-Ktrpeg<;Cc0rNpP{0efZof(7w(k{DIqsrGw+0u zK6*=n6C$}($V4VF8wKb!hU1PKCxn7|2}bw%Wu=&3Xh`J6ow1Uasw~Ms<>S+_lI3AC zX=>?o535B#MgjrLls%Et7RWbDILo(hQ|YG_n*ChJm=&Ie-)bk8#_j&z3TLg4zJ@}* zQDm_i@!|V0O`kKMCq^O@0Pqx~g5#=5EiX4oU3pynm$hi20zKaLf~LksmYg=_7R(#3 z)TK_lzpO&0K8rCo9&Jvm>$BHDqlkdxVX!>SAA?Nh10VqDaNqF$cls`*9P>)t*B99R z8px{LoyOpIs^#x}v%4&`l&%Z@DI_)6>Nx?@pi=jZo_(w*<5(X4@|GQ78`%J!E1-DQ zo)y|^A&002uNm96|EnS zm!(I_?2e&kz|cK@%kYC+p{PM|t#?vuliiCL%#wjF`YirTBo|0#`O4 zyKh=y2#8f`DN_6#iJwKd7sEe@Ys(=5lgr^|W zo*1p_gm$%~VN&`$MpGG!#YvJ!iX5{UveKbIg6hjp2^GF;6QL@m+j@u*%gziBq&5NR&od_m(mk5(=o z{C&NY>6U`*Dz0Xv&B?}>jbjQ2ZcL)#^XLe@jof~|?d+On2{panGmfGNhNH_-lR5=< zc5%5o>bR0ku5<}=I$g&>nVzDJbO9#-zcQi~%?_6G?bd1UCsoYexDlyN8#x4-la9L& zL43@ZY6xPgR}47BAjtby-_gyO!I3eq&UO+@MqDxmj)0~x&9hi>g3;vPwQEcUr)zcEVVlWjCY z0O3l(10tY4{FEJ25YnFck9nj4s2d;G*CH^OW?c=yL%vCtPP6L_k4XX?7gU`k7dvF*{oEoMu%;0&m0PL~SAC zj|iMWeOHUB8)u<%c_`j7ejv={8koB+B zu=96<<8&X2hmBgXsqqcXvg!f7_|CmO#mNW{Fsf-Vq5hT?`me&ChsXI?sAAao9XD3H zc&cc*k&9YBw*&2)f-AQM&NtvkC^`B?GEScpA=fi>H2)gqo5gw%KS3@_ZckKg0!$i%-0AuMr~|eSfaH4nOeFfWzH!6vZ}&TjH@P3!+ulwYTFHP;g;`Xk-mhU!&r{ z;l~l}&YyTL1S4@wb0zEangPZdl#GaM)Zz>g3?d(%vA7u2d;E19m0MT1yvRQIw=&{) z+smcA*Lx` zLu9~&-edD(KwNUF`S7k{BCm3oE~VTCe>!d=+=^7UJ!fM218Ik!(6j_e48%nuMa0Wi zKWf_m9VD7bSwj6m+d5vi!H?EG|92SRzne4vT~SPEHx$MHJLup_R(rCF6IA^Vfz%zZQ_F!MCMFO_UK9U6Chs;2X-;%Mq1Gcq@Z?UihUCu7{|XWA;}*R8 z13|$(-_SH#}{tR!wH81yfwxT`^TMrsAWx-`CTlNJ0g z^z;94H{_~6O7}AI@)%v+-Eef&>0agNpgR`g%lhK9SRK)a-Ns+^^XfU2#)p1~e!a6i zb|(;>+TcM~ooNM6Q{VDV40-yj6=FaRJ_(XG&E73k!2UtwNM*x#&?~ zTN2#}YwV@)s_Hg2usygr3Y+K%XQQ^=tzZQo+J~-9C!|= z{T37uE1eXLHhkpIIV>*TQp8Q_;T0B5h(qNZ7aK&!pN(O_UO~WmttBcU_Du%Ejqj- zsz5yx;=1Relwn#wYuwDwc)W2SoN}ZI>brDz5E7K6ViCmE+r^*p)K^hK_}^M`Xj|7W zQxG+f)@7Pd;?zfb|InJ&Gvze9Ni1cX4HBld6+joK@B?bCd!Cxw0PoR0t~)1DevPMN zuKh~4vN#9H0Kt6Q|2x}b$O03_VQvk=>gBN9T#=bbre>#vpT904(|p`AB@M2;mz4zP_VRY9Jo1&cA*_YGft04-Cq5oi=lO80Ks8WW3 z(z^lZD><6~pb5CEZc1?Wmsb9RAH&mGJ2Ip3v{Q4d4jZ;kA4461`J$P+%{jTC6V%fwfN)UeMGpWoEUd; zXBg}fX|b6iEEkjJdQXl1fufI$ffwvsRu0^~QO^uoQft~H7~GFphi)}}>qnEMi!}sg zJ?v?z%&DG`HJ~Be>`5Jsi`GWdl!x`}L7HaZPFM{(;Tb zomang9SmvX6L@s^rvBBm7e1e%6C^~kJb zhidib7--PA5Y=MM*%jfqyI1t+#I_mRLacK6%{;)2)~nnpIAEtPt3?~;wSu?sHh^81 z_VH5Cv+uMMqfSMd{;D_x<^vyjRwVa~Ft31u$hoRns4>1#wUhJ#dYX={I$9PEQnG zIgA&%J8bR{F)1j7LC`Vbu2HmGGvP)OZcxM5zgrW-=nubXMHy{XzEHD|z8yNwz`Z8| z=gwDD)Lsl5_Ppn)z6WU;P8iw-p&d<)wjNPvABlHXCasDJPQtyq+t#;FkV-0rS3P#a zL%jkpw<^B|31T9aCIXy~8^(5-`Qz|Fze=}2GR&!0QrxTIWs`FS0!8O^ zl&#gsW6bG{d9sW6l0@SJ%s4~f4-4ybsR;@yv9KX6BcsbB@bkqlJ z&)-kC4?Xu0H3`(9UdA2bIUrFy#Y7C7Fs7b{hM_(DHmQ->PEVy(>(XoTD6V_q0NOtG z21u~y@14osY%LR(vg$|%zt9^H=@-jh&({(56?%TFgB*ylTGpZEtRHV~IUk4JID_5r zd!*8%!N!WDUU~n-qoOE_NC?G!o7cM2 zOHp@WmMxHr`903nPuA%kw$8hj5J|QYP+Ps-I{v`9Yp$cc7u)WiDp<)feq4T%!P)h5W&+l+5QZSXT$z0`S1g}d@Jxg< z6SfjAKd{xb9saVfk1f(k?x}8T$1}FIx~R&qBe~DJCEw206|XAnC+1f+W_>}^kSG^H z1*noj5}vqKhR@XbX_A`9o)nQ`9UV-EZmI`he85?4S1hj(ucUos#26^V3CXuF6W)ci zPZa9?>R+gz{Ge?!p&(krU=!Eok`;Zt(#^Zu{;{w1`NtODszRn-u-u&y+*`VQ98gFo zW{S!a_xfn^TJrqwr&wLDSlXEQ1RJe4zji@!{s65NJO9fU#U^J5V#1s2m%1bS1Yp9~ z1Tursi#c!299Wa}v-qz}DTR$SX46VC@jJX%rG z6*9X&0<;1$d5_ICj#!^W5$7RW-H&0iZz~now0Q$#>896mqt`yVS;2K}Fa1;$8D-Zr zZ#~U@F7k5KDp~(-Tu?bul|i?k)?%Ym@6tc%gA@&=zqO+UZbbF!xFcgd*#TjR7>ymG zd>Zq>1Pk#)SJ6{OPA_wk_I9f1xvY4SkZ}|DeqbXd_}S7;2?Yi0pZWUNBImfHO@-2IxTw@`AHTh$Jb5}(gyAEzV z;}@0WFPNOrUSVTi&fb#utN2b8%ZOzklo{u^GlRtiu5c z5b%182SIVYQU<8b=b0M^BJyUFj|K$;3~mlw62}*yN!i<3K8Gx_&{cvoi;Hg;U+bHH zu^!yVm>=>xETqQejhae>tMpz)Og#p0PQB#;jP3;8UblmjP7JnK(J6DAiv&2bBWA&@%yaPPm@I zW(L!dW(@u-_GLV`Vv*ac5^}6eL*s#N+>PF8MeapUvYSqV_fgr~`5b>IEhYfeY|xy5 zN!WjB08Qr~Tdf`oE4WS7s><}zbgF!W1ZS*n`1V}3Yj3r-Pnvf>l4yvTc4|e(cHeE~ z$eaYiR+Zl0eyY$-*EmEcRA<0b+%x%7o+8=t(27;;vgaaLf=uUyTz#%P$v@ibTX?P7 ztAkR`HxAS1&A&;?)HitV?b;AH$#*hmAh=i;Zu#(2qr&LCu&gC`sXkf>$|=reEtNGd zA*gt%0pNa_o)9ps=wHMS=>oO3`W|WDIaGE}y)7b3&d zNe{2{ju*#{obP`!nbmC8i<&K-?8pUdvodSiRPIurqzQFSa`0!s(6wQOUT2=+*Nze= zrW)v7EY&zY!LP-L%=s|W0mZ{l&Yku?PF*MmhZ1@t&b2!~T&231-?+=FaV8Y^_Av{K?aK7Rpd7~1v$acedk@zX@bD?ULV<8u~MG<6=@ie1LSAFIg2 z5P$Uc)HjKK(luomlAW7tOg$F-7bZdC%y;VjVr&^&EtN0lF(JlT4KK`X3)wq>0x50V zku0xe+ArQaKi1ePu*51V{`99=-+kB|^?`$Mh4JxV`w~Ae|3&Jc&zCqT2*w;}^IZKQ zqi5j{IXN@f|DFC{HttOU50?ImA4_>-IEWP%y1U9D%q7koReGfXQRlowfMx|h;xcng zhkGc`oD2YPgHhHnF&Xc~Pf99PF#r+Pkr-^U**DFmKAKDMzS&?8psSpu}? z1(s9k@ke#n97<4;{wVIa*Jq*0IdI)y6*oc%IW_wTK^|x*Z=yh0>$?PQF2SJDAEt@wPu;T5wKT1 zCc`e$0{s(EL&5w?>1EL{MLXaB$A7u2cx@e>1+NqTi71ftU-)n$VL6`)l>UV<8~`o~ z9>qdbMdH#|X&wb#U=lh&onn@0 z3_Cn_>`+TBE^2yr>q742Elfzi`Phj=U=~W;=(EZJ(_tFgpY`6=G5yEY&qqm0%GIrf zo9un1mQF?^l(oW5>%_=Wp>Hne-RI9qKp(d#-YWR5xs5pb879U$=?j<{fE3~MNewo1 z#Q_fw-}KI92_>3G6#o;<|GNg2H0~$?ZPaIXW4y$asF7x*FjnF}KD(}-ObLTu3)*0U zS^ALNBzY^>>yR$H^<6j!w7=O#OaNmwx188X(AoDJ)JgQMshoGR5-GO&7%Y9pH!kc18p_xygEj5{()Hw^I;Iz21HoD4PqFxBtM z#T+6rFCHe-n}omcyd+?^a*-oPk{A7XA8=>E``5@Qtde3>RyG>(B@lK5;={89mMg_B z5UaLk1#H$qP3v}nceVlcQS}S5yk^G!3<}9#-f<)mP(rgTK`tlXKLP4|V5aoQ-NX20m1B2K8If$?jqr0qP zf0Mofuna;5DKDlF<%m|tKGCrrl2$xX63)TGiak*;(YJ%~b-q;tb~_!Z%B4y7DBaz7 z-K$lDhUzHvvonJ~)~5n*t{Bt4RQ+1}s*@0`tbNZ^R_u3msd)-^R`PZ7 zZ{NkR%r3{pc4CD87w;pVkW-xph+6I2fPd={m(s?l!(6PcSsV>p6^G`m%E*IE;HSST z+dAl=j83?iXaH(?qEui`SeB!ejrn^JW$o@15v3^1FMhPQ%w89~loO*_KWIMS^J6kr z{?8}9dysJ}I;sp;U3PlJ$MWfZS6w+{VR%vf9JCC9a7O3FA6{!rL4#Gy7Iu0e$VTIV zv;2r?*;;fXI-Z1~8MNjPMmHR=No+hlR-=ZfA4bQcW7??G2dL)_)Ldx>IbHhKYpxK+ z3TI+ZsaZ{(y3G?jxu?>vpQ-%$X}v_R{!LV53}s{w_~!lmz(;RNf`S{ZZL2B`s6Ic~ zk3~@m9sV?p@(9lCUp$N4ZOSI!^%d#q4hAe0VJh;pefR8LzAMTU%&F!}JVjVvP{8IS zugQ-7NA{5*$iX+g5^#Sx8lmY_VtW3018|SUDPTjxf*^e5+rGV%vCvD6TE;z`ZDrd0 z5W1aCVqx?_SI7L{cykV*|Ecee({W-wb~#($cxn@U>~c6eXtSLJ#!HyXS}s+_J`ILY z)hS9_eq?P+8Wy?%`KcVePV&-}KQkmf{9Czxs}7-HKWiizSTqJ=Hf!qRKU+0s|D4e2 z0Cn>cE7O}VG2Aqm$k$FIeSR07Rkla|NCf?ugXd0>aSm*mKKab}8KMlKro(U*r2n*R z?jC1Kvg)>S%{Uu-;9LkLP{HR|?r3HI^A@1Q783Zk5%(9TDw?xV!ZXDZ)<3{WO9ShT zW$(fX2_tJ&|HTdN2+{e|+x$_U_BdOfjh9!Q@BG2Ux@U#%Pf%QnZAwVl;66fFOw`W> zx-DsTc51#)a~~|$O|nrisA)GhoDQ$t4_z^DbHq^5iM*^3RE|^qC^N${pRy~sV7uZ- zvGyN{0mnIDy*>{d%*f(_S?fl|KB&B|(bKk?cmP1V9_d9Pe7{ea3Kh-rF9O`CQXvDerQxm;4g`xAn=TvzMll%K{57;^k#J~*Sc$L{>3`D=JS zrwtS8ULkp@^ih@LWJEvSkFxT_4%FxIPEF4nh4kc^>EFJcwgwHiQU5-m5-wA6Tf$Yb zL+5>fqHlEi5yRYt&~#=6-9D533mK-LyXd=ruB}*&P7<3>}Tar6cj=t3b~#p!aZuO^znBiL(iT!;bt_a$^&toF(W1t zn z?&{|M{1NL0fY9$z6Gf+Z#K;$uW?%95NK|diy^&$>S@kIGN=^8095?@Fj5$b5-b?LM z5UwHhwuf-voj|RvjkI6AF6lDYN-XxxXyLul(oIWnfe;R85>hG*%(o4HIvw#7Q*{!R znDOyG@;QK|YZc!k3zB=y`5Ft_*Q2?6>ufw}_^)tRwm+NU4LvjZT>tNpNX<~GdCpd> zIB3x6zqa1pT>Bi9Et`td65MLh0_9K9+FbB@pHZd?r&rGk1y?cAs6?igU=^O8;I>du zwKaGj3C_X(C-+J7R;hu9Ya)SAK)zymbC>z5V<-`J+5i3`CYp$m_X#;b{q7bO))+&* z&Kt5LcO8>6OQ7>imLD9fD^j%_{RZ2}{)u?|OEBv^*yxkHLBoDIU_BSQpDp2h97dCr z@$Av^Acv5@t>8J)hMdGbwMXpq@>HF^@QW)p%qfyeM6SG$b_yx>7I0hqy-?0>7p?@+~RDmqPaevMkOg{^ZNVu*305LZyAv|O;Gkm@gA|Y*{ zTRFcXJYvyO5}hnxg*HqK#$PU(brq|^X%@37G0hh|`KsgyRaXRfMD=zG7(m80p95aI z_W*d9mLh~MFxzl?0q3q0x7GONh^Ne>erOxa1OEp3#AweT5*k15f5+OyGV(n7JCCsG z}|>R3RGa2=7&X@LPE=~9r^e6IrQmow6n>mH*P z>x%njv76^){Fa=#)jNeQl|+2AZfc{w<*VVkB{%NQOqr@27tuFX{ap&IdyT)!A&MSt z&ypH4&tyxTwqeW$p+7sMdT7y<*eru9%V)A(Dbbud?{Q`_0TVgXGHpbz!FoDbOrN?< zD(m8^HHw?(Ky07lQZ=wg_ICI!OVk{9AgkX}2}5I&1W7LhtR@PUDqumAHAAs#aRDQg zXl||ORZ)Ci8=-=o*p%+rb4yodgLyBNjRfbjrB|Z*70S$DHj|mJY?j589#SdJZr-gc z&gAga{ZNdcI`qp(YdT0ljuCTMHM+KQae?qgsKMGfy<0K$eEHVV$iqFz>+{PuqvPKV zcMJm~CZ^beimi#sM=I|Cg6p~8*k&Ro`d58Yw;@9ZOO?jjnou{xeGM(-9Y!KJ<6g;=z5kIXBLX20KCyI6X%GRuj$M3_ZOs!g0uAQ~)Cs{OT$C zuB%JGR_dHoD8_@p+NNV!zsJDpT`z37P8FY|7uZ4b#FV#A&fVsF4&DzU6Om{2==6t2 z!#f&x^79c@{xH*io&6xSS|_Xs0^^|2D>G_*(z1m~CTR_~+1VO34;8#yGriWSa>S~~ zA63;z5wWG>VwksH812f2n61I|0zh7b_^OlX&)FJiHE}(Mgt7$QF(Z^7TD>wuY_DD% zj_YC7eUJ#YsSs}4S2x~{m%EzH@)c5p8BMUE)Opt=+ zg}fnZx>o9>X~9rb*}4IlPylo)+%JrQ;R+yFKmEh`VP?LXUfsk0Quy(3c0&B+q~EHw#1E8Jc%Kc@e@{Yj<&-6ycB1=I zUpECopsd~1un#uOVTyQ1M3!K?ZlK{b(_3vv!5^|Cp1P7ctlwIlh%8^V;#a-xQB!N= zr$YXDHqx?wUeEnnIO$B5wc7YQNzk@Pd4Xj+$&HK-c0ZY03YCQNOWmX`4ryz}OX`p9 z9U5b{V*xj6(VJu;y;S1>tGdUUV@EUD$#>{o;>t4#LO|dRy|+Wm0g5Y&n~@bHK;n0Jnh)#exU-s!EoxXvS>*#Hu3reVKgeQ-&V<; z@-`~PY3!EG?qzlf)*?}sosGXSLRwLOS3RBWsXHkU zjBW~J&C3X&kpG&i0O!J1qE{S1K+2~saXdLItkTGj;w7u&XRQ#58W!d_(-=i?egj>} zCn5p?dH-4q68pMR)VAGM8k7}ipx)kwuWM$;U zV8%Aa3(IyQ;+XBJu8N1at0RyBrmiqs>d1?pyR$51Y?KA~@T=j_MV)}gDHv2GWB7b( zXkCXDpJRl9!Rv(QNI`dp%6a}dQzPdHB$S)*qkhF|*kqkv=a_oCOJc5NNDtjBm&z92 zBHCDc2%dOxqNIMCbL1!LgU8#vL;rArFw?xmW5i;i$K)Tyf2&x!xC2cOQ}>;xBJo)G zJQu4xIqE7^{E00B;26|=KW?W=`O6DR${%k+m(@Q-P%l!5k1rbzryeQHv4RgZbd~qz zL{hePyl-ZTd$QKQHIitZ+6lQ80o(rmn}wfQZ?oc|Xp14(!UKw>7)e=gCz8vihYFmG zJD--X?8h9*;-PZ7P)6wI1GvWcAoKM&=#M1@4z`Qc)Ul+xPfk`tBuZYCG#Rp_WsUJ! zGt+|OJQ5p`A)rr|QUj%&8k{#|oL-&#y zaBD6n6WUQJ?vTS!GyLF_@Y)LxpNX{C+d*fcYB%pSjG6Che{|?k-E4R)NG(XaCNz%b zL5r^DVEH|D_NFfMx5}xH1%^rFy0mU50)qZ`E;Q~ zvKEWnIL)|QZZ^jq^Hw9v=@`1(taN5y$M8h^yv?f;(b&zc)#|zA;?f~Zy_n$R?OEJQ zS5{b~V=Sdo^1C5;GkwWf#i4qhG4jMnqp zPCGYVk%aI`skOGgDkT>PE1Bs{ru{DP>ifzVUYxLxO7u~o5udtoCe1TEn!b?er)M=s zpBXnp%C9&Rtnh_Y1dXVBDGKW-2@(=d8%!NGB?;i%=TX3}q3szDJJ+b)mlo7V=p*ss z-STncd_Z;MExA)FC2qQ}OsnvX{R!}IsGTcKqmnTph7DUx`rH`cg0OeZZRQq~#`uoC+R+QpZ-WM|>@@H76*;<^3H>b(BC)aC3 z6lX!h)WtbNqE#Ya1)r?nsod0I;0C6N`HAu!D9JTaR2_*1uXD;Q^5v;ctdbQOo4apRZV#k7W7qi_tVDBps!i*<_|sVC@OA=R`>3dCAw#^s;HgT39UXQ} za|CBO10la`wM@shB>Spw0Z)EnjeyS#mQC!)(yp7JOPx+}L^|w|2o`_N^DQ!Ph(*V- zC=EgRPNRBfxnYg$ZE!cN%{+0AGQpLA3 zG1+5-vo1xGLZ*=Tl4HOzB6r)icJ*=yLw*j!o2xp@AT_FEr{NNjF&o@0I6RoQ-9R|o zwi54_TPL0dcn=QgNvVEC(R1&N+9w?CG0zpucMv7&8<3 zSov&C?=|M?!IC_$L#zb8<06Vz{o>~&(;b73rUlc0&|-@fXKIRnJ8WLr{F>OYPUe*Bma{-uUr*HYccha5kNC2?msdeU@uIO6spl|v#bv5@H! zXmZV8{HrsqRNlZ&CapmO=>dgc>SlbtVIKFZstN*#^h5mOGW_F&twm#ya{F8~%9Jtl zp3OZOtyA>$vh2e05m=TQI-J4Ep=89hYN)uwqh(ZYKq}r|(5a$lH!oI8b~ykh<&-1k zG3u6&SM?$i##E`iz=%QG9^$!%Y%?j}Bu=j$iCd~sLY!%FgQK)|xH{@Q6~AO(I_PJQ z)-5P@xyreZG_wsmJV22-r@)&$+Lsn7;-Sp9F4|JBvxv`5G_B)~;URyGS&ZjiheE}i zGj_^Nc1F}~%JpzUDqLJMwZAOXEvPoN#$64kQb*rslVAH*t>w}~;wg`G9aD~Qwk*#r za*Vo2jf{x4nX)W56VIyW4|(tx*%d?t3dwNYjvM%@)Abeb$Nm0t2K#mIaMV^CJ2$^q zJ$C$-=vH`p(hzX{7t8OpQI@}-TQ6>pJ^Cr_X&X_4MJ;|WC{tEM=J3?sTjnTv>*vqD zyMsL8!J81rZ?4tC*433Ry4i`BQz!nwRj_T6FO5bK8*vCU;mdXdCx&8OV4gvj(()xs zZ5{V^REx?Yg=$h^n08mfJp1z_Z8=_J>U8+S_KmWL6P0l(Get%Ppg2fr>+j^*J`^}T zzV~|aE&dy&F&T@aoQ2p23TRVzq5AmVBY~pV>J9F}XB9}bsG8$!HK{{v`U2|%fu5KB zF?Gz8Rq=M?{DYob=hjhndzuparA6YIzQ^c{!O#HbB~7x&`t4oGhz9&3s2DQlEkn)a zviMt;7Uf|{{lP{{HQILR9f3uDT<^~1jv!vcP9y>_m93o50;P)C(u5QhGK`}(p~O0JtEra98+v{5wwiwU^m@mo;F0eAPDVL;9(OxpS*hE7m3dLTq5W zw$aGW2r0({e-ZOW+&qKFpprwXL9?%u!I=DW;{=~ZE~T4H&E%qX1KMqo7X9-|c>AX!w5U zRJJW#HMNvsdHr9V_TV4YFU4AJ06^o}&)-KV>hp&c+;gWU8=IP81Yf0Gdu=Cp0_Oqw zRkOO*70fK~8zqnHt{Z~wnC){bqi#j8C**Ne%Vm4zPwt1a6+Vn%37 zk+72E^HZ(|Ws*HXQ99#BFWqIaAP1>SlF9gXLRgyxjAf?_%P|qr{-zph=iOeS&dN&h z;iTX0@Z=VFl2IKBWhJwcH9`xOs=98XP0-Koy6=PV^GUxmZzg%LX8DP4x`mWHw=o(j zWDzjS`8^|>$U)T5p9bi8LO@k~byG&j2BD# z$43k)icfFO@Ic;FUd2Gj8#?1-V9tC>tf|{0|I1p**=O=k*+S>|Pvl9-|GT$lK6GPnoRdO&x>ujDyPn56M*#)(Bf`zp@8!8mRtQWokSgSmHFCuO?HqFOEj`_Q%&i)`kr z-SL?`6Y(bXI8B%rq122ExI=e$DytASx^|;rUYN(BlyKx|h9&u`?h+X@81zF`820KL zCC=E>ioZYHkvP#(o=*_&p`N+O2<5C zOw~tWlVyZ+*H_37^5tx$yBv!)0ITIQebWOWc~k2{dqdvSfy}XwD#h_(U@CNdP0(N* zKCklZZpHk?b92z_VeseqD6X;%95U{6tz9I))x_etjVpE8%=(x3&6ZaUW+?T=Dl-8j zdgEcU#gDuT&CTGop%ry!)`loP*4>x$vs)vDB0&i>`bP4}@%iH14%fklFrkb74GG_F$UwFwf-__jff9=(TdWN~lZzcBoJ6ubGz^>gwe>oi= zka@33_rfTi+ORe$uCTXJ{Q8_SugqtsRWuzNE42MZgz1os2#9NY*;`|C4ih~*GlV&z zrb*Ig$D&hM8{WllaV5wJ)5{O9Lir$PADl3UDH|s|`Ysz=GglwG10Ai&#A-5RcAI1H zj{pIpxPh7G*z<=^lOimGjp-w`Y}I&2?fM8=Y_9&^l$VIGzVHcGG94!uJ;6MjzLv4* zT6(-D{lFRMRSWC|cr-vWf zZ-j;1J%6h&7WBmOxTo&pWr_0uU&gq5;WGBsWg$G6uA%v(5DbIHL?~wYO^O^CPCL@m3P%{LqT_tYQMEh{OAP_DGK}IXf&Mk0MS|pzP&`hHFGr5 zi^1-Qw?+Y2hd$Cr=A!=Q6hcBnS6w)bKR%$%9EAv#BEP%*v&X6yC*o&h@D(evy z{I|J{Nh;R{ffLM964b6TA0_2XO5c!(l183pFOj3j`!r-&#H7i$G25uTWO$l3xUwSt z`pLpOpk~7+0Qc1JVBWn^PS$OJ*N5iTG#{+CV|b%DsbC|s;@F}3N^d8Tj6xJD6@G%_ zabcI|mT%nWY5SNj0}L&fD9Vj?!ohi$QTRo%5E%FRHPU( zg#6kEu_yDfI_R)>V0khX{v_h3!%L4BxQ*=Wk1HchJQ2Xq4hV}0R}x&n61|t#Kf2t2 z;=dh%Sc-8kgYv{pZ7)^_9!;G|d$M5j9U~ck zbAnImH%>WLe9s8V!Sg&rjofj$BXil7$dxP}w*td|7dvtTdu#L9{yU9S3ts3Tb*e^=51z6A{N2w?L@1B-7y>UKk z=iiXKSH`)IS_q0`AKoH$Josy}PeL}sOr~rDEH0lopd#U;(4>3w>aw)FR5jn*+BKr7 z+1ZiGiB8p39=jHk-W&_|i%gVk3+ka4+7(7P(8!}szHKOMDd$L#cHt44JfQnzOiV?h zZ>0oo0+~27cLi1O?T9)LedPvoux+TglKZtU=1iwpP7Ne?eQ>uMPObw+&<71|p>qQx z`St*G-_uj~S#@#hwU@+u((Nz`p|y|82PKM4518?Qa+#=}OQ%H^mYk2V`$woP%OTKZ z^uJO_?X~hFE3#u(8-56(5J%iH3(XMk90`ywj=05rG1_%)!tG2*Sy>#Ed6~;|x~Mmf zf3Q2Lr%(U#gSz&`I0t}j1#)p`jqQdPjCd%s>2LslA-lq|Ix7?Ee)c}mosLdFn@_M* zuQXudlT&?5dt$RkmJSIOS%7Nw-fb0Tm%V275!(x~b54%a0PSg#q{T%GcqYbcN-Ov2 zf%Y@VuloidDl{p-Y%`C)EVL{7+|cgS%r=t1Mw8$%$H|pls_bxFt$e>l%4?8p&zF6D zQnz~m6@G~)r;PT@-HDeU3~e1#RR;Nye^}L%We-;Q=I zG@J|Pve#wbRi+P??fztOmfSCeI>%GJIO!ivbSZVp1%#leZ8PC4ISUvf5NiSnIwwLn zf@gkz=?dshU7Lmf<*59ZBK+x?I<*+k_uy%SVD;Q>{-?Pg$*2sw=O@Xmb)QGu*`0Sr zl+V2Dym_Bg<-^_4Je#x|bUR?RPQeZEujd6q(hZb-`v&Q({R4L>V>sCh-Pq-zSX_yCBkCFT8PN2xx_0Kt${$5)%Q8k#q*miU<+XRrZb(^ zSJrO6GGD)n%Qc(g3oBlF6}YF&op zUT-MV#r0`L8nW%bcmnyt_tHzjMS-2}@k7~1LcA}wQWGA&_+g_-T?`UyUvl40RMa)1 zxTAcZ`#EQH3L=8&5FlnZ_@?vqnw<2d$gOb;`uv^H;Fie;V^^!Y;`lQZ0~ z8#i=Tzs%11GwbF$cpRuIgYPF~o-V#)q{1tsq@RR+djJqmVtW-oXcX|icphaEr($w% z@~Lv?8LWt}y$7BW%y#rh_DMI_pr%KzPSE)&T5#VUkcsxZG7d(J?hBK?Y_P$l%7rDSaRP6Y+Er^7=E9U)q$xgtlzjU&e?|T-8fN5t`{09OlVyI&y+JY9 zM`pRA*>SkRk}4D9I2TzZXuM~C_54}|8OtHq3))k5^W6L6x@A-Tg)ZZK(AVS0apKNa zGTGZIq(Un`R;kVVwd7?cq*#{rq~XlCa{8h`bFo1lfm8qH&N@nOKh{T=OnhFfJ%Du6 zsyPQ=ej&GzI3DY`TX0f#W#idNmpbNx5azrpFd8b;aX$2IcHaMlRrh{Ra}Y8?eMt21 zCv#NW?kju7d2s482ip`@K~P?2nv9Qs76{}!_aDskgRSed&sc#9M+N2syiWI1&8;V7 z-OFDmuCzOC7g^l~4i+j#-fCy|q$;$<>Kr%Cb7ZD%WFQDhi&lbQ#giF6VYcFpCW9)jGpCBex7&KFoPR1X7Z zIO(z;GBB26e@g!0xX8|0{vRF;8_f{hdVc3l2IF-4G<;teU=Sa6IS_Wa{ImF>S`FoM zp@^cb7|i%gYCd~3(Q<7ied)Q)O4f>vqF-BkV#^q+8tlu#2m{4#Y`QmUzW(?s{;i4_ z2SO+QB!9>rLZt53lUw|LQ`?~YdxU2(O}$Bdf3yr)Hj9LLVJLS4;^2=0dD-nGx{ek+ z9}{UlpPhtNl_i!!2?LzNgsjicIcHn1&*lNCh^X#{IL!aBF zMDlOgI#r61(Kt+-sm0um;J*3jL>2b0?yr-S8Hcy4=lm93=?EjGlAc>)RP6SM zTB9{B2xuDcj97L(DL_i+0Xrpf!|;Z5v^Y1d=zm4Y%i((@=o8kSUu%2~jwXMTV$d~h zLb`K8IcHV>O_NX1aw>Aez!rC;cN)K2_$xd=-@wL4J$Clggv!|lWwfk4xw=ff&XLdk zj7j`P+eU}!ONi>(4}0R2-3_HxV!UcJO?cQhRXLtu61+>LF*%y@p56QXGu9G!zV#;56pA?wR;9hXre$|nr(7c=OaY9+1-BR?#L zpR8%F)K#=`@!y;xN!e^|#v3w(CR>4OU_4OC5sai{pBU@&X(#B}yc7%Z8gP%N8Z1Fy z3`!&GUl8g2z>b1~(+iRO(he8OyiMK&SFjaF%{iH7!qbw>9)GY$Q2#^~R2uiGiTjrB02Zjp=UK;X;1+l7B^RJ?XvO&wErOPXi_BwnLI(Bjw>9 zX}o}nGG$2NHl?{d0#f$4^raccY8mrqeJzu*JLD1uR}Qu_X&YDU@mGiRrqhtdRx_`+ zjO%5xex3I-hGM~Uun9ZUxU~9(%5@rm$JPL|n^4^u`NZL*>9f{AsfeCENb&$zQhrk+ za*5>MXv5=NKJ&GwqwWob2wBi@Rz160Wv5#Rakv)+kf-9kb+huImVH{RJ%Pp0pYd<+ z^*NEy8W^$s+9rP*Ft;$heOQwElOUAoMGKeQO>kA63ZGK2u7o2|_Lsv}p-$2#n%$0H z@4Ix5r5uG2{*W1nc~S2DWUV{dzm2bO^#hva@|u{ntb;wN!o@(-ZC64m-oX{!W);Io z4HS%s9<37+RZy(b@|)zRiBG0 zTIoBwib!s>HDd+q5ON3BDr(gS>ypOlKHja7KgV6oO^0BtHW1%NOXvN0mn<#6p@gr zfLXySnaiBVW@L7`bM5hzao%?Mn-G<$vu!qR&`AlK_)j~>$-{ageN5X#w;Y)V$QuOA zxyMX|`*z;h3aQhHV)IdZTtGW7+H7!s-1VUm^PZ|7E-Vb!B#b*HI7%gBmMZP6{0@eN zcuM(kHqMCUXl<>krWx@k*wSqLw(hr?4tKTaFWu|fmLFIhWE;DQO9jc}IXFqJDK^&^ z-}X+eTdHpd7ml8V~0*BfsZA=ZV`of%$#k$vSh!HP9f%Ps37RSisjo41z%!6=29!0;%8X5SF9mZx^-7awf+Z%-nA4mlg?5Ff0r*zl*D2enTm2y|-z>{!8c; zeqS@x|BQUHQcjPtl(sP_rWYUT(L+a%{Bvo=8JCq99o6WBa`q`=HPXtg$Ci=(W5y3e zEIN}r*=OvFt7%?{p% z=ON-}P}l!5uoMP3-`$d9>MSXm%Bnt!Jf|qLUu#5)=Sv1Y7hh#8dm>z;iv3pJEVzSl z(Qc)fU8m^+lAB#zau^IfoQlj*kX@KXwp zM`mQNJZ0JL(hV7Y6w@gZ4r!6iH)$?PBSY_4{N)l`sHvzgzQRJMDrx zaKnDaLd!t5s<&_7-meE^{d2%6&yx~fj-!&qCMAs=No6yiDN#2frxhW|xpKkLw zTdREjkiQn#BY_MS+ZY!-gLy9Zp0A$y6Z-pC+PbYEVmmJwzg!Z+=oWH{fF}-kq(gih zT--(%J}RoWkeA!$SvAP^-d@44UkHeZi1$#)YgH(Yx++Z7hEHKNjQIUqj9I^F)IQhb zS7|BgacuifIXZ zGOB-#%#9bJ8U=Y5y}`FSY{);~bhBaq6W4NwqB1+Yfe((- z3NB3^7?7!atf02gM=lk%-VMF@O3S$2dS7yQ_C2i=zoZ;26?I5w!&bC_87Eyw*1A6= zVC=a3@t&qoX9PQ11m8#S?owS}JMxju#;K6%;7gUVbUg_S}{@=qqhQ<)mY`&MfB zQm)Ya$7D-TR{gv7*CMPl^j(IFg&OORKuuA%#C17li01dLWZ-vuk-dp^C9k&$MWxmt zFdaHUm29=h2hOgAT~)0gL|WQG++n7Xd~Obr*DL*790D{12UfG+$!Tei-4Swe9uMiP>92-9S5R6L0VFrH!ljn}s9r&-F*{$|D)!QJ+H;&QyVM2J~17n>D9Q=byBI zbo_ki>SvyKtKIZcdU{6&XOWw{mikO!v+>_%YV*)zEa`k+We$x-?+pQ(VP1k=dJFId z<}yVSH?Hi@$l8hA&2{%an08TRBxyy&{RKT+(ON;XI<=PLTalF#quxo2yZxa2pvk^BykvUp$d zo4E2h@*d=>@s#QE;q$_ulciQ~8U38hBDntc6l$}UpTDVRn~FYSL_E0n^?E6GZtwVy zn3LQn87aEOEbU39&smaad}{ou;@jYwJMi}=u;&kkHCA0jh2E+|z9QM_q_N-X;NRxURaW_BMdz7(>a6BVuEehQQ@De8TNt;Yn@x_0fC%0pS2gY3~A&7VxHQDQiu2Q^B zA-1jI=qGm=q`XT0+=nh2TcLRgRS~c&Mc1 z9c{as9mP6KrO-|1reMx^wu!*@_1qY4wdB+h-9^n zTP7xN{F?r0Y*5-efHYqt0o$@E|J$rzTH$#6O4bOwp8}`CVSm=8sy2UWTQsKB&P1`< z;~o>?R3`PS2bs{c_2)S0+L_0ZE9J!50;)@#+tNoU5lbhc&qkH6q~va7Jr2^>DtHBlN{+>0lgNu`u?v1NzWd{^kWG3z49uO}aJW0-3M zo_s637gQRp#=7WxG^NT+X{uMUfS8S&Jjc+VvZBF}4A%zOm(D?sOTd%MHd-94aCy}I zh>z>!dnbZ=aEmn5V4NzXdy`#@5CraAAyMKOeT!A9X2Cb&9>XWR)U=~;nJj&$S$5E= zL~etR)ooEA6Q0l8$2?&*dpxOUXBA+v*co{9Kc-ml+;h%&#vL-{pMuGZqbP(nLWcDVMoUc2qGVIsA8HGCEh%hSDDm) z*~`ca1k#|0ElkIZB<4sx$CSrDIdTStMu^Vo?TLY^vWBl(C|?kwy~WP>ECPj2&ZSvq za2r%eNGzQaM;2Y0NCvE&SqX$Pzpql<^fnaNJ4uy8JibQeW@!_uADv1yBeyNJ&Mr*` zZmNh-qRXr76~F+1CB@5QPSZmTBqa~%dr{NLIy^Tae*EY=6QdV$Qa2_e9hh;8HM7j2 z(-Nqg<0r}Fohc-{G8L5(He`ONo{&iU2gT|wUuk3l{8iSa8Iaqi^Q6cy+u>cvs81GR zuA@F-4;#rh-KSDt`?trjAp(90b=L>JP6rVc6=Fm64k>gZkJQCClWT=MFzAps`6+X< z+zXCwfUx%RP#qs3l=Il;JkV3JrK>~Hq0|9wQ#}TRL)Fbm5uTE) zTZ(Et7|jAqB)j1){x+XPO5H1=x>w?4m)OgV&8yXTmTmbHU>p< zE?HhtRT=hyA}lRi2v|opw%_98aU)I=9|9#!*-g_AVd8ML_>Gj^_I3zi@%G^6t;o51 zNQP>Y0EM3|+E%as8KJdeW^3Lw&W*{Sit=7IzGd|XYWGj^`|pDK?-g^6LSbh~*K3TZ z%R8znOKMqp+kJZ0nhUPcnv{->rjkZesrSxnt1*51a#AuQgT0qE^et~KtDlBTsVsbw zV8Ko0{V0KR1eAgwFyp8DvNl}2JRN6GS}v1+f(wKf>YC9}6B?8G160>qRd--9wS9z|@IlfpNHiN{nWw~K#KL2P8Un+oU`s91B&Iyn@1 zDWP9SypOuu(9tnv4HTmI9WFpy%kUX)(vtE=yAL`nr~4eN0L0{eu&>IiQNx+zs=Ea_ zvrMSBZ{q`WnPyy&$8a>^gq}Yw0@P)>a1}ZC!EPWS&V!qjR4R^Xq9^SGF{nfGSJo$B zZc4#Kk?E>p)t=3J4VM^7$2`P2c(aaA86X17<-hv&AsZe*!Y|l;zknDd@ z8j$Q)gp0Ol_tlzF;Bqy8cfQCMZH{;DEb~QEx7Ok@`Z ziM6k}^xRXroM-9#XId7CL)KQMTIJY~+?R9z=Ra&&V}FlIR1L(z)TLnTqcI)Qu-Y3- z{vuiigKqp*O_)Y&jZ|l>Bo$IjT4(eJ0-?~Z+P_&k`4AwdaQL&BvCpH~La2y!E&2~z zsOb{c&6%`+K&hw~3Y9ja`WH64x_|(nB%1cLB`BA5-;VX~?$`xP@S)pNU)DwlodBKb z2@(RQnz_kPW9{uR1+HCq2xq@QTieJkJZ_{96j9SYijKH^GlR^X z%FyXtb7cBkApIIhf}WWKI$07Cj{43=A***F%@bYqa*dBLCinMW=Wly$7tv7mNS;e} z;s&_Y!5akRFBvifwwvCHedYV^@CrZk|;K#ixkKOOcsA;FebjQi1fBhsOep-8V3>dATz} z#AA~*q51W4Z^4qu-}>%!b;Mf`_yY>$`=(OiWg z!pMQ^=%fG9UUxg4j+}&eKle;mdgQZoatT(0${pMHd=prs3v+-SDS`S(q?U$;}k66%HqA8`mSM2XG%7HlvvF`^ksI1g(jd9MD=0112= zEi$W!ZTh{E$xdogIXtKc3vP3h>o_J_dT0J$lzq>Q023F8{|9sHV2Dc@x!A3Lb!^!` z`2=wG=KV%Ok}`^u;|!Zpp{5Zv9}-90oC+%34fy9NmE z3GVJ5+}(q_26qUM#tB=w_s%^tvwwE>>^aNdK229wRe$w8`T{sr&v1PIXt`Z;ME@Om zI5;bn1Km5E)tsW;nO*z%bFo}11sfaML<+MjAst?#qw_|$e}_j)lj#TwcT(BWSMgw^ zgu;S?1+?w4W#PA*)Sd-M7<@J~m8)LZIAXF&5}{tc3(z; z6TyhVyTa^O|8dW}h}RWcLldp40U6KQ_?mw#0?}rIF0Cdra%~VA*hOOUNd}2Yl`0C!n<}&xlW=}kV;8O zZ2;Cc+?N|}d^fQtT^ur9t!usYC@?~{8Jw29`>b8&BdE_@d2oqaj)NsVSsSvJW&|)aLRzm z&qyx$mYCrMjkumVg7CpoQ#5u}utz&b(GR@XSvAdp*Q<7qFc!U$B1!GXl>t0K8L(~p zzYZz8vZ@T!D?F<$DuL|OiJcj7E`oiGx&M$g*ac5>_*aiJ_&)l4WS5 z`01&pVHmwMFp$t%iHB`@E;(T7bP89K5i;y2SlV z+H(<^90;?D&LAUMEgk$dKsZPuz*&kFeL`GeG1#EGT?0VVi_Z^P0&(Z=m-npaCqhjZ zLsnfa%#)mID#}|flZyUnu|@PYk?|G9y!ZPLLg-*FwQ<>2)?W4EV$?xMg5_37T)O88l-fv{Fpz!|8v zdnVrZSk--FBWvPEC!gVlvjXCe3v#0MveDbu3w02(7Un9^MaKfz2u20J%W)RA9J&vifNh)7UgXb=>badSUlgG$IDQbzs9AfVMx8!?$inV7 zn+)KBd|;E4bF7b^A8bvGko7juXGAfcz+m_DM>rko`3iozo}HHC?Uc<#fd!ErrNjH( zbOtba2109FRP_xfc@W8+x**{Qlu;sM`TLhE_#X5;q_pDc{`#dvOzO=^dE)FmV#M5k zY5D0bIP38Q9D$1)^A}S)2Q-ZOA*!@$=`GMq_Fq=K`!Z#if2r7sOF+efQ+l^YU!Bv9 z*0#ILd)8+@noJqaI`T9!C|Mvx?Ap!B(*L~w06pnf1C4xWt=*{l=}T(@HTk%mz}%p`$CKigu4I$^3_^9Q2(Tb-ZfepeV}sQjVfn>7Ufh#t%UvyM zWH!-O_=zTPn8|>Jv!`D%^q5)+h4J?QzwfFzM!TI{c@^rwMfWZ?IAdXAu-DoftFcY+ zwLf0OeR6gzOWoXcU3g8rKJmLAHbSh~Ur9}luD%WYQpJ#X*H2=D5=Z%|S}maVyVG`w z>S*n}%<+F=6f)<31%IqZvkX;^#3jMpJFH!r`?S+ttzB0RubJr3Z#j0YnM8~=FufG* zt}p(o^ZGD)J4fs|Z}ELLsO;rYooPM2l6Ycqdz->RYOp@WOGZIV7y&@EeUXbR%q$Uy z_@WYDyCPhNeL&lopT}RA9XPvJ@4x&*##&CPAonOnvcy$(KP1cBxo;=1g zJJ*ksS*{38|Avk+^ZDk*tUe59iP(JiE6(RU!Gi-%EcASepJn`CglpUM>ZYQi=M#O5 z4`nx+>rO}tshTaNgsJX3emj6P(eZ?7)6t}tWdOa&IQOYba4nhA3FWm5 z7$mHVk9p(O({1QV+Vo2wYCKaSjaDM?*^O}$S>D(Cmfm(U4?e|3 zIrkYy#3+L1TnQ71=kB~a_se;qJD)oj=EQ~j zqXd+s4BF?q(hK+OyLf}#7?B%M#IP}eXjU5)I$wP*uG4$nr=c2oR2!)pC$&rZ?ON+rK+-G}Zr z3~Ra)_jCNHIDwg4d`hAa0B6!;R)6#O-7a;@{qG4fuI{6)m>1r=-CQw)M#c`TYRbvg z1Xf?9RfAnCh=2}jnB9^XNo7Nwuo;r>B88z$E=l3POvunIv)7w|CNny8`y9;8Z} zBjR1zYz@n3sw6Vrdrzfr=}j@u90c7nKEi0YGn#!MYL`F}VpE6Avc+dD)Tj@0mA>_Q zDIR+5!LT~4PgMr2r%$tIAJ6i;25e@OTO_+7{_LtQIKkkm_qb~%F15Pe6sq*bgtK{j z3CDHWZ<{t%RWLC*eed>IJPDj7i;G&BSjK79$$9XqK;+HyM+H~dOH{`D5GhylI+abs z?CdwO@ELZxs~Kv{{p@W*H)9;OmWQZHXm`WydTreNsYnHi*5Cb+rEG zLkjGRkrLA%sloTX%&g@^X#9Yk_G(G!Z^V z9AY&GQ5Jk&M|Tie_3^$Nfr!2C5uM&kyG2*O(Gf*D7zSPOp4;Q8#95Vfg66MJ(z0oKG zno^Ryn-yYu-%Mc`(}L@0fgRnuTf#QjQ>AMKH)8aBb`3u}+$^)^3B5WUi5RY@=|;g( z5?M}I;jHSbGlf$`TGub+5B1)Khm2iUo|73ia@xG$!AQ!L*djod;HKIFcx@Y4=3^TEu)Va2M&GSja@9Gc%ZI{ewsFYx!qdpE~jZ5I&TQA!F+`5`j3Lsn7Hkt9NB^0jS7__ zSmic}+LpKX?S**!^Kb&$N0(fs$@bDJbptt?JXY4)IoON2(PD!_$c!Fi&Mv@^$Y_$V z=%;h$#;=uPU#8_2OQLhnx~uw^8$Wg-0;n|MYAm&fgr3viaLjwZlh}W`+p$V!0zKVQ z0)NYE)>NTHHEN%9n8MzWJM4!{|6P`ynParH*S6}pfe9pY@^!Q_YH~gD11IK=YN45CALb1%-iJ#qKFb-qGVI>dpHym>J)HE7e zC|eQ)@zQ*d^Pxnq^i zpPyAkK`+|G9k|Oz9x}qRD2+n>7XJ1S763Cb$4DOGO(P-d;W|>#{gRdexzheeGD$m} zLe^nUz;#4XRv3_hi z;{4FPjd<2wm%~U@9f6(qd2Dkf;`z~3BqI#ce2edAp8_DCTmHQ|h} z&3*!T*ZRp}R>01`3!_yU`oW}q5Pp@f57}^@2F&oXIELc%8foKM41F243I+2A#0{o- ziL@yo#Qit9fc$utxV6PR_U=Op9l$NXAz_s*<8he5o0yt9Ki-(f5O9wlF>pOXDc+nw z{F6DLI3))3?f(#^j}LP*?!rvbUdL#2f6kDjI=-VSAc_8$n44Vie_Kq$zwA|R-?rumPG8;~Lc(D_W&Iw#wWp#@M!_f`<*HS(MF zEhOWO|8u7j#sXSF4zu0pG@G&Vh@r;H!WHMs;l3BwTDK-3g_oLgg8&KJ7~0~Ih)%|Z zguhk~R>hI+x|vp8Yve(nB)Gn1Qp+D0hy^Sw?{o@gRI=-l3NDR0&V3g{xERM!p&Z=< zg63O(c$TqHoFW4U^0}7!{hq}G`N6BmnqkLXlB`?mKh@*kyKv$Ek~|mJjg4hCe4$Hi z&Xl#Zf+nrFAAC6N1>++8tGpg{{}ib$Kg}ZkS$q6bh^q^Sw16Ua>r`@y6t#^1c38yP z=w_hBq*^}*bH=u?c~ zvlEGl7`0EjX{Cdv10@GjJ>a)C4PTg>$97ompHCdrTc~dW2B>KJkD`}wn^;WH(k72J zkVLgYdrniied#xlR0?YIzcrhh%Bp)J)~45A@XPPc`rTUYXKTkCXin#D(_ui3ZiXuQP-98gc3_D4gO>3{HHhg#CZMY=H`demu> zlNq!J_dStoGbSU1mBPC|pqtf~2UpVFpWP)PqprnA7-CO4Ui^HD<)!|JMK65)_bl-< zh-2ya(I|gKm*~pcel3_%0&hJeV$--w!~60+ks}Z^F|E!oX!{eAXz!F1?`sSQ zGoNaLqDCYfQ<B;OPova>3J^T<1Y{)PGVCW6aHzpqE0Tj9(n1(z{=mxxU& zQ9_pQl~wkuI5qf@}!dVWQZC0fd`L^EjW3%COsY7JS|ud~2OBKv%( zXNaF#^*aLiNVa$NC(w7&P%@6(?T)D8TthvV>263uLKRJVGQS31m~}vp6li;UQb(Km z29M1;NA$9r6;qLUC_>I{b$w3cRK0$oNtKfNLz(z6_dbScGuYhKB(aVMG1*_T-;W*c zBgc-fQBG#$y@4V~Mgn0jH%9XO+esNx#Ndq<@}XcSO!SaIR)s=}T~HOZCN@uU^Pxv4*{od;1HSOwjLlxIi(8@^8$$WJJ+07?t~f%wEtdEU&)juV!_))FHjyrrFybdI^n^oY`<(8PhXZx_aj@h_cP)K%ub!707U%g||AnzL zgiq+rG&-Z;Y%H($`X$ATzzHd?<0>ltIl6s{; z!<|W@T}Hy+QH?V~44B~{WS3>z7aHQb!2d1oYwh4;GYcU<#eD1cHXrb$QedbA)L#AJGt>fB z&e-k65B=!DKT)>By1q}01Id}{Lu53uN8D@)uGzLYI=J2I0a6Q z93^jjh>IrO$Izt~0nAf?ZeKM}zP4|KU*+PhRCyrGhd8moQ_7khhd@tVh6^FK`)x`* zj=BybJ}{8GVUT0aa7sfWbVtj{YK*B#p_1MG69T~?kK{&DD8J29Rnm#qju8|ajoue{ zkLT-!!UikfN}kv(&na7qd3d7ev70yO!rjM~A7!-_nNB>c_CDANFH zO92x#vrOd2%@=qbjoo14yM*=!$!3x6=ehdxK7QxHa+ys0A&}`dJKlY2s)%Evn$C?_0YCjdEM2BFFk3JeJTlsSF>{}a z`03csbYAmb?Dz%SC&Aj1B=Tvw#I(=C+2LxPvP5g33yZ4Raq(U!m43i`ICOK-4+Lf zXTnvpC_gv)AO~%X(ybw2%14&eC987hBlEg|bx=US#Garfg+-TM5W9`pxk$i>~b@p8TgD+DvONHV!r zf}hlFojZWytUVNZrk#!CqTAp;2DlS8cnGWLB@*|tk21~IU@D&mDEKZ92(h2cs}2&9 z3e+bpQ6k0mUk+A&ZFty4;f2+B$K_*CXAT9~Xok(ndiP47QWFnQ8Ueh|5O0QoL3Mja zim5VL2=uaQn63L1uii-p4!C-%bX+#e5ngO?&crT_@Kn8;>_;~(Gz9X&%2kHPpm$@j z3{1Krz7BPq@YzH5bIIb}#lrNNaUVmTAqPG=MJxTZl83-_)2(jKC#gdz3L#}^DMttA z^yQ$|oTR8iGy!S=qzr-0)@eXUj+Uos_=m=yhL#){vC7HOOlkSI%hX9W8K(Z=m=`A( zY{w*$+q`qf16Joe-k&yef7(x*hxJ9+DIH3ywgrQOCu6m*kIiC`-}hpB@)j=<_!S6z zBKpuYTlva7z^43y;KTK4QDIFKKVq(?!l4jjdg12O77-jki`-g3Y;a_rBYFUE4#&~D ze9V&O%{3Fv1{%a3m|qjLoMExyzF)5=<&wMfU*JVe*qG6}`c4wdzn{A-*d&d=ygoaY zD!tvjR{3e`GNqL>0&`7kwE*P<6w$ehWXlX>d0UUZQNTxgU={Al!@SRlM&D_1I2Lnm z38=^6uGm(&ZCi8^&G$b-Nj4V|G~CodO$nY&EDJEl z8Q$O_D3qWvc?yYEIc9m+N?+#=MJMzwdP%BRBJmyeI04X~=y2(Vj;MN+G!X>h4Ah>;vac2#c6K%58M~5t$%6X5k9UCN8xRYcuv4 zpCT)VK^YW=)i&6cu-HijyR%!M=Iz%*uv>79#~`Uo@|Stg-7K0oDqGKxosI&y1~X`J zwcStLW(zIF5C`G@NMe2_eQe%|!k;3AHJ;GuE!ro1G0#E2cAJTtTj^Rf1kaQG!<|%# z4F4K0!VHYH*?&kZD&smM-LX&k1y>BO1vs*|jT$8ve&7X#86PF2cpAf+1kQWZmcoxqL(x>V2E>rXaEK}^D|>O(|dcdQbPtU z`Pu0ll>c-?Z9d1|`+$*n>j0ZF9lvm-pB~hSdYe#Ga+5O(pYtPpkth-wXfF!UK!w*PJeQKt;i_Qjef-MWey$zlw~InLvcy6)mq$U~W@K%F>LpU}SVDGUZG z5w15&b1J_y542@B!0%ANRn-WU#5Rj`p!h0^K~wUt?FBfy2p*PFJX?|AzH{(Y-lRlXmUroE-VCstgzX5FPs?&|L%X=#Y% zyT1SJycXa9YR&Y4S2`Jp9C*^LA@#|a_+%9X{)`tWrXaWZ*UU1So9-cPz}Mw3QCMp3 zR-Q^avL`6#?5vKY>S<1CssYW?$wBJK$DN|afN#@-Zyk@-3ZSGuI{?-=69U9S5nrbi8~_S$Wu~-7Nmof zUo8ks0$19})sGkkPLsz*YcYc6=Ppb(3E6y)*{NzpVV56l&Yo~pOo*fC+NNzS_dK{e zonAHfH6sNJivcqM(8f>5>uOK0&y9&V=;?KU;*5^HZG87#G^E%9@$g75Q|oa2^UfOY zZWD#=n3p{E(Z?O!0k(^9z_juA0=?{$f6*%krN1uSpKDGUCWnrHwqEg4Z!V=D_K_ne z2^^YGt!1@wGWVKj>w2vx%i2zj`9gh%mWMSa8Y8*ZZG)7V_~pVyuz85G(~;hT6=!?X zc9VEPCy_)LZVb+b%}KSOTX=eExVHsxSd@2kKwIAZ*5jmuj9e3O9EqY2DtlBWs>Q6l z_LA-PNzyjFoS__ZNIj$XZ=G9CjkfvzisvZ(qVKQrqzY*z-6V3+Vy(z zcrL24iC&r*4loAlq$(p{90Y=QLy=`r)1%Bh`wZcPL@wW&o>OV{UvpW%I=y_~1Y(gs z0x1CCpWHXM*v^@Q;75gmIaLRecQoUW3+e?$-=JVlM$-)|YvQa=@9`A_y0yT-c-h{s zFa-v57R%^W?5X5usBLt(L47mM>=8O>p%FW{i9Nr&Sr`wy|4n&xr?Rcs@nm&*L0+l9 zLK^CG``o2O_z(bTfiC4^U_7jcGjtdV%1mxu>)Pk1@5Nqw>7{kLJONY`r+^IlkCfy3 zf5{gtqJj3g0ZT(WJ781D^S$cA_1yO7B_JSZjLzqkr@@4Tgan8k(x0#Q+gcKlKFxLH zq61&V&(sZ{$E0ZkU0s9->3~2rS{ZF^D8Mzx1H-#U-_v>&%mcZo${x@R1MS!3Q$gzBa5|0ag=yFZvI>T zUo^^r?=52jJ~Gv%U`RXXkPJa7&Gk~_1s_F<+I7QvZfyS9O1#0ZkyiYG-C9!EEgMyd zleMTpk4IlT?DWgP(a2Hczjmlf%r#89m9b{TzgCE`!t}DTZ|R*+otYIBqwH-&p-b>hE*>nVDZ zbIoN0m1Bd@BS(c2g6Oy24 zrpN$q%5R@>gk8n6V|opBUs!BML9F=-h8WN)OCM1v5`S#Px?PT8rt(Zlwb)@{+y&vO zQ%S+Qa?T$%6!h3bCSJ}_=W*f|p=l15Sd+Vk3yS_ZQC-YUrN(lc&P6x!6L-Y_^h(46 z`9`-$cp(-uB`_{` z7KZ^deKVbd`*tt6E!JgNIc_7Zv`c(lS5_~;Ns;5khig03mX=C&hnfo9>fsRXTW^pk!ifTqKC(&;48;#^GVBExjr09py39ZL)RoreJvJuQvDC|6vDZ`X z-O}*ZHJ?&C`Ezz7rsO{~%Y?^0dk8r~nGnslXpPLLnu=!wfq>ZIKq?GLipx(4F)REC zz;%j-xTi9icV$Sl*1)SDtw7s!rf64S#WI;g~fxnS@qYWhO|Re^H!H{F>W#Qah!%F z8ZQ!cFKzJZqCH4}rvQ||{SKXxQ`yOgbt$HN5K%PwgdLZg!{5=Dfo97W z*zYi?B(A4#VE(|; zJoSd&PyzaY;wv*9)5H+-VZji6GZtKyIMfC=@v}|Al#I#H-1sTW%q-H{m6x?Q-T-s8 znV$%?jrp#r;5<+JaMef8nT~^n9@iGHo9K)b5oUaz{pfijp<9W`@vl2yD;V~ci|OW9 zk^X^78&cO=alV0Jj_YDHKIH+=)OM6!{j{$EBi3_z7%$2)rO^hI6B2F#Np?)$Upbml zO=6T7pKi32$gIu?6_1FJOSU1lpBot~ES!R&_#L5Tnz3*~95e0jzC$2qAc{h_&JU-S zT4H+ydfH8Y(D(>7iOQmSByr|i?^Fw4M=KQPS9vFxD{|}5m5)d7uvWPp@V@eX+*L>Z z`(IrB1A7l?PLZ)&z7mNfBID?Y%-E9U{k{EA@QB$vk}q}axj(fyag8cv;}JOg;o^qO zlDoUsYw4;21>RfOl52_r)W*I*qkkqqZBPvGN|RrI)Zsa<_BbbXhXO`_5ksw01`5*#1Ygd;mvR5C}j zuN3-v*cdxU;>_L*`{id)>4jtkdm6E^)awp!!l5nY6k*JNVBkyJnd6FLnf97aymZ&6 z0;gA|4PMd8$LCyO_J82to~08ei6?|a1XyU}s!8b7R#Ds_Kdfd>i5r_P3gM-QAvoc$ zL6gae)lt_S>Jro_7j7#pmVJ39e zA|W3t%cCHx?zu_8!A8h4{dLu+0j~O;hDqoq*J}zJ+u!2ZeU)GeTtpJZ-plwWtDaz{4Y*tcEv38px&sKgaENv8i^W+kj*Ch z87tPWDUv&C>}LnEX_gMXTglAGH!P#L`HPizeAOb+^#^rnG83J!WKMN2XH31@6Y|wc zhNb7zm0($oHtpA+cpE(AIAgV1rpGZHMrO;jG#$==A8NLApB9B3H3B!;Y1xRI;0o z071vN2HC9nE628X29tnGfI%P3=b;5dc0QJM$QzI2&vcmtc`)49^&wzhfeiD`DpPMJ?9Z;ljzpUmVax~0vL%V zdb_UabRuax*VgcxFnZ{`eEFO_VFzn{sNXDg+Fl z)gYA>UB1ST%`b|*>R8izaRYLt;{1?ks9V5GVI76Uyib|xy~5@HdFgm*3b+9g0CZI^ zZkCs5;y3vf3A9Ci*{+mr=S?xDzji&CYP~+z@j5=zZh33WEp0N8dH0HG?JErtR|3lW z3qU(%eGN#I6nM``PyXs|FX`5RJjpSCpZt&L=j;hhb#F};U$wLP&m=0d(xH<9->(Jk zD^EVuPD&IUKtdXi{0hHnG(+^Cq4FY0na$)_J9dX3l;mZiojnI8Crg@DzWE@%n1VWC zT0+|bN3DVN=A#SKGTiL}Y#uv1UVJvaOxRchzIKB6p1<_r^-3B=f9Q9e9~Y1m0a*-F zqRu&8t+3xEPE}lb15*Aoi1AP~7ZoIg+72MHF2-Ht@_3ZdZom!&<1lU0Zucn%O|JNK z0&XcqHJ_%f+p-J7xK>M!!M0o=E}eM%DI@O72oV8#hk_u<1Bbn@ca!06#J{27^B;3E za3Yy{PkPu2sQ?cZ_{K|ivp%qBr&iJ9^O=%*2P3r;?<5J`FWL%U*xPxS2Pbp1o1=Jf z$aO|9z*oLBhKpxD$rt~-Pc5-33|;>UII#&xczA4!O zI5obDuDKju_*l7W&?mN%kZatZ=U!3!n(^cxww*;3FSWjGBXiYn6yyM)k>g=57D$yA zq)_ue1XXFXsFHG51HsEH2KmgMNM2azDMQEWBlj4v`0}~`MmyCS625@D#f=g$XY4FHvW?-fXr$LuBgH03NR0+pzd+=hrJ0594?O*@b6z?K}hKn47--1rN~!W8J00_in*#^;L4tJ~Vj)$O zhFz0taDi2R*~C=p^yFW!{U^8l|A(_YpC=w-SCLt!rQ_pUecC<+o$lnAMfzbl^H+7B zSTFB_(}``KxZfWY2MKR+OcZR6$2&Jc5&Vkw2p`rICNwaX1tyK?S$tE^{RkANd@EQp zRZJY?72-9B98;n7O;o{#3|(azxOfYgX|HUSsiK!X(_chv5||_(&M65+{A&?Lw!iN* z9{;%s21;`lV*j4YC9pa&ySF9jhNvdk&wk)qLE&K@f{>+LJnjkZ+4zP*^vk{Vhw*+I z?j#=uO^F%sXKF;y@|yo2_!hYLb@?y2v0f7rd1U$(HvOcyhC?|QF}IOrzCcMp`>+Et z)KjH{`s%Mc---_8QY8*;vVzM#qo8Ag4)Zz*i6JR3CKWP@cFh%wAfM{9;vXMIzx$*4 z=brLg4ph#@mZ^3TvzvV-?YBrn6I%L`=?MGuP>F6B{kdo@tf7jgbN+Nz4wEEclXS1A z`riL8T&l>?;TdE0jXhB4+H{fcRvnXLH^WJhaL;bRPE$XA5XCIrjNWYS>nF&V^N05VmAE1)9K-Ms^OMx&~~+MH0TE1>_=Z6C9(_$xwW| zB(>}B>iIn~Zuz2HA;!g%L}EKu7rtTNUtO^-6bio{Aj|&@A(M)a)kA-K~kM>THJ|jCMBZ7Wez_8K)Wck z^+iQxczq_&L+)f?5fkWIt?=QZ0ntA1ECu*%FRGas?$ww)2TOH6A4T~4$yIRf)=Cjvcmkkui( zfl^_+laPlI!I_-=bmUZ`;IE(iDh8(3zEr$lv{%Mw3{t#F`dKYTc*0_!ec)GG3DlJ9>M-C*U|cPtkO6vS8G7n=Pt zU$LErKnWTa+(*F-OP4(SLu~Z3MWOXElUa#6%NNYRF$cc1sQ;tQ2#I+?AAU+>_ELJL zhC=f~HbJ^mXx@T6g2S^Lk77@ra2%iH%`ggd@C6oK$i@0?sEII>YZMtsDh6$BW?s*J zY$ss@R_e1SR2;0tzWCgua5xfn^4=ZvQMoJb9bP5gw!p}5X|ylwqVg}>Pley?oe7zG zQE#`dCF(R|c4+Wg2T&tfE2W7yJ3o={r;9{%8-g35LSPDVLI9#qINJ`ft{R=S%BtTw zyaGx|3Hf*KPW<5Z^Bx?hF5G)9Ni%Z8QMV^3!iqJ&TQ$sa5#?-$3JRi1GR5fL;>8YZ zfSnfubrAps%FFG>vN%Lzo;Y^*1JxBzKj(a7S6&(=Fg)-B!CA=Ij}$9>8()<4gP}%v zrQ2C`&@R8R%BtE^Wyzw-KLo+c^dEF!b~o?L6vnc|%L}mfEP8B-X*Y;1L;YQlX@Iu9 zKj@3hze!L1T1Z8DsFkfA#LO;dV^{8F&&0%UN_-%%BE2ufd#%DtDQKR^wY$v9cc7L% z8IQ-`wlIiV9capN*z7_qK!lLnLSi{~OxJg|SS~|)| z;tW!e)FYtf!}m9wpf9IM@rE}lG6h?J1xJ@7P>pph(o+O=;*nb%H4|r(y>AarUW4Y3F zq8LuDR5V@?3XEy#@$BnOc>5(00sQM6;Kx4Ogah=Qnt{c4aYSQUw(C1E&H4v){@|Ii z>a>~-g!^WPgt8K!5(nc}z(y#_w|dHv3XyF?ua==&XKGJJrc^|rv)?hmXKJ1r?Z0lK zXaEJ*cULzfW~h$&=cG(=11!!&n%?(vsh|aaU=s!WEGFjB;*^lBx^XsB*t7_=>^+aMp)4i?lFPhnAjU)`I>d+-CS(tNN})lV zn+7z(;?>$OO&3fNK+4TN3>SRUAoVQoL?BH%-OTahk%wmWO#gk+Za46zZ*hC$KHod! zg8uVmEUb3u4>Cqje-AX@c`kek!RcVbA3KRLR)TA(5@f?NmE{mq_e>33m8&5e_|qnb z(NqqV+5sE*c9J@RU_b!)pH46MpH~!~HrZLJ>w|i8KgN){s1?;H`V(#$PD4x z4;=`^C7;K5-Zz|zr_iw}=ba(^Yczum{Qqtj{Xd=1@IU{K|C7&x>U~31(e5}ZWk5E3 P2mF1MR0P$0Fbe)(dTJSm literal 56487 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 %eXnXmbyRf=uq6 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¨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 bVfx^vBAs-B$u6{1-oD!Mct zYy3l1^ETr{#4lCQ?aa>~3T;QczG38r zrrBW~{|Su#KLj=Z>eV7Tv`|h_5inn+7hRO)OAsx5o1FMfLSlNY)$Q^(@5W|dC}we4 z*^Clq?`Qd$vxBKT_vg#O%VFBA?6NYM;c5v9=V2_O{qctCX;b?$5gdiL0w2+D434Db}Zh+EO(Kj$YSsA z>9P;=d$nK&m`HmW%$*9fAF~jS{ zWoX#HGmwM!3=Wx^F`vOWt5I>*|J=qyCL&5JCzC!2y;$ggA5&L{L%ar!hqF@11l@kX z_p7YU((0r+i6to$wgx!Dc;p(?i34#~p<|RA_a-czxY5`D`jqZZ;!MQo5A=F?Rmm0i zRx95DWWi8JCQS-v+e%GbYMgWDodiH83QrfQdcd_#N3MT~>MSkT%^#GO)`v{SZV7A3 zJMr1x9He2gi#_L={iALn}UP zCuTt>V~Cf6*A}gbME9j=o=p`>A*rzWLpiF8p@Yta0TsQbX79q;XWcSfu}i+iwSX2$ zT<;OaRKfMByC7C(-R0xZZ;YRN)f?zWzJ0l~c)&+(dNtx1D`S{i)IjIV`i{GDDXH?O zU}qk9xzcZEar>!W{fzxwIKoELFzdOPS{C|xUaMYDIF#emL)IcK=9(3DFULXi17d>I z<&BFZX;}+S?~9@J5hi1%4y&C0?wvy&d_s)5C~*GZ1;(FY!5jdJ0%Zz1GZp#yrb`M<{jg49q~jGx)t9;W{BLgLBIXRAOLfk(F)J(CfosAXzwEM# zI?m%$sgUkPNox#mxdpHKdEDbw@Q17nh+Xw{gOsHa5KwhPw5`8MTj4S!t$rB|-dFHe z^HNmuRR{b@XC4SZVbeK@3MXB=L$_fF+2_(tg=rX?%3?Qt zSqUGwbC_$gTgr%m*H5|E9zC;8?x3E1aTZJ9Mg4C_gAfa1BCR95<;$@H$2>b})UoYV zpUFYVSnR9iwzTRZuuxtBkb|`CXO!IG1&ANl5Kw`6{FGtT)=zaTBeP5HueAx0C?BaCaLkfL|c$u-3-?{Nbzr^+W?l|=l z1?w=zihz6v*o?!Zh(&96-lnPx%YG-1Cgww}V~zG~8u&edurDKuuN)u>JEq)ND&Cz-L#_4O0V_RMgY4imAAq;ird0Jn>4q*7A31TT;F$k&5tAAa_HV?pRxl75pJ#A`Pj%^jE;phbLPEj8eN+*+;UVFHih z{J4Mhca85qc#NwE-P!`BujW(#G)~ISDO1NcQ-`#-zO18vZz`_&1Jbcv<#yHa{cXvF zGvRaUsu&?Bx)ZBge2TS_A1OFWUa?-*V5xplt79CN1-NL*YupT6NlVxxv^xRUoM3N~C0uRp50c zq=pC@b7^vl{36`Yj7&Ec)rq{x#a0OV6Yl?WAW70hQy)W$>>|rYtB3043uM~0+i@Y3 zc$BxtA#10A+0KuKfn1V_u@bAO6+fZ1d$j&-UuB(5u@1Esn|k{4y)u%J z8*(zQx;AwfJl<290yE<5Cb!`HA62>B9usuzACmFlFLPeT&^*5Q>(kCX>nuHSO zCTWn_(VEYYsnuS*k}vp!jtK1tySqaVGwcQMRmilwf&AVt1o|Fe6}4p6GB23*6Xe$-t~-0c^>B1AaAIGECh9W2Svh z@A-0iNep;!&af-$2Um+97Z3v6)k3wJqF4Z!d$4F*GgXiJLt2q*a2r5>WP-@t0uf3Y zrQcj>myVDR2bF_%SK*3}t|b~_F>fciQxAwS@jq%*vBEBcMF!YclnPa#ytDR3>k*f% z&$H}^qAh6#L9%F_bXTZX>3cBLd%#MxRcP#VmJ!Ju1%-d#6DS!z>MJER!nP8NSjB#$ zp1?HA`c(j{%x_^o7+bJ-AAC!gWM(wj4*-Z5a{giJn_QWQIum_(K~ftguQlGaU7;=g zzMbr?Neyz!(L>mMu^+x!uM7~kCs-);1j}SUZCN0XgYDduzc#6C zfBB&0kSAW~82Av2O_$gyz1xZnx4KP7STiY*!idykAq?A_G`a4KXCi}qF@Mt4;_mOr zH4%0bt=g05L6|uqDxqr@V8G1@cUbY@{_V-8z|OiamwL}WJj=|}MQ;qmvqVQ{E)!h{uG%o#YRTXymZIZjtN5%2)rE5vey<2?9iy3zmCbQ<@?DUI&yTPQ zRofw*Gh{>nR*A4^&BN$^sLM{C9XjZ*ExQC&I`-( zT(vE12_@%$aQ8(8g&!bB^w%F!?J_yx_bsdqP7V%D$_*JV)?YO&a+<-3_CIujaTbyv z@Fn9bev3IyLhla(1|1e7AHj%XK1Jzrwx6e~>VKBs3}H9C=&Q@9tUG6RG9jV@beN7b zoIFRYFYREb{mKWIad~rfR7|xkztym`;xWH)Oe9gw0~sM@ma-(+qw~=cg0d#7R~$?f z-<~>F0X`kbkF>hU_}5PQI9dBP%b1D?x4oCH*X>RM(~(sdPwed!U)1SSTl?6*a#ETF zY*;S6eLw{IpD*8e_6VDIAQ@dp4(=%X+Etg~7i>M{j-r?x$!Njil+j}&*p zGsG87;~2RZAFEmHsfYexh@L`K302EKL8!K_>_3!Xv{Ce!M0@gJMjH=({v^us#xA50 z>e4z#GS=aA%N~jH2B_ljHuS#o^}^^FkkX!OYutGesP|6$G&--Pb0mVlgTY14G=bCU z1|N0Z_^bH=y50q1pibcd8kcrw&6U8z>O4%p_X(EOP_wkiL(UWSdcAF|=2%aU4`t{_ zTZ%y4olgh{7GjG%$+@g5>k25;e{O5q#E#!BISxW{R*S?@VysoZ*bTs@6D7V@pwj>J z(m<$>+u(hDD_I{DIRy+&J^2&NTZ<0BFK$!KgcWOwKKG&9$#_(WUf6Kzc|+p-rsWkc z1CM6+J93RcT03$E&WXLXlln-hCV8Q0056XCu+b=xE<0d*w;c6&x??c9l%~<#F32Uw zG6@5Qg(r{UitjCi)f4u{{&NY_nAbPKIk{`Hm8D?ngsBycyr_*A$HZmRn+*cMTNt8^ zvN3f(J)&7k*7W6AlM@`58}tEboK!yr171#@(WUaThRFgSw(Qb&l*}gtegli*?xeY$0YbS_3`)?2_y5*(U!(_ zof;@Ar(#fov`qnC1JTFoQomZ6)U`9aU8*oJV(J)j>$ENQMzg7-W1vGM7#&M2V2*6T z4cD#)dK816Z9>T;nlR0w9crfrLya%rI^dCm?wEw&ecc7;+V<}iZa)i$m^HR;ejn{` z^)k{?!bvpKwlv-|1!Vec1nP$s?{>y@K^>#8o-Fs;vlJBQf378>MWpoFH=bA@(nB@q zeSEA*vI|bjR(h`fz4^IP-tjt%m9(`kzP~bpmlcG+MvpCGwMNPDI_shE+NxClcU)2) zNJ#*aD;6P2x{D%`X=RrG^;DrFMDVO<+ZTYlkn=3VYfHVKt^X#iXcg^Haro8|nr4_p z5J8i?YYb+KsvYvCOsq}DrSDd*!6`5^NpeL$$X&{Ww2-UzQzrB+pdphz-vas9Z~!!a!5Q_0F{M=lEW-K{veyTo8Q%L2BC z{yB#h_g;^S7<0wZO#B%N?!EnQ`YXoI9MS`BHx`*XF)565y!qgLc z4taY#tBD(wk^jVJ6S6Ee?(Z}g;gEGo)+g_cEk{#E-P`caS2l*@q?@;A{lavrckW)m zPOu)`)I`!8xtt5? zfUoynDTG{q7{M0B@BeI1>QdHl@uuv$ z5Vd#CG`K7*e~(hj*g^TYNF{sf;}CXlF;*t2+`s7Btls=Q1@2#Q?Tsa2cQdLT&+?b5 zzete5Fj7I5yZS@DY~;OIE8Ht#;5qG7kn(kY=fwSawTsMtHDDQ!O}I| z$F4}icR{PT)cve}ah7}v$(~L{5T6X>9IQti>Oam6BNwr=*|iTspvEpsfWi$Y_i~xd zK#kO9tkF_|4_J7`dKzFQ@M{z_Ef^|T6Q$t#gi}f-ta1IT=9^dXWThqgQ@%?p4+4uJ zy$Dr6@T!!7lW&Bfo)lp4QMYW-sN2?E-pax=E+H@-FF|1D_T!K?=BGA2TIV{7(N`ks z^Lt@4HiJRGmSSfsb%BVHO37{v0L&v0BwSSxbV;noD=_PN--8w40Yc4`mbMoxGB<^F zG>J`Xf!-!rL<5Ss)4t|6CWBTZjpSgy(R@u@C{e>MJ`6p=_+XTlE?fo^aS^J4ggD@w zMlbXG>?duXLes+J?xC2}j)4kkG0vz#x)8IOd-&$Vd6va-1a<4SU!5+}pQ1waF>!22 zHn}HA;^1n~I^6M4|N2Q80apIRN6)$nK6*a7wa3?rdAag-TS-n)BfD(yTr>$rh6U9P zlBcF!)qc(9xaV@dT)_87eN>^HiP+I{)mrg~YNs;W?dq=t^}Tk$s9MGEY1Oa=aTtvS z?0VuEkm!6cqpsX`@mF7>Wp&ouXh1XETX_X#)OYnX^F8p$xS5v&9oMVR^Ib8n*v2o- z0LU4SP3vCE_Py~>x6WwnzY}8JhoE|^4Zo&CjLNVcLH+~aONY3_#+~wGi_|H%=B;F4 z?e7NcpgeW%Pj5#9W|x0H4Gp(C!rS|w>?y|Kklu58w#r*RG1kBB)u1vw@mk6UgObDS zPjZJ=H4%MUK) z#O+0U&D7&*ftUOA9t?>TqRuSoX%cK3ph#E~ZNf=KBjrjc2cm=xj&^Z=PR?JWE4u~x zvi4;{f>$%jzpe~R<{20Ur$g7BEc33KuOMzC9P1TNeg3l2&2C=v=pJ%gxwQRWSvp~k zdl+CGYaR64lr5QZ?fd=*9mM^96UC+!5X0xGKNK~Kzl<(&OtOmU{qQ>RlDc(Dq$e=C z+iHZ5{@^0SVe>5Y;KDfVwt*j=l7NiL-U}X5h6^=O;w9eJwTzg5Wj&VdUewFrJGOU4 zRd`LeBiyp+G#IotiHCp6t5o)`gO-Tub$b8Jw&vutZTg9-E9|Z z6NSL2nWR-{z9o6829|q6R3nui;B}QV{rjzE`9=K+eek4bZj*G>wAjoRnWJu|lar*5 zg3oJT*INf!-j{0aIVDO@EmJZw|GvqIgY7uFA~xRUva>5eB%Z6?);NA@;qjKC4z4&NA{$ zu?eYJ;XQ>Q?`ms!7gpvk^yfovZ&#Lc2xdjV0v}}x;!=s|#Nqf1PWO3%Ddafa&;VQ@ zVObeIDLa^!%&}4&3~a8;Y13X?s6gJ9Q0{*(nU`gWhYPt`aVMILb@yy6>t}M$yk?Kc znu?3x!3_~P_xjuv3M?^Mkl_5$G)Rp5LGvhMD-m7&-Uae5SA{RCzs`&DPe+VIxEnjW z=}8LI1}kO@9@yoDhE zrYNNnQ)*9Sv7q0Ff=Mf{|4t8~YgOpK{5k2fh~62$B$?3ol-R8jePbG)!~Sd?YTMoSS!HrQw4)?yv{odzs}yelCg zAuv$s^1n}7*3pAW5Z9L?!E_?;d(-+nsp##?LDE6mEboBI%1Y@M4-tx7DSzwDp-xYl zH~p}-g-3|ZO1(PGz&lI%2I)&;)r*=dQ@5g*kl-SD2vHu-5KOWkO*eXiYASHZ7`{xP1wrOzo zB5DzYIJn;I;&@A-+?}!>qEV$-o@6GGJs8S~Ye$hB@84hMXpp)W;`C%!eJRt~Qu;iO z#(AmRinQ^fEA%}zB*;T8SvlZ>WO#5IF}j5WAUsW@?0O{di%_ou_#{Tiadz9iw$6a~ zJbD51W0r~0vBLCIGz;*O-sE=;%vC5(y$&HpMV_q2wOTJ^>{D+xJnCp~Kp@T#=fCI# z4RubuZeZno>wt56_e&j95S=-z#9?X8ujJd?s?=!x(8{ zVt#iLKy7Lg044#((F@+JG-T?A(g6CD;k2tMpZIs}N&?#FU=}=ZiAc}72B>q$SPL&i=-HV6RW|m!|yO!(zG;0*x`d*j&82(LTwlRXBd8Vq8F-c9Z6tep+ z%+<2nX3%yt&ck4*o(@W&5DkN0&Zw#=M0Zm-@#KE>! z(V<`(=_3DCaP3DpVZzsa*J5>dg z-=bCjiLD@L1Jh4v*_xexW2ZGWYQ#wx4{x5P1?6U2$!K^nGp(E9ezXhd17iF=b z4|&BO)w!K=zJ;c9u&jbFk)0C`QZdKp;YrBkCdBt>r@GVl911p^G$Ye9>Jhrsduue{ zT-qL%#f5Q%@=-U!EzBE7qt`8$md-(N!X#{=d=lR$-vQnfo402c@l{O=~Z15-=GU^8t9T; z@NewO#V@^F>|dA>3fsPM@!){Jw+<@TV97KJPG*?`HLc(*dD9$@|DrPa&=1@VHDehP zdI_v3w01&GJg0ovBd~t{rrN~J0V_I_)gf-n7-mpJ3-Bt9qG#JRF zhfrOZ`C)yQYa#dMG*i#so}p&Ol5_{?(Qdaq%M!D}>`N8l%4>xZ<7{t7&{MIu zIkqcWD!Mb%;u1*hN2lWUbWbb(;_nqkr5VK8wO=3HaBrD0kMk2Y7hiS8I@F>Y*9ohb zE3f{k%)oA0gjp*J8i=w+n+asbWHDA)d^QTgKIA>oAn$0bABZA;K&p0*Mrzz&QFs9^ zEso;ZxzBo&(|)&Hu{?(zOJk^E{jMGI?h1HB-d$L|K>auzZcUeB?%ndo$~jyTLT~0X z8}ZkEo;w`)WQAc=wUpq_FB3KMhG1>?J#W&)us3D~O@cx1-!gBR;D?L4qlFW-DXwXP}V z(odUs42q4igb_VPi!v8lG6j-jC447 z=E=PuRY}=8=`3|P`|d5FQ7gklZwX9%$t|PJ>;BvkZ+|K{&K1^0uof4W#_(kO5pP;ROKHD&gA-#( znapv(ZN$aIiH&s|*3KakzmS|FHQ9D>=!Mkw^C3MT+XQKJ!9N(9x|(?uc*ZgHZNm!> zC4;zFH?Q(|RVzYV_XFNF>W<}tG?8!J=W^QlwQ8gW8+H2|Fm|1nw!&j8xJI4aLan8x z67sq=fch8o3$!Wv) zbIwkR3rIiU3!TGGvSx(@i-}kV3qmEApGOhz;ACkxQHl3mj@tW_(A>Nf5k;|+oB2s3 zD3x2)fo+g(yWJG!YMF*ZD`gA!HZKr04KB8>@VVd3BZ@7ZK&$eVN(#Ks8+y9Mtjxha z^$AqxYr4T}E1+O%X8d5iAubO_b<*+Cnvt+Xa2lkq1z4ujNqROeu$X6i$k5jgWZcXc z(;f7cG`_ppJwJID$I&NOs9h_|5u;aXg@8vv83Q|Y(iH-)3;#m_oeZCmRfMq@Zb$W9 zG9xvLM&Y>*q$xL5&hyi*&U3C_wiB^Y(yH)@%s?|=t3Yb%ZAjS?MOA%Rn<0Ge#Ocpt zzpx6t_M6gTX9$i_H_lBQBP(*AeI?w!VAW3HN&7ytRw!NYyZ(OcToCweeuq0`w6QOu ztsU>$dNcJ(1gzMZ7sUYUAHyT6qmrUYm!@Yhue7(hy8C?Iq00Suc zQRf}QE~?ky&%@+?p=S(rBzzWWIvTCH!@N7Vkg)|4mg+T-arZ;*VbV5KNc=6kZvdXkw;0ANbuU)uE_E70SgG`n9J85P2m6uF`Q zMeVz6_aU6DHYtJ33+U9ew96hO*6Or(KM<@Y&j^Q7V#2@N zLibY22RU>M3_XuG$CrO+zH=sH0)W4aw*SpkM2p!+{qM%91%dzZ$^MVtv4a;!gE>Eu zl<;Ir5G;RD!5gwzCKmR@iWYt46M5Lhbaru(JDRu#0EA_0bI9Kwlb?I3uQK;nAT~3g zl;-!=TEmI=S9_y1o;Q}vLEx{XyQFOVZfC0zb}3E~>4ga=@=44N6cp_-CP_@arUH=n z4?Mj13cWj@PULAR)?(I9HvHa%BP8<@IXM5({ogX--xIogsoIn2-d&yl6Gzy4a#A>V zalxjfq*QMvA@O*%Il@LcR)v#o-*5OVFqfUbdej;*)8-7~U^^Or|iH zW30ZEz|XxCKGB_&^F(Y-uqv;94o(ILw+u;}^7E$0IlZ)GjEL4fmO$X_Y3Y2I`p|gj zw2eaDA#k1!1r-?cTs8>~Dxk@A%y;LKK_p~4LNOGz#zr`j=am0l_5=8z1ScI%K}NeiL&%MC<94sG3v_Y!R#T{=Szhb--is#K_(wMTzW1wiH}5_x;&tVhUmpkaTCz1WKW`SnMb^Oap81CPH%oD zD=N)IG0K@NJ5i*DM%eLe@2YXL87+plFo$0lKYnD=>iEc*C=^nZDchaP>~euRijB-B zYNxc2k#BLV)o3jmI&kM`fb6~{uRsU zyX_qLsbXA7-)B`e_Vrd!u}z<{ZK-+aKA{$(4>VE!pd|Qj2BiWR_P-T`>td&ecpSeL zdKf5A^^tf?ae7NS&TyTy*YdtwJ)Z|3y(gh;*_%2A2uQ{rkE&4#&!EE_w9O{f!=Cm zi9~_r5sCRF56wWCR#7cql6uO$f+?cMA0-}c>q~}Ai);-Q)YElOEWOjNIcv(W;SpmL zQK#+}ltk=1ap0ufxpf@GdxAHr@pcP~7(zXp&w1t!6R%~&jIuH{myzQ3>2BTBiHQV& z*?E>0+&-zu_dK9-N8r3GhgqiPw#mE@FDd6hPSM>p2oxvt`KQfgl;Dej#bv;~@GA-F zM+>#KThnw==_J)i3P9h}<5T@lbR>q(VjQtmwEbJNOC4W!RPNG^<9mC!c@xoaVzU>v z%5q6%pmVGBm@8yiv4NU&Lb&1MUdFQ5t>i7nCjj1y?lK1A_Fv2^sZS2W(dWUoWoTxv zq|y|*A$`vSmfYYxG-kUf%syZq1qb;1Jl7{j#@o}Ho&&d>zixXM<|TK%JC~t`(?9a3 z67R8Y1hxpcx?(#CYXlZ;T0#Ew2mbpjdY1I5a;=KLsI^urys9rpHMVBa27`so0a-Td z)r3J>NB8ew_YLdphx!dK?0}pX|@ayF8v<$~~KVw;M295R`N(AM1`VC^qUc5n~@6 zAEB$18<5+$AAY%Kyc_6dKCicUV)7gsXv#;Xt-6gurA2Xe%XamO@c&s)bRxjxN@tVZ z2}eBm4TI2?>~V>$$8;)KzKXx*uKbZL6#+tB6L?>d(>J(6;!UR4KoC9yL|T4$YU2JS zkb1q_PwlXwq8CxWk#sYMv*Lh`0L88zYu$o&L?u7 zq-yA;dywS+d=7G1={K}f*Xtx5V4@US!8KST+^*|$JZQTO&>zzT=QL*Z=Qaq=o-fBn z!;~FKT*gJL+B`{m#m4U>&_pjF3N`2mf(+jnd*x66$=DlSzW+5xKyI#=azOUn%G_2s z;`*&cDyEPawmkmFX+c0q6hHBJf z@`Ds&&kR(tyS@_sdm7nP#P6eE5;YBR~iQ1%a&JL@1PASR9csW+-8|us?adyL|Hm9 z|MCcAflI~R%h+CdxK0fIWvJ2G-&zDy6S`1hr_;3&4=_i87JoOPo6Qqofi}WBOJKzV z!px~<$+rvuGrJDdnNLnv!^d!?%)WrVJ$rd^w}LyP5c34Wm{u|3-w?Vu3~zJaPLKzQ z#X%w;1wHa#{8<&2}C98auCp1(;#aj4DrVS*cMO;xGf=&;inwh%XPLj0A%rhP z--VY~wd{Q(|+M@%o$HR|aL?;~9CzY$xY#EkuDg z`kZQ@RZJrr@NP&Or5M7`^fcuf;vb=C6k{@(NfMVlvy=;Y0?fx@A-{@yVTG9I_8rTR zKQ`C!W~jFg#yKe}akkH-6y;dGpo_eeq9yD792f{--m9 zi)f!!(r&?6LEMmIR*`hMe$zVLOU_@SKU~hUH`S2c?tQ-*gVCEPqtqX(jP!hB5<(-e zY92S;ax=dC1@kq)WetXWjKC zyWy!8PHQl4^~4Uj{>S1+KYtc}29`}tsC@CQv0e=7jU+y3zyDxeA~I{E z9e!1eKL|?|GEb`Os86EIHzE00YpFsCuQ#H=CU(~;lHR>Xa=G!2mTe{ahnsfU5EJ{- zP7?iBE2sgq;V^TAPJJY&frI$?k`d@Nv<^%BL!pSjBzK91RT+pn7|mv>=;c1Oj$JUb z_uv^JuhnkAjxtSg+_hk)TjSC&Q0-jDYhzdA3HG@y)ilgv4d2K8D zjvgr3qHn2|9R9=>f6mve5j+w>%#Cf`$G%+q(4>uKVIdLyQ54mNB}mz#0AE79nw)}U zJ)9IJtv_rT5H+wKtYVi?~xkIneDR-jPG^(gi>S<)uGKdc(x3)-6Nn z{Aa@?W{s~JH;b-2Ob7T}^}N#6=_F$ev~Lny;mCuxOJzTIPqwKp||DIk^j zfi;L`d2hRVp9(P(QIv#&^{+NN#!kCq>|)g3r5zrC*_oGL(Sz?8{mB$n(mVHxsp@Qq zL40sYmtx{!(|wf&?p=+C1b-h~D49L#ThcDb-sd z4f0=|o?)Xqn(H};ZucCe8eSl1_DvhR)iM

Ak;{mQ{PWKV-C3@W8aW{>N1!Jk4Lkp5dGi=Z|UIMGw-6DQzykT%uxa zd8|p|zrOS`nC-6u7B;rQ%j1pv<6#m0Sg83x?7x>%ZqWa)N-6&h_5BYc{9g}jKfH;W Y6e_GhD|0`*ujhl32FgoRe$fy3PiAMu3IG5A literal 0 HcmV?d00001 diff --git a/extension/MoodleGPT.js b/extension/MoodleGPT.js index 1c4fc86..9aa4677 100644 --- a/extension/MoodleGPT.js +++ b/extension/MoodleGPT.js @@ -382,6 +382,21 @@ Logs.question(question); Logs.response(response); } + if (config.mode === "clipboard") { + return handleClipboard(config, response); + } + if (config.mode === "question-to-answer") { + const questionBackup = form.textContent; + const questionContainer = form.querySelector(".qtext"); + questionContainer.textContent = response; + questionContainer.addEventListener("click", function () { + questionContainer.textContent = + questionContainer.textContent === questionBackup + ? response + : questionBackup; + }); + return; + } const handlers = [ handleContentEditable, handleTextbox, @@ -393,6 +408,7 @@ if (handler(config, inputList, response)) return; } + /** In the case we can't auto complete the question */ handleClipboard(config, response); }); } diff --git a/extension/MoodleGPT.js.map b/extension/MoodleGPT.js.map index f7c3de8..bf59c03 100644 --- a/extension/MoodleGPT.js.map +++ b/extension/MoodleGPT.js.map @@ -1 +1 @@ -{"version":3,"file":"MoodleGPT.js","sources":["../src/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/utils/logs.ts","../src/utils/normalize-text.ts","../src/core/get-response.ts","../src/utils/html-table-to-string.ts","../src/core/normalize-question.ts","../src/core/questions/radio-checkbox.ts","../src/core/questions/select.ts","../src/core/questions/textbox.ts","../src/core/questions/clipboard.ts","../src/core/questions/number.ts","../src/core/questions/contenteditable.ts","../src/core/reply.ts","../src/core/code-listener.ts","../src/index.ts"],"sourcesContent":["/**\r\n * Show some informations into the document title and remove it after 3000ms\r\n * @param text\r\n */\r\nfunction titleIndications(text: string) {\r\n const backTitle = document.title;\r\n document.title = text;\r\n setTimeout(() => (document.title = backTitle), 3000);\r\n}\r\n\r\nexport default titleIndications;\r\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.push(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.push(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","class Logs {\r\n static question(text: string) {\r\n const css = \"color: cyan\";\r\n console.log(\"%c[QUESTION]: %s\", css, text);\r\n }\r\n\r\n static responseTry(text: string, valide: boolean) {\r\n const css = \"color: \" + (valide ? \"green\" : \"red\");\r\n console.log(\"%c[CHECKING]: %s\", css, text);\r\n }\r\n\r\n static array(arr: unknown[]) {\r\n console.log(\"[CORRECTS] \", arr);\r\n }\r\n\r\n static response(text: string) {\r\n console.log(text);\r\n }\r\n}\r\n\r\nexport default Logs;\r\n","/**\r\n * Normlize text\r\n * @param text\r\n */\r\nfunction normalizeText(text: string) {\r\n return text\r\n .replace(/\\n+/g, \"\\n\")\r\n .replace(/[ \\t]+/g, \" \")\r\n .toLowerCase()\r\n .trim()\r\n .replace(/^[a-z\\d]\\.\\s/gi, \"\") //a. text, b. text, c. text, 1. text, 2. text, 3.text\r\n .replace(/\\n[a-z\\d]\\.\\s/gi, \"\\n\"); //same but with new line\r\n}\r\n\r\nexport default normalizeText;\r\n","import Config from \"../types/config\";\r\nimport normalizeText from \"../utils/normalize-text\";\r\n\r\n/**\r\n * Get the response from chatGPT api\r\n * @param config\r\n * @param question\r\n * @returns\r\n */\r\nasync function getChatGPTResponse(\r\n config: Config,\r\n question: string\r\n): Promise {\r\n const controller = new AbortController();\r\n const timeoutControler = setTimeout(() => controller.abort(), 10000);\r\n const req = await fetch(\"https://api.openai.com/v1/chat/completions\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${config.apiKey}`,\r\n },\r\n signal: config.timeout ? controller.signal : null,\r\n body: JSON.stringify({\r\n model: config.model,\r\n messages: [{ role: \"user\", content: question }],\r\n temperature: 0.8,\r\n top_p: 1.0,\r\n presence_penalty: 1.0,\r\n stop: null,\r\n }),\r\n });\r\n clearTimeout(timeoutControler);\r\n const rep = await req.json();\r\n const response = rep.choices[0].message.content;\r\n return normalizeText(response);\r\n}\r\n\r\nexport default getChatGPTResponse;\r\n","/**\r\n * Convert table to representating string table\r\n * @param table\r\n * @returns\r\n */\r\nfunction htmlTableToString(table: HTMLTableElement) {\r\n const tab: string[][] = [];\r\n const lines = Array.from(table.querySelectorAll(\"tr\"));\r\n const maxColumnsLength: number[] = [];\r\n lines.map((line) => {\r\n const cells = Array.from(line.querySelectorAll(\"td, th\"));\r\n const cellsContent = cells.map((cell, index) => {\r\n const content = cell.textContent?.trim();\r\n maxColumnsLength[index] = Math.max(\r\n maxColumnsLength[index] || 0,\r\n content.length || 0\r\n );\r\n return content;\r\n });\r\n tab.push(cellsContent);\r\n });\r\n\r\n const lineSeparationSize =\r\n maxColumnsLength.reduce((a, b) => a + b) + tab[0].length * 3 + 1;\r\n const lineSeparation =\r\n \"\\n\" + Array(lineSeparationSize).fill(\"-\").join(\"\") + \"\\n\";\r\n\r\n const mappedTab = tab.map((line) => {\r\n const mappedLine = line.map(\r\n (content, index) => content.padEnd(maxColumnsLength[index], \"\\u00A0\") //for no matching with \\s\r\n );\r\n return \"| \" + mappedLine.join(\" | \") + \" |\";\r\n });\r\n const head = mappedTab.shift();\r\n return head + lineSeparation + mappedTab.join(\"\\n\");\r\n}\r\n\r\nexport default htmlTableToString;\r\n","import Config from \"../types/config\";\r\nimport normalizeText from \"../utils/normalize-text\";\r\nimport htmlTableToString from \"../utils/html-table-to-string\";\r\n\r\n/**\r\n * Normalize the question and add sub informations\r\n * @param langage\r\n * @param question\r\n * @returns\r\n */\r\nfunction normalizeQuestion(config: Config, questionContainer: HTMLElement) {\r\n let question = questionContainer.textContent;\r\n\r\n if (config.table) {\r\n //make table more readable for chat-gpt\r\n const tables: NodeListOf =\r\n questionContainer.querySelectorAll(\".qtext table\");\r\n for (const table of tables) {\r\n question = question.replace(\r\n table.textContent,\r\n \"\\n\" + htmlTableToString(table) + \"\\n\"\r\n );\r\n }\r\n }\r\n\r\n const finalQuestion = `Give a short response as possible for this question, reply in the following question langage and only show the result: \r\n ${question} \r\n (If you have to choose between multiple results only show the corrects one, separate them with new line and take the same text as the question)`;\r\n return normalizeText(finalQuestion);\r\n}\r\n\r\nexport default normalizeQuestion;\r\n","import Config from \"../../types/config\";\r\nimport Logs from \"../../utils/logs\";\r\nimport normalizeText from \"../../utils/normalize-text\";\r\n\r\n/**\r\n * Handle checkbox and input elements\r\n * @param config\r\n * @param inputList\r\n * @param response\r\n */\r\nfunction handleRadioAndCheckbox(\r\n config: Config,\r\n inputList: NodeListOf,\r\n response: string\r\n): boolean {\r\n const input = inputList?.[0] as HTMLInputElement;\r\n\r\n if (!input || (input.type !== \"checkbox\" && input.type !== \"radio\"))\r\n return false;\r\n\r\n for (const input of inputList as NodeListOf) {\r\n const content = normalizeText(input.parentNode.textContent);\r\n const valide = response.includes(content);\r\n if (config.logs) Logs.responseTry(content, valide);\r\n if (valide) {\r\n if (config.mouseover) {\r\n input.addEventListener(\"mouseover\", () => (input.checked = true), {\r\n once: true,\r\n });\r\n } else {\r\n input.checked = true;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport default handleRadioAndCheckbox;\r\n","import Config from \"../../types/config\";\r\nimport Logs from \"../../utils/logs\";\r\nimport normalizeText from \"../../utils/normalize-text\";\r\n\r\n/**\r\n * Handle select elements (and put in order select)\r\n * @param config\r\n * @param inputList\r\n * @param response\r\n * @returns\r\n */\r\nfunction handleSelect(\r\n config: Config,\r\n inputList: NodeListOf,\r\n response: string\r\n): boolean {\r\n if (inputList.length === 0 || inputList[0].tagName !== \"SELECT\") return false;\r\n\r\n let correct = response.split(\"\\n\");\r\n if (correct.length === 1 && correct.length !== inputList.length)\r\n correct = response.split(\",\");\r\n\r\n if (config.logs) Logs.array(correct);\r\n\r\n for (let j = 0; j < inputList.length; ++j) {\r\n const options = inputList[j].querySelectorAll(\"option\");\r\n\r\n for (const option of options) {\r\n const content = normalizeText(option.textContent);\r\n const valide = correct[j].includes(content);\r\n\r\n //if it's a put in order\r\n if (!isNaN(parseInt(content))) {\r\n const content = normalizeText(\r\n (option.parentNode as HTMLElement)\r\n .closest(\"tr\")\r\n .querySelector(\".text\").textContent\r\n );\r\n const index = correct.findIndex((c) => {\r\n const valide = c.includes(content);\r\n if (config.logs) Logs.responseTry(content, valide);\r\n return valide;\r\n });\r\n if (index !== -1) {\r\n if (config.mouseover) {\r\n options[index + 1].closest(\"select\").addEventListener(\r\n \"click\",\r\n function () {\r\n options[index + 1].selected = \"selected\" as any;\r\n },\r\n { once: true }\r\n );\r\n } else {\r\n options[index + 1].selected = \"selected\" as any;\r\n }\r\n break;\r\n }\r\n }\r\n //end put in order\r\n\r\n if (config.logs) Logs.responseTry(content, valide);\r\n\r\n if (valide) {\r\n if (config.mouseover) {\r\n option\r\n .closest(\"select\")\r\n .addEventListener(\"click\", () => (option.selected = true), {\r\n once: true,\r\n });\r\n } else {\r\n option.selected = true;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport default handleSelect;\r\n","import Config from \"../../types/config\";\r\n\r\n/**\r\n * Handle textbox\r\n * @param config\r\n * @param inputList\r\n * @param response\r\n * @returns\r\n */\r\nfunction handleTextbox(\r\n config: Config,\r\n inputList: NodeListOf,\r\n response: string\r\n): boolean {\r\n const input = inputList[0] as HTMLInputElement | HTMLTextAreaElement;\r\n\r\n if (\r\n inputList.length !== 1 ||\r\n (input.tagName !== \"TEXTAREA\" && input.type !== \"text\")\r\n )\r\n return false;\r\n\r\n if (config.typing) {\r\n let index = 0;\r\n input.addEventListener(\"keydown\", function (event: KeyboardEvent) {\r\n if (event.key === \"Backspace\") index = response.length + 1;\r\n if (index > response.length) return;\r\n event.preventDefault();\r\n input.value = response.slice(0, ++index);\r\n });\r\n } else {\r\n input.value = response;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport default handleTextbox;\r\n","import Config from \"../../types/config\";\r\nimport titleIndications from \"../../utils/title-indications\";\r\n\r\n/**\r\n * Copy the response in the clipboard if we can automaticaly fill the question\r\n * @param config\r\n * @param inputList\r\n * @param response\r\n * @param force Force the copy to clipboard\r\n * @returns\r\n */\r\nfunction handleClipboard(config: Config, response: string) {\r\n if (config.title) titleIndications(\"Copied to clipboard\");\r\n navigator.clipboard.writeText(response);\r\n}\r\n\r\nexport default handleClipboard;\r\n","import Config from \"../../types/config\";\r\n\r\n/**\r\n * Handle number input\r\n * @param config\r\n * @param inputList\r\n * @param response\r\n * @returns\r\n */\r\nfunction handleNumber(\r\n config: Config,\r\n inputList: NodeListOf,\r\n response: string\r\n): boolean {\r\n const input = inputList[0] as HTMLInputElement | HTMLTextAreaElement;\r\n\r\n if (inputList.length !== 1 || input.type !== \"number\") return false;\r\n\r\n const number = response.match(/\\d+([,\\.]\\d+)?/gi)?.[0]?.replace(\",\", \".\");\r\n\r\n if (!number) return false;\r\n\r\n if (config.typing) {\r\n let index = 0;\r\n input.addEventListener(\"keydown\", function (event: KeyboardEvent) {\r\n if (event.key === \"Backspace\") index = number.length + 1;\r\n if (index > number.length) return;\r\n event.preventDefault();\r\n if (number.slice(index, index + 1) === \".\") ++index;\r\n input.value = number.slice(0, ++index);\r\n });\r\n } else {\r\n input.value = number;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport default handleNumber;\r\n","import Config from \"../../types/config\";\r\n\r\nfunction handleContentEditable(\r\n config: Config,\r\n inputList: NodeListOf,\r\n response: string\r\n): boolean {\r\n const input = inputList[0];\r\n\r\n if (\r\n inputList.length !== 1 ||\r\n input.getAttribute(\"contenteditable\") !== \"true\"\r\n )\r\n return false;\r\n\r\n if (config.typing) {\r\n let index = 0;\r\n input.addEventListener(\"keydown\", function (event: KeyboardEvent) {\r\n if (event.key === \"Backspace\") index = response.length + 1;\r\n if (index > response.length) return;\r\n event.preventDefault();\r\n input.textContent = response.slice(0, ++index);\r\n\r\n //put the cursor at the end\r\n input.focus();\r\n const range = document.createRange();\r\n range.selectNodeContents(input);\r\n range.collapse(false);\r\n const selection = window.getSelection();\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n });\r\n } else {\r\n input.textContent = response;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport default handleContentEditable;\r\n","import Config from \"../types/config\";\r\nimport Logs from \"../utils/logs\";\r\nimport getChatGPTResponse from \"./get-response\";\r\nimport normalizeQuestion from \"./normalize-question\";\r\nimport handleRadioAndCheckbox from \"./questions/radio-checkbox\";\r\nimport handleSelect from \"./questions/select\";\r\nimport handleTextbox from \"./questions/textbox\";\r\nimport handleClipboard from \"./questions/clipboard\";\r\nimport handleNumber from \"./questions/number\";\r\nimport handleContentEditable from \"./questions/contenteditable\";\r\n\r\n/**\r\n * Reply to the question\r\n * @param config\r\n * @param hiddenButton\r\n * @param form\r\n * @param query\r\n * @returns\r\n */\r\nasync function reply(\r\n config: Config,\r\n hiddenButton: HTMLElement,\r\n form: HTMLElement,\r\n query: string\r\n) {\r\n if (config.cursor) hiddenButton.style.cursor = \"wait\";\r\n\r\n form.querySelector(\".accesshide\")?.remove();\r\n\r\n const question = normalizeQuestion(config, form);\r\n const inputList: NodeListOf = form.querySelectorAll(query);\r\n\r\n const response = await getChatGPTResponse(config, question).catch(\r\n (error) => ({\r\n error,\r\n })\r\n );\r\n\r\n if (config.cursor)\r\n hiddenButton.style.cursor = config.infinite ? \"pointer\" : \"initial\";\r\n\r\n if (typeof response === \"object\" && \"error\" in response) {\r\n console.error(response.error);\r\n return;\r\n }\r\n\r\n if (config.logs) {\r\n Logs.question(question);\r\n Logs.response(response);\r\n }\r\n\r\n const handlers = [\r\n handleContentEditable,\r\n handleTextbox,\r\n handleNumber,\r\n handleSelect,\r\n handleRadioAndCheckbox,\r\n ];\r\n\r\n for (const handler of handlers) {\r\n if (handler(config, inputList, response)) return;\r\n }\r\n\r\n handleClipboard(config, response);\r\n}\r\n\r\nexport default reply;\r\n","import Config from \"../types/config\";\r\nimport titleIndications from \"../utils/title-indications\";\r\nimport reply from \"./reply\";\r\n\r\nconst pressedKeys: string[] = [];\r\nconst listeners: {\r\n element: HTMLElement;\r\n fn: (this: HTMLElement, ev: MouseEvent) => any;\r\n}[] = [];\r\n\r\n/**\r\n * Create a listener on the keyboard to inject the code\r\n * @param config\r\n */\r\nfunction codeListener(config: Config) {\r\n document.body.addEventListener(\"keydown\", function (event) {\r\n pressedKeys.push(event.key);\r\n if (pressedKeys.length > config.code.length) pressedKeys.shift();\r\n if (pressedKeys.join(\"\") === config.code) {\r\n pressedKeys.length = 0;\r\n setUpMoodleGpt(config);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Setup moodleGPT into the page (remove/injection)\r\n * @param config\r\n * @returns\r\n */\r\nfunction setUpMoodleGpt(config: Config) {\r\n //removing events\r\n if (listeners.length > 0) {\r\n for (const listener of listeners) {\r\n if (config.cursor) listener.element.style.cursor = \"initial\";\r\n listener.element.removeEventListener(\"click\", listener.fn);\r\n }\r\n if (config.title) titleIndications(\"Removed\");\r\n listeners.length = 0;\r\n return;\r\n }\r\n\r\n //injection\r\n const inputQuery = [\"checkbox\", \"radio\", \"text\", \"number\"]\r\n .map((e) => `input[type=\"${e}\"]`)\r\n .join(\",\");\r\n const query = inputQuery + \", textarea, select, [contenteditable]\";\r\n const forms = Array.from(document.querySelectorAll(\".formulation\"));\r\n\r\n for (const form of forms) {\r\n const hiddenButton: HTMLElement = form.querySelector(\".qtext\");\r\n\r\n if (config.cursor) hiddenButton.style.cursor = \"pointer\";\r\n const fn = reply.bind(null, config, hiddenButton, form, query);\r\n listeners.push({ element: hiddenButton, fn });\r\n hiddenButton.addEventListener(\"click\", fn, { once: !config.infinite });\r\n }\r\n\r\n if (config.title) titleIndications(\"Injected\");\r\n}\r\n\r\nexport default codeListener;\r\n","import codeListener from \"./core/code-listener\";\r\n\r\nchrome.storage.sync.get([\"moodleGPT\"]).then(function (storage) {\r\n const config = storage.moodleGPT;\r\n\r\n if (!config) throw new Error(\"Please configure MoodleGPT into the extension\");\r\n\r\n codeListener(config);\r\n});\r\n"],"names":[],"mappings":"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","x_google_ignoreList":[1]} \ No newline at end of file +{"version":3,"file":"MoodleGPT.js","sources":["../src/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/utils/logs.ts","../src/utils/normalize-text.ts","../src/core/get-response.ts","../src/utils/html-table-to-string.ts","../src/core/normalize-question.ts","../src/core/questions/radio-checkbox.ts","../src/core/questions/select.ts","../src/core/questions/textbox.ts","../src/core/questions/clipboard.ts","../src/core/questions/number.ts","../src/core/questions/contenteditable.ts","../src/core/reply.ts","../src/core/code-listener.ts","../src/index.ts"],"sourcesContent":["/**\r\n * Show some informations into the document title and remove it after 3000ms\r\n * @param text\r\n */\r\nfunction titleIndications(text: string) {\r\n const backTitle = document.title;\r\n document.title = text;\r\n setTimeout(() => (document.title = backTitle), 3000);\r\n}\r\n\r\nexport default titleIndications;\r\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.push(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.push(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","class Logs {\r\n static question(text: string) {\r\n const css = \"color: cyan\";\r\n console.log(\"%c[QUESTION]: %s\", css, text);\r\n }\r\n\r\n static responseTry(text: string, valide: boolean) {\r\n const css = \"color: \" + (valide ? \"green\" : \"red\");\r\n console.log(\"%c[CHECKING]: %s\", css, text);\r\n }\r\n\r\n static array(arr: unknown[]) {\r\n console.log(\"[CORRECTS] \", arr);\r\n }\r\n\r\n static response(text: string) {\r\n console.log(text);\r\n }\r\n}\r\n\r\nexport default Logs;\r\n","/**\r\n * Normlize text\r\n * @param text\r\n */\r\nfunction normalizeText(text: string) {\r\n return text\r\n .replace(/\\n+/g, \"\\n\")\r\n .replace(/[ \\t]+/g, \" \")\r\n .toLowerCase()\r\n .trim()\r\n .replace(/^[a-z\\d]\\.\\s/gi, \"\") //a. text, b. text, c. text, 1. text, 2. text, 3.text\r\n .replace(/\\n[a-z\\d]\\.\\s/gi, \"\\n\"); //same but with new line\r\n}\r\n\r\nexport default normalizeText;\r\n","import Config from \"../types/config\";\r\nimport normalizeText from \"../utils/normalize-text\";\r\n\r\n/**\r\n * Get the response from chatGPT api\r\n * @param config\r\n * @param question\r\n * @returns\r\n */\r\nasync function getChatGPTResponse(\r\n config: Config,\r\n question: string\r\n): Promise {\r\n const controller = new AbortController();\r\n const timeoutControler = setTimeout(() => controller.abort(), 10000);\r\n const req = await fetch(\"https://api.openai.com/v1/chat/completions\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${config.apiKey}`,\r\n },\r\n signal: config.timeout ? controller.signal : null,\r\n body: JSON.stringify({\r\n model: config.model,\r\n messages: [{ role: \"user\", content: question }],\r\n temperature: 0.8,\r\n top_p: 1.0,\r\n presence_penalty: 1.0,\r\n stop: null,\r\n }),\r\n });\r\n clearTimeout(timeoutControler);\r\n const rep = await req.json();\r\n const response = rep.choices[0].message.content;\r\n return normalizeText(response);\r\n}\r\n\r\nexport default getChatGPTResponse;\r\n","/**\r\n * Convert table to representating string table\r\n * @param table\r\n * @returns\r\n */\r\nfunction htmlTableToString(table: HTMLTableElement) {\r\n const tab: string[][] = [];\r\n const lines = Array.from(table.querySelectorAll(\"tr\"));\r\n const maxColumnsLength: number[] = [];\r\n lines.map((line) => {\r\n const cells = Array.from(line.querySelectorAll(\"td, th\"));\r\n const cellsContent = cells.map((cell, index) => {\r\n const content = cell.textContent?.trim();\r\n maxColumnsLength[index] = Math.max(\r\n maxColumnsLength[index] || 0,\r\n content.length || 0\r\n );\r\n return content;\r\n });\r\n tab.push(cellsContent);\r\n });\r\n\r\n const lineSeparationSize =\r\n maxColumnsLength.reduce((a, b) => a + b) + tab[0].length * 3 + 1;\r\n const lineSeparation =\r\n \"\\n\" + Array(lineSeparationSize).fill(\"-\").join(\"\") + \"\\n\";\r\n\r\n const mappedTab = tab.map((line) => {\r\n const mappedLine = line.map(\r\n (content, index) => content.padEnd(maxColumnsLength[index], \"\\u00A0\") //for no matching with \\s\r\n );\r\n return \"| \" + mappedLine.join(\" | \") + \" |\";\r\n });\r\n const head = mappedTab.shift();\r\n return head + lineSeparation + mappedTab.join(\"\\n\");\r\n}\r\n\r\nexport default htmlTableToString;\r\n","import Config from \"../types/config\";\r\nimport normalizeText from \"../utils/normalize-text\";\r\nimport htmlTableToString from \"../utils/html-table-to-string\";\r\n\r\n/**\r\n * Normalize the question and add sub informations\r\n * @param langage\r\n * @param question\r\n * @returns\r\n */\r\nfunction normalizeQuestion(config: Config, questionContainer: HTMLElement) {\r\n let question = questionContainer.textContent;\r\n\r\n if (config.table) {\r\n //make table more readable for chat-gpt\r\n const tables: NodeListOf =\r\n questionContainer.querySelectorAll(\".qtext table\");\r\n for (const table of tables) {\r\n question = question.replace(\r\n table.textContent,\r\n \"\\n\" + htmlTableToString(table) + \"\\n\"\r\n );\r\n }\r\n }\r\n\r\n const finalQuestion = `Give a short response as possible for this question, reply in the following question langage and only show the result: \r\n ${question} \r\n (If you have to choose between multiple results only show the corrects one, separate them with new line and take the same text as the question)`;\r\n return normalizeText(finalQuestion);\r\n}\r\n\r\nexport default normalizeQuestion;\r\n","import Config from \"../../types/config\";\r\nimport Logs from \"../../utils/logs\";\r\nimport normalizeText from \"../../utils/normalize-text\";\r\n\r\n/**\r\n * Handle checkbox and input elements\r\n * @param config\r\n * @param inputList\r\n * @param response\r\n */\r\nfunction handleRadioAndCheckbox(\r\n config: Config,\r\n inputList: NodeListOf,\r\n response: string\r\n): boolean {\r\n const input = inputList?.[0] as HTMLInputElement;\r\n\r\n if (!input || (input.type !== \"checkbox\" && input.type !== \"radio\"))\r\n return false;\r\n\r\n for (const input of inputList as NodeListOf) {\r\n const content = normalizeText(input.parentNode.textContent);\r\n const valide = response.includes(content);\r\n if (config.logs) Logs.responseTry(content, valide);\r\n if (valide) {\r\n if (config.mouseover) {\r\n input.addEventListener(\"mouseover\", () => (input.checked = true), {\r\n once: true,\r\n });\r\n } else {\r\n input.checked = true;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport default handleRadioAndCheckbox;\r\n","import Config from \"../../types/config\";\r\nimport Logs from \"../../utils/logs\";\r\nimport normalizeText from \"../../utils/normalize-text\";\r\n\r\n/**\r\n * Handle select elements (and put in order select)\r\n * @param config\r\n * @param inputList\r\n * @param response\r\n * @returns\r\n */\r\nfunction handleSelect(\r\n config: Config,\r\n inputList: NodeListOf,\r\n response: string\r\n): boolean {\r\n if (inputList.length === 0 || inputList[0].tagName !== \"SELECT\") return false;\r\n\r\n let correct = response.split(\"\\n\");\r\n if (correct.length === 1 && correct.length !== inputList.length)\r\n correct = response.split(\",\");\r\n\r\n if (config.logs) Logs.array(correct);\r\n\r\n for (let j = 0; j < inputList.length; ++j) {\r\n const options = inputList[j].querySelectorAll(\"option\");\r\n\r\n for (const option of options) {\r\n const content = normalizeText(option.textContent);\r\n const valide = correct[j].includes(content);\r\n\r\n //if it's a put in order\r\n if (!isNaN(parseInt(content))) {\r\n const content = normalizeText(\r\n (option.parentNode as HTMLElement)\r\n .closest(\"tr\")\r\n .querySelector(\".text\").textContent\r\n );\r\n const index = correct.findIndex((c) => {\r\n const valide = c.includes(content);\r\n if (config.logs) Logs.responseTry(content, valide);\r\n return valide;\r\n });\r\n if (index !== -1) {\r\n if (config.mouseover) {\r\n options[index + 1].closest(\"select\").addEventListener(\r\n \"click\",\r\n function () {\r\n options[index + 1].selected = \"selected\" as any;\r\n },\r\n { once: true }\r\n );\r\n } else {\r\n options[index + 1].selected = \"selected\" as any;\r\n }\r\n break;\r\n }\r\n }\r\n //end put in order\r\n\r\n if (config.logs) Logs.responseTry(content, valide);\r\n\r\n if (valide) {\r\n if (config.mouseover) {\r\n option\r\n .closest(\"select\")\r\n .addEventListener(\"click\", () => (option.selected = true), {\r\n once: true,\r\n });\r\n } else {\r\n option.selected = true;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport default handleSelect;\r\n","import Config from \"../../types/config\";\r\n\r\n/**\r\n * Handle textbox\r\n * @param config\r\n * @param inputList\r\n * @param response\r\n * @returns\r\n */\r\nfunction handleTextbox(\r\n config: Config,\r\n inputList: NodeListOf,\r\n response: string\r\n): boolean {\r\n const input = inputList[0] as HTMLInputElement | HTMLTextAreaElement;\r\n\r\n if (\r\n inputList.length !== 1 ||\r\n (input.tagName !== \"TEXTAREA\" && input.type !== \"text\")\r\n )\r\n return false;\r\n\r\n if (config.typing) {\r\n let index = 0;\r\n input.addEventListener(\"keydown\", function (event: KeyboardEvent) {\r\n if (event.key === \"Backspace\") index = response.length + 1;\r\n if (index > response.length) return;\r\n event.preventDefault();\r\n input.value = response.slice(0, ++index);\r\n });\r\n } else {\r\n input.value = response;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport default handleTextbox;\r\n","import Config from \"../../types/config\";\r\nimport titleIndications from \"../../utils/title-indications\";\r\n\r\n/**\r\n * Copy the response in the clipboard if we can automaticaly fill the question\r\n * @param config\r\n * @param inputList\r\n * @param response\r\n * @param force Force the copy to clipboard\r\n * @returns\r\n */\r\nfunction handleClipboard(config: Config, response: string) {\r\n if (config.title) titleIndications(\"Copied to clipboard\");\r\n navigator.clipboard.writeText(response);\r\n}\r\n\r\nexport default handleClipboard;\r\n","import Config from \"../../types/config\";\r\n\r\n/**\r\n * Handle number input\r\n * @param config\r\n * @param inputList\r\n * @param response\r\n * @returns\r\n */\r\nfunction handleNumber(\r\n config: Config,\r\n inputList: NodeListOf,\r\n response: string\r\n): boolean {\r\n const input = inputList[0] as HTMLInputElement | HTMLTextAreaElement;\r\n\r\n if (inputList.length !== 1 || input.type !== \"number\") return false;\r\n\r\n const number = response.match(/\\d+([,\\.]\\d+)?/gi)?.[0]?.replace(\",\", \".\");\r\n\r\n if (!number) return false;\r\n\r\n if (config.typing) {\r\n let index = 0;\r\n input.addEventListener(\"keydown\", function (event: KeyboardEvent) {\r\n if (event.key === \"Backspace\") index = number.length + 1;\r\n if (index > number.length) return;\r\n event.preventDefault();\r\n if (number.slice(index, index + 1) === \".\") ++index;\r\n input.value = number.slice(0, ++index);\r\n });\r\n } else {\r\n input.value = number;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport default handleNumber;\r\n","import Config from \"../../types/config\";\r\n\r\nfunction handleContentEditable(\r\n config: Config,\r\n inputList: NodeListOf,\r\n response: string\r\n): boolean {\r\n const input = inputList[0];\r\n\r\n if (\r\n inputList.length !== 1 ||\r\n input.getAttribute(\"contenteditable\") !== \"true\"\r\n )\r\n return false;\r\n\r\n if (config.typing) {\r\n let index = 0;\r\n input.addEventListener(\"keydown\", function (event: KeyboardEvent) {\r\n if (event.key === \"Backspace\") index = response.length + 1;\r\n if (index > response.length) return;\r\n event.preventDefault();\r\n input.textContent = response.slice(0, ++index);\r\n\r\n //put the cursor at the end\r\n input.focus();\r\n const range = document.createRange();\r\n range.selectNodeContents(input);\r\n range.collapse(false);\r\n const selection = window.getSelection();\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n });\r\n } else {\r\n input.textContent = response;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport default handleContentEditable;\r\n","import Config from \"../types/config\";\r\nimport Logs from \"../utils/logs\";\r\nimport getChatGPTResponse from \"./get-response\";\r\nimport normalizeQuestion from \"./normalize-question\";\r\nimport handleRadioAndCheckbox from \"./questions/radio-checkbox\";\r\nimport handleSelect from \"./questions/select\";\r\nimport handleTextbox from \"./questions/textbox\";\r\nimport handleClipboard from \"./questions/clipboard\";\r\nimport handleNumber from \"./questions/number\";\r\nimport handleContentEditable from \"./questions/contenteditable\";\r\n\r\n/**\r\n * Reply to the question\r\n * @param config\r\n * @param hiddenButton\r\n * @param form\r\n * @param query\r\n * @returns\r\n */\r\nasync function reply(\r\n config: Config,\r\n hiddenButton: HTMLElement,\r\n form: HTMLElement,\r\n query: string\r\n) {\r\n if (config.cursor) hiddenButton.style.cursor = \"wait\";\r\n\r\n form.querySelector(\".accesshide\")?.remove();\r\n\r\n const question = normalizeQuestion(config, form);\r\n const inputList: NodeListOf = form.querySelectorAll(query);\r\n\r\n const response = await getChatGPTResponse(config, question).catch(\r\n (error) => ({\r\n error,\r\n })\r\n );\r\n\r\n if (config.cursor)\r\n hiddenButton.style.cursor = config.infinite ? \"pointer\" : \"initial\";\r\n\r\n if (typeof response === \"object\" && \"error\" in response) {\r\n console.error(response.error);\r\n return;\r\n }\r\n\r\n if (config.logs) {\r\n Logs.question(question);\r\n Logs.response(response);\r\n }\r\n\r\n if (config.mode === \"clipboard\") {\r\n return handleClipboard(config, response);\r\n }\r\n\r\n if (config.mode === \"question-to-answer\") {\r\n const questionBackup = form.textContent;\r\n const questionContainer = form.querySelector(\".qtext\");\r\n questionContainer.textContent = response;\r\n questionContainer.addEventListener(\"click\", function () {\r\n questionContainer.textContent =\r\n questionContainer.textContent === questionBackup\r\n ? response\r\n : questionBackup;\r\n });\r\n return;\r\n }\r\n\r\n const handlers = [\r\n handleContentEditable,\r\n handleTextbox,\r\n handleNumber,\r\n handleSelect,\r\n handleRadioAndCheckbox,\r\n ];\r\n\r\n for (const handler of handlers) {\r\n if (handler(config, inputList, response)) return;\r\n }\r\n\r\n /** In the case we can't auto complete the question */\r\n handleClipboard(config, response);\r\n}\r\n\r\nexport default reply;\r\n","import Config from \"../types/config\";\r\nimport titleIndications from \"../utils/title-indications\";\r\nimport reply from \"./reply\";\r\n\r\nconst pressedKeys: string[] = [];\r\nconst listeners: {\r\n element: HTMLElement;\r\n fn: (this: HTMLElement, ev: MouseEvent) => any;\r\n}[] = [];\r\n\r\n/**\r\n * Create a listener on the keyboard to inject the code\r\n * @param config\r\n */\r\nfunction codeListener(config: Config) {\r\n document.body.addEventListener(\"keydown\", function (event) {\r\n pressedKeys.push(event.key);\r\n if (pressedKeys.length > config.code.length) pressedKeys.shift();\r\n if (pressedKeys.join(\"\") === config.code) {\r\n pressedKeys.length = 0;\r\n setUpMoodleGpt(config);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Setup moodleGPT into the page (remove/injection)\r\n * @param config\r\n * @returns\r\n */\r\nfunction setUpMoodleGpt(config: Config) {\r\n //removing events\r\n if (listeners.length > 0) {\r\n for (const listener of listeners) {\r\n if (config.cursor) listener.element.style.cursor = \"initial\";\r\n listener.element.removeEventListener(\"click\", listener.fn);\r\n }\r\n if (config.title) titleIndications(\"Removed\");\r\n listeners.length = 0;\r\n return;\r\n }\r\n\r\n //injection\r\n const inputQuery = [\"checkbox\", \"radio\", \"text\", \"number\"]\r\n .map((e) => `input[type=\"${e}\"]`)\r\n .join(\",\");\r\n const query = inputQuery + \", textarea, select, [contenteditable]\";\r\n const forms = Array.from(document.querySelectorAll(\".formulation\"));\r\n\r\n for (const form of forms) {\r\n const hiddenButton: HTMLElement = form.querySelector(\".qtext\");\r\n\r\n if (config.cursor) hiddenButton.style.cursor = \"pointer\";\r\n const fn = reply.bind(null, config, hiddenButton, form, query);\r\n listeners.push({ element: hiddenButton, fn });\r\n hiddenButton.addEventListener(\"click\", fn, { once: !config.infinite });\r\n }\r\n\r\n if (config.title) titleIndications(\"Injected\");\r\n}\r\n\r\nexport default codeListener;\r\n","import codeListener from \"./core/code-listener\";\r\n\r\nchrome.storage.sync.get([\"moodleGPT\"]).then(function (storage) {\r\n const config = storage.moodleGPT;\r\n\r\n if (!config) throw new Error(\"Please configure MoodleGPT into the extension\");\r\n\r\n codeListener(config);\r\n});\r\n"],"names":[],"mappings":"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","x_google_ignoreList":[1]} \ No newline at end of file diff --git a/extension/manifest.json b/extension/manifest.json index 5308d4b..9493a5a 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "MoodleGPT", - "version": "1.0.1", + "version": "1.0.2", "description": "Hidden chat-gpt for your moodle quiz", "permissions": ["activeTab", "tabs", "storage"], "action": { diff --git a/extension/popup/index.html b/extension/popup/index.html index c62ec07..412168f 100644 --- a/extension/popup/index.html +++ b/extension/popup/index.html @@ -48,7 +48,28 @@ title="Provide an api key first" > -

+
+ +

Mode:

+
+
+
    +
  • +
  • + +
  • +
  • + +
  • +
+
+
+ +

Settings:

+
+
diff --git a/extension/popup/js/index.js b/extension/popup/js/index.js index 8c1a037..c9487f4 100644 --- a/extension/popup/js/index.js +++ b/extension/popup/js/index.js @@ -1,6 +1,7 @@ const saveBtn = document.querySelector(".save"); const message = document.querySelector("#message"); +/* inputs id */ const inputsText = ["apiKey", "code", "model"]; const inputsCheckbox = [ "logs", @@ -13,6 +14,21 @@ const inputsCheckbox = [ "timeout", ]; +const mode = document.querySelector("#mode"); +const modes = mode.querySelectorAll("button"); +let actualMode = "autocomplete"; +/* inputs id that need to be disabled for a specific mode */ +const disabledForThisMode = { + autocomplete: [], + clipboard: ["typing", "mouseover"], + "question-to-answer": ["typing", "infinite", "mouseover"], +}; + +/** + * Show message into the popup + * @param {string} messageTxt + * @param {boolean} valide + */ function showMessage(messageTxt, valide) { message.style.color = valide ? "limegreen" : "red"; message.textContent = messageTxt; @@ -20,15 +36,48 @@ function showMessage(messageTxt, valide) { setTimeout(() => (message.style.display = "none"), 5000); } -//save the configuration +/** + * Handle when a mode change to show specific input + */ +function handleModeChange() { + const needDisable = disabledForThisMode[actualMode]; + const dontNeedDisable = inputsCheckbox.filter( + (input) => !needDisable.includes(input) + ); + for (const id of needDisable) { + document.querySelector("#" + id).parentElement.style.display = "none"; + } + for (const id of dontNeedDisable) { + document.querySelector("#" + id).parentElement.style.display = null; + } +} + +/* Mode handler */ +modes.forEach((button) => { + button.addEventListener("click", function () { + const value = button.value; + actualMode = value; + for (const mode of modes) { + if (mode.value !== value) { + mode.classList.add("not-selected"); + } else { + mode.classList.remove("not-selected"); + } + } + handleModeChange(); + }); +}); + +/* Save the configuration */ saveBtn.addEventListener("click", function () { const [apiKey, code, model] = inputsText.map((selector) => document.querySelector("#" + selector).value.trim() ); const [logs, title, cursor, typing, mouseover, infinite, table, timeout] = - inputsCheckbox.map( - (selector) => document.querySelector("#" + selector).checked - ); + inputsCheckbox.map((selector) => { + const element = document.querySelector("#" + selector); + return element.checked && element.parentElement.style.display !== "none"; + }); if (!apiKey || !code || !model) { showMessage("Please complete all the form"); @@ -53,31 +102,16 @@ saveBtn.addEventListener("click", function () { infinite, table, timeout, + mode: actualMode, }, }); showMessage("Configuration saved", true); }); -//we load back the configuration -chrome.storage.sync.get(["moodleGPT"]).then(function (storage) { - const config = storage.moodleGPT; - - if (config) { - inputsText.forEach((key) => - config[key] - ? (document.querySelector("#" + key).value = config[key]) - : null - ); - inputsCheckbox.forEach( - (key) => (document.querySelector("#" + key).checked = config[key] || "") - ); - } - - getLastChatGPTVersion(); -}); - -//getting the last chatgpt version +/** + * Get the last ChatGPT version + */ function getLastChatGPTVersion() { const apiKeySelector = document.querySelector("#apiKey"); const reloadModel = document.querySelector("#reloadModel"); @@ -119,3 +153,33 @@ function getLastChatGPTVersion() { } }); } + +/* we load back the configuration */ +chrome.storage.sync.get(["moodleGPT"]).then(function (storage) { + const config = storage.moodleGPT; + + if (config) { + if (config.mode) { + actualMode = config.mode; + for (const mode of modes) { + if (mode.value === config.mode) { + mode.classList.remove("not-selected"); + } else { + mode.classList.add("not-selected"); + } + } + } + + inputsText.forEach((key) => + config[key] + ? (document.querySelector("#" + key).value = config[key]) + : null + ); + inputsCheckbox.forEach( + (key) => (document.querySelector("#" + key).checked = config[key] || "") + ); + } + + handleModeChange(); + getLastChatGPTVersion(); +}); diff --git a/extension/popup/js/version.js b/extension/popup/js/version.js index b40a183..a245508 100644 --- a/extension/popup/js/version.js +++ b/extension/popup/js/version.js @@ -1,6 +1,10 @@ -const currentVersion = "1.0.1"; +const currentVersion = "1.0.2"; const versionDisplay = document.querySelector("#version"); +/** + * Get the last version from the github + * @returns + */ async function getLastVersion() { const req = await fetch( "https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json" @@ -9,6 +13,12 @@ async function getLastVersion() { return rep.version; } +/** + * Display the version or an update message + * @param {string} version + * @param {boolean} isCurrent + * @returns + */ function setVersion(version, isCurrent = true) { if (isCurrent) { versionDisplay.textContent = "v" + version; @@ -24,6 +34,9 @@ function setVersion(version, isCurrent = true) { versionDisplay.appendChild(document.createTextNode(" is now available !")); } +/** + * Check the extension neeed an update or no + */ async function notifyUpdate() { const lastVersion = await getLastVersion().catch((err) => { console.error(err); diff --git a/extension/popup/style.css b/extension/popup/style.css index afba749..a65f7cb 100644 --- a/extension/popup/style.css +++ b/extension/popup/style.css @@ -52,6 +52,7 @@ a { .line { display: flex; + flex-direction: row; width: 100%; gap: 0.5rem; } @@ -98,6 +99,34 @@ a { margin-bottom: 0.75rem; } +.mt { + margin-top: 1rem; +} + +.not-selected { + opacity: 0.4; +} + +#mode li { + list-style: none; + flex-grow: 1; +} + +#mode { + flex-wrap: wrap; +} + +#mode button { + background-color: var(--btn-color); + border: none; + text-align: center; + padding: 0.3rem 0.75rem; + cursor: pointer; + width: 100%; + border-radius: 0.5rem; + text-transform: uppercase; +} + #version { font-size: 0.75rem; } diff --git a/package.json b/package.json index c1849de..5cd74ca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "moodlegpt", - "version": "1.0.1", + "version": "1.0.2", "description": "This extension allows you to hide CHAT-GPT in a Moodle quiz.", "scripts": { "build": "rollup -c" diff --git a/src/core/reply.ts b/src/core/reply.ts index 754c6de..2a861b3 100644 --- a/src/core/reply.ts +++ b/src/core/reply.ts @@ -49,6 +49,23 @@ async function reply( Logs.response(response); } + if (config.mode === "clipboard") { + return handleClipboard(config, response); + } + + if (config.mode === "question-to-answer") { + const questionBackup = form.textContent; + const questionContainer = form.querySelector(".qtext"); + questionContainer.textContent = response; + questionContainer.addEventListener("click", function () { + questionContainer.textContent = + questionContainer.textContent === questionBackup + ? response + : questionBackup; + }); + return; + } + const handlers = [ handleContentEditable, handleTextbox, @@ -61,6 +78,7 @@ async function reply( if (handler(config, inputList, response)) return; } + /** In the case we can't auto complete the question */ handleClipboard(config, response); } diff --git a/src/types/config.d.ts b/src/types/config.d.ts index d913f2e..3259f61 100644 --- a/src/types/config.d.ts +++ b/src/types/config.d.ts @@ -10,6 +10,7 @@ type Config = { title?: boolean; table?: boolean; timeout?: boolean; + mode?: "autocomplete" | "question-to-answer" | "clipboard"; }; export default Config;