#!/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=d5e6e570be578dc9dbe7fc6a48a45bf6 # 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 [rHvSt (ɲl]HHB"<[4H4%@,MF^"Gɓ;}|oU*I99 |x:8اOt{>O;O]F}۱X6ۡ` W 8-$:;qK,+Yo&p8c+*Ë`~rDtqv93Q/ _LXlv/'ѷ\ðG<`8;MO_XDqˆdZ6s)M~mv~l7 _Ui_ya('fzS#>doYLغ/'_ru~_TQ=}!G:;c{ O ά<>w>_[2:kLH$wYE@ll/2(۟$@vAd~ i$cì\Ɣ\mLLy0D !`e R(/i c{{|{R=@  8-je\#Z$Pc~ٵfӈ7,O8eh 9$?#@Eo ڧQʉ<*;gUC{>HemHA Pe@m?I*mJ 2ahT[y6ca %FmIMdkUw?4,Nw:;v\Jx`jDInjMT ʱGL>aɒXAyy]&jE6% Asm !Xӎ j?vv>;4ڱ_!FK?f.r…, n.|p9 '%Sg[;,]hםv[Sr2Vɨp[z鯨t%X>8lkrj a{IȹbMQ̰]ʇ (YǨH0csL]s  l\?*F&!qB?4S* Jyńc~qGİ t~ÒAbV-Ի-Xaޥ_%+*@ye꽐8s=O TMM6٢BPtuOP#2.7Z(6yO*8e g$eӴ-)n: YG"r 9( 7y: Ka/p5us<(S2o3ҞƝʍ&Rqe<$I.{(ӃLI,o" 8m5Lcegq4@N6u`g)3rZ'Lu|LT#o4;Lĉ)z{Y}ī޷ !Q]5ӳ&85)|8gQH&Jx$[Um.=(A5U-XHwU8ϫj¼m"l4'U!-w?ЂPq9? hXS6l˙"h:&QV[Ԍ}W;Jʯ:G&P|kVYWYk*%9xRuL4 I@ufuWlY43K) JtV\#KN:Cj0 8 aJCş*T}dG +**kE\i.D)R `M74-Y0M>u31-mҫ#==R(E+i뭰d%*&ao*Țͤbʩ`aivK 3LDc$|,%_.Pe]HޡP; HK*P6`^+qU],yGϾTQF/,}z݅$,}jN'!"L#. ٲ2ߵYoAV@#QQ$rwԈ՝#e+*ZTeM<٠pӍ Ҡ|#a]}D*a / aRn%MoՉ ׊dcq˥c zaνB2 #_̢Y#PbRMʧ,},O?! ɥAeE/*pVQGҙԢ`=Y&O37 q2& ;fZE'\oݽcRyeK՞FL BXb*̄-OK(Fv*h n[~KnGeT,5dR^$MD⏸3K1m:w %VсJ {d(ٞ~h}Ӧ8f'zW!ZCLzTw 3Ҩ~ p hP}²J2*jSYeM٣8A얉kWsb*‡ ȥg6]?g#i] q1e$} hNL|v[ jT*аA7.Wm3v^5'*uu,-,*7-+p4HU+2a",P{TPS&fqʳOeBg? Ua/b2л9q/T(5]fK$8rk"{A-uZ*)8xӍ"E<S]/բpLsoŭ%"US"/ǭ/ ZH&ϩ@ڳʩArއ1h tyRli*'T[ }k/n[.9P|}4&S$Cu@ Оfb̒5v2ou!⽖V*8O}v.^ݲu(YRxz,YKx(#~ٕTj _]݂B;SIa+ܭ}P-Ho-ɃV:7 ŹڛI*8DR5<+jlhRU54Ѭ>1&'utX|z.$RşNu۰U|.+OlM'r>f}[M[~BѬ0~Wq.t*9ƿn%:> N럾ӓ:5_NkWNu{MonU_VNr 9RG[ݠNCޗ(ɫv6!Uޓ0| Snϓqr>D?q(6<`c!~4x`"nv ⤵.b}}z%Mַp/o<rt7Nkڪ#P-ܘTn)Ck641~oЃz/nr}1ǽC(nSu㟅.ѫ[#jl r7e`*_[G >㡑 Zg^(F.U{}vCi-t#<crh p) m4xTZM_Ocį5]F Eˆl/dd 4m a~̴F3H]'|9#dGdE>C{tVp,% ﷰZl &n뙛$QA X/Io`M'UJ+k:<K u[#IIAph;٩7LGV3B4 pFj ha`tz:KE> G-mol2,%i(/VџAz'+3C&sAG0|ϩ j%F ;pj]REL -m2^|"p]z!ЏKWVm~K]{]wH2Iqg/9ÉymGG a353;[j $ U]jU}6q 9)%֗)L$Sx1 ag (CH g?w144xrgUrʜI?N^c|nO`89$JL룙OB 0Q]ɭ-85inK8ykLEpJ Ԃٷ"KFe9ĭ?77K,6-LG|ֲp\w-Ox0g֖a2|/Qc? r.rTKp׎҇'`mSz%zK =y+ ]l: В3zv:G'zvDi::i t9Q窘ܸKAI&,цQ*:|o{6'=]Nʸ`jWo9߱!_t7s;ŷNԏrjyzg7`!i?d"scYB<KRڝaN增D=#PU.sJ.DިQ^89 g@,Q!ǘ;kTBVx":Y"S\) Bnp:S=_L޾ `A#XQL&F?{1o5zpڭ.àK}Rn{60DO8-:hR77jr^aka U_XJ^U7Ox7$'aQ _}wh:ҹrL"9n(e6wIε써3E} Olpb6b#MچΛAV[ڔ YsrRƈ)>Ϥ0`'W'Fpt??؇mJgFtWoo]օE5d2,Z?hUYKn߻[06dM#zVCN9o>KnXssqN]BR\zc̑02*\x ׎F់ٝ< ]|pg72i8"(`愂xH18wVB =-_*LN΋vAR 69w2K6_47(\}3{+re 7#a`;h8s~zDwv&.WŦ馻O?`/Abן,ǡ:8DvNZvKM^X^* orYenQ+|Wۮ\~wn58ngzq|x%墎/.@J6D޲-sʳ1>7J;¢m$7 q2'2!%M*iVf6v;hIƾO""!ZۣsdqDPL:`W UWq? ^ۖ8Iltd^R7_,'Td";rljCYC+ ] /a|܏YCśb@3rD 'eпA\=G!lJnOȐYC_pt(yHq"+HpD/V)r w%BJ,DyqA|ҀgqHbHBڹ!N:!@"&+%eǁ ɬAwB7UTbu}^2SA%D1j)WC s̳5?OIVJ[A[z$G ; UhC<>HЋ7՗[=9bDӓqTqZE{Y,+o&gCDg9h (S%OY!\T5Pix뿈sXbmi&UNCvX-7邚,CvFS"T 0E\05a^L'T"2WVeG;13vwIvUc>#usBSD݆ATS'r+]'sǽ9H}$i/a zLZHo_Č*LC lrl<]^^YңJ:Dƣ2JN'p 3Ugne LvXPbh s7xig»ҁU>ANt(?x~1XU x4 rH7iU*Gihߧ.ɬtcޤeYgVVuz8]]~vHQ%&3^Ϊt_XC7?|{՝g<|ER5崙%ׇ-' qŲ['{mPMr"=&/Ϭ3!K#ڹ9xY-G胔5#~ Gk_KڀeqH' )djsf-tjq}3.DO>k_e2w낊cRT-%A1eElo^'Cs 0b:ōZ-CYU.rn]"Y+tSD`Q/_%-q5df#jvnu܌3f-]}MЍXpW(e k{v,ƪܦyP2_C.w 0//U-UI/wTh՛ͨ9~ /^]bA(g$L%3swD3PZ-z\6f-=GX9)޿RV[Vm%>,[>t{5ӎwc5 mMR[]$iSinpLԕO/t|vcPcF uܓXU-(ٹ><@؜e2>mڇiZz aQ(I!bԚ;{>n{I=A+gӒ&G &V̮}lli0*Lu nA6/L5VTANdzUEѰwWhd; 9ֻnw^=u˹?ipU"uNi*3ִB#'+OO_Lj8r怩/MFO4`q[AϦb͟olؖ8LQN )A082>8ԭ1A˰~W}bvKZ:{lĜY 3aU?n(6X ic6%]>C!o:G4|9,[\ͧ1~RzX[ljTz>#M[Z#[j 30Q݀亞mZiۅg:GxHVa19aya{(^X;NK wu[$J Σ.SL5BJU)k $p .HBۚNTvL܌'5r!."1Ir؏ъ(aYu9\蕢lxG,3ߣ߮o+)f~ 3gK` !(׏1ӓ|< Vl}v\R&vB4i,7B=~ #7›vg|#LGeup-hH2rW,UDR^M~۠wlqhtl"*CѾ櫇*>0Lƹ=^"ex HûtW>4e( (t\cx3(p,`z%EަB\50.XJƍ5f8Hwҿ&t Vka=`9rVgHqڼ%{E~:#fZIM(C7?p K7㇌p^f9vΨ^9\{C|4ޓ(V _C0şࣘ%9MWu'"dU\/yiqaܝВu5g9t|9͔RKjv,"}ÎF1Ǯ-GMA.ZܙʅWZQE ԝ *fa$|.`UG7F'[ҋ ]꼱MpLisgO2r% @]Ptc_eQl6|44!tr{7Ź ^GDyםw& tSaV䨊(b.nITZVsIK i`Nr&2ktIv׈p e|?c:|ZT?hP NN|-AyF6KN"ϲ4vLo*Y VjEZAPc$a-L Plxͼ<!j'Xr@Fņ@U$DuI%ϰlr>k[ZZq:2'#d4oa3mgYl"|Zo25@3%`c?!U$y9}ɾIFu5 oCA8 1hѦF6 Fs-8?9m|SeSq~p&C݈V>Vc_ ?"(VY҃pF8(9L9"Π9r `Ɋ(!tOurzFJ9a|uhHMnpCئMo$ڡ_4:Rm}ا]%Ifq5qC 4˻VTJJ1{`"Cq3֐BeYyMn3`#?HaoT+VJmZŇ3Ab˽^L$PȽFVaV` d77 :/9E}Ӯ2F"g:&lxi1|0Ot "͕ÕH?Pu6Pq P(] nP;Ÿh` _WvetFju$ONOl%Nd.э҃bo;r_]j`TۯT^va+^WUgZ_{U׫T^o_h﹥Aw~iУ&'j<]%řբ`9$d'h^ Lu8!8k;4}?^#)PXxnYJ_~Keb 4r yv; qщwZUI얋lZ{Ҡ2y~䗪,wJ#FEFX^}rnwMv>{ݶUt 6# :,0F;==ga#Q0 Bb=+"Q5_-gPt{{0l?WwXggD^h '޲s/\e)'T0> V'V$Wh>m8{j?s}i^Z+nƾ>99\`|rphbg XZhrվO8R Iurz $GJ`1~EGpD8.ʴB=N h&}B."b42cEԉr[贱`-/nCTfGwsARUw{¥Zy@[_?ҜSQ܌a2CFXi boU' tTY Xq9kNʻXs~5'T-{J9˟Z:e \p]; #y 86kn[mp8LhgGuo%ה5CCQ}fȝtź2vY$s);e`AʋSTUWw4^,nhxP# Eo*M!3}"lTfW:8?iˆ4zJus_n0s}M:`O_%KP&S)qѓZSxٔ׊IR߀89dVd:`t[1S)Hkڧm BLa4}O:r*¼ha[o7.gr"U|EjȈoCw:'iG뛷/k{A7 c<4Eػ+9lي^Q+i۝^-vI]T~k|]Ԛ bNuj2]FeHXPP6EP? Fڃ^|Oc Th>^4Ei40xQzPHG cZx>S*az&YI29 ==>ƋQ3jvA.?z>yxC>_MImY6P7%j#\r=MJĵitHlě,iNHnrLT˝X-~0tTy^svsh検v7;(Hv/1x` &kCsݔxEӢG Y QabD.L.Lnf> G=heTM#:Rϟ3x1)wQxp5~I{ ´m,O.zMFNkQ:+ WK 5ԿtCHME -' `8:C8 `?>u,7nme[UbD!"h\ J9T@V<Tri@D]K)Z+IK(ΊLu"nb 럀h5hR(Pz@f" Nh=vV^,8XBUWiD\k'|i 'R̼tȝ͉ݠT$׵B=|{%}GsUvp"犁%|Ƴa J="`\+XN%>d:tuSv#}v~GM6ND*p!h5j[&'/~ۯm4zuu Uf ZbMmvBӸ?PlbpE9Zu"g{LkMjBFsHd0(m?DNlp̲!K2-KXE/q  S-aۅfL  !ĠӄE/3t嬡_ R9T% E ?rI$ 1;`A+]d:Χ"RyXm}_pFUlWO-Fm:iPv3کSm<ι a}ۀL:#*̬S0X\ðo4 "za K+W̤]G.iDJ{eCɛf:/+<~joOJZ>vEy<~@ m Dϥw{1WCzYT?ZCRR$xƈ5dElfbjɾa ŷhr 3$J\T3zb"|v91DMju׾YŨbԟ״j43wࡗ=IKCk~؎DžUVwӲ=S;z 7QeK)6N/ފEP5 VR'I!ui%dPxAݒm'{*J-/㈆Qn!Dd~Fi:p*@~mU40Ihمpw0 n:ZnaN=#U]sPo3U4#n8DPD-$F ʷB' ZtAcҐꢗnykX0O^v3ߍ@N,z9'EgϠԊt YS{f0 mx22VOJ]R m݃#8RxbJ%RNņqĞt$qa~"Pۀ^܁W}GF).vGョJ{A6~|_!ܠ~zs͟66xeSm9.i1=x]<)rM𧭧[؇/әNϙu[U?g|zm3w8>i7@iC)h%cCdGxQ^&5q N#ꜗHH/8kw"DgāI7rغM6є&@,͇mF[QGBdm5Ёh:62?P ]zJ+՟H0bAʧD ѻ7NJkM8Gkj51Su(6Xc>`zeZM-[4YF`B\HH/Ux;K=%xקB\|uz@ך}0*W%t%Wזnw6CD4cG\U7fdj:K$ HrGPX$><9h,eO*Eqɜc3C 'fS;'/ΓLҏ6u$įF/yt2 EkZ=#zƁ1ygz7f."`>XLpCA-?Ou%'ƜJ\!5Hm]aIN!Հ,)AٝJXfax\ IC5di2{?zs΁a9p=`Ut3iPBUr"#0?jtO]82~"fG?+5 9h 30L1Gf` UFư EB.3Av s_ؾ+.b4X ^ <8voH{l+%؃3q CR 3?e[<`NX\8O+(My~:t.%M%~פ{r2@t]2tYUVۂJ+n$E&H*coS7F1VrcJ0H?=]X>{Ȩ{NUTU8QK;V3C%ҝr!hgeiMhڐ=cs6]Q0>0ߨ''7FIst8x1mSK桗k.[/ERieR1Oq7ׯU{L)-*E&ﲻ $WC`p'RbP! @m^du,}d#^C>_r_-k[1c-`10W(Y! m \a>3U`X~0@Dzee^b̗[ڝ7f{|nhǧ4|@t%/+I0jAeјg8u2:#u6Lϻ%D8/?<%} v.^@J]dNbNʎ,tJav,po);S70ٍƱEo9`*(]\yΣOe^_s*:F~}7 ]Nūew`940ϱRu`G}h$@!Y#ƹ~媜3:e(ŷh7BNq7"){WRzMBZӸWl_N {2S/<U 2@$e)R4?\zTI)5,nCq4~s XBZJ ]4QE)Tz*xVZ|`!AdCɅ\+:\3? \1OƛGF,gK4ݒbN^jK%K;Ҳz=c9gra r=uW&M{t4 t9R ڐ?BZ4MC?wgRYww[G4h89+΀z'* gNnlehcK@'Pl t \0`' :VކUJm7mY=9XqRCA,aI~ kcЊ2_=^);7co%j'o`h5Ec4Y`qR1V9NFq`aLK?Y.)ՑA{D} vqRmxϣ8Cz$J`QhKrF G0K<*NF Ux;Ή-J],,qM|Ʒ[@hyD]l9F͋jsK0&>*$T(c0&3dA~pG03T.m)sIx-O`D7BxvX{G;utLs!p!futA5ZEeQ`*dz HeOXI åZiT ]A E1c5O8)D͠lT #Ia*( S$<'KIjŊeov-/DKX%;8idYSԉ1YɇƐ]O)}CPso0YI cÁD%.T%NMk}d/#>sD!6"ѣ:WEڎo6S_4Krɮ7/VDGF2\fE#դg>u[bc)ݗŚ:"jk'DN <fΜ;S֭- yɄb=[5jH[y֟BT2~KւzN^ui%6+_ G0( d e%SM<ի3 [ UX!w18 &?5|+F>H}S%Ş^9+F) 5Ć [gber!'0UuȁK6\ b=x`tf9t^ t-p(tBWX^<wjhdi:Abjb\5Qq* Z60T Ո# dOGK^aPP72+' d4#V#u9,DkÙgN%D̑a::PwһjOZ}.LWۿsm0mL3Y^; 1׈̅.QaSFAB[ ֡7O2 W%,,kW$ &Z\V2Ҿ;^Us1_I"ۙZaV&27בl܂ȤH':"%Vi`<|<.tep;22Ґ -/\bX+G uɂ/nGAjٚ_ZjV[#uZ }sHvr3Z-Ԙlu)jٹwi%. "] ٻ92."nK8Đk 6 J&si 01z3=# Rr "Q#Mqz͇u&-AmRQ}MWb0x4K#¬vcY*V*X٦L?Z.y[*ϋn166#x3Y2P=JW׊07ZzYL吡^F=.?m;r4Y{t0]}Qp 3ml]ӕioLAz@0 9Si l3u ݫeWSL6`Koɗbn^,jJS (bv֠6o[QK f`npl>X4ξyHv&HPm3W_ՈN2z(- '#p=7Jځ\pF(=!Q~_ޤ_< z&GPiew&I0( q9fծ5ۭwPA]@*`dٙOJwSyr`yUǞޏ0a:nN7A#M"gE_"I_VfGf$w[`ivByJѮJ7O܅8#u'_KoS?A\Mh9<<9mwjwGłݼ?}I6/u~=#] 8aM!,|'S ij{ Xo)@2L[ݺP7i= W=5Z i 1-6NУğ$MYK!ifٛ~;ֱ(+[zWo6'HԊn):ema6eIg}S=k;H1n_qRd$/5;{$dwǞޒoވZ;v>Q~:ɓG9I?nn>~?ԣߣ18czYc1'|zG[+?זpn$IIr>M^uA"|6Tܒ6 FAI=TW8:7Q+=z63lz6o^O`7&xkP`S1ؓs3dek M>xoaU/C?b[X\! fAgcd[Ǚ]0t|֕c#ZUzQ^gNo %"92֋ "ե˅4%,U=Xd sj=M\2I\(.9MߵB^_}h2~vQ:a2O.ǨD!8d8Spb>HY Yv=5c 0f|ppe,UE:Ɖr9G8gwqRu3"Aߨ0/::I(6/ QK{Qj^uD|F)☩5&q1JlTe¤G"AWHU'`MxF CЌiMF[g= l)|zEBb(lx,\t]Db.4KKV/X /y\D e#fX>I'$j a &q']_Abe4!ʨuiqG'OsQJtStus=tWSؾDw<]xIS,E@ojH!Yk`13P,:9P6uBfuUժލZ])6[C.gQĖÄlcN7ʜAЍ suۡݡ{}8ȶj6E>v vZܪ#9H'v_E5D4ȊfOn *bGԃW1h5yf ǨnrB*JJ(+mFK_ԚuIWS/ީ~]k6^^R=EH2cxRkAΕ"S'pʶqxrЀޠQQoUTѫPTF+E4MT>q~G yha]/:5ۍӃZS6O["vk* PT:~ Ol:4M>.^Ymc];hAEN R[Ԛ*E.U)$jvHWŃ{ڬB"DEh u|حvqU@ ZC0XlċVS5@ku #t|WoJ#U!hdX7 `::h9R4Z5-LjԠNZ_5[)LKU{fKbVCV wU i;9/ 5jt;j<'jji]B]D\ϊt@125lDӌWG'E\Qr ҈j/nK/P,Ѵn]\-OGJ |Us:}]iz9&"VvRDh㙤n'DgrBjM1 *M nnʖ?$(^";B ( Dd#T1bD>0GW}9M>~XͫŚjq*uX̷ YQv:6׷RƓ[?ղ&^($g =OBZai4 =`W2O" !U bryB"$ JVMM{`|D*3B6%!P:FBX ScwEztľ4 carQ a(QU)׵˗z0 s?te(A ۵ ]ˑ)w^N[ Tz]T\0QKRIU0Bl͸^Tn[M(SEvlA^ȥ@4xc٭CfyH׆["Vbf2ÁRgx j~kc,Yx7lL:z1v}1MG*^vڞۛf]k4oΦW;Xƒ0Cp!7SDci1i<:zO.+ 2W}*]Bb]UVg3A^'8L)C)9skދ0p,3$M*WfV_=yyh<}ezI/'g E\7.N<2K)Gc"HoSYs';^#~3Vħwml7{!BjjgCuPu+ Hh~TXָqt$0ߚ9 nR[w{d]@K'^^u4Z*c$`lA[@e*Tj)J#@xD %s.#!s1' MȄT(;G]w*Bo6hkV{YA%t5Q18s e`:QL;bFRJZ4Yc)bH[x# {FЬB9|!J,=Lx,grt :H83H#̌L (5QTXLf@0LS:/?}8j\%C3w yp^Fnxu1)c In;|ہ^Qv~/5&y].pA ;t gF%ȴ-aqA=n ?J|S;xؖYn//lR[pZ&5[ |f;qtKԈ-G#s5.J &'21<FŚcNa m\3Ftda $=kn| {1So3hWYM^H+wYXEdS_Z_3Cd+T J_!/,x{Mia$P|]r9t<=g >Yx"hִgx. svN\J!TpXEK/DG BqdNh+`^mp*8_>AboȑjW{k-Cgx;mrkN(*Kehxn&Hsi"F9QmӍejˮ?,,3WBtÔd=<.M;=X321JR]3%זp7a5HrzL N'=dx(3 Kwܸ)SLL(~:iP6g ʱ2Zeْw,ɂW9Rx)B<LNi2+F|)p4p*_*I*f`Dnm(-*KXCZ بDU@hڀevڣC;Ǡ/rSy#t q`Brp(Y =ߺNo\0Io' 6"JRG~D s'yARGN4QƄHˊl@<=9N.7ZQ3"}]Vi+j|!=:0_WXsT G9YqGXuMtU4w}L\/r|PbLE\Mg:~ qLtܶs+LӔL!B/nbw="Ek DWHI -gI$UZ8@v8˱@/-`uh>8^l7s@zd,ZR|lnzm8_aJ;ESɐ^{QhtJ2z³\Y_%.@,;}ű΁h~OjV C& o+E_A!\a-虥"C:ehm)7'M_Iܗ8FJ{E⋃  G[AȈ%Rq`:A F Cw<Sa1 扦 %UwD1!fn2jC#K{2 ,,J[*D.c`BwԊ2 lq]* YjL⡵be0FKL"+H*E<D[q3xH| 6L-O 3DZ+t: Zl͜N{ ,}^zÃkˢ~*8:*#K1Lȹ{"|2;G^h0}Lf|0 b,㖦y| ]A*e ]2tóRY住>K!GLnȎ`M'Y-аԵ ~s)۝M.y>LytW{ZѡtPi'D@kKg\~GA 4=-~$`:AtrR@hФ=@'Ox ;9v~]3J"enHOIKM~}^.4M 1>azE>'х,:gNvl fEoǏVIU|h/e1pa~ug}z6࿒zȼय़c@m=UQ[zUrM:h.s78AK2VBɵ(6Z(C(~,~0 IiuA ZoEZCʻ 0 -WO`*rJѹ)huTYT:=W3=':ox[nO+3P9ϧȶM1' #7V7j*Bd 5*EpNBڴd#b!?h|Fs rVa61EC{4,&ԥUp PtXڲ҄Tv p:Tiw+h1?9חu,Kc=BKX>|j C gAwi%>r..Κ}pZX>JM/b S)P6_an sa_*x:&{@sSi ᑼuZmN >@NI,G2=1^mHiSdk.;ȘIn4S<-T}‰b(m+0EZk,鿾bUt<9pFsmI,z1tճgD8\jh1)D4m?GF07y B/0n9D$&_Bqe!H\PălYƘ. Df8{Mm>?հi;} Kh*Kˋ^+`iK,-Y3tltPvɝ4{ӷaM߆q ѽg=H])?m&ld b᠋FVo0lc@\NK8yb4irPC3`™|$e , c%Q271' u9nQ0r O2)>1; M8J* yA ^hpP#ADsKv$|`vm'w' \Vzxؕ݇lyi]kuip3x-8fYR(o-4nQWmPנKk{4 );Vz]wt?F+Vc8IDQkm*Wtu =wR1`zuyT4> >8<ޫ?~vj{ d[Ef8֑kgiҞ9b#=Z<5{rT25'CS; {)@*;SmxLm>,^S#k }HbY[pǻ4bu4h1`bP?)^\5|pSeWrCvF>=.}Pb髷 'ǭ[E=s~ơT7Atӡ !D[ A{υaRdë#Am5tV}/ 9^Bo!!4BhFUlTM]E7 #4I֬Y~.^y?;",[!Uؗjo ѩ˜KA-L:VdIlw|\}{JNs1w k:k<4)l_J}.x#EWx+EumaIBEZ{r*](AG8\}z` V 3[̱u|M*C4l@-ty<OD2 ΑJ@X=Nַu5 nNv5-|@pѧp>4b! z5+*pLy4J mEViw`tl72v_tE{Ǒ |,8=naEV-r]N9g鍸&€vHZd_Ȝυ5ޯ j1pRave OUưbcr#HϧI<{ v2 ,C . G]D=^e -N ?zþ, dm?r- ,47X*azCd0I Ӑ9ĎǘL%5.ED+l>"7*䡰h4P˕(8"if%H Z wul` k nJ: /5‚WD˗3brb8钖Ŭ[0RU64VLWQ$u5$40OTs%HqQ3[QhLXAבzm~GF6=ꖅ6=VgW8qKƐߓq ajpdi֟Zh)W]Y'.l4!ߞd`wvN?{D\ƪ%w,\t^i_ ! F??Z[ \7_"pOZk|i  vN֛"7 ЖV]W2L@m_(BRtԝ5Z׽Kآ9Kg^oq\w!wE`CzڎֿM` #}(-^ ҇~*}9=9,vXgC1<+.9Ch0=}aSlAX(\Ln棏^A zÙA']|`m@ 婨.im찛@lJ^"հ0[a*l5OAłp!)Ӎ'a` EC,9)*– T SfijZѮv[pE%c OiUE_g&6 ِX(ƣHcV F{pdQ6bnD3?Wpc^k6SB둩ro3 `e:.&,%|$ v5kv;sGF!.o5Ų˷o%{/>Ҥ,aכxM5Z2H49~t#ҒA~Ĵ%cqC{r'NHQԟALR#*'(4Ex|2Pf QVcKeYv#H&^ \{ȥ?s&iE#((0!kxt106`0)2 (tn tc6IVj1BS8h|{µ7X2}s7Sq2qqSd[ڹq)U-gg'iVq|:V_e ⍳IQD k釰*vN:<8k/k>Yt^2=*I!qrfq sGyUե]X'eR qet&g"_F { |=E!(^Gy\ߊVPx:|2Ɨ` Ճs1iEVu-,V@»@fPFЬڵfWw"dl";t] eȨA2qO GiBLu8uW~r{|}=ߗQg(fh5ڍA~=ǿy7FC`="4><|h ǟ?ϋUÅUE&!e Ss2%0^i A5 $(^Uߧ0{]hW,D$>}\q$<ŴYYnۄ-9K"֜R }6ߝZvSzMV+{ݠ)1헮 0S#GxB_Vx  t Mz^^Qa\vc4HCF!2T'EcA'f]] hgЪ3|6rI@}@~U'HzE}5, } A!"bXw EV`m4UHFES D="|Pʳ]Nc'g-AC@9ΧCX&] k#B AGA0X}~6]Uf=4qAǙvd;܂`6.stb_iA&q5L+k ԃ3%걇N: {=P!Y\(mi#PB2yN]D_86U@SV/'We(Xݍ_׎k BvpBD9;;Gh.P_׏ڞ:) ~Ҙt0⪱N^?e9JwNw?IH'N^DWBMNfp&T{=8&A4j[hAŏwxG.lo>sIeV#QvDHb; =e 1 Jq0D)HXۤa ;1)9 >Rrdw<$՚,[:9Y<w?֏XIaϰEO5%*]DS];(j_ C ⋨ I}is-15Ns2q4l:@bM}TϧJw.y2#?dž̆ωҡ/Y~XT#;b$g8n*X=ppB uW3 >]8 >3)M S . >63(;,Ӓ,wcyYfc]&~W}g"ӡ77w*z52-{p.:~ގ$FCVoE>=gyԔ|΁!6[ĹOp7s>HuˤvE9ijj[g`FٱL 18TT|ؐ!fSXB{-Hi~z);k1&XOȯ^O}}5Q̯),^^L:tL3{&m. WC G4W=E:om>ܼ#>'?֟@'W=[٨>X)"S8O??[AhС|{yp[kCfJ&f lQ5S;m7Z8Y)~ =~k4 gk1?Ba_Ao喈|'N uQOj?z?ԣ߳Q2T߾'i-#>6OkgZ<΢,**KYEI/ƪTF3vPC] [CPZH3[N(^8~jd|9CͪQ{5"ن1E42ݕ6u1{}et6\*DQh.:y]LBz^6 *5q  wj r)7N'm CQ cM #osngtb62[YF\PB IiLxFjv,X"jxd|>#%}L..2k빽hZ; \{=wƫ?>IՎkz-(eւ+vNߞ46OP߬VE5@:k((Ba 8QT>h4Ɨ InԚyrܪ+^2e㰾W@l[}b՛EY{qPʨw'mxPrZ'|1Cjw)U)$jvr*];20=!6unOuxFQh[4h:6e֮QP$@VFqԮ7'm FY{4GaZ3;,ǂ桢yGFCтmɠFH::h麎7V ?$hPհS8N '꥿+4R^7B!ˆnw_3bl;ȥOiy}\_m/YQ,50v=NjgܳHiѳ/K_Ek6wu$ӥ}YvX$}DUX=S  dݓ+;#CߧJ :ՓiU[Zf6&jΛʎ'2IZySP̈́սeyw+H}y) ^釥2XIYNZ]E1XZQ'H_OmTg],g8|[TN2/:Yө׊TH __~ԯԟ{9KƐKTaP:ڇhJ8U` kA FKOB-2 , |P %U 2c6/JeV(=˺9v/(]v+*YL-jDы*Fd2MxŸ=4DJ2ԠC;;KbρL hC[squ>J``ɧ|𠰹8*_Sbvn l. k44Էtv޲VZLv򽿍ލĮkd|Vrk..( v6~b{xyZCNP_?~Yfp+ʺ{+'ɺhERDyYbM