#!/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 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 '/^isgx$/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=93 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=a42a15f2adc38f43a0fc1665c690b2ee # 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 source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 ^85QYmԟUkZHugA,]kvbDZȶO.W-Ǯ|NG\QwMJqiykMVHt$+&r Z&d LX q\Yd2\e,|d:k˄ F4ŲgplA a ddr"#4pL f|hEYcW -!x^^(Ԙւ DBBQsZ` BZPC>qBks/{x.}|0*POgSTY L4z'w$ Xn[m lLzr_FP(=Hl. 3eP&/%hd( $QE0\żtѓ/~Gy/+R &+ `1cΓF\fj%9iwH|ȁ0u.P(X1_ ZޡeC̜;=f2:vΖn3ZP:#y*as0P X@O?SB5q1!tS11)Q JIjq\&I J-i=&wo:mZ3r# P^p_5k] *aH,![ِU+}NΔŰCiPۣB@0t\ .4!2wV,3HA&ؑ XtuA)E)-,Ssʔq\}M]JdH4i0+Fq1gxrVP.:`EL.M]p5HFt,ѻNوs$H 3sfyNʍ$*X1x<] {Y ,kx%tM9*k[뮫=ә%FH,sJ0 P(Lr29&_sijbed[woo跷 d5T_s^UXQ1ܲX r&wHqtܪ^4=0-VWL+D7Ȁ jdɜ'(ﭓ7Pr;JCVb9@rW=A hb$OS2'̀軫tlDOS73p& <{ 9Zl{GQ}^E] |HU{X9XFL!n=Q+۳f6} s= z"6tS&_Do0L c(ygLl4d{+$zE_cz SaƑ3!ecNuɛ7,Cql H-Z~/@v@D9$2"Î >iޅET'FnQB@ zv ndO0Hgse4S88}|%Hfn iej'%s`XZaj@.c1VuR_YUKw$Τb/WMQ4 r,5Ԕ2/Ih LNT nZM'-B~._hNZZ[#>v+;!RcYZdY,F45 Ax]`lqwԹj5cMfi#fyqOz6֙u,[$WbuͰ))zT} Ԇɜ*3 4nҶeCdiQ' y`$cBsY'`9]_j>d0/P f-S(.|hr剃%acy{St#kDcΨ:clND̼C*IK"2t2' X\,,CK"&332c^C7n(wĒ}p!LO~MV@X/6 BaC HD [-]}3XXKK3&E17W28ҷ<-S)c IjGz^@Z AwT Gђ@ Ll9`>X 翂M_f:Uok_owkwkwkwkwkwkwkwkwow밐9R/O,.CY9}>.#ESK{{z ]>GC> q_zWB"J]Ю[@^J̸11zs3H4A4F3P`!l}:'ɣvTG͏^]o\|眩٩ꉩ$Qhdq48 e^Za{햷^ceOVom-||(rR )HCȉ* ] ÅI^JHnIښUaVx m<%'sI1uo=KX ]&`i業vGihbC_U3'qۀ9G&n-S-8g;'biŢ>gȊzĞ`;sCi]S@wΉ}Jyϫa KZ ;7?"Q+xNun԰IIwkF? CBb9I.ӽ$aT ?%NZ WR}\BCk>n.4nh S ܄EqɍX\bRGt M-rnV 39Ƞ;0OaQϋ = fƈ4 YSS6eHRZH2w6ҁ ]r0KsGnɍ~mu7RS[ 1ӛѹqxu.(k7njjҾmr#Kܸ4'K>YRkLbaQ3^άzQn=$)S*KCƼ nSOzer6f۪&Ѣ`?MuwF}1nb|{Bonu(>ťY4dҙ[Fa *ɫ"vS.-a srbs`/# u]Ұozb[3gHjvp `53xAqA^8p3}?bGx+}P ջcvs7gA-o|^ `Fۘtjz\罌jCgWӹG=W/OCĝwv^=Ŀ=XY;sqsZ k/Ier 0-{;czsO~xQLղi_Ar5EY.Œ'!Fpҵ<-"zbmR&I)zI_E`7a~W* \MؕW2 arR$HPxg)#0 3fuׁRuokm {}4S>X;0~$bH7Iܒoa0dy8]pW-&Ms6M n6kVe5xAAQ3Ƽ}<ķ_7d:i`li Q'XLRF6SbNf_ܘ9\UIR'0kn3&Q3"9vD R$:(` S6&6^?@y,o;|;,3oZMg(hِ{f"t9N(,ٞfҧAs!5M~lu޺,?Kyo];˷/ַ.s>v:xX,U-+$=Fr6l?(s~#+ؓ${[3JkV^\lo{_F)ʸ06݃g0ݳRj߸򬬒{fWŇhUj_&6Jl1P 5d"8dx=J.$"KYfwe=Y}B|꺀 h/8H ?(:I1 (4+cmoHIǻ_ҞNQ‡P`ܦɛ-ٗ 6V]U ei?"[j.0$ twEGN잌Le\~P-<륾KthޟRm9(Joa(j2b,,*vVڬU'$`(p@9쉡Tx)wtM!2[Jɲ }5 Af+yd*!<`7LiǏ䖞3n`&Lb.zf#8 I^MSG6 ŨqtV>ZppFnTX6o \")NuLax4p`K਑ l`m_XPM^ E G`&cst|{X]`r@G$]Q&!)gO[;R@WG3sh}WFy8hi d‹$A ,bdSe֫2O:fj;5P}O}݁aXF6 /e]ZbwVqUZ?q'VVQPgϠ*U?ᄁGEJ尩1Q t/`A]>a8 [&*V(j1s+9h6_ V&%(ũЕ $h?PCƦqpݤmrlgWLh!u~Xj|}?nG  4NͶ/z1G.Pk9rkV-w-M_w \*y,`gAspf䬱ɷ1~({=3]+P;|T1&<ijɫH-WzQ`ֽ_zθ pM͋[_Z U!h L.?wOO~ U62HT wQfǂ nCU0+h"m#ojbmETLK ~٭ v'{G#זEn9`cvCt q5~lu3߰NY[9;g{ ,9X F x cPW0?of&ӣGnS"t b;4`lNg39NP7JIk=F#eݺL=~Ϝa&u( 9Wd~JӍj%<]΄P26>޵2 =rZE7mfO"dq$s Qsx'w_P@X Ŝ\Nznk6=E,*YC Rq&^HLl[k3״N<-m> KIf qɇiA~ ODL.fCŴ,aqPo3D7Sy@8 hwW:VsQUɼIPz|cp)]+~&9`Ț{+utk|\>zd_$+Ԃr+$T*^2$p^:ojA ycŏ6sA%ͲǂBu跏 %B?.O~;8UBD8i4N"{6 ufі _#zU֢>~Dvy/C.4w'|fCdЖ3 S4`'Ʌ܁>5geݳUº}_YTp8¾Y@OHW#(Q2؛!Ҩm@7X l|P 5\.UFȢr2)#$:BU{0!+y>F_UÜܾN*G;/~>;%ףqҮ i:z¯W)q$ϣlpFy 5͔3!r[p|mRk_PI?ʟLI~厎ۗtkf00_Ϊġpk1"-n3:qSChrF q&򴚐KAU'"A si$\8(J6o)z8hH7͘ o>@6-(rU\A)WH Lt؍^eQ/0oJ?d\@wOݴ iST{٪zY1l)L# 򻡾c?̿X om> ķ 6[I{H2ube 0a&S\{s@:}ҪwRztWn﮶'9UkE6 hʓ<;IMKJcpCfN؆ WzwZ.(]>p?q39[><(a{FhwiQ"b SEʫ]~ RZʦVEo66n G.=4̭cԋ FpNnU pvt0@.mw4 SֽRw2r g󴂜6cT @mx3GO_##+q>vdGж$m1pHUϺUk4W~i1T9:!e7ѱ @P U.$NT½ SKAG(A.3KT0Y^c +ި_oЅބ[70+tWIג.]6|l\MZ&Gi.f3`*qs|~0=H>5:pH=8ǧ2cy` uKi GQXGv^捷3`v :P, 4̴ᤑ_^$H+RPH d[-98a+V06qy-ja~$xq3T` GQS [&Gc1X-wxX./TI,K_dG+i;XhJR1T\Yj70,[Qdv"aWjAB=3!A?/&D"['{̛z!pDXQep|K*ދ|9]y&={1T7/Ņ7uyiu V$u5%9@K3!S&yXcmSuwDruz~G2 Zk 9X+_qQW1.r;ahҸc!Evr2-D%9p6*Leβ Vnٷl:Zߚ?tJayI6[teAƷgTeYnY^ 7.=e.E/Qŵ2\ 7?G2'Y#QOcrȗ!WU&[<~}^D$~߾U 8wqKQ7"÷D;2Kh9 "g#H Z#yZ52u3U'lkP*dŽ(E~Y83};{u{I_ëi{3zx5Eeq*@2|~б3 e>MG>#/դm-Ng2Jф9ukYxh88TK!ņdqXB_&LxzY]o䊦/RW [NPPR\? kpw3aTKҜ_-W^6/Í3*mW\`7h(y[p~1H[RDBzg{+_3A0pUA~_qi׃LptE@CrҒH=OC;x'0 { Ni?TB= y-|mM*q5%s. &"N-R%!8XÁ]Jlbh^;ֈVZp^{|yz}G gSKSa_J]6-6"6X@؛qA 6{oFmDlȷ{0!LVL3YɕcRlq;5St(G9e}8K}3ԣqL/Ia&9&_MY 8'kFium3.auhyڜѕ] _Bf`bSE]fFQ:yv~z q~j(PJEHzzBy6/Fۇv^z# ?@`Jg* 2EP(m}Cs< $!˟k 0c_|zFKexxk9z';$~AܣF( ]pV̟ǯέX*w.w*wUܶuc40>[NLtrPT^s$)ӴٺhNeq`Q F&) { ZsKG5C1s̳Y (۹mw#F8*wBT&-KG (QNgc:+sOlB:L0-~:Nm 4dЮ$No]PMkf`*D<-Czr[[rEWdPm:JW\ Z2}K3fgT{OyڗRx%.jdCE; 7Ӱ۰Vj@!ݸ]Z![VKɫRʈ?-KznAq+I>.A?^Y^aM~f3 ?g_JtU+[]j'ѳٗoꟑ=k[.Apn|DxO^Y,Z]/׳*І-h({PV)#φJ !;e\F ڀA%W &I [21xtz/4 A8p9F,HH!X_GplGDB:VMVIdhB3\qr}kL)&1UxЮSP6Tnj H3=ƂdCX|pkM*^1q^p &Uwo'&Tcֻ@+)UpȨ)7ܥUյqFx(rppooAO. QUt.̸tGbs "B+6?RN[P w3tVv 9Zz>Q{-{[/%_=DkgƇVh+n^ST b̠i8(dpU2E YA`/-psaA42^3/ 2|rt@т$EsvfƆ֠ŏNShS|BFp(l.HC oB :@|@ FZM bd6Odn[8.҇ސ]u{Bt3t6z3 KOCD\DB$Pi iԚZ(- ^LfԦxN>NdXS10M~hwЍ`9ڮakCwјE.+*- [YD[l91ARCoɗc91ZzS)Q6n<dZ|꺶g4Sy.w^4P= ^E,ƒ!hLfi2a#  2B`bwfih.{ O|E 6 ʁ5U f!|8DД&[tb˸K&5NliI=vHlcofCp7{L""~ c2  E҈> ;*+|jUn}#~<{2C*HwwmNJ &EAR5GH)s(Wz;x|UThb  x@W4s Ƕvn껇;2{rJ2BKJlRGfJҊG>` ;A^lP׃^%mL>2tC"1FfI,B}C2w h9Nī/S}jֈ$S,oCXAL0 T 7a|"7pI%c`І! Ͽd_:S7AڠXt[KO׻Dm#/W&PXCj2swQ1gӧ5w$m~Acs <Ѳ3dflPjkW O5eyTWXۦ\ czDu1zLG]jd; X瘑<ܦf<tTp] (Y~K}tTB'i'WFCl̡#o064pjNH1D3*ho*Ed4*lצL QjIʊpZ[ȴN[S1kj8`OLd!FM54qZ)h-YH) PӲzW2 Z'ۢy9I5>C 8vN\<-U<;6v߄'!7 qL"Z@ f\nJU#b(iY҂wMڤb)d|{,aൾq=zT5[L?'^U+6\ux4FbݗTJ)F%GPf\CW*q8P7б]2iij=O@,Gn/R2\CN̒yW-꬛L']ZDmOu2iWttenF6-09_Lyb]!f́2a3F=Y$UKkQ#[.8v{75{SOqNٞN{3jiy#j7h0a9;åDF]3rVqD^+O|Ȅ0Q*sҼk~y&юEhjn#A/ a& j6C^%Ԋ^G@ԧ; E.E,&Avދ.ل—Oy;)CޓEfm'SFm-]g߉ 6/Щ=M+ZR:!}Xe<+}VFJt,u2 /kOsuSkd7/}$EćGSxl+l-ՠ"U)MzqeJG6:TWWpl"sX+- jawb5(qkт:omoP(+rLULA``ņˬ+(Sկ(VR޻4H! eEvm"O[{VM M[<~l¤Z*c@_:rnFWpdu^[{=g3kpa-4{vh"6^!F;v 귓pΛs&=>ݧ Aw朢ͭk+s]W%܌kO+sw^sCou^>l]vQ9P.{/ʟa=^EkUB {8>ٍjUT>L]H/UQҡ$i?w<ƿםt&[vbY͢߈/;/~k7O$~?^{ļDh1B=B!ԨE'+Buu9lu'~2(L ^^w6 a ԤQk9E鯺y'{G['G}!+[1@y}(o,7(jɝ6灱Ka7u$v^zy/ "g[eC<z>P>T@tn8.dJ'K9h\Fi Pp WIνm 5*ہM('oJ# o2wGn!E}0fj)Hwc֟(sp3ӧS9CU)| eJx./VQן+ `5F!,Y^f:lQcpTOu=\N!FN P!Q❿moLJGǧ&^#\ >BZ Sn3\0pn;+")^$}Y}#-=d1r1n}/K^rKDe4<}B (O326ȋ 7@uXF?=‚mTM/? O6c'8[ bk̑4w.+F\mF[>yFkuw>Si4yRzY嘀Mh~o02&5brq-@r;{U! u¤EϞE ~DrW|8-fַ+gHYŖ~>z+:gDIWQ Jd*Ǝ¹l5n)꒜bZPt@Z15j=z${ U4ĹmN)5 ϶~C/n=;HV_s(قJ 5( \[s{Ye"!#1+ 6U OުYXA#Sv6sh8RCKs#Lڽ~xdIgP~"B!e.NjrLӄi0Qni%0;`p@fZPvfv2 `X1px 'u~$7g3ߙw;8w-{vH\-)]Ñ5ۭ-4RV׵E&WdPRIIeQU%^K"~v P2'(U$0$9vH"JQouaaY U\ x-jwP|xhΚ85Nw[1׻LiS&i~!H1e1諸qQR _]t1z,+Կ"xmƘ7Ȧ`@|IPvQ*:z)UB>OF|'N FB4$sxA 4.LF)() d-Lxhuf6ЖӗϿi#XnѧQeJyu28F34DGpcTa }HT p Ni9)1g%7pp3aUgvՑAfr1OZ.ݥsNfhe/yJN:4Jz΄q7  ^VudN}OZfU}D`Y_!0(PV:]xkӃLDʯ\eΎ>Ȥdl"7PSRj%1 Cr{]E2]K~4(GCM]$w N3%t]%nUɢVyr)fjڏB'yb-(BO\,UrNVB[l[uA}B\=ED*L3`YPV`bRtp8L%&64 9#|{+!i7D葷dv+t+$Z1y~ 3o-\|\2\pH[U>HYǚG06Z}u)/#v[{ ^2ꤥ2:F-ZUCz1?'oIB8F<(PRqSj3װHeкHdR&6G+UNVqC37u;ZmZIW%+t9h١) saji >ȕ){/)/DN،wb1 )v,_: Of p[, Q@:K u Rf0% -V=ee5W @Mm!_TpAx!Sp @`"SPt4H8uy{kM:،5z9)A"ϜȠԕ>`mq^Vx g- KK}A[:uU2כySc#Hm|o*4ԩg0 }|jciWs%NPh5\᱿VQP w= v93{OV<%ENl8~.G̑{wF!< 6DcNaMb!"·h)fdӂg梏My3nOW\I ֶ1*cӿnD^7%1"/FgÉ %ČCH$|߸_TwvAGubW(􃡰=!LvꢗwSD{Fs{,=f8|nRflrBD­RnꙐ=ޙE&+./[T g*M>W&9]\U~:yoՒ"2ͬ} ]|ζFl1ږz, rn3w ORsɜ>VD_s l|QAǧG&/Z(>a?ɍ,rV}=0"K =qa}r 1&/ϰHӝX_& ̔&dꕳvZ$ctx>z04-N&eK*FK:ƛH({X'-Hg Q)CkO W-'"$\B3eE, @ R؈.P*JA.RpSo^(AiZAqڣE֐u%c׸Y#1èE/Kt~[+1TܠSq'dYC+Co{|q`Hhz2筑Ið')x9=Uq \A%#_!*27ӷ))0MΜMOȯr?y}^*KhRɍ~q| <:>\*=qcq R%p;/xC`zTۜt76./(hWB.lgPx{>}RjXuɥ㣌)ǔ(Ɛ-"M3^d*ٞk ?Zվ_O)=Y_[?93f3K0,3K sj!/ x*9 |Pl)b#F hˇ3w11$"pk aN.(BDic*KnT7%.=6fZ\72%fGK1]I*b>ȃj0JMŒ0"J@DU{|o>S<"H]rU>.2C̒qj$^V bb`b# {cwG!Ǘc"],bKL(qo2t}f1s\b3]8Aq|~6(ɡCw{13 :kS ˜U^dlL]tĖSS"| Af2eT]u,' 5# 6QpPXQߌsa>wuycCfl~U.Z Pժ\cQP bC݄LpjBw;}J>0?hP7x\nLw@Me^ ^ݨ9[F24 M2_h#wS4813S|k!qk!#:VYOÁ?&Ӳ|1{(I]P͐j•)3 L0`Y?T+2 g^P=CP?5_ąIfN$jo+ӑ-KG#(˦IRs|@5~1s?;z=?߅H4UnFpL#lRXo60#/DadT$x/Vf^'J]Al#a2YDNda 0tp\&H9_o68VetQ.as%4H'#'ݻ;GkXRTˁ"hixp7:`8Zi.'[WK [maWVns?U{O AzLZ!}6?(蚞M`%IǪ:z*,֨b"^}&(ܕt52[<)eT67  d}p+Na%l3bSN1H{*["s3nr`evFns!*URifڮ9.0f:Y=3<> HB(@%4.,kᣬ-#>_[@dhz K:LP'=۬ư7=t7&@\-5٨9&o2`IcBC_ n#` EA٫×'T #VO`$tĈr,dXRbTYѴZZEky]).~mEtᐷ&%Fm(Y(e9),DtԽJN$ + n^Еׅk4ƃa2! %qYfn@/kWM>d.R }G-W8s"8M(^:Q<=Љ lkNX_d}u-~g3ߙw;yμ~g^^ɰ@%fچ^z^<<@Avr/^S>!L9[F wh+j`!IHv:T 0E6Ԑe_QM(6ĨG2JgOXJQRp@S VUړ;E;Ҹ$$:8voXϻω5HgESј<j_]OWQ/dwtWIX aW08WL w1H~Y0hhi>qҎTֶR[vsx(Wm\WZ޼eٕ.ސinJ^u妟1J$yt'W/nJ;#a6vP!Zpк:D$F7;h"r((@ɒS+[?&W#q ,>U( OL~aR(! sRܳp9cWE-ڹhCwqmz'P⊛R.t w[i7WnoQ)˒#xQ eO/{㥊˃SZvjg<=2Gs%8dkGTNjӐXў&9Q5ECҊKlu%me+m7u*I.G@xN+~c|'62mbK+Eʡe31C{˔aTnzGt|[c.`:ѨEF mсQPb=?1߁6`f(x^&RԱ}6++f_uM*UXp l\C^ml"/\խA91mFA_ZW̋/uP.?,[˝f%.W^ 6ɒ4._[fNMZ.7Sb+wíWpi܆"Xs5:U#\F'ވ;B$2{rI.5ER=RC$Fr:jEAڏn'Jy6{NrY+? cthHP{S(I6ouF~,^ èЫ5:{?3l ZpkLOkvJjՆ_)WY?x>;`]Ndx]~X~h<68"~N&Ţ&Fu܃|zh[ӗ}~À/uxzx/N }8;=_~<ޓ/szxOnN89='[\.`)s}Wi[~OS擒4{Usw㓭60%~L>-O)ve9.>Ύ_nsӲ7v4$h/E;`|_zD!2V׭r[(msOOpADzb]n L-蟍15" %z ><P@J)/k`J`w<\Z\\*Cejwþ#\3Lay5עٳL^3yy&/噼|'y1R`3~Wi`9FK7wp_oSF[8$rG)T{v<?oskȒ-Ha`O_A˹8)Mno힐'9Hdr!,rLptPb8UӞ E3=Z=`i@Ŭ!>]E ;:]PFKk"\,Ҷ1b=a+S\b2snK"}ˣVFuۙNZ(Q+kP+B]/sߋz\#Ur节d%ׯ^ni,<&q.J،V~: uӵ[R8͹\|$ԴljûZPvr9\Gm({S̮<~f?g3~f?g3~f?7q0