From 27527819fa7306a387cd72c86aa6bff9067c87ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=88=9A=28noham=29=C2=B2?= Date: Wed, 19 Jul 2023 17:18:32 +0200 Subject: [PATCH] gipps + pipes --- gipps/gipps.py | 122 +++++++++++++++++++++++++++++++++++++++ gipps/graph.png | Bin 0 -> 50556 bytes gipps/graph.py | 43 ++++++++++++++ modelv.py | 16 ++++- pipes/dist sécurité.py | 29 ++++++++++ pipes/dist sécurités.png | Bin 0 -> 50088 bytes polairedc.py | 38 +++--------- test/phi(ww).py | 5 +- 8 files changed, 219 insertions(+), 34 deletions(-) create mode 100644 gipps/gipps.py create mode 100644 gipps/graph.png create mode 100644 gipps/graph.py create mode 100644 pipes/dist sécurité.py create mode 100644 pipes/dist sécurités.png diff --git a/gipps/gipps.py b/gipps/gipps.py new file mode 100644 index 0000000..0a53a42 --- /dev/null +++ b/gipps/gipps.py @@ -0,0 +1,122 @@ +import numpy as np +import matplotlib.pyplot as plt +import time +from colour import Color + +# =========== +t0 = 0 +tf = 30 +dt = 1 +t = t0 +# =========== +nbv = 2 + +"""# =========== VARIABBLES +Xn(t) # position au temps t +Vn(t) # vitesse au temps t +An(t+Tr) # accel au temps t + Tr +ln # ? +k # ? +m # ? +""" + +# =========== CONSTANTES +An = 1.7 # accel max sampled from a normal distribution. N(1.7,0.3²) m/s² +Bn = -2 * An # frein max equated to - 2An +Sn = 6.5 # taille de la voiture plus marge sampled from a normal distribution. N(6.5,0.3²) m +Vd = 20.0 # vitesse désirée sampled from a normal distribution. N(20.0,3.2²) m/sec +# X*n # position fin de freinage (calculable) +Tr = 2/3 + (2/3)/2 # temps de réaction + sûreté (= tau + θ = 2/3 + tau/2) +# B supposé égal à Bn-1 (si pas égal alors amplifications ??) + + +def rainbow_gradient(num_colors): + colors = [] + base_color = Color("violet") + gradient = list(base_color.range_to(Color("red"), num_colors)) + for color in gradient: + hex_code = color.hex_l + colors.append(hex_code) + return colors +colors = rainbow_gradient(nbv) + +def px(xx): # Avance au cours du temps + xx += 1 + return xx + +def vitesseatt(t, yy): # Vitesse qu'il peut réellement atteindre d'un point de vue dynamique + + + + Vnt = yy[-1] + + value = Vnt + 2.5 * An * Tr * ( 1 - (Vnt/Vd) ) * np.sqrt( ( 0.025 + (Vnt/Vd) )) + print('value: ', value) + + yy[0] = value + newyy = yy + print('newyy: ', newyy) + return newyy + + +def vitesseadop(t, yy): # Vitesse qu'il est possible d'adopter en connaissant les contraintes de sécurité liées à la présence du véhicule leader + t = t + Tr + pass + +def vitessereelle(t, yyold): # Vitesse du véhicule + print(len(yy)) + t = t + Tr + if (t>= 0) and (t<=10): + yy[-1] = 0 # Arrêt du leader + elif (t>= 15) and (t<=20): + + else: + yy[-1] = Vd # Leader avance normalement + + +# a = np.where(t <= 10, (Umax - Umin) / 10, - (Umax - Umin) / 10) +# vt = np.where(t <= 10, Umin + a * t, Umax + 2 * a * (t - 10)) + + + + + vatt = vitesseatt(t, yyold) + vadop = vitesseadop(t, yyold) + # return min(vatt, vadop) + return vatt + + +xxbase = np.linspace(-nbv, -1, nbv) +yybase = np.linspace(0, 0, nbv) + +xxold = xxbase.copy() +yyold = yybase.copy() + +while(thV76-y&q2Yu@clvDb)R+lVoFPWTYw!dI)V`6E+!zsYY zeUSO0t*w=f5EqyE-y1kBt&O?Zbei4qkd;<4nl=>5I(_orqG<6b6AI;ByX=Xhs*b^3 zbqsnvCUgnoRHXv2^C$MOSa^y*l`G)6wkR43bCLZr^z3 z5xxJaOz(c5rT<)K5$-@Di`refBBZcsw!i%-}TO4lj%M6|G~>=Kd)|N zYSu0MLXnW$Ls_)&8|O{R(uJQhcP{>S;pd;$|41zS?D2Wm|NX-MU8Mza_`jm@{~vu| z>&WTNdr)Ll>d@dC@U%6(>e6=pOJ{C}4ji@Zu2#FTdaFY6z?vQWC;5Xo-hXvSQXaRb zISjNG2jCmuBcxTDTw;b?6xrHy^UM57ywl^x$2*hM!jCO;a(4b~l*%R|Qrq!xgRHmr z1-TgocJ0jP+4kL!&$r5(;0r;TV|f9LVR00Sq5V>33MDhMr6}ltSw(!d%UHj;cYAGC zs)(ql-LE${c)JcJ+jUk%#`)~wxqbU~$#ea;+|4Um0^k3Be}~Vh-!QJ`qv~*XO_csy z&&Zs0l3d!EPwcy^3kwRQOP`%8eJXjUsk75eQ#?ZIUWsv-t5MZZV|`?0D=&reDuLKI ztIHw64i)KUm1)$W4weyVNy+wsVsQ=J?zczUYein3R=R0>b-G!sTAX?cSB^!U&>AK& zkwVwXM4i&JmbpVux_@m+H7>5WvSh{18YLyA?P4xR7X5cereo-l=3*b?P$wzesSiF>u$amcIYW<{v0s$Rk$}=+MBVXB=U}kh{(atR{KRVRO&&VxFsvr zUL5YK^6DNO4~9$1+`I_(oHNmBprwCgq!M#~P&+f$8rIoS9@kNuHLygdc&M}TLPkw< zOUqtMOUtaR$gVK@`uh4$zO3@MLpS=~ym|BG%a`#MOJZ2kb-iV8-M%e1)G4#p!NH** zO+lu5Y@n4@_UO^075vs)MIKfR^!Lj>uCP;E`DS7=hD-4b8}nu&p)RdKinItvCJ3L+3V)k%_{$} zEg_>`InQOxkIzh9Qc7yC;K;DI_;mCO^P1Rmudnv^_bXpnysRwW-CZZgzUcBvtQ?({UQ zhlbQXKjawd&7Y|+bseoT4vW#wvhE)qR?o6-wh(^&!6L(~zp0S@?2Gu9xw)G+YZ}mJsgoVmnN|MMX+SkeSG4()zr3!lF1yOJyGCCgU9S9mk4apYKj;+RC!c2d=jZGG z!9m+W+kx%O*giEYtLH2xqkn#R75r?OaGjZ+GA(^}FU7c+6I-Dct11h@zMSp#=+QO^ zk2cmRAR{Bgy6I#1c0SXKSR^lluc4xG7IoQd?$eWG8A3&z1_w(O_l@)SY3R8|KISv~ zR9UGpJw0t&Lc29RIZ*7JH8I#4<{qn?OYQILQ<|O}{s%tS)SQ*Pv!(pajnyIJ7i(T5u*6_xye6hBBI0|R(}$UR zE$uqWl+K)a#M0hZzyxDtqt&QC*54d^Ci$t0i;EwRv4UNDiDZ;Qh_#S3WT+XUq7tPL zgNODH45(nQmao}P%gj6yWzcP(^Xz2c)Bfhqo$b(})0(M9YTec8=}?s@ z18n;<+#P3F=u0HXYo}lt^pHh5n>N_{Xtc64{P@kmG8M(bhK89d`N4}R6qY=xl@y7+ z-?D6sAyN|1FqJSd*PTOmwsM(HjSqGFNRGhj6RGS-Ef!O$d10H*y*=jWwdHJBr_j()S=||I!sgAJBe&{09u>51`c^DH6OS3` z?Nbab!zEVPV$qRcg)p&%dpiV7zdx09$UWsgJr-qJ5g+5>LCGEOi0l9J=i5ytw`d`| zj<$*3d=1D~u$Oy#WPl&XS^hN)LaNZz@}|NEA}}4m@dNlRA<|nrR0kW8+@Si=Qyhlv#0U! zpyuHFt$NW8z4a+I-PFGKTP>ZlAVclt8hYi}R;5Hj&sb%tqrYyl297ulb(E9s&z&Ccge4C+opm#(_LtyHWulU{>ubJA^*!ZCB z$BL{_TJ7fnQ8p~7GFCqQQWbZ>iqgJ^oI0_Ws#4f^c~zDB!)E>?S4`o;cBlC4S6n z;>%K4T+F4J!Br0&QI>hxz^?7vQJrjCB^jCjy6kfv3s@#%K5ekhYV9SF=?=ZRryldl zy3b6FFjP8ZUT*ZnC}Cj|0(7aeSvIW|F)C4m%>jDsA|l#Xu3Q-@H+~7P-|0Rx5oX_0 z8&kmKUaKT--}T78>qq$I#t(v~g-+d5@Z`i0QwQ6^pFclT6e6qv$D;QB_GYygmo&>` z)#SsH@DrsIE5Q#sYBsN}!(dsHFJn-8d;^xfHO z0H>8H<;|F2)B4rqlOG#|A`UCq$a|iJlT#r)JUmu8^7aRBrleCr{3dU%uVhz`f28a9 zYgxf%QR?8g$+3ZQEC<=abF3kAvRwv$oDZVut;aj<>V z-?#P+c4sui%0Ae8%M0KmI95G@J*eoJnCtldBS+5Yxeoc0Rr>f*29BcFtI{U!?ag)j zI!F47sxvH;fUVlQs!~6N2xmm(UHH5uM9ftSM&5^o-ZLDy&1|5hsN;LYO?K7jC-{1& zzlQF2Y}d}-^%>b=t%D(hJ$1ykZs#`q&*0s0xqL47iS7*I$FVTcurr^Eii+0TPLDQv z$7*M#u-Is2n%BIDIev33F=JkgqOtTmM$vFf7)n@*Q4u@akXymK4t4DPe}A7MV+52+VJMKtc)Rai3~Gm`{D=m8c=FQEvE|YoCYGKn1MuTmhhoNe3jZ*31^=-;@UHT*&?cGCV zxINc0bo{XR{`AJL_I8tJ0q#PX`eJi&n9lNng3jRIVtLC}>HN03g+9zVT(OVqjR1_O~*WRz^K4s@SbQTti z_q(}bhui8kYxv+bsRcHO>Q&>^i=yG^RJvhk`B~^!Z{@Ttd-LW^uth=s%ydv&o|i_x zn`;D6^asqEfiI`dLZt8AMybBv?-|mi8J*r;ETI*eJLf=rb`@?Du&6cn&T<(`S-)wM z;b2Gk=NPx)F3mlM4jodOQioCJVWAhF8hj98KRxM$zkc&E+$m_yBAM8FG_+TiUc~YF zuV26PwO=}ZSGwcn#eenc)w?})Il`tRHU?E->`s1E-m&pRs$tvVC(Y-yy=sKtr zH4wEEoks4fg8( z7JhC0wr!7^Y&wi?tlDgy-90isafEHf+MS13=y6A$N-kWBXINNRL_o3F#1|jKyE_F- z+B5mhtGDq76^%j;ENU7;LQ69y7_2)5e=}9WE^LEo@uEW2YP#(s9Q%GtUA!1wI>5os z{%OB5?Z5BO^^ZqYC%mw12yGMe+n#UmTTd}5e|nt3l8Hi*VSM&#F@<@fm4k!E&9w|^ zt`qiACOfxq>Bjr`{9B%+r{^nJ;4rDR=xRVEf1SA z7%c4u4r?UomcyDy?F)50=BZD7XJMWwzEcgU*Gjwii#PHVv;f9;pLtb^cfTBSyYt_F-^kk$xpl&Zda+%xh=Q@N&UMaM%OKPg4gaqScuyT~ zk9tt|8Hjv{SVtIA#GfgR!#bH(M`6c>9REBqpawsA!aRjo3%~s|w+z76=S}qF)F`Zb zak)|I#?6~?fP4xgQ8_s|v8plFl@m5VgRxrav5jYQeFfh%SG1pC9Hd$}O#EgY8LQ88 zb$HS=?5I14js+>P@w6S5`~VQUgx4E%P0yK7eoqh^YO?+O=!d3w>Gb5R*)F z@CYWQJB|!Y+Y9H|cb6d4D~B*5NEhya%TtRD5T$N$K9Y%*)4N6Ku2^o?&wl-^r9kKq|9s+kgKU9voCf$kaQ&E#Yj2f^S)d zrC!u{LWCgQ+i!sM1l24 zVDI6tisu=*(hCzF&n&aNrikc6cutgEX_4k_vV40(-P%P2w| zLpx#xuK}H0sv2xw(s zP@Zn4aiKW0?y$5AKs9T7B2&}8<_7l}HC0tVxrYY>FX~|n5s};dez!7eyokv{&idpc zyQm?--{K+%bzeF@bg+VVBvF5)14 z%T}xquF%Y^nW}hUel{yBOHho$Lw6if;t)@NUwdY9z#Hp~Ks%&u_`Q2Hz55R7yW7J5 z{IT-iuXGGCN#%j0mrpUWy33r1UhdKJND+UJFa*wo;~s;sx^Z!+-Oi0np=EIzT;GSx ze?0${IMNCW+cS3A*{4(X(>0L>Ca0$Lz<;0GuYHb`4`4U`8tnD&FSpQ{m|c2#F1McL z3PV*$V0vQY!mSOgEbU$+#`kwi@}7G|aUJ|F{V9+qil9#O>a+=}cV-BIZtrewtj=@I zVQK#sew^s#9_`x!!Ikw1y&S${)7JTBGc2v?_Bo6_%~Rd>zZ*t;scv{byHfOq{Lq4g zO7{UfCLvoH@F8k|UJvRNt*L{MLBP|ELyyGWr%xRHoGT&)zx^O6=o{ibCt#^NHZdWr!|%o(H?i_t zPeFpaJZ*5odU6c@Vnax8gtwTot!-MPST2YyPdfVFXEw4wSYWcFyQ*3Hbh3JL(d!-1ec32?wk)Arj3GIg`w6?KP z$#`8FAt%PA6PYN&9dVv)kO`Qxm86COWpsq z&(Q(ZQL-=0#kXnttT^+_AP9C0j0d|~tlwUR;Ms7pv{VIZR!Wn7&_m59AuXR-MHz`# z0ERDO;e^~KGZ7vVP{JPG)?b|L_*b8FK#m3wA5bVxl z{8bfZo;9%HiA6tOQ!#LSI&@Q9IOc;FtkYU<@kFg0*;dw78YL1 zLL!^;hn2^3Sz#H=I(7+KIMlVvYQ3D1R|XBVA)#R-mm5cU;%DHn- zF7XEm*|u5fxhJuVyr>oF2VSMok%SBP{jVXyo!I*d`1(Y6qByu~g*%Iq&Lkg009qa_ zXcNr26>b7Q)K}U8Uui&)GqxN&^JHeK*WGIz;oU|C=OmTzr7Knt1{HCF#8cOak=}ry zpc)^S{c!sDX24v^RCc3(!t$HruZEY75G*dsc*VGjTjz>Tl zI_h#V*6uv=geW>52!~R|z-5zD!0Z;w3h4&P_cO6FMAX@y1jul9rHDj{DS>D3apzUmw`>z+GJ zc@@f9lN0rXyp8bs&2Yr(RkFAsu*5U$Tqo?m!_H;aNh762qV*zcY7tl2HhsLmDW_r8 zW_A`xB9uzdHFc(bald)kr6<)AAjsUY^Kzmx03d zGetE)#b(<)L3R1Iozc_Nlf5Ngd$J=K;Ra1?X3{2#?-XP(ipUDz?fiRGUPgD;TDL~p0S;9{||wLh-Kr@ z%hQIe+0_AZbq^;0?SxOVo1B32R+s>c9Q<~C9ifAKH-QG~ ztV|MSP{DQ+3+%NLxIsd~1EY(4^yrbWuAXuzwS%quNAhv;naR}B3lq=Pmw^fLOl+$;Hi=Zu}v|E#0$lYVSz#B zd9Gs$z1UDRlA4s%D_SSLW;?GBQ06m*kPh21z>odAcmK|#o|FSq%qoj$-Yyn%sxqmm ztJA@9S3uB)z<;m^6;Fv6vGq-45`UI#aI@uWNZicy1lM<)shFrxWdJO((Vt7A#$oXd zQ>%7nh_g9R6}BEwKlt6uwjy40L`3-jOxXd%FT4-rLVIS!}K%BDmqNi$Kox9#vTVh=VdiiGDnk90gx6uUg`X>JY2EeF=6 z6i&ppql|6Y(xn#x7G=NY>L#C;lx?}13ast*zUBcpIBavs8lw8sz4f{Ntnyo2!HV7X z@~VI@=*?+3OYA!Vt@pO`mE}4+=)81PA|Vop+0MbEa=>9jwKl~jgKgi(hbr}k5TSi~ z`}R1@5TOwHE_~VqQne*CX{2ypm>*UcP~aKi{(*MCgWrG|OLU&zVxFj-rJ7-(b1L|V zQUI5p!r(6rWiXqn&rZ^luz^+1?=&EXTB5cfzMz0ClL|(on&(28J9)xfgRUY`Q;3L@ za{knC5Q~jc8yq!R)lZ?KfZ)}UAd;dL!^C`Ph}qA=)@b0bI z1%fj@3f5#hkI~)TyLS`994`b%t}V;xo&>M`^VhHN!v-Isfs_%qy%4hRik_$ANUCvs zq&KX~1`)VMvBLx8Is+CkKlD3w-p6VrLa0w{6AR7Xas(bkru%C2H$N|Y(q}$JM0lC(~){- z5{s&1MF^($XH${d%B5Szl|T6u7O@?kr7*k4Z`8FmQAZfsE(55q44K+^PvRnw6S4qt z0u3%IgsDa9wRJ z%n?%zh)|N{0;T&52CN;yb~VT@m@qkZm$?4#x3F8(GDmfV}`-v&@`j=JzfC>cqT!Tbg#F^ytB)5DIF1c>#1=OgQ>;k#8 z2O-%9xM+hffjs*PCwkqI2w&%5{paV=<6!-Mq+F2qEdZl09y1M7cOE9W@SjzyxLE{6 zr$P8|Z|A*u&e6$<9zYDCz)O92|HIz}k-#x0iIl=T!ld1$=lQT7qD5F#!_NU2Ak5$_Se&yeD|KPX?jjy%$(~H;4fNE{+X8E6nwgW+Q0iQq`;u^c-Sz@MR;!qu`~NdfSMghAK41+1%32qXy}w}6|KJbyn(?zC|puR8v6D0vbb-(BTMIeJD$Mk(Yk`rfSO+J;EMTByao zxV$F!W&djQmlrt~3i#v)V@66)@GKc)9G#EOur;KDBey1pg+ zDGZlknpx%7(Uu^~odw$2wuNoTI+AC+EiNu55;ol15Z2VK*xqnB!&!6@#bbp5&t2X# z^y^>^WEnRr9|d3qMl=j#H2|ocn06CFKiqpa1t443o1LG3UZ6 z3xPoghQ5$m6>ovyh35a~?nL1LchmTKq$dSv( zKx<`WuQ5Efl=+o8q)MK<;mMN4ix2k9-}Ld!?mc_do=7YzXuTw%g%UW6J#N);$Q&*d zz5NtBoGTLl=AGHxLs1{{f1Zq)2W8!Uq7YZrjYUaP{v-}?kj|szV zo+PV}&?WBdQSPP7ma)Mo9L!rbcT?sOOhxSdO(q2D%0ORZ5~3mCbWlMe*jsr6kg&*t?}kIndbD=++(WJO4_;kcdvlae9BC5M z%ll*!M+@%Sot+<6r4(hc2<2JsCr8IGbAR&qa^-)k|D&%!DbPMJf3w4e4`}Kga{3VO3%;FC{TM# z+zyJir@oAml8Jk+W~yA_qr6YR(*RM*An6HziAo0X?}u|7des5WcrX1pln#mlF(w(9 z{~qbJcHPxOFIvTH+kEoII}W%`4OIf5`BbNwL?Cq*2jnvjlbjC!VAor(11EnPV1Pvy z^uuEzyV%Z^ z71Gi>CN@8lpH!^9--gYstbMOtVsoq|`-e_dNP?w^A>muwxA4bM?59&OMXJCDLx`Q_ zedYZ2ha*NXsm;9XKqmpV6OqCJcXxLJQwZe%sFQ|5ClHM>s16_qjNh`p>mLc!+q7o7 zpeBpdnuvmS^rAE&`9`Wg;8VF|*}>~S?G$w$jweY&fE+VqolqxpvSMm}w6BH^E!*NF zODM?ITMm9hrpy0g1O6Y0N+aQNSieNTGGpc1Tzv`x|LJ=blHsev-X;dBq^_*F?gIA=01+(z(yTQ0+0|}ngAhOM}lMa z!vd9J+h?Y3!z-mVQ`@Slm~L9G4EqVHC-}U>75MJb7ez+$DMlGJtg@uU2RMHSVXGOS z24O3~qU@E;Mw*%>2JESj%jok^rxyBdurt`^5|khG+J42Jk-hwu=Q^R>^&W(Wus(t+v-bhdVIP)zP@z}pBTee%)IZLBE- z3KVSKe_8@|{$;59w9^_!ku#(KO`a>a$yS(TW03!I9jSA`qMf`wG;em94R%u&aVH}R ziUUd}5~$+(^VJn9SQ)}MMw5^cWGo2~3$k~zHG}3;273<9)Rja80NLdL6Cqyhl}TaS z1uWt>u*$VzxCBnh1#pJ6X*U*lYaqhJ!bgF|Q-E`o`>s2`>xKtUURh>ny+`V<)k)dS zy~zcPrQjLU3=21q0164X@5rzBWKzbb9GmV-^Iraaf(Qr}x)coNQ$#Dm3>#qyz*Q;1 zxTr%%RiB=?RkQr?gT1GeN#uljtto6ZTlImtMfSM+-e{YrzTHL%>Lz;nm{+ePP?xZu znfaAT0|dve>Ers%Y|11Q+G6+L#A|~&cjLp~GdQ;0XA22$=Rf~vxAnjIIT6a+L-7`i z3f~#byBou`@I$Wf_C72qv(T(v>3d-M@Ev!$xfLnVz7#+Bc3sJJCdX;}5C} zPz+BX-dVM370J-B%A#1uzsM*x^FZw_{cWW15r5shX%h=^G-u~V7+6>ySK_&*q%}-l z&y7td^IQc=K!j|czYusONjwH|IKEB)9Q8R2?<2@4JUc57RlA;G;D4jGWRnNBQ`9$k zT~(3KPDNHEBy_H`x=e(pAsalKTP>1psvCw788ztpXq)%(^s(Z zn0Lwr)@Mp9O6dOL0v2gizqHE+Z>Wq&V?Qr0Rf*LorW1M0_n^NyHBpiI!QZNNj~qew zdOBgTnOZt=pzt4CH?i=UocCl54_B7(xM03mM&d8-kQKC*(aO~t@8U73;cp!hS+!a2 zQFW}*slvB!Q}`FL-23bNSa^Pp4pmUbl@oFg zd8M7wF0rY_vSejxR_^mqm0nmL=0W3N>8^P|)rL7OSB?R>PA8^8Q{TXWX5Ui+~? zvGzz~jb&tj?(Rtnx1f{<^Ks-DeTjEK3<3TuPZ@kGN&UeX3VP8C+sBgtA34xynftq` zs4dyNeLG3&6xP(#yy=-!IV;7d5s~+HfO+}y{tK6m+>fo>_VbyWdJX=w#(#1$zH_5Q zwjs~mAdN+fxjjM8=@5&DGM`6HZf_5fL=d5~5vBXG5KF?sasp-0Bs<iIh#jGkroH2-LC=yfzCP3(LE9YdBml*9?$u>PT)G2y=6D4_VBnLouDNE^>BEA&{GuYyG}@KC`dc#8z8wn zdUn)$>{SenM<6Wh(*(2v>XIUio(~LH(%$JMEj$jd*GFV+nY;z z^Y@k2)zTjG6@81iAkXIR)=6FJV^T%e*wSZA`Hk9bcF;!a*RMwv!1HW|*%j~@)Sq!P z8M8L2;%@gA-_X(1qnt}MYD1OOrVZyc@5nHXx~x$*SUL|#JcNaITh{f zD6?kAw@{R;w4{GRiH6BR+>p_QZUP&=GELkBWT4{8?+Mhw$H~q;umF zy|7^|e4;6am)DA>Tu4onresPlM5Pi&_J7VDYwN4ATsbuQEyDaP&)~<q$#Ho3>v)Jv*sQAN4iwP<*uh_EBkAk6K|EpSf1rIXJ}V=3f7{$5?^P zB<-)iGPEu5hHEW}EJ@UvA8gD8dAucX)!$*Dpw`%H@Jz}H_@eNhmX@8=r7O->?xCFd zZ^5g4+|Q}&r=Gxl+`A}~RJC?3E<@a==)i3;s)0L*k+*}yG$6!k}pGmhC&)}IH^=vm${f0f>kHV#M>`@R} z0g(AWj?#w_^pMw|Gb!(O_FZn4dy}_;mFC3|Ioust5}DAsp2Gd_!p^>8PfjjzXn^L& zssT%`oLIG)TbgRycFt@3InjLz_wI#TnK`PuOJ0~mxm>brr(NFUi8y_UNf5F^*tHo zAIf0k%9bpqJ>-C}ySV}!Kssg-)Z8=K+J78wFI9|ue=MI!s}DBlU&pVUfuM<+&96qHJWR^T4dj`9a7f0DOT zXbvw`=1eQI4RZEG@%zr3e13R6J1Po=;}~FCOjDx)7RbYJ0lP`G*bK#{8Ql{sF_@yV z@mCPp3=zVu+39{9L6PQ*DLqUJqRD;p(KeGtDW1X6E*>^^cKrqeZy=+IVdd$`hw1-N z{s$Ua>3Hr!#Xc$u6TAC*^H)yX-V8(qk(-k@ANB&>^cS1{F)3)p93FZgpe+0v zy^Ct%B?YHt6f4<hN(RRQty2l@p)* zF+zoqGhcQB-z>efe#CPL6zdI0WHk7Laec>tc%b@&!RqF0RitYU}GOfV*Eg zB+YpL%^R9R2+il;&haIb%!7ZICf$kjVL7l~4Ga{0? zLx7fUR`kuFTMM!-+yBQ00Y^`P!SolKwSNy@A| zgQ#EsbpLJ2mPM4ntqX(mZT&)TbIN`QX15P8xEqndh40M14|C;2H-v|i? zit*klYN3TdXMMf$oh_K{lPi#^APS{@N&fvgneyR<{pvb&+?!RN_TPWkT@^)OqPnZm znni^ERri9ac~y05W64uVqd$Ek4J(HhFQd&&6;HA$y~&huYjSWOv z=JQFr%YbN94&raQ=q+T&A|P-eXDQ`p=z^6oRL7JjQ+XW{1>dU~8ooho5sZhO85%&y zlr!}f9vWDLNMw`7K#T0eFl*VJP4~0y`Jyt}wSUC+pm=os-`kF!ybAz~m!+FU{y3A` z(`cY@xjZ*VHExTF_M-pUUylP5om_A$X&-lvtxqyli#aP0&zyWQkd^8ETN&{J_VW8TOPeG`1N)rxEC0I`K@dY7DTLG?Ou2hjw7)phz>?WnznB@_BW;6)?REYUES@?!9afzpPEmBNd&xO#KQ` z(MY(b?~Fs8L92t8z#=Sc8*S@8g-3ftTfX{xF)2oik4Mu}Z97;l6k8AhG-O_whWhPW z_wy!|AB&zvljikhMc1yy0^!v<0dv~($|*z=Hw8g@jtFuBzpB$n&cgtx0vtrBu}_*3XPsR z+3QXK&=3}S?}>SPWhLHa-=5R^;moF2y5FuKT$d|!d*q{eX8QcT{_F!=q21hB>t}*D*wt0+de(r59MA`}l5vxv*RbQTrWE$g=jgmpd3eV0)PR zh7Pq@07v-oiui}=pp=wX%-d2cQO{kjGr5A*2IcJSAJ(My^m5s?LnORK&YOFq)JbhY z={9&6^?be)Ch1_>f`~#p{|4$7VZ~t@-&e zpMIKjq+G=?#$U2*;f2$Zk_es#+e>=tRu0`{dKl`i+fl2z>YwNEkQASudAs8=*x8#O zNzX&9@*k_zmUgyuORn5MS5?zv4O2C%c425y3$GpDu;W02ronQiAbw(L4@)~kEtUcA zV;esH`}Z!Z@iboN7h^UZewwLOw7sWj^|_JXP8SvxRWmMvZ(d+?;tjSDxNYVfugmfN zec;f~b1}w>?N!E+Z*C-XLB$MDFDyy-jhphTw>~b_?rsP>ouu@3XZQD5|EA^(M7xb2jP8A;c3Jj!7BT^cz9So= z2AW#7g!C7K#UQn7XemF{sZIdfD?WP9!GU7r4T8*E-o1N-3YkboQCe&0gWH=^XSK=X z@Uku3@gzHf4oW0iqJS)jeFKwND61i{WG@WZ~q@<+}2nkguGtkoqYIT!1K;naK*Q2cHv979> zcOE-C$ubDZaOLe6oz9#Uhgu*%dSw(kFwD52qDw7OZu4e#RT@JW1qhz84Il2{Rczso*V_lZZ=3nXEbt)8cgBGO~I!uI^<2DBR?53rJS`H{{v zlqHaw_b3A_dqC6UU45i#_rL%CDJVwqr*hV8URS1oQ}5w3#eh!_{W~fH&`d)oj(^pY z9GFwnD2qj^BMu4m4AGkb0RiCr zg5AiFnM(z&Bsyv|K7p96=t#U!^no_T(svY6Fq@ zp_N7{l1vp+JsL=0ZU)K6C`!Hf%3~2J6(f~8CGuP`cpGUbDNmSP=<$tP_a&S)Rj>I_w7n$gcdZ8aR&gN^#{mJ}D3K4vG)` zyLU2hw<=L`H7{7pm|RuStQvEC14lky)&h$8BK8d0Pr^B?%R5}RT)jh?M$gj|}=+pAY@+(S86$v z_@vM2Bvo1J*ae$1>>+`W6xy!&r*UWB*%}Gh@a)tBFD3yq%@i5)Y8lrF?xO$IA$$a> zd7L`qYVv(|do^F`L!KzX_vNd(WXAe6Yhar_Zp_=}k21f1BjAW+Q=wVrpNbam|4*<; zt-#ASBV+ER8|N*q;nH8fU>QnQFv;9p7sMwZ0N#gZG+ODJNg@`+Vm@$}puTX=r>A}i z4Btw_1>fI8%>>!QSd=3B`yZYx>90wp_gbP!wxx1cZkI<+bV-u`PyWW46Ad@wIz zo{JHgb2F)GTF+m>@lDsnS6u?Dq1=$CT$g>)W*IirdwvSft8Z<@s;3$Snz_m-pLG! zs>OZziORX_)Vgftd^hC>dx73Abdw!jHNOWX#~d@^(FUg{TKqJ8o7&mzIt;x=(I@l? zD3tOyD;LxL^Qeu|z}P^MAC;w*Q&Ibn z*54dCJr(K2z-nnZ3&=>$3r~dz_;psIHN$_e;zPF?(eV1Tn5;Z$^j;MisX5^CUlMLz z2hh<6x`Eb7r__ghab*cXWf@7TPp{7!I#Pf_9!9B6YH;I`c18e6@cXJwKImias8ad# zuxNI(xOwL1>igCr036WXlRkN4d&70pWAW0@4{=_{tb|BxnAe4o7KD(E-jTO9M&?g* zn}J;ItT6hclpZ_#)>kX%Z*%DH%?CGM`iwQc_g631P{)PDUZrTC*_)UbI1ZNPSBp$a zSWI3owi&!>nAqFb|G8zH@yeCiz48#A=Mb1f^<~5-&*Ad>tt*G*{ApK~6tyRwX~5Dl zA77B6y;53vwb~5^BNnMfsU&&zTDs_Q3qR)1J=@&?{cG90epgW_$EgtZkR$pPE-tj^ zhivo*Hn7Hb6IOdBnlbqW{33rOb=aCjsbxO(7xut)_w^Q)E*DwOR+qb#RZmbT95Y2W7n4COlPNr#cXD-z7 zN$#%axVK{;haP8Dw^4U;0Zl{qes$XYlt1}-xGiwK`!cu*tRCZApSjq91RTo|_(h8-Jm2w_Vr%HQQN4C!f#lcHR6Q(cJIfFNxPI zX(}v^J{FS6R|xTacJjX1Ad#wX*N*=y{adW6^T`y+XO?Id2KQ~Ax#kJ z92_qS|N|S3qtf__Z}45N6J2+r5cm1QVtVqQ6!`{_MH+iPqfSI zFfNu;c_zbSB(r|K5r?~*$xjI&VH{U5D`}*fiOhf!(;4PY>uZdJeKAR5iLo_lPp<@( z&8nz4YhOIf=H-ayCF)E&Y(T>y6`gW()ryIK}!OtqR5f@2lhR@M9(LNOX8B`NEAe#_R)5JbR%3s zTH~VzCS7ORd-IDPXJo)IXJtCw-#w?rCl>_HC4ftw$!$NJeu$WP#nr1cF;`lEE?N>& z(!fhlJm%!ms`qPHz%vDZc)d4oi?s4w$nqxX`sU|H63a~Kn}4f=L)Rl-i(p=3FA@kH z&@9pZ@zTb)uyjsIJjHSYqZj6^PS zA#iS3%&9zd?VU+QKMg)_Np0!jwClR4V5jyXepV4EBlAUW+;Iq{o8@d`o-TjA$qsqzS$~WN7gE z1Q|oOq@*m9D+`o5M8t%6WnDMTj#6n*g|p)1vFQZmDlciucSUAe9W)~%Ek?L|1d33} z{F%q;wONrzuhERd{3oXpy4K>l%;u%cGIjv=4wE&9=(BKYmi2u~> zyS!$Sw`G!Y_rl56*Uv2%Z7&9vjRJHP^j_FsngId3#U2_?FDT6$_6&eVhikv6{v z_|Du*nt8RMH+LlT&D*yL7UYc|f4I%)m^Rc0*PDLd%`}sfc{rI? zWPgnmf{*M%StZU6h(p`rINHh69sACciaYf5$CuA4S^Kp*PS?I0g1-$aIa6DjS%rv;pFf#fZu+Hnp6n??wYF@~jQhuFv?|T^zoY+#I#49QcmCZ!cZfl!9Ne~z> zm<5sN#Djg{&|>jFun!Ey)N~FK2MRWJgVDVDSN#N%%5{jNqF;*whN5@x-jUOZd`Vv$ zpJlzauPWlu5J8&{pDJ*VN18*UXPQ+wFEvf@&2e9tAh#)Ef=~{VB8=dea#IK+TOmJ|i!oGksz1b|6wzvcDN=&RrDtpU^_?zi5-fk^`Fn+VK{=hpyBVBA@?Pl%d&)@$@oXZlZcRY?7!*UcNB+M4pI$BjG z%BC908hns3{`x3=ax4=14AMyq5A@)LXZ=iCk5KuZmc0gl`uX|-+XX??%1=k^th&W z6Qa5(0-5I~M;bfSOvY_ZCLP;>gw->j3;y17@a|6{I?oZpm6Rb6Pj?zH3K4hLwa=+D zX+Xy}N5?8$mhnWj(^YTx89rFCM|;H3F@db>thuDf?4}&uj?MS0r*?9X^LKXb+6B(X z%T-`z2l;9MiQrE?0A8M+D30HJ09>d}_P;K;L}^DgS;-eaHWgln9&ME8mUpP*uO7}@ z>DgTWfG^a3d9eaV0pPhYHpXnLXU;CeWt#M4q!({vOUpCVE}osODYvr3JL=sV1V{Jl zYEvi7V+^FP&PrH_O=|WcLq=5PS3=Zrm>#~LnR-A2-hV^IP^P02yQZ>MnoM%IBhKh z%KT>WEXC&_TmcV?naa`eLb{f~c3rzsjPLn~Y3J;99StY4oMmH_aON=2Xj|E>@5Gl$ zEPt=pFT+D>Y@y@jG}(=DXUVH*h;R_wO5OAQ8hn_5)YsAhoFyE49+HcOv#)|#(MX2v znw?yr4%EdVk=`X3u5Hy8?1}uU)el5O=afa__PO=8v_Q0_n}EVVjbcjnX7U`V!-q?{ zs*r%obq@L^Jw4fy&9q{jTrPFJ8?GV)zaBF}8)G>LmQ6T)5B;C}w3bc<=(#0F^WcWe zG-Q4eSi?+5NEd0%TPL11< zS}pm92bEC1L=GK5ZS{@o*J*NO3uSI107W8y{T|x!n_oZ{(7T9C#3N5V3$7^2IA*cr z3%YnzCWFZljpR5n{P!cKKHuFvK_^F@oXml4Zqna|rd|_N>$24oDJTg9wkX_SGHPXG zdO&v7TChnvBo;MOpWnv4XO=9buRy(P8M<4FLPgKQ+}V_&U53~A>rPVAj^ZN~w4=d% zis1C4Q)ps;{@eghrm^SL5mNm@w(a4!-a7>e(%d6WTeRdK5~X;YB*a<;sT@bOaWv#i zVQ7vJ{1Bu2KV+a{CqI#x>Mnbe_p91}-9-2sIW-Y^sfwl)fhN&jI3MRC3af4n|1T6^?9J=fNl99Us4-UeX+#7=4Xhzs1wmuVSM+6&ZMMwkm>Q4M zT)oP7`C7m6VSkv&Sy1Eg9)9pwFj_Ux2A9HbQM=#LvUihkFPZ|-XZL55Fo~v=Z|Tc4 zxE;tHdbmmaeN29SS$_VQ&F8K9xI{5jICu}8vWI{ z2W>Qh<>h~V%@v66B*vQ59HZ!#6n}lkzc|VxWSE>>HDVh|PM$;?fC5Og>=@M;WombN zrRo!jMNW>6qzh09a=|K#6MVkmoDiJPl3o*93IB+`q{5eKc(=^P9ETtk9UQ`u)!oh} zI`fj(@wx3yt}HUkk1q*aAo5%kCay<%UC|+ee%+o<5uE=>PG(doLW?Jku(B$1#*tl% zmMkZyMW7Jt8%n@wrsc6Q_-~yH@vJ_cpsBVCscNNvs{QIK*->8?JRK{s$jq6DtWV;4 z59XqSnkgqpSEq`iC@4`r&;q3FA6)>X{txx=&lJN#J1XH9JT_VXdBS_?(O`R2%VQ=` zgOPXWJvSXNvLmjU!c7U%-{x6h|!59)`2HQ1aV-BXa5?o658Qz7Q97D_C&PQ2UficXOPTn#D8BRS;PdBg}%7qmyO~ax@<(TZIXY|A)Buj*2SVx*)+$YH=db%~xFBhj z1_F9noYTYuxHaGRNhVhte9Yl4Go9G?(5Ji9Q|`EhlnVv&j5WTSG_Kr1%Ng}nQZF;< z3yHP^an1ahbDvJ|lRL1<>_CKzF$xVEo`V=28?-LgG%M!SWy0rS09JzmTOtT94j6mo z*ifX32kD?f$gZN_hO8VU53HU2@V8plpj16O2a#L~Z#r*Yi23v!)GIMpS8mG6_?Sr> zyANHJiD+jdRxSF71P2fTc3|5+NFnnZv-$ZIz<7lrA@2RSA4C_`X|Y~o09m*e2L_4m zXPm;cM<>G3K^NJ9c1dCZOLCq2n!*h+mzM*y1rN(c(cyY+j)zV|121@{G%?C=>Xf zKqQS`ZEA0EM`{0_4e?>;w+5)k#6<_+-6Q*azP^5fk57BgA;-@7TtCbZNP&2oas4!z z3xN{)q#Sqt&=(j5C^oT(Nepp~4j6g^bW`24d;4FTmN5}0gxK-{OzzEXu>tDxak&nT zftk*M=jUFXE$}dtj+yZ#Lbs88C4Bf`O#Rf<^^GgtDiHSA0l7Yx{fks{KJsJpe3UPZ z3i`wUnq>*=@ZsY9wU5e`yS2o0_Se#`E9a*$5$!y+yuTGdlKA04`L#8>46p6;=w(`0 ztWG$*UFQG}ug2(eA`koBpo9D*Eq=9ihoN=xud>sw#@yW#i2=eH~HL@oit)-lT~Bt}G}UA|2y7zLS%jk%*TsnbF?IrA~Ser|es|>-S|Fw|0Ek z>EQa98!7&WTC(H(%KHZ-kga#t+f;7d8uPd@7+CbbaRGz%w4`Ik6}Ls}_Zy-!N6QeR zAx2Q<;l1d2wU2euZFF?Q!#-&mT*-Jca&sFxpMK`X2Cq-j{zNfo=gXHb#qMfqYJNr2 zvVaqLrp`v`obTrW7G-pHuFn}y?XR)f^~knzkiuxjeBc-fc4*=C_en-4Ius)PJAtHl zAu*zM@aYt2SsaejV?Mv2D=6_B<0t2;-Fwv@oq?BHpA_xTXy~ z=7>&gATcB0gzvfX6AGhF3er%BY)`Frq@y& z`tGwo?oQ?=&balv7}v%iDN`An_lY`33baA(Ibl!teq}aUdYC5~uElAO2&AL&E=v#0Q@I-E$I{mvyfN6<#W{Gvtn6GkkO}h#N`!w$MsK z$hrBU&@aE-hPvQ32tJ{4AZoiQZ2*n8Zy{4rp4F|rL^>>8BI?SkOIMFqpkIb=MN5J{ zytkliyVoxecOe~G#A9hUR^dtJzOoAmmfBP`ve~`jUXav!U=~35P_O4AM~oN=yS)m& z#gMVoB`F06Y;ZduS9rk>CTK4P@j!O`b+{39lG=wF0VeVcY5q^EklmsEd<`1lxnM>) zH0oli%mQ=A%j*XFWFLyHv<{0{>u}jn9*Wm`8I*ONC zf7sx7?Lxg&MwSl9AN)&yJNK7yJ&YGjx(7wfh!RfKxIk43-4p00yMc!10~H9^HIy7% zF3NdlkAR%H&*tqjleXIyOs<&$x`Oc1+7c>^dmrOESG-@o(spdq-gZITsw^yh?VgxZ zP2h-6-l5D2fi0S0kiHGOb?cU3Ey|hipmLZFjomp}$h}jp9|8!kGM<7`S#=tC!(at~ zt;!3yPDaz>M|qE0uQz#Oz#>^ZBrbIDNTQG07P#0(N`8_l1#M}T<>o%j>NK4|iExfx z?cUVtdtF@ESq6N-m{5|#-NfN6zXUN814uDCfBUeJu8WhB{sb1=SI((Fz9J#8f4B*Z z2&S1CA*>hXVUJ3>x$m!ENo!_t`X0rAix-Re`1mlh+iP*itcn z>V(j-MgRaBqu?h{8{`~f0NK2!-!go44guOI-Zoz~1~AVK3B8Cn2pvh6M4N?{_hf`b z+~?BTj-C0}PrDu*ZuPORyMmfDfKdS{(Q&#HUqf!dVextaNkzcdlB|T`{r#Jmt;eot zig;Cg?!sT~0`-lE4R^1}9lN49CB{UtJuw-MSZrbj0Uy4GM`Y(dPs#krLYS}w(p7xD zD&TcVNpYk1#E2CnSs+xiOTe{FQbuMM%;&|w|33H^a&@iT^#_n_#6&8WbY{E7x;B7* zNy#ZUge+%7CqF$->lB234DcOl6QHqv)Grgyt~DJC3V`yyiM8F>NNDYkF`eApNoyTC ziwo>t`T6sb&CyDGz)h>Gi!sZgVCBk!#4K`ZzB_oMNlq_7GFco-HsYn9<$5{8W$Fzk z-SiiXgFkUg4IjOKJ&%4if^vO0Cn^hrH=Pam3eKxtwMk89^|h7+ME=Xq(D)PI)LfFW`W$0!5!TfGyTT<$Ge ze6&)@ze;7KiJxnu!81NhqdWj^!nUdXEMyu1HB z&yX@)dF30?qkWbLnjCZHvjy8XT3)Jnbf3%qPMThH;OTV5f_J&@eT5)uBst?vaz~)uPE=33|Dy7VKM)bKsh78`CE%F8{hx zH(CnzpsTCAuS^Ff;px-8u2g4XXb}({s`~w%W}PS=9Rd}k$Itct8s*?jKeV2prJf;hok)b5_0VI;4ozQO(iklGE^A$LuheUM^(daINr@W1+asluSKYhvQSvdspgy*iG{ zn)9q*%pxwEq$f#1Gg5vg%OrWmU+$OX%M$_EN!;yj%rgfJc?OT9aelEdcpxo>p`SE^ zB|$?#EBnAm$lWrnTG%F_Bdz49~3UnY^5*oc?+uweHmSyrw zlY zMTNJY@`WbDFXJ-`DtPfmJ9kpz*p33mb%Xsv71au^M$xYx)oj<=YpVw7Ub_u zmiP69kU=DPy7AmT!$Oc-pwprV3Y?~z?CLrx<2NQBv%v?qoJ^ZF&VR-k!`=EKrac=l zdoj0x6KDhNQ{CmfovD$!amuvdCt&Jf)CRZ4W4vBU4-8sFkL}N5|h|sti$qXf(7t4fh;kA{@@U4=ps~Iz%*Djt3rVL$3-G0hW3LPd!m1 zdf#{p?=TZRRZA9~lNG47Y;yT#?B?#S)IrVUaFrH^tnlh|BbCIcZ6bbUXZ5P-GpH7v zH?j78@?;{wSh58Pe%i@TTai!bAb%r4yW10Rm&Y*KLx6CK^52~v0(afTWV@VvSVLM;ozQ85Vmfwi7}(B*zbax~;3_JINj zX2HLC9pYOlS^!|!e_-v8+!}>&P(L(n_P<$($9A4MPfIsU3p9&Qnq762=m)RoZCYQ$ zm+)et&;VR5DY*k*%c{4lf(nuo`WY$mK|~ZwMJC^Ci+cQ>bV~zk zYsN?o>}m44z68!fpY&nw@aH)oMKU2~L&EKtMj-74Cdly*DK~i+I`}wzm5O%owO5yA zp9jQ6u?T9CJETL5zVR8>1 zuBY$TXnlc4_y>U0v2Pz9KsGF$(Bv!SQl><5LU)qvc+WskgGZU*z~rk=;hHa!wLtSf z7rNJ4t@v7Je$!oVv~#jZ?7x2lKlDwK}C09+TEeoK|=?K-G@ii8-rYz z-A>va)xa$@y~g_kGfeMX!rTWiqACZeQozXP{Oh1*{x1)2_un2KqHXk`KJV9u&ZE$d8SuObFv$<{8GK$<4j!sWFElTE)%L8&RJ5tA4SI}r?@p|Zhour zGq*T>(kja(^qndCG`LpuM3`aLqe&}D89es=AD5mqO<)_u?34i95M}aY1(IfPsTAvj z^77<7pH#%nr@kKi5K|*2^nId{@`-{MFTT9Kx(c&`{IK7snNGuf;S!0G&{h1xwn-x^ znWmXq$XMNajk!Pt%BbiUu(pKQ>p#a~qey<0uru!Nz6x3TxU8D=qB<#av(b-J6ZWpR z8RI`^(a>=>a3utE?#OnThtT}uU;*L4$P`cTe8NHbS`%9I#jVdmZ|xsfl!LhBMr zQ{?y;E<8lgoQ2-0Q?1KH?6X&zW?EE&ZywRL*42&|jWRy+QNp+*Qt7=l%I2s){z1BU zAe{y}Ct-xZF(`UbL?N1hzH!>qO)8iOP?i7Z)O1KuYzLziun_o|Mp{~07wZI2EPRHh zt#_uK4JYi>$5Z66+PBY7uJ)BFJSya$#W&G&{vYQL(MUO{=0UTvu`h#85QGp&&sApb zHmb#7ti?mCGGT%zrL%j^R3@1w0$5&$R$4Exox;PzAKBHrmsKtNZ(sK@N}4)D0C9sv z5k4nUr`5>_Xry%Zild*#AOVWVe+KzFuvV9%c2kA#sJNrM9FozbzCzi+ta*BJJP<22m zG1A9FH5pR>&=!KeDD;c>-x{R}Tu=kDh_(l=jxjxf;MS77$$hgN?syhFS_>w|Kny#s zY1`JVPEZu9jiMnt*nfJ!Ni9x;=Yl%-;&s}Fn(Muml)Cz;4nNWUJZZu?9$O9-s$hjtJ#)p{q95HOWpM_A(bns{L|9%;I%a z!+sZ6vOioN!5{S`KH{Cz{Qx-c&Y3+M$QlN#?S>Zi&z+B}ZHE@CoOXBTswaz*$)VyB zjC=)D8A(B~1&kcum74Q^X8j}f`!lDgxaiaABjv8WxgvJ2Rk}5IeornHRF0gwH()NCcPhNw* zP3}nRav}k<$VZTvS>z0hcDjq>PXIy*ZLqJe*| zu*&An+Q<5!H8_4abRia5Z}rLN{CRytGkjl`=M0I@6fueVaaHty-M*-S2j$u?TVbSp z&#cxkj*0RbtiFdjf^|jwPSVWv8E+CXAFbI`W#af}*%<5Y_D6rlyhje`Sa2 z9Q7a7ITVSq!Rv@dga6UENS8tg=DdS^l!*gdtZ}4|k$)Idk65b$cGzVI#$mi}QuvU`OKJT?vM3m8J!e%M6vX-bEM#X$9Q9yS8sEDDm#yLV(n>wT4@cA3wee zUyR~N3@U}&3;2B9N}^1oKArmf4|GjMFE10jAQT+oe*AOe0r;%L`9C&Yw45=^uL3(e z3d0X7)MhXQ&J>8~dw=({7$5FEeU_i4BduGxFYb*oZX{*%PTv$QuWpaV@a`jwj|Yao z+-@Fj3S5_@r5$U*77I)()t)g=vW!7K8AinJtmF#mY z*_75AW@CvMVBd-K_YMfU1%&1^1oX>PLu?=IOYP2W={=JEo|VT@UAl4W2;GMHQ}Hhq zq0W{2B#<|j?z4*ARQA2eUs=lM$5(S%v;~}Dl|<`?F;-VRv~J-q@foY_J>RzefVf0- z#N1`qBp>|#wjCGA4IZ;uq|3K8(z+qrZQ^@?k40?I-mtb|bAG1xEuVJBsY*V^uuQqOeO>3Xtiq%S&%a*iJU>S>Wmj`@5uoAam6FV347NVa|W z_75ft16#0OUM|QeO-?E?R==ssU>^+;D-a5)s369frtm(qURdE<@30OUITk-jcI-$n zEX0gNhX%K{mPpqICd;Y4T&zIQamPIM@gBoHdlpBWG`sVK&p;x|OJ4EIjppwKMNI>h zI#PKm`#d_g9>H}yjk=O|%1xhjZWuTfOB6xin$7HxzL|0izl#3$7TwY^<>YL(Tev(s z)Ji;Wc)J^k0cxnW(UZ@d<=hJ1SsCrM7!yy)(w3PF$z86Ek@p_$cNnb3tBZ?dEivCQ zPt}n7>gN12tt)uQ^SpWaNY+v4qbU!fZgZKV@y3xhUNV(%RY{MRD<#3M2aGVrUnn)vc>^^J(P ztxJxmJGl+IBr>N@_CA}#Y|Pyrhy2C&qQ(3Lv-=R2`ms^7vRyqI%H*i){<~kL=P@>^tpU1lyB=H^k)P?-#Z3MpP^8?etU{> z@KczYs^Y}3MWl0Ki{{r#_PHhE0qRK<)%YsiVBFNB@m`8emt<3Gjwi;VwZ*M9)XJf7 zO`HYX$#%`DzUQDz%-U3`RjQPj%^sPjd`&@7{o96c^nNllgsgWtF_!uBE7Wa(gttYd ziDSt(4Dzgo>Q~x5esjKf(eB)EK{pGB9|JAl9g4)3m|nBZ^Ljw#Ax1w~r0NDh$h8mhR9~Q^am^7hBCU@jQi2UGB~K?zi*>91tHC*8FB$psxIy5D{c* z3JurmT*7%5kmdft-^yKDFka2-oHYSMjp~X+budhRB^09w1 z3u_{9Z5AWeX%Ul^M(nN3|J~#c(foPP8^!ay5s3T z;YuC9aP*^;WN~7hfOs=gn^`)oNR7(o`+y<-;MKCF3U($>+Zo4tUR~CiF>gnd+Z~mL z!+y=FMTH*R^4oyFSW3LC`smw$UX+L>n3el&?whz&9~~+4nFxe@kX7i>;5D0t82pv} z?d%5y;$M@^rPPB>WR`CHEn~=x_b^B3Vf;6L{(DEn=8a4li`Q3B?3So9bu|r>KM@9D zeu3rle9yP%jHNQ|DyJwe*ByWXxmcAdBf82`2glHx^Z zgEDoBkd9ACAO}xg8S5e-G}HH7`|SYM?EtB=el1o@u#QxQC`151nBYo_U+_HNIcsoj z5XhQ2&1EcO?OKB)-kkEBHPoPU_bzMOJZ9msj9?H{~uZibgKL59yj6+x5ac%{^IPclB$8YmbSQwsx&Kp14 z%a&mOtRpHBaYfL_6a0IwlkwgDJKwY424LhD3Gw-!|MuP}@Xx7%8;=w=MX8dD-Fx8v zWEYg&45>xR>j&HJItwY~gTmabrE{7~@rbgL|o zExT55z&>)WNR(6O{$r@#F>Y+8FBqsQ4rMbX#J=9gzQwDCC$#84#=C=)vlnz!q*s}R zUshk za?LkG;1}FRakuwSmdUA?i$~rkdk2C1StZW+Igeq(f8PS_o|ZN9F2y_{Q15X3Q> z{gqiZ$-2S&?|yN@NAnMB!2#_%bZ)VX_xP~1U>@v8TH)Hn3a=H6jtd^$x_ix4GloC+ zp8lBMJkl0;;xW(Oq!`<94LEjM+m&te*br0RwKk|165`F^UYCJ>);HG3$^CMgA!#SB zujj9(l+jz*dwQgWwut+{S{dLX32)E)6pCix3@{*Vsfu&K4W%Io4Q2e z{k>A^;D7t8%7<>)!rgG5>w@zSU)^sN>AY*to^*|5Aq-9VO>b)cVRX0CGEZQ*+G&J# z3s#!e%B&wxdv5c3YAc_s@(4^$w7={XOwm1lmQVi148ZcX>V z_XZDU(<}C=0x^lG>vA@Gon)|DH==eUs)Yc4%;0w<{ElGav^{*MH}=d1G}HT;{xdYt z_p(88yoXc&^~n1@fr-g_?)|HIx3JOnj9w(I263c<_U^ZiYD&)T)doC#6*2gtYqk@% z<^ByTexh_o&-@Nt`;>r>VP-*PVRZZcMXWuETL$W5lVj;u1 z1LiCGhh(+)n8V0}!nN!p0b*8B30(L?KuPD|POft?AOF0BjCUopQbpOAh2Z#pk5LOY zj3lhFU&WWV>_2CU{~{4=<%K}cp_l#76hVBo@$cl#x143!B&`WBGE;;#N2bIL1sOqQ!Yg{j?(Lk_BlM$1n$0&; z6q7#;_lRkVL`FDhLxJQi8($PZl_Ex24KzMtvU2n5Re@Jm6*Y-Wq^Nv7a{Kbd9psti zHpp+8$qekz9o@3&Ti=3S)(NwSw$va{qD+G}}_3taL75T4AmJIOeIqUFK>i1XY zxUB7EQgrR^)`_veO_i%dME2}y(JhnMVZe1-=Md4fVc1Yw_IPhmD5lc9-N_i1x}&c@ zPhF)N-mOF-u-iv{sjRpnXB;g8Jj25ufjB`Hal$vaUGfim51dG+n1RW9K2KQ^TXZiR zU=dhZ2@aGr22G=mdOkt_65tpM-4^*o*V4xQaKO+bJO5ttbq zlwk;bfa&~6;#$b#(KhwKqao|AFthZE|{is%arl5h8x_rZCEdR($>1%WW zjhq-Po}km4EhBB}oKVq`s=SGydY9VuFnYzh3ia2H1gJjx=)~avpsOHebMNYSi!}4y z9kybd=#f{VNNu?1gps>xIufL4&bU=2rg(|6>4PQmwUUsuEd&7D7pMLs;loJ=|J!DE ziAM7w2ah!K#JiUqLVgc$=_j28N_aSgmeEZBBpFq9U)Wd*JO#WPloQDm` z%`j0nAmi`g3eLRalUpEbNfAthkGEU)=Zox3RievJ7}`oK-J;tK)Ud)k#=E8O4M3t7}I*W^W(VcTEj!+@0L#E2!m~tzF zv8%|3Hu;&3@EL4Gd})zZ!fFbT4iWh=DpsZ%$2F{Lqp*HyVCOaeIa64RwIfV!%>lcN zqbN82Gu~m8SBP;r`%fzQ&c+g3x!p_OizX7N@xWxVqd5^yUksd-Xa%m;-gdhGq(0K_=)n<8?=(guYs+pocB0 z4BW_+(Lol`5feDuQj4UDAa)Q{@7kzpb3c7As~M`{$)?NZ_}YJZs~MPHrRU8V>;2hC zQ^ZtCeS#C6hNocg@7x3UYO&Cn^G8rXPe@2$vvj2Pd3-}?NGcESAmctI&}*lzuI}B$ zL|F_Rc?j(4%Vvf-JhVec0znCmZQ}KrVn*hXwz+QHZ3^USHvED!j(iJrH%pI(mfIS)<51sV<_;XR;|UMOCdUev`WAyc9+BZJ?w>=qUfE5oZRyZ5?P(R*ufV=EMRL_ z`EULW^P68I>WF|VuMloLbV10W(Q9b&^|?2qhI^h{v_&GCFKQ{U3=gvMT21zfk(*Da zgi3&@KFVSCOJv(HQY%=1HudSTQ{p9Xb}hPd0s+)u6H0qI_rFE(vR#7GWn)ReYqH?5 zLp;?n_vARHOX=axXKPI}m|q+b8gX)KZ*606f%@o9hk9pr=2rm%B^U=cS^)(r=8Ttd zEFhPX-UP3LlE@|yKiHU(W@@s*_vQP(GKsIroV=ETGM}hR%Xx>wn6W1o5Tw(rW#>_v zQ3jNz2Pg@nBUwba%%v%w|yIij{@6DBK+U)I1 z!~i4UWJ~5axi$6Wdim)QGCqfn>m2|e=zUOD01g8N+7${oQ5;;l;b6W>_$_IvaX$V< zhs$Fu@_w+gy4D7a^)vstq^0D_3syb1kqM`WXkub0Pl7pP?ypxIOBE$TOdOaXi(eND zHoi5OF@2NMmpAtwH@L$g>Jo%X79MlMquMsfS{A=vc|nkc1F;qg>!o_io!2n!!1bn= zu47ddEDF)v0kgca@T9J@fcLp3^0z3e;z8_li!uE zcX~%}0VBCz1N2Ho>0E+|3GlJ^QVZ9*eS1)l`sw^~?@mSCw^KV_JUPV{_7IIOJG@+F zvtnOyFOozAa0L{@(}8Ij^Q_#CY!=5OT5c>k+#TXI?6fkq@XPWwUzEK95b+{8!ys-^ zHxTn=F?9saBXMvO_K5?y5s&hx&&vO8ldB!JrZ_wYvQNph9S#HU*}(?{xaro7-vF^U z!w3Y5#_n1Js3O$rc^~pE%jf(G#e6dbd+wL1!>!F-Cbt^HXHMvjX-gwAxOe_qk0MZU=Z%~OXO*yf!5!rdv`99}MF@6uV!Jrp+x*KY;` z>Z<5I?~xWqnCLjD@5~t(zaZ$Kg{nb@%6QN7#wk2!gB2usH;`96`Z(Izk(EMX4 zP+&c)uS|cQ${RC^1sHQeb>Ae&;zaHH(oz7a{4n^@Hn@`4z-x>=vTK$v8&=kDtIclBSUrs*sQSIbT_&ga2d<-8={p~39 zim}>WEKxeAJ2i!ZfFY}a=eh$0K}WV&h-drH#vG&nc0KZmC-8?F@g-dueop!xn|k}W|_41~|x z;wv!`mdzWgS{{>F9OO4)Yp@*y=US*{&6N{Yz2b1 zxq(Iek*-$;RSDZtNLm9UQ|CR11%eQAXMNG?+pvAU@j-v-UCZv;55zGzWaMY;KYwWIQhxQ2w6jsIbAp9!-JW#7@k2Hj)9J)Oz-g~hmr3; zx+MbC!UWx7xN!2pji`$;JVSv54%V#8Xp7=vkwsEEcN2L>A-_sy>NG}c8}iQd%C#XP zCE*hABqlyN+>hUgGVo>O`-CImYLAIAN(OXq0q8&?ddIxY`79&c0%PEBu@uHfN4&^y z4>Wt`|GTj=zcwa7`0$r|u{Ww440?-M)-BCsBS&eftMcx0dgSUhsI>lf1O~V-_k=4E}fg z3fC0mIn9AFUSk$7{$oZ^K8GfLqvJCYHJjSlGxyTz!eeM@Psa}2aB zxyY?QXnew|Rp_JOHU7NmMiv0HI z0346=d)`4zxlY@~FOCxbnl)}CE%3U{*?j;+0F+{% zB#!!w?ZchC$BWnG-a!)@Q_@ss%mq}V{=-_vE`s~oeeHMfP09cK2_{!pL02j>US;Ba zGAnOl6XHo8rc$AU0@01rK0j&V&VO9`n_xQ5=}3 zMbUcRao0E}J9V1x_S=SpQ#(|De>#(`^i@<}{XW;X+|av@<$I>!eB3QBV7Waovca_8 z*0%Ng7jZ)z-x=HJ*8_#?*z=S{%haR6v7Ng-SkUt%z*a5>%2>7lcQ~gE#wN-`9C2Kv zvV=logl+aI-s&Fn{e~;JD!AGKK}2;F#oF7K3&$oinbmZjJrx2aLae;%+^pO@d!ABd zLN{Ds8KoV*=XLSn$6!J*^Ss%pbs>&M4mI{|x6@kMn=q9<>+4T$!+22a8|Gs>N~P~* z+3~)5#XqVVC=8;s1+crlG0()?_Q7_yy!pIS;kS_Py9;p`!fWiv!lokux?Q=-a0$Fq zk?kxyX)4HRpGgvE~@%>fraGSb5&bD>UL*9YuS&wTk%S4Vn zI-n!ILkm;br7~BetUvkSuD2L`$6mj>#B^y;L{S|*@8nUXy~w#R1|qQN%WlCn4}XUH zLbW!><3DS@cq`wOH*b(;3Z6db@Z~1^TQ#K($YWtfdFx_)4Cm#|l^tQ%zCGOC`{g!s z&mJVz?6;aBB9y&qOoyeCTcoeLr{UYUI)`~TF;IO1I{I-u6P}_4LwIB5aFa;Um@ns);92xQ22Py1zu|GyS)&r7Ib{HpOWWrd#Qi` zMe(IdazMy<3u7=7b~xw@zV}h18Zs4&f5hlm57s~CeZ7Gd{l1kgfpi_T3<63g9Njns zlQNFc3pHQ@l&yAp2OC;*yrra+%hO=UY0O^Wt8K7W4BV0aZcbi!r26Qw)Mv9N?`kVO zQ*O9gPIg|wWrg4Z1hElbk4m_$0>|Fq8waXUNbUa`qB3CUmevQ>&0u5RVcrX4&57%#Q+5gYdo{{DEoJ{xg#Bnf#i1Z-f^j3esZtWw$H zFc>XCMd6WLNT2c125(Wo2+@x1V^f(E`%_;E;46$w9!x&4^lJQC0VnT*NE8*8Thg@wGS1cH!gmQ0pEY)NOE+z!-;&AA=TW`FY_FV;~s&|DsEQ5IexfL`r?H>87R1 zd%3X>qw(sLzuema9eIonc7~&%76TR*K!vX=Wg*(J5l-dIeU_m|QU35F=#;8K8xMUd z0{St1iD<2T^p5B#+l-?)6YSn1UXhW}p*nrm0Ohc$D5|%7_LGk4?rV#1)RW5Yc{W!> zO$DjEZsOkiBNouS0PQ=G4dZk8{#t^6T3h)nU03?rH-zQS6BC zJwmVW;7vsD7yD3ov;y~}9rVG@2gvPgQ=ZNs>;QELrns&)H`{?aZ=I*3L;qWzbuxZk z%((fP&{HOTnVY|BM@7P5#z?55qa{-FeacA*3H#*ute=>9Zmf3y+I(4o6&oUD@16VU z{N(n!Xfb2fxDS$UT@>{@jgV*g`Ts69GS(P)Ssw8=aP$8-VB^0QtuTxLMN)!^Igs^k z{#0yDFDohgUs<)EoCN=C5zciizl@thd72eK!Kd>lU-)9syIxYYmIepa0s2WV0Om|N zQvbK=KApxYjN<_;=@KP9tfw7IIdQ$KzS@{%^{Im9+_A~Dg5h^fRU;l+X^~-=yq)ec zP78;MhIM1E7XXl8NN}_e14?_{{cDT&8n2`zkQ(iQLoHqscK+z#x8|PbfjZLb17`A* zp9iOem)B@)yUDm|M*Zx)fzjhJE-J{VMcH5*MuIfaiuy zAjDfGgEoSK5CTg|O6Od&P2bb|YI%#78rW(m3jTZ17##Xvg}olC^fjS$C^Ehx<7-kc zhoWc3xnqV-IGNo*tk*w60Jz-NKx!K=FgI8YaLD!4NK1>Vnq{%pqiXSt?p*k!f3F(H z;2W05!Z!y7o}H&nX)(OsKqW>P@B&l@Jc_4dnpKEjz;3-Y0s1N%M}Bk%ia**zU+nwx zT$VGV@dbhlm=PgY;z2Gkj~E|s$ z+NUE|CjSre3()H*K2#tlKb`y6lxZKo0<*-5$ecP%UVNw?c36OC2Zv{)x;eZSNsMi# zHDYS7f#$cGJfC4OABHZsIGST(HhA~W9g{OE{RXLZ4wKgv@P&c(2B2;cV#-3EhsYa= zXpCtVZ&4U?wD_jzMqJ^eBjD@ejVO8t6##Vui$l)N zgqQ7nTux*I-p3D7~$Zwa6g>&6MZ)fT`3{ElkNujw>&6 z@$J^&n<8h6ND(##8I+t&aNX%6h;sg2lU37aA^#k+E05EcL8a%>2~-v=!x!_G#CX=C z6&la`Uo8jpC!U-eM$8Q_*VIy_f1jN7$M%_wc;GT22tl!C-XqPQE=;Z&l2482GA_2M z?RO~4NlcESl&4(#-_Od>H>>n$z^SkcL?l!_f)&)d%VT-2CI2@B`peD}eCPhvqUIrj zo8|@&B$2!@n<4qz>;*S^>z#I&C!5P0`GdkX?3erd|GjZo8jYjN6=h&9LpQC1?`dug zCwPpTH8Ug+M&xmNRp%^0QF(KNTXZf%^=tIY z)>V|CFkT{v4mwmC0p>8?qm>7M@7})XNl(1`?aJDcKRDlwmxN`;cCg zn>dnRmA-Afu)}lC>;(tEZ*V@II#7umT5+W6U-OTvkY$vCzF zyXn^VkUUY3&OHs|<5#w^-s!DVT1dZpP8v+|)sj@sMBF*3q zgKxq+pKtQ9xc140+VhlFXY`elyYK%33ee=Xz~Rn43r1^Vk~Y{{l=K|Ced`yly%B}K zZLEBKm2DjtBr;zl3UU0+Q{0E02*+2pcIBx9E$(eH|Iy*Y&G{IT;&>2+zR!MaJ>?(; z^=^=J2P!77=K1H8X~ri}3`e;Gu^B*&g{un3e7M(>w5-dRCQuCZo}rP`KL#vbE)G0k zuN$Ty&3lA=Pdq|0fQi&9Gq9gfS{8S02&FDlWX%Ys63wZS%F#8&$yqVYP(lW7Uv1@vJFh4p1)7w?9dU0>*;G zh16?Qd3Q4Avl+{CBl&W-nL)V^3a0 z9jt^H$F{?L^dW|)=IjN>z91h0^3~h)^lae$M{9WlCiA!6VElRBwlo3+$-w#QJJ3*p z3gP4hB^TjiuaP*oef$#bYNTHD6Gd{P&tM_|-8u zty~f0dRg636kc%8E<<4L^jUJhqm7};+`OS@yj&*`yinfOlQcvzlCj95Gab$%_RAvf zo%{W@bcNwVXx(jwG@WOdf_)Uf{D&2osrfr<8}t)Db@qa_m7rf;0kzWV^_7)e&KyY0 z{ay9SXe2Rv`0kpQ8B>dQvD(5Iubl|>eZ4wrZLvbr)6SC1VJD2Y^7pz0wpyg+WEpN=zF!h5tj zSPnf@lZm@x1)e~t{E7X8V0_%V&E1eGe}j8qj5^iZ2`{xI5oxIo$(Q+uU%6d% zzJ|AoP5}y`AB~r=Fx;QTn*TrjQ3QxkzAwRD z(PmN0M+Em^bwrnSCwh5D^LK`{8v|yP!&0TimE^Cy( z)dnIn;Mclhv{E?r*a%tOOaxOM`D`EFXe_r)>(3c%=UFcu__uyHxnLk!wPI0ndGhmJ z3D=0x0`fHT_8%@sZgc^uG{1$q|315nmW%!mUZ>-;zj3C|8TjYxf{QK7{`#CT@1}9m zmepor<`*oz4Mfw?6pNq#wWJzT-y@TqyHrLL4eaZbX3H5TZCf2|v*2Qz(qD%&X52iT zw9WXT?HR7AV;Bm`YH%;%dl9iI_kXSRpTb=RM*L=!4Cv>^=hYfF{>&Wy?3V_TB_*BJ z2hZ{oV|kI#PixD;SWW{t5(|C{aYI1Y4MEx2EvgDo#wx0?2k$?g@X)SaNxAdkZpz-z z{Jia`^4EK5fTn|xFuxaeF z{%fitz;r>dF-H~@uS-J8^7r?rYojhMi-N?Iz->o2!$LW>$A+}t@{=lrfxM35tunz& zV8u7S&waIN)*Mo-{V(ikjzb9sL9ZbCbQd1zlCY|h4`-~=5%@yodrjYqJNJxs7m6HP zAphauS)$Wqe7WVv5(SSzmx|$NsBC%C;S|4tBjOk1el!ikxI^m*cAIbZ1MKBi4%W8 zef;UBS$@V~v*0iV_kXRDW}o@t(fx9XdGX!Eq%e93AarT5$fO}tyx#}xEKVmxYP*+U zylXMz&l#;)#-exn>XBwS?(cluR54^#9`4(?B5aoth4kd6=uy@oWVUJ53b(6At z3rRf0=4XLh+vX_(xK1lksoMW}*&pRgKLFZy$AMp=YkHb*Bnq@7xh5e$X-nJ8JG| zz9d`v8r{vT7n^1|+ipq9Kspc${IgG`5fw*}NE)1fYPxh< zJ^l6mV}}q4Q)&wnaEwBsD#-PR0L5Y&id$NFha~s z6W4lYBCrt8`w}`bG0R;$M9S3UEW=Pm=irv9X&AH=2VDr_TeT@pOp=oSbC_e=Z~ z|5nojS8S4S{M_KTTiv|T+zo1QfJsOX{~B0kTK7s=4IZf33b8yy3(~3{gOVGT8s34E z0RvI)F=~<2Wp*#++3Y@*JoLF)!q{AI3-bh9qYsSFOz}f2(HXeDH^66n6{cJz|L6d* z2|PQ4u@5*%m9LiDM{w=>5uz{l<#c;VGg16lhuE^T&*TDnMwTkO-21vf;0($mLV>QJsN)usLaXhoF?BqL-&i=t>MJsAb=FH~e!|CZcyrVTN9_)C zm&;3n%2$M*x&uyf@tet=kZq|285ZoZ1k>d7%uJ>AP=o$|Zv393H-Eq!^vUBxbt5J~ z+EXib>AV+qh2L=oQ_u4DW%|i(H{*j=BOG_-GwMRooopfjV>Bb3e`Z zF+O-aer~j9FH;X)+c*{LX=7rFcgQ!qDDYvpd_B>mEyf>&Q7HytQXPFSc&*B?+a@<` zx?sx-$-twtZWVNG3yF+5M>=~0)+DJYV9G$$e?kyyDy5(Q`>2HbtN*vq1$n&z%1F($ zV%rObO9fuFeemonkp)-$9ILI?z3H+7MIzAFT@u!m*9oiN4rP#+o+9{QJjJSVt3ls& zB2rz=gYY*mA$VdVt`~9ry^*;plh}86P#%J=td#t(ewT^cyAKu}R~cI*G@VzaVrZN# zM|D6ly<*q)f{z@Vx+kYFz%K$UM#+B1GAPd7jCMSQCNLR@G~PNQ>G1r*{IaJ&C(yFU z=vYZ{^WrA(hV@~xi1hE~Zx4;xYWxSQILoO5ZT}I8$+=38>s=0DyVA43@NZ!DBGx&I z)=LU+$WhtiLvDE3<7L!gZ3(ZVPcAn-vXanLP2o$gHTKE}7m< z^2L2kBAm^1*eD9XzgxlZn2%JKDt*02P8kQ14Pt6ESgD?$HW62t+Tj2>wC)3ejmzS@ z9o^nHVCxlqocp*ZC<$?=3t3`a(d-{U@qY*w$CQ5pKtbmQc>7QW9RQ$5Ym) zzPr0kHX5a$Mho=Qf}^@V2$4ebI-T2P$&raknQLK2bf6&ah^8WRAuB2(kfVwfdU_uW zwoM$(?Wo}cO3XyYr1A0tf{ETw7erb?KaE!%e5)zaf^Av~_nO-?N&yqHK^w@`2Vw}K z<>wdw0NuGPL#$n7#Pqhf)O56?;oRwgxYr8`CQ4M*wEyK1yQsj;QKn0EC)(spnS=Sh zlJF#M=x^;qovRIDVA0RO`$VZ}359@YqMf>dKI{lWF93a!QXKQq*yykD9>ug#sf$P- zB%ENBP^GUer_NxC?dgTML14-e4YjREEQ)csa`M&l$QX zvA5f#+0s@LMG@BI3OLZxd5{C>1&{HLYj*>^_g)w{&rhDvBP@xY z=#LXcnI|s->*9S=Ygh@^*KxRO?IVMoA@F!GduvH%n3Q|n} zhreJby=V$+C<`I`+4yD56Opff5&F%7NJ|5kZ(Y*sO}j<-^v6H52WxC71Ob=Y$O^3` zOQ8U7G$D!oon8mlFA%{jM;z!jJYzB5Tp)4yiJ^`c8i{bN3aQrD>ayQU2Xv%4IDv3i+e63l0LfOr3G3b||o z(3X%^ff9JR>QLQo)YazeFtz8S71L7|sm2{SEY*nGW4QQ`c`7~mZvLw1Oo=7Wtp?{0 z`~oeUu|P^rM;)OPuM&Oaw6m_aoug5Rw5rR0S$N0#gx;>uZ9@$ zYuf3>5sI=*H_P8Cq= zVN0~Y@E2jl)XUtUFxT&vJ5)tY1n(Z(H#&W-q-c(98Ga&Ilmg?tepR}Av@@`-4aGbG zN@ZhJ3xtN-MgdczQsyDwaJnfQki?vbui@xqD^O|r=@;?lirxB=ZEc_@&a{BJ3sv(P zt%~Y~Eh#~al?ESD>gbP?Wf>LSi99fZ`0{9*&?0k-D7b2(j-&W39oP1NsU7t-5xJJRdsK3!O9NsI zH?=VeD@B*e+Zt2uMQjN=Br2hNjE{+uD?7&kOXyc^9n$d^L_0ZPwT?KhxpY479@ zUWFx^$x3jeL+9F*AQ>pSbmQUQNz8@PR#bwQbDO`Z0Y$#<|+Yf|7EHF%z^3Ys^Ym#3|KI28jV$-$5FXHo= zXs21p?H?HGQY}kma;o57qRc0HLntMrqnwR9uBM&)zHN9d&hO~6sHJ_i$+ys7(RYb1 zzFSXG3}If=60=&g$R_{Djpo>PXZMv#g74j@LZk~(wg_jqK+voIEy|&NU~QDaf`Fpr z(G?;!b>Ku^S=&UnRYYS(Zr6|kvoqB;8fr+R&n6T(RpSkPx@CPws|d=Z9{ifBbo<7M zb!bV;uOe*GU?;)ELauci$qc2Z<1Q{Hr-9tlLat&Sx}S7UE@G$5~njx1`H*lego@ zpheAuoG<09!2I=T+frjblQb{x0HAO~#&X;$P?U{(U=1L~&uz0oAjb0i6wSOaPpCEY zC`?CRtgPk40X!*+u$!1g;VH}yI9d7kGClI9I1J``zse9N=iPYtyclVBav z;J(Dybf5c<8>pJFlX^Y0&tT5z*nt@7ESKC)bqO%X{;%%N@1^N5jN%cLcLoKnAgn-I z1Qn@FXNneCYG8;|EGrX~iAzZ>O%#*LKOi$ruxW%*87F0b0%pQ zW?A^7&-wlp(XRCFyYJrjdCocSbI!ZPz@>IBE9PjoaE^<}>`?E;z7dfp&K@h3B4U5g z){q7@GwfO%XRGO?C(IA2MH+}x0ZUdIx4cAR8U{k+Ey>OeXgtB0Ph|js#k-dfDJe=) z`aaR2<9|=wcu&Qxi|E3xL!kfI<`+WdBqh+%zO5Y`$yfI%Wl-H?gW;yu8W3j&P zmiR?n#`lqzll7VDy3^c#3u9(+r3laJo1;+wei z^=K5`^2f|*44Llzspi|BBzKlT(K!@&)TFF3(ww5X_D;oC0~5TCC5PWn^)@yQa+$%S znZav{%u5SreK5ylL6j^PWtAURKZm&b1n}95*`kTrq&q+34>Nfu@czg%m?nrmH|k%u zz+{#W`R)5v@@QV2-NBO^`7SPP*iCU4^3T9-_Pi+LcqE7E5wz#(KfacG)G%ho8)d7l z3OLrqj@863j9nFtSJ?>(zqAz#W`(?a!A9~?$`FRARc0H|!~HreOIc=G>~qM4f$4VF zfc8aRgKfL|YG~Y4s~qRltsFgx4nvs!ZF3WDpx-XFP7z)5!d1_=X9uWv#pu7s2?TMS zvJ^mz`f1}0ltqioMdF%DRM0yq$c{Qc){U7ol7EV%!gvaXcS?B%33!qc-6W>v0=KN= z*EW=l*P7&4G*YH!I!0$5{^#J#px8PBv5%W4DxCW;lF8q?`QlK9II)q427b~&ShT-% z7w^y-sLw3n>*rw}^#b5-YQT#^W29zD%fwSc;p#X$$hU1#h tWqfLCnE^Nc`X`Ti{>9^`|NEJmS3+iYG?|V$Gjg;nQj^mUK0a{v%3mP0<1GLH literal 0 HcmV?d00001 diff --git a/gipps/graph.py b/gipps/graph.py new file mode 100644 index 0000000..9c5939c --- /dev/null +++ b/gipps/graph.py @@ -0,0 +1,43 @@ +import numpy as np +import matplotlib.pyplot as plt + +# =========== CONSTANTES +An = 1.7 # accel max sampled from a normal distribution. N(1.7,0.3²) m/s² +Bn = -2 * An # frein max equated to - 2An +Sn = 6.5 # taille de la voiture plus marge sampled from a normal distribution. N(6.5,0.3²) m +Vd = 20.0 # vitesse désirée sampled from a normal distribution. N(20.0,3.2²) m/sec +# X*n # position fin de freinage (calculable) +Tr = 2/3 + (2/3)/2 # temps de réaction + sûreté (= tau + θ = 2/3 + tau/2) +# B supposé égal à Bn-1 (si pas égal alors amplifications ??) + + +vv = np.linspace(0, 100, 200) + +def vitesseatt(vv): # Vitesse qu'il peut réellement atteindre d'un point de vue dynamique + value = vv + 2.5 * An * Tr * ( 1 - (vv/Vd) ) * np.sqrt( ( 0.025 + (vv/Vd) )) + return value + + +def vitesseadop(vv): # Vitesse qu'il est possible d'adopter en connaissant les contraintes de sécurité liées à la présence du véhicule leader + value = 1 + return value + +def vitessereelle(vv): # Vitesse maximale désirée + vatt = vitesseatt(vv) + vadop = vitesseadop(vv) + return min(vatt, vadop) + +plt.figure(figsize=[16,9]) + + +plt.plot(vv, vitesseatt(vv), '-', color='red', label='No mask') +# plt.plot(vv, vitesseadop(vv), '-', color='green', label='No mask') + + +plt.legend() +plt.title('Variation de la vitesse de la voiture suivant en fonction de la voiture leader') +plt.xlabel('vitesse de la voiture leader en m.s-¹') +plt.ylabel('vitesse de la voiture qui suit en m.s-¹') +plt.savefig('gipps/graph.png') +plt.draw() +plt.pause(4) \ No newline at end of file diff --git a/modelv.py b/modelv.py index cbe6dcd..6f349c7 100644 --- a/modelv.py +++ b/modelv.py @@ -1,6 +1,7 @@ import numpy as np import matplotlib.pyplot as plt import time +from colour import Color t0 = 0 tf = 20 @@ -13,6 +14,17 @@ U = 1.25 # vitesse m.s-¹ Wm = 0.3 # distance minimale entre la voiture et celle qui la précède m Ws = 0.9 # m +def rainbow_gradient(num_colors): + colors = [] + base_color = Color("violet") + gradient = list(base_color.range_to(Color("red"), num_colors)) + for color in gradient: + hex_code = color.hex_l + colors.append(hex_code) + return colors +colors = rainbow_gradient(11) + + def phi(ww): # prend en entrée la distance entre les deux véhicules PHI = (U*(1 - np.exp(- (ww-Wm)/Ws))) return (ww >= Wm)* PHI # retourne la vitesse du véhicule @@ -39,10 +51,10 @@ while(thx&(p&hSv$#u|I29`+oZa=ih8Vf)IP2S1xZ9>T4%!;twK27_ z5#i&r`27cXt?nB0aq9KD!jEjWzM^G=!EC>d{zFHUj4{PvN*J*h z&#Br6jda{oZ6JSNnQY#ccW~b(&ZNg%Nrj%c#)h9}0j7Z#nSrt$zZ}y#+HPby<_#t` zq^BpO*EQV5o@fsI9>RQ_%kucaY)op&=l&V#nc;DVs=N2^@s~{9`4Y6NL_lm#+Ne)3 zbnY8>Rq8r;49dSq=SHH}uKo>%i)rnq)xViIv+dyOUl;eBbX)yvj8_R}&FbHXG5p^J z2Ui#4|5oY$w#NURhyOoBjn3$`ZgG`^I4*HGI`D z%l?8{Yw-<#ki_ch>l?$)t*zfrjRkHxva+%&OY>wo<1nTh7`iVJM%4iXm*tHjXU=@H zrl~xO+TVNqVPi7gYKZy21NQ&P z0aM+vkoIN3`{M;JUYpnQu)5Zc@X0BQ?3V5{b4UF20tcg?2yWn3xc!`WWz51$HU+xlt<4 zKIZg(<_*brV`IE$?!ypSb?j5VK+aJ)2JTXBBL(I8WO zyt=8=Otz)odfIemIvlN+Zv~5zJ{)R zJ5QKS?p^S4j{evf3s+cr(NO`$-q(4(M0bTQB7bS`P{Y8MYUbcDV(b0>f+abYp?G}3 zAHkfQ&60jm+3(Qp_-PhR~4Jg_;yoM#kMQX^HLg*Hq0;gtr%yuP5&g{ zAw=?JMVj`1)z$a`3va(|19f4zu-KdnUal!}E7~ar1cAOG6S@41;6>+r-hq|zZ^u=I z(>;9*u|0c^Riq|Veukx)I8Iv{)dxWzlsm}XmwCSV@ml4{x#p#0gpBPylGkCYG&AMD zd}_#H^ZhxHa9u<5FJy; z32lOaONAw)uL##^MtIGev{hBSpLswc@sM}ZVDXbRm)vK~$B1LOaayBQxiuRd1(XW3 z=_)_*H2r9dWmE-BN^03BMfn)SgPwM`1~N^D@o{0QiNlXf-oIX#K~$Ma9dGU`m#xv; zdjjj=ijR8{!ka&`0H0w3M|(rvV^ygFhWNO$&#iHFcVp(uE)RHmSVR`kK;@`^gX zArVWIsSIXX84cNzX8`w7D5V0uV#DJ$XUHRqdJa935g)}nn1`40L}J~O?H(;32&|6Y zyD`(J)5Vl z0gZP>Sp@!{)1}erGAsAsvazSsE$8N$KCGGKepNeO{EhK${dxrhu?D&3k9vcIP?kME zV#?=*{Mna!@^<&`@y+?s51%ocnf4iZKRgvL$5$;p5ed?GYWli| zn3==xqCddFJd7@jTfL0_QWV4U<=dVTvy)-$gM%(S(`C;SdwUF*ImtH7r4{8>(Q2G6 z+A00ngRq)zT&0TK(B^vn0!MQF*ZNCl2h=Z2NplcwdKBxmisGV+yp|Ws_YfjsMPuN}+&$4V zZlHaO<*IfbX+fv?%fXzy8ZnnOP{4sl6bL2d@9>eUB5BS@=SC`*<*vuVvtFj1 z;<${z#SOl{#||?)~4B zVZ#k?ul^uste5$>xZ%?n8x15A^XxkHW2lP$J!}lEH>ZY;dYt;BiJ8ed*gGe)-qie=9k*$BGGDCa^E}J8}6w4f_f!s^2=`j!9p)# z^Iv60Qd=VZHODiZ}UYGVINIRa&urQHZ_Bc=UoWs`DFKG{031`0Y+N!rs_Bn)KCd!C_yXUyw6a(-K^Ap6-{-e969K zJ||%q%6SScjp998ShO@9^NV1TaE^ej6R#3+Lcj|5;H}xlfG=@B|0`fb(GCRy^AIp* zhGNgQsg0!z5G^7loWtVJuXUD-$yuM*5$&Js<<0J#a#k+yMK2RCqzmGK)kjrQ9;@AD zVA)*cH}1{;e2g*iNmizJk(Yn>>6y9|CE|vx-$;WRFc??2_ny03Wbw@&%z`U1Hz5;F zm(@1SPqE#+mDP4NCMU{xzWjJ`xojXqaMK5t{ge;Mb$}KzDnR8fx!K>L)aNPR^&F7wG3+d3pH3gj7m;?xSR@$B;s+k-a?`0{h#vV^|FSgt0v z4#JFxpUN#1pu)bdhKvJ$g$x1>XzZALy6Km2aNnKzthk6IrEo4zJF`VX2lf57(cVvn z)9wtp{Q=;NHgQ6vW3F)1f*oEtEHtb8bj_{RkP&%F^mKZ6F_sdA8CRo?VGt*8y)&Ct zQv$v8tu!nj!!ro>Sw8+9Mk3V_6r`~dr0PNe8h+h}A!JmoM*f|r?|R~w?dRg4@x@E zDds0xXqCfdJO3+Y=+e-lo6?DyTZ4WxyYOPk7ps%E)jc@X(HQN*Q?J!nr#Jb0Hw!D# zdwrCH@tj2cSrnok(XF#I{rRK9tUmhrgNF|p4;)CCowavf7|k*+>WbIkYq_0i!+S*f zg@EQZ_~WEzCxZQz8P|O5qbLTw#`Mg-XCq1T8Vx6d)hy=hTgczT{0Na=O)PcG2~LzK z?+=^OGS+2j-l6BYaJpgD9*fR=tpdlHCer(dzCJ#yT~7U*^Si3{fZ9 z#{~9*)Zhij-+P)*cJX&bW8)iQ~twO!e1j=;{Ws5B_Si(ulbHeE0tS zu`Hst1AMM?p32I~0#=>*Q=JA_>=PLonJ+HE{{9++MTlG~29MN;L^vAVt^+)TaFojU zP$aKXcyyXIE5cF9nXHZXcdZY2V}E7)V)&Cmc32S48)@8Cr&;K9pVrkWvz)zqF()S{ zK-4ZtVwSWvQNLh*WYfMZ%*&U5=o>sdwe8@`)x7x_rADIc4b<$9mB@yWR2Zhag~&mT)%N+s10lqjP)ReA9lsZ^xf9T zsjn**!joIp>g|_oe@wx6D^5O3djsnc5uhCPt>tH>NPcJ+EH5p@UoUYNvFUpTf=rZJ zyt-*is-cXWTw{V(n!vSU%%ew-Ov_&Y5}Yh=jF8@*VOo+$*)bm>ynIb?ezjQB0E+ zdo0B4W%O+W_4C4g-SMU-B3u2t-z=Y+=N-%zVi8G%V2H97Wv_IVo|ST&BJpoQC&|-p z_SXHeB@=IkTYHJop;^Z|TF$we?6DNt%18o4G8o!5t_G>VPqIapu23JXzuJN1~|DJBgrw}4J<5lq7F`p1-E4HFVQr**#gO`U?fz-qU{Y1ov z@AAjt%4@Fmro?qiI*m%rL`7d8Q9X!t}oeUWgtV`b8)y4CukP~i0U;xh$K z&a(GfETZcbE3_}Wn`rvG6C(YKu!IuR{V4Cx;%RT`NqD6b8F(zYeyE`3=S<4*lBnoV zVf@>x#_u169p?fhbMsn-h=w9t-P;+v zu6*sjFQTOwXXiIg5hy3N(r(v9#(qBpFL(@8ET39|t2WYjjfb^N(P`ISdim?|F_>{; z=S?~eMH%%oqqjS=mzse|`9bos$vpB+TMalWOtHdt3Ca6sa7tI)yaokS>BIv);uWs` zSsCo7ujO+aVMP)R4Y?Tr=BOR0$uw&%+Ac!~$<55^%#VHURB(^$$;$ZL{X0J=Q%%)m zGS$Z_P9qLvy~j%%on%bWOXui|CDDn^b&*%+99jhLXo`xr=e@Zt6bLswrIfK2Z*bm+ zebDz(1=6x8A7Vf4Q4fHG_jianxRwSni62BSKz)&%Jv8z)?FL5lS zQ0X2hS>Hg(0%Uru`&@Jy>6qn^<|-pyPT{67QVjJORqgx?2S)*3Rsg*0dnfQtPS5!l zMaT+}f5@EDW&vWz8EoC(VwGYCmB~m6ssp_A26*|gcL4&9!=+(^lGduO@+#~7?MmgB z!g0w1Mcv5x3l!d->9QMTP8v1swsW!t=J98>!@ z{-v9{ff&ho$eVwCu??N4Fed6jbTb?HRB;}GZ)S!N<(HvZM(y=lS(J#w8fJOL?K1hP zANzBIR2>i?&=w8Lr5+|XGo#^G^-QNt6Cu(ZKmF0bM!Ga!ddj+9YvSM$2a1j*Q^V6l za{ic6lH%FeFcKVSE%-cgwBVZ9n<7*Sw=8pDKM68T% zBx04`zr!S)?VCR$1OaNp?_hCftM?CUZKPvJ;XhChFDuuPtSiC_*am8>Fs}?|!FQi2Oi3@*sP*S`z zD~ElMtxDNPN7V@7Zq>cC>#oD`s^d}FNr9G!9|*YO>@qAAtKhm6prf23Vu~DFWyoKC zIwRCAB}h|uSbunvJ@6~#fvSo_is$Q3A~s5Y-u(5K^Md`LV0k{&mLW)J+g*umnWMfO zO>AK;9!#HZ{eG+9-8KIpKb%eZe83%ry^q$-zLsChj{RG#(4)o*)wQ(8>_c>PsYP9G zVFu`^O0!UNpm4^kWMPFl#SAgYlkyV!LWx%^nkvP$&~v(Z^n5*uLPd58$V9motqweL zl|D293%F#3QQ8~%wJwML1H2V`Q}>KpU~4G;@`YoGjhX2O8soYn6xaqp&>4F3WsOTc zm5wGOI{NwJ1=u9{cP!$(aWlJL-kGlCyPLnDxT%fh35ve>uoadeG63QmEa$_3InL-2$@S zQ-qI6;Z&MdET`!gl?AAtqyM(Xo02-b#n4dN##}D$Pc=9uYo!su08G0<8gNnxuw|(d zL<~=C2knmc33ok07VqXAJtw|^X59Lvn*jNmjhh1h)YI@xo2aXKS#1@QowSjj7&{^P_-##rv}n? z>cf9T3@7sMh;i+r=F3pl;Wk~u^o$`V;C_CzIPJ6?x-S)Yl;s-&MZem!BXTZcS3~AG z;G%9yB|X0bMl#zk3YM{?WteTVx0bF`u!WCEgSg0F*aFkzlt1EdM^P4ACq2x-DJa^7 zfS$Dm?cAT2kBMsD!!i75eI5wjfg(-K(lfSHY!OyD&?2S_u^hO<^w8T|C@&Su(N3@D zZeJ0B`Lx7MHO z-JNo3qMtNCd==oId`USHMzkZb^JsKP17Hgu+qf&wKR}s`I5yPE{u#H2v3)|} zgvck7BlS-fccKhh985ceN9W9{l;}eX&#i(B=0-ia4-c;z(^>XLzaTf}>OcPC<1?H% zu6(s0UQC#lUKl^8au+Nu>5HE=&Z|7&mt?M@5h`A*cKw`7bUh~PCKSr*!T?_M2iC1p zq1CEI*cx9yQSuM}Ho-e{64<&=AzvMgH67;`?DzAoZP$n?3(qaIh~$=?AO3Jl%g+#% zKeOp*=kQ?8BSR3{9{vqpfMi9D7ww$@FMf>QY%aSHlfD`+HqaJl&4II8#6#ZAW=r=~ zw)~uGnsyX{@(;b7F&*oXRCTw@GiF?Wj~7yEG=au{Fy;snue6bP)$xaG_5S_IA=M@5 zI^&C8$Ko_jNDbzcI=ITkp>LsBO5HWZhO@TD?(TAW$snhg?cblU{^rizI>O)JTf9Pa zWW?>C;+3i)_0wB#25#9P7|SGXPGKV~yTbX{o;LfwUxqdH5(>k!;Gb+!yYoiH$|idxn`-0x>@}9S#@Rk?1EE8+j6`=P-DM_n(Q@8T8mfH@dia{enrrp1A!00M* zJK@r|tC#-p_ZhzbCXn3Xjs)+$8_G=E$vnNIrS&I@)&2`$sC_(wLt8vs>P=2*?md~e z>QT1<942wv*)}X`T%zX0xZrxh zD`dnmQNRBz%L$cKkjwCupHHaQKR$?Xa3;MOq|&&8?tkf5VNYp6ziVP}zQlplQ_Xc8 zPjtk+E@YyCj5P@_y} z_9cd`-W0Peo4jYo(5_w7LfKJD_*UCQjr)sU-%op>N@uJ&!T2(||AU7=w9?^t^yKGJtF#i3R+* zaj^5xOIb0EFIe3b%|0WTTfae)}9w@wsCGq z%Jw%QiK8)#mp-o@lrL~3sulK{Vv`_Q+7()P6LN924?SI-wXPN{}D4vs9Q}{2h!n(?T+M+ z{)my_^oDZ-$k&8{fbx2a54Z~u z5Mwj#hR;J^1c7#8?i-*NmW#BD)B1o%1HY_M+{`-ELeaZHz!*=)3L-MPjasf$FB7`efuCQpBs?lVrtd#TT-Ht`S@H z=@0thc141K<#htBLT1g#I)^04i8KEU7!`K7hPAFHhfz(3-i=N{uT57F6bzq`n6rWP zlw`A)dJ;)Wg!(CpbA&=loXB&J?Uz#2SYV%S+p_g%{Y~dUS;BH5_oaKKh7`DWf|}bV z_We6v*izz!;`(h~R*?e}Qa}J3MQJrMUMjgLKH`+S{Ekv0lVKTRWr9Q`d|_&)!C(a8;TbrVkAEIZE4eHHY|+{rR#{Nn5#ik3~}Mxexhq-koa zZAEuFPNjSv**7R!_J**hgN=vJ7u@_iDhVT;ax3O(Og1pE%Aa)4yxsD)I#4*?ZoHF8 z%>EsLKw!suNiJva;ngLcwdpe<4>igtC^XlGU!d23nnymp0MUH+HQo+jZdT<+g0!-VAaj{FN}4@N1+c z;@daPqsNYcP-?js=X&qny)BzJD_L45LAl@rKMQc(sj!4*A?+=sOp(_dMiMPn4P_RjRtlY3eJho+tZ)d62$-&m`zLSw64yLLsm z(=&6OIyIR;qoS<*Ha|b#h8ONd3;;8fIaL1U2d}(1zs700Vo7hGBu4k0hoi9C=s^QW z;;TGM>gaXM{kGN|o0ta=9{lLSh~ z`7^>Ui}sKH{4=OPz@#>e;EFc1?o;wcd9#7Y3>i_iNcV6-DE!&sEp{5Acia4H<||Y? zuMmJ0#XwxA&{xB2a8t9dZy$lW98J$GWYR!X%3T=C^9^zuzz$dU@xIZqPd5A24dBhJT^kYBe`1+eUnNYT0eaC&TlUQaox6q);fiSg=Vek zu_Cr3#L1rWc#F2ofHQaA4mHF^fQsMy<42IqLQlC@ynL`oe*q}lzol)dMo>47ExyxG zaLUm$WRPvnNQ&3mZmR+r8G?x=l)&q&D15xjXVt>s_7oBVRE9;=;48df5v?pQm#*^X zlUyk9@!5?E29uMM8@7VjX3Z&673^^Li>=)3^-y-xTQw#HHaaxSM;a3mWN0K?908Am z!CvqQQAlFgntOo^7~axvDK{I7TwMike^WI667&`JUbSPY<7=M!`Q!s z&_9s(Fh*z<)=@ISFSv6O*f4&tnwQSFi(2L zUa<75EwybF9c1*4!AKGOTwZ`e}2dJAVTuVDsxNBDJ_u1j?UyFV$1?3U2_A~+KY^0xT2FQ9M zlh>;Pqx#~lvd8?gO~#Af-AKEg*6iwolvjLYVxH-0&w+!mZ!mE_R`5>W8pueX^?UVR z`{c3vlWV1-woH)!l}i+N(9-i}NYAYSYyT5{s;*tD-K^wKRD>WxF3WO6;n{5qEnsE? zTjg^q0P(hkr;6Z?*lL~#SFKn5o;B9=VA28;MTL>~9!rI0aGOvB!zwBgEG8nddIrd< zo-2~V7x5`fb|8g2PU6tLkMU<|W?jWLRQlYW zTlgk8_u_>EX}cWMX|Kl65u=d?Y&P$Bf>T_@Rl!HaCci=AIc-QCORPto4}sopNPDv*VM9XE0ECu_?ULr0^cd3^r4CC^Ovjn4h05)3TToTRtw z78VA;UdE2y_+d~~+1m2*}z zB1zd&RLH~i46qU?X5!1Gw!UY%^_p{&j3mFwQ5h?V0QDDONgyBe2fjGYDc+3agX}+O zmtHi@QBkOF3D0t!o$L5|#PRZQa2rh#$LJPnHAgUC@1)bERd(p1X7M(|0?FW4JjDMzhv|Kh)aF$yY!8T42ELv*c z?|UQ8>S1SBH>$@B8kgIay{iZmG;wK~CQiztevj;1k}PKv!P?0sm?wq5uqbGJE8ijG z@yX!z7+)hAX)V9|Q~+O1hv)}Mn06VvteqhxWV|v!AtOLiu&kNCvlI9XNV)2blwcCu1#C`OGp zy6^rGHpYgU{vxdy(rKh}(LeRBKE~4?lC-LF6;TDU;`J4LoXrpUg@^0O$Z=6)us6Pl z!4hFmbqvvk!dm;GhW3{%UcB=C4Qj4(>+*f0lb{pLZe}Qx2@4Dc_=zp@d_29PXy9HC@QhFo-3Spx|qNGE$#(u^OKaw@yqnsKO)Bpz(TlV z@x4Tu|0Qz7J#?g$^Y;l3hrH?9FG;Mz(UeMp<`?Xj9M}*{|p^rGLw_3!;kLY zAw=#s-@Yn!%}P@D>K9r7idM&a{OGCIJ5K^jI)DTXR zl<)ILj^K=2#?ej%BMu8qne!^4M$`ojt2C!bT}-kBDBC5R_Nc!N_Acsz9t4kBGZcBJ z>t7uJ<=&)kNlzfs*%?4RNu71D{wgY>LH!pQ!aFGehKi+lxKtMYj-@bJc$M-EW@>zz#!surO?HlQklYj#snMqK{% zjdv9|>TIM6U6`8MoIAt~88l^_26|LwDc?{^kO0DXUW`?PhK?7)UBef&&2O)0wv0m6 z2SZXS`{nhj$V(4uMRnhUDK;&lALSdmnH?Tg4R@E!qgK=OuYWw(DWLut)0GxeR zP9$`ZZ&QRWFPbn;bfH~GqUl^wMth0!?~0IhN1x{~C^Bx+%v52#7R;Fd){9X{ZKRqI zN!@;9m9_6;hw+DtRPW#)W?Z}a04$OaGTh3y0@C=OA)|3CC9;viLFU@HA`zxUEu(2< zZEE&E(nAXws>}#@La77VBZi(^&AbL%SeQ1I2#P5p)>6Tl^U6sD_EBfy7&*I zi(}##e?yJJmXIW81ayG_QI}~+vsB`CW_-NR*PwUmRM8? zm&%}KIQz#xro}oYI<=1)|A@7HnJmG!BUv&t&KxkqK~97<{zt?po}z9!)@y1qewHDr z@^9{ynlVw8@g$^-W879wixsAT5Cqvewo@;q3w;b$>cOzK3AH$ruprr)@Icw)d*Gjg z@vk}>52m|Ad@5dPYPG8;6pBsfmZf->`-?t47vi z#qrmhAY&Hf+GimRL5$j{NpgQ$b-=;?mwG|byc_%AWMMVAsoJ7tu(2FT}GRu=Kn3qn+x3zLlj@fl}z{wC772x@)S0rYDy z#TTe6W63TkY5=vgdIjmbyLXZz6voEm4vh|jxPsA*1gT6#Gb|Yj!6ruEuT$>GPDxS4 zatLXF%(WUa44{@~Dfa<(H-`7zZ=I{#qd?>hRp+Xqc9~}1pOb`wB%7t8rP7;L;e@C; z(8s`7i;6=q{Nrr^XD@9qMV~0&QGw@p>rh$_=EAZ%9vyX!%W~iVczP z5)8B10?2Qzz^K}QN8 z4KN^sHw#L|ZspVs9*5vihq!Y@VXK2G^6W6z$=qBhucQ>yFskoXrLK(%rWIeVQkI9> zxDxghE2>6>h^m5s#x%JO0Sy*CW?-2ZRf0pt8i7>fboN2=Z*QlYG3|~oElkfM(Ggg8 z{6B&QhO6a*_*=DPbvNKBPyt(u3Pux~sKJdf1*Z{>`iGt@Dwj6WHzBFZbDI!^DC_$e z1HR`he?Vn3-=V0^<|%SKla{IJspPMqp#&26KZ8c`qa<@Z4Lv3gR812u?6`@_cUe>s zf1m1@^-yWD_w>;Bj#Tc!FP8Lz7WN$L=k5i{uf=4)t~RRoeE1zeMAvPFW~enHenM)Z z-t)p1nM%R$-aPYAbZWU>2O`N3P{<#nr6o8FF-f~|E8-{YRDP09dDudGqxG=I_q_y^ z5g5a62KjRCUK{WehQIg;W}D+s>z=s5@kG7yp8|HW6hnCX9_nel0h+h~fa%{c}BIJ~Fz--1RvHDxG1K|$lz zF9iozG99+A$2o8~F|e(&Ind)fV6z#hR^Dr~_!~hXsoOWL_vbosLPc9U0Q`-(p$1O0 zcY&~=C<2BrAn%|46-BIf{Z|xue$p+hF8Hj?W$=Ki*Mx{8Lu=V{<`Y6f>fPPlW(~ww ztWFc>ELzhmaL2%;@JOcm3j!$VmT6JnS>WjV`ZdvC-vQg(+nf8V)tp=|xvaGCYm`42 zL;&j+p#x`P!=WAPQ|x)cP4u-IP_@^gDDfC!umMNJEM&Z72k|5s(AGX)h=}5-lm4o7 zu}z09Sb3J``WsUXtGe>_!1-zP`Sl?K1A`8`E@$4j1&iOp0utpAw803ckYaAmPqnjf z;mfgt=Qv{DFi{L$g{cm8iajo*2T5-V6SvH z)N(K`by=EPC?G^GCk_pa>a*pN?J48hW zhW6|LVv1o+&`-oXAK9O{87isJbrP>|d!6)wH5hAFP~P5L^4w!uK{zUN<;uxmsFPT? zKs9FIzLzlgxnhUbEtt=X2Q%)i=x17s;p&3;NCw|4SO)4A;C9x1X%sy~(K6b}jhP5!)qk2N&ejDEr+hrj-%!Dg?(cz{p zrLVm=ym8}(s_MrlEdcixz6HOEL1xLwX|YG^=ZB_tbfEQClL4c>cx%iX_Q7gHM;{Gc zWPfstdq}sAcdCrpYM_E6v>{F{9{2MHI^e;`D@>F@J+y!veP8J$fIx&=7=FQ&|n6Sl8a6E;8!`>*^vc%3j>1?svYT?K=1}1 zydFegy!p1N;-(^WoUzauJk=|Vx+Ll zi!J%yRG%q?!Y!LNDb9>_kh6-GE+DZUY!QcQUrl?XYqnNH<{-gY)Ar_FtfbeOMfO=?nnYhgafckXL|)>B&zO%MC?D< zl4ksr@837Jnjt;hK9uabG~AMG4&wNA z2sXuOyZz5jgI^%S-q@X;qIjBw8Wo*!V1)G_0)OZHOrfB5A%`q@^BdwX{fQ3vvm2Om zQ6hJLJZ2KQZT~(?(stxE+;}E0O9u}6Sp(PUuhLH+Kd$xT(P@Z~_DXARCMsRP4>jaW zTm$CE6a1O)D~Jo`!>A0oKOLurJaQ$S!kXjpP#gugLK zPbX13qYlo5nx>|G=fZJL&hC#R$T$d&H-J{bnXDB`&~9qf+3Y*H7DLKJ#Q6ICLYZn* z$tXdv>g3ZSQi`zzZ*Ov|c``+#E-ETQ;{T^lSLPNLhNlPXW#r}6m6Zw5QXVGU<)pH9 z!?x^!P*Cm3-)?$w9y)Xm9zn!$X*8=V>GE?X&eNxrMQulF4VHiIjf#vk>CC@ZXp3Ys+>M{OqaljUq` zMay$ti8(h)w~zOg>rY5g&<@nz z3f}mHxa6f9<@f3ksPw8A@(VZApV_#nod79xw%bF{b=fIVGv&Ko`F1P>vOxA& zs9yN$0(^}_jneFfD4C>3Q#o^-|$|7Ekkmz^|T^hZHS;zu{H_p0@z8g`XX4>oPOvM}IWcM5S z+<>>RzieDWlZ!thR(iba24v;q$N1=is zu)qHIlofXe$^ljmIfP|J-Y=srlF~~*vsf^S;^5S3=ucEbeqU(PZU*(5KX_djQ#V=g zb=g@d$XlcokSiMA#Xdn7f6E1hGg`D~BZv!|DOv@z2w>xXt;(B8Kmq;de|RhSynGo3 zM~OwkNs}OO{lhwENM7z$kSI7(xMkTE7u+s8XI?5blm}rg=`5%i!tBK$d}4To!ElW? zJ@EJ9yRJLkI$tAb`hd+UzCiv_;f;z{CdF=al@%4QO1fXNH^!;S?mBk$q$=PLF*y)B z{0p%(u|qUZuwf%gvo&q#_b;Ow{TWoFpRNX1j|h(9>fuEg)cehw*gyYV$0F{aN|^p4 zI&K05EQhh2{vW;M6@}cUSQU=Z_MCcEfVdL}*B|Xg2N^Id5=AVf67=`C%XI3CjjYG0 zS|tuWGJzf$s*Z}gE29aYugAigC;-SZ3+ko~$p(@~j~*R_el4@E!X-Y-eki0qc(7*e zBZ%7G2maS&tXAgToLT#Jbbl+JTfrvlKqJq}emI;Hs`-ozzC(~r8z4*_!9IQZvWc|5>gqlhX(eI9Y`BYCoo~Q;%{=*t)LC1^2W!s@IOq!CPv#9wQ7oGhX3HZLA z5F7{JMnoLNDu_+~S@vvy#P{zvwEUs~qMJeann}_nA9XX8_`)yiAqsU0G$|Ks&fAi; zf;}O;X8Y7j5PVRpo0u&N$e4T#>cT)U;{tgE)A@1}WNX*`JL=oumB?T(n|i zV+oP4UEufSXS!UAx>F4*tEyC>iU^fm;2RXCu=rGq`NhDaWK`QhgAbtX&-=XD>}w$0 zVKO>z2vLs4w+UYUa#gIu;mGIjjj=xtT~Mam4xW7b?w#V?+#DpYlfifO5g3;;>W zjn>oXgylIo#tUuD^~}&=n=BkUu?187DBG^=GAOp{p|3Yl((zf0*lyHn6LRQ-p~K8r zVo=Zltnzav!7ne^fG7-g9~}Wua@sQ#c}dXWxJeGA6MZWJ>757!1uyZv?YO6~#6U zQ%x>d!f-Q7cfsPu!@^uK)|v+>7kVWkwXWJ?a>>;>A+5IEcl#g3j7(9wTDW;YWb&Z z&A`8ezmRtYnU>J!`hX}UirTD1#64L}P{cz5v=dWI5I#1)^jE;LQT^l74|iWCnsTT#$*l^q|9! z9V^cf$^pd--XKUBcBL-pPhpi|XvXv}G$x>gnFC($IFfvr8kA8-cnh=Fz>6gM#?z-i zq9s9ns=h;kR)tE?q}SWi6Jb?2*C%Y{2!Sk*2*0a}hlWFOQP&v2#h?y@+#51?^Vx{4 zye$Jp>e4V6i0)eqnL)?K68?Is1lw0RA!b*=w_`Q5d|qXlb%LK?1zr~l(hfLGavFkq}*fuTJ~O+8IP5r}pJLyIHAPzeOHei>2}til8PljC(RQVwFPJyAOS z@P$R_8M~s=d;pc^Py_CL+1c4y6KK2l*RGMycCGYFu9y;G zGrv{@#S7Y&=Fd#NV;_W_AUFndPkwzD7lHqe)|^J~FeB|;z@uk}H;d&=Ay-)Rh2dU=XPT-A)la`r7v~2oK`R#zt+N#&g>LacVh!_ ze~bjmLvHS+Y%q)tXO!lVyTya$Kq#<&Z{N4MXDok8UM^Ik0|%aS;m` z6Ye!A=P-%_kr=4qM>mYDaVFSn&gd~BgP~hj=?)N4UcP*3!wXUa@HKxwZmqWaX@qpNw zmblXwWxK$CqgTEUcT?N};xyO@2fx;2#Wr-SLTnaTcyCF0ynQg2g^wP39?=*gXq7-d zkBK&P(r%VLQ_|LM`8lwAmI(!lqG6yeD6N<-aZ>`jUiU@YH` zV+D6FoPd+7PU*%&dl$BOCAeSdH!2La>AgW@@(dpcW6wfELtn5-E_)91pFaI#bku_K zTyg0tk8(|aiX_U4$4VLSAu!R=nD`2PQPLWi;$Q-%E-dn+#Akm-Gh^Hg5bMtYrBl#$ zM6J(c^Q4@zYoOg_?`x~S3u?E>XjLWH++C0=1^NL}tufiPAdxY` zh?$#bF9qcGxuMFF3p6?D_OY$ZdH~h{dEkhiGc+j755+SwGDdy=e6@hwq!T>_2YS7x zpHHk#%rWF@xiP$fGH(XykU(B_xr>`+;mu_T#}ZqUr>PTX7I(rAM+3ZQO}XiTh7FXK zmd4&Je}SBHsQ-QgJ=5ziu>M8wQ@NdId(J&y#Cd|HVF(&WY%Z6@Lx&<*z#+@@on?D1v?%tSUzF@At-_}nO16wzp zu@OJ9&I-2<^SXa&L70wL0VWx+4?f`tseOIwrmC(ki23PvdM;Ooi0dG!Wh0x@wd|cB zDpf;jm>E|VxThA!ZfdgNfaVqaB=;>LjQ&9v8bsoC{xkbh#F^TwwK_hVy~jUPr(DyoFM92%G2R=2mraDLi~QZftFMe!dtOV~-09 zYk&t6EgW$-$CRu9)XiG&&ZdLm%;Ba9bH}%oLQ1SCqdcmM7!fI=&Iuk)`DfnlCMHpR zzngefR8=ECd^k_xB&zV&n|B=>$Qv)@*WG}TBI6E1`4_AoFi{50MtL)XN2~Sh#ww=CZ~VoF9c-^eS$|%K;lwNf`-y9EA!04opk_8!fkq>M z`zgXAp+!WfUpP1KdqfEmBQV?lfC6*OJd|C)zo8G3AZoKDCZWI$X6Ht><%x~hy7n9! zwHSF8Bo4rR8j6<5d?k2D|7-?UqS2y~-@<}EoX#*;ga!!?qUl9Bw1fCinhDbnZO!h~MS{)!+l>HM*H>Lx%;Q*(Hni2yU*!o^-0wD-QMVC1V@%cF+$XxR` zt3(2pt_e3X{Dk%pkPDuHyUc$>h7Wsnr~O6jU=At>G(wN2ZnSBAwD!Ae_aSDc-)=dr z=Qx@{h)hV}mVW^H_t6tPc0)Bbc0tY?`yR8(3BY*io z_^kSdi^o<&h!RJRTma9qZ^!b~awZ%Jn7nb~*s(I}jvOFUyLaw<+upAGLXi%Wofr|b z6+iw=uGQZ+84^-~qvJ+BmR*$Gp?bv1wMYZJgDNn{P<#27!rX%OIxa;$ibEDKm};;H zz5z02T8{@iey}d8@;L$$4}c7SH58A2@WjKV>E2KFh-HxOg5U21^p^i+nsYOQaUt+2 z*E;+Em1c$-8laR7?Or!f`cl0BlP#Da+Y$s!8(pIMccVx}>y~EyNX;VR(}R1!Pm9K9 zp{YnPun|>H!Ks9#BTJ`8kYVQA>cr8JYFvlP!)_kdXLt%0<&c?*yNWP2(5lGR*?~Rh z(n-B=b+lPaBpL`Z6|RDqZzE+OfZN97$2prHL!Z~3@7J-&1Ux-NPbp=C`ll$E9=G=` zi~)Sf4qg4+G4-g8bpj`L#9h|;X9Wiov=ndMiezA0o?9P)4&-ohkr3<}`eU{>=rwhx-Yvr9oNoNn!g;~X5)D9NbCtMkacKKcGO z- zGeOW2@I}9iCUqgGF=h(zzeC`x67=gqHH3)TO~bnx5&Xxv)c+Oyr)j~T6&g-?Z6-+P zGOW6m_ckxg&4Hp>ECrg<7#aGF`JPaj`Y%r1N>jWX~ zh!jpKh}uJn7JxDe3WGQkrp1)9hpq`Ta&VgjB+yW58wrCX1ogY4*Xd638ZQ z6f^>>n;q4k>{;)%&@|xDp@n7|q4p&CH5mJSs3^L2yI7c;8%BI(af*wZy8#siK+cj2 zI->-5mp^zTRLpE)_UHC5?Fl>{3RO^fpS;jE0F9!QucMm^vnq3A9B-m=Z)lWJ2iwv^ zr~KJ>J26tFDIov9c_Bqs(bOa^E;?Phc=5IT+2ns^kH&BBcdduo)nyhDE#fs-E4iHb zh+OGrWDtRpD$K!aSYV6CrG}}ZIa|&em%!zvc%PyY$Co^25;RjCgi489+>M_1D#)C| z5X`N*bYcza&7hp-Q>ZaSwFss^X1RWg_ojAcg#77Md_D?^nCo46=b93APUJuUocZ}T zqR<9JVP7Y2 zKS;2aw`!J{rK?=*56 zh(YMlJ$CS*lzDT~QYjh!+ZT#ch%v>zK+(JY2VOgGCDLrxVX!1mbU4ZKIc0630Ip5P z)WWY#fEf=R0H%@SAzM`b0fYa&k(6=)s18|l^e0z7UK1QK=D_{P#Yyg`! zwg;-eLJhbH6d4%I5d#j$1ahHEgvoV^$h+Ij~>EIBlz>n&a!cZR|DI2)VMIDn5 zB6j52$r5hdyh$F2@EY>du{@>wOV;V~Axtr2p=@PCsKg2u)c(?j*x3Cuw(2l!03~%y znNym$9@0l(T5S6F*bp(HHSPP5&WZ+f&u(PGD7Hke*efP;%R|K+4%~1@TU$KLAw`e~ z69McILF)SOdNf)ErlSf6uOsc8{N2yN+Xo|^=K|T6@Ly|s%E1Ia1j}{G1une;K3im4 z2X|6)TV2LnEhpuLD05Co=Rw_f81Sw}({`|R-S5noze>oz(IFzJBsubh0AJL5Y#_|T;WACO#SriQ1LQj(kY7v> zH5!O5#UY<5md8;MznFJY2GtJl0>S=Y6NRq)O?O2;6L4Q`1;5 z_o(XYTcSd~zh;`SjEFefm ziQ0-tMuH$nux-VRqJZQKMOMj4uni~(NS2HN2_->El4svnV0Zue`@Wg^ch=Ney|mRw zRlRrbx%=$1&pwlId^WecOzstW;Cp&*RY#s9n(2-vwlT8I8bOunMS~e9j5}mJVW{hN zy}G-}EAk-M`F*5Uj(`%r!geq`&7PvX`H^}s4i&M|a1dD>PXUGkf$#r->iaIf-$-+p zM2}eUO-@Ozh77A(6!$;%_PPy?0ylKs5PFhHA0yQR35T8pe-SeflY7J(tuNtQlx8WN zJ^P518Xi8}K6mciPEyc7Cl>!F2Pn&iQ9p0i%RX54rh(U^vf|Frpm6`BAPm`RN&e)n znIj%%{XVjr8f*b>)D372(hzi-AtW5uS!d`_U(Hvlq9ru z>n`J8vVH-umTqTw%8VWY1zi8w=!VlkM;K6=3(A|gH9jaa2*~^Ydh!Z3RhsLBlRcxR zyTT38#PwP1?`ov|2VT?yXo`kiPz0S!%a* zCy^2L)$GyX-sDf8PI>$KnjxbC-%^up&q#F|>{5JU7*iQr$mM+a=bwKj{(s!OpvKXX zhvicvo{{&hh#wV=k@(@AXeUIGsK*Pf-_;G!9S*dk_+7+giGeF!!XYW2GFimp>-rI;!f@sE@_%KRZ^1!9$(Z?QdQ)HDLfB3m9 zB$hG z9kGe|eHr!KhilVf`D2josCrGOJFrP;-BBjhe{=1ULLpe_E8_QW_BYicZ6D~22{Eln zI2Ly-C3?rsop`RX;o%$Q)llr~$)9qS{`!2m4#;oPr|aCCr;T1nWOKTg$7OKS`B4WM ze)EnlB({z)b2~Dlf^!6wao7_c$=&pQ-K zgK_e=-%{PCCU0aXzrMGHA8Q_xF}0>_`!a(k-#^?)$v6-7got&kT$AI+TV3T59;E#f zQXl=H-dQwyGyK`B(934hJ$WzgJ-P&XdLm)cL}b)7x)w}u-r}6}imYAPt97C6)y>AL4VlFC#o09%dn3^h)gvz31mUKmoA1YpQY|jY6`t;I##-l zI>u0MOY)YG3u?87Zh53G>DuBT@0UF|F-U&y0|^my98inZefMA4mS!AGRf!mv*hXZ& z0e2HyP$2i>`Ex7`1yxnm>$h$}Z1Z69tEU@5%B{KNU}km6-oM{y2{90zDdMAYCYL5g zpH9V!){ZtX+aBXq1=w#0;hCfH3)COb5Sl@_LgZ5cq81Pnu~r_-=lf5l&wUm;akN+R zFe2 z4+5I739@{I43m)aiwBk3J`r;nwIeKjAU}Wd(P5WddE{BIk&i=(A2TbFfetg^gY#17 zEfxth-wg|bKeYoxwF#^R^^^+Q#R`lF(`J^Or-g3c+H1?V*o_W!k``=@xz0P7o%)d3 z!EjTA!DPW{ntE{coQOU0kF+h6uay);?(?cckF~BdDW_)#s&WO%IynAMP8vEpaA_F@ zeV>}L53xNuXO`-meJa+of6ZuIRYO=srQ-Rr{$ItE{nqq-UK{Mmkf@FFm@VC%EhH7pKJ3!m z68gKBjY#Y|dWOe2wU160sjSd?R*&-a>iK3vjF`YZdD*8jHV;^u0O22BW$YeWbl=B^ zkC*o~sl4QOJrfxdF(1-lyMI64R!_f#)9*Q9TU&Qu;1pHLfiK!@7?&?g4!mnz*JhVho$RtV&-sXP_0N4Ggw}DtVdt_ZGwDWh z@{SnYvTcWmdVBj##p7W`2n3A5TEkjsB_c#E>R%NWwkLQV36dbH*wAR8X4A$k0U~b2 z$o3!flnh#Xeg=hOjd!F8R)2I^mUf|*b@cR@szAxEXfxd^AWqtLAPvpafEK2;NkQBu zkXIVJ++_Dh=}yjNl$6)*~nOjjD{I&68-mDuJt${4rf zk+!>a;fvm!xir&_^M29r<5Bc^pp3obb>B~&e!?oby!qq)h2I=H(q!#a)KZAq2%^sV zli6am?Q2*~hs)KStg2;L6mLVlL)-2?vW7;h+G;i&tdif!pE~S#H+-)duf4`H60+TW ze~xX7IGgu@M_x#<^zB!5s>^<}^}GdfRXC3apdK?r$(v6=K$>yVw!KtDV=j%(JDJuQ z`qJ(3{wQVN`j=JZ0S@*W6X@omKE|Bck}o@&yvOdl?lM$oH}3FrO(fN}IO>sK0G@%X zZUu;CV6QkJE$~!IEiS`Bd-m)(+&+tz`=Ft_CY2{=@U2IHMweZzc04o}Et;eZL^F6} znIbHXwJ`A1e?md_z7@LREv8S2X%yR1Wz&7P8A zrL{&C1qx1#qzH^Qga^T!I{9|xK#PNlfME^=)ilxtmAYb&1kAI^ii-Jcb+4hDNVe&F zz>4p19{QphBICj>4+w&M{yr!~e2YQU3DzXdra4CBRvK}P4sl>ciJ~Yhml6{Pz6)G? z+^`L;O?WCBmpg5FRd%8>E=2jv`V%fu@Zj7}V#{^}G5 ztzeN++e(vyH^PbUT=Zr=IhS|d;UG&V2bBWQG`C3z%dzS;K$tY}dpFi7vDMUIBg+J- ztjX68FT5f_3U!2ea8&@v#NaT9M;-bKgGOsUrC1|B7!VwN^NTv{yekVgWp`cqV*&Nt zwtu>477(}lYW|X7sYEf?@2?31eEq1UpzBpWn-9-_Cf>;i{(`=WLb-jvliE@4d0Xkp z?;jVku!saX`hblf3^u~{G=t6F!LT?ufX8T;{U-L0SL^en6Yg>RQMH30Q`)m9?=BoV zDf5o5BXiD0tVbt!(@&c2)B5-&7cR}CmF>iSpUhsbZ<$e*xZg!7CnfLqaTh8D4dt-T zY2w&!8&%U?Ty4=Ejz*v%kaWp~B=07>`d#-q2)72YdAJLe^cNyG!3v`s)i( zX_2Y+uP3eB4>&P;Zd0pj*R#jlq{}nBVV8BGazkQ^!=I2$5Sx(DqCm!}2rsW?Bcr2Q zXIbzwR(SiEJUR;+AJdK(pRjmcR2j48v2b6@r3JKtF(R5FOWw;>X7;JiZ~Tn) zdx{{KdGzR!zqoC5tQ3gO`ty-;&y16+pWchn6nm>})mW{{$>BjAO>!dIvagPifUy%E zrHd9h#0|6E)stYOssaUbhdwuK=~jWc>o)1OnURDn!$L6*4t(^I-PjG1e<)FW{(Xc{hX@PaBykd@>Vl+ zHlpvK14~_>-O$iTIV1Sk9ZO_mDnFCpAv5x6d74E7SZ1qcsqUs6Z6e(z^3|!a{HdLg zk^>vjM814>h_p4=vHSV{&yaCU!ce;Crf6K9mWt#j^?@U^0fE#|UuQL76{3o_rT z*$d*{AY)})y&6`%h({vF3utL)%J)F6TMO0h84xWh`axT_Rj+H-OB~T%QhXw1AfqL% ze3SG?qhme^CD=%_BK&)ZVvHoCA|+90yyt&YFs z4te3YXkon8)KY>&FJV@4o&jD6llViQLkdeS9W{W&( zGEU&27T4lbxF;mKuA;Z)Xd*EpxV1#Ji+)PPa{)6*2-zQuS;Zr|K+E-P*5u@%GMbj$ z7yg#jWSP;qAXK8LtV|ne0;y;)HG!scG8z&)TYAe|R!)q2mKr2(9H`*z)-3i_t}ETsCSi+`~fC+>)PpIHI{Bv@OT>R7&KQ z(ew&^{gc$L3cd2WNI-2kUkE9$ z(JPrKnqiJXUP_+jADOf%@0Y9YCoM z)}?%_vU2j@@%RX@)T<-wJUfaA^rA%^Flf+V*)#6#?W|)Z7;m5*4?2BqDY^oPNsQq4 zN9r-kiO<1G+o$Z3)+NEb(ny(S-#n9=x60S!)Ztr;A7YxR^W>aTW>(b83lCK*eZG`; zbB0&1|D!#Y)_M(_FILpD(Xpmi%=}&Gw{JEt3JVpzFsuO14%K0M=Py4`qwQ@rxEmYu zIi|SVCp(RvY~qlveP^2T0~)G`zBuWZuFV)~GcD4VoIVI>#K^So|bI;c&DK+v5=9h z<{Ptz%9MCH85jgJ+s51r`S}EDAFzsc26WeXMHV`3IkPWg^9-cyV@!^Bu5?N5aj)O! z(b2E^`f;6O&qBS$M7BDf$rE=N)nXU~4c!>?V0E3}xG`6NG! zHgPbBou6buJwbO<3%z8=xg+AKJp4yOEM5`Ify_fBl!7*|B>UZ=M-M(d#N@;ksXTOJg%7>XbCImPEVD|=5zcDBB*G+nlmUZpCpC%GDH zg{!S6^5~1pbNSjet{Lb*ZU6#l-Pp&qo^AtM|N0bTPwrThVHYl5EUY)c$ON6N7wlQn zQ#%!9shL%rSo+9*a8#dDV@mDgYxK;$Xn~QD!}-6830K~5NWB;G%rbK^F3hxpCC~?fYc}t; zxui(z%AQ(FKzSx@@p{ChJ%Q5)!1(~y*Z)2MS|5unN>0qV2My$rk|WxFl}1qaS{sl{ zTOa=qL7uLHlU=(>&ahj?Nuf8f-WX>cX|E%fB{VtjnTSb#iwwf_XpGP2+lSR=G6=cL zi%2dY{gIgqT>DcEE~oA-l$nNL9eV(4=de|R7U|-rExZcaXB7NjSPm~5hW&g{+nHJUSU-c7rjm0577Y4GKgRD8O>Prf3sdMs_i znsn6{WNmjRNt@bdyUs^tu2m$QS6UA1amIA!_l6>zPzk$Sbw@>HFksSpUtK4gW>Fjq zpzYlaDfb`2qpoND2)bC8D7ij>N7~+upCpmz0*ojqKv(-WC}-ND=-o+Z+&E!*z~860 zRMkCMpI{~j`&%LuXkE3GlOuF#Eldlg``gZ;>P(W+Ny>VESMtAtXk3rLCgyfIAZ=~2 zTx7vlZLJ=YysR%<$T>DeeNNZP4+G{b7c8P~v)$jiVaK5mPvsgmmc7i&Ue5h4A^iR` zn%qqkhdK@!JR=%0O z*At}EXShlZpoDpFtWW@n@}%=lO|K+Ttn^Xl zAFbQ=N1@H3$EifQ0RsvX9DWb(t_64x7R7b6{Ahc-tMkrXod&oHA$N=Px682%f32TQayW{8FxPhx-64OAF_%KhG^yJNtJgA8Aqvq6j(roj2b)4A zg_LSk_Gal>PFR#Lndn4QC<2BVGhkrQr9buMq-qAgzRynI@8T`qsY6(@-l%lBW+Ul^(o}`=eo(n|Y8n^jh!I?vw=*|o zp50AK(MNL(@^BKSLWabTkYP%BKbT%kb3Q@`oUC`wJ;cJOs%X3`uVA?n4t;pHK7|cw z7lf0HbGbWTyjU%vdejs-xhXX($<+NnpPhZ+9D?l*!ej(0+2xXLw~bPrGh2%2dwPVn$~ z8zzg2q!Yz_Cx~~C=^Wz2k^5Y%vyS6?y#goyR@FVH?#QeQO5o?X!n|xfZ$WJsFvTIS zXo0$jP3K=gy;LwpmRsxG)5))@CVG=9J9oq+nQ%oP;p&K^OQbR5%y%J|h6AxDKdK;@ zm=^uXiRfLxpe}m~bQBzzp>*VpqHnPPOV8SfV|&p()lx|6Y=~h@eB@;$9}CuL;)xyt za4Yy2JS7!G3#Zn+K_}-I2J#i4Ro|ve=oA;08usEsIs0k}iG8yrpC9rfKV6Ut7mh*( z8}RsNa|&#&39Z#OIqQ^8Qeh`!=Ucf+v80kfc1Ekz%fai~7P21cr`kGGSjdEd0%~|* z>xmtY7gbs5_~S2lg$oX@YpmU$k$R1pNVNWh1E&%U9=E*u${vl~XZ;XL`;@6Cf2S?S z#%^ptm{aP!j?$k$VaV$-PL5h;z;E5i@*`rLsrMo(q5^*E&TNn|aF*NKVh{n+)Bbj1 zeA$7`yrSFSY)kHoVk_ezj(h4Fl6v+ z*j|sK#|bHxq=nw^C@u4_WrpsQRk`wi7gVfQCwa1B_DolNRcA%zqIBY2my9j}PYq~7 z(CY=`N|W{rZ! z4a9GTs*;53cqWMP%;V0s3#;7@_}BE5Xx_=++q<~;4V8*G#{NAzB~ySVci!v;xfSGV zx=r?njAE9Th*8lB0sU+Z%s=y~?38M6zkmP!R$1Apgf+AW4=sCt9t?Q0$4~t74D7L) zCQfO5@`nW0-D0d3lK0QvwRg)xMV#yI4)7V(<`6z}XLP7L9yKRMdV^)<_(*@+xo#bo zsfpqC@xb{lxD`XiFQHtlgz@`7+H^f(f4( zPgzCdQX8X!uPq(zn@n2B`b~`54xtO*Ss+E>R`B|q(45@uk+owkO;2#%FI5YU9Xm#D zD!zbqY2o*g5#C+9zT-Yz=)Sr6}*zX9< zhhrp3n<2%Aq$rQO^X@?|V)Y?nQo&u@v9BVUoq<7~&B{0?x* zaWe_43KAUEY4+UUo)rVWsRlDBp(ugSz1n}`7iwOA~ zYDTkSiW9fATU0LZuV}MTyd+t82A_4|x8Yxz%Y*}r&OLRV*N-EsZp}|~H6#umeY>bD zABR`iNcS~6<>mdB%-vZg#?w*fn%H)-J^2JyEv>!gN2K;gq-M8jTSQ~Oq-_9Vd*8uD z*F`!8HFW|hV3*unXRs;Rj1P_~6qf9xeRO&epB}O|Am!UY-4$YA)v8L)20HiZy189q z0yyNqt>9>lVC`Xq>(=k1T1Qat>B4M2GLCfPMQ_)E4liPdm!wUA5^gwkU90A0qyN^2AH6D7_a=m?Y0oR} z7gwgCU27PQ80qF1NW*Hr9quln$i`rjxVSI;a4u(XYGpUXN)6#QzPcIdH!5--}*No5F32gUn5<=(_jWHx9<19 zJijw332oN-r8D_poH$uHg3p=*_Y8*IjZSm6W&70rR`QwTU(qG1cz=V|VhmKV)*J_^`K#iwZ&1|BPqE(N%7cxFigN(kQ$axHi}0|6n&Wm9Hz-0`+9I}gb4RAV|{g6{>YF; zlsxZ`3JuMa4$wqOG({n|&C1hBi6*q3V9{17veahn)H1D0T3h|?5o2%zC!u4Rn^8pX za1-rTN6o&!)nVMbFz*v7bKgm=U^v0YHDEAv0ig*JB_Da?3pBo;_ ziW$VZBUwQrL9o_KS|W|jTFve0Mi)>R;&2edkXXI7!~cZBp;mB;loPp1FV) z$4VZC>x+K}4e~IVM{(bxX?TYL_98~_myox!AaB=aNZ_5nZ_<{}QN?XO^X#veCxpQX zu$LI*;^pc+lMO~$O3??$Y!Kb#(ugl#K|Y(e598u+jakk0kmP`|n1Bz1dQ&yu9`)Dq z;6nGVM3N5LUG?FX7O@HdtMYy$ZM&zo9r{7+QbUhkGBAvK(OLJ+{@sA*({7Qj?9-sY zC`d`uyYn?~nFi9ql4IxnbH0XRS8XS=byPkYVGLqRD)OZw^)v3CpBo$Y^IAkO0c^qk z*ma*`er*bn_ln-u7^cqCMvyQ3iICr=|K@Pp65Ha^mLvRv+f-sBysCdqXXb;nOz!ER zadIw?(;%h=1KxpM$5n%0vu9^J*Kn|rX~gDqLXwyt4P`#}%u`R61aS3Ms!=8Bq0cKw z{mqs{Hj&$?T~6tys=JNa-6+zx9JE*y<lH;J3kH6h?}TlGfiVL62eX@Arw$9t9h(n2&W_WrHC2s z9Gfy8YV2*+i$J#J_3U)#Wz-N*F`B6%plQ1VW`NqY7?+~nUol-om`%OupVJ{j#QDh9 zS7l)iR~%{zZvV>M!=V*YRe4!m^F~c;QB8KMCgW^X+Q?-FRufPD+mHdD+n@XJ{<=s) zP)=r2NGfU6brzF8dpX8mQt(KL36J*Az$5yyzlDq&H+G_iBIivA1VFjjq~nq~Vi|GwAOoDyad zLVGDyBe~mkNr2X*o!*UfPU7~&yiVkQ3K-i3qb=PJ*qLpVcXE0e!=F@UG3|)~fdGk56(kFhYR+g#5$Q|wme5fN|9*A7 zi;Tpv#E5D3NG@$zE933Syye{TpxtZk=Ke-9O{aXFr_|hN@9-=T+HOgEb^Fa>D{;^4&qd37ehS0<#(njKhO)H-(H| zN!f&_*h@`}t7_CG3q{$`3i2eRlmV5v9If(BCw?FCPjk!WH7Faj5?CkcmPlx)f|1nQ zOUm7sKra>Z+2UStnn=5zRoR!oA)5L0`&Rvh zGK3vI?k200m->#IHs#1oL`Rt@YC%MELAbqHP{Cvk@fycVN*T*%hCcF8_P&oHn(o&L z71XzY|6F^=&}tJ2$8V`0rqjWbOgRtw>qUflmCv5ID50eiuASdN1fA4u@6h@&$EI0L z(q^|nMOE{PYS!DIhlq+n+O&!x*Fi~|VLTR)x|H!k+kAqB*(R-3f zAkmsp)KS8}rsOx4>RS`rY&ZfQmIA4VzDaJ+ya zyoi+)p$O@$i21yPbmk*tc|vvS0@Ue~J1bI8_x_Bsg0S;ZW0o%~n1w}JZvEduh86`f zh;0H+n}imJJrl-}yr>Qn0?9bS%g(-^sam164w7bqGi7Kdh`q7XF8pB?z_6YS3BzgI z-HJD`xSmW?Uf~n>uZZ#MJbTkf=nB9&Gr&DzSF}DR%k-uVFviyju8Fgy|0Tw7=Xhb6 zGO({j%PaD)h|&6utkavkw%G%|RqMzxDPPg|X;;bkUi1x1EcPYKRIbEM^PW>zW%flq z%g)zA6>aBoa3U7)kR7~ARYflvwT7-sBJ)WZPi>h9?_Yc~%{2925Tg|e1K|C}uzN8g z$3H6wGiw)Z+5F zwY)0-88I*gX?~Jf+^gemMs2}0y2U#IzzQ&|0}Ia2DuanIQbYHBUAlYpg56`CgC0!& zh&Jv?GxQ)#mpmYJ#_dmRWLw-I+k(EVH?q6hWlAq5T#ZQ}9XO}?Y=%Ihm4;b0Y_&IE z8;8F&IGXtk8Jr$6IGS9PO?IP`sX_K;w?|5X8Nzh+o2Oa2BagcgA8owcTgbSKm{c%G zwg?$lCP>I=4JVI+PYEI8z>^Gv6s_?KdGEgF{XiI`8iPi&n(_@CZ#SU5;S+nqCz~wn zse;QN*|y?6cj>4k>`qRusQn9KjE?>VFD@O3a5Q-_P1_CNt?wH1ewt zP(K5-S4v!pt?L>sGe|Z3*3^FuGTay1?A?<|ilv}W%PwR!;b{btB1P-t`!g}aK{n*4 zi9$vI#X7eXG6_~hKu7cAd$N*iH&-xgJa6%u1?%nr(dx*?X0{jpPhZ4vOmCHWLp57k!b+Q z0iwozU5a;hd1%PMlhePgx$B)d2jS$jdE->iVKr!uh><+ z{j_U(rJ8R1fipfA+cC>j1yf}0^u?!hy{WXQ)H+jmm!d?80PN*+rT`2F_-6nOz8&uj z=PL)!gpJkY{S3dKb55W4Bwg*`B894r;pv2S#{Od>MOw9rd-C4pmdY?!1#f@w+jX)R z%gFaL9%(Q72hiwz#VwLBtqeeaF$3ov6iIRPs#x}wJ;WZyi(EGK*)D6acBIpPAo;%n z8Z-@ClvHgL!nY}s6hZV$nFy9CJ}0fyE>?Y0i>}*eoy3pMFBn;q6p;bxH893yljZsc zXG`o;^a>vTZ8|3r;Y>E4CCB2x%t>OCnHa+xImzDxM!~ax1q?b`FlnLl8oc#UBdy=N}luF*EG- zqw9(6p-4(d7)Ayp0x=Pd7#vB4=A2Gc-F-Go;>8t;$hbUBWY8RE$$IE}4$I%?&P&^- zK6aZONr{R&IyyH^^gUx$ke7!CAKG0j+C$u2YYL&D*{tLr2}cGxOs9yp{akmw(dL!( z1OJRIQK`2;df2J{AU)jKJDYdtHR)7o$5uwgu$u#qgkJfLcJUx|ks4_1CoK(z6W`HD z7OHJ4dk`e<9ItS!TUIVDXnVL#5v_pP-RTY76XVN!phkCs^ciA< zUGi#BT5R07QP_FN9KLxSzdx~rWCFs{`@X(0t*xy^Mf2mHzYZs)wNv72sSOlqtz&jP zW}3972@QYBwIC%65!U3yWUlN3OC)7I_3u$F&yq`Wl_86}y;eM&OWG+gO9-}r=$*)_4Whz5jkKt@6G`aJA-zr zx$5fGt0_I6SFi5se`H9;aDl)~v2>5o&F}qVROv|N5hhzL!|4|pAK)>K3aWl#(lWW+ zCS4yEx2^Oc&-xw?&8Z=nLBOu?(;I=!S3>T180$W4dpIxukq#*B>g*FBqZT!7T318ogmRg| z7C}MfyLayruD-0%HzXvvI$k>-9gXedQqx1U>}N|UQPI@0y5F$-4mUK+)n#CXDka?5ci>&0TSu{3~gj^~t%gaP(!k&5J)|gV12T75>L!v$!}b`n ziv0A~Z9Y96t0FQy?A0(ifSJhAN~!D-0j#9SQDx0gI~H|oBBE@;r9eS@)2cBBp~~bd zz8idXnj9ijQ#bmsL8pq>@2h3zj$7J6V|}o=K1)N&;MdtS*0W&IKsCkgZ+P5hMh2Jt zGpy6tEyk6;#&x&9{XBb%cQ(Z}84yK}R6)|0pGd6;%rzmXhkF^}PiD9#n)T}+alK4v zhHP>~2PTdFc{;8Gb!(aD(Mo^=m4Dzs>pI|izH|e3NIg(XBxI8#8BkAuDWe|}H51oG zmsB^ZzP`R_5g9jvm)zw(+joPGAt5clOb{UGkoy+tkrk2TRNnz&sY-SrEeg=P@<&%mG&eqaHkE7M6)Z%KX7F^;pz_uM?hDWoygX`*xQ{0t0qu!AO1%8tqM2eQL0!B_}V$O2~(pQHzUY@^ME|j=qwgqP#AlPN>)m z#k{U-PZCef6vxmLju6BP2EoLcu+!#XIHaJ_rfG!j-EzdN;Eng_hK~(%8<@q-V?Ar&Bq_Q6vP@Ob_d^~g!#gBH<4Fd;@?xp$Ne{e0sDl>+r4hq{~y9d zTpo5-RoGejb%h}RZ`FjHmO>{oO=B4fS}_P0AO4$gA@w^Ur@gky&p<%(AaDlC@$Ay? zs-h3qGD_SGBkV3DJ4(Abn~l61NvG~h!HY9LU|^uHpl`87<^uPaR_|T#ek)w4Alz|F zQzunG_X!*WxT=(aO<+&VtY^_$@4jqVLFJ7y)@l$u_?OOV-9YxlPu)d=RALjTK?JHBjHhcba^f#?+L6p0rmr{2v8_V28@wJr0t1d`kj<1y6Yi+v zBCq;ndJ_i?x`$>Hkl?_U$1{}&K!!UHTY zBDI%MS68h6>C91ZRxsM0lmgD7{^S(8e z#WdZ1@+8*a36ujaUxsd{UR;8L6CtPoJ57Iyd(*lsa2sFsos61}ekBjA zX@47Mvs=C1>wlz;?%HNtOEH8ABg zKQz72xw=ct`qspQfzr?xUR?9ffWcvcmJx-ki`AMtcjSFnx&l;QO=kH9dLRhDiEIr^bzwdqaQpPb@^zMwKQk)B>xm4uot~s ziRPZ9#OVB7bC+sJnl8kvVEP8FKzzjtUz6{W4AKP!XEP*1!5s|>GulSjyEOdKEC8~U z*P;ydbRRGdaw6ow$p7$`RK;zhTwm>qp5dB!X1FHW)HL(}J^dqXqzjUV=w>ecAjY*) zn`DibtA{ENZc3{73$hf5--JMCEL&m&wH)|T6N$|d#Rx3e?E5}S5xlMYmT&mBMCF2Rv9ZIV@ z6QdZ!F*50tH`2?vbi0==nKvWju4j;yCwYK0M}N_Bd*RT%#B1z)r%hHPKIeny{1<4Z z2}sd6243>vCZmr`Nr=@nro2|{-i#6toEwLmdhSmy-Srn*Bf*K2Sh^ldTcn~V0u^wV z%c2;=CV>*`)Dyw%H2uBPptE%c6)}2Bc!*kQI&(Y>`cCCzWcO=T9HB%P_ReV*A)5XI z814&qY!ladH24!rZ2KyGzhJ%rHHcfJhzc0GX7>&ClAsC|anN`SW}9j;z(KJPm1)LT z8QJ^|qXES`(s~_`dOGi0x1f9lo#Efr265vLnu(^dlB#Cy1JUsW)hv|tLHlX^ ziaTS_eM%MFblL&LSFlh67p7`PE0unJT*qvtLptRJ31P*Zcnre}_Rm+sp^Hzed2QAl z_gY{h6_Cs(N}s2>=`Ac>jnl~vI{8?K&xF0Dtus0mQV}RZEH6lNA1$}yKf=Z8I?Y<) zWGm(=O4E2mj4@Gx_Zk>Zo~D`PH1Q}}?N^$MCrGv&jRMOAO~^xtefT%*csIR9x1ah~ zxX?snsCzAm!C7{m2g>R~y=;7)QWw`A9Cpy$N6i{1i|zQGrqd>B3gO(OHwPy)(L-w@ z*KpS+(ZVgnYC0`ax=zv}zPDx5#VqU`d8KDnW7iL5HIh0XlbfcW!dH|s0Kn)uZyW@P z5CIrXUUYPscr~473UDE0d1YuhgD@D30fI32RwK4~p4-(+u}tV`0ywNRgHY(b_K$c` zt@5|}_cYB!KTO`Rrsfh;+qg?D^kKd0sN+8EL31|B2O3{d2g}6p2C~ljXMSKf?vrp}!?0ts5*Y*rWK@ zRI94Ss$)NaWeW8om#q@?CC$LK&)raR5@7kVDv=~4P=ZY#hXt38`b3dCg^a{nWz8_j zNK{rMUO4_y8Kr#7$?a0}(V_k{@xnp#u<3wtlKP~rAJVQRMa<$1M*)QhCrLRgH2iDP z26xk5kihfu9w{u!;Jlj*tGW4UmFuj|2>!qrG*;2cXvevu^=ZHosJfp)>?Yi_N@BN+ z4yY#WGyNCup`$HgxTiZ@w?Sk&OQ7Y-p`gX}rCHBQ7^RCKK3?F`(2cmM^z@3MPY~}4 z|Hw)FB1_NCaMLuQe}#`D7Dotg!@V{e*F9uAypB?jLkNqda*d0U-Z6gm-iE^)=a5L}LZ5dp?g699Uk^3k6Cm%lUa-PH$bqGp@mDmfN1RgZ!glauyWK$`;! zXRgI}ygBl%@EOPWC?BWLwrVz(OWqO^$9`t|a!}Wa{w*gNB{_+EF*2agA_$`M(h)QA z@^|yJ2@alt{u49%t{!)rUZ|m0QW~}?DG=^2!zuq97w>kxIjy8(OIIUFNpF9mQ_tTa z#;7>6o&}_^E!O0Lli^Zcrh1Io_1wCQ1pgf|3Ptv1k_=(vL062*>-5=2dSt(dPU|#i z1;-|BY!yc&%oQ4J^$cT-!P{G-o06t+?b-R5!JO45I{s%5Ps)hq4S6i#aJ3JdUOMiE zZ0cfio3cgFDS#6LeU&&(^@vo%+p;0-M@8$Xg{+I6+ux%`s~C|117)O5?YnzA@fFU} zR%(H3kf`DA$L}3v82=`5wu>O2t1fkgBrR_7yet+@CvA| zj6wNDU2Fzq6wJ*@)4!i&u7SzG%4l*TPvZu88h=9aFP*YpfB94zsb~QfG;`G-g9v^) zOQ7kkz~Lqy<^4C5;l2psr_en?6pyiH;N|0xMiq;z(_b-#XERK5fZmWcfKP?V^0+Z3UyL+H;jXwyJ=@mfpZ95|Ng8yx8 zlG1$Tu6`v_)1o?z_@4g<(&%meJJO)BZIpUt$a>C7P@bSrjG(v7Tu?BA=bveA;%rmp z=0tLn__Kt|_($B(pr3gC$W%{A4g~>Wm)B$lZYc=90;3Ug7avm7g36VUKtyg6>1r_z zY-ntyWhZLko4_M)C0JZF`EfrU{`g8rJrlPCJMQr@3bI!ubHCa|fIJNJ0>ci<)+NBQ zAp`9!!@b?%*)wHvQXcgD3wrb$Wdo0sh9iSS&3G+|3*Y%C?0ZMifiV1e;A{wz>yz|zh`ig)&CR~MUX%DJa)^9* zF?yX;I-|J#OPQB%{|%jal|NH=%^)7`PlPx8@bM#jh)+n5e7cwY+21S`Ch6#1ocQn+ z143YwA>Ka*dN}S4MGWD`Xsm}kH%I9pP4hj*puke*QM7VUoHM%k*w?v{zFSOQnfx#b zEi3##wfDm@j=Wk$m>O5&f_z16_rY7LFkdB&$zV<=t38iA*uEP>EQ~GZFIh|fu!ngK zvzhnSStx+J>rxJaTmN3|2|LGWQ8Du$73@U0!3+(5%J@3fWLTe%Pc)o_Ut4CF^|d}_ z3L3~i^}Z>#+oKk?QWbFbvnTdO$%clonolDGFh&O%OerAwml`OSI3~iE=&c<(c&S&x zFM=0mZU8NpIS`Thi#`d2*y&dR150@3MYQoVzyE*Yg4>v!siKclL0%2zjrYr#U#_5k zyxl%+Dz|i=h6oJv)-GJQkX!!OUw^%#IQ`|z$gPG&!-G;emQz`NE$)VGHd*kV-+(pt z8lgnIn*2CSakFbJn1vM+P&F1TdDv4Z2Pck=J(8BUtux@$o2aH0r4=bdQiHX z<@xIM1>%^gv;W}1fYQDN@PUw8{io5#|KVpmtaIcyeem=yj7XTTe?1^UKRBsxJ`%hQ z1%gW6zT;~T(ibrQ%hX%Dcjosqziz)Jw)@A=GVs_bH}iAdYl-|}`eopO>~#9&$ceLO z`qgTW15D2gJ*K=EXE`}J*;NsB1LjmGC4T1ml+_-Le&?VSD^^6JZ-GpVtk1HI>D=a+ ziJBS|x+Y)VJ&IOuJwa@0=7*KX6>$rwu`Jq#qA2I!r_ zj#n{1#&n>g9JAQGR|**<;1djfsZ&RDZggd9SWS|Ce64}A5(+QB2K~f(59Dr{Vc{w}4yjl0D-y=Qt33G5laGYac;V~@j=QJ67s?)v3FF}ZKQ1S# z22IqQB_`J_Yedh$N3QJCq5tDD;tpWuF_lUXB=xM}RMh-L8ox@X`rs44GN+@^N; z@J%w{RC?&$$t#T3Yv{+0#&RHCCwR!vRkPY6Nb18sz+c8CJJ@y91Y_B5ha7q~*BOon zslUBgD4?7E#%`h1JAsVGaJV=SyM5!H92n2z9}#!sQsJ)J zvvx4wg*h{ZY6_^q!iE&WN^@U|Pt>0kKJ#`xc{Z@g7Gb}_aSdBV?|wyvTB2dT0lXh} z*@l#yR`=wRPPJ)MxMb9K3TJ{>Bn*K#1TSvkkakKXW>q!AJgs|NzP@1ZdiN+|-r`lE zxD&AYH6U)0*ccBYBe}^0x}sOF?r>W)=N^O6m3D7)9*gf&b@Y!AcS+-krj=;75Y*4^ z3tZ#N1M?Wn0763vHqvfALEkHjSBImuBp$aW+P3u~{$%C0qoFGWbm&-=3t3sUeFgPh z`)$mqVE8odny`rDtmXinC@O12 z&EI0&nz6)OuCAC6*9tOh7LGO;+<0iy!P`~Dn+{`U9w=X$Px+-t!Nh1=mt7S&d`F=Z$uCHC*$cj+jPK%l%I>^6D6 z$*xj~at*-rFLc}+VwH&m%@=A1^q|q}4tR1UChBIGj(lsQBFfrbp&ndLWZvKB>_?fW zV8MfVHB}e_!7opGW6~{~;{0|RclG4-it5cj@)ed%40x*528!EaoF+dhgu*&SQ$u4# z;Zk?gu!Mxev*$0lPvkDEp|dTxlz>Mrls`^3{CZ@f?FDFS1#gp>(Huv-3B9V4^d+OB zqD;`*PloO)eSTVu_IdXk%T})3oYRzqB5_Jj84N99Z;jg>Ckt0Ne_6LD#AUFf<4mP^ z-*#fGSsrna%quN=Z~f}M^%)q36Vu&K*1Pb;l(zgi8|zUH29w53wU3PyyIb;GRF+DW z!;HBsaBc-08Ch2E*oUXK-8kmG*F^hyk+Lk+rIR~dzcgeVA-ClVtKNO$Wr$l0@6vL= z_C~Y{RYrKq#JziWwDNr4FDFi%u-Ua%s`m=fObcF5PEID195F>^=#2~RXN&7tV)nUi z(}#8sHv+DVsr2c3YOX}lcENDe)N(W8VsfzcH%!F9Xvl8~?Tv7T(8+Vc*Ep+6 zz6Pu%TQ2n9f>y#9XU*wXcQzm#6(1|hiUZ;}!I5$R))vGe4V8UXjEW354nB|h zmLh8LT8U)Vf>Mx#CYlVzg07f;sftyvN9Ubii!rk|EKWBg3Fcdo*n3@YdDQCvTtd81 z;B?1_GcKd)TtLK|blq!Ulqv|s!9YV{q0>eI|(sF67f zrCy=qPXrSSyYYn1o;^#9Pwe1U=2!areB9Bu&#x^fHfETAO1{&j`K&dO^7kAsE^Q~K zh78=hsTULE`J65b7J!Z&K9iK)9DcPQtkyO|5H&3izkE?gLmT&jm|eC@RXV}AB)cb@ z!I!lp_``)3&q-}_^MseTIpc97wOrRqy}Z2kV9M!|3IwkhxDld*l0gRNV!P_Rh@w;K zP$r&nuYE5qH-l~d&jHZ%7601{MC!5PU~d$QDTe(rqSDg(<>lqj0VVuSyl-i~RDU!$ z@Em*>a`05H_BFx;6eqN!vaMKQ*Ic-H^JX~lCRJeJ#FP1Pw1T$d6i8D!i2z{O-(FVx zHf*oZcUvsy=+!$<(_u*e?N9Qv^+cJV&G!^0Jm_TG#TvMdpy2^MwW$uh=r;!Ds?Kq+ zg4dQV&H;`cr>^2?D80}Fd=!JRASxsr!VLyep#c~R(;?M>Cycs^${nouXfkE?P5T8v z0;GqFR&FDvlyEIhj!()~fbEoY{{u80^78QP$ABexkzhL|4z&3i2KSfsA@at<&(8GS z!}oLDZmqG(Ro$W-_!egM{2$yl;d8qyP+l6eRWd2FZ)TBcqPyxKtwG|YuBj4hd$3oS@baR3=C%%95^v3}OpF)>X*=Gnh zRajstJ(4Z8eS?FV0Gb$d@wj-x5O%M$&}HI>DO}xm7!9xA@b_|Z?iia>);NW|6^9!_ zrVy7kika1HBQBwsKY@^Shnv`H!R#tCGNi@hBN?Lt(@^r25y z;;m_M?93I(2C%3Oxm|g*Qb1`oi5dt_lKs2ZtqVz!DMOog52O`d&?^gm&v)s~8>XNK zneU3TB@WAS6cg>wmKJ(kz6__L;qd&I2$vf9t`m!TNDiwqhy(>My&afM4;#{yo*bB< z;UVqSa)ZBDdzbeIB*4xvFATOdGKJBbYH=2e@TZVE|&q- zJa~q+kLzHeX*)TM3iZgg)V_mxQGJG$Tb&!lxO+3RqynBBw{BJAWJ<%Y2OPrb9O#eNvMetWqZuFEZqfg;PQUXD_AJBPgUgeE*I6 zF!?2DoftIT+B5}IZ3B4xwjI-NALD>gVKod3tFcgvCsW9GrAsmMdciu(PKGfQ?5F7< z35Y2r8E#5E#q1=iQ;d&bo}3QZ*ieC;O3|N`-A#a&^uXJ_U2nrKk;o74-q&!*^TNLu zaT++2W?rX8dhYSj!#XQtLi)`Hdzy4HM*}BuiQic1un3uIN)jA!8c)8+68(UC(MhCh zupc9zY*z@Z=M0FgF6NSAgiX-Gv24JDN_N8wVL;qL!;gTPh~^ByDdN+oPYcb+RVrWC zMw50KT0!K}O$R!_++ennii*lxE17fnPNT(!lYcUM-f7I`+`5#Hv6#wHn^ET?SCW?_ zXY(9@Mds^YN$m8W|8HYB`FB*-`~NSPz61XwH}L=O(*M<68kwTiab=&CSl0|&V;W6< Mzw*AMJ;#6lUzPn5KmY&$ literal 0 HcmV?d00001 diff --git a/polairedc.py b/polairedc.py index 7a65633..bee44dd 100644 --- a/polairedc.py +++ b/polairedc.py @@ -2,13 +2,14 @@ import numpy as np import matplotlib.pyplot as plt import time from colour import Color +import random t0 = 0 tf = 200 dt = 0.5 t = t0 -nbv = 20 +nbv = 30 def rainbow_gradient(num_colors): colors = [] @@ -20,26 +21,6 @@ def rainbow_gradient(num_colors): return colors colors = rainbow_gradient(nbv) -def status(distances): - num_colors = len(distances) - colors = [] - base_color = Color("green") - target_color = Color("red") - luminance_start = base_color.get_luminance() - luminance_end = target_color.get_luminance() - for i in range(num_colors): - moydist = distances[i] - t = i / (num_colors - 1) - adjusted_luminance = luminance_start + (luminance_end - luminance_start) * (1 - t) * (moydist - 1) / 18 - color = Color(rgb=(base_color.rgb[0] * (1 - t) + target_color.rgb[0] * t, - base_color.rgb[1] * (1 - t) + target_color.rgb[1] * t, - base_color.rgb[2] * (1 - t) + target_color.rgb[2] * t)) - color.set_luminance(adjusted_luminance) - hex_code = color.hex_l - colors.append(hex_code) - return colors - - U = 1.25 # vitesse m.s-¹ Wm = 0.3 # distance minimale entre la voiture et celle qui la précède m Ws = 0.9 # m @@ -51,10 +32,14 @@ def phi(ww): # prend en entrée la distance entre les deux véhicules y = np.linspace(1, 1, nbv) xxbase = np.linspace(0, 1, nbv) +arr = random.randint(0,nbv-1) + def distances(fposition): # print('fposition', fposition) dist = np.diff(fposition) inter = fposition[0]+20-fposition[-1] + if (t>= 50) and (t<=60) : + dist[arr] = 0 newdist = np.insert(dist, len(dist), inter) return newdist @@ -75,20 +60,13 @@ while(t < tf): plt.polar(theta, r, alpha=0) dst = distances(xxold) - statusc = status(dst) - print(dst) - print(statusc) - vt = phi(dst) xx = position(xxold, vt) plt.scatter(xx/10 * np.pi, y, c=colors) - # for i in range(len(xx)-1): - # plt.plot([xx[i]/10 * np.pi, xx[i+1]/10 * np.pi], [y[i], y[i+1]], color=statusc[i]) - - plt.title('Vitesse maximale : ' + str(U) + ' m/s\ndistance minimale entre deux voitures : ' + str(Wm) + ' m\nnombre de voitures : ' + str(nbv)) + plt.title('Vitesse maximale : ' + str(U) + ' m/s\ndistance minimale entre deux voitures : ' + str(Wm) + ' m\nnombre de voitures : ' + str(nbv) + '\n temps : ' + str(t)+ '\n la voiture qui va freiner est la ' + str(arr) + ' ème (à 50s)') plt.draw() plt.pause(0.00001) t += dt - xxold = xx.copy() + xxold = xx.copy() \ No newline at end of file diff --git a/test/phi(ww).py b/test/phi(ww).py index 63b52ba..b3a258e 100644 --- a/test/phi(ww).py +++ b/test/phi(ww).py @@ -14,5 +14,6 @@ plt.figure(figsize=[16,9]) plt.xlabel('distance w en m') plt.ylabel('vitesse en m.s-¹') plt.plot(ww, phi(ww)) -plt.savefig('phi(ww).png', dpi=300) -plt.show() \ No newline at end of file +plt.savefig('test/phi(www).png') +plt.draw() +plt.pause(4) \ No newline at end of file