#!/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=c244f61702447fc02b78f381d1540a41 # 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 BBaHZ^7b~^T_n$>enOZ&=0K8:bF2*XOTE6&tl-8 "&u2fD^a8Y,NoN2y0K8[d)*{/8 s-, ˖< {YBMxq> bRpE4~!X7`F XL/l: `ɓhDP > zɣB;y0$Bs @MGޒ#f;j3HA*P C8lؔ"A1o9 ഌS$@}@QAðdgT eL | W$MI @qo,9+a G3{= ; =v1ہk[cwh;/kBC=3F8lh3vԷkNYnܳ  `uk06h݅lxnM{_Koi+nWCldخ h YNoXf0]̹1mZ"<˾=6.Ҕ?ubpٵxbE:濎a qk\g9mv8KǵܱkGwL5XƎ נ &ر{5m{y ^u5rZVП 槿zもԏU SCј ~lVmWV}>!čZQOl-@){9k&g)%6`իC~v6~Oylwу^֟#>eȷnVՎOg'35PQD7-ȏyrjף~}tBkv娳w{A~lAjF<BUgvkO=Y/yMȚl\Mn/` 1XCD8ݬ8@;BG%CU+P<5~H2zۍ ܚIE{b-[F QT ;L5,zX $2 WR޹;y ~W˖5IA5d {Y¡ iz%`='Bar 308I/քLs2'f5 5d.K]\oE߈dvQ%\ J#R40P~ :LT&kiZiġ#NY"uM< xA-MyH/*/-9g%*-/P>0[aM5x8E4@gq#M.~+)J,6z,;,!o0uPjxGm:[SZA2` &D?6jhٔ^?'g5|gҡG3V*.ı7U'<0z k PygrC'|ɅGOI^L9^Z dR=F#ja};+p`)O%P;H<DZkǂ'9=!%1]9b=nGHcW=0Vkr gE5E֠-+W<hQ8YzhG\JU,H/s fv8b(rrUP3<C@")Fz|tț#3?.n|:ce3+\U({]K|sβǭX~)8qia4=;Ek{?jf3O^9_YrxbO+9mgҐr;~Z>#:\N)tDq}edk^]/"k/zu2'D|{ \LTlDB ?{J[6Glikѓsƕ1[cwI(cngsmmlK r(2z-a )!=>!0,lT掽}Zz?Ϥ=!wZgKGR#+X -#D3b={"IPs ^|}O^Z?:~ Oozw[ǞXFph|pnNJvpV/s|A- 2j×ؿ^2<ۧNutO^t/d]`jQAia_Y5 C*~z3X+/;{=$wGc#ڹpSM0V.u(puofU*4xKW5:nOÚPhC!lHf4H n ʵ9Nn,@*yD&;##xzu {r6{xL4Lz@S?)@бjpéSw/<࢒?cņeX$ j= A>M~>D} |L3awl@KJ:uk * DՑRdjI)p 0Z 9K1 mh}PG$eC^:'MP%f;2A7c:移 Lt4pR:8Chdo-ҍ;T+<~q=-:CǗF=VuR@[GLqBlqfQgR+ ٪^ermJOnjYمgYY"Vi4URʮ4*ڙy(8 ~ |3ْgzu?ӍWZ[C\h{k(;5tkԌW[3z{̑lc -v쿙r_ʖz^v&鎶jrV6.+ /Y P'pF=&&]vorG.$'`CVywW#ؘ?bNTp׵O$gk }+k5UkdI!wȂ VkYÓIK4uv-+\'#;/k,60k+P| _*cZD}z)2xUcZaH"6fEgށwa xB-{EOaF:{y"BMWhHË6EXʗX%6]ϱBj%/mU߳lg@ r#ae/䀏fV^/ ] ӏ H TFc DC1&lwV0+RQUހvo~winD־_7(Md1'p G5(xcMhHjA~_PBTJ2 eh,WAHF⏊]L}J6F"qҳYBOE{%7fa 3tp8b-$E%:\)˪Vb_=l幂Hh v^ YU} (,F!(xիd7p jlټkpC,#C!.ZG~S!xG\o B t\r:KPG̨ Q}߲Y!Me~}EX8Og}dL(Ĵmbz8c2-bZ*d!1QјI2?I ٭~A=M?GS̅`Pi`W`NC]Ǻ|zWjj*m[(dO |QC:|zTWrc uBFFf ̥ X-1"t"0:x|EI ^G4²A d~P!Yڽ :Bz^Lm6}v@/yVI[Ur#A8:rc,|G -5@M| &F$g{# Le4"L1;3}Ž躢ޡq}LNXKi:ηnkR,kR'\#Sz$cmB*Hŀˁk ?!91g#b'f4a M?,z`+0Pf&􇘿rk k6geiz%oOڬ)Vo(&vʭs !!sUae"d-ˮ$S)+~ 2(81eWO>m mdT˭mUj*Rr):N P\ȰBL#M2X Dýj&QI :NXܿ(2qrdӫ]K_SigRwuFUE Z}C`$r4E"NrLDJ*D+2!ѻ  8FN)m$we.6_ls!D2I?JlEu2-l)EzkmZ4 _0U$%8nའ-qA6eXG^b9:g|Ք?Q| K=M?zܾOh*U_~ b;?~΅{T4-?!2|/#.~?WV2o~gڰ:rxokЯ,{,!OBŧޤ0ݹ*Gq2{9ppEOGy85RSHG wkXAF}E*f魩i.L)82$hnLy@7X/Sp^U0l:0xbE)|t-#{QfWݐEF7? 6hg-y#?leivdN;} qkod)JzKQ4"ri9;[O5k\+luQB7..]\F*<+Bؕ֠"oةoB~X%X5w q WBm,_AYw9pC51`SRˠ\n 46a@9\FV*X,ׯ?j;E|T/9TPH[Ū>*~7vMT\@#WWY2(nF?njj^Qd]Rc֕W9IG7C$`SKzML#aɃI_ɨ5iBH7,pq )oU\UøIJӥADlQ܍$}e)<][Z-l=vV)%NTTU<٥ PERTcN\;H4 h|lBHH'K1\H :>4xL{`W$QB;6Vތ{uzY'&+UD.MrIU'8@]͒~ai&` p�&cB`b_ P'bո`)4i\.6Z-x2knr`6'M ),ٙ o:pa9z@H(ZЋnD)]躉/%h,Rkr 4~!KKR*DR-LNBu 3|Towv#wTǻk}ߩԗCgaii1M4<Njg羂i! QmnҗG5D9Sm)\fWJEv>x#`iX2'@ޫk`vGzLch4X3pzYHomDj?΍=S޲FepُG~9fX[+sC!|_¤RWuR OBŝ2d8  mfS~ p3 :Rbnvʇ9AG2stfBKVbEt$[[-E[젭H=SW~Af8kg;-L=p2ɚKQW| P1Fj)U.vg3`$ KEfl3pPPHV9b6qjؿ[mEXk%eGw\[ނYYTק i¬v#DD*`TeVui/빾'Y;o'DM- xV%)$W82j`j#uausj, tWHyIGF>jMng(%8llZݶ_9Ѥ,bxϦ_hmUvR_bjB4qI( юbN۞K/_ S0jJkf-% ~ nq(EWVKiTsEm, c}h'CA?a.'NQp{uLZ/ZoV-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\7ea ,Mc.]^AE2L3=9AbƠ/0b2SpHS4 #1<+M%6pI %( 7F+5n_C"i07''t}?H=wgZ ]A.( Uzq;8i,JKsݍ x|.{ʰ@5j[ 3S@ 5UwÆ`00ɰG/)0" ZaQ;|[KM[9 2 g%{9vfa ;z`̏ٽf{'#! o2ȏR=(+ZeJjـʣ+A:!+Hжuaa8bB^'i&vuy6QdN zKExL$ˍԂeB9[9:9Tkw(P)!(G`wxe}c!G b, y~5"y0v͔llqɗy<+|<U'u0T^gjI<#6_j~ϊ) 0}I<귻 V}f&V3Adk4:{P_'dN7J\M&n\̑%*s̥'Wxpߨq33yxpDGMFjp"w;3 TZ,jmx`{o;wMteۦK:i 1'naBMkMbvZN[RCh[9T)kS$`!rú-f8E20S% L9(Ilk7w7 l^}~VLQTcNGD_;? cAҶK9}etwdDZup,Q|9Mjdt@\Ǣ"ߡ2J`'VtB`&?tڂ&H-hK=RS Fc 0E`y?n%Kνe>R:ӛX~-^d$Tzͳiԡ lۣnF5/I:t88cy,Moz3Irz'#?ȚuoL t8劑s;2Uew_&i A/')F1ߕk^R(boǁmHsMYn:|V'a,N& SE6ĀNrpL+R0} 29\FM6UpF(PD__-5O xSSS<~ V&JJ4@\ mz6^ wŗrRs8*5,Ryco3btƃ^UK-{!"T艹xh5 {Z|qsy6- N42?/RZlAYc&ݞmdgkݨ~G| Y<|3*OGq&?ތ%`oـitiۡʟ>SkPຶ$O=ڸ*hF"3}r=8+նQ ,Z!JO PQj3N񤡢‡N1o呝c a)?a&9p` l@߅SrǰCQqg0gc45D7~t䢁 "B%a>rdy$귥hԾ(":w 咓*\ݡhÁ0vr)Cp,SMM;>r,Y2d᝕Ke/2\au,9塥~m4`¼J62R?}<ꞖO xf_ %V܏`4fXI NG 'Riz Kk6y\Zq|\,kiM2y:%JfX9~4ou̝Jt*uC 9$so!yYc^&e Cdz-ApЙkXch਒E(%?g̩}%8hY&n.Hד>kwnwLRgԑ,]xF"c]1d6'Y-龊MP ejpw!ݱN`Vpœhی BֵKxxhV@;ISJx!^!~,:svIVj%QoW^5koM Aa=d 6OGXt& 5nv'!Ub ׺fq;FrYդ\-XXj[E^uC  %EN_+wu6E=:d,|+Jεg фA/>\r6'$`S1i#ֵۘ + 1VnLf* T?!߳-Gã 6މ2hyk&CBh`],28`TՍSr{_l/]+kQ$ G1f_zu__`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]>&9Sq Gv#tV`ʒʰdzG72ô0 ;! ҫ^TZlvDL@[g$(i`RGעaT<% /0M-Oy6Rr,c)dQ%*$;c4b&X4]" D:TF.=fM!&!\rܣ_"SoѪ5 ;s0 fH }Vu |^n,$N_,Gycx5-z9 &vj))V'Evx4&dT vV)|^eA>}iMbcҞ*WHmW)g)ލ0%}aw08Xe˱pk8AEs45 qMXvqi[ljMh1dx Fo[)N΁ d b /_($}Z ղq;\vuƀ4.!;2hĖX:%KhdN$A#%%:"wpP1)G-zHpv^E/kI'꪿MO֥8g Lzb\Y3@1jcP' %(j%LZ>դS}ɫRO~߸G0d. @KسD*vV{w}f|*C*8ʶ~_4 VqL@oJVyEp쟷[!qo|9{)^8"ufK}4SK>95_u£IB=C),㱄"*B?vV>Y@dAEbsKFйNN\G`R3%LePջs*-'8[zatcP#䑭bw2ِ {za0n/")8 yw%ո ۙh}PCxF*[Pv#]`+jw@y0h9Unc>G+T똜;/ C `ZPcRWFmvlg3=%|Sp_8Q;V*>OY:S#`Io & $U0ԇP$ԇ[&VH8Vi!DFA,97c BOxFn#Ig$!h (`zֹ ]8.Q>gi})sx]{ͣfckgYjÿhH[~;Ee=-;ؐ=f!,!*ˡk{oKCkso }{ZUA(&&VOdAɨEOgmB{Շ3a E-"눷io`@u2mn#PMXNЎRvB5/MWG8l7u: b =ErON Ty5fLL}B "Bz(԰WSNAB`DEhTIFƹ!訡{U21/XNί;c17 -򴜳$Ⱍfm!(~:|ye( 7R?4. ;ě뤓r<1hN~&h2RN Ґ m/}L\׊>@%7ܨKGfΎ=5EM B7-(f!jٕq$qbwi'. 4,\}]]܈`$N q AЊ!7af-^Ё0{:oة5M$Ʃ:GdD<Ǥ*DFl)}&m>3Lj;jŰa:$X9Dž=bY֨ 6E&@K 􀹊n}879\YĝKᴬyqnaLP=IJ-?J.h*(e{/pZZ9yĖΗ>^`pAJf;VCᄒ>  8+@K{KPFE8)SiiS![q!Ov8BJ[G]hCl2ـ.MPOI'rSg&rgV'0#4ȘycnT#-JꧧMmެP)cݽd2F/geIvQnuYHoP=#OxnGuF0r@rgdvuX{ly=%z7cJoyl`vh1(&d&@|1tPe6+*cM`4\kElֲ9ᩨwhL?$os(κmH|q1TΗ U#m%P ч͹Mn`n tYҲ^̑~|Q.ILaBjM1ڴ;dK w<%3N d< ۤ3"haY`tM]d$7\P3f)R\ꆛ 2ڴRڷ l@\Y DLjo+"2}6_u(;CI]t2dJ)3ZNbtMqY㭠J)7Z TRE3p37JڀwtFډ Ɋ}>7|mڵő6`6L`*0 e(pw6'T4n9ps:|f-%24(AhX< l5_fΎ *{ov{s/W)JqT嫿\̑>q6T3E* ;J.}~49R2w~WN!K%-ZPD&:H5 ͬ܋{#|(8N+ 2`Ճ滗zEeϼ~qIE=lk%/C ěj1Pl23;`Vm5T(9+UɊ2_;K fMg}5N$}/Th Wy{2!K~ GVtsv]$3ʊ Lr:(x*Wݫ2+ }xE]w}@ &p{f}$Xa%T9ǔBnf) 02#(w+UtaJD ҋO|v9 )a xIqrR#W J\s]LΩ aqưYro@I/CVuf62)H^-7Hr%igCpW6# 0㥞oltMV9Jm\^$xe[|P薀<<@2&!8E ǝA2 cD">JzK?V=_qBÀ{76C_Q#٣pa)S,?]rj6)dG28̕oF:6-,<^Gٔ:bYKPi*aȾ{Zme\̠4RB{Lƴ@T-bT} `ܛtE>N*N(f%ܜHKrnyUcIFkr#Tu=Dv\|U'ml MX'9T5%T։y`l:qפ.A%dн(\%k`oB5b2Nf􁮛 7;qF];1d"(ӂf >hHS29aכ1A2ј 1etO18z~iZɓopBsrI.0>i]BuD!D_2Mait+ϥۋ_~e΂;2=xl ړ->4/áalgH\7zZooU6aFRY_{k }w1F7Օt'w9W +zX۩Ub = 3ue3sW`N#As?nRs"I @]Q_N&n;Gv/gxw%#/Iã<K!Y9Lu~ٻKP3.xa  jTRk*{u+ iL}{U_>ʓWy/ιM`lV lي$o(Mv ;5vbĘRݶrlxN9NA,?6|Ws|U\UwR(Gp)5leTUEnQnJRAswxU\̫p-"eTT-I[\?ܹ7$UTZ2 5fn*V+Qi*xw~\Fl"9?B3gk|2mhܝo1*l$ssl wy״GBTTZ+HOJ]bQM]۽Nd|}>LO3>øI86;f08ӏسsGH8`ҀtN;-i)GIQ3F&`<`o4bPGbF<Ȍn`,]A!hG8hCS[f)1F 7=Lw:mjc~n5 h̙ ]{"z?t8l{К &IPvpvĀNMd j& */L Cݎm]W[= #I/tZc{>2t7S4/? 3ivJq .NJ8E;7j:zW=)8o׶˟ћ?͑z ױm+B _mpսUZ:N*{{GZ{[;%#S߭AR;_Z}YߩLyU?ö^AcUuP=k9 :GG5zQ;|[ߪ56~Q+A GUd56/u6vw0-*MGC?+9/޽CP*NAfl)m9cT{;׵fkyWoԊzXo`:7 mt@F+ٳRuoeДmYQZ<ӕCQOvCrYZclP" G#!4.JvN|(oWhچv n䫺]]=tRptZu*ul|0MFJDt--] $7 }Bt.v;Hmfָ^G:~Iǣ݈9i#&4ڟa %y6VLD6"~J" N#>~]|<>_Z'lIxdE%7k>M7x LDnk6fOe;[|r w 8V!;բo6o# U!v{6-Fy-Xwd]2FYj-]1'EU5ƏlH R2o>]BD$nG TDEuAjt^oSC+(Ġ+='w" (Sw"N[&C@:A z<84RnEo?T-T4ŊR\nc}ZV7گ$ "פ7*A˱٦Ef{~+3u3mAh:n"\b[ K֟.=}l2иʰ}ZΣ>tkgpDSoQj`]ef{ҎReQtVd^=+3_{('pOmMf״Z[>Mv5 }GtJ,2miZzչR~USdM憭MkFL\'4" T `؝G0;mD!k樬p[Y^,4_ vX r"Aa.lKdf?)Q%aiO`-)`#bp\'W%(b^ BK3FGvC2q<ݎ-ʑExVagIo_)9 RTC*}j"'ɒ$$Cb5mv&q*g.R`<-ױ]H :mK4NiOF4^Q X܁=)_„`s@v]= h _23 9%\3֊TmO,%:NP߇NV=4gnߕc) ׍2&/Go^j8HHOY3G@pIL@L'aH2VAՈɩ3$xYQ;ǚzfD&kԎ#k*:&tpސ(Z6"܁) okz+%9 EBwRY]V3t1)[i5al.E9Ax퍣֜VYvPaw29xKjo6x t:Ŵ1 }O&#Q@WjPgc0:>ǓE򸲼vj;N.ƃzNeE⫌|hʫx37OÍN)UOea`o`5̊7uXu)Txݷ^7Gyv< Y*+^K=Wf`vȠaPԎ]&bz<;ESWP{pɀR,R?ljnvxbPV;\ϓ>dP* WYFȒ9C z"8)R.cߗp)@-pCtNF\TKd&xn7=8+7Ve0+K }36A;.ȫZK&m22yiO\KdZb0G`Oԗz3/r[e qjz!`LF>M7L$X9PQ0k,+M t#|!4+ PR% h (h ߸*Bہ!y8m,6R뵰%q}T9 {j L"pu?Ww"#Bk8Z$Y&xlզ0Nmt("D~OMӟHM)NفXlKwqئ[1H=~Rτw˓p:Ʈ~Ä V'p!dwH1OXpO^,wx4ixLtbq?ȥbBYfeVʚhPc2uJt;;si4MQl&{u(P^72{zG淌m0 '0Pa#7ZVXDn~@RT0_Me˘[α3R6Up\K%iP2JF,Y $&M4QX嫏\yzĞu;6um6-&T@h:[i<8B,ox)S~$ɰ)hр\j%z^atA6a)C^E(7]\gH( )L= ^E.ـI (7ޖ 0otTaWuҔKt6St¼ Jb-ك>2r@=ܡD% hUB\՜Q@ &-ŖłW{W2ٞ^4lFe`7_R'pBMm d|d o&卦k8A z^\W #)"j2}ω7Yzx$|T|[H (>A3PŪksQ¾T6 nEx'~r o y)H#X{| '4v"EuJfd䋣WתiI`H:%eg\F"@;m9;[^-ګ-rċL-4Drs-ڶ)PrNЊ6qVu)'0vgYJTIjF7Ql^}+S׳%_eE} ?-sSRK+e?RU>ϵԿeUەpUN9WKkKbZZ}:eL_?uLh)|-=[Zsgmq%Һޢhwۖx -~Ank{O1 #ޟc:w4ړo9nܓώfBB6/{}_Z%˴5^*ȸZ^"hl;jUJvr-2|_ANC78j3'EVo%,;C_Ζ|mVblZCtrhחͱK['̩-[ѷENIGOP"7K2wq7[ّk=Nzhi\j%DkZrp Q弨ԅuNi]T\ RQ?RƓU4n#{,J?3bI'6]#E.JsVS 10dF@yҾ^`=9qPOY#9OZ3a %Ǐ k['up4K= r)R[1f6||w0e4F Hr$7ge"_lpaDR}I28kyOt_'%hL}3DR ;&Cۿ>a"+ѫ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"li5GoU.,_h%Z}yREm $AAIW ԥXfZ*Nrx 0ypX[ߩA֗׋\(Nx#lbn'g[*,˩S1ڃw*JT19^]Z]׾S6KOY&g9q5͍5]6 yOsg˴Z}˔csv:? eu풺TCNdXFjEg"nK)t\8]+rЙ#Upr1y6l"yCS '۔ /Rxdz{G''ĖWӵ'VkGaRZR `۝`NIv՚cל`kAoEvZcowL H %j|t< mm<`婑#M`2xݙa P#0٦hY{ī,:`d^Mhޗ<$ԥgp㛝g[q܊'V֟<[[Oۧ'SV^kOW=zZyZm?9}NOA;jZzuZ9];=iNV"MHjCU!JvXk$RAN:j.# e~Uq_aOO8ODˏa.8Z{zz.G'O(ɌWD~k_7joSq4[#J][}w#qUIfd'P(л9&:(+ \8OZQil?z-=[^{jxkߊ>8}_/F20v1)UrPи>xq3s $/˽:aDc4^Nrw6d v=RNg.4C=r%k tN:}9 Q%gKɱƊzE(/޸Iq<݉|)q5@+G?'e]&G_Son/r~% f? ;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*;ωqnuԃeB_j?ߤվz s&MUk c-a%SWM}bc~8M j-qWy\?Rpw8ՏrzpTy5X/K/rN|j1>~TPI:Ƃ:_° ܧtg=yJH7bV=tU':K+ _]FL<0/7Ͳf2h/4N;6{l~k8e+\5(Hx ,:W󿁷9Bƛeyҷ{N0lQtsٵ `}RM./ӋƖ~fфS`y}K hOmhGXV'=q1'} w[ DwB❐x'$ wB⿕<%z}2¤X-oEzCf 9q@h.Z¦L;tù6&:OڱC/Cmnr^YG}^/nіN+?9`90L3D:4)[lIsÔKa+y2Mq\znPA(N&+<#fƇ?%TQ-|^\(!\^|_Z__{ЖQ?ё >5MuG 9[NEIPf68rr7]y~g&!N|zX8VYLno\FS4R[[ٿ}>ws}>ws}>ws}>ws}>ws}>aX