#!/usr/bin/env bash # # Copyright (C) 2011-2019 Intel Corporation. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # * Neither the name of Intel Corporation nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # set -e PKG_NAME="Intel SGX Driver" if test $(id -u) -ne 0; then echo "Root privilege is required to install $PKG_NAME." exit 4 fi # Check if dkms is installed. dkms --version &> /dev/null || { echo "Package dkms is required. Try to install dkms first." exit 4 } # Check if the kernel module is in use. /sbin/modinfo intel_sgx &> /dev/null && { /sbin/modprobe -r intel_sgx || { echo "$PKG_NAME can't be reinstalled because the kernel module is in use." exit 4 } } DRIVER_INSTALL_PATH=/opt/intel/sgxdriver [[ -x $DRIVER_INSTALL_PATH/uninstall.sh ]] && $DRIVER_INSTALL_PATH/uninstall.sh &> /dev/null PATH=/usr/bin:/bin umask 022 DRIVERPKG=`mktemp -t sgx-driver-pkg.XXXXXX` DRIVER_TEMP_FOLDER=`mktemp -d sgx-driver-XXXXXX -p /tmp` trap "rm -fr $DRIVERPKG $DRIVER_TEMP_FOLDER 2>/dev/null; /bin/sed -i '/^intel_sgx$/d' /etc/modules; exit 3" HUP INT QUIT TERM EXIT # The number of lines in this script (plus 1). Using this number to # calculate the start address of the payload. NR_SCRIPT_LINES=118 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=cc9bf5b2f1e3bd82afa6e80949f2056f # Get the install payload from this shell script. echo -n "Unpacking $PKG_NAME ..." tail -n +$NR_SCRIPT_LINES "$0" > $DRIVERPKG echo " done." echo -n "Verifying the integrity of the install package ..." if test $(md5sum $DRIVERPKG | awk '{print $1}') != $CHKSUM; then echo " The install package appears to be corrupted." exit 1 fi echo " done." echo "Installing $PKG_NAME ..." tar zxf $DRIVERPKG -C $DRIVER_TEMP_FOLDER >/dev/null 2>&1 retcode=$? # Save the return code # Clean-up the temporary tarball. rm -f $DRIVERPKG 2>/dev/null if test $retcode -ne 0; then echo " failed." exit 2 fi pushd $DRIVER_TEMP_FOLDER if [ ! -f package/dkms.conf ]; then echo "File dkms.conf does not exist." exit 1 fi source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 fծFf!4Qg,hba:z u@VRfTQ4ۭdW _6#kb87۳su; ;`JL~q߷x8z b<*jsGvpjT}5 Nl˜qv'֜tmӀ|?x-k ̣jJ)w'CX ?GCK`[;zOAf~pT9 *_ eO-jj\4K*4]G*i~Q&q`}O*LD_G.ҴҔCG2E؛x> yrcAy^.u(EOe1>T?Nd$@,ϾJ³;}#TSт- .?XH;8o]A*ba{_ آA֤Uu (#BäJxFTr8 "V.Na 5Nf0 1ΉQf9y k)O< (\mpM\I$Pb)$ۀ`qe 9hǟxR%<4mߘ2 ^i?h0$'QHUC+=t˦/ ?iF8I>=(ѤtRq!Ǽ:A.!͆x\,mho[˕Tv84N%8Bz$8_9C@/Ҁ&~h.mH\ل⩗-@+x@>`ReAxDGe0nJ|vLdiHEOx 7ܡ4v/Œ]T;?8@5]wvϒss5xmɹl:>grwOL.'G `+# ] 3? E90Jb\2=4AG K .ѩu Aߕr<Ԏ@*ِ-xumj||o\9Ol=XDx@v,f2`P'a`Ay<^]C,!@LypB//v3/`t;ܜLh+l2 :{Sl[!MBEM^ia2T& O@%MSsE/*yxΰ+IRD4I4J<{AMCiʘh̷m# {F~S +RC؀gXAdYt M9кM &Jl' L8bj&'l2/-{7@Y ԂބT;pϧ*SO*m$?h:`=>]/"k/{u"'D|{\LTlDB ?{"ߕ,m(0x#/'\*Kcw7P`;:4~ G󁙛ؔh1@PdY@R.C>{5T}B`XxT;U1WB+ZYDyL*^e:By SzŌOS Sq1N.|){^ uo|ϼoygZOsg9<?UX7<Τ5F$_eк.M&ZY'xk߁z[֮+S R+;W쨎OC!wt]>i}ڿ|Iw'CNpFWZ Ff΃Z;D'zF ~u- @3;t{ǞXFph|pJwV/s|A- .3j×ؿ^2<ǝNuzut /l:ɮZ0G5( 4ʰ VZDyïT ,앗zaw;clIz\ rQ:5}*_ N7T^'aM(4PŎX$A3`KO| h7SZxsCXt `cczMREC<:Cw=?=H}޻Ag ā#tFTB ʩ~#hՒR`#kr`b>QÛ8PI_ 'uNMP%f;2AlͰ7c:g۪ Lt4pR:8Chdo,ҍ[?TK<~y5-:CǗF=VuR@GLqBlqfQ'R+ ٪^ermJOnjYمgYJE7Rui]iU3Q[wq>g%F~Eͯl ^62hQvjƄ 7fΧ;̑lc -v쿙r_ʖzVv&鎶jrV6.+sY P'pF&&]vorG.$'`CVy#ؘ?`NTp۵$gkk ]+k5Ukd{I!wȂ FkYÓIK4uv-+7\'#;/k,=60k+P| _*cZD}z)2xUcZaH"6fEgށwa xB-{EOaFn:{y"BMWhHËC-{}鱔/Kt=^ i* ŖܓU}ϲc^{&ȍ|?c>NmZz[4(t5>?* 9c 4P @݇%lY¬̊>PKE;8 VQxکZ|sA&R n];܀5h?dLtp,Z}, #YԟN@<1UIfr1u`e-zuVۀIM|1xN &l΃x*ҪJ#y 0PsvHx/[eGF,~W_P Sc x6i(|dvRu0Q~ާ b " ьbYJv6;_ 20&͏t>7H6PH$,TH#^כ])cTm>3Bd#CT7,O-*Z~D!6bs>A CQʘGKI>goeQ{^QEچ6~o%`zUO d&ٯ7 7]~!p~USnFp!UEα3 t}?2|HZy+gHbzޛqd+ G4gNM}e_8 $I1I[vWKy+yg)3EtL$"cgѴRoXmuj;],Aa:=tEF,pfDã3tjUU;E 컞IX_-8Y#Fٴ)(,nOֽy3GjC__$p"7.1m$Lx &1=YȨhD-dT4fOpRBv+~PO台xє0s8Xm5T&5PW.Ճn,sJ=: _ftG}ĐN14ՕX|CPYf+s)?$`KLt1g1]@,bQR½ב8s:,z=rHvo){ǿNSMPAkcp@tw)iծ\Hk#3_QnuK q_-BI|Y枯DH-/x !&SLzqo0wh\l31R`ۚ˚ *׈h1IXP:һA1rZOH{lyv= qXB 6 I=!/ZkšYY}9Fh[6dʭrʭor\ne5HthnUXY + I7=cŊ%~ J(aLii姏p5?gwwUrkij \;=3T"=h!2FŃ/m+HlAӇ.4=V?'5e^sk}|6qx{}/o5JL`;p+9F cRchTT&$]]QfjnVa,zߐ.<;x=Mr{3 Qj}HnA?FQSJ.Iq]K͗7@1Lҏ`Q:Gj [w=b[ (z7LI .2x/E|FatVXΣ_5O?,gBROSnޠ<Ӿ1Je7B'cX1G+Os;㽭7M2|eEfdO6ˈ_4| #govxϲ'$!䮋Q|zM >ڝx_/!ip9]7[xTw^skxh!%;ځx4Q}{aWbޚ& *HL͔"ȋ_.CZi̔t< QBH9US| ɦ+V} ‡A ?2oF}U o|]kq b@?3ռx24j ;AD~R5A]YI2%(`yys GA-Bǧ֚5Fiߺ߁(IћBFՈ..DR!xJk{uԷj{Z!b,;T+c]6?֠Ȭ[Je!wLH)ePZ7yC_.~GV ,Wk{"v K(R\߭bUgur _wǃwww{? z^l*z ZDȫ,h]cq7s tV?5k5(.1HTBVʫF wꍣZu[!ͩ%z&ɰob}^XdԚ4ytI|JQt]8h7*.|*qaܤ Z "f6(Q}nz\--@i ;+˔F'N**҂wAK")L*E1QyuIO$LTC4>tT $HWǥ [$qCD<mXrKڀ+̨FD+oƽ: y, T{s*"&9ɤDʮfI}@nv0lQy\ԑIi0PFFkrj\ C@.TJFg-}U5@}DI9}{0䓦I7fOY^ߜ=q$D-~E?}.ot4)5 9~jԥ^)bmXx&V`UǺۆ>n̓W{;tYG]Tq jYءx`AܰFUFn֍~ NO[gs_67HtգwSH"_u|Ueg.3C+G";i4,[dkU5 #=f1t4F,8|S$¶TD"5 џ TtFv)oYh2#r?3˭` X/LJaR})'pN~}V2R ~63)gK-'eF+"^`c{Vs$[Xi:,}ŷy3?Wr7,49 C8i?+7+tC fk8iGI!"\pDs!_65y3t/<]{+0i7-x.J> >> >hZ߁ȭNţQ!!MNB1aqN1En7aC\J [9:^BP%+B":Cŏ"\Y-vqJpϩ+ `LYzyεka d8dޥ(EF+q](r#5~i*p峙}I"A vr8L((J$FB1OS˸CO5]խz ĵikߒ2y#_;Z-o,*ӆ4aV""R2:\_GxړՔw;"r<\auazg5f5@ّ:95MK~_ Ud+RCRuvʤ#W&3vt~A-n[HȜhVUAMTgS/Q;z[VLN!ܸ$xDhG1mh%k 5 5MT˖Ć]H?DBD7三sB[\٢+4rբx6 In u0zo(ƽ:&vOZoV-51)r3}!}K:QNM (:׾Hl{VjLb?.9ƚ5[n[~ՃGP\TCY1h)ABxge ֆ< %9'msZb+ˎ*F>F3$Ӽ(BBJY6-kF728@;G{pq3FR A!I)DqYJmmOl4`MYn*E#N2ӋM)'9ژ;'R*.NL3NB$zbtS4iuwf&]Q _QR|/-穋$)G; }IIJyg59Jz=si%iŰULSǻպO\hA5Ov|c{I k8 6~Nj2r5#3мru޼`B'o1u;BA:k -EpgMRz3 h~^CRO*_7V2ڝ7sið|+ׯ^ IP~9~= $Aw߬ %DN$cs3@L' 8Ji^Q(&SڍP':ujޠElco6͕wۓyF7,g"q.#}P(br(3ir_QV63 'SٔU‚-}8xWH^ʼnR5 JpDp_E?3Q!f2 \ʚ Mq)^،ƃ^U81U rӫCYՈ Gnm-ڨ[Cg`9[Δ{// nJ*\EO)gV8]О)i~!o!Bh᳒#Iɳ7Ai2qi&O-r *+PUSjP:IRh~JLY;S> J}C67Cgz`ߟ^RCwmk~+ݬc4 bӆeO\\HO@:f Ta1EK<>{nP'xrx3NjT'dvyXٻQT*αGz#GTWQ֯dJRX?ka:Pk,Mj*fwآ#q4tsG}`΁Gd Tw^V &ŃCVݐ,;>}ByԎ_GdWF;3EGynU2@i]ע Mabtqgs/ IGgzVz"޷S(4Bj8,Mw)/t=x=c:uY{Ç;1ֲ! 2;O9J+dMIS+q#^zU§ީ{ܖ29BxR9-hu qX۩U&֦At*LBj-.ƍzvpSY(mp8N44cmlif/8x9SM\C&)>Dդ\k ae.Q_ W!,NU,L9ŸIbIVo EP9b~Դ[:bup"{-1[)33Өc(7&d?_MO[[?L`BtxYKLIy.Åu#r rkcJ%P~S98# 0KzdڐnuO 8Msk3StdZRaPw7ԭaA--= ?J顃~Cﱭ;?"o?_H Zoڳ u[XȾgB;t#*1œ/?:kST&fg_ss] D9[ Z Du6!/uJ+m .»mCn%{-ַ)ũ5S1ƛb)W I!PȄ350,9h":!`u<͜)Yǹ+mu"ԾgO sWaTяǰPIHTb0Ǘ;-bJWjA\R䬉b K 2w \[ZIߚSwl.mYk5_A1"9"ϜEOov.G_{v-H;yf,:BA=8pcʞqkDap oi?zlk3f^u䅴r<[E6 ޤF."L~29-QD YexZш6{uf#50E+-J:jh1K9+KReHFm&:fVFgYH0񕑟IA`|24opРTG!_L7Znm.s|zɱ"s_*%d\׊¨h39=z8-^Y)~@WQ5~8@`-fF5u66,W OXIW9#̚rI %@2<5gSbxA9:*#΁Ms׬"7i㖦yX| CA*e ]6GBQ;HQG|)r:&a7 R(fs):ڝM.ytsj.0m)?>I$*f2-jOMӔG:  `AtqR;ѠIE`7O0pt;S.mܽMmz4| O GJZjB:=A<&>SPviڷmvva}=S>| -HƏuKy xƬRP b3; /^Ggk6tYnD~ ydT w6y}S `4OԐn -5GߙM$q&ř?[C߼&:}؞hN8)^4!VNUMaK[rU6=u,Kc=BO>} rC gAwk%>z.~5M/*Ep5^җ`oa˦рxhq}įsZz\$X&:D<d|InK&,.OE6ok'΅E?§;\R# SLG4kingmLw_mnf tI>&_) W+w2x\A$d}J} ~wRUTu`Hf35=фCX1 c[.RGO '}(vUXR1z44O;w>aGn~Iŕh(h W,AX$0Jh:฻5cz_A]x{ B t]NGI(, O(Bu TWj:aPY@iBU2 v-XXlEq뼏N;eJӄUsJ=ctNJN%Pf;8 ȓ"gM]#ń|eպ$V``ih|GnvOK% ȃ¨ }t󜹪$d w2Դ(c[iS[hWy@eF +6_J LIa&ToR+Z-G.},߅ +N3Lk)[\=ݬB`o c+#|;MGs5~GW X{7Q >LI![%7=|I)Pƨ-?t}ڬ62rZ;s\7=Cex)Qp 㪻a\ uEdXȣr\~ϗcBQDnso֨&V-fF;bmְd^eWvoL^Kٓ?7f7H){LWӃ-2%l QwڠSސ^w$hۈ01P`!/ǴmQUӼaqxGs2A'ΏW="Jt&Fj2b~*5}(ՔP}]{~>Уi}1`G؄h:QPoa*MR3x$k/5Kgtrp$R]QgE3V}[IsfYE5=_@MrLlnahs%&]7? .bcjBM ~gv+<_8o8<Q2N;2V"-:8(>B&fc:EcQPc%+:!0:mXI BB[U)S Cπ X_Աg"q@7n^2Yt)WtMzF,e/yGe\l*YX4PZ6QFz#sPj$:]Gfw jpIzs 7פsH9R{dMB:B~:r9J/ 4܅ځٓ5A/da6}欋h|j}>jkbv@?Ld)"@lb@_9BnB]N)>.V& h8P(珯S LTQ)}Qĩ  ?w?%r% HY R e6}=XFKi9L|<}71|hAaA* p%͖H[`TTOggc Jxj[%x٧lk(KxPQC'ʘEαz簔g`|}8}0Pt  TB)9cX(8ċ3_jQԊ1F~Y|K"H?b}KrM@o Ȓ0j 9<y4j_Fp NE ;r~IP @J;GSPxݔ!v8Qf&Fpt9,fʥc@c0:nR^C 0wa^%H T)ʾ}uO'wobȆƒI+GuEZXIB$G'Nf죄MO4=εaos<k8>L iGʵ4gF&<%3pF/"RcOs`Wi s?ķ:aavJ:ZVʹx,1 Hٖ k51H4SpT"Ғ3T>bAjct4,7bIݵ;Q;P&3jH.b<#б׮fKQŎƖt_E&VW(ˆuXsQCc25P;IX'O+ju8aNmFцY[!%K<<`ms4+J){%<tq?9;P$m+BSVtzуKܚh}57qɠx2JK?W`0gn4枋Y+$I|:ZV_We0as΋8`W:)r+u^#,:cYTא*ZdEkA3ѸJsgjR.m "/:Aš?^Z?"|:FX ޢc 2b% 3SЏhBɠ.9DՃ{ÑmLZ؆f+7I3 *؟HkQQDQHX4k Ƽf{}4w.CXdaJCGu)[JB{/‰M /`TOS_`Fxy8O7̵WRĚMC@79rJ=P˂zl]HuJo%ua<N6ICMsǎ/&a0@N!rKmT'J_44y_#6je}?9'CRňՂ z:A28PV-D=`XPt1C{/L{w)~h:|Q)$azErPʳ-g3b2.*BO\zԐsp-A[ j( 'u%Fk hqe"lN'Ԋ`5oj>sd?iAj%qf[3ml  >δCh^=a0TH0B !dY|O㿢a`eRs2ia3SSo]Kj2$z|Aۨ ~K{n f;eDC9;;{.Pn<tg':p;-Kc/M#pNSj<|_M_7xHkC1z1ܶ )x1~_@hQ/u f\;?~8 )_j-l ǂVn8?ō6z"b5V#^ҍaۊwkśUk L27Y3=v82bL̓qp":(x?CW~?BӅGm ]`7cYj\kKIMJi2_DGI<9e݅taoVF?ME kډ&}{F)59F_7ȫ‘du(F1挑Ek4S: w""Vm[DH{pF%yP= 48:<:hT78CAs+,N&L*od tƾ}@P[_WcGlө3N4BB/|[49ag0+3;jIm@,^T4bZR==d/v~L;eY֤xAHĠ0r\KLdIbH^ǒ3M] Xaz) Sɢ1KTHvhL(i"<(ENt\C{>CLBHbJ}Rjn[ Xs %d3LRR:OlhL$ cݩ vR;˂|ӨĎ=UܯRBSؽO鍉aZK<_9J{apx2mru HLPt bK>*ɜ\I":GJfKtID,cSZ.*Rč{^ГNUKq0"(8hŸ41fb# E ǠNKP$l3jK2 P6}IW.q`ɘ]0"FgT z)e#2VT\u;UJmqm 0m )ha-&☀ް'.*&7#,?o#Bx3c] ɦneynmǂ$jA::tr쮋=#:fCo"l:ăOkfɂANr'ar?jұm8_ 0E[3v:^k-H&puptlq"fEScHG.e[.cx]^!Hߋq{կt;@-pzqyA)$K8P^_}aak-3Gb+=|1_Ҟ,|JϷs~R pD̖+Niq;!6}١+rj/CuGc"8z9eSY4c E±U~F­|`fbV/.&斌sߝ0f$K(Kr1!wT ~/x ZOڹq."&Ǿ+F?#[Ō8ej!@Yaf_!DRq>J*q3 /27.bT;F&W4Za$oAs6qw~ v |9,܅DQa2 sCx,QCǫdWewc^>k_-sw$ &,+icn[5i9gs !Ia;S[1*BQu<򂝓PbCjղ+1HnOƅiϕV[>\TQx/^r#;r4-3j/]=}$ޭd 7v񭨇4HW %}Ah1fpVGmBpStJ9Ӧ!C;BjqЕ$ІFd]xO>妶L`άN`FXi17HǾݦ7F[hOOڠYS\)rǺ{d8_<%;[7.. N:¡t{FFguG$l`ΘsELzJ\E ozݕ bPLMThc2l09;WUƚh4d׊ؼesNSQИ#"Ipߊ]d#\&c:iwȖrxJ*gx@jUQف}IgD¸kHãȼIn!gR> 7keDi yHSLk`Wt 8xA"N՞YA_vpIv §ii jiu`ڴuU8}T$oG8qo7O7B@<gQ=٤_Xꯤ$z06ey z/|jo?U?uـB'$zw=ހ!$&VEzeJ;lPvDd: ~<4Sf3֝蚂?ʼn[AەR'Sn~H$ffn.y's肍A|r'o OS/v=D+0gd5U@P'Cw \:ireka]C_K[ LzSu.-jhY/xFPp:NV@d`w/VRy=4Ӌ?{%&J_: te#v7!b{d"gv )kjPPsVԓ%ePamvcjHe_Hx Z1 P%?U/МBML/5;YZ^[Q!t_ ,W9õ#U铿mcNm"j]e: z]#&Dam/RX _nYI-C~ΤP;[.(G8*i?:<ұ,=H3B7QŨn7Kq}5A:&vw8Gn ~?6~z4#]'0E!88o^X`Jt̞a1rƬV1]H^G>)dHpۑPJN}bAp?+e,zdr ڣR|/zHo<6G*>>rN:S"j0Za(lgV^̮mxZǸ}eS1[bqoJ)ӯ;mF`K=vw>rژhI;oAO[?JwB l[o @(q`wAP$ qVض-4ibp_?PոzPY['灱]cp<0Ⱥ>B.sPYY ֌ΊBl:nz &ĥu L N)\R!NɌ pMK:G\ozwİ GcR0dƔ=>ei%O;Zk} ~@oM8^$jPNuK&u!҇*~4]ÆjӧOӭ<6no/~}Ql Y; \gus4o`B7kOVR;[|>}i^w 'NC :‚<(nުmZ{niNu?F1b|6n8pm.7|9O?}aEk;jV,88[tF rz*L$@Q#(#U~!^vN$B}! 0ˣɤmȎ"E]lr$zY%tx^qi5$=<9@3ܢO {70ui*w554Lpy;c}a_ jPSp0\E}Oc2?ԣnEc3D<휩2[{5ôyGyR;6E9 J}8[Q ~~aN_ =SzV /۩9)_Eǒ&`~n6j[*^.Ɲm0B:޺y#ۭX4Mi_*ho6y.358^Cۣ*E8i ;JKUƽMTe굱xe2*7-/>?>̓yayf Z nȒ.rSUu(U}߂j߾%tO6nW}N&֏۫s˛"M< KA/imcH*TFG3;pS=>گ5;;8@$}2?>gW}b~>"VW?#ȫIO˫!Y>_;V̭wwM[}+DEr4%6uE\HF;ê.͔˪ZT<;۝*kS*jQ^N:=;1w4 1. HKӢr/:cqm fFs*u$6oDs+ 4v#N04e?l`.Chqct3Ц6VƜIНѵ'Cö brkKhgJ DNf[=¤@?9|Eq?h S0B("La1f/Cgz1E0Jodp?!*>梅SqzSowÚ)vm[Y7;p޶"$ )PY~:85ԡwwT5Js]{]RP?R;;/kjڭn՗ԑW=l4VUãNP7j9v!yjok{Gn8(s/kMD`Զp@-;NI5j[uS S=:KuJ/jE% :dD zQm/?]ztim곧eqamG}̙w}ޢ :X/>& >,.h9e{VtkgVQ N"ɟښͮi| h+kJoqrX2eX:sHG:|SQO+Ț3 [4"Ni(D|*?;`hwڈ#CLQYXi9%D.$]XkG>1& S~RdJ&6Ӟ[~SFf$Nqµ!JPPFggͧ8hezy[ZuOK##Q= ΀߾SrUՎE5N%IHk YLTP)] ܑy[{c)j[n#tۖrijӞ( i '{S s%04U1z@dflcsKH#f*1<XJtx \=AZ<{h>ݾ+Sia=#eL_*p(ief(1h㓘 N# ‘: &CeS gIvv5̈6eU}M֨5GרUTu8L(!-Q8m"QEB STV2 ;K:sh0HkM⻪g vӇ1cRk[8\HsZ2,G79drƗ lg7u0icLF"PJ4X僡 t3au|2'jqey]5v\Cx : xNWzeєWgn7Rȫko8$R*)omovyT<OaW{o>/Aàs_uag!=Mxv9j0֝X~A/^_=Ų{qw'}ȠUR8%s*):oDDq/S 5\`/ᚉSZrL=oU{xqVothamW fmv3]WL t ed 6JO&h)`>/g^p=*C%|nF I* J s\ aZYVF!ChW&rKpSfPb:$q}3UrC`<, ?GoFd1\)Uxȩ0`Q,u+:I12cg^[C\mVถ{KҠpd9=XHL4=xގ+#.wWNA`T[߶=Tq&cxXJ}>, Y)[1,RT~~JV'NY@x~Sϗfk}## ]3q>Dc'rt޺+BQS.Ifuf`ɌmXZcbmх7IPY\: ff=V6` T4tvkFo0ZЦ F3P҂Iۦg XjpX[li(eHZ6CL m9 z9]Bt~DA; 0tܧh46r{mP+MpZ{$OY߿Xb,nt9 TAۧH)`cP,C4o97z v=v,:3 K(Po>[RhЗUGh[oGbYS Ű3 [2?s}7. .i nWJ#e} wrm&^9m[j Mt+Jtԥ3*ypXR4HaSТ fK6,f%VBmR佊 /Qoz1&(0ϐPN\S&zx:Yɽ:]=A?Qn>-I`訰Ô˯)]{1OEm鄅yU,M3[)|di):dzk CK?0ȓ *9TL95k[h-1Wï[G;_e=viٌz 5o ѥPO: ">@AdɊLMq~KS 8&,GӭSE e3K%o$jH26*3;8~Q}hfU9RH@U}lJ9!anw>N◑\2R2nGС1NCi+)jDo z=T PGU:juJθDDwڲsvZW[Z-i-:E[mS6~Y{-m⬬=!"N3RO`)$!賔x|pRp];dj} }>kˤ rK^ٷ+FGF5>OosVŴtʘlK{,~NKVRZz䷴TK?uE--[m ֐ Fa"+ѫb 񔗴b[%{ƹQߍΦ il(t.|m13dY]$Q-CQ/r;=sh lI( %m iJuiVZWc$NUbeE EBw`"Ͳt\.vOsW@<{ O"+;RÂk݌W31ѨqEN:}Gz%n#D2ECy $_l"ewsaP`uFJ"8 H#vK­NqR;:gҧJk;66z␵~Gpy/6ݥg?/ja(ao ڞE!DT#Zb^)(sj֜ȵ; [PɥMPr#(vjDdL!H`B Yvh1AՎdoSxr'2l]r'P\K(HU -[^} ˱ ojt?prsuh!9 /UU~L=V"-O4%˳gͱ(ft9Ϛ|VuGL[}$g:3Է/aiߚI=m{ {*Dߓ>\wϙk|]^ k%  ;GcF]7H̛ Ra>33sdfZ5qkϙ$l"li5Go]XB]GJ&󸥊6H4'8K mUp):adS{]>//qQ5Fb/R,Or~UXJS3$%c(Ubr-t;1u1uQpw}lVG8Lΐsjz˛ km0ji)DŽt~@ %ucXɾ8D ݖSX'IGqvV3݇G2~+s9clEX"T4O)_B?HgNNk1-kˏOZ¤8'A ; !r3r5Ǯ9pM"1fiV +AJFո1x@2xS#G'y 'Fe E3kF;x aM WYfu!b/yIKM#\7;㥵Օ=[m/'ǏON?y,OO}^;Ym=Y<{~rd=jƒv>yq6'㸵h}ѣg+'0jп & e~ȊVbȋ^$KQ@F" s:"Y[a1/0Zp CLJJ/b"pxbȢF"Hn HԹF~tu >VW,?}Q뤵rvzҎ+E 婇VǫVC(S8ޭIpt \8sGZUm 🬟Fq/?n<].\9ql}ue4>]NP,?2֨nަi 0GU G N+]Pl{wzQs0L/tX5PW3pWz+^k/,j?^__[^{h:־?}pTK;^>d"acR䠠q}dyfO/,\EI^{%uNd6iƙDN?+l. 9<7{,ݥ]G]DiP{2KAt%tr@)JP9 eϖ cP^qxURHkdkV'M?+}NϿW+$+O;oE`LOnx?x < QU`X4LWj [B|gQr`RAM}/愤~-Is|maۍA&~SSrP4٧b?{o_͛bOKb!r^(H*?ټ(꣢*7$@0_Zz 翇y*J<&?Q~*ҋO07 UCqOG*;V0Eҿخ5X:N g|ج$FsЎ} koCQ)RWEؚ;uДbEd+k*Ƴy^rS]Q1HcWo<)J@jfni=Han=ɏX~uwTsDws}>ws}>ws}>ws}>ws}>)ZX