#!/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=9f819b39c5ae15cd4cda7b04355a7391 # 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 ;is8 =5-yuqΖ"6+%'L"Ak^G"i9Ntk[U)x 0Ӳًoi§֠[ Π~xn/f}Aߒ yn8tLFX]Dʣ i7[wJT7b6:6SC̨ƂV&ƉCF,^茿X. NX%wV#^zq@ϰLK縪,p(b2!cƶ;s 9,z"@ZH<3I DhEt␔ BEΪ0 /g/O mj9,?A H$!5b H%axz07ɦ5`?< C#X@)jR!eaE l^ dP!0׀ uhr!,FePL =3CZFBdB P\ha(X(KU#|aP<kuɻO0li^\.l2VNv\VB(GC Q>قW b8]V%t4YE2-DR0q9rď9RK:|N'\]Nlpd>\,j2\j1i Aƪ6 +e\ +Qh$+}* d *ywqVB-$NG+#A& p4\|JLA2^ /򳒁Vﴥ\-r15eq 4. )rȑLw+MSKeX͗lZ:x<"\gFY} _dĆ( $7ZfF$rLzLG US*mTT8]@ny^|[zNkA4U R Bd a3m{书-j1R |-+i:_jkTRhd=./\+h@5ИraIkr%Eܪ}R`&m%KDjI stRq,Gd5{_nW*LS~2_ D%_f 8_3=hOR:;;H?WSe_}zˎWrv[?*}a>1:^,fl/BVOWuF29P_GP~ѿQ_Qݷ;v[5>Ph*J7d5Հr#&֮7y:kȦPUI89)A:okցL]C^d^ %A#J.0H[Btl.&돯kȋ'ұX{em}I^>ء͡c}㬣=8pG#vh $epVk(B4H#d/y]Va7Y<xO>pp٣}- s\2M =>DѳwG%B;<g!\IYnV~ε@vQljp=;?הj e]&rU%J;qhp#ˆ" VH6 _LL/|@V/ߩ2"JLx^zEU=)o/oCy(#ITl0RL>)Mit")l|yFf+VP+74Z(C(X;7NU,I;0E8H3ɧٿF\5Svs_ ŦWߢt8Jo܋ӁHπҭg{r2At&S5;E[%uCyE~ZQb)^mNC6 iDl{_lNKt aߣ" $8Lfs=jT,H9`Kt[vlL-Qs0-|0hHIio0*|𘡱MsH~xttR#;h!6}j) }|Q:yzw.|w!kl.+"2{R%g>s"Hrוeq| 'w PF^P嫑Zhp*t!k3S'?:)q[x٘0ȑmmd&^4?\c0>ʯoX &莁[?ڍ)^<_C6oGW~Flq=v>ᚘ [C\%kcr;/ ) .$;nQBbPm*, z"#2DCU8ٱ+9#kpI`yp+4!z!. )UKf'6iH- bйl1Lch'c3CQ0Ԡ~$#EW:H&]=?A$,VQɄCz] tux?>>&n ?-z7\R?] 6zؐjd8E@L4 PX~^|\ G8ׇaLnBkS7\/ŝ/bkq"FGeV֫ծژ(HYN:`qw%tٺE="\^C/?6bHx%  0FnMq4O^PZԀ/[HSP'S'D!'Egf;"jjNDS\7N[r gIo4z!* j@cp0I7`?poL  aSIHA,g'x 3gPyM8|"H5Bu- @CC"@FHB5ג$+m/bRI58yI*I@ȝAɫM\"}D`>R8U*m$,b0<&[,Q(y C/F,ǼBB鑐2 VUgJ,0|+Rg[&NAQ3(d)U`<7RÚ9J YK8$7r ɠbQ[VV(O;YkJP)8$ Y&t;Fvl6x3#u[>(D.Œ q@Bۇ9LmOStr6k;krem{N(&%BjjǛ`7Fm60Lli77 arw+#&; )׺`M[P(z,~FӗwxG35Ƕ(뫡H+0 ɩWr\ACo Eﰑh2,{L#dB3L7Xi;*qhX^[_ pWjǓNOfwt6U/NRu1 ~Ҋv;mM˘N1S60O[i6Mji.{:+m Ai Aoh3{iCs/ƪq;0u=EFQ<\K>LL*!d1ń5qI,11TNj}SM~HkJ"-N>6 TRW 1 }[Dvx?kJwtbg~Ol fU{=}̎1Zf t5~p M4/Ep,aPA\- (lp?ϕQ=&&e5U6Msm+M {1qşiꅦ\K\&8ϫ/E+) /u,ʶSP[ay7@z7߀S8ۦ+zYhNv;ik&:|zTn4&K!;-Aƾ݉>g@ZZVo4 $kp*}X}9^3 %.I^>枙;$!\)t&y=$I<'P#K$aM !Iw4f,((p:9bko^kϝTW8Ni~nw߿7]\e~B i uBh>{+ wAMu)\(jW~2{أ{od5Wꘘ+ZF |}_zZg(z$6(F;ԀxJP jL>^ Ē%Bt%YmibUTn֪S  0 4pp4ϛ1Yf6NĜ`L<WE猩( [ D X;]Y9u=]!! 4vVHxʡ";{ i\bjh:vb#MEP$SIi5 ^3yX;={cJV37LNl; ?-R(qgRZÝU[AMNΘ^?S6C3ug}4f {Ѭ"Dcstrpvxl7QSOwGQG"aY$fj~dw hPV}4k *% %=Q׌Jg M+3H#PI h+=qIb' Bzv0fqVmQ;m834u ,/coܡU6zd4}~0d*a% t)EPt:Ɣ{,Z2hTHKC5]GDg84 ՛ABѲeT-Tb0I5 MnBpU9a,sje=1>pUmo)C{SemY]^P݀tkbϦ߳dmE6г'ʹ8X;ﶟn>v4aw/IL;8ni8?lU6':p" h%8GE> ^jǬN0CB~)̍nD9񧤸oId0IRInSBn+:AkHpm^$&e~A^cW0_2bA\'a-" ѷ/NNKP\خݢ5EoXI\91ɆgsԵ Cz֌~):@K;MkXl`P" E(*|dr5aϛ^^v%>;x\0k6ֈϛ%z$r99 f_B1 Qs`3V4*snQVERszڮmO8AJByְI|yh-FPwH౩$1\jiY<*H_G俿n񑟗OKhș82(b=kta0M7;Fֻ4Gd 3L mQ( PVrZ=:`fHi;=osew\rl+_>i[襘3RаVfX.\#O1*ZoOk(m"QN-^EZ%Xb^$ԫ zUQ?ncFΥvgT?l(D11#sHt#bzX*Čd%!1 јE2pQe>ywߩ-,,(+VUI+ :XӴc]>~uZޤ ! z{j-v7MS]D+jNY+X(rh %]`EΘ 1, XAzp׷n'K304O9v=\,N!vmH:.ip8JBZu$P屝܉"=Ӟ<3R:+G*bբY}Y֞{Ex$@^^)i > hr[f`{NoFI2 `&ЮZtzjIzd%[%s"'MBGA5Ĥ^4/Z{’ԃ4~rѴ'Ir[ mokA.sRAQؙi bd*P.  S9n!@!ˡvG Sr@qt*e [ Ukq"cGbOZL띑j$G42([Ќ!!{%J{K@w\=L>VQ0pL_!ڵqrǃ$y+)Jc(\eH3N*D@[ E;ӊp[cɂYˋhw[d$'TPW$C"wp Q I ɮ8HtzEV:sw"}z4=$"\iΕK$cLB&SMǡs@۬ sVM 0IǙCqk.nV)nFZ!⟄b\o_m+g՗mR| :%;-OcA[l%OB1͋EbG ;t4N NR"FiO'Q8H{9Wa3xҾLg+4U|#ԏ\{ӪT6 bIYL;YD s+h{Q GCgsb"F&0q=flpZռz( 6 "` YnyVA,G872PZD#7!Z m>;C9}Qe)j^T;G$Re|#N%Q=Db\'{k8x$5Bqp6A&C!x!8+JNv|5jG'jd7"@/|-*+u(}&0 MɼLuGS-Kzʜvt'm{%m~ U8?'B#Bo\>s@/V.}$%NTU>(J*T+}O>ht7Lu [[ROR}-pJ!hr vɜLr2Lݶ`S(֏jf/mfX'X hѱuDf&IBJ)eb>4/"`4,֓f4ꯀJ|n[V C%:$eQ6XesҚQD2ىGM~yZ?+1͆?N-ƱM<2] P3 '^$5?p+}Q u&f7dX 7>`hum$4qe~h>P/؏1?N?g}?ƻLR7CAj E@)Ecp>ޕ '/$JA'$dZ~ #yf AW d+Bq/FEߡ: Pv  fxX i^b-a;9cWw Yfn!JHd8X2m |=㨇s|eJf26KHqps8S[Ya Ϗ'Y+}(iF4/oͦ M8D=']ZPG@&wPF?/(&iuYuqϊjA*Crv؂&_yYfn @TKB㲠Ɍ.~*ZqM&~7hώ*5}''[9ucTobP{fx`_^Qwcnl0iA䔚:]PBVtT?Lf!CQҍ @|+?liv bgDä9Dx&?YIz6$ _uƐw^7U KѬK8"CI!h_FyJBshq%S+?FyjRQK[pТ&pcȄG]GVȩɊzT^MkR^!Xw֪}D q|<gYK/) 0`ѺmD4# &"  MҹEыTxJ11ggͷ/IWY>bBćNQdf˃0݅0آJb1n =W].eSI['q Z0(KWnOvKimhkfMUP(T^~̟>)MaVg3J? $lHڥOo/3&gu&NEû5}9D  gAC|ii d4`Qa6oŒb/dAMHZEg|sR @o=fؙWh0kE;NQ#]PfVYL)]@d"b0O 3fԾ)1>_x9#`4 ARUFrB˗Cs(NR9m,:~pJz$k+w.!x`pmr>6S0Z_Z!lx@>k{lNGlI]qF&igvd=sWྍ04JM꫁&f07 *ݵ 109u&,Z\I2Ǡ5Ir`+)eN]N`a.e#XaJ2R݇[·yyP1X>^QEÙҦӘ$.)'`HGsKxhD6NLГÝՍ[zb، j7n-;*Yb}JLx;e1H)V-A Cvo1"WN2-cDUe*xS&&p8N÷i-"=GJ7VsVRp.Tag1DdFa3?qI25rSCUw4&XhDTUN[dC³gnB3aI@R%:љK`BskUh)Ҁ"Ijf׽,&4ZnU@ 7vUi7Ad$2Z)G^G$m7mjԲe0hĦ؁Um׏N&{L7I6LN_@@Z `I>|09;ɶsn+&!ER߄3!ML#a7 3@ K8c՗5tkTo,__)*V\J].?dy8@/.Z,(,{W\Zs{râ_wF쩯.:P.#d+/}L\fFD\P(F򜥙GR('YIgCf0^EDZL1WQ wh 5 gmdV603JLJsŁ-$CWoՈ{~9uIm5_\ZĹ!}b(h'.RFYou'Y6'BA9 &zw3Ym%0GL2T{0ˊ$/M* [6ȗ .%t#)+9糋"5'60+`BO kebp\W-\5%F!t@rq e,Nʙwk}#w74I7|b<{t^{\S,cȂ:K~-̿)_8pEQ9b@7|jal#&9-Rn;V^\C4k(S.LvDt/ tƷy:Põܳ˛+-\HNop(>ji ݧ= vC}+ o=8rz2}_?X̭MrWT EQS •(3,u^Hgqo]A[zaB (|#>Mfhڱ@(OEe hQͺtV?=2yݙiBc]?s1oMpp*bdb d,e/7]6M9ڊe1؄W+R?i Ng4 Y!{y8}RL#6Bf28WV= )@īCvFCs]HCZ6kk 63>XvxzY {`BjR*+Z}Ҧ 1nwdG*cl\[8E~6_'ː+yp ̀tK4,t㣕v\_Wi ؘbr<۴N t&(44jv-3w &n;d'!as5 iGάތ.@cňO$1ŊVԻ}VT6  $ k|K8VAe*{D5=,qw< 0 ^y5N k0i|` e?ǀ,)S@^f;!Tub`a#dJt`0S*Ia=;άqSk1ʘi^p!|4 mfۙ>pVIjt78}DH2PC@"9֨9A6؊<a`d4Z@WFN!F \`.cuCOFNsLΏӹ5.yXsaJwNl{ F9ZbEp>j-:e3{}:ggQ%Uヴ9Kt$m`Mh6-u82 /zh5_j" b)&w.|z|^sϣ!lW1O$d): =Sy;+0EEq϶%W{7x6a,JA,P Q"‡nhll8>F#&dvW(i(_no2Ms $Rn!o~z{;Ҍa!%}M$8u3Ҽ"ڝ<@1k8K0mƟ\qNQ-Ҟr(wEOc%<×Bࡔ^Ėσi> lKĿ4F1Ua6FA;ȝ§ '\R# SN4gDL\' rC9w~qs"5=r;FCGgK^!l `맾~aDa(ǘ/b N0Av~^o7-[C25ژv`=WvLq_O? hQHpkC'&UNZ{1 z֒^J`X9JYV9s7{MH@|Lz((xf4?t&Ϳc{f4K :Y֛-ѻ0[q%+;#';3j0N+`fC _*!'8Ҋ~x!~:#-WE (v7[E&O/;"G;}6rsIX :-gVV;*ǔVq?^ mɘ=[P0Zx;bjc͑<;Nl\VL!> @s |H%e|Y]E6Y_Ot}"iU'o-—O0P^|TBn>G=3'n,''/!R:CHunP+E*MP~:OIq<"ivwK'%")&'B.Cj ep-yy7D{heam1xFthិΕ6KA$a^~ XGfEe@zVF<2y W.gdN`_a,D2[5&!pʑpα탤$ Vgd* 1r3cI/諿+RTtQ4'tr7(Tjعp56- t:x~fZ!m<#h>#W0"iggeBGttdPp%a^6C:CrBu2g1.9/:0&c¥I$'nj)2rf`?ZYk7]RR8Sk~)kϺJxZTA! -L NC> ᤑk#VEA!*eSÔ$Z:fEK&it- 9yNOئ.p"x72BT!}!E@kQ؜Q@@1y8&*H 8΄.uc4d =B*DTvg)JdOک6~^v $~6B c=Y9NxNk38DEO!^i5vj8ݘQF* ̴W/^¸!x׫')rot"11jY WSd~rO<)|%qQL'm!C(~>|x!FMʣrs퇖8;1:|Ag#?j,FexȹJ x8I3e=WH=](_qF#p<7?-]>,$ Ccظ0Иlu)~gѻ4OHoΆyS0a=WDq"f#g&5Z6dy cٻl^a%C&Vm#-dH37kJ|-~Ir؅UK|8g2BYO"tHOzd|-b0{vcY'ajWm"$k\W*/- ]6F' "㼎giL6ƹ))BJLfC^+- \_1D:$C)c{~vj}舢`ҹZydjwƳu e/wiv)(!J i9&EG ")p=tT1#󂛯r p2ic*`!N`R13؀^E's3Xyv8oPHw#vѠ.oSTo>1AsGIiSd6N٘#V!lR({OD3<:}6?h<7ߢ:') s}o;uOtQϯuUOf,7?\-uLی?xd$tPKG:.9 VS7؋1sG'g5q!E)T9kޛ&mdZ+No.xfMY*$&jqj͊VzE%ӗ`yQg:t7Ur‚[Yt'yl%#qfx(DďE~5473%xݯhvApI YKCrojL?دgr]` =9*MbN~LgWGGS;~?89nޜV#y[?q4MRXڣ]kd*]?f"wʬ/:Y^+Pz{Z+6*IVn7(Tk9v]r= %Pq.o^UO_ptZi%7+ 8{δ\q,EgЕ`mIk`rwV!KeH19 m&nĬ`zʹf_3hb2oIսRfP JCG1}W3{hgb3W}}/\@zH/@aY[4r^Gf}rT' ժ$JρzwKLΣ35SuG//3&6ʤL*DȔ+XF01Sa` kvއ|ޢ?ǂG /); \e볪 S`zR"OUI/0Ax08@JOF֬5^D9͹3<) w"qGO[mYiazfIM&[o3nrpV}g2h(YdM E;^(Fa֡b{ %c0Pd8n8wک #g7t(#;X>TO1؊"6׶X_ѻZ?nm6*@}ܳWjBgf:>E[m%9$>ufI$hpXd~d[&ʝD9]VǢ'Co$!\ʎjG_=@K)FG200 ^epєgFS *nJhvS :g'[+留Wځz؆`ӷ-h*ɓuV+M㷪&lGuh5Z;fQՏgE 㓖:[PuRaj:5/gYzKy^oc_ϡ:4ZaN'ZuGL)ՏOU{U;na@j:ﮯ___/hr.4G}979ek=BHu_EG[F ͝xϭo%/>e?W/nk@6B.7:[iȮOˣ^U(e)1)B)s? BKh<n3KȎ1DŊ%Jv?Ed}SU(֏8[gt;@]96WlDv vaEw56\4,p a};2ppAtqw_X)3BrѻTZPEiPi RDl`vu̳o5>r2nZ9U$˜7C_|!΂>@gnlq _`|Y@6`VvQo~kq'#2]KzUW@P! yfvTRU/:ڗQ*~.jz~/w$'{( LG29,}\5ik{ ߠrGΙZ3blR K`9 ؎͍{_?2ˎ3y7ƝH+ְ-VRX~vqc}j,cƨ/'9䧱Y1jB^OInՓz[YJ<ެHNۨ3t:4REg7 Ya֡܃~(vA"#M<ōjA"-$hCDbT+VJ92OcS-'o#-اyK,ɁM69RRsى&@Yx a_22A}#m *T;Q0~!qdzI'2e!)`݉GH᭨J@e.vyHhO{?%UTRv,Gjd?=Ⱁ;>ˍsͩ|jcsq)+N 8nѠp%ݐ@[nTﱑМYXh=o!]2B6_8uRAT4LUqVL] í ƒ1Pa"޴j:a൅?Q0r[Fq97ՎjpӦHFU?VB]w Rz#'[~Dj?L1L>Fz2O>-=;_n; < vRyp;]xEUKc1@2lYy8<&L۾^?GvP5q\&#w,HS.ɓ∨#<.>-RtmS2R;RC˚F $5AАnM0ׂm ezS(zABU(h[7+4mCcr 8찃 2#0=eGQClE+4~Dsz6F+00Ulo] v 0#14S,OD~Ld}>[$ q09[|Z@R\dbfRYUʡOn"ÑvwO7xc<"^iw)$fhr,YMeX͜*StG:*U/;&zq/J&d@|3E2h/Q'ptRXm8nz(CoT{a!6,6oSH? k9T9^44 wGL g*IڊSXve9L2 0UdYN„[ܛH}S[ž5jQp6׉ve0kXY?Pw"|B3F/ 涰9-M!8:42 ׼ ngù VC,;K*Ά\3ST% ?>4_h%UvNqYko)y::Ċ j_V"|o]`Db%OiG,%lLfc<zݲr$D\,F1d Uj6DKZOx\ul)qq0uI $*]o#b,,wm-uڵqUjCˠI/w9#(@f9&RD66$ZS3Zu&tz(al2*\ xJ"~h t d:W,vՑ1GwDҌoHrb5pR@-qo` Ps>x$>1I ac  FWl;mfo`](&*dp\f\ǵ>+X\: AZ2XEp ^.v]?SBofLAsWǿYkeASjs_]e/%]@95TfJ:s6d$~2G8jۨgβC2˶3nxil' ֓jp|v֤IF~di)-ݑtד6Y!'@٘}BvV= E݃0?qs|{xnl<2OhgGnAJXCH?: ' 7_;P>__Gw1T(GĽ}z0O ?ol|0Vʝ￘0,.u.0H85Np$i{h}Qz8ῥ@c p60r6fu@JȐ歋(J[Q;:y%g )#_7c͆Y >8<8_O9oiTgTRԄȁCDD"[RJ`232'wrT3}zQü/,( gmЏF»Ka14xqJ8}&JU$hlxvni8;P4{q8PZQ,5f|l"o)vfQ'0_ݲ1l϶"( ! =Z-F0JQ2ЊY F.+k h:07(€Lg4NGh< }HWmM7ͣ)j7% m"ع',YnoyQӃudž5"㔗23 p^\PH  J\U`C#DWJ]<=n'??*E34&TșFjXk8l't?mTPXZ˷կ"W7_HE6%p3X,VS¡Ȯx `+w[U^#Q mm#6fԤZC5TlfAo%3]rb.Dkb_ G\<\oM=Lbqq\.eJXf Qũ%CDNSb@΅3_^OJ5>G01R"YIxk %mWsNiE@>ﴎK,gYa8͐?}L/|o_1'cXf{'ۨol<2b܊.{l[j`d4Ҧҟz( ^W00uD~2Jٺ{?jfOWg ͳ y9g#4Ol]mQM@^ުywm>MnauAOIvtZR+l7TM[` [Bm ۶s3[eHx1DoԆ0} '>JWx+GƱ21πAe$\^9xA m赡*ϓ6ԨǯZMV\W>Ic5[mĚLmXRgLlCJme/6S4VsȽM4--gAu'#sC"EA4UZEYCYnϞ@[{J5C⩊OѝHY (? >&gwEI2!h+gRWQ]I?P,Va_Z }v+*@n¨OdJWi~PrS9nsvt{ivm{yYEC^#e\twWV\'-椇VLt.<ғNbQ6a?;o"dh$paYty*3Ǟ/ƻMJxGΆ!Wج [IR`]tĤ'jg8B0`;S1 PР<4fKf#g^s\˄X cDX3684tEYՎ[kԚgG5n`4< ce#{#~5֯/ߚ"KkJbH!@ ɡ'iډ0"V!{UZ{XTƁƀ5J\z; oއ3M$T QϦx2)ۨ$a޸f3Y}G3,JcM!ГQhqQ )kb )gnj/:t,qkpDɪNq%1bQ^z&L+;v`Ō$(\?>.zlSN!+Z(s^h2ю97T7C.('aemAX)h&խ~]Apj6:,ho#hw{˜U~De { y쮽P|8S|+5I0!h:"Kd< kS4?p>##h|,<ۍ)x"> /ׁJfy(Ѥ46$^75$BiaI`:6`(K,L0{0'UG2Z6{䢫FMxo(V *"ڢJ JY6Na-8GAt;fd:o/2<4[o }9 B4] SY±)镥â+FFbѳ &p\$ 2I[16PvsбrW?yhtn@>F]H?o[[#LQPŔz!){~ZS'?p&oڴ]SG3ugl^r>9rjt%9tSe$0;fca0PBr.v]vۧ%qqU05:]:+/+ YjĶ9tԇ9d$ ֒CE)dz~2'U/L??-=Xlf )/8]4B!P=c{ځnq5^)-ELpfPDDN,b 82m4~ |c\,d ֨p;}/g(3wCr j1놦6O543Wd٘r䘀H]!Wa3̭cCdGi}FN(D9%2;0pY`f.1'K48+CŸ#5園A MRf0p"V]Vɉ6Qy4ID-RLU)ɬ)"1Jp+ĝUvLj 1]"3ەDf^*9JW _7qŬ-ļsɒ"q_%7P#1>\[i*}7O+Zo:#䫷WvL= ]w3haﮫh N&{E]>{ύ)Xx>&h&kxc9ךF&U.Yj۸2GtHNIy\0;5$h:R%1k2BtBFp7, C#cU]uI)3<&qHn0u-aP!y3*›n;֔VID֞g Wט:I<>tN'! BxΆbhƗnf^7#[gt67vat4VOv(ES /3)o>ΨD5wQk4`b/a5ǓH&ץSSpkU^4T]5Q5-y)eQgh2'"y\!PMƅ`3 "U4ù1'<t\H\+>b'' F&/ZHijIA!DJrHy{3 I:%aM!J=ƷNbZRb%p&)Kn~1_pV DFl]#< X2iL^+?{Eqvd߉4?5 tySgh*-\A[LmB>6f%NBǩ>-JY-O/#(Zr$+baޠG3+hi<=faI VPw^UߪڛF {:47*ǭzYTut<(*hQ['E8YQă4G/5OW]5tkׅ]-Q4$`- 羾Y%:@QIWst] c kC\rol80 1V.2EdM[:_z dNG!!$c5|JׅU$'@cpg#L゗>Zܝxx={(^ м/=`!fUjc/bՆo-X4 *E( #q_z^IQ;;忩}~<}|ok?Hҭ'!7yS&C"8 AGyR.s%r7@GT/3J ݸܲLn.N;i0'dsH/Yzy}nH `T./z?R=?<,ѩmz=7BރU:$%)1Mx__Tc擝o{g>_;zlZ3}XT g # ˰b_sv}42|$Ks?s?s?s?s?s>?ãX