From f7d78289ee5fc596ff69c22d37d3c3f6787ebf94 Mon Sep 17 00:00:00 2001 From: Geoffroy Van Cutsem Date: Wed, 4 Jul 2018 00:43:39 +0200 Subject: [PATCH] Documentation: add pictures to Trusty documentation A couple of diagram were written using text characters. This commit changes that to use pictures instead. Signed-off-by: Geoffroy Van Cutsem --- doc/developer-guides/images/ept-hierarchy.png | Bin 0 -> 46233 bytes doc/developer-guides/images/trusty-arch.png | Bin 0 -> 18058 bytes doc/developer-guides/trusty.rst | 59 ++---------------- hypervisor/include/common/hypercall.h | 11 ++-- 4 files changed, 12 insertions(+), 58 deletions(-) create mode 100644 doc/developer-guides/images/ept-hierarchy.png create mode 100644 doc/developer-guides/images/trusty-arch.png diff --git a/doc/developer-guides/images/ept-hierarchy.png b/doc/developer-guides/images/ept-hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..333c8e3abb5927c21e13225ad54ca42371628e69 GIT binary patch literal 46233 zcmeFZ30P8Tyg1xUQ%yPL%rxmti%vD=%$PcD8Y0;4G^WOHh$xg+Y9?r?sDPxYM?@h7B=-Norn`OjyZ8UU_kQ2=J@>mlk8<8~-uJg} z@9#Z$c}Jk%>{;_?O_?%f_O{IwR+PZ#G<1a+y^C9&H?y< zDEt#9f%m*=K%u&N|L&@&{M?7P&O^VF4UR-m8`t9s$&WIyci8qn`)(nY21F-Z@cD{a z&b@f=;Z{<4)pNl?a?7m;Iclx06VP7pp83Q2Bdy|h4{KWQu^N`|yA+%E^t_Lq|A_>> z(NgnDv~WxG32MVHAy;lbenBg|@oQ-6k{$S#KJ})v?5?*%Oy(I^#MLjq`;pVGJo6Xb zJur%NrRO6;El+A1-4CYUpi|?njC+~^`w$#E!RrkK*KNIeSGEXh0E7RXR@BYI+@>A)I97Q zh<~U2pd8maLc?;3UlwtjzjE?`9=U8ccmC=8$|AM~}7By4eI?7$$EDC;!@p9oFHYj{`BdsL48@>axoJemc3* zY8@H3c37*5z!Ujrq)&9UWJ{sav9=Wyb6w@Z~~6ATBr_ zM_~*Td3WV-K*RK=5ATv$v_1kE?t0}yvX?Lu2_-Y%@gj@@kaBZV{~UYcaX4oAW4<{3w2hl$O6 z$rT6;?-^x!DR0EVtAq$0XQ72cYNx=y&J6M;TE^AbiAr;xP7(KKFNV2_pN9y=mO7NX;BEXiTQLK_~Iw;jv~r=O+kKpQ5|?pq@eM zrjZ29K^9s>XC?;vb9TQtLkpxqyUcu1iNZzTW;f!Hz_Gj@{j6$5!7UDTdoz{ZbYR4= zJsiCGd34yO$?-i^)%=!&B2jBOAb;Y(f!8qv!lOTwC{DIt{V%xRUap|QtxqU{b+0Ns zJL7d7CNJ9eN$0~vHd1m`RWcw(g%{Bhm#pw;u@TVWIkiWnwIiO2TrgsoRW;#*=vbmy zJ!0@dI2?hjJHcU;L!<@y0qVH@sR&xQ2wagjgy0RG5c-hte(@Y)Noo8WGJ6_NVR=KD zNLZKYD308YqEYnqHOH*WaXFDm!zPnlt-frG8P`0g8LdlJh_%#XBB|vff|qEV$fg|a z*2aRWaGA>!PY5#OX5;k2a6cF2_hcIB1@rl(o_GN)UxuuQan0gJMvAfegbpWvRg{Zb z8@fiU<;L!GeMIMYc50__XF_sxptp7Q5O^Nl~9fZoxvAs+Y?l7UgF{a*GdHj?JI_HRJ#)Z^lo!XZ#d{aBM zi+l5%?~PVD#Zfs2+Zoo)j-C!Uv#9*HyVNk}iUd*cBZA1WSh2G+9!m(TJdPQuI#8bG z6gP+Cl#WQRWt1w^wOeuzi`pN>Yw|Fi+S8owc*^;nrs#9pKtIgy3WX!Y@Gq`T?>k<<~$;J*UQ1&vdHez=^Q=-SFAYssxv7A8<5y>P}HTJgGB`V zkQ?)caY8WPq6k1iYkCfe+W#u~2v9$$F)>n*2M0jU`Lyas#Yn=88pi#r&0Z%&Wf9jR zdJ65c9dQKZroq3-XtmsY^a3F|w)SXLf=2p=x;8CBwFq`x7@bj~AnE;-ab5QQ zp{A=24iA4hEG$sn0%?XB!afbol?+va_wqg1SL>XD(z(Im0&5yqyk<_K4>&6s79sLG zluq~a)mrUKn(Z&%n^D`XOooXVH0nh)BnFBvK;+L;@1(@=!NtUclZi)NP>nO2P{Fbo zy2_VeGMyF9;PdVmK^-Q1Myg~yV^Cn2HWK9={i1?ukp$M}o5gYljW?nbTcI#gXp{1% zh4YN6&qz5NI@R|@=F17|9#>jr?}Bnkf~wJwl6ql*IIvljP?}{q_g=P+qr|zB%OcVi zUF%|~DnwGEei6nP!C{mT5{Lr5{vF*zTssxeoqU%Dl6=PcK>UJ5sjj=olI>^p={h}= zTt+Nrmvp@X^@;V|Fy|B))rr8YrIsp|+R&-?bgCDr44TUstg6!Dj>DiVXu2Ki#I3TS z5Z4hsBT;I-%oE*HRvCp?D}Waxh9?s-&;Ax<)@Z^-v**O=1WnDXL~gZ+9@9}fr|X@( zb&Kj7Fi7ezz+`(m9A)n(;<~PaSP^kA@Kq~l#lT2H3USHfd(DvxUor|mn;ji?9zmlw z9UB?b4CTA>Cl^MDpq<)GPv$dQv|SCNh-;k(2D2m^-HS#N{BuPIZNcpaP>WSVSHN%w z4;R=>um*%$tWf`75YFKAyct~Esl``Cy#%Ruuj=zbWCnF&ur&n@2wIiwdpseS#=igy zl4t>w{3$S(jWY)^X(Utx%|96?dmz#kD*&2hLa!))QeF%k0i7Y{gnE7#79k#tGSY!M zYQ3^*?_hGO50*f6&$UT5m9Z`;Yg)Hw3PQH8Q$324TG1C$Q`ibidiU`Ge*eTRafTSj z?7_e4Flp;()m;OOl=BeI%Vu%J1P#+p<1>ECPCC7+q*QHB4dSlLP8u6UMb{JqW`s(Q z88sA%GaCD!tbJ}iU2XjVPa0F=5LweIoSa(Ohpmj{F#D8a&X&0 zlw&@0{Pz!|Q!F>#aMG7I*jOP}o(8SRnppQXMZN*h`&UTf70+|MVq|FE?p_A;F7~Im z{dt_6U0Q}L!Yb*EdYMk?iG6osRf$_uV4k@VkA)#XBO|!MhI~ld z7zlgjqCceC7H`DTi?(%qmw4{$pE>XqM_G$(@d!0?O0>(yChj~UXx;=F;e6TVtzMnl z-8S>SVdM1UBU203yv^wKK^-f-7A~+qCGuV104%aF{APlZNq=s0&;=t^x*oiBeXf8M zykLICFC+Ti5d%_SM-ntw`%m70aNyr2R<}?Wg^LoAIV@P4^KYTQu@nZV&%5G!wOjWs ztVnw-yg(XX#2UmBqPSZ)wgkC)#GBItCZd#>Rz|U6#PF3Z7qlphy&+|;;3Kd=a(>4! zGQHS#Wj)?$VG$x=(GY`{EK|PIV9n?F_VJ=RQ8}fD;rm!URjN(vVSwzJV`q2&07{&O zS0&1f_R}YGKnZ*L=xb2o;^{bP^kGrGqf-)C0U}LpHxVl9SIIofh7m&qSjTu0WThjY zPo{{PKX<*n?Sx^E~LR=5PU#WWOY3w0X-ZTXllH=*SD$| zZ$BMsHWhXRO<2!Qs3K6U@ww13YtJHvrqZnTSB_{*8mc)Xl5*c$%g< z>e$Nwv&ABVdU(o}&*SfyF_75{B)k^+9a*_FdLj#E&4bRi<^3&nzqrSCoB zs$}1it6uX4Q_jdn7(xi{-XTFn!V+Ap>Dlo(s5zP*qX7g|VjD%O;+Xe~q_YuE-mdli z=~&Me~|M|6rHz*a*+pz5&HU}1|-lMB@`Ftp`p z$m!n|P@_nAK&tBq9XnwZew{>}*aP^qYNc>u6pB%K`dOk2cZ$aB@ z=d05xP8+-)Wcz+U+Z%QcwPUr7&rgeoG+$P2Xa+^qBL61te2)HnYn~9qyjK1HJfM9M z-h?5OQ0QoSqqpl#Irc}d{nn*OdJrwvmpncVidW~-V~D8v+N1g^&~R_46Q$^uAg*9LO7DvUk#rzP+6fI6^7y5yzNM z3FQn1FQ1StBW)AQ9ewX5+tX-4Wt9>`XqektVkHYg2S*-9_k^5v-UVE}_Z! zZ1FPFty&a4^4Tw?!gAbM)S@-IUK|5MY@RSq+!e~JN`M%>1}O4ZsZ(Dj==_3=rF5S0 zmYP|4@4bxi;e6|*ALURCL~N)H9bO#|xD_59MQ#`PuQ22f_v6_6s}$ z9}C3ydEYYJnRY*cyzI9f#ItZIk|Z`vZwI786M1Ax7h? za<`fPSbg-R{cqBz1;WI#R7Fu>6>N6p;hMYIp0{87dcB$bxlBG68c$L316V@B<ZSj>;c*uVBj!2rq=kaJrO=t}Ih})UaQ7|L@-B z`{H-5D5lvrL>7w8s9Q`#ZbiF^n9U5i0Yzyhp$XLLn0qddnBxb z2cg9KzD!#p$HgEktlfuCz1sqvUB4vnzVkska}!-C|Dk0vL=I^-2OyIL+lS&nid5Md zv=-?qxTE+E{$p-=<<-x##sr}Xrs z1tOP^pg}c9)w*XL$J3GQRcsg}SMp@8)tFqfhk^>`5=KWDM#A%m;PPvM9<7f8dA&r; z6K#@CbSwoP+9SsjkFmZCA;(VjuKB46Dt(cN#-P{26ye$Sj!rxS?ZnM#hg0RPGW-mfV01iKfUhqMMkvS>t&0xoc^eeMJQ+_^z@uaU*WVm4hb2Jx!WOK@X6IN*Sg}SV6 z0HEtWz;%>~C($3WLr!Z<145?$n&%wJej#AVK}jt~Db0wh?R zk~*xvH6KJjq|@Wt5WTNq>FO8VnYsQx&L4!Lkv98jiH07H-osR77Bi0$l(g*q*dXT^ zuh$lH8?{0V3LEH!gjHsqiXcKBr+kE@v6ZV6vwa`>V*9GzI228loicPEj){v@&aZl| zCRlEh?i~|+ZW?U^T<9@BYao)b@%sGMW__g27;(~}&FjKyUF}Fgcu1bVLrn>Ori+f# zBl9v;*Ey%Y?2{1J4XNjlR?OGvcY^ZYKy#kB@w&>U@UDiesPxE|k(1p<(Hw{VNgqrvXI&YxLVlrs~jh=V`Zrw3gxBD`L zMYLbd(dyeSjHc8&r*1{lICDI? z`h7v+yYwxG&nE=ZMD-xQ%L&TbFm5@)vVDy-?+`f4b4dL-&Q`nn7pXAj&uhwu)YW~^ zjb8h%z*Up-VEWO3EwqT<^eyM%NY(eo(4d^mH|^MSaDk1E-LyzqR-T{Lr5>;b^dUmz6B7*aOU6$aIIdD>qIX938K)J=fJozNpn7e~;kK4WuvkgfwLv;$= zgZAkfxMZx(3AdR*J%Jma)e7tfT{BN0Di9`BgZHZ(QNV^I8Tm6uPVVm?vloKyyRjW@6;n$#HeCHbGqrzXac;X(R{8Mi&{BS z?$-0aqAwv@S1$E!6@?4LLuMHVZUhXpPslo0=V!%~nNIC*8 z8lTXklQrxG$-S2Cr%!zoSQ{1B%zOj5ws!#TEgfAir9fSHJ7xPwS0zmMUOkt<{WF`O z44WBpYWFZq;Mq1EC3~FOrGF)~I zp~V}OMJ0QT)<@0HupKXnKLg7*OXV7NVwXRSbtP#I{S4G!2HaMGR%X9fqyNp2m`#BHYRf?Q`8H2>-ulTShtz8{czXi;D%?w>e=u2uofuL(8IryypoY{t^)|N_ zwg51j2qY~)0hj_e(CBw;ejcu2LzHmdhq_o#TmKZ?-H^18C-4YM z%HT)((dYyaEdB1qG=T&@>(g6f(9FHWCQdaA9({jwP zG&t=8ul%j$`U9)D#9*8?qZ?4Bzt@wEi^@nu-}DtghMn^JeM}=SWYBW#rfk?U9~*my z(1XRUzlIBqy3K=_9nmH;<4U%#bqX<39YJM>@Dlg?+lW=8ob&i?pK96+xZO; zXxh+n3KJ(@)FcF?fxf<0uI0Tbp-TI@7p!v1Qx)c0bI7f>9Tv^2V)RL!T>TyC*2B_e z7+Q>CozZ9Y-y-C?Xz3r2gttQ9^A2e)w2%45?vv1grA|&`I4VZlpzgGH~4m zxZup+Qdi9+P(S;dVA))Q&(wcFu#*7STG`gaFh~-?rb|8bu0{`(%|8ogas_l+?4l3X z_b%N|m*orm=VfE8Oj(LQOddF-UiCt!UvsBPjsbTSLAzrcG*W{E97dNS^EdCpfG;u=F!?)|AdRg-ao(q_KClmPb(%l539WS5nlpdH=vRej*_EB(%hlzz?v9t>0&q8ac1R8GMn4TQb^87&v~gtQReuGg z=S@XBfrwS7@orJbC*~5u^5zkg-eSJ@`%U)l zje2R*u$u2Sr0#qCnypfItr@-G6dESjM2mcJN03^2Ul0R78d0K^WJ}^|0%2Y@imC-E z$xfj?U_ip3`e)?)dxM|L1-ZVMg)*S(EWO~=LXZ#ePJGb?xTxJ{(Y1GZ1b2G^_1Xm6 zM}zn52F6=}uH&>O;i%d=644WQh5{DP(uhD-CK8!O;NGA}8@~e#bDBM`S)|<{q;o#<#Dk>Keh4w$VK95Znb3aCH_*<9C32dW>}E-tQd)2d>-&@s|mX8qe?x zmQAc95U<9qNjpEG@01^3IAc^@B5bwopby)qEE9k`X502Vosu?v%9Q$kXYRCieaf&8 z^?7*O))!}3)dOGL!Z(Gq;rkb2*8DpCy4r9Z^Of+y_v`tJP5hPH3l2?zFzq4rzg@fX zS${RWe_`Ffm^3$AEfflMtW^8sCl=7@$o88d#87_^fhW(X+3ml{X`6~I&1dC?O z&+PDyVck^}kLl^ra)M~SFair{I-McGiSG}FQ4*cvM8`3fp`ak=vYBVeDl#aHWe{-E z9)D-oobf3qxmjek+P6K73`|BQCW|?N=k%Pli^(r)W=r|Z*?^=&>>|g)Nr<^U1mtUW z&4hg+GScHI!zM0@`s>mi7eWdZ?9bV;xtScQ`xBSm=Dx?o6uLeYVo$$F&V5eiutXdA zQe&jbmsg)3;qhoGnwajvw&JHO3y{3^P6AR8-(;uJM=9g^63ONgp0Ww*=E<{edM^o2_dl%@t|i z>g|dy_C-I`NWRPSs+ApQ#YUE%ahDu>S#i8EY+l(zZOruVb;PIZ`O+^AQrqhmvZB#x zo9^#id9YcH{q7R^@a?THrl7-|(P`nJnWT z94fgQV`$FEkb6Zpnm*i;&#joaiG)D(Eymix?N0`hhLdVNlDcCm;gqViyr?i$@Xi&s z_>(l%9dOwN&4%|n(r$OZSpigpp5QybY1G{Kdg!6x^ju|7bu5MK7+?!pvZwwG<$j3n zvZaKgzqcG9e*4}(`$)5X)8a0fIwCy|W2tp{%uU(y*S5*oXFU4Sf^>6*tdos^X`Xci zXSl-K=zv$Sk?VY|6L#S4H~DHxY!DA;Ht6n)oX1>$z6lEPF+?}jqHu8$=#zo6av}yo zDwM6HVIuYlOMh4fOw2boHQyBX?-VqFviLEEA3sh;p2l=MBW->%u<#Zb->$;|=aU#B zdi^{C^P}h*kb-~=Od=|E^u}Zu{w<78Q>%6yP7DD|UeqqOO2H@z0%iSVu$pN7v+i^X z@gb*2(g7h2W{Wu!SC#XPcWq*4{MJX&Rb4VBAA0;QTTNlD?Vmp9kvL4$B zUjCoy|C*5hKP8#DaC)&d_{hB)|PP0UH3qjl2GbmYRIAWM)1UiT#f%Krt3|4m|25QG%4BWs{)QaBz zs-sdjvph%rs^o3}+G38tDvec& zrT2EO%o`yW>ag;xD#f~fpEt`PGQw&qWSl+^Bxsg^%_xRm4qEhIuJ)SLx(57;kN&!B zz%;{sKW6JIyy{d4NCF=NKP9PckHs1%${W{`PzzooLdNY_rk8nH>L7Xb+U%s(KpOQz z`KAJp_`k@Ut2)!@t3*mD7q1@7cJo;a7R3ut`Wc+`IXZWW_~tkn+R4dPFRSi;EY{_PR3o1g`JwSEoW`ziBdzWjp48_5gjQ=e4o^ z@X~m>xR8`pN1lc9U2^y#bF;?sepnX46?!yR^&o%q{kE;oJ@IEZH!vPiXTm(!r$Y{M ze_$!MyK};@k3}YYGnBuUw&mU{I$jFL8%8s~8xaRzewMl$w zPWx#u`^prP7zrrAF z(Pri6w?ffjU)XYoWMMR4dj&Uf@z}eZ_Te4%90*R8(cJT6wqzZYBdnf{{Tjjq>x?OA z)SShD@^VFDmt3GM4W^y->}-0S_Ka*){J>gxA($J$_xP{}6wt)RMo)uXj==NpJcXH? zp@uq~t#}e&*43hem{{vfAy56ef|4bGC4rQuCK1PHSdvz?UL+Mnx;3&B&o@#yxU+R3 z&w5WhfSNl^tKVRmrd<FNJK6o_g=b>nR?t%>Uw_tVkBd~l4kdY#7yjT3D z{lZ-}VNM9z1DTaXJG_UVt42l!5`Cl4bSr}$w*`g+9LDG_&gxvrW#9OipKx)XPqg*_ zsk1wJt#m=gf;%~hr5KE8xeqQo(OJ1w{TFRArA~o(t%TrQFtVDPT_0!z5<)RcV_c{h zWEbzS!_IWL%rl9S)M>p{1fq7Deu7wEzepubh*5WLlT}ou;diif``HJuZjiDzRVf%_7)!>0J-g=> zS-glj7QqXE`R)K?-2>p|^ny%>f!{AQeV9)wOmVJ2@U2};MNUESjJ7|WA+oiTM06f( zd-Jp96%c*P4b82M*vhXw3@x|^M{^@V7!B-_XAkbR?&~Q33#HKYZr#kUpDbH)Vf{%9 z`jdV@bH9Rk_4_P9!e!P5jZvhYf*X?6O>fM>O}NO~kBXM@D33@D}bp(4Un33QffKol8=0g?^nxUPM#Vk4;_NZ+cO@3S{8cb+v0o$N}`m zivY&S(00KNB|YIDeO-O@Vu36C71{?1seX#XwVAupsx_QQ94ke$(F56FvQ*As=aTlEkhqS0Hdo`bm=VoXX`? z)WXrQrKiHsOwP!HNu0JXC zKdJ@IpY8g>pZk+Upz|y|!6&V9j6zcbe1X6Q?~k79cUw*SaOXbwp6Fix;Qjm*!c8z1 zfK^g0hKsQt{r)H{;pwk!f2o~t#ahR?6Ln5V{}jK1L+iUBf_Kc5b`$3wVYs5J(0CUb#?T0 zOxsy<%=!QD5@?e?W0yKQBo+`l*1lW>c5?gm@gz7UOf-1Z7B0YUmO6UmHvkJBoT&xlynUr9l2k?3G=04x;-Y25dCQ^xYCv8>_?r8O%*bo8b zx*8jwwec5SgT7=jAa2M|``w2e3goB%0Fk}qqr-l*xhB{i``_jJ?tlrwE4`%~M(yoV zF7COPIQ9?J{xoP}vcAc}An>dEO$TrM`!Y&f3p_~oPAA74jONqWHP<5k@{QTXr*-vi z+B~>$&o1i{Cx~Bs8}E`If9E2tN8b(1Za;JC>HdZ7JO5ifI?88D&F6gInEBT+cR|*u z%YyvO7M)h~kn~MDxxjlE3D&v~(hQDcptn7jl&M3o z#Co?20U2~tA2|S{RO+`td69Nrl5WXKT!!n*1kJj@ z#?Upi^4FqMsyf6h)m65x0c(Jh!Io33NP?LG`$AO*I@ZAqvPSV&8G=X9P1-#eGSP`5Z>uAkGjtxe)F{+ z`Q}|s(iqEN4Dsz$=i=ngVqRTWLo(yhX=^|&?2=@DNOVsQX{~!bL=B-qtXxLbFVa)A zt<&aQGdPMlVC$QCFEr_8>6-^n@9eaGp7!xU?3!O=kGJv86zn{^slYOA;k8){K}>It z?|$3zfb^MP!RO#tS*J|-Ylx(GXajgVRAZhC2aoU5oOqk(J`6*rLFPLUV(?8fPue=& zb@}P!U|UP;;udEJ^J}o>Jv$YS4qI&NZ8;G7t2f$u-zy9a_+(qBW}oJUdX}xdQarR2 zn70J%c7?b4@m)9n?*K}CrJqWtALxE9mj{>kQ>bvpvXLv3Sa*c-gRVJ5@3#{V4Vt7< zqjCj2@805mAL#5XuQS!@-WNX>}lE!|`v*ONU zr0+kX+RqOPBJ~Pn1qYQc4GR-@CYL5}+2KAuz7+1Sl zG#Y)Pge^UZoz1bR59BuKVWk|RHEQJ-dZ*kkoMNaQP^9_>3S$|sq5H-c+Va;5LuS9J zpsa4 zjCP0eM^7%cRO}Qxx8pGde&!sW#IL%M&3msoismMQjF&*HX?xy!y*_D73=Bfaf>Oz)T44&a5V7+bT)h+vPV#T@~-&bo0&2JQr7% z>Qbthz!11Mb&0g6a(Vb7r#_VEZq>3U94t(0nhp!PrwNS`XEBi?Itz=B^7 zT&Z8N4A`4(7V3&$@YYZGyC3eIADF>rdhSH=N7u4|Oh>emR^*!peIle8=oU)E=TiE& zfu#(cu2HW9%~ugjylc;|W^rwZ zuGDJ)PjFhi5>UFj!lN?#-be2yRLr}9v2I4v>fHtwAS(l!j-?HHPlV>}kK%p+PYh@9Y8JSyRhie? zVp-V z(2G$kr9-a|9I{uhfTTC;^Lo;67L6%qh;_=o8X1*iEz?)Lo>Hil78*?M5yc~HFT!XU)DQ@jLN zcigrdNh8&nKkQS#2u`eu_P9rjUOJIe1imPH0EMX?NkFJs`+-Hu;E=C)eyXmz3(l8k zOy+FvT2)VgKR1>)9!i1mlr(zh#&ue|AS%uG;XIb%dghLw zY{dt6ChZWkBrZrMci^=&>*wxDbaHl3H)LU;r@o>6+D)Sh^sEMaudOQ4FAu%q`yJZy zDkU(m$2;CXnoo}@f&j8{2BO9x$c9+NQPsq`6YE^|aw#GI<6OlKxm#M-V%#kkT*@xjoHnfA}W~HqY(5u9Q3T z2P6+a;5qN!z_f*>WF#$&M(XI$KZ>>%^{htJm>n7vGSt9b0|75zySM#EP(R-UXAY8Swll>5yEBR9hCez=NZYqI>RGie@@PJc%E}6;%lAm+ zn}MKS#6!7J@=Jy1AAAAbmS$XTOQ?okrSl3)2P`P~ZyLaL>J2 z5GxpDzzwUd4%Ew1O0$4hY!Y*pchO=rk*$rv|?LL=oQA7 zWoumz`6W+Qma^X=xH&_Ks}d{X`8?}uzBy95c48ZdDw1#i)MM>c+)zxMC|B$aoNNq~ z+fMpy0$n@1kMaf)gEEq3J!`@C>!fKMNZUNb@bde+-ehj&zq<}L5N!t5-hf~DY1Vv5 z`X+vAo~jaqJ?(%qTz|=} z`mF<8D($ZlB?+SIJ_pMxaPf06>Jxnk{6Ed!toK)<6ZoDrYrtLfT)Mk&HOAdZWnq1%t#FJO~1tVybGXczoC}f1@M_(5ZvThumho;3n!g8$$Z9v zkoqp$2gu~22EF&Zev?5P6C~xJ-~a#zy8ni?2Iy_pvdKYomD;sGsb&@$P9gH$;uLJp z8|nctat?#<=w2X`O7T5T*C)@V9X9fL5}z1*uu%&}&6Mky;D$#0l~-uXC1V+x><32G zLLb06LCF?@|5~W{g>BI*eFk`z9!(%RReX=;UIla4Er>N??nx_Qot5&vt}Ca~YY2Oh zT;Fwy&l6qfCO9iG7Gvz_@+JuK=KhU!`OH`3^h=YEOMaNl1pm<(|8E5Y@-?*OwNg$^ zzXj6Q1+m^sh{=i*f$xxzo6(E~syPs3{s`GOBmAc!#?pUC8vho+|8z$BPXK4*PIdZD zz5z3t{n+$Sk0n6K$6Wa8l|IP*_=jzWaQig3{!-KSJuz*Jd`^x$@y(|c z8XU++yb_|}r%Z2}ZD;Nj*IrX?dE-6DQBx+O&ZDe>{qRRX)ZJ547+As80I2iqN1w$m zjrz(VWNZ_K)dT*Uq|!zqarCVX!APqOg-~S1NnocBHSvO_{O4%Y$<*BBQjF zlffY#Ue6Dh4Y7xvs7aFNsH6)rN?V#L4$`xjU0Wtp!~N%E^H)^#^}R^G8^T9C2hebK zklkg|)twHY(@+MIprm=|ng_Yy@d*w%p1^~#=WTu3bu^V5Qu&=bzH>mruUq#G8uhA4 z-=EeFFg$?(tMtzlWb7@USV(Y|zb|07jb!Zicc=CzZ4#T0bs(waua?*3s$J*$rsH1s z6=rkgnyz`~XMrAJXhf28Qxj;h=*MR z`-jzl>rHOwReDuTB;$gX$d7)Bi%`l^F)`2O-#8Nfv>(DK(a~ouSJLG(>JnmUV$D+4 zi$5&-8E$<*kXIzUuXm6bV4Y7}Jj*g=oVua}=c z^UvQ|sFe6Xb7y)ybwE3H0S>V0LW&uWQ|xLxKt$u{o@%(gGre3Y zhoa$t$HlDhXug<>n~v@Yz&Dh`*0RW?*7`D}fG|#g;XGa*9lxh;OvxP>eD3j=O>|T; zOI5d4)poiUqTk4`3t3Ac`;G)owOJfqWyb2Zd|7kWn}$&!e8pZ6RkerLb+!I4@a3R9 zsog0%Ww2!9f+6E_WLYx<%OU%YhTWx+MoemFsIRr1(3=TVTqdhRy?`1)`*JUSt@?vq zMDTL>hlq%brU=Ft+n0Nx-~;X$RUJ%{IU{9~mv>E7O-S_WzfA8;oUw_mC`+VN-*ZcK;onO!Qd#ygaZ3OK$5B7udMu^|%S1cQEUDfyt zi7FAUC-=0gM40fl36{lCaw_j*oC|DhJjNb3btChTh-5govE3oD_ioMTNkPeVL_#k>Qb{9p(GGLvE(JJb zaG%eWocE?QvL@+|K zUua8T3OC&Rl_S1E>qzypVSQatx%Fe5k?zP5>uvQVjOl2O}wP+qqlQv+# zFhd|(B%V#q?Gmg3B_Xvjtwf@@lp$%pFf_-pUGYjbD9;7y%c79;dVDgFMDZ=eP`rfvHLIE;JCSL|$Zv|{MiFQw!bJi5$2J84`M1TEnfoLVLp(N4WmXvH zK!yahQ=KtL)hM?Z#_G{lj|582 z(xR|BrW;mo4Kw!4d|GBjiDF~h!-)(kjHus>!B;dEbZdXTmkh=v+$Jqii{Xz>jN1rG zI{~RIxa=<1mXVYg@Ikx4DWpDV&p;1_P~EODVkuo;mObFQPVD(5*eya|x{aJh+4`Ni z4ba}=Usus7D%^I8TRcCL=kMSCtuXT?P0^9ni&60LZIdQ3(`^|9!caf+ab8hk{J^!9 zbPC^(mK@cd8xAlsAeY2!)P@XU@3e99_1>mY%RlxXy!j03rVWOIN0so`@<#n|TQZ^0 z_rj~S@(dDiUSiqMUGmasjm(r$w%wno zdn!E!a_&Cq@gHD9h#sNe_oOQTF_{K;F+sC;?RUL;&?WBhaJl+@+&*;(etPtNuRD<+ zddy!FCQ}@zHc?Y>hSosM(x3prl}60F8lhq|yvrZJ_0}bPe{r*-eIk(>391OR-Y9%1 z#0@zHnokh--h#v0+VlrE?+--{e>J%r%MYbxXnMqy=7brcyKnz~1Xg_;|o&WSx@v|QlE z0f$=Wp2&Z0X~w8Xn^5IX7+wS^?Mi%ifH*RO?@O^Y-5K(b0R5fJ)orw^~3c=AI_Bjn*~*A=n4Kn-Mzh7L*k;CR%t=>Yy@%FyQIEw`36g95x9B~Uy z3#_)kQn6g@oj6~``Mq$lcQ+F|6pJWY!ayNiX1`g5eW0Q)-DC6S-9oe>=`MQp`0yw| zXx*1%wGIl}Vwo@M+zLL~d+rZ31c<~ZJD@!TU-b4nw*XAbF+Qm`XM7%8r?6IKZdbsC zTQHh`Wl>fo1z;F1&SE8C$Lo+EDd+Zq*K{BQ4pKpUmdv`ZRppOvzr%G z)fK=7r=c_jy7V#=l2Tbm03+W?>>bzq$Oz1~35p)7!oS9%kBlE+NM1lWoetI2>R_(- zei?S`Qpu^WbUcHl@8#1iWf7SpN(?a3GrEu|%JlEdPQt`^V7q&TS)~dvHJbyB>_qII z(=7cY{+1;>VEu5UI%M+MwkBawUpvG_H6y>Y)yEo7z{^HQC>gwjDhis_edhdGfW|xl z^>}(W~1$Xg!Zf zkS`xbQ#Q20R7r!bdYt@9f`BDijNwsi91LHhUTX_6?AI~kaGZIY?Hw2lnO;QHSEL&H zcvL3}+X^;|FnWtfxGLCFQ*u}uZZKTeV7$bbgrurmhbAB?El}}4jk^>U9cJ_ z4al^%Qb+V{eUS9x%i3+g%cnUA0#=2k6Z^fUgikF`wc;ksnvBe8j_z8b_{g#Ft!_*cI)$0x2K1#pnw|ST`M>>-VP}M4~P9fgMIsl&EgZy zf65={^FzdM4z?5_q$IU@&W8~(6NVE&VOpE)8C-S@w`&dAGjQCN=2gM8r+w*^q{8hF zPJwJZ&SwB37fOE02_+Teu#Lzaod_i42Je&efE`t$_C+d^=CBX*K0R++QZ&iba!N_OF1!&w&yA z(9(~?OB~(F?}fjq1Nh#341}|5)dr!Ye4J?hba}J`@I3!9*zP}rVLW`2A%pr^^nN+Y zZ)lD5D(~GyY$oT?5xNjZaMtRtWo5nK94xlMcK#sYPXM5Lm)P^an5K6Rx>c8*?0>*t zkX0oVBsJ3s8Poht(4(*F}X-}F1AXucuB&Bnd`9-@%5idkTl_V8OsskpY|pOu!l(_`c_L5qi$X)DCHCbP z-Y5y#A@W=#pZh)^EOM{h4*s|6V-OQ2OSpF&)>wk;63+!z;CC#8-8xA1Lz8d64UhHF>PysXpAoyXh1zoE7;NgGgqu1d?!WUZO zfdY{7GAdz3*JM>j%8 z9`lTf*%%j5wPL`lG}Nn&+q(kpne2fXFZR~$&_tO?Ael!Sk(wHTSqF${OVV^NlV-9F zWzy{kVd?6OG#pAIBDk8bEU3lZjJ`2z;hiF-L1|Kw@PkaGD;sK*eGQXF?YfCGBn&p@ zhX)hV&T7^iDVshAtcxot300Dv42?a_;HMLbYMZ=u3j~OyPX~6Xy-z@+@lQUN{E^{! zbw&zr*4_mQsw=#8zqp+K^6Clh7xRe$6nvGJ@80sw;ngJXrYBC$KCol6=h=Vn)d~3P z#DDjz-~kGMY!xFelG1dIr@dNRy;yTc-L&_nv2L0L({hjG9h$FKMV$6N6ut2Gt4_C; zMqZ)-rW=4wFG7GH`!vL80*@IKg_ z`}@Esbl8^Zbl4v=oy<3AkwwO15h0QdFx?>Dep$&L#l zh=+$?W8GG2L{3pe-3;{?xO)5dSJ}ByHjUu5`OlA;<6 z1PjmXtbGxpgmvj3{Nu$0iR{|e%dWmwRe@}ZY3_&3`!_Fn3+CyB}pbYm`iHYfo(tw^M0TOyR;(Wp0?v6!!MGM@uYj9b9VUjai zcf;)b34)ff!b z=Wi$XWY`@wf*DHyi;rkS@cz$3XUn!dWa*#jT#nSEy5jwd##G<-M?_nmVElHzkt6Qp zEf5I9IlCeq7=h}L7MZXTRhmBX#f$7xXU^7~r0^Dp+4#Pq1sg_lg}Pj*0bnbr#j*c(9GBQT)a;i&obi>j}^VgHAfiM ze(|o8)mX#}b*f29feR6wps(#w=c z4c}~RHq$_%dNSd?kzea9Gl{HYE!uCTh;QA46>5#9PC4l|kr+Z=b4Z7@T$s{6J8z=` zpZy1+IlI~qKdQY?!0fz=YdI{MWA8iWqc?+g3})O8cChIY5k4B%Fz$d$p&l4$I=4*p zBq!jt3N7U>4{=F=?f)346flY^Wp!<(KFcXg*i<~^Wyc;=ax3@JWzYr}kn=GrvU_DJ zFV7WKpBb|rw{TltC3NFy`M%C%Cle2Di{uX|`;0QYsm=U;S1MXHpkApMm%p4>mbh?l zQ(#D|J0`xYVBqp=gX^o;oT?w)SsEo|DBxw=Xn`-6aRS=4dZp!*1ZuZ|+OCy?kJWK4 zpZ0!EY40&Y^xDI)jbBTz!es;PqyE#s=x&R|EH%qJbo(WG_3g$txO(kCQ{HnMP(nu} zB^tIqt&`69wy=cCH91dqVkqq+Jk@>W&{R0&RTOYBAy9)CH;^^z=%YYL>uxST3i$;U zpNLsOE^3MkMw6EB6oajMkU!)acizfNw{bl=%1pV&h^12c_Z>cM7^hWy4qQ)*q&BsJ)ypI}+)A@n#jjZzb zLe

z7t$R_|9Wz2}8};O*{Dd$-Bw>Oq>*&(7w#Z~UT(G-UhK2hGbtA=eFhUA&M$Xfr*)`k6_sL;adx~sfQ zcLLXJ=Ps#>k>#sE7;>!kjG$eT$birBLTEr5L||T?a>QK_x3@+F(SGGQG%`vQ`=8nJ zt;w`c7S(q(poEs*tN`LHX?$OGHeg83t9ZbWmwlN+W?+cNkRF0bKj79~MInrTw3c<} z8*)@BbiXHOl2L+Py5hBUywF~X=u)9OYa5jFS({#Z#nl!+Iy3_w$Q;z=F;1Yt|! z`qWCI!JArr4e!nw!L+8OR~IA7V7v!$9S1&(TP-R1{tDMS?+^>mO; zYYV4pfT=_mM_UX@^tsopw9|=#e(&ba;jxV0p1nhTVt=IFXvpB;DSr9f9M;o!?`Vj& zrJm%yvL-%<+5dqlTF%E^>x{}Ih6wIS^t)KqrSG*rTN3o6o+m`|n+4@6MQ2T60!|C< ziw|~p;|1hf7Hb!RdKcv_KqZ?x2-@f9V83%PJ`w}1@^37WxVuUdI5tqBc5weppK_qk@g_<+mDy^XQFV2OjZwViTXv9H#Ijv6H6JC|(+ma1c8X$V5@b47-II z(A*bM{M>JCdi^Ng^5VnfZ8}Wjj}#`~#?ForSiQGI(1~1-lOlPB+?HA8Cwf;z_#^kI zS_&0g&AQv#*vUFf)_`^g01JBAjE zP%a|hN?LoXt=ZA#`smiUbZWU3r#{k1&D!okBYxNH1f<3;)5^85@ za+u_|b`Z~_VXn+znt^s~;AvjNZ1&~Gp(3=Q%*emSJ(-x|DWBhxF|tjsIF_aDW*~L7 zOC;OE8qwEB?~X7+F(tzOww+i(0|;=4>hX6tXOJVK8P!gN1Yr)YCa|Lzi0bAPP0rrW zO`furbK*t;{+mau3xz-wdVImsX66)m0Lm*5nI~PU1dks!3q_q z$gOVf){Gbf#x&WTPN*H++J{M!vUBFd%f<*_t4Gsku{ejx#2Uhbwq&CEdt1hcLI=?& zPxm3l>H}>oK}&#$;`6jFEQxy*mCs?qN5%@NRG$9ac57ZLziyx!r?_4Ej$2cgtp&AL zaQD>A5eG+NBIO25yGq!X@wU74Q0b)s@0><0h)?5`XMa%o7!|htZGDpsge3N!z_+`3 zL8Z)h!Op9s&HMP=UF70tM3L@`n!shKL2Sd9(-*a&>ad$wJ<&G7Sy8(8m`m?yhn)X; zC4S2S!*qFroMMTQJKrNkujW{H;*BwDqG4NP|3DSb3BHO}03=!`j`}O@`VI8G4wvX7 z&+TD?^3$_W^)&=hW8pO=o#M6lY8n%1#jr7CEJDfxZMjmeo=vbC20?{)bhED|iMU+p zJNFsg)&S*E7M6fbR2);#gx)(a4qC;xs?PVdfoxJxNXEz}!LYERY{?wiCOf5UT}b-; zgSbLu8sW^nVl6Fb8R49vS(8S-RPoNyVe>O=*BYIKVe=|EUlE>2vtx%lpCyyKl%+*WQ<;s*!Nn1bu! z#KQbX2*$w?58g?0Qw?Z~{$_|5$iqQ!(_L_kcXr@{-fBsEI1a)u3l%NdtU$0>f9f6T zmMqr3r;XRjBrWuDfa&QzH#di)!raIxw^Y$J4Gg(Y7@PS?QAa!;gONESlltL`4@HP= z$ardJa!c{pKs7RMD>5&-C{!tlJ}vkYFh@^`A&>XwSS~D6>dbmY8~>Im-FYP=JU>4> zO<{O`!Qf$9=`&&up7@J&!L;qNkmfQEUl+m=({Tc$M7V!%MRv|+D9?G`YY9B5RYf(& zJ{mJ^jyaH`R5U8>gw+<`K6h5*`*$`u4d=OPc3uuRM8+u}UBB#-Pv?12G=m_xAo^69 zRal*1p$%V&pzS`kEX(673r&hu(BJ(zE?AMHPup1|b6-LAEzsNTFcnuH*$hqF1w!Zl z?XdZOF(SYBAOQ2NWT;l@W&16g^t#3pE3LLh_>Khp*981vRF6pPSAk%q*^w6h2>4f2 zn$-0y>4s_1bH>6YMD61l$^JNxe6+jGP*q)zi8P>l9>F{NRLGA&|IS;w-)T>))&v9q z-yKY7Z0!%YIBrU=&Kaf)F?BX=Ep0}Du3AtMeob-g5T^!jhcMJjC>^*Tea*ay!{(bL z#g~4mp{{;mLQA_i?bbvta(-Q&UDkS=qU@KlCXelEFXorNB+_c?1L?v`B=d}<61-%b zZ0KeLTk4hBUDvZwd~Tq*hn!KjQPL4n_Y~gmTWcR!DxPsOeIl7rcX1n3Gb@8SO0N(c z_XOs#{f9bxv|741NAeYg@fHl@^PDsJP4kNg58Ts42v%e3=r_@WG>-UzQhL%u)~r8H zO=LM+7iX69^7tO5wZ*?HritP=eJL1ixX2M_=NwPMK#}}UA6&iix{i^fM!QR}THHp- zF6ZY&S{tAlmJ6H6q*mOjKL>fkrA51*T%j=ts~8Sxvi8fZ0WiYj<|8n*>a67iKX3)N zz93E1S{>4rG^!S_s|i_u<8As=)bNmO9s1`fc~OliwAuMpk@Zk9F=jN@{NR5gp#g#QSpt4h#cBB#O(Q=yE$T}Bxt3i*e-(zUwR#>)p>$( zwHlaWuW6iO+i#H=ffkKQGg#V`*FqQe#v{iX{2j+BxdY=$E!$R=E>gn7&wLbeJ(KW` zgF4gR)^2{#F%2|@Jl4B3-Ik^Au(;j=Qr!~p=f~gBJVQ;SID6gDOpfaMbfQ8 z%8MnL@%!dY<=ZDbVEtg&Zt|NFUIp@t^Jj~PB{BSdxMgsECgs(G$z8cOU3@aavmO7m zoA;@$in8iPYkA(`XOkZXq3>ybKB@khY4Dg>0do7t6WV}yM6CFS{chyQ382v~X8nO& zZM{ZE#Q|MkjW9GjB%zXayH3HVE2{xTPTSpce)&@z zzqYX~Jpy_Of_aWY!86V~O#3m;leEK6D7ZtgFh>wkm<-=Pw;SXb+O+l}>x3G^4!sdl z8t2`?_G7R1Oa#)1Sm!`3C|Q~C`hdiYeAbHTvD*&{%k~cmLUF|NXlLUcAf@Bf=ezSi z&)ta)(}1>SJ#ag#3 zNKPUc*^da9_Kb`KSW~hS^>z}`rBNSNsf0|1I?u>ox(~y3@%Hw_HRUMKu6N#p3qSOzS2P^iNj_v9!KobBDm()tN2L=(NgNBt zgJa*B0LSH(eA0$|dfvoySN)6kO5*m~Fu1kBdae3Dla91yu!Zz1 zBXc}Nv*<9N1K-D|Jto2ji+YBaA*(f^l|NIZMHiACE)h1}Mc+%9=t;@BsTjp?FiC!B z$-un-iHkSre!WW)km?6v6{8brC;9fn5iLuTyB2>Nl7fBBylG3@_OmePcy|4>z2Y>g z!X}4oVhLpVcA@7}Cq(9AShn?{@fg~0vKCWUcDTCwH4kZ=a~ACH52<$=-M7=i&FjwO za{Hdw-#%jKxy%BC$;CB((mLICaM7(vnRc=+`?P|4_R*0^4I6E8HA+=Zzy2Zr&cQ{Y z|K1}r=`haTCuy0VnIBwtE2pgbb?KxsRjo#3-#k?oxet~>oRfbgDlXo3f${m5*RHMw zx!r!4NAvm2We;2*F4h3)_oHaiNzC@l_Dgqswpgs2$hWm|m-E-2Twpn!LqxCsTx;cu za@whS_tV1Jw|`puGsk0(h?b0Nc16dktFvyTY;AeH@4-(?-FbXoB!=#1VPf-?5?k-N z5ALadNS)ql@}Pvez}FSk6op}8hG`soqy+(wXL{_Bsn zOSc>iiUr`1#M*P7 zz4Uy2AAmYRxs)wnRpx8i zcY&=B$)$>$XHwu}sb%I-mhC28&PdS0SH)Uai~F{wl-yo4dQ9uVXfyIthvNRjlU7eJ z?{3(;{L1|J*P$&#kLz7h@>|I{ZNt6px!Q#!A7oJgzuTVd+3XR297T-PT0W$LKge#m z<~7)%2u~|t-^Q~;Cs`*Z9#3rOc-(Jhn3Z3=P(COTEY49xiMQ>(&N5R8P2>se9! zFw+gR@!N==NPY%w*uHhVeZWu*u}pj+8~o0(fi7ckey_2}+@pcu1-_k@9$poX#?wuYueKCXDDa$-|2x z*G=+x@WXb;rRg7~X}0(st9{g5cCHT`JxUpz=VmzI?@F4TqXCg`uuVPMF4MMC^0q8^ zxj3xc;wY9Q7HiSwj}&V|0^1(Rr#f@l`%OdOdl|IMTi2@vjQ3l=iwU4^~J@gony0veAMvbZ5!I^mp+Fv63AY!+6ut)BmqC258GNTX_6%f`_jF)j86 zl9vWbp4=4yyN4$%qgq4cmF$If2K!6D!ng3%aw&?h5qRZ~FRE3lH+ni*!N@jZevF^b zEXvC(Wp1!DT!69K*hE0UL|7=#+~)HaiUNcSmO} z%ix=diCyOhEA?FZ?MjJBgz|3%%No*&h~FAAU2*NaZ^DmMwsnLR3a*NBB1=gQC_-w< z3@U-VBQ{`NmcH8MHYQm#V8XR;RuJn7XSH1pOP2eh0GLf}{_abXnZkjD@`t*)wvMCE z_B@oC4?RmgEVrwCYqh%wEQ`v!#woryi!i#>-w5Wx zwxNDQ-qlljX;bKm{p@${w7fsEHA+XSD9=G zmeVt9ik?hO=vGof$o|ZznN?vo2sYV%c`Sl!!$ZXktAS<_7cdb=Hx!ZL*ZU+BYj$bd z;kLYC=xTAyK$-KXMC=I@812p{3Ni;Pmr zKF>24L_}1s*N(H|FeNwrMELQ2;9zaJikmBUF{&{p2A!b|LCCn{eFWM$-Lw&suwujb zt>>@NB)!&=wt$S|df1m=uSp$BGd#bwZ&ejapW9!m$ zBgMi^XT~*)*V0h@KVCuZNMkWz1)L0kLr&F0k04%v)ZD^E2w!B?@+K;Mc+q-G zhtZH7j_NeO(95r9yR7TlCxLn(g(-Yoa=C$SgYSAa(l@6n>og)*ih@L!OJ`H>RvUNl zaF?ZszN@nR`IUjl`S9{?f*IGQ9r~y$yXHzO>Q{Fx3mFO27nJ^i4?N!A{t>kMfCgdm zkKYHpc69oDEOmzd%$3V*8Ir2QP)nRrTF0^QOD1Dh!CaLpn^w0E4qgr=nWo(+U)Ahb z75CSCd3uw&ttk`LJ72e*N63h4EkrNJF{ystyrk4s-P* zjPoAact={LSa%2chb$@2Mh(4wwSP*(Km=_N$|IKgxvM|RL!i)p-aEA*5@9v3Mkqo_*b=YPLUV$EO{u4;H7N5o z$uu`h^$0QnYuWO*(R{M`2A;D|!oZRP?KM{7N@F~Sa7hsAA;|I0)zTIPuJ4DU6m4D}VzZe0J1EAhX#Q%Ky>5kaVcOBZVbKVt8~9|W;0>>q6)z=U(u1cFs_Ib!98A1D#6ocx z2V>6A70=2XJNR*APDEvYXbzhOj}_Y^q@gsourard8)aRMstDl>+JJeVGH8{}mvto} zSh5+|P}n?x2C?!%q{7+K+Atw9bEj``Dc;5&RmH0hzFiz0#kUnEQ3v1T{7yz2h&D0z z!H~XsZJ-Nrc>XnOt$E|dDSIpD%$Q^JL(blT8xC4*5LGg#-r_cLS`Gz%(0SxQW;Vjw zxXi>0r`;^nI;C{L)U`J#O4i)}-UkGYF;N)pS=Nl~+xpgJvbCGNcf}RlmIYf$b9dwg z!ulHqUZV}k`5ACK)<$NjMyqA+)tn@OeVvy#JfH#gHsN-kPAmcO&Y*;v?7ToxKo@4G z&pY=+h9xN{61%SbEX3zy_&|VT?M<{s=oCE*M)ut6XjIOoIjGv`n^cxwPy*m$elZd2 zI_3%M-<-dgPHDT`=rQ2xHf%f`l9BKl+^2Vd{qd4J;k5~Kqk0~DP6~2PXVFs*{l)Sb z^)9kdr$g|oq@B*v#wf%O2lMfhhUwo5>+>oR;|I3``5CPC=`SUdX#uVOIVv!MyZNMKkIHJvo0@XaGi<9*Q;M^Jq#m}mrix)r zhC^>+o)>69cJs5)`ULSD!fy`QI0X(-9zbfRSXJL$Iy>8X z@n_E+;fk{t-kyvH>bLEGM(MpCdqV4hf5;>LRpBcUN2__nxu0CaZVF6twNB;+i~B-P z_tLaWsA$0GyTRx-*#X>CB0eePAlv>~#$$i4XL`T+@FeO;$-ylmL#lQ);dQ`W1cnv| zfGId+Ou@*gWcVr?6}DF}p_2JDbm^G9_syB`fy(y||0D`_8|3lxmhGOsLnow2SJszdvgJ}Ouy=q)pz%%diN(y{1-m>=XmVjl--_J3x8yoQ$FU?k)I4` z)y${eq$N&=vk&dbJ$U~&&fXh4PyR<@v9Rw)UO452|7*xpkKyY{8a&*do{-l>Cc~e9 zbL$gAzHEeld~@@#4wUqqB+jFRJN!?)6)1n}2)oL@=^za2w7x`M+fffL`Fw0T?vd=Q z>{v!a$BKzWhfOTcmRDffRD&$&3Au*pcdICN#laS}ZavR(8=t>f?YjQoHYd}rbn(NW} z44h5KV~a-k?6J~&hd-6da`Iarypg)BziJRU{iKdt%J&l6MEn$6C8UYdScE~mP>(PI zIrbOi#h^=LyYu)KbVZvc(Kc-+3_$|b4-}ArI@Srjsi1%=_Zcoy9 zyHmxlof8Gj(x0uxLK;zD62AHvC1rs|^xv5c3nQ4KJ~_?yXi^k<8ebZX{$V?UIyE7N zBHT!Gjx|6Eubwg!UkbrRH0kE9zwA@ws1ANN6IP(F1lI>&J`myYZFLIjsKDmXYe1@J z-klAq>mL7UWWKBb-?PQZ%g@~lETYlBvYLaskf|niyyAV-7465TzZ=jW_E63ZzxdVa zeKCKxkbm?>{bj2EHLvnJjEdcGH{)eFvv@n@arq;1`x};H;3yVRdTbsAT32>2Gx>S|#*^_I08ZqU<7a;e%B$=_x%zC&gMBGjZTP$Nq$xGX@wpo}ZuIdvM~&zAg#r*{;`~Uud7aY-Hp# z$W`w9XP>S3Zd`h+gb7p(r`Rh~G_Ua)8lUFpjjt+ECOeNxgPNC}c``>W*$4(lO_hiX zh{&RCWB52D+-TiqFuLic_Jz#rUlJQdQJ_EaZZ7*C;wsu<_EdoN`WqSr`r`clR6o;S z69DCD*wGRt1?~Zuho1INqoR(@l`kKeU47=Be!c$J%eiQla7`l~hGpO5vP9GAek;F| z>sCdnlWaOumY81ChCtXdSYZ#zHtyTll%VQ`nS?FDXgqV$it9KX`x>x}^#w z@#Y6=CyMY(#o?I%}#Y7`Z zyx>?KfpW^%`YeZO-`;1``dPTOVEs=-yp6&5eUfc@=w{Qhu|pb+TVy!+&E0c#Y2V_2 zrzQ4$MEi!u8}PXP$3!)~$;i@#xEK|ToQ0tThGfh0I(AgAyC=$?(w+W?8!#8;JV*n82KO!mx{eKtTZu=UNRQpEt&%oU(nx7=zr(m#V#P0RIsTANE zlOqW?`w{VziqO&swZb!QX%!)f=)`%Gn!ios%=zc3;P~cLu%G#i7;=&~R{u+;Zn@8d zw5qsS*J}PqCaf$O&S?P#Tos=?=)~Z|?m-qme|Ul+>m;bus+x#ytOAL|;8n#-%){ed z@o%`BsXOQ1Wu0uoWIs}#R6>EtMUtm10nBby1nYhsM`^-$wa>jYt9}ADg5MDrPO`dl8(q4w z!k(V62={%Wu-hPvc>6>HYFa|~OPJ6q`O)d~<{FUqL?9$T1bxpSnb8+=NHxcaG8}J1x>1-)eu=-QFasb6;#G5=ip4;GGLSuCQ zBo%Zm$lNTWvHBppAe>hvI9S&s5HGj+9S-GKUh5gIYWND5yj7^{iGZN6y_!NKlH z4}YAtuSi^K%P4!3!A;B7C!=}DFL8|s_sh{HP-Y=NyJtAh@o65W^(UdzEF|igfQ}3v zHBuaoWwxT*Y#$S6gxmx22tJZMZL>?#f(nN2FIQ+>K4^YCgRNi^iTU#71mpQeqiBra zC`I%ER%~ow!^i>m)JmKofOX5Lju{8H0K85C5`KF##E5~n1_*J3^?st0E?#R zF7BS-iK|mj*oC9OH$}`(U2f7Sd>e2By-;;G9X6UuLi6zcxYnem)!=OD?!%FozN4!+ z;yj*lep0~e+kPT-WO)j4M#W7zsX0UfYCI@9RhaFGl=hKb$Fn_kf0fYVYl79%*opEe zeB$DQzN3B|)vZ7A`kzPxw?*^Wl8XM86oQ!Q`Yw93NT~`tfo_|$7wgW$2>nz%lq2ZI zwv9OKJZ~amhAz{eXp~Rf&VV}rLtX<%us{azf5ne4ykWAt{qQ`vj3ql2oU<{T*zdhD zy1$%P1^eSS4UBgA^7k&iXj1q~-Aw@oE}S#i0zKE^$E;|+tb^_P?3ep>Gzo3f8_t!R9O^0-aiF+aI0s6A3Tcw2fix<-lrt0_C#2P=e4QEp8+3 z;1z$>Bf8X60_r`A0!4AV9=f%>tZm{1G?bbsE#Gxq$DohA0)*eLb;o|9it-hW?^e<= z-=N2&L}BWS5PFv_HNIM}lK5pAfEzjR^>G1YYWpZx%euI1$uceIM2(T%&#%8l^S)6K zaZ%vzYTYI`ADV>;j20+5dHUO~v8R#-se{l#=CG zXUu}qlx2WtuA2;vTqg znGW;(0?hOOSy}uS6EhR5gw$wZ1+CXkiGma9K&}|`rdw;`)=xXN?>o~e#LQ(?hj?wJ zRg|~~`|@V~F@I{i{!#oP4HCo|c9;HE2bI+deFtmsz2y9kdK(7Zb5IZ5Ew$jgz9;*W z-+0{UmG_{$-JiT5>SNX?Ou4tpm;yXZ1{Xiz)5c98!q^=?VO)D-?U05h19r$WO*+vKJ&ULRdTvpZ=~ndCU8BL?3CPRyMtSy zrfquEG<~HvdvE`Ejhd%akJck*6KaGqpK+1Kj)-XVZ6z$4-+^yr7 z##DOI;XSfv&mJ~SjT^W3>^T7J*|VSh(EdGp_FmDqG-fvJ^|-BmeNSNr{~WV$!10>S zwLN=^qgc0Weqy#=)4z4+CbRz9<9B2#HLP-+y1C`>BE5XDpT=O6pb;|*D+A-CriKqO zpT<{L=Yp;r?VcymHtA!d&Hb}fOk*E~vN*f8>J*O3{`Pf~u|xX4xxT(Kvar6fv8I)k z=4WtuYO?F=#G05TfbUr%b{2PxuhHqW$t9X&Y2j6;h}xm$tu4Ao-jKikrO^dibI;fu zY4Fr#`|lLm?(Xg?b;CTR`)LB&`gwX=|D;_=!4uRlov}T;xVlLG`9palnL;00Bo9rI zwY^evK6PG5h8V;6g)V)3Lm{jWBfe3nB7EL-C)wt(=hx!D*MyK+;Yzt zDWR~QInC7CnPn<{Vr99%uUepD0MBINeb3vvhI^QF|8@=i_VVMozPt8YadDTryF33| zY4=BIcei`{Zxuh@+J4+twx)MCe!Tp0(RY9T?R9r^pV*KQbI`+&G)z7A?BU`3@!Q*S zZcTO1o*R~$H?G}zVzoHJYRAWMcmF$D>RU@qOhbM#Oi65RSG%Cf=`5--N@%h0%a*G>WAM0@+kpj_!)W;z zE6}Rk^(VFC6DjOkqK$B_{`Z7DfuZ8qVf^EXSeH-rLGU`-;7e{uMUV>Zpi^B zzpux7-&eRL)@p7WH-G!filwjbfZj{Im~GsG>oqv&tdFTkn+h@IWr>&DT!gt`wRV!1 zknUg`b;uWjQENn_EPS*d3|p3rJjQ$0CR&9|`>|}Vu#KH1@XVXwu}GySjFP3;D_&xb z(%NkOS%09rzHRY#|7q|0ZzPv*Z{%WZlf0Qzf@D~6KgGNf8kp_d8sRjewuF0{?=P_YDH-G*i2)BTf95l z@$Z6%@v=X7I({h2wDPjd({XBYa6XE;rfAdtfYq9XORPhBR!^!NTo*d~2#B0{fAcLECd*1rgld zPE*Rqw>x+22kJ5xV>VQW;%W0^_ZGD^9;{t@igE&e#F=Kl5l1Q&^|c+9o_ z%TJ@W&gg8IdcQ1!`jv(ME4S|$WwSEEckk)g4lIHH?k?if2fH)tJl}_bU8Qi7ht)p| z3KYLDj;fD<%(~39RA7?%70&ye*vU(AdK~2rsk(z=JAW>hGyRJPLh0uIN0lTKpc&Z}et;oUHung%ja@;|xds%wo(kPYHT z7v-0K7L2HKGiO!he{f7rcLd43Q3V~Z59z|!uE)*N8iII)w3gY2^wP#sT#p2nW-0X} z9qh=&_VQWzX^RGe!ptHf%APP1w9RQ+gndvfALrVJP99>TJ#Ja7{XC{MoZ_!A$WS?& zoNKSAL28yf9Ehv_fr4yMIxqr>sa<|G0EG`iMo!aWu3?~EyJWYUkx};Yc2UX2>g_d9 zP1yLp*`tTk@507kJ8Epy$sEzUqE;i4Xz*kLd|ag%sNoVTCdhBr5?ov-0&6{Ee`&I% zt|=|-76+!dZ$q{>TuT1dVE29Vng~FY`+H<145`xL2)=0L?aH!mzJ%l029QfF=+aOh zBa3vh!6^liuJZ`k66(i{?S1rlr+fX(uGg?;G6__52wCR!)d2)4MF7K1l{O`T%9{3F z1X-Kw=agWj&!G<*K$q-*WGJlt+!Yv@6&?X_WNi()IAg zPfz)g5V=F)ifgx3Bj@k+*x7H9HzUNxHsExp6M#W!Rb^mAqd2{#fn zmNlP;6!;|6(B!(v zkw_|GIBK&yO;NHFWng`aCi*JAxRMVFrdaRIsg|&9p#Zk5LR?|3yGf4q!h}@vWqCtn zX$q6||1ndUj1aJs9U%C~^4Xm@n9X5#BCWIrv{=Vnc_?gYjkgZOW(#=R{<45fED}+~ zTlan`yo%tAzPSOP3}v=?IRO*9H@?hCOJvr8uz_y15uqt9GxsabxJ`c@d|6&@S8{*% z$gAyd$Avi-*KNu@AGYs?gBCA9VI^4bP6V5&lEb8jZj#Hj-M~U2MUU$&H$raC>dr+( z63r_z?Cd$5O`k(c^gIlAc^H&F?%~xJyI)Od1e7A@4uZ!Lq1$)=^XPnmOTU~Vo+(S> z{AX-T#(7F0VSg5?Qr!q*(z=wwHgS95Hi07_m*HpUdAGWovt`Zg(KIm^N`J|R6jJqy zTgr&~A+Nt1 zjIrV5Ia%WJC4o0Sz0-avn>sn)=$&D@o`CEP@3r6n5(o=TfpG~Scj?er9~DR7ASHr` z3rLyk-y**XfzHnfAqPJHrar%nR*E372J%S^sE&jN5h$0`YCcnJ01WH?Zz0e@$)mS~ z8l3Rb(g+Z8@z;i-ibYugHcZ_?JTtPb>(QiBGjqaQs*kXkq20z*pefJCZ!`*!I;zyRI|!rDBw zv++f(8JZ8q3H+JT->Yy68MH~Th|zq~F+SQVdIj!MV|OB3K^8FBuq*{j|AEv0nko1X zEW|&m?rPAGvwDTKsoUOtGI{%MS|7B8PXR5&GZOl#8{5biUh;7veIPZd(BF>BO|p@c z=Rf&v0^;E{Io*@b$2W_1?f<;7cervYyW`zD@hn?pB~&r+rkj;jw-=8~d&4VuGus_y z4G%?FRDLBXWb{+_a*-IHoPI!7gVSgui4XN5B7G{1?_mB+KHu0p*+^l2$;!V#UVXkL zt&jh#%`b|yeg&p&GuXL(c4>#uto$AtOV7Uj2pC@OKD0K}58CvT+Bn(bGDtwwfY|(7 zhDZqd?qZxxv7KFJdNErN|1j>cwP({*@GvcKK^2G@vTrsXK9n-pqBReCZBfdnDk|LP zGCJmCF>A8a|Dg%J)H`B$UJ=$B5WnO$a<_b}*Ot)Qfa0*5+BIJc;qCpi z)d+siOjn_0>k*%H!$-gP>%DlG_#gD4*I znO5gEB$V39QBJqt%Uo5!2D=IyHDh7zE>CN-dlkU#7H?-9RLC zP@WjL>?GG9`a`#vk}L5qKHCvyLqU29|7>sLlYuD&&+f}tUv%!II;=&fd^2KoHw@{8m44Pp1R?F{nhZT7`)jI;AsqSqsY>=- zsWIhh&SP`R&d%~9M~1d;RHD6pVrtT*ql$7Z2=tuJB^XEFRD4QINa6)^31^PsFg4$t zj%1knjY(IO!aJW?vW))m3*5-DDTw(-+-Qb`q2ELM;K>V` zc9~Qz<4O<~|J2XCkqo$EB_=sTN3F+Z`{Af?BMN9~?u zn9F2u-gD4-grDcPfVz*`=lnxmnq$y(ZXhx8UBz5$gj-D>`k?!2gqV2v`{j!xp6U=z zq~zPFV&YjB&i3bm5bIAHcRg+k&4luMaUl%-#G|AJ`9=*)Kam{x5ltTi-aGeuy4xFY z*9s{Az&;F%Qv+~8pz^4{aNf4X)>Dr>HZ?XF%jf!7_V`Y{m#Q*^XRC`(ey)!pzXRDF z+zqnzY_!Z_V@0xZP%p|a zQ!WUhUE)wEf*rZo3q?TbI5VLuC-VzVwkK2(Hbc_8>2py;OL=vGz6qL38aWPe4{WYV zWs4y0HMKJH-XztNu0E+a?x*z4ERL0Di+lVqrGwS|ktRp_AP^%*q^hrK%-*oF^n+V( znJC+2pjklGwI}uwV_Me&nXcCn7FjPxA33|jj|6rYyXPsymC?XPclM_kgM2gzV zD%zg73Bc5W51~X-sKE&+uK+Ym7>0zv4E_xKF|y$!vSw%T%dQ_fWk+yb$|2bkdBf-Yx$;+|{udiKa}FkKGZX(N1k=!eA%;tCpg=CSLZ|4y zo-%Ga?vRSGuFaKp3(`vOpVg~Ds12ivP~E$izRfJL5XM=z~jL*9#{ z_)^X=Fv=gRhM|{P6VAK4E>cbp+3L6!Dtq#gwsy+PQ+jX7yEqeP`xYHX{p*@yi@bGp zgYP|Yw_U^XdwB4QR@s^JVdbk+=-)HUkj=iLDKMVeURK58I#a;&;z+M*7mwvwYkS#d zXpHL767<~5(bIq%#Kb_ZBE!uEV@9>5q;3Qk!FqMg!3sUS?uPP5ptsjY?<;qkIC|WZ zw7r9Xy7-!X^Q<}B671McZ|a;gOA%F_+((mZ3n%yaKvR{@45}waUx3ZlWi{Al`izwM zG%pVWBi5?ZKuVGtxk@pI<>~{gi6WCaCm-)CS?hhXKA=~B-T9b|KeaV*X^-fVw6x@3 z_s&0THGe9wiC7!Q5kgZKcLK_qlL8LE3?)9Q0ts*@@o#qP?Z7MgUxC>Ac#vbQ%jJN| z74g8!{u`DpPD~lGum&jGw;b7pc91$dv&MFO%&I`3EM#hb#mZi|EI*Xj^%QKGUW*Le zIPCq0?fDPV@rS}8f^lYT4dGq5B&&5k`%pz>A>>aR<)5hkorAz^c{vBf_%G+EHZcz; zR)q*fJEbIHtv4N@ZSK|8VBLDxccc7fa;Z?dg^Ii3<_*<=xUu1yS=;HLt)k&(@OHQrv4NW4ARj=>!Y`Vq@`2(X#dOPMqQtwY1@*=%9eGo`! z$%a#jKR}-G!(VgGmV+g8(b62Ct8T8#A)o=iLG`+iM&EdmfzG;HuipyXTL`)Nkq06l z(#!NR#3fec<&jXj4&`AwDB)ri^!RStjBO^%z$!cRg5v`_N{s)w6r2IV?svAm)6(6b z5w}*FZU(5#2Zw-8N>@Rzhy1~B`v-+D)nnVGUZ({wY{^;t#b@G^ScoEW<05}AF@NUi z%NR*G7lh1&d5K6ztb?I7Z~o$gDcVu4vu}W(7JI4L_ec$MVI9A*3cG?)Z@c7TMO@vl zt$lzhlDIvy!ec}U`&{03fg~6iO(peBHJQfn9$U}JR|lI>SDl&Oq}vugIXvQFGuZs{ z$BRok5ukEcGmhdBzPI_OBVv}%DeDTuf|)EzyL;OrkqJ#c<)_(q40%2K5{zXkqM?3t zKo%ycx0(z(c@YIInc7fu4ksd<&zNfhEpG-vRlWNkED8xhl$*R8nf#B=jUXnzqb3O; zfUN{|+dEAs8byQZ>q!OHMW8BEv*V^_B{$39Oy3RWf5%E{2xal8!gm;TT4p@wtW!Ou z;gG=fzxu}ifX9FFn*ZaLTOPpHGK!p06zI1yOT*3W25*O-hH)KRcjKrrLHX6})Zg*} zYHn2kJjet|Vb~(%{}2N$gaP`fH-M2M@CT!qL?yc9U6E+OMlSQ)$?Z z3kT{@f!>cN^MYG%Pi|xmR7rWYj+es#oV`1=3(4#Agwhsl2c2@To8-fzxbq9Y8=^$* z=Dt6i$?ENnKJ~*}y$2LnQMR?FKH$1rf#7<21JgHp*?M+JRNN9}>oMBt6dj41{>A&{ zg|vS;s}qi_zf-Rmg%aM#Du!h#^cbsv`sh$}3b% z^d-Gt{y--VL&L$ zr93hHUnt+`cXDSAc?`ME`S-z($1x<|aff7$DjPS~ub%a!tx^zWxfLz(x0KvM%SvfqY6BUFgWW*^mEk?m$ooa33aK+Hx zEL+c!7mv1{+~rN(nsA*?Oz&UZV|yZk$VNLkY6xJaUW~rue2R)QO3!72%AVN^`5qOg z9xx$u=^3b=86_?mLCr9<7xEZm!cs~38Jg#69jZ4$+Z)|Zv9-V0$}*BNgup*Gzx&SK zXzCSVH@MJuV&>HwPhc3I(!OPTv7$D~x^Sq`5IfJn1?rGCLZ}ea9Lg6EQIk3p#F9%5aU$ky&F5 zKZGaK+}ER>lr;Rp&by9OGIVMbe)uv>N0i5B~$$-_eo{Rl0(5D|oC}ld1bi1jwVzLPR=d71YGWJq1-%`)o#)qNJbsC-d6pQ&t zrBs4<`%Mi;S5sL}UsGRbSF?nR;7B)q+GLCxH@Qk06jQ2M3Xf5lNHTZtQ}unb3B(ZA z$(?oVPV8HKy9FaSuBSe{GfFq@ynimQo~FVl0Q|mObF-K^=*BhdxYT|8kjPTda{1`f zhW16-x1a$dVddG|6_<3;!{*<_un&_$TvdDazgIUi(UTC+lCK)Yk0OSGVWkry^p(~n z-9QSZoV8N|AyQUK2*m;hHe6u_n*U>=*Z*L`B@7G1a7`Rn`%Bj6Uy1$xS*EDoqQU7* zo#+>f22p<$@3DV7ApEzY$A1o-hlI|5{NXxTnf%Rf+7YaNV7V6f!*%iizJmXp!Thr? zCj9^~|&aR18hYZ@08Q#W&wv zv~|!&&W^7|Emc8eY~Y-Gi*glSk7uOTW#&C8Z>6C0p{p%rWN?4d>rtK_CcZ$!Z9;t%kZ0p0xWzVMg-Tv8@e8A&8`n!G{s^WeZ8ZDD30U+l9*^9$N}ts znZqb^<_t`Qo!%o5N}PcT{S;30@g;SK$BdYnn{N3Z7^#)LMHkGna47R7Z)?AFDlRn= znZhbHl&F*JFJAdZPKg4gCZ^EKeboEjOUL^edbp`_Bg=nM-WuS9_@NzZ| zHq|$!eJPJ>jTDd!Hm$e>O+L%m?i;OM8P_hbxMi`=0?=)pDFR8nTNioEjr`_2~2DDoL`EvPe)^&S44P>W#TXx$uhwn;O{)Z8#rut z9VjdE|5_t}qem-YN?48~!Kdf-0hB87I*pe_7h$-rdR=b&HLRc7 ziKqC@-qZ>s=<41QbA|VObIuZ^wilK;!mx{VJYnu33bV2|5?Opmm zuA3-)jXl(GbtPJS1G&b+S~8Z}6M`%-R6(%PJG|$y?}{AElrpcCfOl_|x~YtIHyj(y z_Z4{pdI4JOh|FVy4xWS#js(y;vZ2W@wTX6rh@JmXI7Dz~V~Tl)%{_~MrX7FF{QtcQ z{B|bryB4QPj?A>sbkw;(Pp+eX*F0j)>~~aE?%`wb!Z? zLGVXL0RdGMUmk3?p4y*s3~9rx*bjA=-)Yy`vCS`LgYquz-(B9o9vI*oNOIrcP~6Oy zuw(g=PT&(r+!aXV@LG+k4Lk!=<3x@hw4;pMY`)Z0nf6qD0b-LshUA!5PpK9Q8PVkP zW|G5JM?z0@tOa(LUNWy^uXCz=4w}Ozr;-<@3@btxnFG@g_R4SeTjO`GMwLU4{)6+6 z-_7+;CnNu?<;$`(2C+xx(3pNd9>M6{3%r(Tc_y>3K^+Xg3f?=31Y|ORXWtEAV13x< z4N>G#QOG_2c!PuSoYE>SqWfD8frQ}kd*KIwsDGo|OJWO2fOAu{O=&s&6FN@Fv#Ke5 z3)kX?S*j@7)3(1w^d)B$pwbnvd8I9%@Y>(TPy#ttJvLyNt`B=7#T*=&mc6acJnu0^ zoL()}K>;d#X}*mpuboVFEsUc0zO`pEE%&CJVS}pFz0rbO8-^GA6nku9ks8L zfA6k~qsu%2p>F*7;d?*^gayjn^Y))g-A1Rcp^z+UJX$A!uB%JaB9QpX-hZ~aI&Ft1{Nqs*MdVYt2OSRX`KSuZo^m1Mqjep;H}3i$ zx&;xqCW4FyAT5VJgRXNZyf<18Ws>{~!BFuKMaKLQv0VZY9MfmhYknNNEaJWrY;ArxGf|eBPl}@Mz1e10X!PVp(qkg4`6Bm{GgQLG0QTl_yg@7!4Ze@Ma=5hc5&2Ae z5^?Wh@~GwjYYeMvxw)Bp&ZBrv2Yx29Vb*?M>9P|J)H912=^iNLHWxSZ`;gbehw}YI zA#ImiM4Kz&_AFP&Wy;oXzhMfZy3WqkW;wG$lfJ(-s~W7aT=k7Lwk%;st!0`aFTqU` znXNp`&i(K*>YyYGHm;05Z{U>Lqc4xUYu$&r&lHV@AG4K0>MQtC46V_HX0vId;EtE|7FYn)6xP>g;RQn+QRNr1Fc2x zNMR})DbndP`N$}0akzS#T%xt7C!7GDWh4gt9#{jiUzbh{U(35M_QXY5(^Ic=5fjA zb1v|jaCVkS2nrD|<~S;Pi6s=4mgeK`lCgpdU~8{1ILno!H0;Hz6*f`Tb*0h^1KGWI zG52d?cz;JBHeYrSJZ8)y<(qv+faIiBIZ-^BfYT{cubF#l~HBxzACPf2EAKRimoxUf*{`tk5)hAi-460p%gJk< zkurJO>QNuJIPdh&PhbqCESKb0kcyUqSHPu7B!c^Pf&kiOA^-GWsR(OrNKT+`)DgIS;70N8&kY^3nB5a7TN*Vf%9}WWaXF9dU|QXHgRnU_sXp+s z$D?NThh2L8R;|2@Iu_pR!Hek&XG|6xqqV7P%P)Sj_}OS6oBy}9{I$y+HTtFUA3 z!*hD}n^)hU1o%r_d9q;6k}V|X80(sci-}ErHr}4hJwq#j`23|X%UDn_3MJpVs@Ue> zt!96|O|ezDDoHs*n^yD5SGni}L=D4>aplQHCbSB+lGeYQMBNayBzVgdyve`|qiYK2 zH>Z5x82KDbv@K*Cn8!7hODicdx3a7jQW^uP@1;YUh>%VhSeL<#?P?9GxJ$RWxul*n zWiQ2pjjz=9E(&{^mZ_|A|^Wqfa39p_y3&l*@*ubZAn?|JZtSwGv zC&iI`zK=W!ZqPOdOch{!X|(6*5ML|q-C=FtowHIkWLL`RwL7q0b_ssY9?Ct^{Wq3R z;nwNuHeWgjk|6^l`mk?#_TT}Zz>gU_GG@viYMp6`)`YukVv_xPTTMs$JEkZr)9tzMr47TGvZS%oQ1w!E*EQJGz9; zd=C_k&oeJy$~w?K+{|F`c%SP)oJsjflI8dwjiKpGfj67gUDTxqu~oQFt2q%ijg(82 zKk)*9W6NG(s%2MkoM<0!uQqks1(p8D-BHBCX8lu6Tz|;~(_+Iyt^9(GaK!3F=?1hopOD$ zhKBXF!R2HeD#}aBS;rHrSeIw@Rq}FhT4`P;poo41Hm&IAsL!u|?%ZT1>S~jrN7-v+ zZb?G*=^Sjmn*KEs`6?kMHPy6~bk6&heTW&xILfuajH2nM+V|~&CoA2)DhJI?H(`JH zRs4q*n1gdCy$=|kjO^&1HC9AdRK0wA>Nc!L5%rdii|$}BoCk%M6k}9gS4FCHXpst~ zvW9SXg|r52;v~A!HhDiGo>*SpUV|V3Gh-YujO|F-am~wX5L)h+HHInTk-%s_N7KFv zTMcmVY>(gY^9W3ITH0J3)-L_|V*aEU;xp4^FLWIJ3oRbtx9G((jfFZ%Vd^(Lg+WmK z`kl8$qmMdd4D&vP>>1|(=7rWnUX_?sPbE?c>MN{RlMCw2RSGe05}uOhoKKd!)%hBhPlDYrOXh?j!+WZXvdG5-b0 z6G%DLn0htB3Z{5i_1#!GP@u$qB^Q5Vwxc&tAHN*pvXs%RobF0M0_2I?UINYDey%M} zO-6$FE8l1@FZs-2=`(!;0`PA91?6|^%_#Ij&R1;Cpx$_$ZdB)d>zwb`DP4|`#F!-) zYNN>F#Bq4{Qvp#V%7|fe=Wbc4T%Z9xt&nQs29rWE#%Hbb2PNxSo3lyWbkuP42us9N>yTRHidk<2Kp z@Gc4eTCv#my+fuXAa`iIBRcu3$=97jtlkz#?QyM`lLLmdd6C80byrs>u<3mqn~PG5 z(-BW*D0K~1Me?nCx)^Ajpbsl-%-dcLKYdb=Ktw{)X+qbe7VTpe1dOfy*&htSkYw6=42{f0SK=IKQb z@&nEKcIS7>ZQ&;Zjyk2x>FUE$P4a*l^IYPfHn?5te`A^djl%x(;B-n9nfCR9A2VrF zG|pb?bmz~3tgt#bSQ5+!kALN`1&sNbect|>vFQWSi7RZ(KkEN-eI}dje>Ncs*^|ml3X=}B9J(r^ z58I>oTxQ?b!||NYbTfcGp8MbjGPr&Pu{kr#Z6EmNr*ki4lA$TWCEyw75LcDH9+Ak@ z)$m5oFXHc>JnBH3nk$uO@V#Sar5}o6vFY{uI21C_?3*D)v3%2L@g8t!J>Mtu-t&sJ zvWV`xM~3D|4-vT@b92t*R;^o8@2ww&zf9;g11oo{6`tDesH!d@s*M{uN7?FK80SjEHzI$*SU@8z3!SImm+ATtcuA+ z>l?NB_>R@Ix7+nXs*<{bxfs*}{XRhtF-tc|Ql{boB@{lp(_YFk+&O3Q@Vc8TuGKm~ z#Os@#FKvfwX#M23*D}ec>5Js~FS^xR#FyblKg^D|8FY%}xAxGxyq_5+#JKhZe)_ii zmgI`>{3eGIjF?jgw?{wnp9m0!vw(Moyqv&4xh>>t8Zk%+V?ni6(Ka)e{!~eqduILUj(x`8r#u2SF8V6$-K%8C6AFhM^;u;{|!BiJmME-v_2kZ;K)a-m@I- zIUg0UK)?9*%Q7iLQKlsQgNeG37o-1a@7zeMhS0L2I-};~>%n zRq(*VK%ud^R~3(T~sXL*0HO9_y-J)WiC) z(qNh7lU1xY8`yoxDMRzwI0wW0)+Xg9AwFt(RI0-Lc0eEIeZX5oo~CZIztP4xLXOSk z1>Hpq;xle$Ep=jW{S~oRYRHTuF3;q#s&JWJq)f6zJh9+VpTUKmn^wDOqGK#$b5NjM z0}WU>RzhNT)J`+b384UTiGdeU9s85X1-e!MA7gS~PeQK84u`*+7{t6cwIG0GQuVb4 zT2Y)@fQ{4J-r}|xNW;u}d;B{6pnwo||B#`9D8h@W>Zkj6S={L@P3)Q$NtC1*rF*=& zz!ug9aW#8wNyIZ-B~roO(d_w|HM$PA5#O$t zd&2xEMGb7j@7vu&3%PI}0z8+g0a1Yb-4L&M&W3-%f@HuC{Aza|`hfO?A^&Jx{ssH< zUj~W(*)m2o$TUkkkl3txV~1q&Ch)cYF^3*&mc(b4`Y?@^=S@jA#=%)*;Z3_+ynQOw zA3ky1+~IV1K4JjVkS+tr_eg3L*SDGHTi=QvZEy$+g_vgSg$Es|Z6&SbP`^YAf~xWn zcLdlFS00(MkYCAMf1v^1&QjUaB}}hM#cY!jJrQF)XYQHAa~^lv_TRdu!x4J@l2OvD z9g$TjpTX=3E%}YAl)cH!!7|{oqVX|lsn~@Zz61fTIRWGAyC1a+--------+ | : : | | | +--------+<-- EPTP : - : | PDPT : : | | PDPT | : - : | +--------+ : : | | +--------+ | : - : | | >=511G |---> Not present : : +-------+<--| >=511G | | : - : | |________| : : |________| | : - : | | | : : | | | : - : | | <511G |->+<----------------------------:--------:--------------| <511G | | : - : | | | | : : | | | : - : +-->+--------+ | PD PT : : +--------+<-+ : - : | ... ... : ================================================== - : | +-------+ +-------+ : - : | +-------+| +-------+| : - : | | || | || : - : | | || | || : - : | | PDE |--+ | || : - : | | || | | || : - : | | |+ | | |+ : - : +-->+-------+ +-->+-------+ : - : : - ==================================================================== - +.. figure:: images/ept-hierarchy.png + :align: center + :name: EPT hierarchy API === diff --git a/hypervisor/include/common/hypercall.h b/hypervisor/include/common/hypercall.h index 3a57fcc8c..789cd6212 100644 --- a/hypervisor/include/common/hypercall.h +++ b/hypervisor/include/common/hypercall.h @@ -334,11 +334,12 @@ int64_t hcall_get_cpu_pm_state(struct vm *vm, uint64_t cmd, uint64_t param); /** * @brief Switch vCPU state between Normal/Secure World. * - * * Hypervisor uses the Secure Monitor Code (SMC) instruction to do - * the world switch - * * The hypervisor needs to save current world vCPU contexts, and load - * the next world vCPU contexts - * * Updates ``rdi``, ``rsi``, ``rdx``, ``rbx`` to next world vCPU contexts + * * The hypervisor uses this hypercall to do the world switch + * * The hypervisor needs to: + * * save current world vCPU contexts, and load the next world + * vCPU contexts + * * update ``rdi``, ``rsi``, ``rdx``, ``rbx`` to next world + * vCPU contexts * * @param vcpu Pointer to VCPU data structure *