#!/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=be8c84bdabbe6d84b96c6d4a7df7c21b # 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 3@2N9mXPFeR<"J˘X*L PTH*^[s{6<;g4Yw8`[W.{0cЃ׶.v_ fގlqfͨo:o2g  P}r6hlxnL{ _ ohKjCldخ h YNoX7f(U̹6M^":=6.?uA@bxٵdbG:濎 Yϸ1ڋm q8 ǵܱkGwL5XƎ נ bX$=k=pP~: #109? bC6Ὅ%( $u`"yeo]Cr:l EK*cb (ÍTm+.{g! ڐJd j5xJ1KU*bfvh,Ug8৕7-xuk5Zh@22Z뙎 R?W) OqGcN4Ҕ_k׳_A_Z[7jE=ϲu6Av 0k&Ln)\]mV$ɾ?ߓ(W6??؜@vk<_:'[~@@qFf*HC91OYjo(rzNzurY?֏M$fPd%emFiQOVqƫ`Ae1&s3=;8W+"s &I9LV\}k gi@ǣ(dz $Dr#H&7@y^X'F&<&y4PT*HGӼuA )=UWĎZ?~fA ֬.ǛawKI6 ȇZkٴ)fa{_ ĢQ֤6PG(G|p&kAƣ]E]*vk4)t ea<8gFC 4;'S$67>,.zh GSaSHԿqdǟyR%<4mߘ2лD)޿ZLȞF"UW Й~>٭_5S֌IG>=VI iBˏySu\Z c'{RqMJ5o-W.QprgiKtx$Uk3d ^ HFȫgxЁ>PSTh'8 ^;)j 5HTt(ƕ'q!>Bp[=oM>C@/Ҁ&}h.-H\ل⩗- +d@?0r)ER MHy2ȍJUN2BXr 5{IiS>o8( vE딕r@pYTuQ/q3}lN?mJ|v3Ldip eȢ'~Ex˾q.t?i;#`ci#!$huK@JtFR!ViS xu Yo CqE(© X".rY̼ps2iU8$ O:/n\:oO4Q RmJl,$tO6됉ƞ/S%.<@x-('cb^py' y bQS@t]{֧ijɒ(I=猺$+OLF^z^zP2&2-H[ሺ`#?S +RʨȨC ĀϰȨ=*J5^)\ru718L>c8Ie4&ofBi P3)=glސ |oٻ1zERȰ&|ځ{>Uɜ:xWR(n#%>Vvz\{ջ2 >& P"Pd${diAqF|?Pi\㾻QJ>v9f6K8z8anjlcsG""r &P aIeCSTt^ 5jf1xٗEk <5L3>)>@q1rY>/=x_:F^Sg근 |\tNC> 'ޙhr=: 4ܱmU+4[S߱v]^DZIecGux 7ϼi]NKי{W1NWHnzKP yXtuǚsu`W/_uW֏?ζjQJ9 ^Ʊ'i#9_l~6*ҫ텪E~κ_4O}фv> |eƭ~Kfwן)=?y/_'jחP#a4_Y5 C*~z3+/;^{v=$wGcZpSM0V.u(pu |P /C`F y|~\J p(ma|fcv?Y":a|ۍ\2i@<ܐB"/ؘdGwPwtOﲶН`Of~I>qQqѹ:؜ q8aPJtbⅧ;Wg!a9)ɷB-ZOCР)?҃bx/>&陰:6ss%w{:uk * DёRjI)H (Z 91 Mh}PGϴ_x!N9zn*11PbKmnqLL9;Ve f{) B"sxc9nyŦ]A𫫑>oiGN:t|i$c5{/tPq4D'$?}ee.@y)%Q٦2xa$MlM/ZdN[)@jdTZu^*FB ,SDZPkʻ ׵MN GuS./,  { #P]\ٽzvy.hyz|A< OH}NW%̬#L%xBQZX4߀H]@d )| lUy bx- }3h7:?ExVvC6KViHF.M.eWjlI3ѺFQ+ZCپhq\f9̦9lSgSRԳ.801LwtUK԰QMuY6@[oňzO6w@ MoM$r ="M]9IO d #ؘ?`NTp۵dBsk}rڄ\t92]=;dgJI$%n :ו͝5|5H}d(V E/Ph1-D}z )2xUcZaH"6fEgށwa xB-{EOaFn:{y"BMWhHËC&-{}鱔/Kt=^ i* ŖܓU}ϲS^{&ȍ|`>NmZz[4(t5>?)$` 4P@dzO%폝 L6TYGj`G* o@;շ\]K?v:?d4a;Ig"k_Md1'p G5,xcMIwyS| L?/d(Uk!^*%KԍvP4 $ G.Y>`smbwG]-%xI YX XnK!tQnV_=l幂Hh v^s]hkGɦa6'P4kF⥵dPLXYKU?6SF5}_L6^뮸,ӭ ۇ ުHJ^Jd(T]: VQ_՗-2Hu#X&ZO.V |Ջ8APX6a!bCD!Q 2Wn23+@&lDy-ٯjʛv |MI[α3 t02|Zƕ ~ۼB/֡zg ;{6,_3 G4gNMݲ/$ -m}+x襼3ŔARU"K&1lj3vXuzF%Yp̈JGg̳Ы,kwh4yw=}Zq F8iSQXL{f&H2ӿ"I'>2Eo]b61=It1-̿AYMbzQјZȨh$V?VT?al)aBqj4Lj+0c]>z5SYz6{-t' s(!c>i+:`##D VRҁ,HbcbXA<>Ģ{#qtaY 2?{,RpoGr!=^/6^>;֗<@ -RҪ] U F G1gԣ&ZJZR#=_VZ^&2CLř>`t]QиR>&gb,̥J4d[Q5A)5)ؿT)btױ6vuwb٘zzH_3=l(3zC_vք54sԷ'mɔ[r7[ ֹj9ܪ2eee eW@Boz)K_?dQ˜Ҁ嫧OS6k~62ֶ*5n)' vS{fDzB.dXV!_VNق]iz`Nk"ʼ 5zm(s',^Bok8mv2}Ws @Pcƀ/O٩3~MHF|*"ZX!]0kyyw{ |9"p'9&f"%݆~ _6]2d/o9c"%6:cu"{5Ķ-Q~i/{o*]d^Ћ8 {2#R/bG3jʟ(Y>ԥAynߧ}c4*Mo/L?ObbWVC?y½w{[od~y݋m>M++iw6a*#=˞Gˈ~^Ua7u + wj<[r Yӎ?@_D?vܚ,$x }ȼ\Z#dΠ!Sbkk4 ۇo@Pa!EjD@ꇿуJ"Jc,mp`f2jMP$> %(.\h 4vi>A0nĄR-zte3jw(x_As>ld 7{=.`זs o4eJo'U~vi %T&Ę(:W礧 &!:aPx$IR q-8 q6^`%X@pAm fń7p|ޅgo*=}IIJKkdR "PeW_Xzq ;ptܨd ުL[=M~I$C Kvd'\,oNP8 ?Q>`d7nbK kM_RR6CT )[a[*"O*@s@O,Q\`Jy\|Pȅ~,_&0U]PqL>+N`Ŕ3%ʎ2RyX}@DRSK1qn}[?PMD{yz,дNcvξYμCzx!NM]wcfsOq54ϣ[e8j鹐?ïv:aE~eQٮk괛tLx<%utFttT4]-@VŒAѨǐv' oΰd'gǰ!t.pѭY/hP(XVG,;h8%8Rԕo0,$ RYa;k9&%U#eܡA=E[Qd5}o_-ז`V?ij0] Xk)UUZzcxIg|I?vSK9UI 0պ0=γhhbHnoc}D@XAݜ&%iB?/}*2]!:C`;eґѫZJI;:[?ࠖAW$dN4io Xm*޳)Zp~[mzըeWX+ZMn\ sA"HSg5HҚ&eKIbîl!r9Ji!-lQRU\tjQ`w7X:POa cA\^V,no@ (=4/ 榐лRD*dVM˫`fQL(ж{G8L*T'ozPHqR6Q~R[[& XS[dzJQ$=Ci iN6ΉTJ5L𠓅%ɸuZuIW)meTc"?*hyb,rʑz;NBn_RRFu$azNo^\pZIC1,cU('qS:Zt ꓝ;fkhmN+ڃ&o\ a54\7o.Ih[LNPm隤h'*qK!)hf4@c<樂L"&иecǓM嵵,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]LQg!,e ǒ[=KYO\B3F,fEIA,r@Ce?c$b%=A}59`/2JZ\M3C`Ɖ7lU`YpB2rd7ƣ1Q'9 \]hB`æ`Ѭvvߋ1rw5UךzW"LJ˅[/ Mz='gԯ;A+U꓊Ws2nS -!`maEXdkGc" nK~NU>`ho%Yӷ}F$vx?(b?\}~rxJoLZQ{ Óia@zgz'Iac".ĻaJ%b>ZEba!>Q ֈm{ZoOV~awh~m (E&)-dgyx!CSl9XnxT1n bA׀ N/)@@@yŶ漢5l͸,<BoDzQ~au܄9aHjF,4gVsvfDӈU{4[4LSSπwޔ?aeG˃o=Q gb*99E]$o=`)똶upѤFXݏ/^pQLA gEXA@ ߊ5BׁhI?^-co%jWwa O2,6KlS[V9NZM 9R2[N wgUrԢpTh%n L[Ptۄd]yAɤA(ƥ5a (f8u"@\"a;mV[iʤSM:՗*ua{SMT|4 =KBNKagw/+qlƗ8DoޙRjli[HE/k1`=taUќ7!]ayIܼX7$ o` N6?t /kClwk>|V'QCp ҹɘ#`w]y46 zaCX׉'\}Z+40K v>  {QEm;G4R)E޲Ο1G^ mA|D23]?d(0+J ƘC::=v,r ĤǀD^4čCݮ~$.n!$׆Ӌ RN&XA* >_˘l9D\Q拁JdVw}l#Rgd_wZN9X l]sPj['<!3)k}ϢH>KH,ͯr/3jn5 Dzq1 X$6du(5#YBYT % X;;-kТ}΍wF19]5H*f|/S ٰ'FN 6!rwWRQаfx9tkޱ e75FvDњg &y :S_ᏻKk>sB ɹ8u>_*H<&u`f'v|60s\< Ł5@C/jE35b0r[8`P1NX5 cJ}9 EB}HE|mbc98vZpAOZo$1Ȓz3)-`48=D}I2.ր2J7iA%2곑xfYqٗʤV(W M{\X#IqeX`Sk dϋopNAxGj_sÕMܹ$N:1d31y*0Oi2R{ ߩ%QGlQ|%n 'KحacoE=AN( B18jڍE`tX󨜢;Uɜ6%"AdW#$u݅64& ě4|)7}f/wfu3JAj=6A52B~z ŜJ|'9f{Tg,$wLfG[Ş.g(͖S/gx3gfbMFϨo DWIUfٹr2ԝ F%Vm-szhiIVc)%ͥnY/#:M[C:,f][L喧 uMqO:Ek>McEL(@\P˨gMˮӦM>p~K_z$~;‰{9Wxܼ!2(♠m?S&R%%-+$m?_{YS /};|ĕ0>:I ѻ˘Ȥ} 1.+SgU3%O'Ca䡙2$F(N5 ڮ?rE@%%!X47stɫ ?A~Gl(=} gxz>!][iCqJffx )Zwwgs2,O O(+GUXUcngYAyX_>S$:_I#(|X}z_2ݢ/^HdқtiQCz˽7Ḃq" V=h{W^̛|4^4#P̶F/1Q2Y+KF&A>fO]SKR() k{Dk6~WD(BLϴ>_ЊV@(zxĄlbfzP΢ڊ< -spHJHTdyW=wNl;sjQ*l5Ep6a% k+%xªDW(Pr+Jjw&tA)=dmUUI'O @呎ELfA՟).F%wIFX%2_AH}}X"VohV2xaPT oyL{ W{ܿ r% /{4`E7nlE>$g{۽*_Ї|_;uWgz0mB MP!7`GI^bMusL)f֜@M-=br^E7Ds$9G Q}8c]xv;1 /~9E47P{p| =r ^D^&v.?dߥA./0麗8=- yh)ǩ|M$V c 9]6f 2emF:M!{χDrێPJuM )X)d'k`}6}Q+Gz-9 =Ry!ĕ"z0ㄆiol_ ʓG GRX~palRH9 {e?p+ߌVqaam5ulZXx)['ulˡT^}TQaAi H,[$i;) Յ[Ĩ%k7;|HU{Q''J9!*򜫸?hǒEFLg z;؉XR xNl4FN8¯sjW=JPtI1\d]h}ǃJ\{QJ( D,,߄DkFIgYe6]7[qE=KnvҍvGc DP'.QE}LѐDdFs8Qæ%V#7beC1)2cxcq2Ӵ'5fᾅ?7&/N5B](a|Һ%:uCnwFe.adӧVKA>f (6,ywezٺ?70_'+)->4/áalgH\7zZooU6aFRY_{k }w1F7Օtյ?p㿫=ԪZo2ș9T0b EYtTXz9$ D.¨/K'N#;cuٳQ\lェ /I}+ڼm&w6+6lE7ڦ;}1bL) tn[k6l} KZTn嫿?>ܪmn{iwG?w2?Ix"lc Өv7}}S_*.V]HNPxmzat-V.\**-U37QJɨL4le?_Y.#۸__[OOWoil8nn{/1/"|nFy[._z}|'S8j nR%]䦪Prҿ}K m(:w7T~D^uF ӏD\iq}HX *~Mk@Z7oUQl2:ٱ#̗~}qT_I>l"9?B3gk|2mhOߝ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;7/-U{=AHp,cCvEm}GFBTmZ9 Z'f/ !T)ex74[(-.bN狋j.ِ$Qeed"F}Ł$8I܎:N'7[9tF'A!f8h#Wp)PrAW{NDPJ{E:ss]M t6xpi"9܊4^)~=:Zh "C뵋rܶD{o_ H+DIoT֗?&jcMH˱'2Wf*f>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"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~% ft'=s߹ ~4.JyHhyvr\^CU l^|@/U4<5G̓ћM(hгOK!~|M'>87tmBLQ&22/;U~yQGE!MU>]oH`$K+@ɡᷧT~&y*L<Tߥ`n@H<➎Tv7/`ر]ktrdYI=`f ,/S"u 5?>w)ŊVFIUgFEe)($=bj- 9Ry\?R@vx֏rJzpDUy5X\L^Rp9ƵHA[_ظ8bS9X( 6߁&9E+׃ʕܧY|"BV=zLm'z6fy@xὙmpFFbԦvRh-h  P8@%tC)J59,63ɵ1>o SFGspY *uS\vm lدzdrӐ0ThԢ_#[o4-ީdwGd5!:䧶\4]#c/P֋`zv \Uiԭd`>;YNֽud;YJŀwtBDIQZ ú>Z.pPngb[ ev蒇smMrc?߿^TWw).݂F2~su`0D7g"Vuh>LPRQ޼LE`[fo{svs 4maO '7U'm/_W03J *sǽq|~>'eyOt$OMmljuuūsB>ws}>ws}>ws}>ws}>wOX