From 315932070af00bd97deffe074c1037e9bffc3c64 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Thu, 30 Jul 2015 15:22:40 +0000 Subject: [PATCH] Template of Windows TypePerf cmd and Impl a CSVParser class+test --- Zutil.jar | Bin 6160179 -> 6164113 bytes src/zutil/Timer.java | 7 ++ .../{HALLinuxImpl.java => HalLinuxImpl.java} | 4 +- src/zutil/osal/OsalLinuxImpl.java | 4 +- src/zutil/osal/app/linux/ProcStat.java | 7 +- src/zutil/osal/app/windows/TypePerf.java | 57 +++++++++ src/zutil/parser/CSVParser.java | 110 ++++++++++++++++++ src/zutil/parser/Parser.java | 44 +++++++ src/zutil/parser/json/JSONParser.java | 24 ++-- src/zutil/test/CSVParserTest.java | 108 +++++++++++++++++ .../{JSONTest.java => JSONParserTest.java} | 2 +- 11 files changed, 349 insertions(+), 18 deletions(-) rename src/zutil/osal/{HALLinuxImpl.java => HalLinuxImpl.java} (90%) create mode 100644 src/zutil/osal/app/windows/TypePerf.java create mode 100644 src/zutil/parser/CSVParser.java create mode 100644 src/zutil/parser/Parser.java create mode 100644 src/zutil/test/CSVParserTest.java rename src/zutil/test/{JSONTest.java => JSONParserTest.java} (96%) diff --git a/Zutil.jar b/Zutil.jar index 698715af5f9fbf4f44081f9e4246114f1f0d687d..d9d0cb1a3c1a0bd15794beabf93abf0678a192f5 100644 GIT binary patch delta 20517 zcmZUb19V-{)~Fk{v5hvi%{I2#*tU}`* z+B=JL?b_En@R;;_a0GcN2uSn~pFVy15Fh#)gP;TP_s53x{U?Fw?@wHt7gqIT9?ZM! zMTTD+2kU|MR{`ojB4X825GsBAtJQju_2Rw@!rvDE`Byo@W7V=N^So=dPNt%mfBpU1 zyn@=iz(9b5fB*pr0ty5)h>svXfq(%4+tB6(_bm3FS8E^Kd!c{|VhC8k$38ezhy=qY zV3jgRYZ`(>0UrBlBR7ck!$pI=d;Ek)`j5vqe{G}<H-2e;#16@VE`FLvRuQRJ%;X z_i%^}_9Jjx*za+fLgBH1R=?p+|7vkxg#QHqdi(}u6Ca?B(vZ6g$NwI^;rAXK2lT&4 zk^eG8{2LA#h@=M(-SGVsj#~6@@f!kJ;3>YnR|M236z@*Uj_@1rb!%vCfe-)JVt*^w zU@!r%{jbvA9H81QVIm;DM>xVni23p^f!rsN-X%~3L6yJK->1}2o`%5o>8}R-8?)g# z58)pDJ=k3n!sdHHfOusHc)$uMM5G2tFhp#)ci+$Oh`sO9zs7yRLPUK}q&*9iy~h_s zP>BHzrHO&%ks#LkzeERVBB?N-9pa9D2Awo6a>mj24D*YMc|5n1T3+Q8g|$W058 z0FrEX5zo=zCD7{|i1;oYeM0(9|5pNvav)K^3yhTTSPh{ZNcW%L)yh*)ozm2hP~J6A zOuU8>HKb$6|51UhmPnr(R<)4ORR6mDeH=iTS|p_R0C=_kNwp&l)S|kzNH`GG8n5qf zmiaOg63}K^n+TAua;k`@g6*B?e?q?G5A{eisR1`dzD45yZ4R0$UQmGK3!K@q1s{x5 zbJdAKO*R2TC(Q+HtFH@>AwfF#%c%%g`}t5LTEFZ->?p5X#@*8im+AGwM#mdWmj4T9 zj=J2Yqi6PZL8v5n?tQGjP>;HAS}J~ZKGDE)LLl#TeIUTzM5zbzIxNNyH?I@CpXX&>!=P0f7kkW0G5ITjgs0dO%?PtxZj!P)z ziF3p_+|s)DztfAK7jLZ#H-GsnAyZI54Y;hx!AViP@{LURS0|sP)%e~wuUrM}s6Wk` zt#IGUKBxh#O4qE!XHxc0R&4xItlhlTtQ?jckxu$cPA^E8D}D$%FU9DfjSCDc+0+pA z1y+o#^r$*Mky**^QQ?XiDHv7C#wij8%Wu#!dI|c!ODqR}R=EQ&!YmD$c+8AZaiYkjc2-|v_7br!hm^*z$95&`ez%Nf#Az{KpK)e@9&Uk3ZV?x zCgdxp!Mgo>Ux z*ZR-+9(inB!Dg=WCR`L9enl=vEQ$e6>U^OWA*L2lgl$s`jYmIBLibX{EK<84O3hpdD9*ff0Uy98M|3|A!3$hI_4+6 z9UJZ!bJZUZd7~Dz-!i|eK>SHnq3g{0&Nk>26Kn+x8RQg3M`9Ed=5a}&#M#7+A>3?! z03W^vxSnH9`)?2hh+!9KdO-Nf3P#j-$#g^G{z?11gUp_R`sz>e4F9pCvxntMxSOIq z^hfN%1txoKOGx;On3^9gfjB6xr*9LD4t)RJVWY8XZ{oiPUGRe@kBVoMJ*<7jwo z?YHpC2!?WY-13y9q{XBp+^^paEw?`cegY(NGaOB&fzAdcElm^dXUR`#j%UfW{9t(vfw^N$qb#(P>WUX-KbcE0IDXa8XJOJxxn38j79U_hO~g>Rv7eh05}3`q60{v0 z=IecBzLA_`8BNok8co~dIDX zNuS$$im|lvWqe<|iaSl6LC|F??9gH}0;H+;F(FX%5?ql`8wmzIPIlBqlV^p!W`WtW zUT7g(Zcattit8OZORjug1T)7FHZLIjFef<9Bzyo@o%#Yp`~-n(L$sY*WNY9Tvl0vt z6I3=Y|2Ut+hIdh=0(;^RVM`ngfG{@*H3|x0lbn~OCHfw#9=n)6+9{(UqQO(=0`TLj zEcJQeEjlz=qYk)tvtN_~>yUj&Iq2pv3J5jI?NuHU4Q7+-S7{IjA=$4|NV-#Uhk_Tb zFh_OQ>{MqDv2sh(FvXuv5E{8EDCR;bTEN1CPT~0TS}dAqwNs#5?eJ825)#RJw$`Rq zl*29E<`#PGQKsacuKAKot7ippPjDX0xsE~AN`bgtb1;Cx6n@tSs$ayA*Rt)LoqkbzU+zu21#t03MGZ<;ieMQd0aO2ch#xKVL;81&$ zD&v=80Whe&(J2Ib32wG4h5DibLV1q+HvB_BBVl|l!UEtC+jL5V&TH2PCF?x*3CnS$uYui?9edr|Soj=VT zIV>+&<9~LzQprTK5=T!SJSVPs&j+|3Ue0xO!R{e7Vd?c01yGfk3owKkar*eCHn3z= zyC8VO?Rg5bAXpSU0Yv0cy+-VzTvJ~o4Rk)x2B$M%I2kJR$5AGt*KHOj0rEF3JxS_2 z60+w6o-F{+Lijp~F<9hr%&^Q(FjwJ;x(lKB#WRWdEocR*)Q4m+C^Phu2ZI&nsT#|7 z@GN5iIr(Xz ztEiK*CMKIuo5#R=&&2CJW$gSIotd_G!f8kzkzR)C;vc!`BwrwM3Qo~Z%(KRHh_6vxvWQdDvXAj9ddrA1dWQv zJxG86XNW69Uo$@@CY7&vHdIES7}T$z|4GPrW2+ex1dSXWp(DP7zGL_Js0llH-7s3k zlZC$iq}pCR>$6lI(v2%Y-WVG`8QQ!enAp|e`6wf-k{Q8^Y#3y2%$^vj_d0!Kp5Jmy z!pOoi01{^0E?-HV+Wi!|mpHfv=_(K1>E~u78(>itDH5juq!IaOHz!xI{)y{5fprHZ z)3K=py7cZ9iC9|`7MjH8p~sqNxBY?S2bF2U0KwBs)J6{pPSA*xAj}ENrBK*9C)YS| zWZzdtNlUM0m`LC~l5Z!mDhbBq>H9zhmXh%q&>p#M>^aJ`!E8bKH4b(CYxv|)l$rH; zTf6%!73sreaz9s$VIJWU?fp1U;1Aa`2V zDM@0TDRZrA+j9zaGkcH=7xouelLoIm;{i0h`C~Jw3}n@a*aF49wq;;qbh7xX2oNEs zF1v(jZq}kqxSw=i{ONtxxtx9`_PriV5-z(;wO{y=wmt7pY<@#d5${|=NIr!)@*JG} zeJ}(cmqhYLQZo+4y*xPA>%ZP@`a7x?a^R4~7r7th0ZxXQJa2*XEu|0L7#q=e&sV&$ zmiqQ`9dVo>%di?M{l~$wj|N`|L00M(e}`Z1)NkFKLg3VBj$CX5bmqsY<`HVl%k8k9 z8^YdKsK0%kOnhT>HK?ysf&nt!z~ck6ZV+Mr_Hf8R_Ze-x2DC0D(9-qqgzJ6L{_a6P ztBnc78bd+^*aT&3Su9nQeo4eJrt{53k8WO6RM)7>FA^WkPfzSRwOLE2JHX0SsBWid zCv6w??{$qRC>0j^YOsw3@a^b4CnrB@axI9Rji{E$+~+bKZ`xmVJYUOvd)9~QJmoa+ z><;$v!=9T85JE+iqLkny)|c*X^v^{-i?i$Shk=O$pho7~@dkXvj*V#6HPj2ju6x|M znarfnWmLKyLM$;AL1wOt(~J+<$Mx1;)@O^aSEvY07BlceU^y5@DPPR~a}*o%t2wK< ztS<|b-KeCVq6l(}Kd}DQT1mNGJw5wMJ3nhXifvEs;g^KHB)bu?WG07~%)+P6(3F{% zU>0W@&==4zOeq+`%)*Nfmz={Hl!$`L% zd(pnHJUB98q9q>M8##zVq2N))RFZ6%(n?a?fZ`Chlxd!lad8i^oni~c1;ShxBQs}q z_&lO8S>b((U2!M>y^?Uu^E?>ouO7m*McE}SOy2|?y^9{{rtFJnvRTf)6rRvsImco+ zJC6|(e3g9>b_qNwHiM4oNh)Hun0dAP(sHiF=YQ((iM&FLKj5PbuRj|3d>8u^oxY#{ z4FI*#KLWKvs4_$bwFdQ(^f&3BPT4K}!1A~AS)4Mq}Eg z6I7H%4YvS?G7w!o^F+FhfNhD9R~j#@{toz+2VMomfkrVEWv$?_P2H!!%2R}NsH1qt zx+Zm;k^Q6K%-CsSnosktc@0CVqqDwwhyWOa?XW`TE}^DW)TUMdu~qjaX^bbaPq%E}D97pRpJCB^{9W z=CbvJPm3h~L5HD1JkOJ1#2VFnW5j;^2h=$VFO8e5n|si{dsIj7wNwJRQ_!_KF5-EF zaZnFJ)0IX1;e{40Pr4_XHR3|bBz}gCBHXIkbZ^s~@bH!knt92ju;_S)%-9vw9ovWOUNEhM%Pq2d4#VDupLXwCA?sEVc@BwQ z{5sm>X*R*Khe2d2RM9Q0uxj>HE83>Z^C<3CYD`d0JWA_vQRFIdNuf`c!HNW&Nq7e3 zH6uVcg`rwu^Bh=$pO%U9)E#=~FL|Gk=4bnz_R%Yv8!g(b3JiC0?{$%gL}i}#rspv) z4no^uQNguY@wmj*ObuwIB+5jYB4LaYUt%E)NbB3eKE=L0g8?=vj&^KL-WL4S17GJ- zK3-afee7bKWnNNGUA0Q~lp7KI9r|xK!`2Kz zc$^QQT7`VE{oB$fAA0jm|;GSurQ0|dCRmzW4pZl&<9kC*HSwgcMUe@31W6@C;3!nR5cwivrL1m5X= zV_z@Thg&b)ej&CK4n`WZi~9U|_JYV$-H3l%tY!2r^dYL`J_-3VL-!Z{>@9vzMUn@q zsmHpqGlqWCi|;sul-;fCJ4#H#!Z zy_evPfb~K)PcU8OOELuA{#C2m@MR8X(YZZ%6xY5w4CM7V6H z&A~C^Nu+Ht>grwFlioX7DAL@jq~fBBp@Dux;{|Qs1r%m7`kPZz>VIh!X0g&?Gf_^S zECS+lJJXugS+}qi3de#;WtOeXVW{MBTTwrzyY|J=F%1M$e)30b;x~XHL1o>()awl; zfAW=aDU<5fj6sMK^_n&Cye<@}AFGdejZUy5Ei$3OXG_bI0cc(iDeIP%;%d-H_Y;%? z3*re_2@1oLW##Od*R45C;5e)aSq*2%L;&T>p&GIXa`@_V{n5t;Yjp~!H931{Mz)3K z4cO@@N;R0r%*57#)-dV%k7611=SL6(1F>C<~^WLS>pFZYXU(!{tD$uhOk^Yjxr3A{oIgwitqe_ zrFaE3xce2QnMblU`EZJKJPjkC0^x{)e8w9je-GjajAP7sl<8EZyUo7RC24AAo5~u- z&}`N`zSOezo{QAz#1M5k8V7g906>R;K_n=$a~ql{H+hk`T5h=`AgK3 zsY|qH<*wl{o~p>qkg?1iEGu8xF6BN3=V#cC`KeHLf>Y*aQACx*!UE@3Y`{XXo5q0c zB@adi)*})sf#a3fA~#~EiJS1;8RjpQPw=5ue&W{$ip=PvbRc1@l{(qU{D7#(r)s$!WD9 zrw1I#LW6XK5Eo8X1JmW_c2I)46c_q!&(%6q{jFgYDqNGeD z@qchQq>57TEOOQyJWN7>f+8VCro?gn4?cmd)nlpKY{CRAw7Z*8cmS7fQm(K=XdM`s zWBEsB;w`r3UGn_|r;JSLL0J0a?EnK*`IuwUw((=*AYRlM_3lwso3k(*Le_^*SnLZ8 zbLYisRg@d049tJp?CO!gp`3lb-;5)f;}+%*M6OXc=r%)^4K*u%S8EyLH|fT5E?iAX z8XfqL$ibwv&D6l!Cm{AeJLSPs{|@tL%}N_23NNm>Z(Ni^v=Pdt>sr1>uQ z%Y|`v$*8-SsppbD&R3es-GQ9XVY`99Etqht{D6b96@2m%K~(_D*mVS%Gv^Anrk){N zmj}8$cZ8Pb+tJa6{$FK-Gd-8k4^}~1^4|pJDC3FLZj39cf_A9yC&TcXre_2jVK^Ks zVt;U3f5RbP5L@5rxyaij_-Q++{m`#4$rRZgspyRUs(^l~ET}?dMv#rxXy|Ni5Bpfb zwtkcEsMu)q!7&h^P(vQjkL2(5|Et9Lb{~-7I z6%FWH4Ok0b(Vwjg;h&S(^z@z!5WB_)^GW}SMCpj@l|}U;n{g*m&52{y(eP$#o|Ius zyljXb68~1|N^+vw%Y;4?C9>{~MJvM-6hLjGfWj4qLG3YNQ0@TjNHd-_%F?x=>n|lz zm-KN<2}lL_xl3R3lRFRtatjP4MHRd}JSPIyGg2a~dpO*8j~Y2)e`5A9Yy2jeTUvfW zz+pPsG^KX<$&_+kTEq|bqp3opQ-NR-ET3{ChF7vf*%z_lDV(0+XxEXW+(yB!4@M~R zoy<#o;VL^t1}|mw#zST0()!xw(P6)+TE7HfC06VMxC0QVwA>eS;brkN$=`@=BDPBE zvS@0n@ztXAXTEs0KvSFKIC1Atk%yw|qt@KydOg zzk|5HhhcvY@(67m^{p86?d%v_&25ZqT^$+zyW`}b`wHCZM!*96e_@o}?TqD(9ZcvA zt@Iro17b#G!I{tl->8R0ko$OamZ;!Nw-gNxkV#PNhzBiDl>$rV^d-4Pd~J7!djpU* zg>WXqk(Zhd%sV>X%*VN29$)Vv?flcx3#u^(Jn-@0aaueb?bT{*&rfRi$b>2$0lm77 zyY_Eg7T9zzL59o;@t?8JQZeryiG7|qD^)8*++nPkN5!Vy^X=KD>-+0Hnz&-?aZKd$ z7{;i2{=5o=5veK?bVZj->dro`)lbT--wLaTI5aJ6YXtJ58ty4T!v`E$Zir7Pg5A-s zAAg59be;WDmC}<@70_Ooql7TG0H|n;*4Hudw8yRo_Vd=jx4iLoS6y&~AK%8=Az&OW zYBUjlieG0S_&()pVrI>k)L@--Jb2*M3aMu&L{!^ z>y0jCgTO_cLf`HUfssWmBzKGCqVBoYCT zF$f8^0c{;g2L=LE=eRd)EMV9^Xa;Qy+6zVR&%_gC|IQAM0%`S2Ljl5fWnO)ygi_Ry z5~WJO#M2!{t>)B(qjpL8w6Mknn%lU*mS+ZO?$D8AWfV1c8mkE~p0V#b&UbgRcMf>H zN9#o3Wn+p^M8vXV39G!>OZ2go4&Pp(ZD+At=_Ekoimz!b-N!&vYAjT{lK~i2r}X*Z z(-}h`$)L+KUkrW|(aWRK_GwyXSevxB?jX@_p#WwR~pnGfFVv*p1PQiRA)0 zZ48iu37-+McG7I2UQBGErwd5gh(3#i$8U>@IIKE!f*dD*NKM}Xb9ka&Ewk;gp@E3P zscgWkn&*{+GFEfp4h=W3-vVIgw>PiAKrDSC*eD%ZpiVl6dFn-2A~p`K`Mf(Z?ULVM zyU^2ld3$IeLeE2eAWzTOb=nNeyL&6+yM5^YXR0*N;#g04|2W&~`HygYuHh9iWWTuE zJP~myH_rKR`(5|aMy!4u)9Xm@?St=GumFM2089k z1qQh%H~j@X7e#S%SOS1&5y+uv?<-r>(vEsxUbA5#VH*{^-Ll43x7EL*<*%?|#qz0k zaL`55y#Fc$+dd>@IM92d7n*>4txKf+Xy)0bipl9$)3E&*=B8UBPipNZZ?oH{OByUH z&u%6(oQWN!NYx3j{l`vT@)1pC z+P5ZNW%pl|@t|FV>wuVz7;mK(m!I%NZ9B&Icp-XFi=k9sVXsh;@M&1lBr>k_?TQ=91ud}e*@Wdg4W&%WYUjYe_Wc?lzt6( zMu8nY`D2^(Tc_4Tg|iQ5k@%X5{6ff=D}j^4G5O0`DP;iOJufWPy)I`&*xmlW%{ra+ zpDil&$4F)1f6X2mKt>b7m=KI0YX~NJEP$Q9gQKwngOHM{{JZp@u|Y*s4o?jIHBh^? z%IYU_>bIuf%kzt*;}L%ZCF7D((S)YIiAy^k8rbUf81UTU{!*ALZ2yz3I9EuXkfQ9q zS)QZ9q!{xEL4EUCMWO=-FAkjo!(i`ZH2K_fpU1Qx!1uNz_o1-bqPr8&7(yt`I+GGF zB!~$7ZMXDox-&k6Tv}>?#-Y(-6AcZs0w;-yaV7jXiDfDf585W>pwmADeJ}r}SgW0^ ze8r)WB&fyVlm(*xn_nu1ncRAV+G$d1n6~3dxDqy|**IrL%l4zJz_(r~jVqVz1L+d$ zicvUhsiR!Vs;>`Kzgu(w(oN_Fx%IYk`^<<6;QOm($5Ee7;NCcTJJWs=7N&mFoF3zz z$xnbPWVB>((>fI2o37_D#nO7v)}DPK15P#TL||qnx0KKZ!kvXOGxXFoFV(40b0=Fr zX0Lf)5)6bZt-7#c5da)`#?CG}Ez#!S{-6e{`tb3zV5eTf*|^vP?r(x1<6!5KNGrm< zGF-0OQ%4-mH>JMKkWI9tIM&kkkI-v0H&W*>V<_lNgxeMZ3r|{OBip*!iH6_};aDq{ zbwaXRT+>_C9oi%x%0K3(og?RO@{CI5J!Icy}A_K@8nTNgDZ!IC2t7xg*FjYH)xg=;9zJC5m8+Jh#zZtVhBTyeV(_OP5 zc%u<;Z0(-XUb11;C95?1+N>NUX?PpPOOWCsO%pT59nfeBzzRbQ%cWS$VMsk3L#Dlt zxp;dhg1b8UrO-qw-Z`Pd9Ia-Tr6XkF5@?Nnk#>^PA?#Nfwi9Qo%NeuirB{dq;lh7z zt4~Wauar(^7*$b==k}HXXUb3yjH5w^S)-E(*C*1$wZ$%n;esS!}4aO>#qw%y! z-dj0*qa9fQSjPUn^8;RABOOBw{tGyz6f`OhgR$3kO zP@@3Y=Th(=&+}X#Nm9*%g*mcB9@(?RJUAvB(Q?ru@a3kj(G_HKF-)tFgs64$9NIA% z)WfiP?J?vu6j>rlnQF>}Ba6{}`UlTHl`RND&2B%z0+vfSm9tYNHkEHK8nhBRUo;sN zHO(YrysybenKkC)rkHQbsulX0uMWScNR9E4R5IM zGeA}XFEh$2$j-q(TC0?G28U@3ETb* zAJW$Eo}FASLknyT@{DowRAw8+#+*Yy&RY%qvETCcesH1F3hgus+RX!l`8WRpa@@dU z0^hQc;R+EUk&)l+!cfqW=^z%|UmFC_k=wB#tbJbNe2B1sB`nCuK)7XXctC`jrJa^B zj(7XXu9YmJM2hATd7`4ms*xj@->)@HtGEKTB&%ss8JW~NzBT-m85?#ZiRF1uCpnsdMYIzP~>H>thd&X<8Rfx_$rGNGw+V4Oey`d&^w9=YC7u-JSb} zS`aTf0ZHWMXXJ#Ts0Cm44yo)RX9P>^tAP7$ zv{rh82`_$U(+9$sS=~>Y3KCC!AKFRx2UvM4wqSgQ57u8RGO~sIcmSfJ9)UUFUG0W@ z5GG>t)jI^{$3<*2OlI7X39?ogMMt>U2gge&+Bx*KXy9}7Vd*E>HKP(VGLmoXJo-F$ zpJoFqI;;pWE?g)m=!TDL(NtM^ym}?0lEk)oiw~vxNAHW0>v!Aj4x9^4!aJAS5B*dYR?vCT{} z)StGB4wK>AC|YdvbWq%q)9A9XRIf7KR*p6^UL)EQg3~6VhE_KP1kV(Sd;_wjS^}Q^ z5FkU3KGq9D&Jggm%iZt;wj1=1gLa>>`2QxoUL7*QA~h=G6HxexB0`TQMY~z)k51( ztZPNwI4zbHSh6&gBJ4kgZuptR`xv{z)$$viln=x6#*&1S%O@vWqN)0(_>8aSW4aM| zYHf#I%A_S@eh9UVF*}RIRSD3G%I1kK0oA26gMpGd#Yywt||M6`&>-(^bS+Ty0u|J}9;ehSqa&)Al7x#hkr4?TKC zYTV(Q)4kRwU zxqu$Pzh@-w1BOliyl>1tm3)cz4~$nP+!8vpWvuaBUa{a%E)gX^4Tq5?l&c>{^u~2j z6NKw0f&?x*CZ5nT2P%&XF$Iy_4O=!AmfJ(@tGQMhVRD8%`vmwH7x0z`%jMacDWjt2 zk4H<=w+`PtzdVX43%BY|tP~aT*9|Si1~JtGhVGbCj=a?DW&$2M=ATM5P50k=sT@#V zSD(+1y(&wwUn7K4_oG<)4EYA+I1%l5yO^@CAk(%F_BnUXFkULsun~R~D~)Q4>@Jci zYl}Jq?&*}>OslKOMv)^#HUx58Lftk5oGmp8OMTaQEgY^pRBrc#BSy4Z!rgCB!=|VK zL&px+0H>kLkHA))SX~ha$7=3v-9L>!^c9&RDwDeBKj@=U?{@dTS|L1Mf7+`i4^o50 zKQk8A{C%v9B1lu%V$NF_^8FxfTuV5>fmtkjIcL(Kck_&pPL_#NNC&xt}n7LG_U{h2Xcy7wwCNTb2b zX~@4gscgEaP`b@g`h|#nYYjdjh4pY!(DD)&Tol<|B)K6+g%#e<$ZMxH5GnV9jjgY;qZNX zR^ARc?Ro?MyJaAbRGKCYvfRu=h(i&^Z^&Xn9;E>I`o4;Swh{j44+kW9I6IkJG5lu% z^S@Uw)^c5vJ>SsN7HrTW=H}-Kd2i=E?2rf(bV_`YH3Sa5;^>>n$c<~MwsqZ6dGEoz z0()mB+5N@4IBn>+#*(6@`|)AgifSp@mK*Dk&%b%UAI?@!NfktM zTyK10683xJ)yae|(iz0IBTEixa=wE0xH*kxy4XhM2|q0dYYG0)WqUo$Z|VE+({^CO zxdZHPGtT-&ZoGk7$qcMPPZQaj_JP~ZV% zB5RY5{1GUhfeZ~y{jH7AkXVV#fc8E&`fG9Du+fcNi||){zur(biA?=|#pLgH4#3IS z(doadNoA1sZ$(+2_-^ku@J0b+6r%9ui*5dFfeHjnfy$F_Dam zU|QWapE9?b0f7O?&GsbzBCE4@r4VNWpS!K|@|-1l2%02DjK2$s_DCX^3arlAG58af z4ME=RUVWqgj)26*J6%<=Rn5vfbrBJ0%f>r*A>DKBhsuxOf!y@v3Ot>~q|a#&^11r5 z?3-Q}H8%K~d98ub(Qcal#)2c62C+F!C9tO1df2N68(x(vzKBf`T`Lg6PM%`ld$g?EX z02Pnv#I~5#GBl2*L4uOxU21dXD?(Stl}R`od-i=*WNeRyoB>KlTJKDbk`hs5C?9@~ zF^9I^4}g-%FAe3|%)#-ULu_IbwsglTWWLQrCscLX4fwg69+@s2#ggka)+FcgxG%0P zw@{^8^V(8oVAVNh@|6oN?p=iCLm0S;W zUkF{!H{0r5Jxqb}jezjc;jo__8J(fG?SbL4@#j*PjE~h>60i8p?#{zS`jIPx#Xfr zZR;bXa<6ipkm`Y$=`&kh=Is;)Oy5hT{We=SEiM-h5-UgHHoJnIhtT$k|Zji&OgV-fIkA#LG}@o8g6E(M?p8=d@2 zut3?JN6~Fm`YEoQSh}4=5U?kfdH;~Pfz3-zVqEDxcMK`0WqbLWKN&<8zK!^O+DO+V z2*(>(6{&L2So)auWeZu(NUml_D|bgHqlMs3KLCxfFS2rS9brQg9*T+1H|YV8+D$;w zW0eZ?viX)g`BAHu)N>HVOL*D&iqAU=Cf(AH-2?lyN42i{E%Y}2m?ejgB1JYBf9mSo z$7N2alzkF4CQ7T0%TbLnZTnln{6iEa|Eg~Z<}!)$M$^OldF zq{b6v20)9+@1Vn(|D3-7xo_an61m`E8!nEJl^7vR`xpu_OEIuVP}($D}tBv+75EHr=?&jP+Y!Z< zMdPCcjGV+hv>N}|t|=++$jZKzZ4tE-poENCuWnwoY!WQ)W7zbYfN^LTHL_OvElt$*=nHFx^*>v5o&#a$%(J#? zGD;(RP9)a-PD<&r7A){5q<*HA8S{>rrbUQ#GK`In5jYY0LRxZ`BoDK7i3I!opnEK< z;zdI+Y^9D%s?83jPI1{>?a>p5Lw2$(j$2#RBqU;Uv?6#E)j?graf&#@rm~ETd>j@F zS>r{kiNQ}jcH!|P=t*U%qSuFM8PnuWN`=^7hjlSZP#i+qtApc#`&W?o_2~;1#nLwI zo7$+;`fNQ_HnfH0Ag)#i^8ESFv)|4`98dDKC?w8^<(YJV_ib^x^ zsgiv=$>E8oYBJ2FSROQI!S=MaleII%yWu?+9_<_A`O1!z)&a}v73faw{xQR(zk&ib zQ&=Kcb+@=~T5)Ad4wtHS8$oS@cC;=$y-u=`6f;3y2fJ zor3i>_R{d#9}He43=4EBnxrb&FL%k_qupoc74RE-&?KTPJael#9AtCBYV9D|&$GIU zaTx3}-00KL=BCz{BE>x^#!i7{9@y)NVSyORKY@J7*gbP0> z=7gcg#YD=J;)Xf}5^F0ZdSIzNsW7J$&C)~smv zN>TijnMueB8`qyH85jub7`jiYRMWO^h?Jf%hmkCk!I+RwHs8{-qGQ>8P(=-9Cn+uN zMS(Aq?y6Ujv(Ua|)OZkTF;_`O;lA)!I~p@M+al{PPbEGr-jsi_Pk!_z_b1}^oPYLl zbeF`dfrm%B#vxp*14PEEaZubh88)^M&$+DQWKKl;D4z@q9kQmckh;q1@TqDWniW5r zMWT6#o|h%orrkr7mI)WTTLy?#w0O@aEARAgh?bS!39U zoPcX=5}R`gQ&+!>hT*~GgfBpA69w)i@Y~8T9R)J8{vs;22Egl%1HCXLfh-(nY_@he zTuHhJeE*94EPvrrz(b(Axy21^`<%8!Ou6vDJ1LLxmvYW#`#Jd{&$Dv~O7jo@=_r!t zU#2*ll#%vg*!e>$23KG@%SAWU#>#zuBSrKc>QNTWfW*CDInZER#Zxu)d`*V{_?_Q7 zjRf|B_khmJuK=^BN)@eAs83V9PeaB(Bz|h}{4`DYfW!?Z-PjvW5Sse25o|(*vWv{E zGUwJyoWdq&uLn2QD~cgEF{lDF8zTkUDSCu5Wh&(KfEuQw2L=#D@Cqq`x(Jv$=^N72 zBd6&cG-f=W2cMClzeAQr>N;sNOj1G|6~QCVDP!~@;gjYq~-xo2y$(M~iQ3ZZu4_o5-T;jz}O{*^OZmbwrdKjwZ~-Y1ISbJ9y0)Qw`Ey&r>HKW6vfXy_WYS{C+{G>UdAf8HW2`TyWYrU!RH3eiUK6PfZVl)LGd-w4yTVTx zsa=d9#aL8^xy|xhYk)p6|M*0Q_e0%W^Vjf$@30p@>QkZ}O}1haThXd+ye-*Ru{+wB z)VeIL5)pT9m3^tfAcCt!+(9&`D{7sUqT$-`>G4v)oPHRe@;H6GCVMkK43&P^2B8^w6LJ0GCaGsdpT!`Q(!!O_8ttm6-Q9KwxCk;F2bU={8QQ7QT^{4>4Rz~ z4BMotBCQ>DZ2b^{~h4l)fNu3yu(=2{{$qtlIHDPU4N_N;v`1R@Y? zSmMp%PdC{0Q|D)V%0h&ladjhdF}LR2m=lvxiKd5leUA4ZGX^^BU^2I%>TwuqRJBaj z+(HPtN338g86nh!b?VfgEcQj%q^7{;%+ASlTttn;69$o?GUTeq!e-)0H5+U!Uy$}j z97MXyuE}P|_?66L`4DOKFQ{89EbUY};3kGAQqZ=qb1k$P-r6}y0zsx{&ny1=F^Uhs zHkr5gdxl-liU~!amFfX9FeUKg3jDQ5> zv-m_QC5BI^ir?)}P*KC8>%)|_t5P|0T|(1^ZyOce5fe|AsswU=s$YEIMYrRv7Dl-- zqklV1W$6ICKE6V93ORwZ+U5Fit-?2!K{p2cn%27WR?Cc9;XnH{TSz?<7xVJ~hBaJP z#m0!+cr%31@>;s{^bh-8Q(IDad?&y_H)>8c22rJ+A_#_$=0$=w&MWzFx+1NDYqqJ= z^UYe{X?l%>;|J|#A@@{MC={vv)0BAqF?L zbSSMV!!I`4hu0Y1M54VZM3gL?ZPaD{v%ton2xOuZ(o7WMDrHP3G%o&wGekg?vem0S zf~-TXqR(#QATt}g@l?HR?3KvuY!9yHl3t-De(OYrU`tDu9<7~r-Y^4UJW4G}?<~R-ClTenvyf22m z$gmoun@|iPP(VxL|97_nXy1f_284gqhHF@FMNxxzUrYbJ$loB>i84p}uKxYXKoI{f z3J6pXXduu*V1U2`@z)O<1P%yX5O^T)K@fl-1o0Wf7Z5}sh(VBmAO%4Nf*b?|2ucuC zAgDpmfS?6I2ZA010|-VCOdyy+uz+9%!3KgI1P2IC5L_U*LGXa!1;Gb`AH-J>-#`d} z5CkCvLKuVy2vHDXAjCmPfRF?s1wtBx3PbY4-6mewf{-G0ohlZ z;h+0^3AFwGQ-UvvptR%tvdTJ6*6O-oDXNU)1G3Q`3`b#xRQx$DAN*hiuH8qmhs?jJF1QZ1U zQ63_>h(S;uo!yVuZTr{m%+Bo2&dkp4x8Hmp%~lo9G)hvHMQJosRgR_6G*xL%qj{>5 zxPg*YC3^$CDJzbl8|eeH9Mf@V3w`;78l45QVnsUH6#nCMnrq;t7><5B=_w_ZgXM4- zzjr9vP2&`;&mQ{35SdX{{PQ!)QawtM9ozTPX?F!G)xC3o{-hvD>KJp7ECy%R83vbR z(n&)sR@PjjA&_Gsb{wHqic3366J*7aaFkwCr1&A5IrENFs-f4}f2HYtI2~WnCB?}M zR_xEFrxiOh%`vDXJ0|~)$`lokwnGtQJ1EhZzmhEUB;^=652dFlMb#j!?fA`iWaB@D zutb|qbKh$DF~>xOx_5>a7_@nnJj$}~DL@e@Kgsx>-tB=LQRiu9e+9CdqE$r>jKa%g z+_EV>_~cW#2Y(D@SKp;0CZ84tOR(<;qY*tfo3gUnf#d?>Yq)$Gi1K{$36k`^A6=PD zAujYf^a6HK{aeXKBJzwZ!%$T~K5Ag~4Fft0$WQoRlx*J1QF?O@O{SqP zT@TGS=m+LoJn{Rxq~YKd@^{NZ?iC7q-_z6+2wei+V3$6EN-bTNwf~cnm>BOS2APas z-EiWfy>EV8xJxIm{GU#ex{@DV6C3;X$ysLho*Xoe-vKUt`rUL9YzC*_*$UZL6U!~| zDzgm3@FMa;`G?dG+Y8CxJh;Mwk1H&JxL8Qfn+tC#C`?g#$dOd04PuH|&*y3}uZZHr z@_X1{M8n7p3j^c;KNchxo* zx#Qh6*V}JS-$8mY4Z$A^Sk_0yl7(Ivde}*9KKHD#n&?wuIR@Y;Wm{CeVgOnhjS)NN89+j!ro(!ZXPsI`f#SjfiGB)yFC(AP@^wV-1v}^J zx=i)<(*H7#VVm-sth~H3w$1QmyUHm984ERw9ATK72Rd(3DAq2~e6gAl0&gpd0n0Tn zT#<-_D;Tjzae8uVh{NX5yJ!?AHyM2(BVOe0Ymq7RSCYfVx}sWH9@def;o!lQ#1&I@0<0 zJl;ilW3nZwUA>D~Ud0P0Bu64_*mj&>N3^bFiF2x0hYh*7QbjXF)wc+|O~w&Q36gdJ zOK-Cv$1h;-ZC-)j6rfg?&SH$aL&LknwN)ftL+Tw~$E&Vsxb$z$hV#|ktNqR$*2%e2 zjl+Q!0$V-fBdgg7##JG)ntmw;)#6w+*+pbMnyXoe!#^UXhDJp4CTH(^D;Vf9wVh4f ze$oAw1QsXHOfA~CYIstITkug0%@n_D!}S`PC$@KDY%K?eLbHx1o3&6WqK52RmhNSD z9hYU>8V?;ob(Cn1_13YXj-~pAh7)x(%N#I7$0AQX6r=94J)Kq^Q3LgWKGWQMmpghV zNXIE(JrJkw(sSl@AqomplaAu+OMCBAj>#0{G9SMPy((DE0Sd%Z*#JulG<#F>e*jKIWjeE>$@W6y1W!N9D)$4h$Q6a&bM&~;2-$K37> z%$+k;qQhWs;FVhQk_3XVyMaF~e#p({wm2QplX=Fcn!BTw{YS=c|GADIV)UWNb#|M0 zm&8}j)?u5*ctx)Q{T+#So2z5eblrv^CkvK35AjZR>3s|F2PY*7+alDl;=*ARW5=7{7su=PG4>=IIRY+S65gy(&pQD_sB?)fcV zY@%u6AMavA6Pxpil{%)p!RAojs9eMC0n^=j9{~?2Uc{#%_W@6O%L5uG@-|3dzF56U zmj1Z3Qg@e@(-8L)Ph;aY9l7iEFl_ya9Uy9lf^3GIbxa^${}k@c>~F2RF}Infi^>e_ zYo?LG{LpIe`^cla*nPwS+->eU;mCug7@dh>4_Ta7Gm-p|ekR^LEK6UUc*uLtvM&^{ ztA*=rM~#Mn{d#}Q%3#wjYGDOm&N9$@TPRi}IZz?X*6$GB%F#-0Q}W0z2AoAoE4?5l zoW+q=8m$`S`CM#1kExGX|9+3SuTu(mNwv!3qZoJz2Od$ZIrfr{HM#n;GU|10>LHI= z2cPC+@?*Bu=U0&anB&B;B3TYW=Q-A8>tpURqsG8EOZXu!v5hgO?-`g++T`xjU;tAp zbbj)0>k5kU94*@K!`4m{MMM+kx3kkHG~=swnrd!LiN)|Gu>ly=!M&}CL`(5xtprCS69To4ct>26jO0g;rrG*TknEJ#SBG=d=Ajii)_ ze3#{U-{*Vz{r-FBoH=La%$alN&b>23Z2Bpr>hB4JSVtX-MS+2bhlgSBwi`=q3cb2G zvZF5vELRu6bOLsxVkj5?iiiu~ps$J}@Fhp*nExiZQFW715BG|y3gGCVMJMjx`Ei|J z?nZQ@O8lV=nyPZQQKCYtT^0ChG$3>|022fR1QY}o2y75IAaFt8fxrhrfEo=TTv0}A zHg*!CO#^h5iEjYEI|<1EjR804h+O1U?}A-!Wc}zu@DXeGUJH|&^ai`7sB*^ zn70*S1SnAaKSBZPQh-t4~b|r`Ap$hp)7C6wt zW%;BxfJr?PG89UWBo-IV11qBgH0((5fbv$bfa)}2YM>+%be@VG2@!DEil9QFOh_PD z|5^ZMz|f&efPsOBaTTfnXvIxH=Lrcmiv9@+*>x*G9`OIF7)U1}1Rm6r&;moC0YIrg z2`=E>2?mL%8%aL|T{_DK>;{U?lZ4{l6^Xi4Pa@5SPC2cR>|Q$#4DyhF+>b|UB!E^^ zk|5DF~iu1KKKjua0y{g{;804;KL zD**Uar0Bi`=&JrH_H!E8?PgV^G*B;#-8km^Hvr{tq@+M8ij)K>t0JX9CR{$C)2HbE ztghgB7>E7)-uoJ=Y|XZ47(|~gm-+Qer8`vLLTblSpT1EC5E|muOVCp+`5^5fN1NiD zoRQA~T-|Pto@qj!(o{)Onf`;(egiXp5@%bxbAPdP?z4ppiCdmR%nIuYvgz9;n=PvH z%vqIM9R_|3$5;iHuyjv{)f zp^TuG) z^I^n6yw1*eCLD2i9>p=PJCcxa@HZvv{pq}{Ok^5CLwmcx)5q$_#iD z@`lDSUti+Pbx3o=dT_4?pKq_hLnO$Fg`%%{YZE_SNBs#6Z%{Jw4rdTwDt)S|xSsuo ziN5l$RmoO*Pei&ue6ePv`BZ8nQJh`+WDyyW_x`hE1IfMu=hWe7t(~&<4DUYw)_#v+ z?XM3FF12#sBb)NhT!Wffx;D0WYGm6?aKk2E)W3+s%!g>!KNDQNcZMBM2KUucYvr$m(@f?3A)|Wr2m6<*lRx#sblEyG zQs~C7bnep#`|Q*Zj_E`f>8F*A_c2+1M<7(K$9N&k9!Ud)4Ak>bU8G+4|hfM4E1*KbGZ>xm*`vw)6Gr8nU?y}iFWRu5< zDBQFh`uJQvB(hMe^exr_f-}Y~72BhO8=Uk*!aA~TRE$e3P4&t!?-1I+`wX|Uf-;9Y+@yna_BzI03|*m2@X&QV+PV3A zd%GsI5{b%xF?G~&@rwE*VoRVH7#_G782>(b!FwEdl1+32$V8EHBK5!S{w zTW9il79<6WJ;9)aidU4MgMh+EFH0YIimxu-uw@PXv0o!C{rqBneLX^CV6Q|Zurdn# z*~2{r+(+GZN=IN`Y0o`(+%o)*<<~O&c2qe(|J^?n#L&t~>ClypYk^8;-eJnHN_v{4 zwg@@+v&h=c5n_uB=_L{&!VX!Z&ag?cO0rC{srwd=9kmZpHhKEU;*mjl;k+WI)m>hL z>Pmt4RD9}QhaU`zHpH+6V{dw+mTejNpN*f;H?42vJ&~99Yucf)9w@c7)^bZrvwd{b zG#$T$7;DP9BQr|9MBm9bhA>1mGAljsLQD~J>Z%vL+en!~j(Jw66&S5dzgwd$X>c#k zw)vKPsW+k(j*P#pGv*mJqhs`X^{}#Trdm-YT-CVzx7TZ#XRZ|$U%qlQ>`)!qzEU4u zy(!YA`%pGQjB;z;(B-B1iv{-I8^JuKiz(rTKMr}??TBdGaqh)tb-Wj`zZFkYOHK4^ zWTlk!@lmOjzI{&iA`4L=wFPz8dx+kXJ^66O*UetDymV8@hfYCymo+`O*{AwBGTLsh zxOojaE4}J(yfsOYQC!H`P~a4d;d&&dEuz_UzliFnu&JG|S;wpQo0w%P2aQTPswt$# z!DnhxwCAzoX6G1XZX zHCyN+n;gGLA}dlXY2&@6m(?GB2^K%vM{=`x++n(SkLgnFYzDJi7>hZ6`eZ{okAYyj zyqX|;R4@94E6W-?>#sZ8R>+rM{=P_*2|MN7O#Pvi zPbFELQ%Ff-oxry!dFMf{u9C=}$nNQ6GcO*=8i}CwYelAY_qPO6F1t6_#w+;CN^VEK z*c}OUaGy81bx*Mp-=gs8QpY66Qn3s>2=J=+&Sfk#EV6@ZE51RH0r9w{w7m!6K4_(! zv*a}t#}FC2(I3_Im44xZ?F-Cti8@OerFWN3!#zt);&DFt_Rv?)jZwe&eLDBWty758 zqE{o5W6|3rcP~mZ#H$lFOKw@mGO!rng2@yHk*82URViMutO(K$4$^-8D%IjfCX2cZ z@##qvJi;~TjhxyA%QFYTu9%!aDGtNDzqu5~6tW+l(5npH{7Y9$_V;E+w!CztNT5Wl z+7Ps(@;2*1ll`X%`v;zZ0x10p?ABUHbZB^vS^uKoy-w}maLfM1GBB}dA6A!d^hfjK zX@QQ5Q`PB|&i+W&B3u9B1{i?_wZKP-oZ zfpGv%m;QI85vBm=7XO(};2;Go?akfXA`PYK0v~{?5U$WKk+g0 zw#{2+9ja1GW!3VqYg7C(*X;78&g6O49U^&Ke~&2h&DNlm|1j3R?Vklw^FMhJWx+kg zM4DY6uzVDIcb_RDUVeIJ^hwV0c|y2pEbNxLBEH;&gM+quLzMXkZZ28_;q;ZlsW>v@ zY1g}Mzw|8)Q5@CQnSRfav$3e>6Uro|?X9sxKlR@e8e46}8hi+3x1r$gcX9aruH^fd zQ&znkT&eC4Y;l<81=-2AC6BdILskM)GX!J~KZ#Iuh)F4~uSS^D3{bpMiz-!pmc~t~ zLe@{4`1i-m%;-;jhml@x)B6eO{Kf z8aMaI_@3QcH%MT8U>&2(Vd(m^QQjsD!^HpHR-0O9gGzxnZadEbSBy5V47YUVo{!Z! zPqUJ4XW~%9oA}_JDtA)k<95EVjCywq`dp!`wwBs(h9n*(tnN}==j=o^pAEGiza4G0 z^F5Vf*o6z*6ja;hv0Xd735szmG;$WhymvlwEz!}`h7)knbifh{QxIJBWENs_yjdso zN?j+M2P^#!a@xARi3afZudQ?mkGJ${O)0;)I{H>E{xF^uRx>a_o@?c*Rv_#?R5uhE zX`HGwt$x&da7^X)JT5mmYNJh5A651@Um6QfhQo|Ki_NHri_5-=6+%qe=~hQOM|yhu zG)Scp#(Mfjdh-TWnB48;M;69%3mJ#6L6LXZ;_b3U<@aZc*OYJ6TlCH1Cb1&pBM(`cf(`Sz6p$>Omd3u3 zMP(BN=CYC=ZWFv1&Oh;H&b_y&0SW0Lw=mxGXCLLO8FQjHcIK2dygBvtox);C4hLKD z&f6KSmYU*=H6e0s#ihwZ@4L*~|yp4j@+aV8!6 z*ISn6Cjl2PIGdF!x=vzZ+&g39qmxcMGv@{O8s5C|-AONC_pr1dS@Ri4_S=yR#lNBN~86=xT z8*K`ftQ0J&Zp9Dw?Os=Y91pmK`&Ll2?R{F=n4***71hDY`)`t&w+)ICpSC1^Z!zb| ztq?-8DNM$bX7FXeZ4{gNc-+q3lv6!i4Y6{t^{KmP-R4uB$Wx&m7G}F=I1}!!?B6As zy_lIA@kx(4(Jlp^}2<6-1*!pYO;~}xyS8q zbVyv2$Hcz!7njK}uc4xtI8NpntOJV-jbZA)RuI1fNSPJ__!gji zOZSRnJjj`rZuq}6+vg5!w>f11jOgT%Hgx43m8b6YN30;|T*hk{mhFZ@)GbTbZrDDkLIXpL}GZL|%`z1fX< zcw!#rsQWU~LMA}-eLCfOu=q@w=u{{}uBdyt+z(ZrNTR9NxGFS{24%f-*Y~R!klry5 zac1oCNMkF9dTY&ZaMNA%fL16GJ@7sTjvmjLkUsto4JrScTECOXpPF(Oy#>x7f2KDK};2)PcxwQmO?JZDw3cI(YORT_Eyo?NB}`{f~>Kj>QWSI)zbM7U7uc;e9ery3ZU2~NiC zLP`+thuQRG=AwQEb0f6!p@T(|#S4VsSoCqb*058U((EDZnO3g!<91D+ArnjC5!>3x zr{8kdtCn=J-4v!G)0F~xYPNlOvJLo*nHI<0X({4sou-Ex>jOMat+7{V?oGYF8@e?V zg`=0cRFP|k?3fm4*Gi6{Aql16Dv@t}k*Z8q;5;p6kKH=N=oIb!t$Zu;e)epwMFHaI zr|eR}sWlroaWv1cJrf~wNUr@%z)ma!_&g7F1W zUa{3WmP4P0PtSul^6g^nkC*Y!$wd*ioqVX+e4;TAVPyZRH`7IrfLC0zYdWB168ey<8sntXYRJ(BZb zYe7OQTM^m%NnP2M;G!E*v>{DmSY#(1LI?0U@zm|zZhh2~E?uQU#%NKXHzH4x|9LLP zSRa>gRCnlC#Ux+6m;u+|6N{{HKEu0K3*@K7H+gRMDF=G7h6XNOddX9EPt0xSC%|QT z@0PG-xU#O&s<&zPOYz4!xVvYWbmB8aTZTqyxeFny+9+6z+z83I^G7%H;G19l3}2?l zFW@ueJEy$<#9yC8F}%+qTd>6KZ={UpAZdZ{>a(7Z+b!Od2Z=u^+sCJ83zkk!UlAeMNgb2Q zmb6c+!jLRhTo;u2`hPULMI==heHcV;Q%L;oIPm--{WmI(2mDx>d1@%|(?77_6cr_M zs_iItsiddlHoRD&*KO&zKI5o#pr1^>(lTIaj%=RU$+bJ?O@gaRMbWse9N1Oan>dyh zK3V80z>7lgP1q?{V}>5ac%405{Umd_$)m+-zwwcmpp)NwA|XlUL5Q4GLZ1uWrX!1k z>Z5K=Pm`Tm!e#ZGZ%+#)l1r5J%WIxEigbCD2#-e)5JT|WRZ}PgVV@FEcfL)=)g!r1 zBarg-jXs3wC~a{o?2#^ytUC6Gn-1@iZ%kX2G!lBs+OATkUOK1BXg1eyFz_Sz=}aj4 z1b)@MB|gdU$nr9~>$dkYa4lc-F8SeTRwnY#e9p zq&6hzG6v^Di_WTqUVvY3T*Yzi_AI#Sk`Gz6=fZ0&52T;DBHc>AA~XXU@{#yfrl<_0 zeAvl=CJN~AMwHD&tc0$DC*+jf`zH-l9pmw7#cq_=p%_&pPdYd9K99e_mqWdMt=Uu({ zOEXxmOy-T5cNm%dNy%Hx+dRX@Lh*m-DtJZA%c=gzoiwca09QiN{Pd6TzbS4>2ruY_ z3Jq%9-j{XEagLC!Kqnp<5PsVz|z z{o$PU28ToJ-Tm&<3b<?*Tqk*gMi5tq3j$w4{}rH{9)FchlCe@q4pIY z*I)b%7bR+$6L;QWT!mTXku3+$^}1r3ka$OYbGfyKlWPo}Ib}aSEw<4uUQFm{wk--b zOy4)Y9H{7W`a*S72`{E?dnsivL2Uk;i&m<^1y3Khn?NoSAHQC$oMNORqO|PzMF4Re z1@&o4?6D?S0Lj%%;+a5SI|KO1W|H)JBEjTyJ&}N+mM2MXLjW#K7!`2E#B*{pw-;2o zs{!1dBjtpW1y=*l=Sb<0;SSGsjvi;y_%%1*mdB(wPkaA1lKK^OJ2jhvyM-FL7XD1r z1$UO$s&$Ic7mb3lO~uj+{xySlE~^B!ddD9MF567&Bq+^!{YqX{^yu4v?_`f#{e9-T z|0Ej!Yh+PC)}Us4bfO^X+Mh4nzr*lSFNv6m=+uk^c1Jzr#}%2k1ytL&ZM3(K*vnq7 zu~Hja|H+o~9E#Okd0Xk3a}eRpmq2!N|8J|zx+V!jahQ@rU8Mf-uN!w>*3`;56dW;K zIiR~O$Z-z?149X5i6UhHghELPu0D%nqkQH`jquUytVjv)WpR6hlot6@kKB-=E0az^ z+(;Y($0{zP6l1P)h^#3Iw|E{*hDp~G!6dklXx}i=Z!fNYZfGO}jp{r7PILKDE3?5! zM4dJv@JoP{U&fr&$#hlf$t5^a&f{bxCEe!^C9F&CMESb)ws>)d><3WYrml0Ck9tF| zW;Ff%@ZB5y>5-yy&PwE?fyKK~iIqW2niM*>_J-~#KKaOk2uj|}OdoP__{@*+v#K}t zXdF2FZr$6&A5*{NtyOn_d~v$=&Zq5No*>;%ACI)$l(9`*yYupNj<&wdBnIW2R0uPO zr`5J>up?jHyLHD=`!!un$qjz1dH9mYIApAFt>FE3kEcnjF5dtHGHW!^Yto!~D{IM5 z|4ae93Sk~yCy<(}p>v%2=iX%Luj6fFYROqfMDZ6Z6Ksbb?5;Y5UQqsYhN_Nia*Vvc zsUbf@#HK%g{Lvg!uYtRUX>bc3{^#m9VcAjL4VAkWo7)aO<*n3Aw_N-i7VD&k@~(CNE|y1LMdKSb%H~o_=cf&r@H87uPhnbWtN^_8(sR5egwDYQt`tz!$=t`vX2PFG^S0ZfgM*WY?l*#*&OOGR?#5Z6_CZ5y z*Uo^COd7fZG~_5&{u_x@mZm_5$j!|v92DjO<7Us4Jka4oyL=E6;77TvjFsM54O zVygCRMD8b_K=&l_^`lg>iyjMw{k& z2Af1U-VHU$a&or|{UR@Se`f=;ukDL`@mavK)X$|3Or>)>YXjBM?Z;)-p3%k@iNBKz z3SL)W2G?M89|t zwsR#8BKeh@ALJGB^?!TqNRc8CuQ2km{Tsoj7panJA?3vF?l|5{kqekO)=%bx7D^aC zFgLrgPiV2xh)SQ>U;ag2B6rI!4|6ghKSHn>Ff|^&#|{-m(vK~)1rPMUqSatvq#uTj zEp+DM6uktLJv7XXm9a!jTrRHSJ*h2TzrmW9&;@76toUk7!V-d#{1I)UN_y- zI=Bmt%o*}sl)8=5;(kScsZw6q6t?YJGWBnLdz1Yr&QzAeHuHFqMhdChUPar?u0u&n zeEjRDob0F^^42$$1p7Qwl5lh?1NTj`pDK^^#=b_ejJOmB&v59>h)7BfjWZZ$3%vaS z5tB+(DYh)L(lW+>;OnWl9p)C@lJX(iOnjHz`J{`JzlSdDhXI$EUx!*ml5)0e0Ylj9 z{&jf~cq)9z+fnDCxX63=o@?jrV2KUA`mjpJ?Ufou zldbS>J>X`$!StIBdjg_mhqo!m54+3b!hYx>@{F+g_xYtqZr5?W@rvxldi`K{U5C#? z#JX2?`kU#-ye1E}0kMqr>7$_t-cWqnMaB1zCzyxa^zaVFIn(d+Y`bIWMLpd@rBfDr z#d-_Z_g0@Eb6JNU_dFi3PqWr~7fRQg7|U0nf+IuahBcNj=G`Z)c+14fI9SS8%s<&m zVV!)OHiPZ=15dMC_FW}u!Vr_UA97W`G&Zyi%XU20Bzy4NnJ)p)x}&35n5Ke+z@C@x_ge<{$=d)pkRo z#)vX9ZN*pl3zX2Z#h0VMQ-a3#iJ@~HX+dufwoOiJgLda3a@?^R(78^!xBhE1wos=Y zO_@p2Tw;IHx$(WkAk=^(E#U-)`6!(XwN6cW)@oxx zQi&Tw)sY%AS)58k(r%*>oF&#CzDDoO^T@37A60tqeTkstd{OAwaZD_V{qQtA>!nm# zl-tI~MHZBubgOVzK-% z&3!g6Z`f(dAY0-&XB^de*xLkNzm^^{yh%;X%eP8M-xUuF?C!0U@RxH5)ztN4th(H~ zk%em{_unnMCdUV<%fHmOrGFlZjkMAp#r)2Buj9e*?Uq)r*&RC^<9SFr!Z)ae1q9<&|%bFoJ0pGr?D;45R-1hjS4 z`DW%+T|@MmRoYQv5sW{Gm&;Fkc(&7qGVevBquNL2ll(f9)SNC)e_9=0?u3N)o$5HR z2di2K_ygbh3Aq|b#((J7m1X${>Xs`bc6A_;^hjINCpSY=Z<_K<2bDI)4(h&t*svfi zYbpBBgwvfl=B{E2jPfx21C`wu{x#n(WrYp#!z=#B2i6jsL!l2# z>LjgqCE*EIs`$J}9pEOR%<;IL*7x{XJmmY1Tl1&dm?jA9GsRsvS^Cb4Edm}p5+^~Y zuPsP#TYJAVy9v^OmGSaTh2zZTgOsuQ?Kw#g)8L!w7q80xIMB3zE{egRlbT(T{NfU2 z$;uQn;=?wudOT5_26f~iI~>;)^Thvds7p@7_x_t)C_g`DmlfYH`AxSXt&{VQwhp~d zYUa}KI!K?(SUoi^9uO`w>S}a+)A=l6*<)iHY38t$x`#!1UDF(N0&{8(Z&5jaDZdw=P>ZOPuuc|C4);cg{SvmKT zlDf!QgKl=_c&nv#k1Tq~vdy+tEfRcgLL&PF-=Y{v2Z4>H8C0$W|&wLM&QfUJN#Cd{tMwVLykdD)P&~ z+HL|9elQqd7YowbPhpQ(|FcsK{kX;j_TIp-QT-t>j{k0Gqec;bfC-UYO}$Z?)v#IU zRVuFBh5#_EhEV{ehu}6xvpSd{djBFSwinhzd{rh2+}d`R7X7$SlmhqmF{{I|QNyP& zEg>L1l86>?3Wj3?mlALi0Phci6s02!@1g-}oZzHLH9c*uhgNRx*DKTMz_}NBH)Z!{ z%cijd+P=x8JvDkt3#kWu%ebS|#&o^ZbmlGMS}k?`#-@F=s=U=?kw3qQa+IwqlD~_I z`Jnn6&o=d2NOhOyWUl7ihLco2@(yyFX()5@*RO%?=N#tAORoYvy>`-NP6Dl02WGzK zUn0-v*)V>dHZb7|ZFSSIU#PI~x5mU2bOojzu@R1hrZJJBzOWAR52&8f-e7zu)SY?w z{ZY%f&z9`&-w@oz!3!EgIlhI|*^K#`kTWF7V-|$)UVwXh{j%2a$&hn+$n!Kl$?xPt%;dTlMuXy;M~~M~UwJ ze5R$Dmi6JquLWG9@7WTisZy1)`J9K7Pg0O6V%anz2Nt&~V~%N*9_WpT7ChL0#F=At z{xGg@^Yv`Fj6Honov590Mw*L?=HL-cLHu))4<$NVJqa%dGKC%_=N`wvrmH^0uG+~I zW$3Y~iph~z(0iTl-BXx}Q<-d7ViG%;2(C3-%dL4W=D4!-l>Yv7DAQMOI>P{O<*w*` zBsq@IL;f^CIE=*@N^`rjfyj#jdPGH*eLGdG@>XDo-L1eVv!U`gsx-SUZeGmm#6|0y4{&r&Mvo$XLEy()3aZ-~5~qWApU=u`g)I{80ZUAy~lB5vb( zS+aHiwiS@o))3aFK`zT*2HzgBznQ&I>x}eEdU=VBw0cwpn^8|`%AJ~Gl-J&%U6C^^ z7*;ZrX`gtF;YCTj?YQ`Uq2c9%C_s43~WbF8P3XpjXf-_Oktv+C_wgv&eBw+DJo4yJdg*AF5; ztg8(v+LSf7#qKXS-I8D7)i<2ZZ`Z3be)-Nepwmsy+E|jvq({Ri>J3aeSYs;Y`$JYd zY#<-e8=hZP>Wxv-mlaU`yhn(^wT<`4TG;FG<>Ihr?B+w$kCSzp0jA__%nXut{+AQ7 z97IMqp&_SuWsb((-TA3Ye~N{tjbfi8>6{|^t-jph5npL_PZ@arPUdErX;HYasD4Ju zQt;|}>ac5K+#ToF30z`Mr9vw`Z|6C>vlk!g<>)v)gIkPJMs!+Ccdb3l@K9um8n{_F zu%Jg2*-Fm8Z$;HO`Oc|(*5nH|W5tjoUM=68D};qSM6xn*iiU}c>T_sxG$@?;i(XFMDTx$~)|6;xU{-#GC2`*w7hfQ7 z%Gu0io-zL>(_EH)GxjtU-9Sxn$!KF7Bl}FBS1>C*M>BkpF7GKF@4}Yzsj*?}$#(*O zuacL80qV`TTx~9kGI#ySJG>5%wP%d(r;HV6tZF0tr#rQ0@tn`Gc;3sY4CpJQvQ}fU zXaMgO>8lg<-xrWfZXIV)>ok`y;va=Re*43kDFnx!v|hb)H71{nDpo>Qa$a=CLm?y2 z)d!~`CKr;*)5_>v?q?VzxANq(ttBZpKd*rlQl;Jto<-)!@t8*Wg6)%i$F$RqPTwa{*VyN%O!{d>Xz#>p*AeLx8*>f|;pU3s zstU2l&Ju;YJvkr7to#JM+e|CmvF8S1A3YJ?x zwm^8tGIXfhlL?AI0Yy_$qx0u$uixgazj$7K0={G4%2j(B2H9QvvH75#TkRdcNv-%L zuA5aot9jSiyA6s=ZqW~n=Qo6%vE@(n>kzx`4S%Xu>rVfCEd04JcOzdB6=fELOcmnO z;km4|S-M2;@)(+qZq5g%AY(A}x6G?q01BK1P#Hl@%y$8)T(}TYE?6e-&eSO6W$-95 z9t%qao^6B5ckG5YBH1I8s!yY1=cOK1+O*@mfmpOc_jFqJJIEAAbL#(~oCf~@__d-{;5pHPo(WBIx z5XXE}z?YvBPjj)TkmtU|$KmcDE1^;v>qZ;e7RmHI8i41Ddw=Wz_UgG4VNTo*X8i;k z=I!rq2K4#n_fz`tB-6=utauEoQ{9GmFDkwGlY2OLvO&R}C(25qsH$Vt+-DEy*iHI`B2{|#A->o;5c z)aI{~`sRv~m>3wnkn1gm|2><5lKlXmK%Y|qj|<&E33kIR zq39`LLJ#~EIt8H5l~@nJVJL+Gc;~-odO}$a;ULIBkb|HAK?#Bi#0?PCAZS3)f}jII z4}t*%BM2rC%ph1mu!3L%!48501Sg1_Ah>KL`O3f*^!I2!prqR2to;jG6)qAsvy)rsDsb| zp$S3@gf<8r5V{~9fY1Z+5QIJm0}zHF9)U0dVGP0q#d7$#G8R359}7mH53m6AuMwhX zj^1m8FgoFMgrEbmUn4%Dd%!FN!F_%5MQ8}*e+WagqoqJT9V+w<;sYjHOz17b_WEOA zS|q{<%>%*#P=P!e(e~eBQHRk8!RySvYy>@UHx@yS&O{KI(g9wv2uA3mfHoj07V!XJ zjzVAoJFy6z>y*MfgvNF1-8;m6U@rvBoqUHdxK4@2A)Z{PlHw3{=oAV!9`WKjiajA)@@h=A%4{5bZc<674~QN<=oAx)McERUt^PHPh!n@?JHf={l}K$AR_LA*8Q! zF+0I>J?jy^|1B3F`2@P<>itOY6T<3RsjLlDs%%2MxOTZ%3qtw-si(9e2GHuD0v!<2 zhTuf2gGzeWQdjB#a|dD;Ed^E?hZX=j5jxjyLfeSli>SLUzoj4HaGe5UKmuI`3iJo( zwJ}%1K9X&6{5$^w`P!vB9n%9S~&<;a_<)Aac z0;SOjv@?$85FGg6fd?h@Q3!x-9$~_AMgIT&%G}`k&%b|26e)1$8!6S*=_d++rx8Jf zR``E=2r*dxl?GGfjsGg(0AvdYA!tVnnnioHy-)$V)cG%k4>)&`;sE^%2qJVmGF(ZgHS!Py>gSwK($wMz(E z={k#{(EgvKfW{sv3-EOXY(xDqDIj@9$_z}e zgPNSHpg9zmq`Z?TtaY%^BHNm`rkc2dg{g=Q2yf?rQ8IpkkcQs)&z?*w8u%V$~ z8<#e~24%~k`3!)WA`Iu6FR}^p@o)dbci2QoLM8A1Lv>zJcK6T}Bfz+Y5Qks)7ac+a+YwG_{{@Y+5m}|lSOnn$9FuM(UkWA;Fyg@^7 z0mVN74B9If0IEO1LRB81GpQ4eK|{e#A_8=F!MrIj4`N{gIPW4@0O}ot6y(m6YeLBu zMhix(`pz8ke-Kt z(GP67zd(XFa1=QP2J`=f#G|rn+5AJ$6plJz{t%%8rK<;>+y(}%dJ%#MJyxOZXlMf* ze}Q(aw!whDUKkS)kOg+pg-M?ElLY6N8AxBaINIF3M5ZVm!>j}W}*GOmU}NZ1e% zaRgRXF$8oTA(SDPqX5Yz!vNt87#;BE6fAr77%ban2?l6x!x#YO z6R_EHtANG{g73PYznp+|^lbvmCkRcF>QLxwx}wG3$a3Z5V{I0fUWb{__mUBZ}w zl2b5d&W>QfTn7JxX%#k(D&ysAQ>Od38bHa`PP>(z>FA94+LC-795{}76d}T z!_F``J8+f`vXp;=th)qoK$;rPdZhyc60cYkByfP39?k#^{RWEx;BX*@2`qF1#}o#L zoP&mDlLOl4{|rgM@D)dj4lus}2T$;mpA-a}^@`vI?EfHyAV=)i1fdL^5Jsb5) zD)8OBX5YL3Z`yF~E8;0+jrZ!x4s2Z@L?AZ=t_UXJ_Fn`Q|G%#s7#KAF)9<`u@c-v5 z!K-hKK=L{(Dg#e0!K2ves&F9P5YBSd zOV`f{UP%&zLV9R|8597=OiWW+ zD2@RfzheRw>qU#{`2KkUYLm(d0R1X>m9yAZMgYyB-kSi4ksA6k|W>Eo12l$OE zJ`beM97uzhDnci$;lPADoEgBM0}X>gO&KAqc7PDnR27Qh3Qv3i=A=PE`DdO0BbF%> zum&|1gKT?U5sx5AK37*-!1@G1c5TT=kc8&EgacY}U_gA1f#U%iSf)Hst=DK4E4mpf z*q~5oI2;H~x{e1TAPyU>m?{#e!ZuZgUdFxn@)2nhHaL(yj^9D}pBT ziqMDbWM5rr0o)2O05x*Jz+uA!6&(wJ+jyo55ULvB6`m;<`i8uk cpus = new ArrayList(); private static long uptime; private static long processes; - private static long updateTimestamp; + private static Timer updateTimer = new Timer(TTL); private synchronized static void update(){ - if(System.currentTimeMillis() - updateTimestamp < TTL) + if(updateTimer.hasTimedOut()) return; - updateTimestamp = System.currentTimeMillis(); + updateTimer.start(); try { BufferedReader in = new BufferedReader(new FileReader(PROC_PATH)); String line = null; diff --git a/src/zutil/osal/app/windows/TypePerf.java b/src/zutil/osal/app/windows/TypePerf.java new file mode 100644 index 0000000..1efbd58 --- /dev/null +++ b/src/zutil/osal/app/windows/TypePerf.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2015 ezivkoc + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package zutil.osal.app.windows; + +/** + * Created by ezivkoc on 2015-07-30. + */ +public class TypePerf { + // Only available Vista -> + //https://www.webperformance.com/support/suite/manual/Content/Locating_Server_Metric_Counters.htm + + /* + "(PDH-CSV 4.0)","\\SE00035694\processor(0)\% Processor Time","\\SE00035694\processor(0)\% User Time","\\SE00035694\processor(0)\% Privileged Time","\\SE00035694\processor(0)\Interrupts/sec","\\SE00035694\processor(0)\% DPC Time","\\SE00035694\processor(0)\% Interrupt Time","\\SE00035694\processor(0)\DPCs Queued/sec","\\SE00035694\processor(0)\DPC Rate","\\SE00035694\processor(0)\% Idle Time","\\SE00035694\processor(0)\% C1 Time","\\SE00035694\processor(0)\% C2 Time","\\SE00035694\processor(0)\% C3 Time","\\SE00035694\processor(0)\C1 Transitions/sec","\\SE00035694\processor(0)\C2 Transitions/sec","\\SE00035694\processor(0)\C3 Transitions/sec","\\SE00035694\processor(1)\% Processor Time","\\SE00035694\processor(1)\% User Time","\\SE00035694\processor(1)\% Privileged Time","\\SE00035694\processor(1)\Interrupts/sec","\\SE00035694\processor(1)\% DPC Time","\\SE00035694\processor(1)\% Interrupt Time","\\SE00035694\processor(1)\DPCs Queued/sec","\\SE00035694\processor(1)\DPC Rate","\\SE00035694\processor(1)\% Idle Time","\\SE00035694\processor(1)\% C1 Time","\\SE00035694\processor(1)\% C2 Time","\\SE00035694\processor(1)\% C3 Time","\\SE00035694\processor(1)\C1 Transitions/sec","\\SE00035694\processor(1)\C2 Transitions/sec","\\SE00035694\processor(1)\C3 Transitions/sec","\\SE00035694\processor(2)\% Processor Time","\\SE00035694\processor(2)\% User Time","\\SE00035694\processor(2)\% Privileged Time","\\SE00035694\processor(2)\Interrupts/sec","\\SE00035694\processor(2)\% DPC Time","\\SE00035694\processor(2)\% Interrupt Time","\\SE00035694\processor(2)\DPCs Queued/sec","\\SE00035694\processor(2)\DPC Rate","\\SE00035694\processor(2)\% Idle Time","\\SE00035694\processor(2)\% C1 Time","\\SE00035694\processor(2)\% C2 Time","\\SE00035694\processor(2)\% C3 Time","\\SE00035694\processor(2)\C1 Transitions/sec","\\SE00035694\processor(2)\C2 Transitions/sec","\\SE00035694\processor(2)\C3 Transitions/sec","\\SE00035694\processor(3)\% Processor Time","\\SE00035694\processor(3)\% User Time","\\SE00035694\processor(3)\% Privileged Time","\\SE00035694\processor(3)\Interrupts/sec","\\SE00035694\processor(3)\% DPC Time","\\SE00035694\processor(3)\% Interrupt Time","\\SE00035694\processor(3)\DPCs Queued/sec","\\SE00035694\processor(3)\DPC Rate","\\SE00035694\processor(3)\% Idle Time","\\SE00035694\processor(3)\% C1 Time","\\SE00035694\processor(3)\% C2 Time","\\SE00035694\processor(3)\% C3 Time","\\SE00035694\processor(3)\C1 Transitions/sec","\\SE00035694\processor(3)\C2 Transitions/sec","\\SE00035694\processor(3)\C3 Transitions/sec","\\SE00035694\processor(_Total)\% Processor Time","\\SE00035694\processor(_Total)\% User Time","\\SE00035694\processor(_Total)\% Privileged Time","\\SE00035694\processor(_Total)\Interrupts/sec","\\SE00035694\processor(_Total)\% DPC Time","\\SE00035694\processor(_Total)\% Interrupt Time","\\SE00035694\processor(_Total)\DPCs Queued/sec","\\SE00035694\processor(_Total)\DPC Rate","\\SE00035694\processor(_Total)\% Idle Time","\\SE00035694\processor(_Total)\% C1 Time","\\SE00035694\processor(_Total)\% C2 Time","\\SE00035694\processor(_Total)\% C3 Time","\\SE00035694\processor(_Total)\C1 Transitions/sec","\\SE00035694\processor(_Total)\C2 Transitions/sec","\\SE00035694\processor(_Total)\C3 Transitions/sec" + "07/30/2015 11:53:49.003","4.331731","4.629110","0.000000","1251.466768","0.000000","0.000000","58.368806","0.000000","95.668269","4.370950","3.882572","71.775440","219.624998","61.336711","1197.055170","4.331731","0.000000","1.543037","342.298420","1.543037","0.000000","147.405967","0.000000","98.754342","0.000000","0.000000","95.856588","0.000000","0.000000","341.309119","5.874768","6.172146","0.000000","1282.135124","0.000000","0.000000","23.743243","0.000000","94.125232","0.000000","0.000000","86.960208","0.000000","0.000000","1496.813613","4.331731","0.000000","0.000000","253.261259","0.000000","0.000000","19.786036","1.000000","100.297379","0.000000","0.000000","94.635420","0.000000","0.000000","265.132881","4.717488","2.700317","0.385757","3129.161571","0.385757","0.000000","249.304052","1.000000","97.211306","1.092740","0.970643","87.306914","219.624998","61.336711","3300.310781" + */ + private static final String PERF_CPU_PATH = "\\Processor(*)\\*"; + + /* + "(PDH-CSV 4.0)","\\SE00035694\Memory\Page Faults/sec","\\SE00035694\Memory\Available Bytes","\\SE00035694\Memory\Committed Bytes","\\SE00035694\Memory\Commit Limit","\\SE00035694\Memory\Write Copies/sec","\\SE00035694\Memory\Transition Faults/sec","\\SE00035694\Memory\Cache Faults/sec","\\SE00035694\Memory\Demand Zero Faults/sec","\\SE00035694\Memory\Pages/sec","\\SE00035694\Memory\Pages Input/sec","\\SE00035694\Memory\Page Reads/sec","\\SE00035694\Memory\Pages Output/sec","\\SE00035694\Memory\Pool Paged Bytes","\\SE00035694\Memory\Pool Nonpaged Bytes","\\SE00035694\Memory\Page Writes/sec","\\SE00035694\Memory\Pool Paged Allocs","\\SE00035694\Memory\Pool Nonpaged Allocs","\\SE00035694\Memory\Free System Page Table Entries","\\SE00035694\Memory\Cache Bytes","\\SE00035694\Memory\Cache Bytes Peak","\\SE00035694\Memory\Pool Paged Resident Bytes","\\SE00035694\Memory\System Code Total Bytes","\\SE00035694\Memory\System Code Resident Bytes","\\SE00035694\Memory\System Driver Total Bytes","\\SE00035694\Memory\System Driver Resident Bytes","\\SE00035694\Memory\System Cache Resident Bytes","\\SE00035694\Memory\% Committed Bytes In Use","\\SE00035694\Memory\Available KBytes","\\SE00035694\Memory\Available MBytes","\\SE00035694\Memory\Transition Pages RePurposed/sec","\\SE00035694\Memory\Free & Zero Page List Bytes","\\SE00035694\Memory\Modified Page List Bytes","\\SE00035694\Memory\Standby Cache Reserve Bytes","\\SE00035694\Memory\Standby Cache Normal Priority Bytes","\\SE00035694\Memory\Standby Cache Core Bytes" + "07/30/2015 11:54:52.288","1158.202545","1403789312.000000","7621783552.000000","18949070848.000000","0.000000","13.942249","1.991750","1142.268546","0.000000","0.000000","0.000000","0.000000","408887296.000000","184975360.000000","0.000000","430072.000000","242142.000000","33556038.000000","600846336.000000","650051584.000000","408686592.000000","4395008.000000","2433024.000000","19406848.000000","10178560.000000","600846336.000000","40.222466","1370888.000000","1338.000000","0.000000","25022464.000000","46465024.000000","24576.000000","1378742272.000000","0.000000" + */ + private static final String PERF_MEM_PATH = "\\Memory\\*"; + + /* + "(PDH-CSV 4.0)","\\SE00035694\PhysicalDisk(0 C: D: E:)\Current Disk Queue Length","\\SE00035694\PhysicalDisk(0 C: D: E:)\% Disk Time","\\SE00035694\PhysicalDisk(0 C: D: E:)\Avg. Disk Queue Length","\\SE00035694\PhysicalDisk(0 C: D: E:)\% Disk Read Time","\\SE00035694\PhysicalDisk(0 C: D: E:)\Avg. Disk Read Queue Length","\\SE00035694\PhysicalDisk(0 C: D: E:)\% Disk Write Time","\\SE00035694\PhysicalDisk(0 C: D: E:)\Avg. Disk Write Queue Length","\\SE00035694\PhysicalDisk(0 C: D: E:)\Avg. Disk sec/Transfer","\\SE00035694\PhysicalDisk(0 C: D: E:)\Avg. Disk sec/Read","\\SE00035694\PhysicalDisk(0 C: D: E:)\Avg. Disk sec/Write","\\SE00035694\PhysicalDisk(0 C: D: E:)\Disk Transfers/sec","\\SE00035694\PhysicalDisk(0 C: D: E:)\Disk Reads/sec","\\SE00035694\PhysicalDisk(0 C: D: E:)\Disk Writes/sec","\\SE00035694\PhysicalDisk(0 C: D: E:)\Disk Bytes/sec","\\SE00035694\PhysicalDisk(0 C: D: E:)\Disk Read Bytes/sec","\\SE00035694\PhysicalDisk(0 C: D: E:)\Disk Write Bytes/sec","\\SE00035694\PhysicalDisk(0 C: D: E:)\Avg. Disk Bytes/Transfer","\\SE00035694\PhysicalDisk(0 C: D: E:)\Avg. Disk Bytes/Read","\\SE00035694\PhysicalDisk(0 C: D: E:)\Avg. Disk Bytes/Write","\\SE00035694\PhysicalDisk(0 C: D: E:)\% Idle Time","\\SE00035694\PhysicalDisk(0 C: D: E:)\Split IO/Sec","\\SE00035694\PhysicalDisk(_Total)\Current Disk Queue Length","\\SE00035694\PhysicalDisk(_Total)\% Disk Time","\\SE00035694\PhysicalDisk(_Total)\Avg. Disk Queue Length","\\SE00035694\PhysicalDisk(_Total)\% Disk Read Time","\\SE00035694\PhysicalDisk(_Total)\Avg. Disk Read Queue Length","\\SE00035694\PhysicalDisk(_Total)\% Disk Write Time","\\SE00035694\PhysicalDisk(_Total)\Avg. Disk Write Queue Length","\\SE00035694\PhysicalDisk(_Total)\Avg. Disk sec/Transfer","\\SE00035694\PhysicalDisk(_Total)\Avg. Disk sec/Read","\\SE00035694\PhysicalDisk(_Total)\Avg. Disk sec/Write","\\SE00035694\PhysicalDisk(_Total)\Disk Transfers/sec","\\SE00035694\PhysicalDisk(_Total)\Disk Reads/sec","\\SE00035694\PhysicalDisk(_Total)\Disk Writes/sec","\\SE00035694\PhysicalDisk(_Total)\Disk Bytes/sec","\\SE00035694\PhysicalDisk(_Total)\Disk Read Bytes/sec","\\SE00035694\PhysicalDisk(_Total)\Disk Write Bytes/sec","\\SE00035694\PhysicalDisk(_Total)\Avg. Disk Bytes/Transfer","\\SE00035694\PhysicalDisk(_Total)\Avg. Disk Bytes/Read","\\SE00035694\PhysicalDisk(_Total)\Avg. Disk Bytes/Write","\\SE00035694\PhysicalDisk(_Total)\% Idle Time","\\SE00035694\PhysicalDisk(_Total)\Split IO/Sec" + "07/30/2015 11:55:26.544","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","100.148515","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","100.148515","0.000000" + */ + private static final String PERF_DISK_PATH = "\\PhysicalDisk(*)\\*"; + + /* + "(PDH-CSV 4.0)","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Bytes Total/sec","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Packets/sec","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Packets Received/sec","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Packets Sent/sec","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Current Bandwidth","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Bytes Received/sec","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Packets Received Unicast/sec","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Packets Received Non-Unicast/sec","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Packets Received Discarded","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Packets Received Errors","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Packets Received Unknown","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Bytes Sent/sec","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Packets Sent Unicast/sec","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Packets Sent Non-Unicast/sec","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Packets Outbound Discarded","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Packets Outbound Errors","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Output Queue Length","\\SE00035694\Network Interface(Intel[R] Ethernet Connection I218-LM)\Offloaded Connections","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Bytes Total/sec","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Packets/sec","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Packets Received/sec","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Packets Sent/sec","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Current Bandwidth","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Bytes Received/sec","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Packets Received Unicast/sec","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Packets Received Non-Unicast/sec","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Packets Received Discarded","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Packets Received Errors","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Packets Received Unknown","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Bytes Sent/sec","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Packets Sent Unicast/sec","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Packets Sent Non-Unicast/sec","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Packets Outbound Discarded","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Packets Outbound Errors","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Output Queue Length","\\SE00035694\Network Interface(Intel[R] Dual Band Wireless-N 7260)\Offloaded Connections","\\SE00035694\Network Interface(6TO4 Adapter)\Bytes Total/sec","\\SE00035694\Network Interface(6TO4 Adapter)\Packets/sec","\\SE00035694\Network Interface(6TO4 Adapter)\Packets Received/sec","\\SE00035694\Network Interface(6TO4 Adapter)\Packets Sent/sec","\\SE00035694\Network Interface(6TO4 Adapter)\Current Bandwidth","\\SE00035694\Network Interface(6TO4 Adapter)\Bytes Received/sec","\\SE00035694\Network Interface(6TO4 Adapter)\Packets Received Unicast/sec","\\SE00035694\Network Interface(6TO4 Adapter)\Packets Received Non-Unicast/sec","\\SE00035694\Network Interface(6TO4 Adapter)\Packets Received Discarded","\\SE00035694\Network Interface(6TO4 Adapter)\Packets Received Errors","\\SE00035694\Network Interface(6TO4 Adapter)\Packets Received Unknown","\\SE00035694\Network Interface(6TO4 Adapter)\Bytes Sent/sec","\\SE00035694\Network Interface(6TO4 Adapter)\Packets Sent Unicast/sec","\\SE00035694\Network Interface(6TO4 Adapter)\Packets Sent Non-Unicast/sec","\\SE00035694\Network Interface(6TO4 Adapter)\Packets Outbound Discarded","\\SE00035694\Network Interface(6TO4 Adapter)\Packets Outbound Errors","\\SE00035694\Network Interface(6TO4 Adapter)\Output Queue Length","\\SE00035694\Network Interface(6TO4 Adapter)\Offloaded Connections","\\SE00035694\Network Interface(Local Area Connection* 12)\Bytes Total/sec","\\SE00035694\Network Interface(Local Area Connection* 12)\Packets/sec","\\SE00035694\Network Interface(Local Area Connection* 12)\Packets Received/sec","\\SE00035694\Network Interface(Local Area Connection* 12)\Packets Sent/sec","\\SE00035694\Network Interface(Local Area Connection* 12)\Current Bandwidth","\\SE00035694\Network Interface(Local Area Connection* 12)\Bytes Received/sec","\\SE00035694\Network Interface(Local Area Connection* 12)\Packets Received Unicast/sec","\\SE00035694\Network Interface(Local Area Connection* 12)\Packets Received Non-Unicast/sec","\\SE00035694\Network Interface(Local Area Connection* 12)\Packets Received Discarded","\\SE00035694\Network Interface(Local Area Connection* 12)\Packets Received Errors","\\SE00035694\Network Interface(Local Area Connection* 12)\Packets Received Unknown","\\SE00035694\Network Interface(Local Area Connection* 12)\Bytes Sent/sec","\\SE00035694\Network Interface(Local Area Connection* 12)\Packets Sent Unicast/sec","\\SE00035694\Network Interface(Local Area Connection* 12)\Packets Sent Non-Unicast/sec","\\SE00035694\Network Interface(Local Area Connection* 12)\Packets Outbound Discarded","\\SE00035694\Network Interface(Local Area Connection* 12)\Packets Outbound Errors","\\SE00035694\Network Interface(Local Area Connection* 12)\Output Queue Length","\\SE00035694\Network Interface(Local Area Connection* 12)\Offloaded Connections","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Bytes Total/sec","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Packets/sec","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Packets Received/sec","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Packets Sent/sec","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Current Bandwidth","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Bytes Received/sec","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Packets Received Unicast/sec","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Packets Received Non-Unicast/sec","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Packets Received Discarded","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Packets Received Errors","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Packets Received Unknown","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Bytes Sent/sec","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Packets Sent Unicast/sec","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Packets Sent Non-Unicast/sec","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Packets Outbound Discarded","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Packets Outbound Errors","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Output Queue Length","\\SE00035694\Network Interface(isatap.ki.sw.ericsson.se)\Offloaded Connections","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Bytes Total/sec","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Packets/sec","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Packets Received/sec","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Packets Sent/sec","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Current Bandwidth","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Bytes Received/sec","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Packets Received Unicast/sec","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Packets Received Non-Unicast/sec","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Packets Received Discarded","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Packets Received Errors","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Packets Received Unknown","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Bytes Sent/sec","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Packets Sent Unicast/sec","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Packets Sent Non-Unicast/sec","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Packets Outbound Discarded","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Packets Outbound Errors","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Output Queue Length","\\SE00035694\Network Interface(isatap.{B9D01222-E737-4A0B-8321-7FE782CD4197})\Offloaded Connections","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Bytes Total/sec","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Packets/sec","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Packets Received/sec","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Packets Sent/sec","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Current Bandwidth","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Bytes Received/sec","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Packets Received Unicast/sec","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Packets Received Non-Unicast/sec","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Packets Received Discarded","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Packets Received Errors","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Packets Received Unknown","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Bytes Sent/sec","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Packets Sent Unicast/sec","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Packets Sent Non-Unicast/sec","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Packets Outbound Discarded","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Packets Outbound Errors","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Output Queue Length","\\SE00035694\Network Interface(isatap.{BA17492A-F69D-42F3-890A-3E9B8D2DA7C9})\Offloaded Connections","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Bytes Total/sec","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Packets/sec","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Packets Received/sec","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Packets Sent/sec","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Current Bandwidth","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Bytes Received/sec","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Packets Received Unicast/sec","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Packets Received Non-Unicast/sec","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Packets Received Discarded","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Packets Received Errors","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Packets Received Unknown","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Bytes Sent/sec","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Packets Sent Unicast/sec","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Packets Sent Non-Unicast/sec","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Packets Outbound Discarded","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Packets Outbound Errors","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Output Queue Length","\\SE00035694\Network Interface(isatap.{A42279F6-5D04-468C-A354-23EC38A4D962})\Offloaded Connections" + "07/30/2015 11:56:40.899","6479.124376","13.269125","9.477947","3.791179","100000000.000000","6183.412438","5.686768","3.791179","0.000000","0.000000","0.000000","295.711938","3.791179","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","300000000.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","30000000.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","100000.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","100000.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","100000.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","100000.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","100000.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000","0.000000" + */ + private static final String PERF_NET_PATH = "\\Network Interface(*)\\*"; + + //typeperf "path" -SC 0 -y +} diff --git a/src/zutil/parser/CSVParser.java b/src/zutil/parser/CSVParser.java new file mode 100644 index 0000000..1f26be1 --- /dev/null +++ b/src/zutil/parser/CSVParser.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2015 ezivkoc + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package zutil.parser; + +import zutil.struct.MutableInt; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; + +/** + * Created by Ziver + */ +public class CSVParser extends Parser{ + + private Reader in; + private char delimiter; + private boolean parseHeader; + + private DataNode headers; + + + public CSVParser(Reader in){ + this(in, false, ','); + } + public CSVParser(Reader in, boolean inclusedHeader){ + this(in, inclusedHeader, ','); + } + public CSVParser(Reader in, boolean includesHeader, char delimiter){ + this.in = in; + this.delimiter = delimiter; + this.parseHeader = includesHeader; + } + + public DataNode getHeaders() { + return headers; + } + + /** + * Starts parsing from a string + * + * @param csv is the JSON String to parse + * @return a DataNode object representing the JSON in the input String + */ + public static DataNode read(String csv){ + try{ + return new CSVParser(new StringReader(csv)).read(); + }catch (IOException e){ + e.printStackTrace(); + }catch (NullPointerException e){} + return null; + } + + + /** + * Starts parsing from the input. + * This method will block until one row has been parsed. + * + * @return a DataNode object representing a row in the CSV + */ + @Override + public DataNode read() throws IOException { + if(parseHeader) { + parseHeader = false; + headers = read(); + } + + DataNode data = new DataNode(DataNode.DataType.List); + StringBuilder value = new StringBuilder(); + boolean quoteStarted = false; + int c; + while((c=in.read()) >= 0 && c != '\n'){ + if(c == delimiter && !quoteStarted){ + data.add(value.toString()); + value.delete(0, value.length()); // Reset StringBuilder + } + else if(c == '\"' && // Ignored quotes + (value.length() == 0 || quoteStarted)){ + quoteStarted = !quoteStarted; + } + else + value.append((char)c); + } + if(value.length() > 0) + data.add(value.toString()); + if(data.size() == 0) + return null; + return data; + } +} diff --git a/src/zutil/parser/Parser.java b/src/zutil/parser/Parser.java new file mode 100644 index 0000000..50799ff --- /dev/null +++ b/src/zutil/parser/Parser.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2015 ezivkoc + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package zutil.parser; + +import zutil.struct.MutableInt; + +import java.io.IOException; +import java.io.StringReader; + +/** + * Created by Ziver + */ +public abstract class Parser { + + /** + * Starts parsing data from the input. + * This method will block until one {@link DataNode} has been parsed. + * + * @return a DataNode object representing one item from the input data + * or null it it is the end of the stream + */ + public abstract DataNode read() throws IOException; + +} diff --git a/src/zutil/parser/json/JSONParser.java b/src/zutil/parser/json/JSONParser.java index 2424483..b5d8abc 100644 --- a/src/zutil/parser/json/JSONParser.java +++ b/src/zutil/parser/json/JSONParser.java @@ -24,6 +24,7 @@ package zutil.parser.json; import zutil.parser.DataNode; import zutil.parser.DataNode.DataType; +import zutil.parser.Parser; import zutil.struct.MutableInt; import java.io.IOException; @@ -36,7 +37,7 @@ import java.util.regex.Pattern; * * @author Ziver */ -public class JSONParser{ +public class JSONParser extends Parser { public static final Pattern NUMBER_PATTERN = Pattern.compile("^[0-9.]++$"); public static final Pattern BOOLEAN_PATTERN = Pattern.compile("^(true|false)$", Pattern.CASE_INSENSITIVE); @@ -47,11 +48,12 @@ public class JSONParser{ } /** - * Starts parsing from the InputStream. + * Starts parsing from the input. * This method will block until one root tree has been parsed. * * @return a DataNode object representing the input JSON */ + @Override public DataNode read() throws IOException { return parse(in, new MutableInt()); } @@ -80,11 +82,13 @@ public class JSONParser{ DataNode node = null; end.i = 0; - char c = '_'; - while((c=(char)in.read()) < 0 || Character.isWhitespace(c) || - c == ',' || c == ':'); + int c = '_'; + while((c=in.read()) >= 0 && + (Character.isWhitespace(c) || c == ',' || c == ':')); switch( c ){ + // End of stream + case -1: break; // This is the end of an Map or List case ']': case '}': @@ -114,19 +118,19 @@ public class JSONParser{ case '\"': root = new DataNode(DataType.String); StringBuilder str = new StringBuilder(); - while((c=(char)in.read()) >= 0 && c != '\"') - str.append(c); + while((c=in.read()) >= 0 && c != '\"') + str.append((char)c); root.set(str.toString()); break; // Parse unknown type default: - StringBuilder tmp = new StringBuilder().append(c); - while((c=(char)in.read()) >= 0 && c != ',' && c != '='){ + StringBuilder tmp = new StringBuilder().append((char)c); + while((c=in.read()) >= 0 && c != ',' && c != '='){ if(c == ']' || c == '}'){ end.i = 1; break; } - tmp.append(c); + tmp.append((char)c); } // Check what type of type the data is String data = tmp.toString().trim(); diff --git a/src/zutil/test/CSVParserTest.java b/src/zutil/test/CSVParserTest.java new file mode 100644 index 0000000..147ea9d --- /dev/null +++ b/src/zutil/test/CSVParserTest.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2015 ezivkoc + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package zutil.test; + +import org.junit.Test; +import zutil.parser.CSVParser; +import zutil.parser.DataNode; + +import java.io.IOException; +import java.io.StringReader; + +import static org.junit.Assert.*; + +/** + * Created by ezivkoc on 2015-07-30. + */ +public class CSVParserTest { + + + @Test + public void emptyTest(){ + DataNode node = CSVParser.read(""); + assertEquals(null, node); + } + + @Test + public void simpleTest(){ + DataNode node = CSVParser.read("hello,world,you"); + assertEquals(3, node.size()); + assertEquals("hello", node.get(0).getString()); + assertEquals("world", node.get(1).getString()); + assertEquals("you", node.get(2).getString()); + } + + @Test + public void simpleHeaderTest() throws IOException { + CSVParser parser = new CSVParser(new StringReader("where,what,who\nhello,world,you"), true); + DataNode node = parser.read(); + assertEquals(3, node.size()); + assertEquals("hello", node.get(0).getString()); + assertEquals("world", node.get(1).getString()); + assertEquals("you", node.get(2).getString()); + node = parser.getHeaders(); + assertEquals("where", node.get(0).getString()); + assertEquals("what", node.get(1).getString()); + assertEquals("who", node.get(2).getString()); + } + + @Test + public void simpleMultilineTest() throws IOException { + CSVParser parser = new CSVParser( + new StringReader("hello,world,you\nhello,world,you\nhello,world,you")); + int rows=0; + for(DataNode node = parser.read(); node != null; node=parser.read(), ++rows) { + assertEquals(3, node.size()); + assertEquals("hello", node.get(0).getString()); + assertEquals("world", node.get(1).getString()); + assertEquals("you", node.get(2).getString()); + } + assertEquals(3, rows); + } + + @Test + public void quotedTest(){ + DataNode node = CSVParser.read("\"hello\",\"world\",\"you\""); + assertEquals(3, node.size()); + assertEquals("hello", node.get(0).getString()); + assertEquals("world", node.get(1).getString()); + assertEquals("you", node.get(2).getString()); + } + + @Test + public void quotedIncorrectlyTest(){ + DataNode node = CSVParser.read("hello\",wo\"rl\"d,\"you\""); + assertEquals(3, node.size()); + assertEquals("hello\"", node.get(0).getString()); + assertEquals("wo\"rl\"d", node.get(1).getString()); + assertEquals("you", node.get(2).getString()); + } + + @Test + public void quotedCommaTest(){ + DataNode node = CSVParser.read("hello,\"world,you\""); + assertEquals(2, node.size()); + assertEquals("hello", node.get(0).getString()); + assertEquals("world,you", node.get(1).getString()); + } +} diff --git a/src/zutil/test/JSONTest.java b/src/zutil/test/JSONParserTest.java similarity index 96% rename from src/zutil/test/JSONTest.java rename to src/zutil/test/JSONParserTest.java index 16152b7..53f11dc 100644 --- a/src/zutil/test/JSONTest.java +++ b/src/zutil/test/JSONParserTest.java @@ -31,7 +31,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; -public class JSONTest{ +public class JSONParserTest { @Test public void nullString(){