From 8f30f07c36c4e319a6004a22f4663a337be87586 Mon Sep 17 00:00:00 2001 From: Berack96 Date: Sun, 16 Mar 2025 19:56:36 +0100 Subject: [PATCH] Update README.md formatting and examples; remove outdated image and add new example image --- README.md | 17 +++++++++-------- image/README/1741862185715.png | Bin 13771 -> 0 bytes image/README/1742150755381.png | Bin 0 -> 8837 bytes 3 files changed, 9 insertions(+), 8 deletions(-) delete mode 100644 image/README/1741862185715.png create mode 100644 image/README/1742150755381.png diff --git a/README.md b/README.md index cc76945..c2cf873 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,7 @@ Questa libreria è stata confrontata con il tool [JMT](https://jmt.sourceforge.n > Il JAR risultante che si trova nelle [Releases](https://github.com/Berack96/upo-valpre/releases).\ > La versione di Java usata è la 23 (precisamente la [23.0.1](https://www.oracle.com/java/technologies/javase/jdk23-archive-downloads.html)). ---- -### Comandi Jar +## Comandi Jar Il JAR viene invocato tramite il classico comando java: `java -jar upo-valpre.jar` al quale si aggiungono vari argomenti successivi in base a cosa si vuole fare: @@ -34,8 +33,7 @@ Esistono vari tipi di argomenti per scegliere come fare la simulazione: Mostra (con un ambiente grafico) una finestra nella quale si può scegliere quale nodo vedere e ogni statistica associata ad esso. Di seguito un'immagine di esempio:\ ![1738603552417](image/README/1738603552417.png) ---- -### Classi Interne +## Classi Interne Esistono molteplici classi interne che vengono usate per supportare la simulazione e/o mostrare i risultati. In generale le classi dentro il percorso [net.berack.upo.valpre](src/main/java/net/berack/upo/valpre) sono usate per l'utilizzo del jar e quindi non sono essenziali per la simulazione. I percorsi che invece sono direttamente responsabili per la simulazione sono: @@ -54,13 +52,12 @@ I percorsi che invece sono direttamente responsabili per la simulazione sono: - **ConsoleTable** utile per mostrare i risultati in console sottoforma di tabella - **CsvResult** utile per la lettura/scrittura dei risultati in formato csv ---- -### Esempi +## Esempi Nel jar sono presenti già 2 reti per fare degli esperimenti e/o testare se il tool funziona correttamente. Per poter vedere una run usando questi esempi basta far partire il tool in modalità interattiva e scegliere di caricare gli esempi.\ `java -jar upo-valpre.jar interactive` -##### Primo esempio +### Primo esempio ![1741862746304](image/README/1741862746304.png)\ Il primo è `example1`; è una rete composta da una fonte di clienti (Source) che arrivano con tasso esponenziale (λ=0.222 e quindi media 4.5) e un centro di servizio (Queue) con tasso di servizio distribuito come una normale (μ=3.2, σ=0.6).\ Se si effettua una simulazione si vedranno i risultati sulla console in questo modo: @@ -71,7 +68,11 @@ Queue Response Time = 7.3022 con un range [7.1456, 7.4589]\ Queue Throughput = 0.2226 con un range [0.2182, 0.2271]\ Queue Utilization = 0.7111 con un range [0.6959, 0.7262] -##### Secondo esempio +Ho successivamente modificato la rete cambiando solamente la distribuzione di servizio usata dal nodo "Queue". Le distribuzioni usate sono Normale, Esponenziale, Erlang, Uniforme.\ +Come si può notare l'utilizzo e il throughput rimangono pressochè invariati, mentre cambia il **numero medio della coda**, il **tempo medio di attesa** e, di conseguenza, anche il **tempo medio di risposta**.\ +![1742150755381](image/README/1742150755381.png) + +### Secondo esempio ![1741863043733](image/README/1741863043733.png)\ Il secondo esempio è `example2`; è una rete composta da una fonte di clienti (Source) che arrivano con tasso esponenziale (λ=1.5 e quindi media 0.666), un centro di servizio (Service1) con tasso di servizio distribuito come una esponenziale (λ=2.0 e quindi media 0.5) e un altro centro di servizio (Service2) con tasso di servizio distribuito come una esponenziale (λ=3.5 e quindi media 0.2857) e con un tempo di indisponibilità che viene attivato con probabilità 10% e distribuito con una eseponenziale (λ=10.0 e quindi media 0.1)\ Se si effettua una simulazione si vedranno i risultati sulla console in questo modo: diff --git a/image/README/1741862185715.png b/image/README/1741862185715.png deleted file mode 100644 index 0af9ed2372e713d181ceff438bb14ce1cba0c9dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13771 zcmdVBcU)83);7wvY!wtyI?{`D5T$nk=>h2-1S!&c2@qlf1O%i@7wKKPKnMy32oaEO zsM4kP-o6=hzvtciob%oLyZ_xkbY+E=xyGDp%rTzvjAw;BR8zQyPlb<%hj&d$QBD&N z@4_YUdE@dq@ISIztOy+baMx6j!7J&co(CrvZ05*(Rd1m{;=6b;<*@Cci6 z|Ndxo&a=eB6L_Q~cVFAbba|B9y`sIjb^Umpia18(J;!YUohRBHi6INB<9G%4%AzPO zx$fye&nM=$Uo8iJfjoYw!^eksYJ@jo%Ycb#|h*HH_@uIQ;aO72FbU z>-(t=!P$qanK(P&tx}NUPGR1#%ySr%L*%N+e0s!OsY#(`?vL+_mm=ooVp-F*O0R%x zM&cK5kzQtyqrRSAe(c4~(JOw`0~`b6PPJp3a}GDOFA-yLZWuVm|q=?^n+qP@5g&WzsdOefPL6;zy_<|p@}x{B--ow zqS&GW^NSZtzI5ne&IGcmKCY$J3Uxv}yr;t~G^EB`-@O9-$J_>;E$Z*JqVuE!$|5{$ z8cf!k-VF`YbfptkL=FU$ynDA*k`y+JTUTl(@FQ)gy1xV^m4$s{fS^gSR^5)7(tK0; z&~WO;F~Pn;pkc@R0rEe<9TvStGoMeh`T3F{Jgn3w+I%t)^WIN6E-k9`7dZ2t&;-fe zlX{?$zpqu-lV>{sM*q}bkJJFa#Cy6~*O~hk_eq#e9_N43<9r<8fOima_V;hzuW`Qo z6!};i_wCkbdL%w|ms!1T6$v=~)c?fS^!|LUS*~~nX8j0_+`WEWEXh%A@F>WGq=h6|me+ zYFeM2bQ`9}*|QH?Osab3|XEp5-Y9i}Tcv^%kjq*JGx!fPqM2qm?1` z8L`(2_?!0#8AV7;iUx>3PYQ@FArB&6^7#}Ew6P6Vj-c5HrJ^T>7MNa#uUEL3sxlq4 zkDcCV$z)Y9WqY}4vBHu2le$IkSfRFYBTbVz`Sy>S4k!`>k?@Eou-=Ulm*~B zWv@0xBhNF{?%4=n2EHuKnZGq9(&lxj6VEdx24hLMIB3%s&6P2DH8Spvv}D@O$dE%P zR@Jh0^9@&$>ca`d4zA^@a_x5Tzh7N?*QnevJr-Fry}*M>ea%r5Y_#GlIfhKg)nwx` z+shQ+`hnp0Xcr}}@Q)*`Yl2HE5JR;X8 zjR9nCV&b=?8?0?T6$b)6isPb769!elAm0eee>uLSi0{Q4;EShXt$E;p_fzcu>i>(P z94_MHyMyTFin_9qs`S0x+_%SvBepXq=r^1gjl~cff{;*<>s<(6yx`?7fRIQGcMx zm+w1$Rn=+*rGvmGZcdN()Sd@h4(HGVo8Mp6r1!&|(JaytbABcDJ23dN=zOCRN;a;C z?&iLBjLM7X##|=zx0{no%BjpvZh~ht zxyD5KvRJa|JB3t&*Vh;0CI@if3}dHR@S~+E8J3WRkyP^DSIC};ez4;d)H~PDOi}yS z-coe^;8W%3M;Y%etuXroGbR@#0y&{cFqLR=GyCG_MPdBbxg_qZ6)|ZvPj1Tp6Ghb_Ra?qVWBT@LBy==uF4kBKAJmWrd zuGvCZmU~w#3FF>q$VBtM>|oSK-1fr;%C14mUtoe?d`-O&W>8&91^nB|FC+W>*yl+J zU^tqy`*!Wuyt^I!MgAgvSYh7n2DhlIX3V+#J-sXzkDVF${1r>dH(=wtxtT|oPrp_R zSu7l$_#;fJx#KNY3Rm0inDszKO#=u*JkB1mdymF5Vd`Y{OPAo@{g8=s? zN)x6a!O?v8lU$-VT#|wu-fr&y;1qdaA#oM8BE&Xevcftq+_CO2CBjq=9_{SsWdD^y zEY1afq$7o*z8{CSoGoytKm@)f&hpcxH)T^DkSG&&?FK=m2kX;KQ|}J*CaF_$n;t=2y=Hx2;gg(e34W)2rdZy>nt!cW(k4eg1E{Y47 zcrDRgP1FHy6T6&(fIT7%ej)3%0M6fqYJ7$%snNTn(1Dqo-1(IgSALGRfK$8`>c8Wp z-w~vq5M<$b{SzqNg;}5AIage8*dyK;r!Nq1EjoBpd{p}g&I4Z|<4B^F)765W80(6d zq2~{ZC2}LoghBHC8Pei@(e-2Hy(LOhIt=WVbBs=9he!-+czzCF`)op{(RA*@vQu)>HU%+9mb^81hZZ+c#G6dnP8J3W}|76oq&OQ z6*0(bQub&)>Dqwqcof(x{Zx)AxJ_EV3xB!(Ge5dulRvaMG7dyJ_tC1=L;FFc(~bc* zm?JK4-%b_f_%K4goqD^56`?NOOuPT9cg7Z99ANE3Due+DaCXs^lx%7NM zc#L19Xq?e38C_=#QwZ9RF1gyunI3hc3Cj0C66G-2pQt^EOP5YMQ+e;aSbSeJ1v1AO z>A1K2(0KJ|y)HyvYn<2k<;EQn+YqyQ!^<2v0810}$Sv^jV*G^5f?ottA=cb#PklT& z&xhdIjGFxVPK8xyPZbV^B=-w*Je=}z*Rq@nwxZB8Q@129EV5QYb#$iK)JJzu+$9;V zULJffQ~U&k(pvT=tKqz2uDucKMK&YKYKcQA1z8Cz$Ef=^nQB3t3&yBXlU{b+%b>!* zVp2F=5Vpr3H@hUU0@oyKTzv=c^X!dU4d&?MvS+fT?DHYp=hI8!9#W%j;{eU@Tw?^5 z(>afCnx&;uH_+yD86|^Re>7O=;w0)ftB4fbanL#HKDtAl^n%xKN2@6DcpA3fy0%I8 zoi{Ew?mD;tb36?}*!UqM=F}CIr8>vS<8-wBtEF$wGvrt_1uI{>E{22bBc$g$X(`tA z_q?qeg^D2H9wW^Ac|Z7V0=`iePy-;#VuQ=7cgEMKN*Z3J4pLy#M-G zN(fb!$ED+B`C2Zr_nPN)Fn4aNhyU%GUzbPEQdUP0GG{(l4KBM#^5!2V{kofHTg8mi zW8735KK())_3@mqaOYd+=Kcn-|C%$E!bNoRv`bv?yV-bQ!yBRFL(P%$dbe=%TdO(&5&#$8fw zN8eGHDTDmb?wn8?EPgmCFMm-fMwFk?Ylnt+R8qxg$ZTF^OzB>4Z5~viz_YwY)xK>z ze%>dw(P4qOR=k)!ZfK$rmOq~8cAEH7v)FyKv-=56X`e1WoTF1hA2C$jaCK^dAXg*h zkUfQ5>!pexCH^MrMw8q4*HP>00^P+Nk*-Z)SI?A<9Vv80Ow6tD$qO7NVeLlRY@H@y zwynblI;=9 z_4@PUs=N+6>*1Y6#=Lkl@@00?gD?nx(oRFYen(I7T`~}50l2m47yYRUo6;=JSKH+G zZp6m&e7Ig1I4iB@aR@DFuOm53nq2)6B!97f*-JP-Ad&P>>wR*QfJY9ZqJ3P{-1QZy z6}S*`70jpyRXMUfR7H57hRoEBLX0w!)^shUvd4q@s=Mi1>G`ekiO7TD!h7v8ytD{J z^foSwj;=1aCohKy&<<&cQU5@^m5<$qouQ7HoS&BL`GW|CB-sw?<9M=w4w+#T!{Z0VZd@TL?xpIdRLYD| z-7F8^$u(cu4lfKTvMz&?nB_a6AQ+xx>t4}B)>o0ecwOcbzGP0vPwPw>d( zos_s@3p|3G;LDx4&Chyn6ps9^s7ZkkKDv`?r_Q(2goG)mP} zYKf-^$;9XX;pJtr3WrO$5^LXz!u6x-0ai1=d}H`U{PbqWG>4_1g-j8$LcR9j^3>8} z!>-3S0*YR`q{(B)0@i9F@{jLEzG&f-4rk7`i;K<5@!!!?@@xCN%0o#g6|Q`(pbR>G zZke40WXN3@Tyl&jrZjH0nt51|6ZQ&m$lcGyYL;rfIl`-aGJzR2#FP*6moUx0E@0S= zn1Y}t77w$EKSF7gVw`{Y^qTKQ1*A1eNja(g}H8edAr5Mx<-J5s4((_hx>iRDLZoHi!X)scu2s0-FvYpW1)3t<){b!TGjGqMxR`$a^*{Ne-Q=b{L zQxRFA*6d4rYyYN76jTA!62UZYCh<=!ideGhRv zVn3X8dZMB{oWn=7Fk0%7bj`g{t>3A*x!l`Gfkmkerb$K24_C_9G*Jkrb{4%l4mXRA z{Pt1c=nA$RBl-ulgD?Ww;FV}yGNtQ}7SFcC@XQy9a*XM{skBCiE>et&jDF9PzK}jV z@kN4KmOUaXf;zclrAmb@#kP?F{ooH7MY0M*oy#{?^#C!F(>7Gn4s9XUmeP#&_iapX zz?w7{_ki-Qt)_ckQF{l4pX#z!kBO-7gxo+1Rb};iYulv{G(WT?uT;|3DnO{ZkS54Sy;XJ$bDBBQ?la?4akTc?B7;6=j~OOjwZP^8fi zc6?m)z#{_)u-bmgDH&8TOhaEu$a>dvGJOsckD^X)Kb=7;MG}!5EnUAv;Xd!`(i%he zNRj$faXW3}ChaA8*Qe=p8UQn`uYHEnuJ*)qqgm|sgGRnz(jA^lwv`)4bN2sC($Xx2 zozOINK6jYe?_kd ziY>gg)L5M9reKnqLu6xD8OYn~!B;^;b?ja<;t5rK^Tr9K?Cxx;U>6Ph?jLyE{NcTF zyiJwbGY71Fs`TRyLc?)W!&M!c>Pe|Kt>6JGUeBk>#U&b!D9=}FDdM|MPEOkNUl#mq zC}b|H6j|?BCzv(~2zjIX^$QKW4s0a%+FRhCCp{?%H+uzqTj1pJH0mjY&08`PEhsKs zh$h(Ol`fLsmBHd%2-|&VIoJ+W%YRfpUfE!B5EZ(+N2fc&BBDMM!Mis?yMrP#6LYs) zDL)K)fztExE&Cv+S%}>r8Xg&O>=8>~?pDGr(XEr)V2R9`odLGa>}DG?+L%qPuB%O? z3GMQo2DvCpN@bp2#N^FLoq@AT_^@@u^(fCq%^q9jxd6^A4A1Z*v64)~wsKp1*An^q zq?y9JN>IrpI2oJZj}yY_a@a>h`{#H}6bd$A-yN>0DFoM(oESV#6X3>}u3VTF$bP0s zknKz!m?KQ*9FxNat6$JP5`ubZBgWv%)o=)NcCjN;!&6eGO*h5P```E%px|#8i6^7j# z>?TqJH=ZUp<>CE&Um2NhM$yMn51n6y+wQ3ysk9x-Di20_Uigu7hvTE)=@voe6W#Bv zHbSSRMCGCG*>ZFntFePO7|wr0v>f7KAl}x6{|pCz6Y_r*n(-RXW=bN(Us9UHBarQG5-Y8f1y?_9OMQ(eY;f|QQXZu!yrDWo!r0U z?gaj>51tBi@xw}NREJ#)ZH#rt*m1_JxAIui?pA>*|Z^0 zF+t0ajior>^gHnah6fydirZl(2~H40{Shr4{k@Hmz&8$;uhGpHmAGhws$>3+@lYbR z!0`MisC%TAn?D*03VGiGsMU`+JV&WQyo^Yvd^$S|T0p+@@}OMB9vnl?sJ#NR!7o*k z2DGVe$&FGQ(#%}DjtI!)SIz?RF<}FOD0x=y*ysUm-lZ$sRteyU(2Yi_l^Mm5g60HA zba~cR8;`%^O8K?>2T`3%2Y=Ch_p1=XTq?EOjOdm9ghFJ%MlP??Qbi5&Y4rLX2R5rj`$?=gLZP)DSU z7cYX7)hQX@If1MivU!sC*AGn9w9ImQij@fHxXO~SJMyZq@$|?VOm!hFX_klORMEyG zF!Nkg#MSbObGH2ZwMkQiQ=+)WL?Th-dD*1^%pyQlq22u9I0mz)(0kQI5|vh56rAxr zRbO9;e6$a@kQ!hiO~FEb7w!<7^6AZ35Yic9U`+)~L);d=NN-pxWkhssm9J*gJc-F1KzTqXTS*cdTtXli{Wr<|~>T zkshXcq8y4B!*=hGHD6+ooB!H3^@&YatYrRuDOiAOMmnYK)$~+(;^#YJR_9+M-k*w2Ml{ z7Z(XW7}@>V**Ra)};lu&02&zx2?gBUspwOsY<1n{f3N& zsP3|O_{O3^JCruPzOUPl^yKU5$>D0FT_R|wjqf@RtDP9ZmeoZ}=PlBn#LVdVOgwy2 zyJ*Qz6r8;5Bf3{^!`ZsY>Zio&o0mM|y;gU*-72_A%C$@!gJIj4`HCSR2(XygH|A0I zgrMn6+i!Wx0^@V*0>zEuQ^nP_mialMWJYd$S-u|Jjwj4Q(KZrqEcO|?+7nW6eU}ps zvN4}D2)7(nYUPJC8!gCola>ijms(PMgF18;W>Usp?QMT85VicVa&24u-bO7!l+$WD z2%*}k8wjMv=TyMMI7xJE36)hkZs-0RDWe88-6xg%H0mlo-dMsjRsHw8RRf^txgUsV z%vI-V%tz6`5hsJobLij9%m0T|dkkomu=U9QkU@coqSM$7Ox78LJ%4`4f4me)D1c?k zL2F(A7oGGgV}Xmapw(J5q(3bGX59axv>K z|7E5#Sm84!{2TE<+QOa@!0hGRff5}U>FKBS0&_B%9coA*+ag)?loE%Yp0TNtZPG5A z(zasPHxih@^vSG&B3u7WTdkC7gB}X4xXSmw6REcLq5Xs(p7G}(_;gv{^#za6*(z(| zlJsB!VvKW{=Wq|AqU{)Z&DmLVnPaobR}Asw5YdE#LUXfDICh8^P(YD^;Y`$ByXiaT z#yny#5r99>+E3Mgbr;8{C)hCr;o4>a{_%fK(XJ_=47EVybFy-8>PPFR|he!w~xe%=3Oio6g1v~&67q; zD(NzC_8KU=o!P5gJ~mYu_&u0b6)ATOQg-4cVxWiRhs@83=K{HeFmKKc$DZ%cQGOt= zDdhzh*R3hQv~x`>SgD=M&4wzvED{0H?7A2A67j!t@=Y#NGjepmz=GJ#mLFw?Q=g!G z-pR@}j7F{xKChM-dYpoGD#=8vcNHQl1J*9X^V2Gga*kcSNNp?{U6Ga1k5=3S*ugnC z$EWDL_#2k=B}IQLEDUh}^Db=q8P{v2$^qkp3p!`Hx^m1)r7weB@Qr6&c(3+B3VeP6 zAdBXQa^q0n-}FkL#%R=etp$PAPP=$m@iZ>2AFC>Z7A5G9r|A2fj_bnPpj4pW+ou5aumqdVw83qA&#h1s(xk~U!Zqo51d$Br z9TX|A)e|=dZ!Lu>)49Pd+0nzllQntnM_}M|p3nmkTRrR@2&!v8p~OjhP524*`95Lw z%qD|CT&G>HFpF8>@E+Hb*c8dc(C~(kFKb_#E}e6n_35paEd$e`nEfFp(%`cs=ioJ9 zKLk@)X%XQyIlw4qI$o`9gjxgAlE0=i8o?5itKDjN(~_E!on zh!CR5J{`;l>$kA1HKAf=_+79AV{5n?B$7Zq@X(ZTf0&c1UO6PE3#z6k#6cueSrT|| z(VR`b*CTZ=pc<=^H@I}YIi>588DKXn;M(nj=Om955 zf-xca1kY}a%4np=6>w9I-Gr(gb~&v!SjWA`wZy0w2UYQ^X;xLbgJYZn8%w%A@V;aV z9d4*Xk##cL;Q;(#Ob)oR$AavNI(K%t2=G!LSsgDuz7dQmN|hvh?E|-%m@wuJ z#YL_MX>r;CzV$Ib+=st6jL^;5#?mDw=A81b23sv_F-!-{B(j^pN8b+tpOhI`F!V*) zrO^v`U{znXMY%bfy?IcCgvgKH7Yc#99sD4 zo7CWe(}QLf1*C^bHU7|=O2c>fL6W^&nO+^Eyq1CWf`A_fV8(*><5SnuUr#R2g#@P7 zZ_u_OJMABTo4#NbKwafueTd=@tr_6gEb$@VDBYX3QJ!>x?(qdHrZsK>pQR;mD>#7r7SFg;{61rA5v+} zR_D`Z7w8gxuI(&!!4CtZPDHvU|Ghlj8RYU#UFjsaVdd>ahd<>~L8E@j476%WI3}}J zwM(J$37Cq?A2K(!_`-<^y5`)V1@4G;lpR!4$v3#g#1vv%W{JX5K zQ>^+WrM=-?If$Db)T|zKGFTR{5`iFfv-$% zFp8l(PwzM=G;C!|^S2zjxU-3v{iWYE+x3*|AT(Ro)QR;hH%0qiqlvB zwLooDwfogPde?E*Jc^O9ND|-v59w7U$wsVS;}13Ye=mkXGVfNLJ@>b{{?(KMov7*&$E#q9@5ukEjNN`oS4@8x zMN@F?V<}R8=qo2K+=LI)}4A zU;!aE5}}uxF}0tj#U)%K8I`O_H%FqYkcJ8gWMjAVU}m+2v=+u|kGo*FHSgDU>)sVb z?m+{xw>Y}DvluYsTBaPmBNP~@;Nar<8S!jTSFfrL=a`(%Mi-#^1Uu|98??56iaMtD zoK%?VtDGdo4f0_$zBb_Pw179wn;KQPgdVB*Tolqlplh(2Q~Oe_Fz3@d(0kqcecf9- zqjk`_yv4VD)^@4TTHX+639nY@+Yrwyi2x<+-1nT(_k8<3{I{qac@=9ct{9xM^QtZi zfq5hi)GyiV)yYLWK?Kz2NA$*{%#m4}9*B81xYFI-3eny?>B|{)9^lTebLK-gjxF>_ z7X*k0UR)NMSVP~4JpXw2)->nP?s09tq*E;c=+#|EMibM4%a_!+9FSk?8}SpWd739G ztsZ@QxcLwVDAHt79~X*yedU^4(v0VdjJT{`yd=Z~HmhXrdeYgoIq6c0Y57(nJ4tFae9{}AGvK)?#QsjCx87D- z`|@C*93!LAqw_uD10Pkg7x`w&V_rPq?lu77Clnzup1)vG;EY1|m!JoS?5v#`oBeIk z_j)UcKP*7;84PG}P^Kw|yFcFFHVHp`CqSuY(vF3J>HswHjKH2TZ?G||Z%trZ9Eja? zNbw6G*aXT+id8ttYycsc&Z~ZJX8D-rYYomhH?nI?vaWI0zT)UG4iKvGg`84D*_@u)pa4Se6TtRL9pmNrvSq2zU~+p69eqCm3p(vr`pdeSZ}+sxHHO`dV= zlz-ab&7Wpmbv7m&u|*L)f!-j>spxDts3GrmGNrGhEaeA*%ViHuOVTzt5ZMrFWz!BWd6RIq@9Hd4MS3)-E*`ezQ7!I&- zK_`?W80=y+3%p$FtJatSsgxfqgsQHJ5Ne&}&Z|?@W%5D|n&zraFGrR6#?o{5gsp3= zZd)8D^xk&dVrBYAyEN5WM_vomgsP|Nd1#_`OUTi zHi0(=FwT-=IoF?T{{OhI@DI}Cx8A*E5y)r!$8iYpNEp2IaHT6BnX@oHM~DMnAxF?N zEl|rum$0}vD|Y>8K5xxi4{$!$kxSTu1DV9B{TLYRc5Y`w!H1OYoV^Sng^D1Yk(v>1 z4{3`XPgAQl)lY`8>`vXo3846&(2}w()t{b6u>)b$7LZpb`@l^uplJ{9jQ&xBQ(49R zd4&ZCu^wzKS0AQoyHx76zc?(E*8wyGbA8iEvrF9_VIpL<`ch_6B_- z=JrjXI=CIRw9-B&c^8x}fH$?>Slz?o;;nbG$4awp>o8GDt_A|W)?-9(w+kd9mVf}d zc7$VtwacJ(oR>F%T!at(_F*z{kDIZS<9k3E1%?oj(#^zSn`by4v2D%rRPa z1W>JNI}R^UT*Jdxh zuDH}#-@|vv2txHx39X%PedQVu%m}BiPJMc{D>ZMAfA6Nu<+3Ce6`cO_Pn@lLHgG<` zCRnyMaPKascak10J&xmqGlN7Ro>XnN8H*0OfO2jA^%B7{4xf#qBkE_=dJ12MMprQI z^VCi+Z#4aIzjX`CO`h$3euJ`VADa%J1~SyAV(%q66ie}wlI48^)uz&Rfrh(R#c1}0 zqi>1y@v_Y28(d?6Xp1R)Dz0$6TtdoanlN#vF(_}JzHZZkN`?aK&{I%oaI$k0e4l$4 zvc1GQ%eL(0IPMu<2n?${s;%WT#>2gF;=z1s1>Tdw!#mChIIHA7!7P5g zZ1Pt>@M9_7C)6I&jQeI&^|Bq17w$a<^rP|X)x$VG=?2h3O!?y%uL<*>(0DdgC9eLi z&2118$@UPuH-e%>v%@7Y~%(xeI^q6kP4DN64M2@z005kgTRw1`Say7WUY zBE3k*5RfhTy=zt`{nac^F`*_qkdd3I(e@A*8>=H)E|EtX@ak5N%k zvFK=P+@_+UB?0NNqqM+x0WI$@;6UwlTT6|qpoeb>$j~{c-c+TcDuy%d+t35~cenKK zXmV3NCWwZv282mhR~IEkNpeGTySOP|hdJ(CD0dgIADliY1~S|YUAe$@4Gp;s2q>bV z0cwIkAb@M3xlkw+s01Vtxw&1y)&R8EkPB@9N`N9t{k}?CN{VteV_v(eYw^`nDk_0E9Szkx{+6q$k?&^9W3O*H8-0E^ zbZ4ifboTY?j}~4xx$<~2x$4>$RRj(7v1e46uIx2Mxv+rg5~`ECF+-+eCpC@!ecStC zS};sfziDLkVCY@~0~S3$Z<$>vv7FZ#x?78@Kf9b4iC^BlRVUuVXh;(7XWsg*3H5o( zhLX6-J4t<*kwSIh=MS&xszYpbA2ziaJfk4^Vc{82=hcxZ8LI3|zYle|l%@ocs3*3w~larz#HJC}Sw4BN z=+t@AdLi8>4`h9$zH?mWYDJ@3w3KU=xy95^1i^y^b&nKg6g}F0VRwUhUDnS`K z%Pv=mf82{+8eZ6u&!u9-XT~T8Gh-B4WsJeB2>T=bx>I+0EL?gq^H+M1q|M<=L`kD{Oj zZPywN%M;A9iP1kq+jZ<2hnEKUd)LWZ;79&_32IO9hPzj955O+fPRGkbjE-r;{(42azyOy`IX3qh0@)a*oD@W^l-@Z?~|XRz5jf@QUz0q1-9& zMZ_<+^o>UBg|jmcPMEWwhjcyX)avx~`T2h7XKd(po{d@^BW(-S{Y&FrWmkN1CpIk< zHe-4lmdN)Y%6`X3I&Nwanj~%5Rk#>sW1{EZZcm<0jw*M*zL}^{>tFZ=!@e-m&AR4% za-$=C@woAXmO9F)Y>2KWRIWe-$&jTInXO!V_X9Jly@6U_w0xmQ5E(zH2Yb)%-PCMS z5hk=%)8YZjnvA|=UXbQ{YrR)FzdF>Q<#9t-K@15eFwrh6&bA}ov+kx4>tUDGx@Xcg zPH+&NdEi-5`;D0cY;QKfpMdn^yS%RDf7;=&ALbvrD?e8m+jKrQlpLq@!_Y0Or`V?& z=tQwufCQht0Dt&LmGuu|oW#dAVNw1WTu6FLH^$vA-fV-xd`pm#Dr-`4Co6vT+%k3= z=Mei+!X4)qkhCh~+xU5jJj_p^%~&Sz^gOKIB5^rpPUn1!sAOH4gt^-(T&y&R__aaf zDoMns+M=RaiSgiU8**{z!@Z{rHx;~3Y^UCY`6c|iD?H8!l1*P_B@-cL122_*{qExp zxu>ZxW#(VyX3OUdu6)+(-Rlp795H}Zcs)w3m8@+YA76q8I+st~3&8Na&pAQ^-eKvJ z7|plutY8gpOh&8L)6arg7p|2n@8hz(_}3mw>vN2I)jo~F5+?TCh}1h>ndH4w+d}Wy z;ws^Ak_F3a}U$?CK;%sqgznzoqV@9<`RJtat-dQf5>>o^Ox z*PQ?b5s@$mv6arH?M@L0@yzYpvwNIQg$E-Yj-~}}_Xva&L8=@qG5En%^I{x_PI^c3 zUuh|OuMLv~XPW!byvcOm42VSBRwIOaW|8hjaEOGGAY^_YKYiuH(IdXMWS75nWPX=HcWJl zNx1b6em3Wei)t+Chl8U7e_i?-mQD~8>mg^W7ZuqV-l-FGu& zs?6DEfMI4r=HbXYk&NTs%18JGr;}x_ zm(DCzOxTxyE;dfZ#T07Lfb|53E~%s5p3h2#arO%OBMybOU81y0hQ}sC)Ei0wApT_>nlwcQr$UD zogeC+FUuf&4dz&9^8i6ynJ;MGLF9PWj9Jt%FB!_q_ZB8M*Z&Ib;ca`#vxBZl*WBsd zklSOw#HYH{!lF?t>nW-~*{=UMJvrS+#1WS`F*f@(0+=M%8O~SA|13i=MkswhzaZfE zfn`@L7`LG00!PxmBRBI_23&B$x6}(PeGHf@`l&kW)wjVX zXCSQY8(VFk3RZ|4TrT3{5r4v&I-ht4Matqb{lNBRLcQpyn6<+B?-Xmcl30qh_f0DM zI6sY^zRio+C|m1LF`7^Kkl8uc)v-1$sIXFa^QXDEunbc6R+k35liqtNVuEPOdzj5(3)`<7Iw{9Hixc)JgC&*ZNPYi# zTh!U=Yy9VCxu0ag+-oO416`?v@ApXCY#wXq3jo!lXLNA7rKd8bh!`67o@ws)4|(4h*L zxU8&|3-yU<4v9eXI%Gad^J724SDHE}nkV824uw z96J7%=&Y8c; zcc()q)|y3a$JPm%TU&d>kp94n>_hTVcwt$B>-U9Cmp%NVkw_Rm^A@tVt8N0f_uq7K zogeZ~E&Z3M_7f(#{FM8%s(XBpxi`ZhWmF-Scoh4gI==`ax%74aJ6IY5{@1~B&$vF- z)Ux5$U_!`mHLv%5wmQB4?KkG;xLN7j(4sW9QU8uO>sYmFL#ocVN}|(^x|g*|^?rB( zzy8um&LH{F8IEx&JFwf8yBtQc$PwFL@tTSHNEZE;>%Le%v9x=g4lx+J*TXuXXvY0C zQvcA5L-BlF+|<0KLwzkNq=>ylOt!>OD_1=d9r;Ft#e5XYkv*o!=qrp~P^!ev0O zV^QI4bGy&w)NazN6(QMf!CF_IwPMh}npBY&>OF_atK`!o0f&$or4wQ_MUdwl2@q zP}zmsz3pLj9`Gyruwz{>8;iaAFoUBssEc(e{YvOrY1O6mA))GT2Ym)?qN;6Si|LlT z@_Yysp;@nD{wV{IWq>>~(m4XRW>0RQ=K;fQFdDV%!O8aetz37-a6bM|T6y_Uro8X_ zM{WO8?GKH>%Y%#B4ZLg)372~^d$I`N~`=p7=ZWa4K^cn zRCaqMy&by{$^rjX2j(Qt+6LQsw|-#i%9>YOi>Ht0L$(L43c*on9B;D76oCm$9T_5~ z?MCuP70XSWH}U7e6GU@3rzRUId{Js{hxTN3G3+>p6Z-j(g)Fz{v4$1WAHu-(2bP2< z9B8~A7HtbIE?)267L)e%Ild)8YF zxUzdy2yf(yHM$wNliovx@yCA#ZIm5t8dNx zgi+L6%JhKk42OZxcdfVm;m4fD`A&&^!V9yV3rZ}uXk0oDo&Q$z2+4GNp0+5D0TllD ziw|_ZSrCVaIE~kbSAp-}*)+12JJO%l<5m2tcUxMBGF4Vra*PG$ayZ9K+Ah$__R@>! zlg%Jbb&J>D99>Sn0gXdIE0(?X${|o(_DOZ9adxkRJ<0_S`BMq~vx+$kPXMBcEa%Dl zXVprbdhu%7e-KTqQ@eeQo8J*C7b)?EfdBiAh2s>`#jRb6_Gb zH{9p?uQs{L(d#BwG=J)+Pwn4ZOX~QqN0PqcSS9yPZN5nV_7~x9P8ZOrM~XC_7S+P1 zYd9kkWk3b7O8ecu8yim)Rxou(OQ4flAMz@%jX5MlAB$Z*`v|UDsa1b8eyNm2B>V%n z-s)^8_vd)6u1S6woouJGB);?@ru0jQR^(MjZf z6}wm89PqJBhEu%qO!}mJerLG_zYSB}`_{<*DuPhQmPe^)k@ko)<`h6? zrHa+cbL&E;IwB3DGv+aKuZKlIs~1@1*Uq|%DIVchXBfOLw$ol0lNPtPe@rW_a}x{i zoxkPnFKvDqwZTb@UVLP*gI09@VLkvO4@N#f`|0I;-h`%^4g#g=6+FmW}5V{`hMlO!WbQI$Tu2SaM z+(+Uk^!yM_)Va3zgvs_E=0T~BCDu}X*i%ZJ0CLf+z@Uhp{L5P8>zA<-Ef`1O|{9p;~eX9swEqK$CxF%57!L&5O|CTPIj>j_UrJ$7=tOse^^zAhg7 zqIDZ3S~;%}LdD9m;5Rv*wq0M_7+O1*QBTx*iz9DsZEl@4Z8;tRs4S+GM&`36=C)=H zr{|~8^aj2(vFtCv>r|*_x03W^^aqo*NUb`_H>AvFQEAe`%R9H;qt?c!ekf+=(cDxZsJ@3qIFi9tP{BhW1MuIhlJ@76j9 zpcq~UIO~O902JU()GW5`HpRHpxjH5!ar~_9dF+e}8arE8eOl;8qM8TU-NoP)}w#b5~*WmZNq~?=@n^u7Yf~ohZI- z30=P6+ueVoM}8Cf3}tIx{ry6uz!-QiW)`=Q>IeeHK8i3&oJ?~TSGOILwm~+JPT44( zzeWtK)ekv|QYjS7!8`$Rq&b{PCS`sWA;P_BPVkiqTG3^DSB1o*e2O-#K)@6Tc6qEK z6f*q69P1qj4)Ox{DjosOPc=a8qLW72goynMWfxR<_&?Kw8%}3m8!S~pIfT!!A^G%* z#^ergH%q)qfvmbM`eH0mOPaO$@^xK&bAIWX&CF8T^fwMLOPDg*y&ird?aY@YIEZfA z7DwGM7df?gbWg2sVyTHsC6DnWg}RR6ugwc~?=UHasH~a3tbaFeG+&Bk+za4Us&M&b z`gV2J{>tZ0@Dsyr>Mw)M+uV5Ti!O2u_cfkZfuCseAm!gBwI|4$WkIj4US^iheZkv# z^&<3YL`o1}d<=<39}{4)Wio%)3U@}AZtLbpa7R~N9zNWF3=X*SD!oo*XhF7gJ(rX| zr~*0=h#fb{-wx;(iU0S=FyP1T*}sJGR|MDift7g=#XsqJ zG`#VgzrlC^DMNVl-11`vV<*2PunbKH_}Eb{MU+K|<|9U1ov>c@b434Fn*!XyA_jICNod+|^Ak0z8p3l_eUn=vXYj!K0oOkR~ zgIYl~5B%UMdNGlR$nc4N+D_=KT76&UJ(y9dt|)c9!kYRk+^h3`$8r@GvW zo_S8;o^_Z!;xk+|;L!LWj;mr|)ej?LgEebSt^hVCpHax^l@!gxaCea5>mfSZ>7uIB zIhmOaYF3%;(>UBBZl#dse?weOA+3`HO#Q+)Q(hG zeCsMBT!MZ|kv`2#5nF{(q&(3sE(PLL!2=^4T}c<|Q*aXu8pDi?)cH(Czaw^hgEbF$gqt09EO2eQdxqdQ1e@-~9Z&D4L8d}$8FBx~6G z(J@`#{VBYL>~J`9)`nC zdSibYp6LD^jKi?he@ph+t~yk(GNo?zP_F}N`*(r5vu6A+0NdSNBaW#2DS!V`%CdyN z2~@k4?qxV}=pl_q2~-|>4w9PXKY=dAc=0J{V0D9m%sbm1xC&c;wRbca5a*MKZ#fgDw_V| z-HTuvY>jlw=cQg@@kOrb+}=K`y6f6gj9e%FMMRa9$&EPETD{1*<(=^*!Ihu8VQ(v! z318I`9eME@@M1&GAH2-x>ee3ByqXrjG#%)M3BC8S7f$hH_I_J=D#$SJV;j?ivjSdh z@eFT_ZtCCQpy`qgPtdIR;VRcoLgi(VTj0DcCZJOCQmcepO@_&B;zP5RPxv;4?g@0g zf5LU5)*Z`bua(P~*zzd1;)b`c!apyZ4IgWgUy}wvOm}f(RmHbFZ;^U@CWQ0jEBDs)czq;e+uN2sQA z2*;yc;U2S$GH>bq-n5t&vx>e8z_T=+Xp%Qz9sJ+|`FLh__^oCH1R1}CW*~IWZ#qoH z!w#8O3DWli`qT7qhPPU}n`=bY)ChJoONCtc06+V}*l@%!h@Ceb(8Sg&ldqc+o$<|T znYGmc&t#DK@w2urOh{ODRKFZ2 zqTUXGlDw+S7zRPEj!j#z8X#o2k?HVT_C35I48_sxe8qsPc)MqR&!+ zguUD$g)5T<@{lCqkg#S}g;337Ibg