#!/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=c6d71c10f765451bed282791ccc3f5d5 # 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 D_˃_zw:׏^ \z|I'#+.? /@A 7\j~z[AuGa[Cou Hn4۪~*RJ PeYMIp!i[#b\ԖךiD"1zZSWԉw%1D0zN͠yþvI:1ÁnkWzS3^Ckp XiG$3ӡs靁{)Q;ȧ[\ }FbC /4,fTRk`HIR-dvϵNS. f 9it:䂓32ٲYA?uХp5/yW]Ϟ)C;pgQz8fN&M7yƻ̲?X7,o4zo`$Ųm>w S'ϕf A,B)qu3 &se~1%|ac+ฑ59eR:KVA6F{V9ۉtMf#O?bI˗qK2<?xjǵoϪck~n'xkoF[soVG?OcQ}mo?_ k-]y!+"\y]Urhx]/ÇƩj٣~~/{-%;JGIyj{8stS5.ͷLy6aC0iBG3Vn^p};Prc^<p6C7&2Ї؁' rȼT%8{4i#T\(H,ٯ1l@\qm㟚vuZƄ B ?ss'p0?Χ! \MSn$f6_+i<(A ;f"V܊Rm8F8\p;fZۈh;:C@WlSA}#ސE=)DA[(,b"O-/jbѸS_nP +ZX=j;XkJۅJM$Z1{#0nм~n Q &.zN1ȳdͱQ n-Y~AWD,anxT,]³f|S7)c7LC4RU@ jYEk#]lϿ9P.yo T7|X[vpx3~`Rb'۔t0p,,*Tٯ³o$䍻896-(k\U@~.ZSp~' %쇦Qy5,G{&&Qу4knUm-d:.5-C4 ۝qe1HPYޣ\8LDt^5rHp?l-Nm`ix"K8w@^ƨ~ v AeLnn.Gx8$F@t%v)*W4v [9R>'/ $uS;u`UTQiգb"vcʆIk>Ƕfc͟}vo?ʳ <ڰ?޴_,VSX/R0g.|.^!GVb+VLtz8(RUb"ʐoWAuѠEI gSX|ϟ~\_o?3zk.WNӾ?}šQpDP|vF|fSŇJק>la*lxeǤ(jymwg,iskt{tpgMbtE2F\U&7̣,\ Ioj<;qg3 +"`9D0>aĦDC`8<=D(?"P( !iM>0IԼw! 6wÈk!DcI5`y [r*hS1s)!@MC4"S1ǘ NF,gtS'q'ENjX<,BXR8Hx<$CZW8ʅ uMs'PJI] vŚLo 7U a%OG)ҵ8ZHCsoY̵?9JȘ:[AHn)&*D( yW(ɔLDB[Jh+ R9,Aмe+, T E-U̍IcKSr6OR f3Q&,N4(R$ݒ_PĆ*|#R%sYY%aJ92NʿUd%Ä=ɲ&ez=-fL2X4E=M Fu4B Vw:㫒 罄 2Nӹ4r7@Uv%te<θbSnTٓtBS _tT^z8 9&xOϣH{6Őf8ME'3 9C j#Ɲ47m[c+V80K!% VD`Iud{21(;ғ(ᛃoNJxog-Nm Ȅs#  gth>wh!6Pdyku>tvb,/oP@@۲9xrbbhK 8 яO`o)h1O߮& k5򈅜oWHEc>G%#$C Iжl{lEՔL^ɠUM,JMp #һp7)As~dF>78d^b:% {C>1fa VJ4|&GsڄrBBl%~X!Z qvPlj0qD~ŨwJA!d(!`c"ɀe%X=-V%B)%HpaxN'~#n<ڭ!FB BͬUlk #Mz#i𮧙Wjf*Cx}MJaOI۔1ڔ0JzY<>l~1kStjnA:&)fc}F8k RdrXB]X\C8z.ZVry9 0< v{? m̈ߞEqcW61C/ɍ ;P) GBmŠ/Q5rAr) Q7%.7e_7s*p^ff]ƛFŸ8!G'n%ȯJM0+WjQpv^NNНD1km+i%6{_D/e4.y!e7KЕ++Vá)YZmYw;݊ub jZ9 r'pz l;:fm mR^q%?/B/P""Z aq b\qZ.P:f{YF],W|Mtg[fmjԜ7]O+Vd -;+1B6 r$JL[ׯCԣt@#nԽ&3d8g{׼Z@o&U(6jscSK^˗Hm Ԅ惝N @˺UKG074mF^R@zZnW9b8Ȕipaȷ~>y`-n^Sbx㭠<]=&iMn9QdѴ>i G CHhӰk_w{y'B%i`%ZCRMZ^)Cf=r]E%> 1/*=CЎ? [(z奯{rϛ{s<FO啃=ka:`^ Z6`B' tcӃ4~OUpKgٰ7xcEvv}N! 7]_<3#uFb@Bsʖ&1y.JbA/˺ 7hhDe5Q,Zh&"QxExH&B h/l@pkAET>ÇMKt{Q&avp4M,Z/Zΰh4ky*HɃ6@+ȆdJa:r() t/Li_x5^ / lBѤܗ.` 8^oNIB2$-_e (BN Ƒ,i%twpu!_eMSvpֲ76!Rtx}Z._P[7p/҃b(Fs)_L=XmU˕z%|آ51罦38DbDk4+q[{)ov&]7FDeNnnCl}O.zv?9@ 4~c1sTi|g2K|_,?2WϚL#AJjXzc 16%|2؉B:*#MGK͙9ܶ,32Z٨U*^Q"3ԌU;NZ[u,I+[N8=bD;;i:̚.n l RY/}&$`p[)sQZU 7Pǐ\pjmvք?EjINΏp([j;q9!:O"v/-Q;ۀ0k:HJ)E7T4;w(PҞQ&»AzE`^>1Ɣ3hr<ȁtf}4&x==N6 G!4՛qLNOwg+>8?S{`BFw:l(a ',Hz iO{B6谪8+mk7FŻ>'oJGn-|X}W9pP5D^WA-p"2d (@OJ fm5iq|YG& A`_ 8* a]*!=d8 ;.G@ }x ݘ DH(z)|(B?,* U\*Kk("1gl3}9 BCZ}bN-v1 5_u2iŴFZ/7ޟq䴆!'})2=A?6w1D52S+ql[wt8iPOMc*{ <h.wйj`(K+}jhOK,thD2\=X˛C설D 'JPYeRHTȝ}u;Mf.W^ǫBZYMd p#PLbܨZUH(|TMfz~d뷇Jf9):BEv DzYظa[9D֭'M5mJ`8Jq`:Td 8׾%Ґ.S]Wu<]uXf"4}uqSX ]Jvo¸AKb(/MFUi2z J9I"9I25s [cu fN;q[m#;H Z*U#XfMFM_ᇏ]4+eX/y| ߾Y@kI[GjpǕb;1[lY,w?!}Su)մ5 zjp)/괞ٿ'_&$nin gDɐ/WC' 4(Qm8'Bt5hYmdސ u/d2 w77,茤W̅,s3d=싽 WL[XgոY (tB;CнZEZlMH![跳|7|^3Zu.sL5a  ܃Am׾VvPJLhZz:ͼI-.8 G2vx Ͼg{چbѸj+Gyqْ"A{8MC6$LxImSȴM 0`@&QAUQLꃄ~ ?s%68 F~Q"/@pfJ1<52ਙ> j]uj)ekZֆ7lq9013rH L'&3y°I[G}g7+Tϼ*gW@iE)r_ZAO.lwD8X] P2EGh[cU8+u5{%:1 65&aP˅X4|SW!\wlY 8&ZqA޴8nl,W~  /_DٚGxnBaeD́+?{Ead߉4?3rdqSϗ42%o1/{##hU(~I6PԺ FV.-vDٳP%G"Fꠈ ژȣ o 0"Ф[&aui*ZQfpu\Kᅒ1 Oؽ$5P6IeLw ^k2T =x8 Z7ՖptJ" 0$V_ۤPi,T-QԪ‡Kéض%5ŗX}xY=a[@7٦^9ZBT ցmǍ ɰf'2`_ \"Q35@mnOgtH:9#1h?ؘ4bMyb;)g9lu{CB:0!b@Bj/X7: $a.>PKس:Y:s6&)2㐷)PV0!|FXX0X ġA]pQSﮘ)3J HA <+RE‹ٮ)5J-T&;3")ô(hRH($'pnZӠSJ!i5 kf], ጻ u418=EJj$.P2vd=RzxZԃzllg[#.A4jzks 'LӛSn>9euQo@o)M?r+މ4~xә_P"`ďmoٜ[ۛOw6!o M#џ52ɓJ9lOjYax'iגo?;њ x?M@b,7zh2U9+kdO"澰] ay@~Aupd?7kYBtc_3w;{y7ޢvc>BS*8+xړ?;fZHP346b+$<+720 =%|}i)ԄNh߿Nji^.,--mDfW۝m}+e_"I;PdV0t 9`6FcBj !u2:4(? ߄Y  JE:}m8*towͦPsGyuJ-R,.2khNtew􀏦/Nn'߼9ͨw0N*[8N A2? ͨ`:,>d[9R[6QH.{nlL"G=ЗӦ.[*zf*'MRZA4u,i_t(AZgڡT)gZy2Z2@RJ׊A$bWLv3E又() f&I HA'RhOr@{\l1"W1 g9"ɜQ0z]l#s'QlՉd—d&t=@&qcsq#A-E`XU?tݑbCi48ql4x^W~zx[U|?Tʧgk@o5ӣJ0|H􄥝`T|Q:y*jzQkFRϫIz*urPGj5N4^MJ~^V4j:J@QkgJuPK0",P%7.%G2DjyTm2(l\/wN>6?BRUًR>UZV~ި6P]ӫJ}Oi<(=4UAF//)KPH`W` @d[잻SraإC`HN~x5^hpEq#Iy ,uajߡ9f{^Y3NJǕ}tT[GkrQCB$Qtt9sPG^oTF%p60kT|w].gK?sˏvR?='B{yWnF}ܟ `sNom}KH0aL5T -lyRoWhcbl !TCV3D3nY&4mD@x| 仼ǛNV薾~z3HVzR͡'&pOR-𰙯CBA\EIBӃ :W(5> +NղZzlg} b"A;iM u2;C,_/V}`~oγϾ? m/ q m~]$Bk>eK0áZ?;~ví^^! Ig H䖋q֬6)i82{ yrfhg). wEvH5:P`@|mnPڋ ȼI\[8S "Cks K,P f$GZ]] %e Hz"_[8`DWќT脂 %'':;}G=Nbr^5,l3Ց@KJ)&u/]RtfZ%qt+P. :ALzPR j_szGJh7Fr=r:G}t^ 'M 醺eB$7&OnӧyLl" WLϺ(N0z 5P9 NvSIT,nbuǑo9LG%־GVD{7L#rR2&Ҥ9<3ɹ l8'ZC?C{A67QqF*ԴboT[Sh =1yȲ3CrMn末gX1}P(A,fNүB nE!FKf {` Ԥdu|é+W0˪)ҾJ3' o#mY#8W lLp &BK_0PY(ӽ/~zh4w@ƻQ^9h?$"-NN={OfnBp?yŰʙ5[6:IëEPۑuIeڡ{;6# I\M1Was޽ԚE)WNS(iIXr &hn q2dTA4$P 4eKU=`ZsEw ^Zkt;gUvwm  Jn*TOhL?9աT:W[mbUz^!>{=]<jPtЉDsRAK.S9 '|qp3ݗt!^yur~tWFvxӃИo_.3fBnDNjޞ;&i(m;{b,f2G#9:^? ֽq?| ĔSuZ.f QKsTzhe}%qģ 7D[EJqw)JxP;4Ä>1:%R|GpX Hp`h9Rup5I F@$,G!! ) 1 e6P$ktUN5/;\dh0'&C A&Yr/bPmdJ%v~͖H8{9kƴXega$VX(Y-zfiBK.'Z_P7+Z*'Fyh}E0N@1nLtMgxS-/{J j;'.>hm;p\PfE،-Q#nZ897v]!p##5t p0?3"HΑ%:b$? }F8v^ajt8s4J“ O2~N4 " L 3D߷"U3q Or{Χ-8[s Oz $eG׃>B&& R յc\ c~!tm-iS"je< YWR׉XK _KtSp>d'HTeٹ?Q˔a脹\D\Pn`{@ޢpo5lrrz\9fYH$412C{V]B|&]?78;k̫Nđ;A{?% t& 2*)Suإy`fn5YnP1]P'׆ bMdZȒ~rIU{?zዔ㕵qTZuA Fe,cqBꩳ?tlˣON.eQĴd\ΥUZb"M2#k)}0ڜ+qNd}_$D1./FJI)qV":}0X}I: B/˜z.&43M!:MԧBa?8j†s"")\Krjf:ػ F\3ZubSΚreA7ϒwhaT:<[ tm;Ϯ6L!*->35Q,y'fTLynT{yu NԜ/9K 5~'S+7KAؽl~C 9kį/SԇzBT^WsH@X"jfcƹ1FDh nE8ۗ?r)A9'VXرdVǑrTSK%YaoIDIg>WϚcCГ68zr澢ĄdOVưJXid(<#v7,olΣ[@4'Ak~]|b"qH)cKhLƨT6 Z  ) wY"%B&i a.^ѩ6 Ou=&gN$Q88Hz3&"Ce,NbEIQvk#ϑ덈Y_ncA1ɭ͙`_v;TA6 ?BEG-F"y 8=9&)-We~65 oJ5ڬlUJx wB#^ a Z֭;ܤnx95 Ie'oJGՃ(EORx>bkSRZ$pp| d/eeEՋaS32Rvu|'-OvdlKu "D*Ӭԣr[H Jb4"EݩA]O= Ouu  ȓKs!#S{PyN(z])xN2?ƭ~ N%]vˢ4eh^‹ 9@9 oR0sv)jT?(A>-K׆"kWitr}-![kvƟu*p+$rjozV0jY}ZVP6@-]e\i xMD5IY;`! nu0 %xZjs{>|5~q$IJ(/g u@)&L _M|x=R*:=Mk׭:18LzOӽ-LWx;&<cL#QsSH}Cy@qp휟46דU*gRizF LĞkKE$4msksovm[(_,]&"e#m&$SrO+"݆Ohry ~!;ۼ#c=ejsm;(5&\o}nQ!_當J0?ڂ>~ _0YpDE}pn)b)4HhQEN :k`kJGmN/)jCmXjanR؜U:.vA !kQ~/mO0= &)nj_'|#{Hޚyd: ׈G8NC~r 'Hyz1!,4!?(z (@$7.?WNvw D.,`~kҾf*rvץk9I*;bɕzm$DWQCEvhҍ$$.4U<Ϙ^kLjyD7^4{AI;GD}j2,C'Kh`p0>݈bZ#fw+hZ"!F&#;e]ŷ*$/݄14_x;6`?ιN|-= {N~܇=8J(t0^j4j "#v6:DΝ1oa62WAm-Z+lA |v ݉ פD](mRu 25 )tˠ.|Ɔu ‰̈́=a0jM*5sAY(E8>B a |ո5ۅJ٥Q+jQa[ǩOsS>VvI7pa KW+v{ x'%z%`u#cʲ>|\[ӘF|pG;S5RhɃ (t0NgC`b!Ǽ ð$uѫoEB)WL29 4 N%CJp(5퀩>X5Y\[鏥[]|S@t8ä\r3L yA`UaqAS@LR&Z1x jF7r5_1 4B-fllTB|0ǨiO$ma eT Xq:LŊ@ 3d Gh1m+lا*Ur $#9SK̦9ʔtwnqFSA˵JQ)PG!WO+.ii]6QEEx8u}x1&3Km9 C6vs"'˂j[Ϸp_T⢠LaB娈 d\77;|osz֨wQ4^3h9(WNш, a arع@(."K*wf{,_j ;\D̒HqГl~ K<4:Amda{t{0n#ݿ55׵ OEzR 6JvƓoh*NcUaxC ]!LƕKwj.?ߝh6ТWwVC gjni恠+q߅MMFߕ CqrUI^X(e(#u󽻮'a]R9ḷ\gC2ɢNa-J&5(An:jfv{;yR=U>&hWO S҅ޣ lIh:ޭI8"qw0&>,mQ[GJ`hȎX{tsezHzˡwKGj,u2J rm5AƳ*'Pᔐ w-"+,18ԛzSJV=쫀FK~_C B3G6cޔUaTqfԗzl]O1A30躭5"™LKraq| c޾o)PO;P"逢K eA8*@bFZ ~"WW(2E4{}-rIqb7ҰC5M <声Uj:YňMZO X٧1#ZR3O[ɍ7f&(vUEΙ bN_z?"hzpF|t]>>$^ڽ Ow>\H;۹ j{=h;g+$U:QB @#)ihRowKe5-X5_,?,k{w$#64I<MFh&H\9:8WaCTm<1O{ kǣl +ɂ튪 yj/Ɯ`\㤁^Bx8q4(ȿ˟Dŷ[<`OX8ϣc (VnED96LD+3eyADTP.Kl,`d n! :Cdch8`*a { ^6"DNbx"NZЅL냑j$G42([Ќ!&{&JŰsGHw=Ji>ۡ.Zhcł/?Bxy_tk^(k_#}OT_D@#r`iE Z}d,EIƻ)hGHr,|$E6P+h8(gJi3$)n~+sIvf}098Mu2-CM#Pm ؼw%""Cx1E1a#֢[̖3fN 0NX\QhXZo7I~ OLca?66^y½ˏJ'MReY\ImKlߧ6b KYt[d睠׺KzIϑ:1% f$N Y7e׺H|> 1Pݰ\7D'!DDQĚ U B{4Ukf󔅂q醢/ErX=D1ɳG ྆f?j<<#%g6.:x HyUD9oJimԣˇly(qzxX4X”b&#I{@UZ^;h,,9~;/S,Y4JBQSPNr*ꍄrwGlfY`//HҶ/4%dR6::Z~6.cjr9Zgs;{V'Y !ڹ ݳlr؂H:GIȈI.:]0`4+u9p/d?՜1f,LSǼJgYS!뢴L71¨6!=*ZMY g_x+ &9o5?OId4ꄺIe7Qi;cGݰ9~es){ȓE&x=`yռ-M'4 r/C`q?yx^QKó̂zŖfݢp/OjWu#}zy6]~|,=2DB tFvP-i'leC1Ɯ5ΆhA퐇*I9[^ޙc)3"30TLNo1b%{ Ғg,敲g6Q,mNq7aq^g(Mx"Q;p:L40|jPh [dkH]3:2G-QS6Kƙ]8= qh$64r~K塗^D3nQ"ߞ>0ƏE<%k>v@_â`ːbo2WMEM70p _0+Wh=fT갥"3ǚ[1%PUߞ+u`s@O@H.#~SEr xiVN M95#jۨ.;P_$B4x<o*RlĀV/id %=6sOҔhN)k$9j?wC& E Rj$$v6^*-NYp/xmrӉptp/!U&sڄ2d _8fxC9+Ǻ!I2?'-<aé9QeVvtri/")!#~6E{lm_5w\$[^@!}çE*aLh4r'ئG?b# "~S9a[o7WgSt7t&JokUtV{H契ʻJͩ0 ܺ U-FP>;<Պ_;Ԃg76V9X$c#ñبщ"j^d4rm\V>5q`/KԱ Ԡ2pݟ P\ORys츹٤8>>If]5Ɏ~_}4ϲ YDMRHzU Z:Ȕ)>]7߶ULPFW{}VVTHՒ=aC^R$,r >?c^860 QJ;V8 z\q cSPz?C^ꞕb6nNK*΁BJp{V4=`8DRVpfLZOV{)MR S4C#v8F&liբYXe%|*>.]@4-ӌr-&o(@icKr?8 I)ŒLHWvɣsb%*Ha3}-ԜHqbBtMzdD/'2|#}ʪC}v$q^K'Q_dߵCG}r1Z*wq`'ݖfMd3Nq9ㅦPt!_~cѨXnNNð1mh#3#l^duޙ% iR.YIZDXSSqkHJ~^4DrϜ IڑqNk|w/0l1NắBb""D`TP9pց {u@ۣL[q =Ln&z?~eܛ/QwZn(2l)XX[ QKԇ`V|8$sp'iYs 8bp:n[ $HBo#yKpPCdZ#/~"b86g"q5bzx[-UrZK'kI^g::P٢mx2hYۂYMdSəSbJ7Gk(R]<=T=|Oj78f,J/3r+v:sJni*S/cyΖݷ2ֈsjB\Ht,CSgӁ`r)~{þ"FLCxjRȈfLշ+bH jOa˜';D_Cr5qF^?$6M@Ȭqq(b h8i/_m1-y镑z</Q"UT{:v|*KwMn [N.ya*s)9+N]R,5eV~^O(utZںXΓd}"\ Xfͧ;˄˵gS^5K'W#AxӠ-1㗩gd4Ā`q8{p8)"XdJBM@b}e1i6ّ ?j.Ͻ)'gXmC#cPN2cM/{\5܁w*tS0{JJPqͤ櫆;ֱa_l3gGѤ(i9SYʂ+=05 5"BtAiW ]ӝM?0.i=os 7:l]+us Sҿ駦Q fD|(fÿ\ LCPkWM+Fs tεZSs }XC :GٕUJJzY]BA Ԋg4C{H PuMaGֹ[aµFf.(΂qwIz2aƂ`L!|=0* (&0g' ȍ,<b;1BH1rL17L`P7Kፁ#KA0 F Bo) jl`HHb3Ra/FMg+Vm~hZZ}&ўã+N܈n9e Qtd2I`mmd//Gfs¥>CI)H[xusM9M0%m":uZS&'GD9S,${h:A4At"&Kˠѷt|-Dx>/*)DTW4_yG,Zc/Kў{ⳑV:tM)CfsslT68۾֍٨8%IOv h=-* 1#ĪAŢ.B@XVNS|@9L[`6b^%BA+N{q^U8iC!}2%L1+MN2=a`k--U爁E튷D]Y@3bZ}T7,ŠDHCGf{ I8¸SHW_Nޣp"1RwމV?&~B-ϱӴx ӡdcʲKTKټجwϜm7m(6/NjͰpi%]^5 sYvb]@ FpwQ}++CK8dsdTX/GML$p&! ){,m+}]6`I8.Y"׽moZX+C6&{"le(giWb\u.hӯ1CB9!V\! (\ E>I6 $ хI/m !8bwDmS6a\^‹rGW %3Lc]@iq[Gkg+x^_rr]j6= C79ID0slX'v`,zwCS{pn4ݲHj:ekڛ:yrJ`Q>>p ~Hn&žUŖsn=[x=ω!jQ FAxf݄^,HW*-v ?[yyziIs]6=|q^oO:!`1=Ү߈b~RGCJMe,&1aD؂ TO*ث`^DTn 鋙9.Uz;~]x?MƤŎ8l]p%z)_7wRFǢܴхX܏Η]GIsэlB6MI PKq_?`dgeW.zX2yWkП%:t.:O=+Z4G+?pј8^?TV: ' &r#\X}Y!{Nep$̩6-A6Ybo`@Lw/˜a> \xoPYPLD1ƲT$hwHZ)JRb$BT"o\`)*s3Gp, 5V2zW&LG-A럤:^Zf:Jpk Q/6"9K |&F.0(ՠX] hӽD/,Ec mGsWql!L~FwZiQ 1<a5,bȫ@is0dvQV}VL A߿4Y'?AMX4WfKJ>SRDj>@=Wh}ٱ{í*Z\MB7$"pv Mp8DMduҶt DW&A\"7ouH& y빈NPфw:7I*\?ԵHk&Cmy BO9 qO僴A$ ] q|Ѓ׺S:f. GX@;s#-[B=i`f>C /um`Mh:W-u04zh]j^,l\d{횉N Y}z^oQ>G/a4ܙM%6IN2/5ߟ{(6 R6&PlȖY$Fh?B,a5V#D ݌7T 邅18Īxf0$2P^skJ ߤŤAC@z0t=$b&S Eoq"4֭^IMgWbOܶ{Ӱ) 㓨jl[`Q^esC?{{%E؃!z䷰*Q |pܝ<ѣp3HU-  [V pIjyql:@zgE }gU%Fq}d1TD[MUxG$iW,|:^n__4G|!0z9dQdʼn ,™ SrhbXnOBdS E=ʳjFo 3guI_(p+]Щ(MjIe6\ZƓ %'#=_t}L4h+;l@ɔEC `0%`Diũ9:G.(5Ts,'(ًM@Zzy>=E |^H`M:Vֆh$&-qgf5hYqh&L#8\Ϋ@!vR"E{rFbr]K"k9.v[>PkkϋH\fcz16hExp࿦31G kLM vVbO$(`k9n ,ዷuh:qø0/*6%-$'CjiƤh3X@ D<^\BKk52rC.a0?ab;:=xN=ʞhDG 3ӈh7hpnX>̆ѣ,Ťz@%|z@@wLң;K=Lbim2A4T)O+ N8,%(oҰ\z\Ôy%hJ>aW\$DX %m+4<=3tEgfe:Z&&{Aw>iu6hDKn ?EB םvV6gGJiG=x`!9|Hc' LIv̢-. wik/Q@تXl T. ORYTw"2R >yHqY$~opI@3+0c|oD̞=S.9]M2Jsfi_zE"H~/f ВGSftp}-L_=".Uq}EI?7Bo LbrP9)EVGq)XZO#J'7oe ("4/S2&dnt.d W\^DвN0J5vZ_qb{1[= zN\DI0'yg\oIpԒc%C4uZ^?@7K>b5E֘&AȾ$cbjbwE`2`%Li :vhUБz]'^WG@Cڿ5EX8GceNbv&o_](+gdW~!rTOIbM8O1wd9D'jz(iPMh}0JڊD vٝ8D r8=eA"! [:5zIۗh4 J)l]GޔDf^ׁ\ Y )5l$IGǦ1V HO.ţ1ֆӑj./q=dN/IW؇E3$dmRwQ f/ Z9|U@Ht:WT08RȥZa8lw[nV#oqVKc9}1᲋x X)F˘P] wB80<5b?k5b nGASELQP:,fN\I]mܥ(' .n,zJ 8BEϕZ"t|:in.-0*Kۆv4nR9K79ժ-sݦ<*W#D?Ȋ&>GYyJ9á.nHi9H2~H6 pܺ |e"gTD]"nB^~?^z)CtNc:%i]Iz2UWuɞr| QR8Bfy(x?&@/Yy/^ϔ^s[3]E췌[xB|e;]#3HGG@nXhT^hs@"΢8g[iw9 /刉톮 . xu+N[gȆKH1tǓ׌C y tӬ204 x[R @a(DS7%.}%T},Gz$ڲ)y~@sZJS ms*EmLc7I/V=fCT[!&AW< OiZe[p#O @j):c 7X JmyɒXf-cQL8f~Mg(NYh, O`r$^,Mb [8q!x_cM4A$AU 2jŤu@f4Z;䓔E4hal*s/c 8fO']:5+K&N!Һ)Qd |J+ǧf/Kxj<)>pI?Mgj@XWj7(I-fOБj!i~_;O B G AfJE$ ^ el*8Iexj>aRJ!-֚>%?#G9p"ٌ@ a VFm&z\n`̬NBeoz6BP+J))|zP DP+ h:ciu.]˳F^aKD%J pܴ9e "cF͋^ew H7f_)i]6= ڊ xXEoK.2iYy ux*/֌=;[Q|w*ʰ_@~#CН§P(8d[mE 1:?0]MKHuW?^^>fVd7m|G|~x6 kZ0.Zu6ʖ)F)EEIU|NHmԂN7HB#y=Dc@Ϙ 6qȚteM})yM#s4P^j}iX2wh(1Q^*HK i5F=uܘǠۯQAA$#y С"z 0δNcN,}Zz`?$зnڕ7_nIХ8l ڏ$FQK!paOS8dҁbL6nEdh=|F()hP'9Ӭsu꧇ `h* S6ʁz^VT}uC>=:trOO8i,Pw^NޫʻZ^ vZQzR>:?+hB6qy8^QJ~^Vaq֠:+QkgTK#^eNTץ#ۓJ 'NU8K/*MZ8' CR䗵M?Ĉڗ7TQ&B 8\kk_Mg'O.y)VmX:w_ deo c_=e^s"hX]x`ƴZZ &5J?bJ1>.v6 P8 6nc4_LjUP V{5NGZyI{h >Q[wՆS ȩdW$ӿ# ؋H);-.ƒv{̵fFi[*(-|k:,&1z:]->)Aznzl=FI[3muZnBLdg[YnK pcw̄zHྮa!-Qfx P(rbaϴzrx XہP 7tNGҥtjYP!2]D⸪AŁ c|3KzѤEsXj W1= re~8%s𒌧s6ܲ"p]8 o  hwm:la;_ί}׾k{khL%r}SAp[5)^Eq Aq!a1[2>IsmM|8?|QnחǏ#7oalݾ\_=lI!Ld \եޒ9`!Ft-b%p7PGT/̟Isس̢Y&J;Y ̴S3\pcdR K^C_eB%D8Qo\@]GͿ$,~Y.2X1x}Y  S#mzr-_BL.G%^ ?T1;+َwC>ryij/ndQ)Ly&+)Š$kфq{&"|G8????????????????nev0