From 1dbf3662437ecceaaf29abbf010c2a6c61969184 Mon Sep 17 00:00:00 2001 From: Mitch Watrous Date: Thu, 9 Jun 2011 10:21:53 -0700 Subject: [PATCH] Make statistical framework wiki be chapter in model library document --- doc/models/Makefile | 4 +- src/stats/doc/Stat-framework-arch.png | Bin 0 -> 29940 bytes src/stats/doc/Wifi-default.png | Bin 0 -> 11617 bytes src/stats/doc/statistics.rst | 362 +++++++++++++++++++++++++- 4 files changed, 358 insertions(+), 8 deletions(-) create mode 100644 src/stats/doc/Stat-framework-arch.png create mode 100644 src/stats/doc/Wifi-default.png diff --git a/doc/models/Makefile b/doc/models/Makefile index 8688cd291..468316666 100644 --- a/doc/models/Makefile +++ b/doc/models/Makefile @@ -67,7 +67,9 @@ SOURCEFIGS = \ $(SRC)/wimax/doc/WimaxArchitecture.dia \ $(SRC)/lte/doc/lte-transmission.png \ $(SRC)/lte/doc/lte-transmission.pdf \ - $(SRC)/uan/doc/auvmobility-classes.dia \ + $(SRC)/uan/doc/auvmobility-classes.dia \ + $(SRC)/stats/doc/Stat-framework-arch.png \ + $(SRC)/stats/doc/Wifi-default.png \ $(SRC)/netanim/doc/animation-dumbbell.png \ $(SRC)/netanim/doc/animation-dumbbell.pdf \ diff --git a/src/stats/doc/Stat-framework-arch.png b/src/stats/doc/Stat-framework-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..a01f662ed591cb38c0693202c53f2064cfb90c44 GIT binary patch literal 29940 zcmd43cRbeb|2}+G#+8sHB%7qjin21UglK3ltL!K;viB@IB%>sWG=v7(nc1XJ*_+DD z9>3$N@8|RVyx;HNxbNTn&;5ElO5u8q^L3uj=W!g*<9XiHI;uuT!$w0O5a9c6vX0EnUcq{_JU~L~e`KuOHr40G& z1KKb=C;2zH2gzSOB$VpbkpE%i5xSUgwtm8dt7dc__<3Ah3Q^wW=%bw|@TYnTCc&Y+PK@!-pa4GG37@ zGq;YfW(Gy*TaVnWxRZ;b@r^im6f2d zaHPHLo)AtCg% zwBHR_a1&qOTC&jiuJtS`FBcFKV{nh#K_vBngxNxogo!#Qh)tiJze5V>tsi>$NKYmgLZaOBtZdzfuHTU^Yim-J(W(L+#@Z0j`xxC?9bZ!`?oDi1@T<(addRVPw^bL zL}T-&qU;+D_kJA}DT{7wY&@>~9&=1-D{)uz=g+)8trj!YlJ5tnTwPqG*+cLQDJdqW zPjBIw$qA?q4i2VJ?h;EGyi!t9F|{Yme~o-1CO&&6 zoVIQa!GmWX-pC0InU+>Vp5qizX1!;gb-Ik&(W7=D;erj-WTcS#s;abneVcXNckI9t)6$d{*KRP-( zR~eSciUJ>%az58aroQ4yw?q{#5rYEAyT0DD3or;PI-z!|6x#+&} z(Z}H*KYnC?Yi$+ODXy-ruCEWRADo?@mfW{*^JL1Q%yZ9f-J;PRm~c>4Rb8f2y)R=k z5U=Q7fHkvo=b?qqhdcRHh#74bH!mKy*qfV~d4iwO&fb1A1&?d}`?@+2Ma4qBH9~_A ze=X!jge4?cT3U9_&LDu$$}V_>@)I9Ee|}ZJqG#QDFVm}6Ijjhl`M*BT{P?Qp*dO)g z%^UaC#m*ZyZe&YM?A;P=QWw8<^XAPA4CCM1_Q*#mKcrlGBEWbP3xb!IcU(ju;=GoY znB%13#N!T^sUwPtic8;v5)u;p{i)jmN@X+>GJ9g<_Fko-r+@S6mCMSK z$d=}JcB2YQ<0a&)$;!%7)3XNz2e;=rW`%~)ZEA+JKZ0xcZ)0AWq$J2 zt5=Rw13W(bN40fDU1<*$A3Qmp?)7^mil*U*`#KzYjaKr1-73~^7+$x!5t&7Ge{7Fs zInAp#Z$?H&=&wl_m%m<2R>_yi2Xl)+`E7Os2vl5AoeZTPv#Lh8ndqa zKM2?4Uld&T_jsSQXYfIz=_!A)Jgi{{XXipgzGmIiqN3@pi!;Yr@ez+`mFxc>Lpfm` z`4oQ*<>NxC)JtD-Jda!3SJ_YY9oo2Ysw@v)az4>uwhc*eAGr zgzv9OiU~&aMRXiC#B}* z%JK7;R#vKOY6e#KW5%hgM8(A97}v5*9{%8VU51CJxTfYXV&l?@O4>sLF)T+Op1-N7 z^7Hm=ZiM|$ObZqf?J$=080%y8@G%^c_1Yi@1@O56?2&9wCNcZkCs`OaA;^{Vc42I}z+y1KeqTzk2<8D;t}Jz2^pYdf*+}XiZJc zBZm+3UoP4mrla|mJNvW?>V_KEJ?S=|5boh)r@_ooNWvs0lJw7lN66XGsH(dS5kt4=g%>WK0Vsc8# z#;(>+PtWrCU>K?P@4`b|6XYE1vXZU{;pm;3m*=ei_Dy>rYfEoMs2b7C)HERaAn$Rm z+{)ToomZye$hpC)A3uM-W@;LC_9QpMxeFJ1GLw^&mAJzK*6=*Szp~9^r1nTiywJ|M zj5ujzwB6NSNf*f|?fLWV-lcOc1<#-FzIXKO>C;ks_ueVk_%J=a^V>IJQGI%UzWj-P z(byVe=k|lQ9e?7cF^BUxHxLN=4s0UzRcx%RDyph0GhZ#2_lF%#dHeQlFUB^>mQqwy z6oFD9q4VR%kKeu>u1pa4a5-bwu3c6!6}?-xZvC~7)p4LE#%5({9w&VCh=2Iv9@kI? zo>Jqi?bi-ww0*Ct(g;^?Zf`%r;4{5{gPdIM($bO}<+J#}&!b~UNthq``L3N`k-Np7 zH6Vpj-7vg(aT_Us8;RG0!D+VLUJ-G(Ez9KX>({P`X9)R!VtvZ71kO#HCW@)KkcE0b zP%!SsTeq{d#s8usBiW^`2xFHeVq|1w&YU^Zb0jA_+hx3%dj0zK#Kfy#-{ib|cRN@; zK52TV(2IGT;yXZB)1yPj5)@n~dVK%H{78R)|MYZAV5&E7ZfI+38yfb>jpb!s?=2r1 zGCg_nqyI)Ox0yDRojZ5-P>bm1&GmhV*ke+sLOc|oou|9NdfO}TahD!tj%LT$QQcEJ zj@{SJbC{@Javt3h@u9i7nf)D7oWAh3f>Ck81DA?WuFh9xC*4CQXJ(EbBOl1F-^ViQ z>gvw_J^(96#xgKSnGF-Gzl;Af5bye@A`4?l_wU)0ZNPoe1`oE@RgUwVY4q=j9=gs9pN~ zo03Es>V$gSadS(Hi5P1ji)ewv1n-F|lQ;(!(av_l1+9TWdjkUlYisMvmoKL;(+_Iz z=HcPlx%0`BCpSlwa1Jef25WkeXmcZ@(^!_@zOirFV%Jx>$tSFbC3B&$h_V%j_qv=oRDe!ShDxSg0>go*}H=1OeV`F2}yd(Ufrbgw2Hv^C% zrlrN+#ijWvWbM0Rm)6GB7C8OdbzV77dDwCU3$nKM2=aWf{<90OH3XS@WF^^xg}Y)o zI5;l8vA84=b6DVGOUv7&ByWp7+qaj!e@_BRFD_05gzp%xd>V7_-hP8}TEwUg8v+d~ zLJm=Ib0m5_e)sO(+I8!Iw?JfidwLj1?d|P&V!)#d7cOXvyiHC%$eRY#AZ7kJ%tT`* zuo@E+_!7&iCz@oeF7Z3aXlV0VN9T3k%d^4I=2>-n<*DOYgD!iA*+|RE`uX^bJIGVo z`H(K*>bADi3%^Dw*D3?>A%N=Z>vQE=+1VjL=V}Qu5h?cW-RtS;IrmjwnSoJn6qLgJ z$`wupmvdMgfW^$rsz2X3P8kDhB0hh9p))!<`t*TZjMP4hR)(!x+nSoJM?XIY4bc4a zctBIYR5Ua+xZ$*?PdAao#l`K%I%@0dS%?&|v9ZO)#f&`dx%QUe0YmARXm4(=|BV{Q zhKG;4H1^#~&kGdDYSXpfSr7!yLBptk=SpG+Wzt=Xc{DN6Z6%EnM2f@H^dtn5fu}kH z#md?vcZO|c$!~6Y_Sl*ASFc_LsBO~eTI*l3Q%I=WV0F#Pf)=sQi{LaLIn%Y`T4GpUtP@b~Ohh7~@`I!6eo#9L%L(kOwt)$zI zjq1Ot)1*`6d@f&KLasXhiIXQI+Js;4wd@FDkab&{BZU0=p9Fj>VZ0wgL3}%f*WqW$(R6 zOS@uWA?(VfqNi7wlXG6Th@D=|skd71cTx@HpZXRT8w&>Nyq}psC>q*x_x~3G{|YUs zuDhpa^5Zc@a^RMfEG;di?b>Yg`Pumdw*@n2XSsy>&UbcCZG8vp6ZWvuQhAg4qFcx4 z@Nm?fI~vW?Gc)B8tXKd_N`&ZYj-ss}UV&j!Z{+OS#y)p3*MSV(O?u0NS5{U&efory zCwJq!67g#LyH8lrd3oCWjO~T)da@QKCWDyvJ()F|qd(7v=??s6B33is&$F;Z7raG; z)j#FG25(V_jWJDIaTVYa=2e!kb+}#tIhe zFx5_~E3a404>L0}ELB_C z_RpVZnvyjc*Hi{+>7IlN0$qt!(Jc?)(ZvOe81V#aZeU;l%Eun#8fm+cNEHVVTPz3% zW?zRw8mD1RbsCY_n%JiORZHz30&mq1ZewFpa9ud1Tg~J(4*^H4d1baMxrdse$O>zG zzN^^#W6H6U9F;|m&dy)Id;t@W9#JwJpO}!re4ps8*mw0ybEiRmem;Nz4zTb==Vw`2 zHV7eS&U{Wg{dB?k_w=_-TSsu+!pV8mjwoubvg0t;wrqwh2i&)>s~ViaOCYkR_@0T$(re zBYsscYh=Wvqzugt*)eD|HhEpSl1fh&{8%rPNDtl>TjM%G`AJ!@tX?sxOaH$s!7UeK*(K2MfqDA6eZb^ zPXCYvN}kf*iErP&+1lAbK*LM%A@PvFPlUw88X6k3^z;-(MCiF%+uJ!987~_e0#cUs zTSJ*)Ahor%VIo17di(OF^o{SVzJquU{Z!?;##|_d+cocqu?DT*EMS$Rt&nicPK5~p z9XbFax-t=H>RM-kjvx~a#oBG#;-FdiX#GvxQP}klafg-X)!(>8-1`WOu2^$dhsKz~ z^7O|aU*C%AygPOJ^e^xdWCKLfQ`85O=jI%cz_dkn?RrlM0qX8u)(smr_%wWo*paT2 zYkcL(Ed~vB^`b2Z*`j&{LHo+f%j;sLgk)sSpFEib_=qKhH7Q1xD3iXnvXPlAFdQ>8 zGnsYM)BF1Rrfw`*1b5QQz407Z1(8EKRaW+FTF0d;%}#&5?jK-XiTLUBXJmE__Oih# zq@`ioci>PN8R7*SBErM3_g8Ikc6JsLdb)u{L~sg=gdo_~S|!6k`ny_o+}&>$OHX0( z`<@*;b{J90t#$aVcumYN;YNV>fWc4(Bx|H>67kn{2QEdaD~5)V5fMqRO#KW0BeZ6Ku;l^Yk^?57859I4 zKyx!ypPyfZF13+M!Q$FAU2W|=_tlk?DMz1Qd@CX>T=V5iEH^P+U1j(QVLTID@$;82 zUy!K)ygq%}&UjOWHylVISoP%bBqUbi^bm5@|KVQBQd^BYnE9+sv$M-(# zE%wIM8fTpoMs~);V-7UBc1=OWWDUW$T)U2kZsXWyitu~)e)RU9ym(Q_lIIo%l#-J2 zM`xklhfVam6(bCdJ7~;1RG$>`LN9-KjOZ@0?3*g3}q0+WP zWHmC9iyx%{V6qpw`3qky3v~)y=Iids>FDV6I0K`l9FCE&8#%Q%?kdg>91CUG(9lp{ zU(9XE;p){NZofXYx9jNXb+)$7eQ(RcI>Q_xL${`;+qZA`^jv0Ne?CSvsSV$S&Lt-& zdhtz7Ypa9RQC32~SA5cJw<~g`Nc1976!K8|h1WElK#W0bcv*wE3!8z%M~~9W+)jD; z5O>jx*H#}d^Rce(=cluJQetAPrAH^$X-{TSCu+^%41fpUa_!Ue@|FOY-IpdRxbWAH zx1GE`-+%mQN9aUsWM`)m=O_4m!6N1VxuJ{8nWF;`90&WCN@(Xh7;h@9E=_^$Elqzs zHka;s>sFO{dj1>8ev})SyP^nBZq-5~sjM8r9IH^AnVwz(RUvCrH*U-vQ(Qg;&FI{@ zY?M9B&CR)fAJ!k(34U1_QRG4jDHSAMSonMA>dGv*6axvdhp9XAV!v<$?=ZW3=X?&DQ;o@%U!55W2LTj`ZW3N7Pv0nS8#P2ZrYBSf(wWi z%v~O7eu9Z{@7}#r)I<+$GM_BJg*gGq*?qcE4fqOYDs)}EaqwW7;>yHEsN87>wh^~% ziP|D`1|)tX=rtV;4T)G*UJkh-Xd-%#M>nlCJ)!9CH~+kr6Xj4Om%M`q19Xynw`Hg6*E3Xd9zPzy6xhCfJ6WlB zUtahHz;@Hx&h8gZiIN5biLCVtD!R-u@E`}-;TP0GIeC0`2?=el>hJH@D7;0e#0|Z% zXv@UR#hZ_ej!r+Hyq&psCw!=9+C8YvWYE^uV{yEQhgY3%wseAG9C^Bs# z6)sH%Mns%cQK29W4JNqXu(tm4){=`fG*BCd*Mta4OvHPYmXYbEtU^2+=<8$Jwk?oh z0dp3oKzIvacxT;zD$&)hK-)Q~7Pkr0P*3Zz3~B4#(PygaD5s!Z0kRoxq$^PnSwTXwln5%j&6TWZX+C#(uF8|a`;5M`9 zXNQV0GcyBjjuF#yo8SJadnwrS@c=&d*pcf}a zJ|vfO-l#Y(Ob-)z=>4;>%*;MMJ`{-w7cHu%fWQ-Dv~AlqpRkyiHk=Q^h;(OS+5sgw z$9|*gJGk=BWZkw+@15tQE z?4$ktz6=`2j&T)bJUyGPN;EPuqU$=>VDE6p6oS?#Pr;kP!F0i@xzHXyc@oC=8JNcR zA{=F8WC)#kMuuIPnF~FEqT@4&-McTo5rgm$F+4i@wXxBY;bEiczXbwfB32{Hc6@w% zC_jlre{E_a^~caUhjJ;Bb&Z-qLJ75Q8GC&=+b^ums_N?XULM!!#l8h4#`EpiLG7Lr z$?#XLch}_p)PEP&h>56*=Gu=93=VFfSPOL3)uo^8r_cnTm_JdzO)Oy@?Y^&Xt|E{; zmc7NpvSo{}9!FWXRcZ*ON8#23GHNGJZl33Lz7865^X5&wRAFXvOu~O1oWWai;;oP% zPMo+6bOBgpVevi3W-yXvmMCe~^avG^5`YQlL33Pe!F~+yYzFD0tIPEGRiBQJkEf;z zrX>-S-iW`N$+>^O15_osQ-hmpi&eknIBIH_8;L^qTpqasToH&=9tkYt?0#w_t(aSf1+* z1=mBKuc+V2?UR?E|JJfogo(zNOmRJGM2Dcc1L5r!6-B9McC6E1bmG=MS-UG`x3-l0 zFf$}PJ`#5ZwFM@oM`>vb$bK=gu};p;CMG5)Ia-PUQ5O~$M~8+Wb|&TLFSpxwK7abu zdGz_))Q}B?w(^GjC`59u{Z6(>s%2$mn|By}qk^hWt^B56j8&~4ao@ty6?*Ph3{>IX|6KIMBal%D6+aQA$I!JOAG z8NW5>5)5ohVth)=A3uJK!Ma(fdFO-Si;Hi6LcB#3k1TznghDw6nXJ;B9V~$k=HluK zh_-zfq8E=3Mp*Swss`18G`@qz#sjQug9MF|-ifNJDomoXRq3^2-^5~S)`C2*?+$E}GL~D96 zCXl@|>AG~@?E0lK5=JyD_KWj_35sq@*$*CYD=H>b^tR{Nq~zu0A$Y!eB`GAN*&}%R z^e5mls4~IZ_8o;Dg?oftb~NQFmU&v*@6~vKK}AhX4MGb54H?p-euP9YGIGU>n~B1} z*m$qaK+So;bG$u-`7jfYaC+R#9Ii9YL@nmk<*3tSwB2@}{Q2L|>6uP0^J;5b8<0GX zy50%$BLj@$+Go%1V4{K8H3A89bd@ljhF|*S3tQnGW-UR~S%J8*27qNzu_H%*t!as+%>mIViHYKv6H9lD*JD!+ zzLtuL!D`V$?RU1rfZR}t`~?SDdx7upx#SjUDuO!e0duc4$r-3ZT)!TJN%zS!$Zpvw zI`gnZXX>|4pSG~F0&l0Lr*pBe_!mBboo7-gwk-N{1e^g{I$-^t z;L%O@^SMXyECM^=J4jQB7WHeUJk5DbtGQ1ks9m~mEMoFJ{lQAGi10FaeJ&dqnAFBb z#mBo$_I*IG>kdXjbCn+fm)I`1{5`8)|HVdv0Yi|DN3lJGH(<{6f`wZnO69UkB1XeM zCOeXa=?ag-u<QF)Zw$Z;S4(L?ft=YFLtIdLJbgG18e$B;)x63D)Q1b0MHBx7EmQkGx5 z)qj{LFofGgPZ=;YWWG%#{1{mrlN`Xkte4$+<~xGXaTg}>)U5k75Un{rAj+v6BIO=$=7mKjTMr<^@Gk%PFR$CSc8B__3|99Yq6cR zzWw{QIXO9za-0``y!~CyS=g~}A1atQK%d-C9}RV7pX#;Ffy#&|4~Z2@fm#Ur*3$AQ zD)QTg^8)nc?5R^KcH9I)gW`^(@vRVOVLCb*FRgs-(LdxJA`fTi;K0D+r%$W(#m+px z;G3|%0>TAYYimP;hx>Pw{v{;dZ^`^y9iM-16L-F*HUf@=gLGgSwET0KhU?v=@=6~T zWxw|Eq1dx$&z3D)Cd$nuzwAhGd4D+r1xYA8-`d&^{oKy7=?r_(0~q3H3qWif9UNTn zxW9d8%MER9G2!78b*L^b{>(M0zhA~x)B5+?yH6NIJhv51Zid#@RthSr+fe`lIodz* zB17ECqRrFvf?He~oi8sPKsrD^#uUZO+})Aur90s06xr#8KE1!>@OOUto%>EoA$m5W7uv{Y5gkr7#TUubS>%CzpUg7Xa{8xy#; zqN1YOrC0y*W!^ex#?70fcVE0Q-lcq#=GHn^Cg`!IS4fG8r>NIZUHQdV42k zf`WolQ&Ztp6o`nqdzTF6I3Mb>kOE4&yX0Zy=mrRa&;?Oaf`xLxN?M{mM4RYr^@w^1=Xgdr9f1!!))S7lw@%*4bK*aJp|TDR8~6>&>QoH%xD9R+~vk*pvgas(oqBc?a_t)_J#EK+Yf-2zz> z!)KP}ZK%A9^~Dfv0G4;_T>AMf2SEm>ERWdn(r)xK@DAwMW(v;=&4tVjJbgVqnOH4| zG0<%V1O$3SsT_`XH8-E);J63lOw5=zKP43v0vWH*4WL>O`@Bt}yg{8gf*eH;+>1SA z9<8Q4dejFp4k7atwM5U6xV^R2)#flPU=lCDc<5WwjYk}V&^(g^#!gU< znxOk0lcvLYZ2!b=#$)N~uzAqY(!yJ)i$v{3xxw)BdXzr_#PuBP;lH#jn174}ZDlo% zkhNR)JSK7jHJ1wmGxK9O4~>j|EshnYBq#Hn4_qts(yIIY);-2RGGsv!*~8GMkM})h zv7~hP8p95II3&{y)>Qd*9<=^nGt1Uuua(&BkWbCctgNhElheZ=A%1_xd<4#f{|!D4 z&6eo%CfUXAC!U0m96|6INJuqFvJ6H=e4F8NgI{**i4!MQ=Ih;0a8N3%FPq3cQafaG z;|8d!u`zwMv(PEQojYY*7bHd0R8@_QjE--s4*Ml941QX!?kl5ri-=xwNlB_wdUg>BIf zv*DheRi>vkwwrDzt8mc7qJ+-g)}%z%x>wx~NwJ#?_dE*RH#9W&#XS8ui@?xRENKVT(x=qRUP7VOmO-th;@xv8lRaJV8G;ZeOA-p5qH@agU4rR%y zBO}S~u966f#V=m`#A8g=E9w=x!HBTNGFoPjp3B4BJXugmI&1o^-t4TjcGDc3Bi!z= z;@%7lTpUhGsBDyn&dA!w`ewY;I$Ry1xXr?}+2mtZQe}HP%p9nNo<4I1{IFMV2)Pi% zp;GTfjcgN%M1uC!^8Df~0L}JzCauS)f+EhKmdGjZ@bdNRs1d8w#J=eFvt?qmX3qxM zC#n7nl6C3jVn{)RO!FFVc8_VOZ4s*^?kQHIaV_fkUa@+4 zIA2&eISa1$s^X$l-r{hDBT9Aa{HqQ}>%Ji>r$!`Lb+Iqv81yX60YKvqXFCv#u2#?8*`>q&@k85t7*4o#y0q<{FvwemQs>+0@{8~6c@B1(F(l;5zo$2hWX z-3m~4J?9%N;Sz4v0m*-@^}SF$%aJI4-$v!&L4^9bxjE=}oN_mUTv*_GRl9VFr%qlU zV`)flSHw-t9e#j=zfxXxvvsPsq{W_4h>v*~vB{YM$en{^!!NgwwvNspO@eZ*C)kg^ zKKBb7ctaLv$AG|y6l*8#cKxNQWu#EDU57_l_!$5zNFv09Rd{5bg5@P8UqOKFF7by@ z2B_D^XFU1FVB21cfS@1?GqW5d1C;;zr8qZlwn5feT5|DJdhq1QR(AHF6}A)}|8sxy zpg7Z=^9#?Ok#QQPJP!?{Z*;V}ccOB)^jn7?uUjg2<3#~j(b3bpeJCiWPt+1rXvVUd zfHfq|dn6(wZze|qrhw|WSu_m1@3#)Tb<6Le-nm6>8FUZuj(L|OZ|>d8T(7{Xy$;{S z{qi$*OKjzt=S!%Mc06_QVq9V(&kNWm59DP$dsc%OY-wR(!EfF)Y@4Z^$*ogdTKXt2 zkKNK`Zagv1J-P1&z5mHGXZ)&Bnn7Blc@v=q`VDmZYoVp}uXge=3gx@8vA`$0uBox* z%*=-c*^JM-0BfNlN9COX6(5ZHVfQ}I&rMB}imUVWAVW;e&@ut4p)G0zUU?M3I^v;B z&#ml~>P=z5ndC98MQwI2*fEGp@xHcL^wPQQ;RYS*D-yYVCKdQFsxy_w*OkHH7s_5r z2tmqjevl4@oa z)rE~e5M`Uejq4PjmiGn*HMzdZL02AidwD-a9{ zns?;>F|^-$YXEUV#(f303tSNHIc$Obtawj-j4I4!VC(`KEQ6whqJa(Wwbw>ji90&Ad%i&{VHHd;TJFE%`iDJ!Sl9vUJ9;X6gR+q z|1>-t(a?}}U6{u7M==HVW^#RP;_+UK)-ZBSv4@v|h&VmFvN*P}Y-{kTWA`5v7P=mh z@iMN}`1Fa+@z?3dm?uje;m>z_osA2j5gQPHcU*cv-2C%1F1NW$xK~_ z^B$uc`{m`K-gaSH#J_+4j?e(OQ(jhv2-4liq+Q(HJdJ|AG@m2p3_Pjp zys-k}(>^NL zAtuIj)lI`m#MIoT;q&81=1i;s9ZpXRspseB*dYpHp#Vz4nF`>EUWI?PD}4UXc7^5r z%sj6gCN3wt3MDfKt4_gCcqqEARt#z$N@=(h*?aeZS|DPsqK$jk&YkD;ouoo5woTtjrfb|;38&@lm>8K; zz3lAt)QW4qH8fa(AfnR@p6dykN#k1e`t%RAwa5Y@f`X>z<_9tbE`cl~Hy%_`f%J9umGT|s#e^hRZ9B-l z7nuKW;X{n$Vhjn_9MBXulZ*`v)YR4O0P^SVX6+TMmKlE*0|ApPT`!#9Lm=>*gssaA zK7POnU+B0mnI>F3u79`|XXbvQOrISgQ3VWIbdQO9vk|#b>hLD6J`W3nX&!1B?ym$I za@V64m3-xzwsO-gTeq%nqZ&G$U>y<=5CDtA@Zc#mNp#47_+hHRSw~=9MyNc7^3C+n z@yflb$>8~XdTCYZsmFdiy7BB?;bU}XTA`coShd@UO6Nh zK|^5G27D}p+I5S@DB^Q*SnNJaPPYRRgj>H>c64F&0|h|r4&Zf|r#05!{ioxxMB*|* z(DVL%PJZ^JyXevS#N!d3I9s?DYYoAv*l6jN6zXpqAYwz0Kn)LM;J0O&atyWsu|0cA z+%KC-Uie@2MDFSk5P9@hoZIu`A2w?ZAD)$-xBn=0CO$AiKm~)!o0cLQyOqYA>Sdrg z>~o&6&@Shr=@UwXobnN(u&?`Oj_^tp;lpiof}>vqCVX_wOAWE41t^K#4amqa{~gVpQt}xzjlE z>1=$-@BTo&0TJ{hqmIvb^IdN4dM|Fv$Fw4UYfKT07q9xy#+03@u;rphM)7V&$bKvX zI7+g=Md#`_*$HmofI-vx*UB^4SEtCf6Ng^9rKJ1!b>~mELIA$EN*=nafg`b;Xx=%kKd14GvLz$YWc^kY-}*wbX&vPCIYFm zytEYbPrYSK6E`rF4kr@-_U&lI4*LNFn%&@BmjN9Y7xMG>@0AlkV{Cffq=vbHqx3P0Acp5 z0!$;udMbXO#o95c=giYQcyK#E`B2F#P+{a=Nvg@TRqjzkXYxdJ`{LrFrVo$XgWq)q z%-<{NJU?19O6u!34%p;9`fthQ?*eA>=qz*{!gTv9vyT9Ns&-5d>|w}sy|5^cT1e`F z;|0gxMCRT`8YNPA;WP-TNPC+szgO#s#n{2>SfuOv3-xZ-s1ZS>grX{s2c4#pv0%zc zNxk)ot1in6cGT3=c^sXTXs-G%0dHK@g(WD@pBF03fg?IP96UY=ty~+%^EF*Qqq!25 zjFsYzi2*7PG0HF-d~ItB&xJJ%uni4cMn=hng^C6KuYm}_yC>v~njjiofhqDJG2Fm9 z>7tFz6a+2?Qd8FVH4m84KIzd&E+QTvqJ8=F*|R4(svAbWe|JIc-GHQ@_%AO2Qaa34 zs1-h;r}ilHMDx7Z!u)Rm_AUJV9eIvmh^PGboVtKAXF8sEy+O&py{ci)-gQrj9?%m73 zTy_h6Ra6udhwsUvyZNeZjo<>z4Y?L=5=g_hZ!;n;qJDoE%G$^SLRjLl`l^tfphLjr zr_{vNZv~o2NO)HW349x>xN;8eEa>{3t|&Wpy4pkdIi=QOiSj8x zW2ehhE#A{%1|Lt)Vkj^Qb6x9}tc3`EJe4y1(50v-DUWlMJ!msDlpKY-rLi_(o4t-G--bPfMP+$m;iMct(fPh3zK>_Va z6J0+eLj)}f>yT9g3k&(!OgbNio{52_2{o=!=$$`0@^iDZTWe~BB_)~ar?_kxWoRA= zdoV)01`z%7@=^)FU;*?I;AQmLEP`#o&k0@^xGLfDScT~O9u=5n)Vj&eI{PtBw?uRk z>g8DXqvrYJ=g$|AHSK~3)AYFf9$@eT{`BN$tg2C2oSjX+eC^r`2e+CnVHN%+Xt6r{--eKEr~4RE)yv0<6O1UE7;a071w(-Qf$tE&q)qruPU z>*v>Vi9b(ZXWib)>+~@k=vCuW3n?ux|J>Z%`sIt;L>UW+a8)+De$er=XJ=8Jnw%UN z9^ScY7c7m;oTuQ2to`j~6)=Z^41(@fHnz-j!f@VNSkx?R0H;}e9tf;9K-zsQU0h=EnEC(=%|z@dzA)~ySN>t}w_=;X`|Al*CxMZU3$z^bAj>$p`Zi-wdM z^P>jq8)Nn~+wLcwKlh+4(Er8!|HhSNa`kF3!{qcd+UV}Iy#Jf$-TNW}BP_Lpm;ppD z;)V?eh?4e!h!1~o^i4#(gWd4~-sT?q6@8ogH1fW;7s z6l8QRTqbk$u-1u22x;^KKiLmHE1(x4%1^#q6R3RNgdP4P#d~0oyr6M;|-u6j_JmUOvV!V}w zz(<*Eqb?;Cp0XoqO%O3EYA7WEy*nNmYd7+P`GYjA!jY|Neg6aO$Q2b4A723Y!;KBk z5E6>uL~D+h4h@^ycmp$Quwbpst5*%5pP!-<%^J$L~HFJxOKqR$K#DmZdb)DzNy zx8}b~kYe{KQKxou+R&*wtl7&yv2G3PO??h@0nc&89P=e#=%E1SE9*mUA@wmvcPCBb z-liYDT-!Mp*XoygUjMzx&;PkS=`VZy^r3MQU=wkTmdXGQ5)_G4-18$S2@QI`?^;`1 zqy?MAfEVWE$n4rR0s-`t8buM2io7vUWmI%D>M3=XGaxbC5k3zM=O(p`sU(}s7lgwM zqiSaImJ1RPyyawNt;huUkJG}3;UD|%5EFsWVcR(l{~MYOB918()BUqfQgxKmqxjFI z`-g^D85!S`O9c*x&~8$hO!{YYtl!(g-vyA~7INeGKU$rD>4Eovma*(tVdd&dLYMP@ za#U|`?Nwt&1IVkiF%DZDIMr)*BA- zB_BWTfk5)^9xeotAKR&5{LoMW!o%kSoU$?z>JI-hK-oTS?yja)%dxto*t{l1k4^%K zn_I<)m06kDOep2@ryI|*PmOwc-J%bC^@%Tt-MpW$X+zDLEy_&g$!gD>LP*ZfY+k*w zeVk1iRSmS;+IZ*s8XrMMvGvU1I%~(qLgi{jkF3osSTni2BtB?u6FpcfsNmWWmp53y znFJ*t$$y~k-o?|W`@6ft!@`P2DA&HcW^eGsFC)i`>(+VC%-rY?rSW}V zROImnA)tG35ZUnuB;kmN5;5BR1f+L$#Szuc?UNObb~D=9MTg_c`T1YwTXOO5*s+;} zhQpIO)J^MJNWsTtjR2-J2@$gL6Gf@Wu zfN(Hb0cT)8PdfNJItMEIC&5$4$E{?c3{=qgdOhAbz0Pu61ErA%JH|J%OLIq8+i}nr zJz$1s^y0-ul(fJmM1bE~x(T$x%T+SqK;D4l@-A~)iCXwujF-0um92-O&$V+VL8P#( zXiLy?Ia#6e3Hw#~lCb~EqhFl6P0>T52VlkXC^7L8lEXWCYJDx(Iym8&$j!|KmIuSO z#ifgy(&PDLWaeRhjNR|NH@f;Bl#9rnC*kQF(ge0b7m!S7MPP97esqKK@B`gq&SO2m z6AN7sR7W=0)l`dFMle#A@Q!)w)}7JS$Za4b?f{Xavh05b2Wka+?r})!VPB;)PYq#L zDTR}(qT=Zd33rz%ZqsC8Ypqw!iNENO3S5))?C4pwt{kMNAqxTz!fccZj|*9ANq<5^ zBa=1#5Z8r3b|wwTCrbE{d*g+^2U;VLioD|2E%;stH~5x)9buEKz|TBr#z!h;RwzQ> zjByx+msD4e=8hG>JH7a|bLGs56V~t<<6SZ0?g{!s1MG}9`MJ40>IZFdzQL$~-ly1? zx5ZPhc~ba3JV+mV6}$Vu9l<4Sr4OSKC@WSK3;PMymB;N1h`#)o-%F0hwE zF+rNGs8AD#XcR~Pf7=7{o@?060rgHCTRAy9nwlPJPcL;g0y1RK8Z?Z-WR;7g;R#(S{a=U==vExT-Dq4n471+*C z_9G;H`EtSC-F;z5+ExG3rS7gSG3!2c9r9*;-j!OlGH_rb1A(}TTlZBK6%`>xnufH! zvl9xfSVUD0aTr#E!@nC82AEL|ySK+A1eWvUWFw?P7(Yz-U}#-wGf6;aAq|BWC_0Ct zoA!JY$_eQ8bClOTe7FWC181igOrer;ToLs&a=|}b9ep$Cn!+7QRs^w0-C{sSfB5Bb zebA2(AlkaS;w9g{#g}xCJLDlB*QshGpI~8O`2v472IPu30|{GuyepK#Rtw{M`VuDg zqTYp_aiE>tKZ@Lro5Q|>d_MBdGly-I^!2+SaKn!+jfX^m71qtVJB&n%%Neb;wZRN0 z(5z~1{`I5&yBjGP6M^5fCwmTx4irq)$zc&zamArF-_wKLi^#T0SqnraSPIZbJH0Cv z`|RLxI?CiNJLJ)O*-=Z0oubU}E+K7#={XJFvqyFy_ZkCz+Jsxv3sJ zXhv^(?b?7f`cTgbGp{a>xu@KN0~gs8T51{}>`BNED6bHCV69trJCXS+*{IX9Fg$Lb zvpCrhmnNeIG!0nGJkrY87q7@l*GP1Hq@k6~{>GsW{S9@r); zT>TZK3KT}LZqR8N%K(Gu9ypQx{HQ(|Jc7~>W9+)+7Flj??(N%?Em=~oF^0aiEMA-G za2=zG&Zaa)yvd(m--dQrp1@{S-B=F`wa5gB1v9dPcTw9P6Ie^T4tNG8>$Lq)z-6e5 zRu!h&8XJp8-qhdUq^NlL>XD=OF57h`4)q+o9i}u;w|&l6Dh%5qVwiAXSBsAybD-*C z8e@?eDk&))8zgTW^jlfI|7&7mcvzeDm7zq861UcmO*FnRQM|iFtslmkW&#pH&^Lv@ z923>z5Ayz>e_>USp&s0bNPrrO@Xno$b}IP9_^RKrI^`9Io~P%8ap}yFXiF?Hk2<=i z@!o9c_qlwz$Fgu)m56Ouu-zhgD-JO+Q!}&k=zqs-!fS!9hF)h5Y$cWF^y>;|=sv8; z>1kVf|D?U);(#|IS#WD6uAG##KIE6Xh|o&nDrJOqd>ifCuH z=IB=;1tcWs!3d8YIgMmYNZ#;(knj(NfP;udSQsasyh6k1_U#AfN4Sd{{b~u=dWfBa zW8P)OB*C?Opa8oJ451yv&qzwD=9O7cx}~DXlRS1j7`Em>$^PTfn<^w~G?<_|*??7@ zk)OZ+>esJdp^7x#Ff-f9qjL3OY|nCeje!$H=R`Byp{?t;Z1ip{yO@XKZV2g~$VE z@5h_yVgZ+ckcKReU3}m%_X$IaaCCA)*9A_`C1b5}Rn+eix-UANMt9>WbQQ&ssr@`J zMcLRM;bsUZyZi;E8B~i-&%hvX_YK#6r$=_!L7@wVe1675=mLV+o^;~O)`z-|gXBsJ zxdF;`@y$8m7tfwO%7U@Mvi;rZbLRx3G_cs+4|^i2b6STDpJ zSb|+%gPa~^Sbu&RguUL z8QMfj?Ak~&)T&e#Ng+*|D8;6f4oZfULc?*4nF>XNQZ(5zi`s@VC2Eljv6Uv$RvEJ6 z{rqsQ%RYNw??3PLp7l?4(Q2*r`#tw_-{0w>9emsPc$x(t%3W)Mo?ye*0%M0O5h#R* ziAanUFP(207E;JDZqu?d-UB9dR>ydJJre*RwAQxx7|!T*W>2{$1UYzl#q8K2`N$N{ zEP%Ddh+u(>e^ieeGG%i~-2T0LVY*fsqdv~l$8EGiPE9HMd;nIL%=3LxG^3|t{r3QM zz@ESGrbWDO2%;0Tm1<8L2>YE_ zIQ70v%Ye*xMh-@N%FNR|q*r72?)}Q6wDwW2qJL?*SSEEO28+4##xBz-lP9Nbsmqw4 ziT!}_b`64cVBC!C>{Ge9n&IHxz_v8IN4KIN60FTYWIi>#9EyNSqg?djjU8XF9NJ*W@MH83-QWiNJz@X_>0{<|E>5$E-PmZvVxLtGb(Cd~gX3{fwFh zm>sbsB*!O|K{7Hj*Of0^y2e`-RG6hMEt`IZh9ag|qOj~s%N)$@Kn^f1b85rV@+q%X zGo6q9`s9fT13386uyEm{0XapW^0Ug64{pOCLTI&EF_}k>ylHA8oOp2f2zEZ&9fo5n z71!E+_8+uh8qu{|^q){>S0jQ(=?v_EU#n$X=pP%ZZ>W0HeQu#;#}bH>*^jc#nH26Arij6 zOFQpj2tqiYl^GsWK~hN9Jz=5Mo8Ygyp9Y0Zlnv}2_GvVFEa*!&;zM;;)!nIaWZN){ z60jSQXuyAd$xq0CwzRB2*Xrirni4V=G3{?w87+J+$nTgskBn+vR$c6F2os9Fn(2A} z{)bQ*4`STd##GFT6Gy2;F7orsTiu*`>eRb9aR3ZS%1gC>z9L?tf8V}HnjDGf+`oT~ zpe!pVhbB^~N;T**Eg*EThQ>TF`D>xUmtyN@Y=LHj(0~V3l0ct2 zCumgLI0lVO?IfO>MxJ7DZV<_&ILtC^w7671L?-IbA-fBO!^)F_7tv@<&YC}O6K-Bn z&WEkz_wC#{B<2Q{7@gm_WnjqDr=0_W2=Ky2^G(Q4dxl-MdK$&}i}dJUSANsku@P0& z6QV*gGq-rEL`d%3@Rg@>%88>ckmo6kPe0E5gtVR(&H(#*R$<|lE2sgm%iM=EB-*vI z@}Lrha}SP?5E6#~tO*Dl8cx&;aVh4_0mE_BG=c`P?0-gGhA9FEtoGdNH*fadIGH#a z2;==GAwga;-wKHFpi$$;zXce|yXa3Wva;ZvAR7>IcvjAt zx&=<}_gv~;ztBTeqDT^1LX1kJr;6a*K}1a7I3fOFyeEARJXeoF#$amGtgTH}HF;!f zylPxAp?_!5ga}yqw#!^#J-s(vyOu&WJ;Jfr+DOL2M6h@I6b1IWI9O8V6Z9p~LoEJj zB~JWvqjhxTT6$iT$>?W++_>(%#3^<1gEfFT0)#UH#4(O8h7WE1Hv1c$m|7N@r>A>M zQ6{W$5^ptxfJ`BS3H0Kw8d47iF@^?*pIV!mlr~Nd-%e^VLILFLH8nM4Sj`A*V`WhN z04)8EInQx%Nk1usl~OC|7-ktQ(q8}VPwjBkjPKSkB1cE3gXk>IC|yz8$gyL0Dec(3 zJEg%ava7UGosz?HyQ^ASUhX}A{w3Ybgd$_uV<|WsE{)u!r}zCLON<3ZV}sgX)M5J$ws2v9r;zyPOGbFwEPuMHoPBHjq4&}$u>5ufJ9jb4E3A30y*}>6~GX#vmT>X|YlMi>w!bDHIc_=kC zX!YtlYw4%y9(7hY3`joo!^V4_@g477i4f%v|DmTuCDP^ms$*G0WJ*#Ftj+7N-PGha z#H&@+)q;Mo0_`3xBjEv_OO~i9D+}RP%91_w5QL?G4)*A=joOp0Ba|aL!WoDmJY$)z zPK-49^!_;&39E;IIK_#Z!7Fo3hYedu+rV7j^^*5v;U=7TYie%yZ?}ef=gPHmO`pGx zw8;%x9z}m`Dt@hH$)DXS8-#dpkN1~;5K?J9FHfT6zja;GiK2;#0$v%UATBhk%lP(Fo4mL%tTw4=VrxnniK5Q2cYXhg zQbx>paNdkR4_Pgj)S%I6+?;6x|60KYEAH3pdg)gk-b=qCaa-l^O{xx+GXs|z#L*BV z4`z~`xo>P8y<6^QXb-qNHaMCEjMjL zIh}cH^wkeBC!3f&K`uanG%z@gk8k9WzkxKbw-O-PQC4PKp<=ggv}n@)o6ntFvuxRD zb)F7@7|U5t2~6nI#>OY+an}tkyk1*Eu~8FN8$XF1J^yZLsck>vlhypUe!3s8(MkHw zt`J3xVwWz=rS0wQ40nra2tNcxz;fQ)+>AGJim!+Lty4Q%0<^N8J6Oeh)SRG6~Ruq#Wz7%&Lb zX6^+%AL*K#)^N13P0HFrhemJ|IH@28$_p)&5hdJLsdWMmMWFLI^fMsklhTp@w30>2 zJf?zF95BKpKP+G{2m<73ZTq#_mR|AU7eL^S*kkA9<1u@P#j%e<2OnRnzZBf+Hh`O4 zH#@uEo<2<&7Ynye2*D0d;l*N;A*eaVGnRgu4mYr8&G1TPpfm3G3QoPaaxhrM#xC9A z)snL|T4jMYqO(zz=i6W6IDBne{O;<2B{*8%c`Hgo=bm_raSe6fZSI3BSB9d3@%x#a z#8apAw-qMKaBt~2ju|_4v9GWFD}Crr>MjpmU7PqUOP!cP+8`>?nFL8zw9ezw@spBh~I@+GNkkIdt;gJ+V7F>9qou}phXdb*`==r;eY#eHQ| z)-GL=Vj9@28Fggc`>d_s5inhE&F+CS1y|YjshapoK;5Uu93B-RNvv?|MI7Aw-{(h2 zCfcXyGh38?HG1SyNblf92I2aHPmtwG_hcbm4?M098DU`AC8UKg^s1_=(`U}Kj%`kO5DDpum<#!sypANS!2HyLJ_PR^DKytJV%ku^67ce>Y zS>_I)*6aqU`voDhLhMtfWpeN$^3q68CIdhiu=gpORi4$=t^VzD=MzoV2Tg>OZ8{~o zDMSVYTG*WNaCPn9o_~X)P?y&$vj8wrNwO9SIMTB=RQ9JH>zDWCzTQb0qsQk20#NN0 zFt!4~qT01Y@%qDboOcI<-*lc}A-$5f8zlKvc4+(2H~RS~5i?4gWSk=^&$Lfz{qkl( zg8Fp1f)Gc#wsnO2`B=|bfYS7ZgYpcdqpP|e2z?6mZwimUP&cB(BqzLHn5y24GPq?t zc1esvgyh8H4N7{z@NQ8(@_)jirFMO%>ez>;>ESHYLIfA}gZB&xf{0iE+84c8_hU}Z zU_-;R7)NPa*_-E_T>L|U{>F)+B%kBxwf}@{u8j~6j%Ru3bBUsdh4%tSwMYk~3#sMW zR$&D)VvEm3H*eBXy|O-;Xf>|698@Id57)Z|mk>_k+(AGNpwB2>8fc&!93ByozQ<5O zoyb&&0Wfw+Z~FzKIE4vTYkDe@S03WlNq0IZA+tbQ{N37N`&K(RIhn40bNSk}^vd}I zG?%+Oz}@pG^XsZR;*MRR;ABm9(ee))B#BQB#nkr8%Fay**298geA0>~zsOEr1vrA zz>Z)d1=`sY7dPE#_m#-+$9;g#@VBM18~v+joGBfiaT&XM@eCou{$( zJhhzc-R#AwVB|QMz%6(XMM`OJk$%6icAl9YR*-6x(!ICX?4Wv$NTT3!Y@Ru_()B;L zsjGi{7=AUKJ(K7bpS8!Q!qeN@Mq|~nN@2!oTs$|^x0j?>uU^391fP&%PMLx0SoHb( z{crAv92L>qK(~4`KGT68=Y||{GW^&W5O4qSqWg!XtEDku;mp&u%|mjFHNvNA_PXV? z@w&1dAS+;JZn1QZ{ezRoj}O<@PJ}<7M|N#nJsXI(7Y9PXlSI9RXcv7Ua=}PYJwReWBGc!{d{e?wKibpWk z5Ofy4B+KS2PnP^xW_j9i`+)}6WWwSmWy57~o3c1VL1(UyQMRJvJ`XU8`{I&rZkh+y zV?coT-R2t6U*>-FMofX>+nEcHE#p45)QARMv=-Yn?1Q->c}6%8V5j+%Da41ot22}- zPjL}G)%!S z)w5}ff}FO#{z~B3BNL#d$t=r-L=&x`uf;9F8VwhU5Ar!X&5q+nB8Jw7o90K`U^Pd^(Kkf-J+dE~L0XcRJg> zX(UWnJA8VrVFyuQ-fgiKeI)qb+RmVgZH)l-0yhK7T9TA4?i6(iL~HuRaDFG`$K6(p zEnzGEFQCL%Fhh42RFhj2t@pGdaacFiZgRPbH*O$xyvO`ae|YQGD^z1I3wO(iBGsx? z^LxFxE$_W)o%6{tK;5L`vCPp8aZW{^e|4Ar=j23P#YJK>{TH_n0+CL8NKD<^*47li z?om7cT%KOBiqLaH#f%#>1`TsocJ|>7G`d6pdZYSuxGs-aYv@qazKRjQ(oy1Kbe=t% z?~%G5YmjyyXjsLqi83B^3oWSD{W9162-F^;D8*T@dCL}b4j145rdUx)P!Fm^UMFZd z7(14T%uT*o87suD1W~J;#Z2)JG{GEvK%W;OK^Op=ax_?*gTIgia6VJYT>zv~BJ#?R z%ySwAd^*fZdAV~%=)bAK?k8Fo=(&KQQ=~Wp&*7&`e$~>l=f=ry*(<&i6M*qAePi)z zvaeriLW0MgB=dbSd$w;U)OOaFFg!boX>4p-;Id4ZD{HR?z{FY8m)!Y0Ha91ywzW%w zY3`>2L0hnra*iC8Svh?x>3}J(@IG|v)Tx4u)}W@RGJd86=?_*aDInlFFzXkgagX%$ z_A`4hUQe$+Xq@2=&sgZe>Ziq@_NnymkEQz7S|g)#JVylu@Z_meuNN;nv0JKh_;_Hh zyj;TMY0KT+-C1yE1EcC*jckInhD`-KK}Ol~kB%j3s$2J%E+SNn)9iwQtnqQF+F-gJr7sUz+4j>V22 zG$BY+Nx^%zR&NtBgA#3+21+L z$EQIfC~fx47+r@+#G)^mXv>$hp;N&lI`z1Ke|#7VwJobYk%=clL=1RH!}HV&Xg z1?xLrkA|vgQ636LOi*KLJJp!k4+@DMv8koSc-e0ql3y8zyCxrBvCVOsr6rl!_uFEs zL5QGx#*QDKT6ue-5y(G^(Yp9Tj08-J#eJP-yZB9Cc~7P!yjfM(`~Pz!2tC>svgrsc9K6qgKAV go;+VY3O>s`aUMY1KzG73pUV(f#l4JryzmdTPKG9v59$c(Lg znKDF8h%ts_iBOiNXn3#b`+J|`IiB};kK;YwKXgws_kG>h@>$OF{Cw_RIBzPtb>CJ9 zf<(>E8QVe--!JgT6y^utJPVYq2A3`V=a50*dhYMv*|**&AqY-2Gd^`GY-o;EQ#pPv zd68#jOL-kf(KH*BX+M(p65Ex!e~Y2;)@#%=m7{6&AL``ou(cVk>*x;(Ew zv-NvwzBx}yYPW~vr&!UpKXF4(^gc8l@N>0!`fNk>#x$vq()X>|wD@AldGru@Hx#q7 ziVG5hAho0X22eRHRtB<9F%pARObdi!G7t6&w07>8=DRu}ybM(b3Wh_DdjGfExIXiI z!y_&0vn}h)7A|wR2#S$@L;B{rKH)mDc4TfQa{c#I&;|o)ML+dgU4QoS^T5 zU%b0gOQ>xnSjk`8W(y}@PcV3j4^|BnR^Z{6c=82Rh_ zk8#tj=Q`-5WYi~}ABZY6v%&Po)tBymE1@_}C_8#>t}1%vIj2QJ^WUAS4)n_Lt!K_# zC{K9QnlY9ax8!ycz4pl)GqiHIdFABHK4O3VmhC2Wq_{(*d@aTA16R3X$hm8w_ z?B8LWi!bfL<`Qe*&t+wEi9Zn5!ZrhSvlP}!Eh`g=Z>U@w>W`&Vb~DbGq@$2j)_L!! zsH<4Q0w-dr!tj2^2M)Kv@4J9puYii@0k1uSxx{;g=gbE;T~jW;w?LRe;xQA&aQePv zIv%y#WQ^iVn7ZXoU7zz;5e&aNVHvEg8J<3Sx9|;yRaW*-svo2nDW+)aV!^tyHLkU> z`B%V5)1Z$JbKdssBqoyWmvh#8KdlDMeAM%`#V{|*yVkHFqLc)$XU+|(v^u)=iNB_o&j{J~ERB3zcopz?zM`GOh0|v!_U75Wk5Nb_8SGZ2 zch6EMN#Zmt)inL$VibF+@m1<}k8{ln^=Osi6?-|e zH!Xj5U|38Ky$ss`n1yn>!j99%Hka_IdYRF+==yWa_fEOGzV@j0R5un0zI46#^kVt5%v6QW9jojA8qEGy?2x@j1rTJLc(Ys2kpcK9|iq{ z)62?+e6*>ocO*D1;I*38fK?6f7qhf0+xr4wbdq-N{ogE>Z~dUpXWe6opW7!UO6riV z0*S60s{^h$?#dq5$X7drAejMG+;6&H3-@Pe%NolMx5f-@{@*U~{~Kd+4SQ(;ks;CU zImF4VQQZ_OW3y$^O@>e%Za?JDdK~NG?QGXKs4O`7v4&D7Ao=?86IRTF7bL*(W<*zGoXsJBAIrT8Q9W@(OiOvt~ZjKIE!h1i%6?vHcdo}oUq zhht4%Mp%1yXFq_{I(jB$TJUKOzf1 z^A=y>5*ZM?ZhtcR&!?X82m&|*e-nllmXO~UFDySpY3_SVaS)M-S(i!Lwv0!usGyDg z4zR6$_Efe^*Y=!TTcoQ}RrQpmTD>h<2^kuRh1_VI0on4OfX51Es}Aem6Ab@+ZxhqO z{%GG6-m~;HV={7;=mn>1C`ZsqImCv>^&BzTlUHQ4#URfQTHQ;C#KJ-)kH%VA*BS(6BTupI`!f_;c_ssK#waIV^6D+~IqNh@zwM3m7)Ja0XwlAIiU3%2_tgK)x z2qsY#7zq=WXEvPPb@qt7ahgI`KVM@){}3li{+}OVj}JKnSuY8#(znv#beH7uDrcb> zorks^0Y1q7D|>&RxO`=1Go*+L+*~=^kKu~gxQI{lAu`L#La5GZ3MMvP2KY7kUV*R! zSi)hmK>If@!*xGh-qYXJm^Y`}}#CY1+WzJGmjul0U#>%wTJ}c|=p+stf ztYrP_3!0aqoILb5ZeyiS6$pJ-01j|wS10N~uYhBV=R1&h!Sh!awXI2FKX-zsR}F$j z&Vosl6ZAq?y_U4ET`$n##_HtW$ASR0vgE{fRgZx1JJ=z(s%4dFo6z3pgv zWbyM0R$84nV1>kUJN`^IsxZmiUU4H$(VuUTZt^_u9D(suF`?hkJrLRrugA zZ0@^fi=Ay_y(>SH3*Rg?vV1)ie?irj))9n{#WoX}o_mkcNzbYUtNp*A_1j`kCKjrR zbeorppElo1Q?D0mO?z1XReJj}60et1%be5B?e?f0oC|UCCb#oDYAk9;wdsY^Nr{DT zNaZS3Pwls~zUJL;=b{W^TM`Qe$;9G$A+Utnk%muP}1TU`u#F+aFMMo-BgpvT@h@!??P*yhSvdXm<0fojV~&X?657gd$b zkQzz2NeKwvi6ra=&-E-RCH`D%LLrg(KFl2Dn92|&`OGV)A)(s1tyEfhV$5IsbOuWK z_IE^;(pHaU2!9XEVQg=c_-n00A_BPp?D^IMg4-%9sFjDc~k~dWweUU!q zylokU%+WAsb9$na?7=pj^R_Bz2|kKRM`dS|>-V^POM;-K1DK`4F<8^R6=K}TNBbki zlQP;+W3v9Lg?j|+3%0Uu#J9eA!LRq_oh3|yQejYZ+{bS3_{(yFr~DBznYJGK3%cj=DB!)@jAtfI z20WIDJ*OP3m5a3;Zp1=YW3%43Ob#WFaJXc&YJK~@7e-LEk_T0cw|*A+Q-jbJsHit@ z!ldYY7Jtk{(YLkZV1(T6$<750hETPVlXs_zYw*$D+;=G3P7?f$o9uGj-KS*qpg)4x+yRk=?q!{%{yM8N&GrgzZlr=ytm z&-_tR@lLahuOG=3vy|qA+$_RWL&jpTe%|@R%7;v^@adkJnLG~ChZV!v=K9Gv6p~n{ z?e`JbMjt=V^3|*MfmhCv;_V5yW+}Gjwezc6{5087oc)-()^xRq z6;K8*_EXp!wv2N zjve*8cS8WWQXfZzSI*`b4gBu*i(cY#*z7Ou2?E?f4q;Z(5#OhEfAAUj2ZbCkByvCR zX&DvfAH^bqN6renA^VYUR)6>4qMz@PwZo(nOVLcCK~xSg9baQ=bNz_&9dTmvhi`ov z19kmQv-1ZaVfhT($eS(KF7@3v%gI%>x}8@kahR^rv-DbR*hkwh?wu1{QRBwXCG#gR2CqVO=My zq$?@Pi3dd5=0a4W5yyskc;H{NEBjU{wS75d9JW27tjzLI@+`%2iVwb(D^@Apm+B%s zh9#7`gfCySgJyx*P;8QFh`*B;)__?F4ckLWuVKrHV@9&Hn$jXa-m==puAbiDMY@f) z_)--Roe+8FSyo!2dnxm2keceyp6&Yx?@y!z;h#NuWe6c2jO~rWqna1MZrWaT-pH;r zMU<*TONHb`%9xQWzSwrAyupev<*_Go3Ttu0Z_B8cjkLzJ`jCV`tG802?2DIeulPnQ zlo}cU^&B0ukqO)nGPL_aQ^UL9|26N6!g@a$`Hg6H>rL<`dm1bN3~QH(W==Nt&xOpc zt%p!6%5Kg-6litbFRX`r0Z=h2GtgPj7Y9I;jUxY9F-Xp9TgXz2ALB~^1i;g|NJTb)@{=`wGYoEg)fzXbZ6c~ zld7Z)E^q>1LZ|%gz0SCZw0_ey_D>!&$|rg;v>w&ze3|F#O1j>5?r%!xg?d%F-c+r} zMYtd5&c5>!tQPbcfsKRY;FG)QW@J!5fglaXr zC8uQC1zzGQZ%O4$O-%eh2H-xon@`7J2Fm-OBopj}RDPJQE(GV(TU7@jQfBuA?x5(v z`_QKuPTo211zO!3w2KxJ(J%U&7ZyTJusQWiv{Za~Eab?41fso^oTjFlc;(!zNTsAj5a>!F`WX^T*f z83bnV!3bpE7iC9!mOkswADhIUpF0vWxa00wianr}_iWA0z0y`riD%t)#UDE14mPJh za~vc>z~NJ=SMEepnUk_HlZm!YcZ>WbqS4w1jy)=Mv z9w=dyDkXj;xj#ZbI7$z69w3!h?mffMn*40+4pm1kE6Mozq>PZ@JV=up&ZofRcvhAU z<`Y=o55_hU;Ig>FGJ&j<+CTk}te27&JcUPj_+>1t5vH=WZ15<;)F9aAkkB2iL4}Qr zRviR2jJ5NAE+Bq)7ohLR^BhCZF`Y@Me!?5%* zqXpe}WBz~(!h@)l^kA9RM&V`NhIhl))5dj)&aZ}Xo1mUML!I@&^b*?SQ^w_lyY|&* ze0coR6KRjcd*$q$Ou$6$!SfeUm-(DbryR`z}p5=EOnM4f~>$ox!jYTtYH_? znejhUg;KtdzqP^y+x_F%C|A{>=U}J6%flYa3tD9zs0X^14C%MV&S7$a0Zk z?wi_8dt0Nf{OoPd1*loe>TeYJ7S1FGi2;tDoy@Pf$^p10LyIr#p=~1ORp`Dtx2@3R zfntT;7RED>FiO9Ad&mGM;^;!0zi5~7Y|*^^=m1y*VUHl+kNvHA0f=u_ z$xg|lZN20^yjgVbMlJ3vTJ~#=TdZ4i7uqEG1 zv09~bt=N_^qpCWf=LyF}6X8}D-w6q+DGz0{I{i~l3ddDOph{XCBq5^FtNv+TkT;&<_ z(U=mWrCZGKGX4n;+>XYCF4LXA1Y|ernsrJTyr)4GS0^TMkYI85&nCXC_`dV!9s5AvU z3S(N(WpEa{_~gqZ880<$g(u?fW@eCDbjPuT{v5bWwYhmI&>*z^bi=;*>aFUg6e-QL z6z2{`alGCkUJ{5KlevB$wC0+D#*x++ChG*K@;?oPY+O~FJ zP^HAs=6AGI*)?or&yw(RYf;#1Sd;BdN-<4G_KR+Qbb1_^0o2y;3mX#Gyw-vN?#VN^hRRxFyc$ z&nKbr)xhoqG1*mQG~}p33wU?BUv}dc?eeD8_M;tSgVT3GZDPpiUtO`TA4^D2;OkG+ zPs){+p0*+zd$Y8<;TDIGcr3w_M>z;n>X(IL9)etNX9sfc;Bp9cB??Dn+1p_fUV&3^ z<$Fi!>RP_H*h;B6`jh+@695-PdYI$Rmt3@w@Uh$!W2z3D2Fk)w$N$nQj0MylR<`Zt z8Sse|_nXY;Wg2&mnU@|e58MbJ#vW?7hKOfwH#FE_mQM@QNvjh}R*VZ)Vpq3n9j7)} zUr7dM!;5~>H&qUw2GyP7f}%lVo&?J)5^j6_nJrOyv?DO=U`)gTQ^SYev4q_Yz=2bu z4-D`}@q)V;^xcI=H-t@=FM7=fuD~*>t-x4=N7Yi^G5|zciB)BHy=g-%JFj;6M_3?LO5cQwl zfJUF(FQb?-K9c9aYC)>#I*)=b%9$G8;qi@9+Zlh|EY)tW8n2vpfLp16Ic{w`Y?+C| zB4nu4zY-N0y~jkIGs;&kWU|cIOZbnt`%;ge9to@I@;?O9zxBt zJ(4m$-}!fjUDJmHk7CX^i^fD0f>W*BwCdYl2e&BBc>AuzYeqN43%wbtKfUet*W?+O z!3Ddoy5|W~K%elxtaThH&-0mpHC~Rt|F80F`dbu2+y*LckNr6~{qq^gm|XW;?~H-> zN|?Awh2)n#%?N-o<~O&Bs)s)Q=wAR<6!4hkJJ5%`S)qp!Y!!W2kpB_nI#PL|5(z#_ zaj>1;3W;6+_|8%OHVR3Y0>PsYVW$K6CJA!EY5a{He$iz-&9`xv-l`eMt%#l?rJ?^u zqCeX6zm!)#RPlnS$=hxue$%O|A%`Of4icMG4nw|ojSNd|^um`)fnUv^vawI(KUrR&vAMBR94IcFEJ62`+f2zLquY;p+{!i6cK6mq| zeTJ>&)Zya~DC+le*59fUrmXf)&`HC-^|{?0Sgl^SO{Ia8DD@}cnsK2Tbj-BGK5C+o>esF0#X*`BOM+pnZGgbOa2qR4gNU zEWa?cCR~MEBOZ4jbXh`@=lz znP$qf6kjH}(tG_56sb`x0jBHq@tTi>31HmHbq`#Sr5PZ& zw6GoQCe}`l$+R9WYVXbyg?AA8F6yU%>J}dLxLb6TaigL;`!s0NxOYXRDzbvGNIG>A zO1@;5Ij-9^z3_D?nGkLc>Cl4L*DE)L&nWW^;{kIqD`=_pE|s>`f_$IzjP_Z5gC@m+ z|7AW2{#Jl33pOtgKuM&%xF8t#D=6a)o7veJ|3>mY-Lft7+J|@Z1XVzPF*`dff%ee0 z7UYj7FU)btqb$&KAtK;BZM>5VR}4z9WKLzU0VKu!R(V5&V? zruD@Q2fY&@`+GgC&*rI;FNBwCfzp@tAj4MKWD^&VO-S*dlck5i3$nzqxqq))rLXOY z0|$M?=dLra?pXSu9w{8s!JqZ_2T;f~tCkPZ<2`w5#N*#e$fWzdDPAhg_QiyWB4566VQ9Y zd*GfRmmhTS3?~nYTNJqN124%{$4b*llQP25V2-06Wo6g)hQ#u2J>z|}`1+xLKet&< z4T@8ZKr-j)&qzGH?bt3LJVomBS|IG~yee*iE{YrTJH|Ev7TcKJPk~$fr7pHd%+khx zI7)27=Ay2h6&n==M3yIV6e=BfX($NZ?q=HwDzg&ZWBvuni?Lv>jh#<#fSWMsNW6`~ z@4H|kE*J19h8FRfhHxCEa&TewCHQVVHRFTj*irh{xX~~~TAV8%XhV9EQC3z4w@8mu zO^lQ1&M8;x-59`e9XKi-7tEE5VKldS?XJG20z6Ph+PGV1T?#3iMse88+S^E>#&3d+jVM9|F2vLnKAjIV&LeLc72BXiJH6_j*B>AFA!=u?|K*qYRJ zwjT&TTM75edn%&@J>EXYnSlPGl_cwR0Qo1IOCf)08;K^v+b1n&JQ_i}K$n3a^zyzd zcgA4>_mFmumG#=C0>dewhJAfr)tnR22vy6assrRWK!Vqfofdwt)xGs+8PpnuI9sp> z^rK`b_2 z;xe_iPCN`MyLr@5GjGscwCd3LZ$k8-vVNXWZ3^LT86>kdG^`lw8#;_SM}Jy$_%6_b z6ur~cdywh8V2EuUW{LWO$}OF=J)!MuaG*0sQTna}5Ps>}JBOPrKouWW|Iu09K(C7> zz4U7k^b}o$SS?b5r_vNWd%mR9p{eYJJK`obFVKLJIu9JzIbybR0AocTnZL#)+el>3 zf)Rju2vuEnE6@>|SY8+%KIo(*|IgQ8ed-(52>|gX%9VuU)-PX`FgYcDrD6TjYC_F& zRRp1)z0gDG+D~oV0(1{jIT?MFJ~QtaT7$kUZyai1wzFqxb4&YHT=H7zRIvUQc`*Co zTTYMZCj&NzE|_@MKgT^9a){Po=CAvo%zb!YxWOIGlr(wYqRA?mS-(`i=7yl2TuiA@ zGiBHPv!h8-FG%d>6U)^e^4u|jH!SHQ+@ss#0Mw5(tz)EEqzh8a5K!^CFb zR+Co_P>YoGXQ%tPYA!CaK{R`*X?5E)1t8V&3PEzkFlw1VW1e1rXV+!WSc5{kNxd_8 zhO#kl5BRngEiS0T{@wE0h>c64j!Z3PXKU}Ae0qTvKsiHw8R7oes)*wC)q7w}H|6WK z1E4`bg|1PY@%8+h{ksh9SxUt-lw*mfuS62&qoq`k7|MI3(ilqX&2<@|qgrMdB#}3N>+~#GJhgT zZz7G=5`Hv?7`fZou@XesoNm4|lNeCOO$DXV=7+PCgG-3kZIiz3BEzjH&Jr07M0dwv zG0HltgrN)^1-oZ5Rl)3o;m8x}G0=3;1FMlX0rQ$m73FrDEFA#lRM=f72@_snii zo~14r`%9;4woV$$x1>&6=yI+YD4?_l_;_$^B=VZrQkAnuiYqU1@*mo!;57W>+g`=) z%}V7ru}O}MhS5L)J_j~h0dysi7yVS$d>A4Hw>aj1wOcZOazj8Dv&4*Mzt{}=nJt4& z9D~pJq0uPcU`Wmk?dFM+^F;Zg0^Nd9*X6EZqn<*g}?4Rpb{keSJO positionAlloc = + CreateObject(); + positionAlloc->Add(Vector(0.0, 0.0, 0.0)); + positionAlloc->Add(Vector(0.0, distance, 0.0)); + mobility.SetPositionAllocator(positionAlloc); + mobility.Install(nodes); + +* Installing a traffic generator and a traffic sink. The stock ``Applications`` could be used, but the example includes custom objects in ``src/test/test02-apps.(cc|h)``. These have a simple behavior, generating a given number of packets spaced at a given interval. As there is only one of each they are installed manually; for a larger set the ``ns3::ApplicationHelper`` class could be used. The commented-out ``Config::Set`` line changes the destination of the packets, set to broadcast by default in this example. Note that in general WiFi may have different performance for broadcast and unicast frames due to different rate control and MAC retransmission policies. + + :: + + Ptr appSource = NodeList::GetNode(0); + Ptr sender = CreateObject(); + appSource->AddApplication(sender); + sender->Start(Seconds(1)); + + Ptr appSink = NodeList::GetNode(1); + Ptr receiver = CreateObject(); + appSink->AddApplication(receiver); + receiver->Start(Seconds(0)); + + // Config::Set("/NodeList/*/ApplicationList/*/$Sender/Destination", + // Ipv4AddressValue("192.168.0.2")); + +* Configuring the data and statistics to be collected. The basic paradigm is that an ``ns3::DataCollector`` object is created to hold information about this particular run, to which observers and calculators are attached to actually generate data. Importantly, run information includes labels for the ''experiment'', ''strategy'', ''input'', and ''run''. These are used to later identify and easily group data from multiple trials. + + * The experiment is the study of which this trial is a member. Here it is on WiFi performance and distance. + * The strategy is the code or parameters being examined in this trial. In this example it is fixed, but an obvious extension would be to investigate different WiFi bit rates, each of which would be a different strategy. + * The input is the particular problem given to this trial. Here it is simply the distance between the two nodes. + * The runID is a unique identifier for this trial with which it's information is tagged for identification in later analysis. If no run ID is given the example program makes a (weak) run ID using the current time. + + Those four pieces of metadata are required, but more may be desired. They may be added to the record using the ``ns3::DataCollector::AddMetadata()`` method. + + :: + + DataCollector data; + data.DescribeRun(experiment, + strategy, + input, + runID); + data.AddMetadata("author", "tjkopena"); + + Actual observation and calculating is done by ``ns3::DataCalculator`` objects, of which several different types exist. These are created by the simulation program, attached to reporting or sampling code, and then registered with the ``ns3::DataCollector`` so they will be queried later for their output. One easy observation mechanism is to use existing trace sources, for example to instrument objects in the ns-3 core without changing their code. Here a counter is attached directly to a trace signal in the WiFi MAC layer on the target node. + + :: + + Ptr totalRx = + CreateObject(); + totalRx->SetKey("wifi-rx-frames"); + Config::Connect("/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Rx", + MakeCallback(&PacketCounterCalculator::FrameUpdate, + totalRx)); + data.AddDataCalculator(totalRx); + + Calculators may also be manipulated directly. In this example, a counter is created and passed to the traffic sink application to be updated when packets are received. + + :: + + Ptr > appRx = + CreateObject >(); + appRx->SetKey("receiver-rx-packets"); + receiver->SetCounter(appRx); + data.AddDataCalculator(appRx); + + To increment the count, the sink's packet processing code then calls one of the calculator's update methods. + + :: + + m_calc->Update(); + + The program includes several other examples as well, using both the primitive calculators such as ``ns3::CounterCalculator`` and those adapted for observing packets and times. In ``src/test/test02-apps.(cc|h)`` it also creates a simple custom tag which it uses to track end-to-end delay for generated packets, reporting results to a ``ns3::TimeMinMaxAvgTotalCalculator`` data calculator. + +* Running the simulation, which is very straightforward once constructed. + + :: + + Simulator::Run(); + +* Generating either omnetpp or sqlite output, depending on the command line arguments. To do this a ``ns3::DataOutputInterface`` object is created and configured. The specific type of this will determine the output format. This object is then given the ``ns3::DataCollector`` object which it interrogates to produce the output. + + :: + + Ptr output; + if (format == "omnet") { + NS_LOG_INFO("Creating omnet formatted data output."); + output = CreateObject(); + } else { + #ifdef STAT_USE_DB + NS_LOG_INFO("Creating sqlite formatted data output."); + output = CreateObject(); + #endif + } + + output->Output(data); + +* Freeing any memory used by the simulation. This should come at the end of the main function for the example. + + :: + + Simulator::Destroy(); + +Logging +======= + +To see what the example program, applications, and stat framework are doing in detail, set the ``NS_LOG`` variable appropriately. The following will provide copious output from all three. + +:: + + export NS_LOG=StatFramework:WiFiDistanceExperiment:WiFiDistanceApps + +Note that this slows down the simulation extraordinarily. + +Sample Output +============= + +Compiling and simply running the test program will append omnet++ formatted output such as the following to ``data.sca``. + +:: + + run run-1212239121 + + attr experiment "wifi-distance-test" + attr strategy "wifi-default" + attr input "50" + attr description "" + + attr "author" "tjkopena" + + scalar wifi-tx-frames count 30 + scalar wifi-rx-frames count 30 + scalar sender-tx-packets count 30 + scalar receiver-rx-packets count 30 + scalar tx-pkt-size count 30 + scalar tx-pkt-size total 1920 + scalar tx-pkt-size average 64 + scalar tx-pkt-size max 64 + scalar tx-pkt-size min 64 + scalar delay count 30 + scalar delay total 5884980ns + scalar delay average 196166ns + scalar delay max 196166ns + scalar delay min 196166ns + +Control Script +++++++++++++++ + +In order to automate data collection at a variety of inputs (distances), a simple Bash script is used to execute a series of simulations. It can be found at ``examples/stats/wifi-example-db.sh``. The script runs through a set of distances, collecting the results into an sqlite3 database. At each distance five trials are conducted to give a better picture of expected performance. The entire experiment takes only a few dozen seconds to run on a low end machine as there is no output during the simulation and little traffic is generated. + +:: + + #!/bin/sh + + DISTANCES="25 50 75 100 125 145 147 150 152 155 157 160 162 165 167 170 172 175 177 180" + TRIALS="1 2 3 4 5" + + echo WiFi Experiment Example + + if [ -e data.db ] + then + echo Kill data.db? + read ANS + if [ "$ANS" = "yes" -o "$ANS" = "y" ] + then + echo Deleting database + rm data.db + fi + fi + + for trial in $TRIALS + do + for distance in $DISTANCES + do + echo Trial $trial, distance $distance + ./bin/test02 --format=db --distance=$distance --run=run-$distance-$trial + done + done + +Analysis and Conclusion ++++++++++++++++++++++++ + +Once all trials have been conducted, the script executes a simple SQL query over the database using the sqlite3 command line program. The query computes average packet loss in each set of trials associated with each distance. It does not take into account different strategies, but the information is present in the database to make some simple extensions and do so. The collected data is then passed to GNUPlot for graphing. + +:: + + CMD="select exp.input,avg(100-((rx.value*100)/tx.value)) \ + from Singletons rx, Singletons tx, Experiments exp \ + where rx.run = tx.run AND \ + rx.run = exp.run AND \ + rx.name='receiver-rx-packets' AND \ + tx.name='sender-tx-packets' \ + group by exp.input \ + order by abs(exp.input) ASC;" + + sqlite3 -noheader data.db "$CMD" > wifi-default.data + sed -i "s/|/ /" wifi-default.data + gnuplot wifi-example.gnuplot + +The GNUPlot script found at ``examples/stats/wifi-example.gnuplot`` simply defines the output format and some basic formatting for the graph. + +:: + + set terminal postscript portrait enhanced lw 2 "Helvetica" 14 + + set size 1.0, 0.66 + + #------------------------------------------------------- + set out "wifi-default.eps" + #set title "Packet Loss Over Distance" + set xlabel "Distance (m) --- average of 5 trials per point" + set xrange [0:200] + set ylabel "% Packet Loss" + set yrange [0:110] + + plot "wifi-default.data" with lines title "WiFi Defaults" + +End Result +========== + +The resulting graph provides no evidence that the default WiFi model's performance is necessarily unreasonable and lends some confidence to an at least token faithfulness to reality. More importantly, this simple investigation has been carried all the way through using the statistical framework. Success! + +.. image:: figures/Wifi-default.png -*Placeholder chapter* -This wiki page: `This wiki page -`_ -contains information about the proposed statistical framework that is located in -``src/stats`` directory.