From 5dcac0c3209e292d2063d6aa1387ce99b47cf353 Mon Sep 17 00:00:00 2001 From: Thomas Rudin Date: Sun, 24 Feb 2019 20:06:20 +0100 Subject: [PATCH] train display/icons --- mapserver_mod/mapserver/bridge.lua | 3 + pics/trains.png | Bin 0 -> 17939 bytes pics/trains2.png | Bin 0 -> 23259 bytes server/app/config.go | 2 + server/static/index.html | 3 +- server/static/js/Overlaysetup.js | 4 ++ server/static/js/overlays/TrainOverlay.js | 63 +++++++++++++++--- .../advtrains/advtrains_subway_wagon_inv.png | Bin 900 -> 1173 bytes server/web/minetest.go | 13 ++-- 9 files changed, 72 insertions(+), 16 deletions(-) create mode 100644 pics/trains.png create mode 100644 pics/trains2.png diff --git a/mapserver_mod/mapserver/bridge.lua b/mapserver_mod/mapserver/bridge.lua index 57a04f7..34d709e 100644 --- a/mapserver_mod/mapserver/bridge.lua +++ b/mapserver_mod/mapserver/bridge.lua @@ -51,6 +51,9 @@ function send_stats() --print(dump(train))--XXX local t = { + text_outside = train.text_outside, + text_inside = train.text_inside, + line = train.line, pos = train.last_pos, velocity = train.velocity, off_track = train.off_track, diff --git a/pics/trains.png b/pics/trains.png new file mode 100644 index 0000000000000000000000000000000000000000..617f98853de537b904dd02e54342832d5e7f2225 GIT binary patch literal 17939 zcmaI81z6Nk*DpHYfPf&4bV-La(jXz--2x&F(w)*BLn<+JBZzbeNK2P=i?npZ-F)A@ z=e+mab1u(gz|8DiYyD#HKM^WQ(imvOXb=blLsmvo4FW-k0)JRh5W!E}dgs}|KTn*+ zWi?PxQ07;aS0E5dh^*ur4UaGTnZ93er_LTm8o83*ry6?V;8ToJPiy^9gW?;AjiHIC zcxu(we zivH{lD0r(n8y)z{A!e$9{a$iG@g@emm$^CE@sf<$RN|7<>AD#wGMV}kfs_qxnl#1B zW1c989JX&MJWm?K)7_RB-a{)11>l`11JUZi;8FXRQp| zty{}%;+0^jGd@Qi(LmOqncd;}x?$VJK9pZcozes0}enKEayI8Gz zzfOL|gcr~;%8-Z@ot#DpuQtFJuBA`nXylw_ zb=36KnvAF(ha-$lzi=C)tMriN`URa+@mV$AMt?=Nn;BLAc-M zNsfDtl`12(4u9$`m?n(Ei9f*sn~narsVWz@lPK>#oRBx~%@AeKspXR)1{g&t2Z5XB zmjHXd*Mb+S#t9)xp6JE(r|Syj9c3S$YdT6aM*1`29W@Y2bE%ts3^gep9JdcdlrrOP zS&2ElWb9TRXTM8TvWOx;UGlTUtUDs zVEYgA$@Ymrn5+3iELS>=3QEJsICT*m9+J^Q(zs)B{xzk$EY^0Q_Ee_%66>MN<-Ryi`ZZeqTuErZxs98Q>)^0uxr4wBP} zdS|FqZS$5GR86iqHLRE%R5ZEyEHzP{C=Eu{1+=MhA#7|KDJUc$9}guZkw7;19E0!P zVGv)ATBne9s+L%x^_W&S#T?Ft_xKZaa%oa2YzPxy^J1)0B zR^t55YshzmPYSWWCf{6kBGHQ6(okj)Rv6{qTkz%l?bJkVzB#r@jYwjjWSkey_JN}j zzYSBRCHPuolJ+pyuGh{+bX3-|9JtO{WWp za)V0N_?*2$o5w7AqKn))p@-?AKQ~#c@=^9*6UQlB%zU-w2W@{9OGJcVENg$6JvMHH z=e?e@8LHhl7aJi)CJZJ_$oxo=@nFyYT-i1q*u%uk$Znx zrON{gdf>Q$8HqA_YG=o#nEbYL;k!}7-F)lFS--u1-Zw2ieZCj_SvEtAI+{L5npX9w z(ffyRn<;IHirW{}IdZ>268w=TNa9i)*zqvDNep~Ntk-!k73?n`O%=s1yz!7G1hBqm z(SJF=_h!q%!a=2#)sXPUqF{LQUKWv|Frit&1+SCH0@i3hhbL`BPJcDxOe2fzVkS4_ zA&Y}B6-;0*ft>&+NufnZz|v?6jC@XpDZDrDSxGbT*0lQfjIqD(>6ox1QXQJe@; zufK3BL3iQ3pU{|Jku{jZsWP+dr z50pvvPSlL7^5mYA?#~Q$>1=pyf2(L~zleG3eZE&x$IZ>{1NulYKRaA*uc_g*dwAL8 ze=`x|@G?M>Dqbc^`Pa*-iKsB?%H>c3^XvFh` zRP=5BvjR;Xyw~eXDSXPru4;FjIy=-OFX$%d*yCi)b4IMOR1!3Rdv#Jxoc>JB9*X2cPCh7W6KQj#$-t38%_wShEwkTRT- z%knGcEQP3%8k!Jvvw`>{Dq+h3m%(Mv2Pp4eR7!<@{oFD1dGA%Kv7hJVYFP90t=aa5 z88IV%kKQO@OxTOII{5h7Hx@=RRE)LXMDI`&&s$G*&@+!jm#>E1&-Z4X!H4GcVKP$G z*xH^!mp{Vs5OJ^b=j;%s%Nf|aNz=DO{PQr>j>Qll0dh}aKHDE&&E~zfyR~{7N8ajt zb6y+ce>1dkir$@0NJkSM&9vXUg4KUUzyb-Nl}|D7SPkLf;ZZMA(nOxAG;H=eD>G&_ zZu6NaRD6PruG8>wbxPaVP+i^m?rbKkYqf4N%nET!FHawTj4Ax5J*g9sljg6 z&av}(CWMf$@B0%u%zDttg*;CF3~_z<^>?Ofd2jaHOqH>y#qgJ3nb|(a{iwKf(ZoE~ zQ>B`NDXfEbzJw$L+9dCem1|Oqa>KtIn%no&M`+$A$}5#@yss3T57k_VANW|j75U~9 z^4$i#C_;b^OP$Zv@xZ`<80E(W$6mXo7Jla~xJ1}<3XvA&Y>}uJZ1w`VVOB3A0&oK) ze+1sxFSIlBCZgeU28qQJ*kN%7h3Kg zK=4bW@_cf2CQ)v|hR+ zmGCE7qzHMI!EHj}HW{O?iZeWh6Wod@iYStb>VrkhiOfYWnx-ox^-{_(G)r4s*5Y{I z5f-|bgqRZcv~!E@7BEbYnGqJ!SQ)`1&B=sA8D9+a^T{x26iORxT6uj8xe@TvMz>pb zJslscw$M)=tLlQWZ4z8;xVEs?z#~l`KfyD=c!2uj&O?7AOm1)jDkfqe9cPj@{;Btv zF!YG6Tm`-BGBvlqx}SYNGBqshjwl2GS-PXLwXcBO&;&GM$~W1cDeni4I!2fl->^>}s9n+}$oSfgl5<7x1jxDI3~L(Rql?Bic5<3eO|bI4IXt0Kxo@rwO; zN2yW_Q{&HfKU@l_L`)J5f9EeD#@ZIYfD(X$57+7VRgBZPSWj5LK1GFnQTxvP!vb!w z%eu5h^mAeai{L=9=%3V>ReCtQhHLrOVTJ}{S&nK~@RfQOI#H~^N_7c|6>0SzZf?R1 z@^%HR4o-NfzS0apF zYI{dDbGloFqdeQCtQnRH<% zakU$X54C~X?10Qt<(zup{s^c{6}!b#pQIGm)Wi#LVfBl83z-PoVZuk365HqhqHTXr zX&d{x&B#dXb>U>R@(r2Bk2_zZxMqCRus>Vv?xF%etDPw(D|$PKE?{I-sN`G zZ8yT|SsOukkaH(0y%4DP#=d8obLaoBD!eEH z+OdQjYb__k`ps??*OM7MHm@2t5<5OURZi!W@LA{vB**EWsYYJBMRvd<9D%!0>y%(BnP(9Z~5kTVs#*SA+EVA!trS6l68)B2SK zcUL3+Z7V^~0DRsZG#{3-%BQ{}1I=OjUv`yMHVueuXdC;wE;Kl9Wx6jp0Bp77w)S7( z9s;lJtcFnxvv{ue#3a!xYbnzyX1I(9Unpb>xc*Axa8q0Y-O9ged=EbRa3cDUmtu4N zBs`~ZxJYPVYTyX7Tt$(?eu1xx{m)4D;X;Gw$sZ!F52w2`4uAvf&QxV{Sv-djh9W>l zL~d;D?Didd$?7e~a?J-*7F{M3&(6*+mb}>@dkc*xp(OTvxBt2xH%f+v6X2cZ+!5I8 z+oRss`bkx7*E@0kx9ec=jQ|c$h6R-sNhV$IPDVs21YG|5UM#ww47~>QX;NL847AYf zet59ddh?8}MMYo#=EoDv_bGK|y|L?YqJFbA=HI`6uU~W{flN+K4W)6I4S(Su5q-F= z?j>)2*MSK6{oUrV+HVbKHoI((-`!k@p8qy;L-oI&$OdtGl$3p&A0hCJiq~Ojp~|@Z zDY?fxu=%BQpv$(aKc62idqqV~esL9LdF_yt zPdaXMFjZSi3mGwRJyy^j0Q!}-9bm3<`8$dL zQR3gk+Z^`-jVp^>ZM=*V!hw7k%AgJYU1R*)0|ff@`Tl&FHXDQx#2`p9*1_?CU;4jlzuYpy^jnf)Z6jP~c@%elONz3Z4%=?_ z%KrWceA51KcL*30NrWWOEo0IYc83cE@-HC8<>j^6?te$A2%-=IjvF3sw?w5S8EGLt zXH(jsyYuTM5Oj~5zT?SG=ySbY1iG|rM-LGPbQmdMXU95$<8MhYG6ZX^h6Mr^j~<4~ z<+?L@=>Kp7Vq7f@7X>N~SMl||qY5KE?t2+m9IFGq!Imb4?-&>wRz#wOi0||Rat;DQ z(B-d+p+nnIvHEIxKUjS*TJP167p437`1qi=?{P4b@xE;FkZ4H2ujqQT&#I79yR4GZ z(ozZ#7VgWw^_d*jW4TggS`|$o?w>v<<@3AsQ18Ct32Q>}Kl!|Tx<9XNw>@2R*htfwl_6h1396=tC9N3(3VXT%nH;V1WH15k?X&CpdOssox@n9p?C zpF69aP-+IL_3iE*<4WqhJ;&Ijm#5;y@f~e{0C}2#t*PEEObna%rN91}t^Bb?ovZ8+A3$xDg^q%qPW{ejErtl3dWb9lwEzkHC{aLhSpZA< zaGcr>`JwoF5enh57`DA$|AdT@A?$q)D7GIEXhIhY&Ue>m-!N!HDtA-Nd3br7{91A! zzdHRqL9{*U+RJ~dgQ;wXv)?RwW65@RcADG|jSLM9jg22bjW2dm5m z^^kmHf@iMyC^yn-Z&CScH+$d0$W=TGJF6|{x#-A3?lML34e_fdEcjxo%x5tAvRjubq$|C7Po=yOS1O6KUs%a_OLG5s8SPcbC z|FOr3B4y=ycxkCMV6`udJXQ-8KWDs>le?;L@ZG(;Sf&6m4j{n)ZrAw94{$=!?6BMh zK6$(LqP^jK&c=Q3w<9Qt6mGvw+OLKj>_NMrQi@`s71>J$^y5Mj^@}Y8QKK7`Vdg(*{inr_fw>$6ZCg{)hBMr4fA$8M zqT|ajq)=Jp<*2P>2NMg;(+kZrQq22xenqEG|Bmuc&6Y4j8%(5k;BgsZcTvP`s@!fW zw8TtCzMEohH4USnWZI5-wM(CxWm`6Sfj_8Bu?7yEq(exwQE!}zu3 zr(b7h5J*l5o@(X$&laT-*C=?1vWQgF777+=I5}r%$&GDUUPPlYwvipSCkmd}5#0)a zOat0Y^i5&H_iK{L99gWl+Qynt?OXWdwbzNZ&~{B*mWcs}i}VQeu5EK92_M%P-& zbZJ%-qncL+K84aXT`K0{(h}6Zo$UL*Ol$H91qF>ccA=+P3XYP$Wk|&n7;EKGk z!D}zwryTIGM#=Q;pBZJ!EI3gC(8Tw;l8J|A3WDnPy9=IUSzGY4EGNNb^_`bChjBD& zZpu4(u6_)73|Jx8pY2eUG?1HX`>TN>B4d9irdRrD+9czT@%?cs!V~1Z`TCKi2Gj0H z$Mqfz65jH z>Eqva2Sp2nQu}6#z7deX_jfmCwKSl&*4@hH13*k>jJzv=x~m9Z{g9R$iqG`S4U~a0 z<2!3WNSKTlJ42p5A}_!pP$`TQr)@lAn;scM`~7bFIPd*|d%NJ(Mp6h?R~V)?zdmB% z4~qMLVMeW9RvB&}@#oDs71Dp8O%ZFfH339(>I_EBdmE$o-Fm9Ve6VIf)g9F0LOcGw zuU(;-6qQ+z83NGuX#l_)wM}hnOG^(>%x$c#=gt}kdmL())U)=ly^K7%HO=)^Zs$?M zWfJGpj4O!%{{LI;x;fqc=5e&fs$Ykts>Q$4;sKOe3XAUAsoPMNus0~W%Qs6G1Kd`q z>OHka@P(NfF2vas+*m2bmz8J;p90^doN?sCDBs8>%GBKT9%}>@m6kF=!r$i2{wa3e ze8h?;m_qChOF|as#bE910pu$K0{~z(IiM)#pU(!~OMAvHn2&=E=Rqr&o@sXa3uQBx z)n^-dhOd3LGSI!ML!-VuzE+yihgq=W++UJsnqrkc&T0OO`-Gx8-7dCCL91M+`r~Tn z%|Y|Xuwgye^`@q#z$Z^b#o_X7tuBD208Y6Y4Z8{k@+Cw7)2_^ zNNi1~LnjBNqI`<>9T*$ZZ>tY=yIiVU>sw4nnGfJOq z2;WYi6*x@}WeQ%**;MV1<@KJ;7&~kg%g;M6xA|I+DKZv#)d2Q1Ri=Fi;Q#jW=-i&I z^>jSv%_qPwx$Wj^LqkIWKl!8Vf35yO%PEx6L@&GJmA(xZ?$ltj#TE68(NgVds@K`E z0oU(tQw|Gc!HL=)rHrK}3A4y3x1o1i_0cXNdz<)cLjN$*L9OUS>t>Jk|8JH2Rh$ET z-8h4IaBv_AsB8bT9ga8MJlAXG;`jj$Lw-e>(em7-xZ6z*UM9!zVRTUOpE z6*<`Sz+}NvZSEocit(RAXnf=t6Uw5kaQK^6^suf^PchqeO3OGeY^C%Bx1^`bbx%OS z|DZ2C1NA^x_xdW{$YuHyWrBOATsP0C4WKYEN3`WV1i4m+KEHN2+nJh8iBE^bnaJVT zuN|OMh!~)l=)VR;LM>v`zq>{;#xXX-P@rUd`bB z-J$=dm$*yd_1Ct)zk+1xPog(=9^wH!BBtAP=Os{I9>B(>`utxb+AxAUCA$l0Z`Q`X zGHe2h?Hw3|oViw&(PF#5|6mR1l@X9U_x-{~2l+V6zon2Z;=9q806yY#*m?mGo3#f{3~wzT0(lpV zrXri4l%mbG@U<8;x@wV{^z#&x<}5*WU2N98F1q;ta~FWjE}oPhd8^OSr=k=lJc>Z) z`O(aaH&06jk)m9QAfI0O5Y<#)YpGhMztQ8WVh0|I20 z?uS`Muf3=h9+O#Ml@mQThgmh&cR41F52R2k87o?r)Q#qWCMv501zD89308!a+(6l?JSzYEQ-!(@~d*fB|u&Mj^uelmq zN0ejj7$E-)UZt_bq3amsCnu>e5Jja2q>a9ceo)+lNsyER3Gyg$KusY-fg+<5jsjzR zhSU|1%4Dy~TG?$4ZsJ8?y#onXB~s&kVGjYiVNmd}h0FFgdzAwzztaYQlzSjO5X6+U zU?vOwwQ!u>Zi0LPsdp0i2e)4-N*RX%Q9Rq7@dr+_HQvauYCRy2S0`H|X&hbr8E${l zEwnT>S#`dy0H)Ohc8NNn?@{eiNrXZ_b%as)c>rq{$h>*birKsYBnL;v7qkRc2q^%( zM?+In7_eZla9V~!kcRET&l=B#LK!7ISgII@g-#SCYgu;7zYPaT#x{XCIR;hkZX-#V zPC2Wb=IvOCdQtOXn;;(ABGBcJA>#lz8_-ro09t`zVL^j)H9O)rJv#bv+4sVA@Aue! zc;zn8d`nHPyFp0LAe2}rUtFhk!F*haRe%SeFc=8dstuU27{uH%v_D9=Egx(2+?@ft z0+q~%uY-I3Xm~Nz|AebVb_7NacD}Kdv5Rk4(jG=@+5PgcxPh}wP(uViWnSB)r%1i; z`DHrt?lrK60R(JZZDk(TscEFAV zXA0GRoU0dKH$0#BGheWqSt1AS?gPXFZIlhVaD}n?&0;h z<`c#@B}It z!o_shuMc!|Cgu#C9Bm3B0JSuqxmsjFbGIdRpXxwVCf5K zOH}{o8HyXoj6$pF$w|J~bp`(do)?`idZ|?*+kPm1CK1|r-P)>nuueZ2;C#ylX;>5( zOgCjG2K%4V%U0}qKv3>8;7Yy>%Q%8ho*mjcNgA!+-aWr1%M5wD)(;Rhmn}6NScPehUKe zy*@<^5m$`c!cpZTy$1|sPN#J`Fn|GSx>nWcKZd+dcCm5QYGid=L!<4eY*ZVCfgc+( zp#?cxAQ|Jy)ajV=1?>1SC4s2`+y(n&)6I^j6py0pkpP#K%~a^S<MfEi_bva$wdI zef6kKf!nB*!M&YfQ>okNvl>I0}xo9=SaD+4bqR zwV9n=g?6$ZaF*Ht`30!G3PubPmk2FHWBSA*%d^L`MXmGovRD`zidQX)?ALm70UFNU zFAJ@0gH$HAHTp7%Z6$Gk)@CeO({*EhhdQl!C10^bGF)7mZvP`kYL_ z=kgz;dLiTo7$aomeBNQ?m+uncbXhYgNnWf`kBu3(N1ur=^{67zS*SfUT5Oa(!vh)} zFow4EvWpLhRd-;PK_N_o4V~PIhBF;6DH`Xb88eOx%eKe_TvVPZFlux3c0F{K4MGqm{+ns6l}+W^ z#cG@MZWQ$<&VRpWCuu{}6%ruB;+B&D^G)9l|5`6?YAeBE7lc2M2?G1ck4KH~v>~H7 z0a*dN?hlyRpI_#JEn5CBph{61>P{LpeF!`QX@mGdqbYq;R8;=~@9 z8o;%hQgAvBNF&Z{9)p=Y#~3gJ0gF8ZnbNct$*d%}U;AjXCTklJvA_F~0H6r~_%Hyu zjvyqkU>;z6nj*&p1UCR_fem8?4h`GQs(-I^d@_szrbQ|cmZG=k_3c1wNCWocYUuul z*sYKksEcoNX`0C(UDCNM=JZWDiZKH@@EM>gTSpv-X^2=sJ^meFbO2cMcfGiYF`$Ss zF)^ShRJN`IF@hKv;KfW3mHb(#cZZv+od`>1_6YvxAn;&^OGPHlAy+RMLf zywTLs7GzxCn(G4f?Hf0Lo5dM6xokfk8Gx)Vh6~7Syle;aeXKe_e3kfY04iW7n=X3U zfk^;z3s{s1FQsECL`Cq>%n9(Lx|jSP?mfQ0WQb^ZkmXOKzz3LBtQJRX=LJtJ87 z*o9$jrll!2==B^T#{NKr5}MJRh!wtaLI#0I;zdXTD((xoT|QC(_mP%&(me90K(6ZG zK22_xxf*Vm10_=HuO{Jsq0L5WoEWTl=W8eeWiHi%e=fnFJjWghRYb=AL^ZwfntX6R zNvk-)smM&gWmd>@zP7x%5$+TeS=n;EQ})@FiDUNomsx$W&?b{?VHM05ZZHym{p zJxn}$Yr_(gO5&&Gq|cuajIrWPmh5mu1dj8dL+BH|4;Iv1_9)n<93JMhKTR1^@URJy zzo@^&=-SLW!1t#S)(RZdBxhhdPN873SvZlU(n(2fZz!VMO2v;Cn#VH_LbG)2FVIEF zRb|HEnV?RAcSn%hnR2`cv8KI`dTqA8-D-}JHn*9Bqb zWp(e$u4EeWR{1p3jrn1e@NVKy2;g!t8b=J@k^DH@NK$WC;<&CP_lLD3-5867~kI3K}=$IObJ`cE5<82%9fO z?VVd)T%Pa!NnVu87H$^(=I>}R*^uNTKpP?RK}c^uY`_ObA|;fP`Y)F52?mVMB)8hH zZnH~#Cc(;GWd0Z~%o%i~gu#aw^+Y-HGqo1O=UQFuy8ilhzmeC?qO30aX>RXFDiv>b zFMd{dNsGokb(Rk`)hv##ejng*?Bk+@@B3g}g+-sssw$K5;I&12Q%@kC^YzJdwe$Di znT#H3tCFk9iEzOJ8QF#0YJ)3v&rosb-LlW=y?jV1(?r(j(+54Te?Qt95Rxw!u~lgn zHik`Dv>))+{WB;Aorf;)IECIGacR%=ky%lx5>mWYh+WDNqY!>LuJfCJV_PCl^~q~dsDA#DMS$qZ)R?{Ky^e{u67XC-}H3RCvv?!xGI z)8fD)gb^iQmc4y~HHH|0vfA@xSH$3M^~OOi zvUj}u$qvIA_ssS`uRGV^1vI#X<*adiMOe2~G za7ygc&x~qF9o(*r1*P`S6* z3GZLw@@70$MXBM&n7V!9Er@MROx#pSMBE>3yFirWtVsrSDcTqN!o4J!6Xo=0Ozb8VxWT1$WTFL;;m1|cymzJ7d5dES>@3J>%?gxA2+bs z$|bj(%yk){vJv8FxGa)<9$)WEdJmc|$Fs@C^%6>}=Fe^uJy$<|s_bR6q*AfWkbvu1 zNx&z$;do4qnJ7GgO|Q5O9XdlJ+g)JDsJd^$#1Y~XH4<)__jHExg~J&nsW2GWnm>Q9 zcKsW{9+c}?!f*B*=LDuI`;3|z8-+?Nah#44A|@M-k|HU|Sisbw#Q=#PC#QCCIYRsR z(GeDCCTpb|&VV2$CmHb+bI8d!v6HoM_SOPw-hRI}(OdLScT@Ofhi&4Xo1Ho9oI$V4<|omXCo%F*j~4v zj!UR=l@i$03}Gpt2bah<0oOl#UPUauRVdIpgkeCX7>@*P-(UUh^5k5%Tz&wMp9N>LKcx0L549ToJ3Llo!*P86~aO(H8e&UIXK*04$Mz2 zU2wH0lva5t-D4XAKbdua_1jI9^5M-Q?V>Uf4vHq99o9{iuWY>@Jh+w{yVT4le~U6I%iERoJB= zA2xmg3**$Hgm^@7Ft}_^jZ>PJ`ggYbS=78rdN1rSdv=tE5lN1*Lb9(#k`Y@Kg(@UI zCgvvF*Xtnd=wY#3X8-DVqW#`$p(9kle2_9|9~6Zzk_Om_V$8kA!4P@N@ZjxMA&fVh z$$8N!xdIN`BnULL$Jl(r%VK&4vQ*gG@!{mk$@Ja_^6cU+|CUWPeh2}Og_yUhU959 z#(Y>xO}>hqpvSxAXCq5@UDcu(nxt!*N{f{vhc`pPPh6XUx)|l@8pRqj3e`3|ktIRP zN%mu)`Z3NO_zDaa!*HU-+cUkBN`@Z`fz;$FO8mcl`ckH~o#b-gP$B&MydoR%nGkh2 z5DKK$s z$rLLq;u5}+Cr@{beD0S{{5`&x$xQ8E-v%x#38~b};})Z`qc5_%n18Y)o-^8NFfFlZ z?mt~J%E7X<&L{+BVewpo2d=VBf-6CEl=?gyR%p|o`dqb!Y-fc^*^`cI-oW!i)*!xA zxk?&maVj38w;%!vf@H+=%ws)SbEmvKhtyg)1dYrRJnoh9sz5UFy{yJLE}8}bj7~+a zhJ_KOApa8>nUUK=-?J*TP&LU?zl-yy{;#Y3X11EdB*%HU(ZTtmx#66>(9gkj_ z4>beyued}`bhXgb-~>+$=V|96MPLLE7U?P?N&qB7jT*cDYoaNPS~s3iIV6#ZjvlXC zJTOeAdmWR~M1hL3n-&!^2_Y{mzg!ViZX~vU$%uq%B`YhglgM4eA}g6f%cIz{C660I zvTNk)*)jXF3LUv@s(07j_kQ#=YS-Oih8sU7rb$d<217!cnn%XLJs!r0gcY}HFJ-5S zGF~f50NZdw#6#p!JUNzVOraw~R`pSiK8$0mQ***J?#C^x{E&5?*q^ed#bBwHzvjU2 zf(8l4!WsKpSCSm9^)F0jJL9dS8l@a~RBO#2_i4CfCy_m|eYyVCPN#{5@^fg}#o?9d z>S@GTbG^+G2OCy+hS+BH+hh+TVQiFeartfG@40mh!G)nyoI;yBWg#}<@nPcp@-kj| z;oPe_>ogLde^7wi%|H*xBL+>V+v}2|PsyFaI?8R2de6SlsX=m@tX~NrIiASwzl{*| zKEC9db9uupZy6LGFGHz|Qv6&}F3^&eTFKl=gbGWwq5A%z!t3;=$l%{^yVRM(YlDb{ zCO>Sk36&Wh#R(N8Rz^F}xGhPk>kDq`0S`*GCajWb-oU@(gYrBu+dYO9ylq*Yj2wPD zCsuw@4Xse1OC=XXp0XG0sSwHiKHC@iqV4oI=4n?V4dM8mn&hd(g8H|2Ublf^O0-7w z=kmAnFf{y}Hzg%OYB;FCH;mw}EthOpR-}h<5}C^dhp+Zrzcw~(@E>`R5gL(0wdtMb zv5`-Q)t5j=L|Gk+%jYvb8zdetW?o(pvx$l@;3I#yN!7D%&Z(Da|My(v$X{J#YZ~D+ zzTGDXC54t5ROQ2lah_~FDF(`t#2LV(WuLWB3o^xA@0PbrreIp_9B_G0%iF|=*C-gDxmX`vujV#*`;M6@+Zl$- zlxd)&yeV742<#hmb`e3Lmf9=o+k>fxpuxqQyyoQhEU@u^_(Mt^x+d`rdF`KK36m&HL+Z>^YMo%Rjs zUK?|T>y-)=I%;w}G7tny1{gYHebQU8VC%OoHU5=NrQ$i2sDT5aLBXS{or0C92sD|M zr1S5r26@O+i7_MO+CDcenp;2=B;VETd0#cL`O4|SZEJQ0uHcK$5(vw**78D6Q0%g) zdbalR(<0qA@`Xc-Vxb7opu)8*n!*w_Ytbs6jp2w(l z6y@|J1yp$1=7bN@hKGz)$C7p4#37Ul*wCrLsGCJnE%jWV?{SBfo)lUUjCful*oid4 z1TM0}nuE^Y(SrP6MQeGLhp;1sAa=q!iK-Q$O`)NcjTUdLPE^g9Di0gxRmcmzSBn%V zdm6-{-8DTc1RioQB7)lb8!L};|J1lSjwK-hhe+UsHw?X0C^t5f*7vC+yWXm@W)&j} zDPVZpIB>C{+qUa@vV4|Sc9NqF72nZS5BuA`Zjm26cl6P6>yJMvb%TwGNGXhm{7t84 zm2|bL(oCK`{nUo*tEgv&VKMW~E%hZN+%M2AEwvT{M~>B*L;G3HIa0I}gY*9F%+t3t z9|eCn?#6Nx*?6}n=G(T@&E6P{UmBhe;JqtRcq7D0QjRY5Tj)b1o>sAG=o*KNqKExJ zzj+6YvRp+f8hG5Zw&=Xra;D6YjB+~g$mIWNOw&1VgrYm2d3&E|u%;fmKcldih_xbW zBCA`eZ{bpyup~woHkY2M6wDwRkf21J7a38n;G~LF)|Z(d-Y@00JiM&ZASorJ?jR&# zT>b2jBY^}JRxtT5H&tV!UT^!I4`Ma0y|%*Oy9>!`YN*dw{@Tmd?6%gD_U0?*|L`hn zDA}dZm^H8`{)bJ7I7x^>?xd5A;$pLP@vHGqYIW`d_)wHpH^doGwxvSjrk>Q=IGOF^E5mWT$_B4!`ynCr? zg)|~5$N#z{LIgA`_4NfLls|#aK1D#F1Q;)W%B0F|G;g3 zmN?${hV|0GsYrn0qmOC&C4BOwD;K=g;0>dym-J8AYoVU5|K(6#ZW&XGCSsi47pp|d zM}E*oA_P4rJlkU6cPG1@7@OyE=?5s6_AE8E;U8Pn5ff2wYzTT61Tw+xYWNg9p@0n8 zxhkvA{+z^SO+X#_*6avL%(~ie2=I zp@465{9#%G{}r>>pTF*LQpASne9)JKrU}+a8`VnYB}PR?N5#C)Nh~EiAseU`^#;9!RfRf1o`dzF;iy%5D{Zysw69;R*k2GF-s#^ed9U-Z z=$CFyl-+^r6C2O#;AwR$(|&U5aYUhv7&`F(@j${0Er$Q)c33AGLao{a1cLPK@%IA! z=hchH+aLe`ADz`EER6T4z@_(yA%(mPF-_}SPid^cI{Wu>VbBabXYt=RNd6CPNL_$u zGyXD6x&DkqqIRO-(Z*a}uRoU%5p>x1^=p}nYxlzsH6f(`ujeTKcf^cpHsV#4Kt5$ zh}0J*YB02SzhUo2qHg+gvFcXvQ5Z9v5FMFI3M73@Oy#)I|6FX|)S9Q*i$lenKP&EF zh2&i5>cs!2iN|enGzLD+*TXm>EPh?CqVQbo=R1ZCqM3C!q!eodWi2dKGqb#1PqSGy z&_ZM2x|beClq&8&-{}AC)tvvHjX+#Gdt*>2?h;u)y z=|h5=VB19k+FOmSaj)$qN;Xf&&sEsEsx8e}_V#vVsS#0C7N%b&QSdov?Dn0vNacRu zPOMa^@pz?HwQd(dfrb>R;ehAKUql$nh=Qn!qM*ru)$Q-_4sPAD+N zALPa}Nt%c+1Ys-@KXDk*lHG)$PzcpaF`9{bv5mp(%Y$!$L&5IH;fdtMT7NkgtQcUb{ShasiPa}K9k21qR{oBkna8;&K z3Sa)FUsm|rKs_xj68ip{qc7*Oc!1a_B?Ql|m8{mruZ(U^R-G3{{T|9`){A?NyNsOv z$Fb3AVeK%DyQT&n6#8d8yPx}&PqdAo6*xKP;!6^AM_*^AX)IH%UPg}Wa{546DDNwgW4t~9c8Y4V0UJM&0gnc4JX=5|PdC>q7+gzc{F-~r^**M7~ zGh3|{_Gq0`>~thYbydrJ`1vQfi>_%SO#C#``6%~j0z7feuY7!>Ws6s|OnxNisCA1)E0kuQo_o~K)weLtu@qw>jLGUN6vsRLeHr^d% z_JjIc0&uJ#_4Gfks;XVysvw5U2UEMjxzHyNL(qrrS6c*~EPtw8-BAOd%0tVz;0tY$7tfiz*ZeLW zCs%dOKJ?R+P?-R2jgy}*?{V6ieTPNRY+z_^Ih7-SrtbfRZZ8euc~H)1M#S`jTylbC64x|METuZZ!)Z*6Rg!`x!i4 L{an^LB{Ts5deX2R literal 0 HcmV?d00001 diff --git a/pics/trains2.png b/pics/trains2.png new file mode 100644 index 0000000000000000000000000000000000000000..dcda1d1e86b5a3be3e2b88aefd5ea7b85eb43eaf GIT binary patch literal 23259 zcmXtg1z40_7wyo9G)PH@gwi10CDJ9`Ez;dB-Q9wOlG5Eshk^{<^}*2H+{3;9)kg=0 znfE=h_u6Z%vxf*}MHvh<5;O<|f+71sQWXM$I|cvjP~pKd7n&HI-~qu|Tvi7rzi#lkG&rXFJ`HPy;-~^Sazym%=g)5?; zCX=wRI70t(j{soWxE+uvJWy)|$${qL-1Lt#>>7%&4-Ghw7+?+Y^cf+%D zyIx>QO<#X$>S4De&ufp7^aA!kiNSW#PUZ23u7Yy?3p*jb)wREyvBebnk=J3BEn zufi+x)y|3Wpt#rOn)?$m^gDWzpFz`h+EmU~ub0{Qx@F?9GZlR1(TwRE6fP0MAzj(0 z>ycZ_&IcE*IJPf3a!~)FCMcAZG5L(PYCa-7P!vK&AAwE%ZarVF2^hQwb1IxdpeNYfR3-p|_HTJYtu&fvAv97Qz^DALY%iA;- z(63k$>}${Q^bplWDR$`jP}Vj|cs)|Ml6n&?z5bn|0JTA9ZmajA4J+4Kc>g7pc#N^; z$UPRG-@)=~kgwIS67}D3ht?%zAHSp17e!k#oiaD6^#gvx=GA_Z=XVd4Si5V=3{~Wl z!QJ1Sjqe(!E}FJdY6lnVvI0=<{TM=4gnTD!p%2|o{#~ooCy}nrtGd!!abGWfEukTJ zYF&KD*MgIh6+LSf7~puDSD(i=b3tPwHf!rSJ1E|)m~$X0$q@g1iL(l4I|p(+H*G>n zQI+I!t{^H7v!NQyAS%4g5B4I7q;mw}htNp(n|(db=E^+E$ly9NG6*&{UJF}-7t4zv z%F}oscU&AqF>K<5%6gVB{&eSya@dFoVTE)s^o$^e0J@K!<2h`4;o`fIj8=mE7^qjr zlcTVq#=JlEIh%R(kzWzDl_Eb$P8DGq3zf4))5X1cCFW20_ET#-?;#%Cm`u$wvPaD8 zKUx<0>&8NR_c%Czj-2CuShFr(YEp8H?Kry;Z>$w;} zy3J{OE;%E1Lw*rL;rrBFD5{}7asGV*&BD~dALj4g-04gx0-H5NwVIcbQF5}i>=?4* zC3R!LKet+-4#Cb>9@OXx4h(=v=$T3c+i2W;mm7k%z>W)kk-HA_!;hp=^jlYq;BkFJ z3d&qLmZugqL)mExOpO`Dg8c^Jpq4xfs(l?%JKH||z3JK49sh30&Y+l^zi zXV-H;Ky=rFjndd(D2m4ApP__+p#MK4}-(s?_uPeTCOZvL_LVQuX5xxXq{>iKhiKzSia- zYdb#t>LM#^)`eA6(fej<*xqe_SdT~)=U#t!L>)wOKj3ifM?Nm!)^&&Whkj7$413L` zv3GzEe{ic&4Qq~oV8f$RMN96yAnd`0hhz8r1s|}`Evp}gO=-wd*1VSDzvB0C&~Qwn zQor^^f2Z>bwHQ9$=ZuL_{n!ApJevR-#QFeE+&ABDYF$$hxkOMuU^@KcLUfo8{zdNi zj|%dqiVckkYKVm()QOYLh2tkRo7epzOlwXnp!>f zG0L4Xb$Y^WRVf8}`&|Z%a0z?X8-5O5kso3erED2#A)Hg~{Mj$72Z zy!?lG33=t0;e|>;3y}%+xd>=<{=R5v|8z7>Q*EgcIowsw=3i8`EoAf{DUlB|s}Xwq zJKEN@kE~U^r3=}Gx4NA*%axdVe8brB_V?%URz;PH*QAKw9BwW!dY72ahpCb}>Z!5O zS(G7>A=S7H5V+?35XXBobh1ik$?%otqNemp!U26Tf)BNxh$`4WE;(DsCJwiSigy$K z7av`ge%vr|A8rw4Lzf^5awcSzKQzmsA!47RCQLsLc49&AW&4xt zT6d${M7K^UZ`^pRq9Cw@e--i}z0jwya9^@Ip0Fm@I@hkmeR?&UCu5srJQ8)Fkgg|vAv6F z)lo=?yyKLwHWi8uVF=k(4HvK%n9 zLlbfYtIstW-O7C?U%xV0N+*`v$aA9G{dz+$zbKAkHmdI0+Q2#GV2M6vpn^FVvbtDx zD~j5WAFlhLH+U9yt5_?qV!)9rkiwI5bUik_Np##GxxMSR*>1@>JVh3z2nm2I{}ha)n@5&9D8 zzxWypGN>He>+qs}yu{-e|GDmOK+k^V5U&+2!*#Ck9ctIf2zndv8gq?d@9)Tf^)H|e%qwWbGlR+yHKIWSwSHW9 zn!tUR0xgCw)^g~dqh;s^IzOMbr=!{(`ys?FJ_X<$OdAz2ixrc53`TURKyy4cKzDB311BVh4qAarUCh7YIo>|;c2>!@U845g9Qbbw!W2FZv~_e{w>{n zJRY9rS9#=4f=JaVC1s?CG6`kv1e}zcm!g=YKc(`2p0hcq zRO0#ZunatO#ChIaA$^-AKD`f+iBIGBI}nkt=y25ROWZ5&xS#ea3-gO6i&%Jh&^wO& zP%MjnNbZ1K-+*abfnhJ5l-Pk(u@CGWaLSSrC9D18^lH5*8}H*zu~SdD+z(zmP5yeSeo z^kNT7aod{|(5;|54S9UHv&n2QA4$D{%^-;S`aYx?`dJf6=L!2}XJSHfS}!Bw7?JIi zNX4*!OXVZ;zR{0yeBI929nzC8`M4QbQ&S^>C3HT*+IfF6K;f#tQg4&? z@BHCvWu?ANYzx|cyHEd$mgBPl3Jkru<+>8*A{YuT@ zjGsVWmPg=~iq>F)#i{Q*0y&jL#tsknmW&+?Qdv3KKM~ZFRp$ErwE~8WpKugJ1@WZ^ zY2hVLjBlpAFZPP8=i@{k86Nfx(sSM~x_zC^yGAWw7_?bwkKjqh+u+hf8Ieth<&d0SK79U9Kr_X0mrZs*A@smS9K+A6dWU2B@~uE_nE7 zrMXg3;$nt#DAB(=;gh8*ABPf07ej9tYutp7ww|Nc5@`? zdcI=3ey4zoXG%oq>S=Ax7Um|bCVH}3 zsmcEe2J$GJV+!OL5i^pD3=Xx_q36q42;kVA~_g~U^9oOm7 z^f-KP&p+Ab9*b&dv=++^4-dC-k#${0r+MUltD8dNl|jIj>`s`eIh5MdHB8(nx@a6? zR4e{BJ#D+v;k(uo+6$(}{TUyk6@)vnm?ICC(Z2Pd0S*DV&h1R{Q?*Q=ILVG`{%j|r zal%Xj+t|8G+?(0`%U|iA*ubdHCPbdnI`8Qqq)vlWJ9++(;W#w0B9GT$6n-9H%xBwU z2m#MegJD;emS(b>e&srFKV0-&a-C^^xLmNAsU&;DAi4gJH&coNwwr?qFla^VR;un- zbYiEY_Nz*r`n`_3LuUfN%Q?#l!Lv~{MLzSPM7pYu+s|$b5{0r^IaG*$V`+JfvpuJ4 zv+n3xJq#ihRARSFNV!)BY2wm#Ts5hjC*&T`dNv*WqiXR#EdG@~*Djko)6aEWYJ8e{nPKS*6ezJ>U{r9g$z4 z<-*$b_=?Ds{*z65gF(c$3e~mOum3!4_;fp?_3p9@0jo~aG(1%-=mS0m5^-ZLrndhj zDVNos$X9PS?>c<%bdKP@xgRaRBxI=*X3=j^@2DQuvIjx9{}%TEsrgMfbursJ#~?~n zYK0F_pqnEj5$WXxvpi3~3Gkhmn#hhL*+(Jc0v(+ZPYHt?L+Q#%U=uU!VuXnqQd%a& zAc`fE((yiyvdf88l9m}!!d~^1kx?ql_AUZePgu_I@PLVq}vyaCz%x-a4IG1wU7xvOqj=<%@O0+ zTEIR1<_@YaW7EVUKGU`X#w6LA_-WD0dPx)v9F3Tx@p=4ciLODE;ROX6LkMjqMv?Cd zeJ2ZL50(&nHsd8Qn@{>*>uSH~r^huK{Ka^MQxr-S8S-h!ODm3c%aRa+`k&ggiPInj z$QAGo>MTi<7Aka!A77R6$4!D5NfX#R3tA98QnbEE--)|_l6|`|hi4}Az^hz!zb}s3 zS*##(TmEg^eSRN_#B$#2EPfD=sDM1G{kW6Im0V5Tf@BX3tt&t&%j>+4gPT&6wy&bm zJxdO8n2>eoqoDWOii^$reLYmTwn1kdJS0WhVwhklAfWw3lrnGu3|-kR{3rW#HtiUU zj7Umi;MTgkx-v52ZeqcT5rSb<1)h7uJPe}|J}(N0C||rm4Ps#WfBX5r^`P!<9LHYr zdNjwq6clec+E~)<@iAVmPa0He!WM@R!XvW5=>@RiQR7ImgN-&8`usJQeqF8p{TJ1< zkPFoG1SO-#wZ&C&b14Dtw+T}BrTx4Nr6w;O5IeVRj@)o0ISYvy&GslI2%t1)!X7N; zG6z&}df@@vSvuV8@kC)P*iGHv^FK(&(IWFY5sY~HY)II%Lc*~~aUhiFn8H#*{+oyt zQ;0jVRf`Q@8AzM3GfQ*%?j?&00OS-fFsb278F%4NSAEty?is@v!RU46+lpd^=ZJ(U z9aoI-p8q13^^tO3SRQq(W5b2^CS=#2W!ZNS1LRVXA*=VkvTNR)x2eiuGZv41pN6<| zKSZA=_;5ZY6HVj@D(};Qy?@!ypRy{CTWN-F`j2BgE4&N$2aPMm%`^tn#kDC=_1X1P z#$#(8(F+uHL(wxN4S(eeq&iVi#z+~VzD+_ENmP`|-?)H3NhtYjEoH1h2eTVF@zI1H zuQ&LXLf*OqH1&Tx%M*D#i92dL8_(u*-h;tPl=8?UB=ugtq&n<;@|&r`6g=*_IooM0 z#~A;Nfz``4R#9kW`DvI(S9cO22RqvbCiz!1fo+$=VYSQu0cN<+U@NEdcz-sL=W{xw zp`pQPF*@7k$q6afZ*`mfWeku#i^F{QhsyWE_N!$q;p^4wjX05$K0M7zJ;oWG4xgJj z%RC{c&B32)CByZQ)o9Lf-i>I^{S^C!hJ%}(yw0<6fiR5Mp9~C^8|_z~R};t3?`8{7 zl}V;A?Va11Hf~4DLe`Uoz$#dB=*8%~ovu<8zS-2SwFvE9SC zN}^}gZ}~S5oh*`@5Wd@gzFA}EgRQG;eLL}|dbu=~96`_1a`5Ky>=%%#w$ou?-}>$S zEHUso`F%R5r3-#CwmFnU;q_lWF{eeg+q^Y}-*vuCC|Ct&JNND&q|T>@BlDpVmewzS z3#2YjnQu-|3z8|dmD0eiB&O<`opi;t8F01PBdbpUGfkMY~gq$9Q zR~XdxVsH9W1|W~mJEA0b(kJqCGXcIG37wvv22;IVSb4lW@_)JmC86`6VL`8K$uiIP zz3n`g*ZF^Z&fEJ-tyf?s%|{(~241^G;O?VYJQE#gre8oMl=zD7dHz?1wRtm9hQjw> zy|{)(&cgHh#*zu7vKn@HoUDVI2iB!`Ie^RWZ4iU?2k2B$P0eYx^SI~DRvM4(yczTJ z9l)?3N<<#4K{!1xOru@S#WYAL5NzCj_Z|@5tz@wYcmi{!6r5YAJH78sUJ=R2epW$*6>B z>N)<7r;;eI5(b%>FA?SjgJR%-*r9E9xH;VlBlr3*01g4NdOoFOSYsBEmL-KscBcV@l();wu zqMenMb;gwpVm1St)-;R>&vu5)HrVR!jOXO&?oSqtjOPd>5q#3rY$a&mG#iXBt84)Q zoSO-9;re9bncl$4=I7@z$@mAapjkrRm*slRr+{~*QUrIe<_dWOm9$;nTvMaE_ipDN zyfJY(Wqw|#gpBzL7~6kgZ`SIUf-(7jw6$fkzj>8M8GcTsJrNKY8Tpc>X|)@LqK@Mi ztJW_gz@%!yk_-D>_eJ2DR%`KJd}zM!e7frdN<*Dxce%aQX2|eO-=e0-D)8K zGeYa(G>3r8S-iFn)p`Jn>kIhZ_IQr2w)PFc+xmB^zinDUZfoGvk;DM*Q3uc*i5pLH zs9^Y)9YRxo@=A1PSDBvbsS8V!;n{<6Pu0{r;0UAM)YBWHU#@)+N2Nj!cBX3TPGHA} z&k%j14B}SN`w$)CG~U4kBd5QG4lEF& zrmXQwLj^yS5luo;L+$0f&XpGl%OCBbcag50HSpBP@NhN%mm(AYk76p&80*Pc5{}Za z04hoqpKQOh%l+(cgVX-eEaHE z_QwNX&!!nu9oRT=eZ~q+o;Ppt%kG?E#h=v?scV|toqGs{@?nzfru`M1W>i9#f3lRM zU4$4{S`4Qw$o<8X&-iRVo4u1=B(72By8n~)vM0iG77ijBLcK<-y%U7u8~9c!!(jU* zNznIpav_eRU@6&~6}nELOLzy#9@KFmR>hCaiV#RwA&ufcE(Oy_<38+H-71u5$Uz8f zs%`}z!gXQc5bAQ7UN2f%C=x0JPSHQSv7Q|Iol0n*8m2<1t@O7E91f+p23ZmNO;?qo zi5ApjnpNOQNhzLIc>mkD`KTQ?Qbs2*kG9E0B74)p^JSLp%j~bhkXU9)f+!3ikMAxI zWOYYfGGjp%vs-L()NQm&p(raWi{sl)2hl2YHp&UYD}PIwKwKWc6_COeU)%zz5$RX> zRnC~^vPnp?5WL&3waoS0W-Q4D+AvYm(3krmfrM$>*YXHUP*DHelLhl+@5<%hV9?vNZ& zuP1J}=$*&*?FJIUiHpqJgv?t^`k6^b1e=>=N>^K=b}-}_Cm`4{(o=a1-?g)oR0`8i z*8ylMQDXo1nV;_H|MvpSRIMZ_30qHa%@xU|ooo!0mCge;3f;Hpp5po_!PPDrfQ^qX zfzKiv2w{q9)qe1MGN;cz;_$=kJ~~674BjTIfu~%(8WUU-oN@ei*qZ=B@az0QniV;S z&5rvb?0W(W^85t4_3P&FVlfKylZuG|h z+p_AS0sxB6UTrbzIFiivRC-VP=;9BCXm)iS+!HD6gIH{8d^9>f+RRF4MD))r&MyOG zSP1O}VJBa-ISm^wy`s!|b)Go>W=t@s}yS#S%nb_ueA2!#H^S@1Mr$sGT?Y93UZ09@pspVFlzR?-VnuNW0H*cE% z!?})Wl>flVAxm0<@{PjxZj8U!XhLUeBTeH`zu zXe|oVD)Ff}wAYJ^aXpmk>&1`#W!G&BG^t*rs|p0vaSSRSa?geK(`Gz6l%>@OTuL!$ z?KDz?pAfpXR@~^_DxVCz0e;X7bjEQ!$M=(ar^&WLG*%IO@N2*6E12o{1!LywqL<^i zM!(-hR5tAW~9DqMv~SrOsowbRV? zVOKTlFA69fFO&!dg2SC>B27EzQ`_QQ--@*Q<{uxT)Tc$42s>;u{nC)KL>9xQlSq*4 z*-Qq&0CKmWqr<=tJ*<~TCbsQ*Jt~Jzm#y)uZ_3t48qh*qQ`^kC4PSr<_pIG4#~15u zG>gkX(K3rK=a~R9gCgoTAnPoEhn)=kwK|_QjT`&8b-Bw+?y(vOjA!#YFVN-!Xo~|7 zm&^uj*T4t@kS9<($ppL*!o-VhVjeqE)6tsmY45aqh+gy9Wy2(i2@L%oE}moWpNfn^ zI@?+VeQtd0HxORgAO*lcp2Z3%_{a^ryl>>wpFMS{C<28H4)g8N3}CN8UG*zD0Eh!_ zPqJvSrUg{wH?d&pXrlbmz4P5Ea3|at>4nvF&}h+E_p{u4EQKj#^^i69?^~I%L%@)K z8TSHv_DzxJT#Y&4licXNt_A3_3JPO@fk6NKakx8Zj3ebc1*qh|m7?i(Fz@>NmFD%s zBf#eYcj{J3`L@l7SnqpC_x^~GceSwXh*eV~~5ny9qQk-%2NQ=bVAUyM(aDdEx z5y+PNiy1@U@B@7j#nSR0Kz9elWaAXWHV;Q&_JgU)#FFy)Tpyo9f%24i3=m=j=)AM}{%p0XrLS<_dDlCgI#g0TbHrdVZ39Kqf8S-W zAb+?jz@&i66mUO845-v^h41nM%f8}w2N#g-KobE7t;%<4X8jfyK=%N5?pTj}+eSiw zj(o7~>Fe9heSoY|-W2ze(MK%#W;!vA;L)#M$kw)k{&$Hp6(qzEcq1YxVdb3Lx8HS6 z_GO7lF|heQVog<>4gg+$|2PX%#CbW7~B@4>0q{= zXWPElYhj>dYtrKKUHnsvOGQ4j*VxM%dvfK{dEJjT5-5C_gs z?v~tF$RZ^Dp6*s=W@aWbI7`4qpiHHuis@{|U|FB-d`R8|4=^l%zMNIK08E}%p-;uY zzz@uM5o|PgJ#YwM8k+hkX9$3``X#Z&NFT;`T+G>vkU?o=71IN@TRj#xzilhMZ{&3E z;Vt>ghF%F{7qZCqgXTH4Ma}I1!RP(#%y{k6otBwJ?c_a_6*FZP6P$CA{N}Ha1jxUT zL^y;HPTTNh?sP4Tf(5V;5R!$vh+<}vS;H;S(v4T2`_q~>MtfP1f+(_rcFGv<)m5I{>2End?|md|J3_dN z^v9!D_VWB!RTV2yszy*3Gj#Y4^}vGDD?EtEmq2oT%91S#&kh%wvK9I=FY1yM5K ze*HjA8tN`g(quB$Wzi2q+h5FAvH$U4owt{rYCj~5Eom)Lqe$Becl8h1WK8n4u{LGT ze4!v{b`z^nO1M~_3J+QY{b zUAuit6C%o@^*Wgzm72zh8aCdxha1z3!WMcF4l!np8KnM1e)&nJ=Xx4y(HSX89Vd7? z2)saTPLrG(D%G=Q_Y@NFMbY5UKr_x@yfzp}m+(Y*wN| z@10ru0tj?3cXRd9COl9gqfLCjFhU=Ov1;DIIF@~uQNYcqzugpnQb4EO_Iqx}^f2wwXuzu6SnSx5K8+DHDQi6l01DkHovPh)v0*A@J~PL#Nr$|9*pF#sBF6 zP+x%HC!pr(H94%^Uce}Pj=Mj7THx3`FF`;?hXkO2BKk)H3vj&})-M>5@ZYf(=Idcl z3wRA|#ITqwO8g<)8`W?B)|(isyefx=Bq~SC$e}b5tP_0ifgCCf>uu2dfE9M}W3-q2 zU!q|~!@vx`jW4kDjyj(nkJoy4#C*ViX&8q;n86%C~67&s{e zTH?EOObdWE5nvhsyn6(AlPv3Q9tfzJCHN^Q#y}?2XHO2g-cHfydaM^FDU$FxZF=tH zq?z2R*%(K@8OsxS0(K&pMa${%+uk*{CWTluNOtex5_SZH=#Z5>SihAL*Y5i%U7$Mu zU0G9vuBiemwfCkZwEeWyJI$RyF(piB>auA(J53lI0rEla_cS|eI7$s&{z^T=p}Bbx zEW3zf>oi0cMaXK<!<3j4K* zzR};3H2*rcAFVh;tNu1VQNkH5>#cs`n{6PxGsN{($7m`}ftSSFSu>&S1y}+yd?3$? zkD4DqWErq%Ltl2EFA5+Q8H1$GaYNc>$uySF;&`TAhAEkVVG72-yj3qyZ?UTK?XBE&{b>6YiJy&*Q%!`G{VhQFs-DerNJ5sO`TNL zq*Q=Ga(TD})0qY}gTu5x8c0Hmll9+$qDFiFegaaavIi};QUwRRaNi0F;2{Mn?s-In zY~}9l*VkAn-X{_70XqWG$qDrCT5s3{5C}7s`ajET z6_RLm5WOn4U#UR0g@sZ+cXi~QL{@C?Cc#dh;ahPuU;eCApi@D=BW4%KH^3jSf!tBb zdVc^suh}~5Dd4Pe1BM9vMEB8jcChJ3ZJuYtBO@!`M?!p-)|u0we6-4tI`#pYSq!@! zOrX&(dzK{jExX09?V9p|HI^gb{z+q6xIWkSb_%HTkx*i8+3{#ESVg0boD11!gl}UI z9LOxJIunwPh8^(dNi=S&;W;=G@wBgo%MMjYw=~BCJ~RsMJH>2oAdW_i)bz#hEYE`T z7EJ@sEl^OO&027nUinUS5ap#`mxbvVh%wS<^*5;AKOkGMf4{TcT?>vJ<|aORi06A5Bz%Iyj_PoM6?*UDdL(Lz2Zn{r881-a6`k zXE%B>>8<1D!_92GjoTdD=qx3iW4+DtTYvJOtqE-zz6AYp@U3KVWDj_J)t~OmH1$4v zMBU+#WI+EvXOC1JLBGd%0h=Xo<+th9r#GQ11Ptj%ZX{=#GHS*na8L|&MEGnP3J ztMq{pZ)r@_f#pM7Lz0TGM|d{+t4*Z58^Iy!dSO70du~J9)~gu*&#muqJhA2l*~4=! zQG^(AL*?K`TJY|Q!pTP>RKJd67vNi^;Juk@+neh_%aME&0vT_HzzsHIpZte(Q_ox; zNcqJQadteZa4LA5u;7n%N_p#+1|j6X6ip#rNfQy)A91{cjyd9IrpVFASouYE1p*sHugbHq&KJX}s$ zxO~fS)OTRHFLiqyd?73q<;c>6ojsB-AM{f4&qaKmS$o~z3*|*YrSMjpnmOlp>qP_u z3ZByoQBWOl=9$fvS$E<5uc&${Tpuci8vK%q^3g1Y$Uj*cu|NK0bO;Re$~D^&B}_>6 zxQ1I{@N;MkKwFmyk~2qNT`h0Dt=Quj?@C%D@QR6|PQdeq|ueH?w z7b)wdW1-t1OdKCh3ipMnA|t}KYs7nnG|dw%Sm&3c_qYe6;EOs%w7SCwqai`59$YE$ zguxc6Bw~v_fuu_x{e#M->6LnSSh$<1`-Qt}ee39eY^p3A4V1{d+2r*=h*|y;*J-cdt91R8{aT zf@=KrTTJ$2FKD?ZBAV39P!qg$Qtb7&HIztVLjuS_$A>g6Nnl?&>=dWFawA(cA>1c}r>R-ViZ=q=!{S(a;P3=`E zqr9<2m#G_PMVgL}*Utm{jy1u@ibm+vL|HC3d?v-08Wx_R=I$+SMl(#fK=cezs&sgW zxPzpWF?`<@tYfy?bR%DcV&?lycevEwR#94N#Fb{-3(F_(vg-U#Dj5ZAH}}O1=nBDP zwvK9_SOWKn|0^QMGx&U$Wlu}~1o{cQw`9{cG%KtbMy(UqlV}HRlGyP{i8#7>QSl=) z{)pnht6Tk8Y26R@M;c+m{O_vP_fm)rd;h<)G|u9!x;aV3HN7}#67d-C2D_WfunWU5 z64)y#6?MJ?oFp~M3^L|Hwr+8yCagzO$&YCD99E{a) zY)o#Shpie`5yN5gfwCK!fN&ASK6@S1cO+45zt$_P-hJjd2Cd#2chi4P{HAy0Q{$~w z5xa#ZnJIM|lo;^0f>>APk9sS75qU5V+jhhA{*AX?pH}9yTGTNEX+Fno-@OQ6uxXQB zQW6<89SiT*9Fk^-e)IQ<;k{*u$GH+TX34(-|4V;7J8*}7Zf_g@+*0t*DfaR{AQUr8 zgHLspOkR%)pLCO9^jDDRL6SiHT`AKhJBJ}DIZnJY`PzP%KitExTw#uwEtW}*$Of%3 z!90NRhjnBzlOF9$iki{npx1|dT=DF3P*e8cm&lRu@)Bl|1@FI->m5$ar7%EUy1YMsJ#f#DiAn)Lv)PII&VS#wl5 z_s}Oofff2%L&JJc3eoz3nwsrP)M1s2`ciI?ii)~A7eqbzjdq%<9U4D%?ITCssHY9Z zkUD*2TwAJZoX;U;xw%#CPaNKKlX8HVD%M+Scm%$fcI?<9ow}>hZoAm(jol!oZ|5rWtuczw9maxzWv=So~ zkWZN_x&>!t%oTC!tKj#`D_F{Z=GVmM%x9&&h9OKMNp+6%Fs2w0yU%q&_Jkk&g&NAr9ON8 zs1|!Z*cnt-iO&y0HBxd<-yprUo-`{(fQP7YtNTE{{m3k3x{UqP#JO}{s{2r6boqnR z@-*N}sprq%fywia+pi-AIyD?&%@W(rc~{-evNwx#7#A^6@2Nfl!EZN~FwXJU zGm-V|CsjV|cPn&9f|mS=UpfforYcy}qFd*)N)?q>w7nnuB_ZgO`Z7;1|Qm^tddSc{wBXwRqfSyMyb`eA6+=FK<=?%!=)Rs_dajf zea1jZ4rfI{+vG-5=Kf;C?vekEt%R?B*kc$2xQ*FpG&wu7Yw_UU^!T?cUM(etQlY{o zeFXh|G86}`?p37w+e|Pw$ARkuM&aClx>E;c7PV3BS*B7>KXK(qpt{rr;)MC<=hz?&!K@RYwon(pPH_C zmasw!)!h({RL7!8aARoCaHTj`GB7a-V}C8MDplIj zLk)fXHJ>38Td?2L*7hJsN-0-lH|Ugu(7bA{ej`xVZ$-IPMkT#~p|tpOCX+XQN^z52 zKRz<*JG)kIva?Tr+RD>Xq$qsP4?vs!bXn_w39pC41?W~0@VQ3f<`#qex@hG!CrfGi zCWm8L&iLPNjj0y}ybQS7N>0&eRHK6y#Qfx)UPyh+Zf63?m)Ugxx!I6W&Y2Ka&WIFr zp_`H67gM69{;{A63Hrt$uYtewX}`wqN4B#%7se}$&>r=?(w~C;d=h5pyga-z<9vAa z7xfeOce_KD*;$4AVBrNlMy9>pY&G$blz*V90bQseDT(w-UHKzlCJDt%$E9NrsoN|x zSLl1ITMC8ueslH)XbJn<>V7bouwdwIE7}%bHio%PtK){$NW6>vl%Tt+N*^v*^1+Nu zFomrAkqySD8!14|mO+J>KcpO{u3tQkD%}j%-NlTpM%i);WlpQAV4zG=!a{Sl`^^G7 zF;3E1)X~(C+86}r4B}V-D~ACCoT%iS>`qqLVBX1lkK3@Cr*#iGdh4^WpdBu!tkpq_IyFh4vd|VEmw3N8v;7WNsRSPK;vYerZ(8N~@Pfc6a*%^KyPNkJ zSK;?aUd7hw=I2< z=?|~f?6fi=vSRt)pM$rb-mQ`no$~Q1tea3e>=Ij?1@y(bu`I8ufEkQ%e;4ZRtib9xKI2nKr3+NBzKaO|6A78%uBeWH#x%g%QmJ1 zcB=Tm$nSi~!YezIA$`!52Nrr znhPhF{g}TsQ}ACWNQ-*svt)TTy#IcyDCfpz<1kbz`HqKx{l>_{1rL5z_~Q|jYL)RyuVnS{|V z;7HdeF(DT*7_4nAR-iHn65z=jcZrq0M-`P)8~vcfm1o=~A8O8m02v%Z9JjuKHQFDs z`9H>+#?GNblthF)&bAd}sTH+RU=8F?Ml2rpc!s7gl_}Ukr#CmR}TJyRd{n z)@FRfrYEM{dbErLUG)8;WtwOAaKusLe~Ka6e>}FS9LetIf}pa#_^`5AD^Q+P;mX$O zBuqC8OWQEXD1fMm4rbS)i?Y4Jqxmp^MJSl>4M`yGQ6`G=PA^BMGz~y2jSQlsc_99_ zm1-edlWvPU8Xk;Q*>T)cr8h$6bIfw1%ONUhfj;Obgui-Rwnwm74#Eb)R+mcjd5IQ`40bUX~Cee zw!)>CDvx!g-o%S(Od@6PX^p%>1LON^ivGB#d~09b-j3^no#B+bSsS~UP({#*ZZPPj zC`)xX>7v+Slb+f#!ZerQ$|Vp^2K8$D`O_Q~2M51@G$c8iy3U!Lrj3PAS@3Og~_}ED5Lt*Kj&x}(^-eZOOJ!n9Gr^Pl~ z|MjQ?mOX3!F-S3);WsM`S8g%qgn1~9pV|ZelIvj#il$a4z{Ut@b!*HcI))S_@MRGoP`l;IuYM4pIj`NlBl&x5L zrNb()WAr}OW5XvfTD(DoK#UmB`?2|Sf?}Osc|w$1pj1jFDasnT=Wi7K>XRr>0}%oC zBotmd@(B)tjReB?}O(>wv~xi-D~j&5T8A&JQN6h+4h zhakEwmEeBOH`X~F9!-ZT@?f2=3od5pS+aAwFiwlB-Q!1m_`{490)>xbeGw~%wMxCd zS7h57UE3kD^>S*(K0ix+4j1zp+Zbsr6DJp84fH(V^7c#Ieu6s^O6|Cv9(-_ZJ`V&}$xe>BFM{#GHCB82!FJ%7Q zsev~QVrRD;&$>G@yh`hgcJfkD9pN`!2kncSmkWd=FRWh_^fA8DX65Ex&7Bu5Czjz# zMWVhr?yC8$p$RdPzu#3F>5p4+nAX@xWnGyu=sIoZr8YJK^~`Dqn3@1sa%e#P3s>#*KuzctVZcEQmU#T$-Qd!_pOKCsC390D^a_dB12jK(rqn(bM| zHo0Ha9FmJv-u6^8K;F2jQ-538dBv2gEABPhtc)z_wH@a=ec#iGQ@*m``mk))*!zNs z)a}2oVhDTH8Q5>ot*XuQ4n6%xzAe_XDcH4D?=@|_zxI))#D2|TCZnCPJUg3wIQtg2 ze~0rc#sV_r|I~4wVNGq%8V^#XNiRYG5d{GOm5%f-HBzM>Kx(9k)Br&cX#%2B1Y!h~ z9zeRG3QCbCMGz?g5dwrBLg=}hbM8I=bMABRr+i5E-m})8nXI+u_s(!JOR^|HDwsp3 zAp1oW5WU|^;kR68#3FMq(RB-&NQ7SEP5K%4q7UFV6Wxbuk2N=MBWgcC7+TgRYuICR zoc3?{BO=k4ol=Lt9zX+80~8$sG>klQpL8d^?UMGFa(t9w4k~W_T~>}KR+v^8ApCO# zz_AyuHN@p%F8JslsOljVhE(Of!?)_+L4NbG!Y%v1+Wq8Ft%8Xrncw_9cz&MBE1?J! z(9BEZO!L;}#+pvoQ&Y!$`A4so>%PqB*`uk|8J`l-Il@)F;pwXjh8G70%WJh!4>}Qj zL@q>QG?yErlmhfvq)jZ`_>C%!YtKaW-^y#L9nL<4L zMP?CDJla*-pIZSEMd-?VG5B5$LLXD%FcUbKdkH8u2EZCb)tO#2Hy0*Y7HGf4c`9Tw2fyKAO8DJdR%k-9TY>?rff&`Ja$Q(Mioj0h zt{^q<raeX&V%FX^So1Qyi(zQIw~|#QA2VI%QbfR zyd&_zK+7LJ9bxxpsfS_%Gxv!l7OeIQ11)#4gSVILupMj%lLpCn_)*9R%YAVUMxY)S z@xiZn#fn3KVslEa?BVP4nDSiY=pp{P#1uDFXgg7UM|3mRO8Fp&mlj;Pu)@wXz1OV} z0acC(Uj~}n1Q2J-bJZtZSqCT6Y{vQW_wyPb0LF>`62)v^o1bcyk$8u*9TMS3bMhTb z-x_z`495xK0JWFm!9{>`qEN4;`3r)LzK;O7nqs}ah7ES#H=dhOwkpAia>6vxJy$)? zbXAGJLjoR0MIu!Tk}0JfM{+0Z;@>W%4vjAix2-)v>m*2DDp1$xzLXRK?r&D;@mdv+ zxH)_L;R1&OE1pUkQ#-jElg-W1m6-S{K(#&=X*T1flUq8`4O&Enftu%|F!48 zO)b9Z@ZL3a=p&QTjvsVxSAvf3PRkjQw zo4-EG671u%cPzPjRe-&sHQv}L)kJlfplu$^ZJv6;=!r{dP^ z0u5iE=4X1{XCi=C=UfUh>tyI8+<{i&yOsIuXr$vN6f!vXw|m7;l}Q38+xg$e!yLZg zITY7r0<@I|vmhc^lheJ0%;e|P>bPx!Z`qM8Pi*DTIl@LOkJ9 zkz4LV#33TVQXOmJwY>lCX-X>3YUid3!}f~g8Pebp>29n$@4qIZ^2&q3VS8?UIK#Zw zinrltyO%f7L{i2Os+@jA$^1klzAshe_Oke$WZd?(Pk#iBAPuX+anb2>AJ1sYM{HeY zTtNJ#UH!M0ejU6kA>x4$VP|4y6`t3=CFfsAXp}4xOYm?Ui&`QFNobkkW4KKhl`9q0 z*;Iy$=L_eH-MA!+a2tK!a|fJF(a%rsM<3#Dyd+Zt3FLRNb;c{uLBd6bFa8wU*ym3@ zZZk$GKJ82cq_*ak8Ntgx(gHfag-RD%y*j|HYKBRdmU?AY*q?i>=AzlDPy}8hUR$|c zFBo0XY0Do~A^c-aBdYMzzG#J~gvM`n;WxO2g}RyWB=@5I-3NJ8(rpJEXVH4$%0mrU zu2puSC_U6`k4CB^IhlQt9fsS>pd`0f3ND|mYs#ze!60`zI_92!SnM9imBYMQ&np2* zE%oSwlrDB85rX-GzlPD};f#Td!c$y-<2_r0F&jGqO`P66K_f}WSlHg$EZQ6D(wNs@ zY5B@ZTKXya(K^fS(M6usy|Fb2w^>9hFi;s=r=ht8P}P2C3Hjj${-s0P$Kzl#vN?X@ zZ68U^PSyCJxaKIW;p+A7f$YLa{J?4=BfG2XA`R2-kw%`WmK^YqfhhiOZI0p`Gxlam zRVJ!N21NZf_pR+ia8*d>*bUuNDv(1C+%?sQz0!iqDtG_Er13Y)MmxNhe>UfuFt;Zsx&O>)T)WXWK$?`R}1A zVssr)d}aTzF_Tsykju0U0F{Jd;F^&0hYEW%O?y|D4&NxZ%hONrX|%U{pbRx%iWU^Q z7ag@zU2TXXh4e1C^Mf6Z=L6_wxnC#kv1;`R+!IdBXn~c=BnRSVy?qBZG^xNNO(ty{ zN4p$v(+{HU6$2&d%nxhT3{wNk%O7|YCutYF9&g*9EK@YEh7PVbhT^DwBO&-EjEQ$; zLhJdClpe`b} z?zL?<$n9<>^jUQeHvgX8lr;p8LJc*6#sQBr4st0$k7mB)Ej(v1hpmZziF3;=;?FwU z@%VIdE^xLrm(WJ>%XWUNhuRqTG&C-JHBPsYe|r$FL8H8MGe~cA%pMj*Y7E4w%rpUQ zDfW*`dE18{48WUrpPnejT1L9}+lO2@M;-EDJB~A1VMi{L#$&G*8BQeiLzzOk?#!pIJ%r* zsSfxvpm<<}SXkG5>??vckvHZTaQwL~%Ja6dP#hZ@zkH6B>$?JoehriAX#?mf34S6> zTbJSwyYyUKJn)6dDn@wfn3b`~cPm3D%DuFwt5XD*6y62JMSAtxD?&I0q5lA9)q3au z0?xe4g3@UtE#~9H3^CQ-wnKc%fNoVIO)pfc(Fd>7W-?V|RT+ic{MjPLL?hVggHV#Q z&9fgxVD`3D>-Rg8!uE%TK2R^wC-B12XE6V*!2}=BD1?$i z+X?s}dU}aptSFgWBp$FKE$v%s!hB~=kJfFiCcc#f=t^gY9-E+mC8a8GD=xAqP?qQ| z@{g+&o--N(q4GG^^j(%In7ZkLT7{(EN^GBZ!-EY^|4;te9GIBtZDDFs4AV65=R_hz&}(mCzN!*SjK5DmTcSc)dPv&+bPtaLif*S{OS zKhu~yj`W-khJ7JmZNtM_lYK>0dTfTSpOIj|rlc*dDT(ff8Qr2M05p;S; z^Djs#S)b(}YkUn=0L`3?sugPRU|v2XO*J8z^apRIEDRk51qKiFqoF~k=cNIGKZNcq z?ur?2&bNE|C#K|b?WRgG;n**xx+-OCaB91x52!qK8v-AoLL|@DORogFvEe1-Pj!n%h;4s0{pUgOmy9b|YMpCtR+wVC&EB?BO z`chZ6NY(IE!8b0g5z~@$FBJQWn7)m%3nc>7mFWy>t7l@CI5Jt6jJEanNb|)!zjUx> z1(&b;Y@I_NOxju~dO5%GIi3s>ctM3r5*?xY{TtfFB0*4zi@t4#;7)=3+?u;Y-Uxn2za`fB6#xr_5k`XQ-19}X%L@YYQ<4Rh zxN*)xtA0NY;ka(hanA`HiATz3F7Y9(aRdk=zNe50r}px`+>1BO2_RrwWv0)HjFt1)yv$5sbc(VtZXF?i zA6JFh%5Oc_G3~?B;Z~j^&S1)Co*ofl%q~JkGb495n>btFj?SZW`tME$hz4!E;KI~T zJ%~7T&MNQnxTx-^;0&gw-F}7tuqZF*{gqx7`4s%U6j6zGJA1s+2Nl$_NX0pFXE5p| zoPuS}>AX$i#(5A$tTlDiTP7TciER+IpmrUF$>Nz}AY2-UsL8-1x0cEd`N&%b${g+o zDe-!LwZqb`?w%k^ZkPh*zv9uk6SmTzDLsb3l=6A<~V_|N-_I+^;x z1w^_1h(Bz@HOe*35sGq3V!@hNi|$w2V=K2R(I)YM@$t-g4Jn~j4Ixhg&Wv#egQ7Lc z$<<8b13@&2oSBBn*Y<WFV-9 z4K3|gBb);CGTrDKvfK=$z3J4EVZTzIveM3Z2ak^u`GYeT*W|HRvGtZ%L8~bPnXaW* zvM+ane~m$$I%M1JDI7mxsd9 z^w%j$vD)Rq=m-S&t9PYoV(Z|D{RCu^Uc(f7nvj0J2us>_h`8V+J_&PReN7B~*#ey0 zRjPPzPQch7x*|iK^Mk_wF4v#!vqUKV5fMIT-dm-sxJxyP_)eWO-N8k>RS~ zO{1rt9F^Z=%M>S82>gfrnGYG+pJ|=6nyZQhhxD(t=nDOQ8(i_$7&FMz)RjFf61x4X zYysl6_8Y5FP@xR>X~C>FzGmo)S{IDm9f$d!O5Pbzut@&(zC>7%<%>ZKl+()iO&^D) zXwqOgG!jM~aifLMI2S~{JDw^!%`{}SIPoJScO!W;!5qVXVmD6my&&n_vbF0I>btzO zkqvJLUB@;}^-izA%|dX|Yx!C3QSA=rni8BZZ;TTwT< zF1}tv<&*@ZH!3-NK0KFuG~2KV=zC$mI%p55-p<=F<1pbnKu6ngvxRMWqfz4`muHag zC0Ku6q`bc~>?qIms0ckp2hyELw1%(tnj{=+AC9PQZ_N&5*2MZY5swFXB;AH;7JJpq zF}9Ak$lg+*;scovRwV0l15%ZDc4{Q;K8!~mvJwelEhUSBJ3lT5%CUKfSp*6q5};Ma zQ^624y>|iug}TnntPlVw5t*4kZvIT?+{r+eybn$4jHAF8KP0ULp-QJM>xx+dKi&`X zI2(s(VcYROb>SP{=4Qbz8y6IpnSq7V)M`0I!o^Vi@mlkkr`&3;DpA4$VH3l=5_H-A zTYQTe5HZ%g8oU7|exwy`S@=%WswFp&VxlAp%iC{~3pleuOX=1;F z+MvC4(ShW{w$>UO9ZfII@&>~Vt!kA42^`qsWe%&lRZnveeheyS@_mMu7ox@R00u-f zw$F{f=eG~Fi(wlEX%u7u-q=`*4i6yn0)nOJrly>xnVzuy1Z&^4y)nnk k6bjv#Z(#DMx5u2C>k@Z+Wi$JMZq*=tZDXwpjX$FQ3&<7%9RL6T literal 0 HcmV?d00001 diff --git a/server/app/config.go b/server/app/config.go index 3fff624..1de7e73 100644 --- a/server/app/config.go +++ b/server/app/config.go @@ -42,6 +42,7 @@ type MapObjectConfig struct { Smartshop bool `json:"smartshop"` Fancyvend bool `json:"fancyvend"` ATM bool `json:"atm"` + Train bool `json:"train"` } type WebApiConfig struct { @@ -110,6 +111,7 @@ func ParseConfig(filename string) (*Config, error) { Smartshop: true, Fancyvend: true, ATM: true, + Train: true, } mapblockaccessor := MapBlockAccessorConfig{ diff --git a/server/static/index.html b/server/static/index.html index 73f053b..5d0e060 100644 --- a/server/static/index.html +++ b/server/static/index.html @@ -1,5 +1,5 @@ - + @@ -36,6 +36,7 @@ + diff --git a/server/static/js/Overlaysetup.js b/server/static/js/Overlaysetup.js index 7288d7b..68f63ca 100644 --- a/server/static/js/Overlaysetup.js +++ b/server/static/js/Overlaysetup.js @@ -45,4 +45,8 @@ function Overlaysetup(cfg, map, overlays, wsChannel, layerMgr){ if (cfg.mapobjects.mission) { overlays["Missions"] = new MissionOverlay(wsChannel, layerMgr); } + + if (cfg.mapobjects.train) { + overlays["Trains"] = new TrainOverlay(wsChannel, layerMgr); + } } diff --git a/server/static/js/overlays/TrainOverlay.js b/server/static/js/overlays/TrainOverlay.js index 69725ec..d74abb0 100644 --- a/server/static/js/overlays/TrainOverlay.js +++ b/server/static/js/overlays/TrainOverlay.js @@ -1,13 +1,24 @@ 'use strict'; -//TODO -var TrainIcon = L.icon({ - iconUrl: 'pics/sam.png', - - iconSize: [16, 32], - iconAnchor: [8, 16], - popupAnchor: [0, -16] -}); +function getTrainImageUrlForType(type){ + switch(type){ + case "advtrains:subway_wagon": + return "pics/advtrains/advtrains_subway_wagon_inv.png"; + case "advtrains:engine_japan": + return "pics/advtrains/advtrains_engine_japan_inv.png"; + case "advtrains:engine_steam": + return "pics/advtrains/advtrains_engine_steam_inv.png"; + case "advtrains:engine_industrial": + return "pics/advtrains/advtrains_engine_industrial_inv.png"; + case "advtrains:wagon_wood": + return "pics/advtrains/advtrains_wagon_wood_inv.png"; + case "advtrains:wagon_box": + return "pics/advtrains/advtrains_wagon_box_inv.png"; + default: + //TODO: fallback image + return "pics/advtrains/advtrains_subway_wagon_inv.png"; + } +} var TrainOverlay = L.LayerGroup.extend({ initialize: function(wsChannel, layerMgr) { @@ -29,8 +40,40 @@ var TrainOverlay = L.LayerGroup.extend({ }, createMarker: function(train){ - var marker = L.marker([train.pos.z, train.pos.x], {icon: TrainIcon}); - marker.bindPopup("Train"); + + //search for wagin in front (whatever "front" is...) + var type; + var lowest_pos = 100; + train.wagons.forEach(function(w){ + if (w.pos_in_train < lowest_pos){ + lowest_pos = w.pos_in_train; + type = w.type; + } + }); + + var Icon = L.icon({ + iconUrl: getTrainImageUrlForType(type), + + iconSize: [16, 16], + iconAnchor: [8, 8], + popupAnchor: [0, -16] + }); + + var marker = L.marker([train.pos.z, train.pos.x], {icon: Icon}); + + var html = "Train
"; + + html += "Name: " + train.text_outside + "
"; + html += "Line: " + train.line + "
"; + html += "Velocity: "+ Math.floor(train.velocity*10)/10 + "
"; + + html += "Composition: "; + train.wagons.forEach(function(w){ + var iconUrl = getTrainImageUrlForType(w.type); + html += ""; + }); + + marker.bindPopup(html); return marker; }, diff --git a/server/static/pics/advtrains/advtrains_subway_wagon_inv.png b/server/static/pics/advtrains/advtrains_subway_wagon_inv.png index 1d0e8095d49486edf197efba3b6162368130f8ae..f7168e127ff05512f1bb716cc07396f0b5e7c030 100644 GIT binary patch literal 1173 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>@Ck9PN@l1@WoXG} zXvU3zvJeHSK@1g%4EMG%d_K6f3~VmPP800|i`?$phS;H^z#czuZB|5b+nmr>Cb zhJTkB+Hx6y3SJ&yd~=xj#~G&o7Z~8^?|FvT2N}Mf0;#FbVAwrZaQcLt1ItYRoJFYl ze~IDL3chJQiHDY|x8{J9ZJa8ycwyJ>rOv<4fR$ZhIJii3@xq?nORbu-7;4iQo^4`$ zTFdcy2lM}nU z^|eMoJ?x$?jv*44lM@nBlF|}Wlb=6$^61&ar;pPG1Vn_y1Vx3XPna@k+Qg}o(*puR zg2DnrgRft>a^=#si&v8`m>ZZFnHicIZ{M(G)3%LUlQ)zXloXYf6_ys4mw)~6+ zk6%CYH#8hr@L)nf+lCJvCsw@3Q0VIH?e_Ob@$mBV^z~+4{H5p2nw+*dclP{gax&1+ z($myU)>yw{&8l@PSsQo#YCERZ_H5dF_l%TdR0E*2HeFJM7lxJ9~T1-EFnM`{wR0dw+9x z{(r`{=5{`L%c?g&Iwvppn{QeD?hh-2I#-rZoaI?y?q*Oeag8WRNi0dVN-jzTQVd20 zhL*YpM!JTkA%^Bw#uiql7TN}eRt5%N7QYrl(U6;;l9^VCTSM!=;8j2k44$rjF6*2U FngHE?*S!D$ delta 886 zcmV-+1Bv{V34{kTiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<=24YJ` zL;(K){{a7>y{D6t>;fKt;0PQODH>O6X?y?x0})9?K~z}7#g}hrO>r2n&zdq3)QL-Q z{yK=*AIo6>_!Mgyz@|@!4(RjCUwWZ_AD9Ttng&hvj;4rK=NmY54ip-!2o3w;)Ho-g z+;fTjCI>=X;@B}=a5}n**>Ye3Sxe�rTcnQd(L{Rn>exeF=y1KJ*q-QBh7j9%pW4CCQY5NN^;} zK;4Qob(<$Hjmc}mXw{By`%mnvZ4|8@;hSWPJ8MoJ>+mdi}x19{V zeej|a5|eDF!bRcx51v88eqS<5Kl7>oT|mwanBraYl=EJ@0S5l< z`3g!ofjm2nZaQc`Xy>^6qgn8hk<+2Q+qCO|NI>@K(}7sB7EF)BPwe|2P|Z61VgLXD M07*qoM6N<$g2dRPQ2+n{ diff --git a/server/web/minetest.go b/server/web/minetest.go index 4b6a47d..afadfbd 100644 --- a/server/web/minetest.go +++ b/server/web/minetest.go @@ -21,11 +21,14 @@ type Wagon struct { } type Train struct { - Pos GenericPos `json:"pos"` - Id string `json:"id"` - Wagons []*Wagon `json:"wagons"` - OffTrack bool `json:"off_track"` - Velocity float64 `json:"velocity"` + Pos GenericPos `json:"pos"` + Id string `json:"id"` + Wagons []*Wagon `json:"wagons"` + OffTrack bool `json:"off_track"` + Velocity float64 `json:"velocity"` + Line string `json:"line"` + TextOutside string `json:"text_outside"` + TextInside string `json:"text_inside"` } type Player struct {