From c651301924d006e16b453892d5cf5e9823f83eb7 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 16 May 2019 13:50:20 +0100 Subject: [PATCH] wip --- .gitignore | 1 + Makefile | 3 ++- c-v-rust.fig | 31 +++++++++++++++++++++++++++++++ llvm-ub.png | Bin 0 -> 17245 bytes rust-prevent-bugs-1.png | Bin 0 -> 17738 bytes rust-prevent-bugs-2.png | Bin 0 -> 4073 bytes 6 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 c-v-rust.fig create mode 100644 llvm-ub.png create mode 100644 rust-prevent-bugs-1.png create mode 100644 rust-prevent-bugs-2.png diff --git a/.gitignore b/.gitignore index 2500f88..89c7adb 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ cargo.ps tour-main.ps tour-6?.ps tourx-7?.ps +c-v-rust.ps *.1 *.tmp *.txt.eps diff --git a/Makefile b/Makefile index e0569b4..e461e66 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,8 @@ SLIDES+= tourx-71 SLIDES+= tourx-72 # D -SLIDES+= borrow-nonmut +SLIDES+= c-v-rust +SLIDES+= borrow-nonmut # error message # E SLIDES+= bck-lifetimes diff --git a/c-v-rust.fig b/c-v-rust.fig new file mode 100644 index 0000000..1d19abf --- /dev/null +++ b/c-v-rust.fig @@ -0,0 +1,31 @@ +#FIG 3.2 Produced by xfig version 3.2.6a +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 5 0 1 0 -1 65 -1 -1 0.000 0 0 -1 0 0 5 + 0 llvm-ub.png + -810 -1350 8604 -1350 8604 1748 -810 1748 -810 -1350 +2 1 0 1 0 7 72 -1 -1 0.000 0 0 -1 0 0 2 + -675 2295 10440 2295 +2 5 0 1 0 -1 72 -1 -1 0.000 0 0 -1 0 0 5 + 0 rust-prevent-bugs-1.png + 90 2655 10200 2655 10200 5130 90 5130 90 2655 +2 5 0 1 0 -1 72 -1 -1 0.000 0 0 -1 0 0 5 + 0 rust-prevent-bugs-2.png + 2205 5400 9610 5400 9610 6182 2205 6182 2205 5400 +4 0 4 72 -1 2 30 0.0000 4 330 360 8865 -990 C\001 +4 0 1 72 -1 2 30 0.0000 4 330 990 -720 4275 Rust\001 +4 0 1 72 -1 2 30 0.0000 4 435 2415 -720 4680 community\001 +4 0 0 72 -1 2 30 0.0000 4 435 7170 -855 -1845 Attitude to programmer mistakes\001 +4 0 1 72 -1 2 30 0.0000 4 435 2025 -720 5490 Compiler\001 +4 0 1 72 -1 2 30 0.0000 4 435 2415 -720 5985 should help\001 +4 0 4 72 -1 2 30 0.0000 4 435 1740 8820 1755 blaming\001 +4 0 4 72 -1 2 30 0.0000 4 330 1440 8820 1260 Victim\001 +4 0 4 72 -1 2 30 0.0000 4 435 2025 8865 -585 compiler/\001 +4 0 4 72 -1 2 30 0.0000 4 435 2415 8865 360 community\001 +4 0 4 72 -1 2 30 0.0000 4 330 2100 8865 -90 standards\001 diff --git a/llvm-ub.png b/llvm-ub.png new file mode 100644 index 0000000000000000000000000000000000000000..873996452840367cc545ab7fc8e2ecfbfc0e4377 GIT binary patch literal 17245 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 literal 0 HcmV?d00001 diff --git a/rust-prevent-bugs-1.png b/rust-prevent-bugs-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d1158097d8c2227bc7938d4da83945dbf93c9024 GIT binary patch literal 17738 zcmbWf1yo#Xvn@(OAV6>kAwWWq;1=8ojk^SQ3GVI?LgT^R-91?F;O_3h-QDk(z0ZH| zIA^@~?igQAa>&6-twg8T~3a|bC-D%jol z-CI;n1l@9|=;34^zJKUMioLGHhhxEE?pn$mozc$}4*7(KW%ff8%Wad}wIHOZ)r#16-Ar%N|CCakkqdL@!_l-!y8sc#I-GKU95{wZB=5rK;k6{YF7=~FrGxIk*c;$%u&-_1c z!A$)96$U1q_1|AVTm1WI3j6o*+Z9HAs>kA^!Za~E1bgx12)XTd`tNyz&RrG+Ii)fc z_*`(3F)#D)T5poCL+K-wI?NvD@7WQ49OLxTQw-2kz;J;R8ly~MyCdEu-P*AYIcwvn zp!~fw%yfZ}0s5FPT-Azo$l2NJr+#_%?^*ZY~uhU&QK+mNK?i`#f^oBLiSqt{3uA)*V^Eur+Tl_QbpyuP%f*IeYn$DURWr8Ct4GJrEY`zTE!qtjnp#?@|M?gl_S2fo z>WYk4U$0ll^$MQn$)Wot{W)h$FuyD1A>n;6zmBh%cRGmZ{fdw=OeWLYJNS`Uqshi+ z#yKK|$?{Y|bLZGOHp|Z|@?zCD_s;u1;hMsvYo7zwANkI{Et@YZvq!UI+)KbNRCi`Y z-|I&TyUTV@Pa3NQPH<XY9g;Uy8W_#@RdR@_wq^_!ZQ}eE&-rqMNDJhTFWvs#@pw#}w z^VWp3H{1)0=gE7(1~vzhXLG)E7w+!1cR%7X>wG?s;d4VH!1maXA+hz`T)2sz=;kX^ z@2~!IUvGBhO(J3>{pF1S8X?bIodq>ydrK-QEQOt8rLsb;GQ)8q`($nU@%+ot(*?J~ z=Kfe&^Oz|y38Q3&tO7Ol#>tv?t@-Nw95IwmqyCeRmf>liM(Gf@+A6W%f*3zr`O%F;wr2U8-0Mz&5Y$$GojTO zLERDuO}h<0A&=p$?>{>YTX0z098_h>ou559*uT~uh__igYQccKoAW2l%O-|qK0VI= z=)J$Yw1CRmiktdh9yomDrLi5*RxYD^at%y1A2F^93JTiY#e3;?Cv>*S%DCmF)pWa2 zoFE-a`%B~S2W6E0(ZVFR`_zveNB8D;X?%9K=X-2cc<~`h?+;Vom#~`8?#>n}QlmMQ zkeO0!yna3JbcBeABtM8x#DWf)wiK30U}$Y!3TRaoZr#J4X{yylD zqSrg4sp(lD+zHp>5n_Kv_!~g%hXd>$A_XP4LX{S5^p-v zMD^~E6^sKsSqKcav$g+PIXh>igB?^EH9l5`*sY zt>V_$ABTNj@>wj|-p)jH;SMc@wjAC~x^|#IwhhDrlZvPz`PUl~na1#j?Y*NIMCRa&saNp}41LpLz6Zg~QzI=ZsYsRr9kO0B71Z57*v~|~wc-PB@o1oK zsg%IFv~Pv@JT z9XUB?9X4uH1@JH7hLV|-Gi1;2^Ixhmm&`J>37#1aPpL`jM~`>IzO}!NJ>YurJfldW zKcLk|`wdaKrn!cD$De5|B@IoDprGJ1zF|QGn>rlSOH@~RUe|l*oCb>R7{&4wd~6O_ z1NRTI=iEt{%VKhR`L(a~-K_e5a+*v3u+|N5$;T3)Xg5));;OS8)<>+v#%Yeq3>q!c zTp}OR{G~#U6ZY<1K>-AOO1%?G5u0y*KJ~-x1=IZx1}i{r{-m5+$Wr9z?<<{5VuJ=ai z0QUggPrPaQ_}_~dBQr$)Wvwuu$Dfl>=Dz5*`O5{rjmlCCUS;8qw6~C(!nQLMC{RU+ zVk5!%>Dty25OwG<@l_hClA z>}9E9SpGR`YHFZQYX__yRaM=gp+hBVE)}!p#xh_?AuTM8&Jj1K1`%aeFd@Qj)ZbxU zudhTb0tAUOWVg4sjg$4l#dA74J2mL0+uBx3L{XsVe!6vav#hMFOG~^Xk>DDVqH1$r zz}c&-!jjW&QGc(H`{zKi9y?G_uVM!Lt??EVEKhK7unG-MprBO_f}kBXl9`6aLi$@U zmv|gDHZ<>ayrvvPEHDYQzmvey3K5oWOdmByMMZ^VfO$02wt_`hrNLn)fq~&ADAlMt zhaYM)tOT@FJvj-H=f0tYHCo(2QBiR%2mYB)tF^s-aelt@*_o4$CnGS{ySZ5i+S5=G ziudQ=YbTQI4dVj?Kf2ctUwmgtrdg5Cl6rO+>rlSC|5m zrBmlqi13=4%CR#yzFE;#fv~BWS((VPqDqX`hqd+e2ps|HOQQ1wry`6@ z_m+2|T8F+Yj z>3D|L&Q3U@=(IG#cki0)cgDcBjEs!9=5&cXy?BK^*)i-cHk48rubx8qmX5vo?yw<- zTDjRy>dV2qF4Ki3H>ZVPHnX#{!rZ~QHuams4J!S2S4U}#20<$)QIV0~zkg3ur$i{I zaKEu#-JK%k79u z$d!mMu-Yzihe}XfR74^$HpT?LhBO2M6E72aJihyl9G}_LU3{YC@3f&Qyr+O zs8-k3`uqFowVUsI$UK_vFd_z#-v<4#Ux9yn*CloV6ObvDQq}Ws& zT24+{p0&7lTyZoSI)!#Qxw)9~`q#%R+4w&F8=M>*DI9jWz&rq6efR)Fhl1%*DY)ae zScme1EJF0WB~U`jl-VBB&)3&ikl3VrE_2)m7M7NV9qKQTAsavP3m`7JOsYZ*p4n8f zYNa8{>`PjWU&mm!g^U_eT#BC%G7c=ze*Ij~R6T@lI@5@=_KugQriEk_7w^YudyX!! z5)~8_G`U`w`aRmA7u0FZjLF`02BmwMWVR)N{wk|i4uvhMTJ!w*@k#hS=) zvT!$iS?%rZ4xJcOW`N`U zLad0OH<@~XC@IC}<>hVGAQqICdXoDICFNgR(Rifu7i%`uoCGQ;De1D8N|R-O+h(6crT}@DE7`PQ4d{y}e>~Z$1_3{h65^%@Qdo zDIu3i{AyuA8zK7h=T9*3rp88IhU$!ivqSMZcP|x{?eB0r$|an9HkqZyi8{Es5*Ex_ zrs#j;JW0t2^LG*s4i|vWg+%>v^vc2G4NgY@>2~Gt$%u%ER)$izs;jGM)v6HC&}wUI z$=`DZK2a-|D%^>gU+s*O^YXrLXYlfRdVILUnv6?H@i>^PK0UQX^&ig?2@4NLKc$RK zW;h1<>SB!rzJEIrpGH9<_0Q}2eZX|e zv|Aq6d$9<*A08g=E)R*MqD?8n+DF&P>1rG1gCQFek*;5WLCIr5Zo{RIlU^YWR%#S~LMfp}sD zeatT{Sh1eEvu&$-2~U1$PFava+%}^qoYbz>oHoDl>462FI_y zj}KSNXz#hhMM*t9Jq7%biNBEA8`uh6XY!=4H&w$Aik^QCvunXc9pl8p$|8x_2 zbujFAh2WzR@7@K9Fdi^cD&NAUS)i8ISH?r#2&C*Rd7FB zc`cQc+tIlbn5!tiEkA{ZiRBA?U6cZQ@kd<_-#favB8QS7;Ld>sHX)ShJLn4G8P;>xO`(QQ;^$uncqV{`J zw1Zk`?d1S}_57lDSs~lE7kglif(TN{>^6(_4jnt5*DL-2VY!`;VThPL@2{)PrVHzr z<7m}cy&mu7vV<|Nk|v9khf}zmfQ73Wy)uy!H$&onZ#7w{`1b8vN=i!h&@e(it+<_1 zttLDyEPW%RTAQ^lfN1x??+`L*)oVIBIu;sT#{2qq`{`RWD)c(RItLa=7uLyBH!Ha< zHG4D^7XvpkLC64;=AUmuZ^wuL?C21>`j$`fHeEl;3BbeAz4#P)dXS|UgXeo!R`me zMIoYG(9qlq+1VZYd6H9EU0sr&PeDax>*O@Od-><=#xHwqXU7H1w7i_b$jGRg{D8~p z@T-A=R1#~*prLl7^9k4}A9xf9!aELIQf_VlwIBh}YI0?vqB8v(Tpbg5+*mW_^!4q1d{&92{tjOvetkMDN4P?x}D)SOTxkf#29YlYuDn#aTR=*a5mh`yu% zQM3Hp(H?%i4*#w1E7Q>>Y^fIO^j@-en_F9ZV>pT21y;6Q`f`!pVkmgbJ$-#atvXO& z-`8fEM%f|HVBxLn0CDEh`TcEu-HS;eN8T5r3&1<9J2)WV14$HH3?QhyX)>Y?lNQhs zz!AaTfuq)Z*7o{XcP!!;Si4wY80NF5AVzbzp68pszr8xL($%%OzqWynoNWzfWo9xH zHY<8WCW`Hduk=Ka2zmze)Q>IH+2u7faQU~ZRvBXu#h^pnt_~N00r~s;S65&7q2LcC zb7U3OD+ZTMrh>Q+3y=Ikc;O`~L40In=JJs1*tA-|+W6J^`9NC))ZN{^u&^-T_xJD5wY9Zblce&-dAPZ&T(fW7c|(M= zMvb}O%Q&>*oa_wM=CDdKS_uHyBecJ~yc`-BAmH=7Z*)0RaC*mSA22Z(5fP#K&tcE` zuARXblEE1w5a%{iwP)V@*5qplE~cJsvv%F;pJtvyujMk0(d(~>GLr7@jgn+vP~v*O zo}8R~g}T0FGDJ=rZn0izb6WPe8kgaFxR}=d>edWm7oZIm=H@fzm+AaI@?X9L9=n`v zy12SB;v(Y&PquhHouAt?Rv#Z*+p^011vEiuNeOMzpprux8b0g5++1Ss*URluA6zH5 zyJnQT@bH2DI1I?ABBc;^o9~c}`zAeKebJuiU+j8I@NWmhnLgnn7bp}?HUWO>*4EUz zVarv6_Q{e|h$?26qkQQ#9g^>=ocz!HnyI$$SOmDnm}{7xuO67j_Cjro$#r!%*C%VrO}kJ;!eIcap0_*XEGwt&Xne)$wU(O$34lUD5JK=+#Haft zAE>$!3{Oxy=B7T{>y^KtXtLv@;SUivO(T~Y*k-Ml{iQL1l zN7!346sQUmNVGdj$yg*=B$yc(7yxf*i4O=3MP-io^@(G0a#B#gq_B_}KR+u=|La%M z74l!!E8jPN_`jjoIzO0Kwo5uby}7-`Tp1b~`g(M;+WCr)j}IzqXh`-}8WRHp1co51 z<{L6z-p8wDujwdVO)(Rx*4f#F0U0GFrS@AEn0` zJkw{sTMm84wW~cy7uO%SP`E^b=x~Zd|5k6w&t{xOt4J6%uT;9&EOz@(s}CY!SB8Lp zK(4g)>3T2VWLQ_+idJbQB^F@Ok?n*6XxRy{)Up7onL09%b{Ipxe?L8aHKg6h>~#6Y zDz_f6aC*&p1vxpJi(SRRrZ{?S%Mq?-3hW>s9|33Q>w1Sh(H#bZKI~Hy@Aa7qeUIC7 zB11RP9C^jjf;qSo=SGlyu(8r+d7`8nrD@8B+o{AquB8YF93ZJqNJ3o8q)z=AxKO~Pfy;LUoXV~m_XY<2Oz6q@3>;^Nr4m8 zrvE*3K$Ow%`Z3yw5J#seUW`8e}5(In@Xq&9W^*wyJNaU}*i zy7fliYuLP2E>6y_&d%PA)7{-&z(k`~E(~X^7Zw&$c|FvWmHl;9EG$Zu(VR>4AZgb8e8FFmWS}Ub&zJ!Gsou{96t_6-e>tD%85rcK&@==6L%r;Shm#V# z|G3j|Ds`HNQe?J==QoefpO<;uaQ%99ae_Z$2A=kh0`jCf88IF@ShsN(5A7K$?ka zNJvN!hok7A5Dd5sC#M@~NI?6_k9Y6tj;>(uJo%1~N3$|8RyxAPEwz?zg5%zkeI$YQ z_4OYhCpDU|KYR8p(dvYF;XU-v$kEF7c%BT9PV4Np)@?cB`YpzDQB=R^>gr-6ZGhAR z7!8mqv%^d~0x$r8@B-45lVbpuyXS@=ak^QOY`)qIIKLID6?x{wU7MAz*3!X83EQl! zNjGR1@9xRjaI7DS6cLmG8Awp4$Hybfe0>|XAj|b$79+wO9vULkG8_L8P)&sriFZxS zfGi;`O~78B+F8`GC+Oqj<94wt)LeJJIhX`Ka_ni-cF=)BE%n%yZE}KYZ3*fDgk~-?D7Di{khTbCOapd z4WopF#Oem$?IJ!hJV~)c9Q>j*!h^A3EZ#W_PSz)&z@wpAZBsW|I!U{3&5Z-TUEnZp zY|Nb4&~R7qCGSV-^Mz|{JgXq5PaeNN2PnS2<%0$J`uqsX8%g-~ylN){14RcZDHkCj zEDzYJ@9h;^XUjX!u%*}uhCl;EyPsg=MRNG}wUo!ztb%mhhaH8r{K7&##spKWJbW<# zS(0Sq$-m|WX`wbImJ4m&bviLFwC7b-(ZXM-N$i1R~a?!3|qL67eY6 z*KJ+I#1P~9C!bLLa?JujRBP2SmiGKxNDgyh@_D6K5#Op)cv(Br?lWi1fP;f$&dNnk zKfF!!xyp6@watx<&rG0pz(C8vK~F>LV%0wm!_(NC(Ncnim8J)X z*y@Qh00Y0WH@_K*>+6A(-ZeFKiQ>k>oRk$6C80J4gn*Tuold=qf2%r?;GE*(t(+Ws z5BK|})pYptW3rkpe66TVKluV|gcq2B9e)b}F%=zVKY)L#(8T8CY^dLVcwUi=*v>%E z{Tj(dOG_HWHu-{Ym!JwZA_{iU*Ec6Pm^x)BU6!K5V@0YD6_l_9s`)?spBfecs{eHr z=1MK7^oZxk)5QgM>aD)kij9r^VR(##rvaONGWs>%6kJcIr$n=4KHC_EhdUo7%3C*H zfhtCnw1X`x5UmoBeX1Doym3{U*ioxj7Q36GH4tatSD^fsbtqOg;a9l%?fv@+_0~QG;)FE>MV>y06c@Sa5fJWa%=ivQ;cj4b{?kN>G1!c>FW5;*=x?eITu|9^IS!N5#( z`L~`Gn`<^;66S1k$kHj3a!b~w#bbLt5&7w=2_SPI5h-ZNIgmf{FEqXIl^26fOigtz zHEF9VO5I~4K(DYOd-(EM{?^7UJ&A5wW>1N^$};>H+>Y}p`_#4M;7nnS8E)W&>K!L1 z#m)&-l$E!Zr}DnsrPo+A9+8uopnO`VfQ~G>q1F33BAZULZaQ*95V}v!2j0-C%}h=p z1R})7E=a%o&gp<)`sR;1IgUWdGZ-BRW93f_NP;Ryp|@I#M4|hIV0NAI8AkAr;)|VN z>_*4gCQ9rSYmxGJ{1BYmi-Wk|h-N5`oChj@3^e zfe6VL6LUK)C92HjI%}Q0)%#Ia8&vtAMmxj()P+=3MOMoXc|QwpPsZ)N_z0mRIn->| ztW&t5T-Dac)=vBgn)iFIuiUus@u|y{4sEV5w~<{nQ)ZUSP?o3gi0tnU`9STcodLS0 ztH~K2p{dSEPL{*CZSO5RQy@?d*G)iV|2U?|#idTrJvazp+(DAe2Z$0cZugdjE(f;g zH63j2W%Y2Er{?Cz1?DIC$x$wW&&mz{GFyF-T3oyQJtQ&kaWWxRNW8jS>S$q3n=Uk9K zx^4MZk2p$KgW}dq zTd}gbpY4dl(;#YIQlia6MqFaVmf85#kLASL&L#Rjd)pw8Cr##;izMnbD=&o@KZ(eG zA>8xoCJXn*_k2Kq*#UOU!u^SIa;mF7rlBYmU20-=W=7Rh#g3OY#-c5X3G$r<9al$4q8ReEX#s7pwdMYE3|H zC>t4Zb{4GW^6Tc-`OI0PPGb~1XN0=}W8))J@r4#T!Ay;v|DWQ04ZWWTF{XMhFwG%o zut>hfrtG17Qf_pGB?cptMN6%rUK_j1X~=K$@vgb4xp+wWi(=e_3|=Pj_xyUc zvRr&$P;zCfhI-(Z$k%Oe9y-=b%M4!!n(nc0nzOuwAFa{TTYH)&83_0ShK_=Wl+TtZ zNM*o?`+*F=Jn8~)nNOtQkPHUgIl@LbNJJe+l5|#qZ}&qK?o?fqDT1FaX2C%6peyXG z5|^8#x%=>8hH!S4BR#qVDU$DZGu=_aSx|z!lhKnmz56pQ|1F-r#8VCt3j7jT4p|M+ zbb2b>81#+hqr$)>BGNFCMHL*iE=Jy^sUJN+Ns(fR<9fwj(jvx)TbLGPZ0&btIMVA> zCbB;L+YJ28>2;vOtu%L!_rHxO=_cM7_Wwi^(1P+iNr)^;Q9NWjIM42(?z-Q&U0kKw-pbw%aNV2(Sj4?-#|BHlg4G1tdtoAnVn+ISVJ_ z7-+hyW9f7)lBpj20KImf_lAY{gT822Lbef2ITBmLy!dZ$vDeqPMd7=; zx;8gA62wi>b4m+JdEKwkA)+)m-QC?`59SLQJ}&|JN>cn%Tzji9j~u!NIz2#vl8BAX zX{J2Gnh5rH!>b?JFjnF-V>|r({841m?5^kAFBPrHqUwN#v(X`egz4xdum5#4OzZZve?SYB>DzDWzJGTL61*r0PP zmGI(ddHGixDC=9yHP#gt1_@_|YdJqX9s3cRmgco}sL7|jyzF_WnV~RdJOTF# z=U2nS-Ks)K!h~eUa*Ksd!*BiW(2#drI7H{|Xl7eO50TEnq3@ISYGs;Uym$d>^+mC5 z?Tc&Y3FEkaPKOhejJDC9B*m&{?Vy~afYoTb5tNdm>5uyEoG?Br37?SgXmiu?aDl@Y z0%~b_GD&l#np|xax`G#<5+n;0Ow*-+=Fe(52SwLoi05(h?5JG-6#t`qM7Et8&@x&4 z&sYE-aOl*kEDzM!*p#8NAg%0+DFO=~F{7@frKO}~Xk_G%9u!y?6CN-6*!bG62xwRE zsUO+shfgOZ?uv@cKn7n>Ut3i*Fm}3Zg?F&nFuc6%welUVLq=~dx3co=`_0*T!zv0t z4Gz89{p48A@^zJE2s#xlZAyzy>ru-?*H^|#y{W)XL_|a&tm3m-rjPG{{aL2btZ^9^ z#>dCkOql2^R%PPDXKMx;KK;+i1Y}`Qz}u^?^Sqm&&l8sb8oO!`s32Y)PMWn3^Whu6 zz)1qboymCEQ^rZ<^l-f^YngJ>(X=?|432|GyS>i4*rUV_QlUxZ*bBCp_gqm^!BzGs z2qUaD-!Tu6`pWoLjtkU)Kdg@e<;U&fFegt4@JLfwhL0Q^9A?ucj4p7k2i5sz0VL4 z1KF~yMvOskZ&cKH@~rl~=N}lGaYpVaWO)4xr=sRZL(q11Z}G${V7`P4B_6$e#|2t9 z_NIRp)HwD<_ZHfmRjHN zuMKPEtyu--%)im)=ZBULZ1h$@gz+PA1|1|aekdQa;UUIF2DzrmFeub(3ws4#6dqabpjSWyPiG&@8l6lU0sXxh;UEC`U1*6+qTT{?dvowC- zPBoY=)dkJyA_f}<%B6w_^9@$Lk!8C)$0t$bU-Bg7P<9sTD#g^W0fk_N@zG(#?fC7l z_Gj;9UmX3x!NHSTRQc0Z+FeJ@UoY|GU70~ZM6|KBrJ|t`L;y2|gM;7UD9ekR-ju=* zJecSXQ!dkbhc_o=_Zt#bk>=@oaC=eKa^okQ#`kuSzI7zU{7pUe7^%rj@WyV)< za~+o8Aw8Qd{hav=V4`=sU;)X^0`f%m*iWyI_Ko(C6-OesFEiEnR`JM6RfGU8zda8iz;^Kv=OTM&j z((XvS*-Q}Xs-MNfo0%2u?wTsn3n?mAR}b#tmozk}OIuoMXlMWn3N%^)-J3L<-W*D5d6>4yrK0Ko zQEl5<>#D(6I1#uv0W{~d3JXcHi}^;aJLYN(cr-jvR$mP`KE8Il;&j>->Elh<2b zUJe|yJ1h-dfJn2!ZxI;0+*nq6`iJ&m&;zkeEhk4Dfk4!;c0%>U^@W~`Tsb)FdoMB} zH|S%h;^RxZri|*vQ&jswCyp1>$_psoa@{e`URnAbazCSMJn!HnSQkiuQRp{6b>_(CR=!rHVY zLMTQW2{urv^jeAKJ1C8qm{6Xi!b8JBrl#sL3yLWCu9?Sw_0VofT)x!qHK`OvgQ;Tr z=RVK-#ruuz=K@yRdyV;uHG_5Iji_ayBYam!Xzv)ID(FB9!l6+qHy+hXjfojOnzy#K zC%D_0*WTE5r9M~4Mo)MkKsFRk8;n@7Dbl%Q4E&R6IWgLXJvYBEbwiK=FX)9Llg34phlNRm{mX+r5QIRh z1TmqH_8@AbCa9#O^13N~(X=o!n$DHN56Al(7XOmsZ)nd|o&iPyj{jd`%YO+s|NG9n z{}OKg>+1jSy3U`6?A0Zns60wKn&SRJxcR@`-E%OB7;We0RTq0GfvRyy>M7A*+rDf) zoQRNo85xNDSt>23{%Z2?-Hkwi5&i?zE*jSDDJ|I#&bL*n23kxKI7>^ho}RKL;EW?A zdxlnjKL|y~YovN#As3Bg4T`FRnbCpPm1Rw0ISa>{^^N|-2?Z$n^n6mE9;G0$23?-I zO7wCQH7&i>Cmoo@w&z3&QIW(0Jvv+*vyMC8^PeJ0zURsKnwTi@^Cv5nD6|{I#3+zO zvEOTdjEFNj+%3ctiH`XwDU&Bl(dc+EGc+_;Ns9glx2yaoaoAYmTb_^L{wJ8K58_GEv8|nrvznuGyFm8kgF08+AYx*H3?u^a5gE~<=n%!gz&epI-kV1^ zNjmb$_BE>(+OXit<5SExuXz&L(4u;K&d1rzDIWLeYbxzdVyNNrWQtPj*KaQhI|L`u zCr{o<61)7gH2}4iVjS9S4a?Tq%1JRXwMvDPVZNMCpVqzW8ME@T!MI?qS-+9t5FjF^ zpuHEw2I-$S+huX1 zSK7=FpU0fRx~Og3S~nr+tgZeSFq8By8gvbA{EEgde}o z&E!k3{eF#PBGl;>IYq{PZX_lHQlNimyB&0GMNV;fzDYwQ%(KFZ@TT(5`3?>&Jo@}0 z7Fqs*UI7i~Mzw|d#Wu!G<@TyjVc&M3X4reUtzkB130KCyF3XIiBZYKK7|+UDlaV3z z3Wvd&d-yGr3ay%PSH=02QFnJ9jjG;ah7SextEk>NI&JBFMkl+qn;V{FrtVyUm%74! zQQcsymvHiPmg)aUc(ocO5!)lu=9-T7iX#bUiv+zJ3$Pb$vs?N@`sx*VJuOS)P zRTB%HzI|U!4?AB6)!(}lw6m9%V#8;h{AW4;uE}vK?Ad?awfo;i-~Wjn|0VkVPnh}_ z#(?MxY5?H)f4&3wKiB%-Z~xyu>iE%?{7`FsCa~$wpY0-W={F^evHxHm3jX_>6bi0$ zG+Aqqf@LLMmoDBZ(Wqm3Twu<0RQV|$2!1x1?Dt1<&d+;b@UhqxyqYj_jZL>vBQP&@~TuL1U!(?DdJjFGhN} z!uQer8xd*J6f{&+l$0qg+e!Qa!gMN)RoPX={KF^yVei9mao%z`uJT=BO;laZoP5E; zBn0oQfOw14oM45lb4mvcPXCpniP4dC!h>pg(tFShp0=`P$3UUi zQOxlwNITY;HhoGQj4zeL?J+$7!|jSt_F^PoRhS74tQ{eTBk^j~C<$?Q=Tab-{dyQt zyGR%w)5;_40o*8eL#ku`R(2uI_@o9)R8SKZo6GGRSa`HM`-SzEQjL$#`}_Ldcs05I z{-bM3s~T60ViJx(G#E6(EnBi*UrIlz#&EnZW&avqez7o@snImC%4@`-pfF}SoLWxi zYjv<@Q3{F)x!PIo1=8ePD*jser`x{g)z2o%?6S(V#;|Mny`KSr@Kdc`VA^!nljSts z@7Z3H`O8I%2X~oAn~_?ny#uZ*=52e>>9kJx(r7Tg-eXH^l3Sz2cBM$@%yY4>8%R0o zD%%?^nE{${kBwtZX7L~68a%pF4;R~qQaCw1b~{3nYE7gxXr%?B`UVG=oAis6yq9xB zK(h<0pDtVGQ*8gn=;$ZC3Kddp4lb@8PNm6mQ_$x0tfXtSn0`#@_CCt~ws*}R^4&*) zT9hS9jrwFd#f{U!-0Sq32x)^a<(t}0)h0h(TpG8d&d~m_*Y$}}j=al#&yn^(Vzb9I zZ^`WVe_!OeUk3Ay98C0SeAO;%w|T>3PlIEji>W2tLunkPN`dvo7NR~AY8Z(x3u82= zFLKmg!KXF_mg)%2)f(-g^+xS3A*8)>voVw zBnEDamxGf*nXKC;M_!D37zo(m*VcXK^tT?|Rp1@q6@S=M6E5^7;!lu#A)p5VkBOIh z4=!{~z&~tf(u(0kL~vY?DRf2bVwWwRBASj&Dg}^wHiO$Y-JxlTocfpJMkZ%Co+TG5 zC4P#FV1=dD@-s}RH66)LNw9<3{Dn*hv!}$72|2|{Z?8U2%ICk&XF)4WPzI;=x+aAa z!A)1iPi+?VhHBm!4kR|*#2p|8hADsmkAT8akSflcO>95u+0-Rh0w*xEB&b|LG+AQ8 zDNvYOaQBiYu5ivk{U|1%&$g-B?1&+a93xV!+@ zp098kR51ja{^FvB;*~rF_M`=JJIE3hs3xO6MD+?H$Q39MbO(l~v0A3E87bX`fAEF8 zMRH)2?`~G0;m%)FB#7Y=d-UA-}ogjhDTxI zj4x}584ktE-~S|~drb5357TP$)Zd8|5>}ZHho4QKE1PC7tR6|POuDBkt*vK~GSZo3 zHhD@n5!T!&xe{k4{^>2X7*G#t{%i=G6$g#>4(Jh4B5O`F4Je$pZU#2ZORD8yG zgq?|shg6Ri#p#LY*qDd%L!%NglMsCk`NZpL6T8RN4Sv`=5-7aK!qaJ*9LTcI3H2<8 z$V7A%YeV|K(W#sG7N`KRuuA+Tur38@7!6ZpNxC#cJ`O zSfGH4_~hJG)q6!qis{|z{md(wJ!h_RkFUTxCSMif;=OTz4c;6y@s^4;yBWD4k?eqw z`IDl{g~l~JtHYpUCX1C?nQY0y4ax!nAQfb}n&0^1%v$v-dPQz#wIyZ5JQ!`ye*x!g zj^{{0NM_OB4b^lL2}$^zHHsJgxW$xPeCxRgrDOtCJjQZ$l{nD$4!$fk1)g|zir=z_ zl1Zk1@>*g0nvSQoh8q`+Q@t|nC!BS8F#n2ZqRh$)FJ$*%qu?n#qTOFAjl)0QEvMc> z1KxgCe7bzEXLRj7uQ)Na=%Ugb)k$!|_~D`#gY7wcg-V-V1zy5S9%G&cF{IL24VIIW z%SYGQzE%Mdi-ps@OgOtlF_dD#!Jz!B&jLTPSTK0bIFtS_Ycadt zuNqR+e5=Xs_bcoh+KW1k3Y-3#o`^K(Uk%OQsFjjj+yKj7%(!=^B^p`z|2}uiDfyX{hH|Wkx(TT=vzq3;+PGu>Jln0J3whQ^`w6J*d{DB|7G-Vi%QSqS65XrZ_!K zHPaB%R$i#7=_F4#pCE`I1%suj+LJy3h2LYmvU9~TZdxD3qM0q_ZZSw-7#AsGHFh9= zf+v|f*vq;X5zA@un+b6O?(EYxwT*gdpBOzWAJ-~$8k~ppDt&JWo{wm!tUl@AIpsdT zo=-X3_W3{=e7wiF6QcY(S>Io8`RRT~jtc<5KW4O4_(hC*@fb%>h5r&3EL8X}Q7u4) zfIozd)^GTSc%Sea{vmuhj=1;>gSu!)q24p5$SrJA>(vbKTmh?Vamg27<9GW`3kw46 zK5r(jzHG|?*N|pPWAsUVEq_Da)HqsC8Xf`KJ^5iqKtG+v@v@?-nV|P`-fGOV-jv3z zrYSt9|N1|dbZPd!7Ki@m^Tgvh-351FRTm}mC~O+wsrpM#`eHPfR*hvrfRp0||PL{Mq^xlevoxWi3)-;!r zie8IDVoDzRb+(kWxW5gdBt;c`E4c!T%}+g8T$dWjs#`TTvr8BDj&N}aarE3gEP)G^ z?v-k&Z!NLGA$?*Bg%w<^Jj`VtS@s~*!A6ve)6mVoIYpt4+Sr5qr+?Slqi63z#y2e8 z>vF}V`pU}L>qIg^2w0A^12Sa%IW%X*?X}@JWRv>fg`rPcABEZZly+0Rls>&kN{lZs z@^5~v@)$0NaX1MMe?98)5qE&Gev}5zn^I<{fb1$D1=*scwRXIj?A7)=9Mcn3iOrd} z>j!DupjDO$SJ$^)KLXs)g%@L^u&!H{RYD2{U?i?03?mw3uUp>Q*eEX`)`r2D*Bim% zH(5CBtS!oBo-y?G`<937Usn{UtZebOhh+DyWTRi1o7;ksn&|GOEESnwMhh%{{W=BQ z4{DL%fNkp>Jo$ZSKqm$WzQP&Ll-bha85P-4WsQfW=feC9QnlM^_lW0+c2FeP*>g6l zZY>wKmX6(6xoe)t6tF5mdh6Dglyh%>_VDLPjQ+B|tgI}zs2EHal3qieowW&Foqe{v zR+{S0ly#*-2Mev>%4_%Sz4`5)ysSK=4xNgHckMm{kNzqLF9rTvU5PfUxCc zXLpeqE;l4H>Gyq3gUe{YNH7vF{Q0u!Wq3)3=t0rXo+%PZvB}T5#45%SMQBQBiO-g? z#fK+Aq!R5@;+p)H%HsE0Zx@v3JUH^uxELa555}asTr8c8%XCcxBk-YDo9+-thRrm; z>p>9c)-F}HL-{}#y}#dVx&|8UUyKdGN-{C7vgS6go5Lvv@J-F#nzMreywq+yD6{V? z@>AEH$R7iEZ9~Z_-#A)URpnBQLAZ*;@o@vL^bQjfZ^$GfmA2w@v z$}Jq?kN0U>+qM(Q58gtR?JEwXh95zQ@rH(8)5n8PqUi$G9D8;CqNVL=-yE+7*l@hWt+ z_z8c`d>EA6Uw-Ss;oneD=m8NIg=o$N zd#r3sQU%gIr2`f=6ayoKRk)RXA3JU>bVMtV$?nY@?Ci__a_y~7H&sEa>S}7iy7PmW zoa3#|=%D4*-Vd>?qVsHE|C)8<0B2)$c&6cnI+2Ti?GMeg*0i-P%pt;BYEom2xMddj z$2=+96iz;+k*O(k4nEfBPs`W08F^)mu&LhTd(TI<^fY`?y~8jmDg9s_8T{qbf25i- zkMt##Vr`*wGSI}HxShE$@=Pn`v`6aE{?$HU&LH~B%K6SE7J-f5a3BJD23& zr&uCw2y1rXqLvPOErOv7i=}L@c;=b|S7QIM5kYx6x|2+IFZm(i@KGMSh*QHb$IAUQ zZAeMD;c`!FkfV(G7_2r4Wre5aoYvYqHr7fH_AdFduUms%S% z_Z)qAnMV=%WyTRU>BW0-yR0_7p9M8b4@czZ_ zb=y^mj!kZqT;Px_@VWBQVajCnX~h8Y_USy@>X=>aGW88A;turx{Q0i4qf;VF5<^O}EnJYE@V;yL3Ku9lk&sJJ zjN)%5-3yp3uX9)5%#E#npKo=?+9K8BeoPSo=VWO?oGKr$KWT8Y_}Z5>Azp*6hCy?J zu*~LWyt@u@{;GK?+>{xif7`mPe&wc4o{+N@`mducFLj;SVY9BuYir-tnzfa*T*K`lq~Q7U zJ7777UxO{|-LHq*5B-n(J;#jE@CSI!-^rYrX{J_F%#Cc4!TjzCgHmJC2qIcS)gbe$ z5JZ}d<2BSHqYV7YE^2Au!s*iw!R;2q%#;Q(Fed}T;}PtME#k`9HQjnAHDuK~TE)7- zPoZawAiF*wM$R;u!OM{Fso@?fy2$Dp#`ZTRfu{|INy zEcf3IAyynT7ROZX#CgN4X8Mwf2U%r+2GPy92ROm%ncrC$(7nU-FYhy5BU8>|i_f{m z=n3n_g?y3q=N)ZK^{_OyF)fQ<=9w>Q{03E}#6KjAD^52jv}}lKqBE*YuBWOnlT_;uiR+_*i8a0)-iHA-1d$(rur>=Us0i zcb+17UFDD*>s24^=tgEtGfv2S!-}*5bZ>~s*ZEA|#1bf5G!&y>v<1Jd_N?>H3@0`I zzfS!P)K;raD2JZWh>csx?^R9A*aQQKwYn%E9P~saOO=B(p$;n2504A{b`R8(C3q%5 znX!JqmmtGm__KD8VO}v986nduXP}u>b?M{>oMk7h+SH8lookj;xmQADb9(74nlAQK zVFq}b=(Up=@Oa)<%RR!ffm~(NV$SdAQK;>&TaEy>>6^YIrY|`$Y>SRAVoVapDydA9V+K zG_)q=b6A<|S{2xFP~Ba81lfI!sji{^#SetNJi29q!Nt7F(%L9Q^JIq5sfC-Ul=I~> zc4Q+S*IJ?Q1_%FjMebGB;s;F*YXsO9^QD?#m_REHZ$*PsMO_9>^<_7rGj3W*VYy0O zZ{u(d1jG1~r-Y^-=K>p{Yh3K^qFVl>$JetnY!$S0$@R+0TK)OOgx=QvQd1!o3Nf;{}3NW}i@joQettUIsH{3iaRZ>+8DXGL$!zpC^iXFL*Cysn;-|0A-&# zCe&&xFbzJR9ttYT*M~eh*1N2XJbc^mP5!S-s)ze3*xz-cDn}=Y8$?god8DB_ z9pxL+Q?Rcu>T}WGb!{jrKP|7+`+5V^-dr>S_uMu@jrkR8ca3e`&y*o$9%kmZ9z$VQ z{8wGKpphB%_V?=H_4fVQ_a&tG&)(@o4Y>j4Xm3D^3+tX