You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by dd...@apache.org on 2008/06/03 15:37:55 UTC

svn commit: r662795 [2/2] - in /hadoop/core/trunk: docs/ src/contrib/hod/ src/contrib/hod/bin/ src/contrib/hod/hodlib/Common/ src/contrib/hod/hodlib/Hod/ src/contrib/hod/hodlib/NodePools/ src/contrib/hod/support/ src/docs/src/documentation/content/xdocs/

Modified: hadoop/core/trunk/docs/hod_user_guide.pdf
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/docs/hod_user_guide.pdf?rev=662795&r1=662794&r2=662795&view=diff
==============================================================================
--- hadoop/core/trunk/docs/hod_user_guide.pdf (original)
+++ hadoop/core/trunk/docs/hod_user_guide.pdf Tue Jun  3 06:37:54 2008
@@ -581,10 +581,10 @@
 >>
 endobj
 98 0 obj
-<< /Length 2655 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2626 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-GatU6gQJ'd&q05Pi6dRPArr+am$l&_gI+`Zf[CN2Yhn#/;kf.T$C/03gj_QJ,*W-0`HF>s;50>ubbNCW9MrPehS"9Kqf[abU\t(0(ON=J"@411-a`i":PnOd?Jq('H+Nm#pWKE6niW7hks)on*/*E\*n*3SPOdd!jReTL]7EJBa0YB@=+?%+b+<YQg:>8[>-HegVW.W#mJP^ar)G@;a+`"e..l:;+Qb_'oE()Jr76B%9:iJY+7t1Y.AXtiX.Oc3p#l/SA<YR]4j9p#2*Xf9)Vg-]DNKCY0a^T5:?&M;3Jh43:.5e85-mS4R7R4[9@UUiQKQu16IaBS\g\"M:.;,eB2N^5'*AmsR$JI]bpreZQ_l1:ij]&@O$hO>`3aS+!hUYqSr.'oU]Z*]NmRV)Yl;k<oq4@&lckn6;n6&`<;Wet=hS9[^BZ`;nSGCnegK;tUk\dP:DtHY97Gi:=QRj/flu7/6ZV"1T6P6ILhY)!q0j1,Kk;C%V)[cQ"7Yjh/#DJAE8H>B,u.=\2hQk84_"(NUAe4Vg!^YT`]?YXb\[*f!`-ET2Q)%Qoss#j5C@kg4HL\,Y]l-UBO+Oo/C0r^\VD_u&sX3\J[tE*CK@'DLse8+,@sp%<5=5Kl#o/oF=*a(&(%=%DdXbhiXA;19X8CfW"7lk!*4d.;Xj#3.dV,)M9t_)`R?6^>WChU#dqKnm)gHOM%lWSJJYt8G6Jgh4]aMZSK0!5AaS>@G@Z).(6ilXH6ZgT=!IZ^E,7%>EAdAGq<11^LsXL_6ZL+1m9*11F*0gf`PBl]C";,d.uqF'LScmdnUX>$KT+,K'SFPR9gF-l;A-"0^aG%/JS?=J/u%RK"bEr(s%s>XrLW+^/f5-2;c6ar<UoWA0,L?iduarl(V-ek"/9Z@/@dgKP*JPO&^"1@R7Bb.ZUqL=K^<."b!03Q?8#iYZ&U4TPiC-&ZPg8@*^:^*<T*^HJbu$M3DfY"NY0;o"gIO&KUsM[ARN#
 .R<dpp`K#=#lq*"<0.&aH,8V5;^JGg[)S/3Soc>`OT_q;\03Km(6ApU<C($C?Rl].o/W;iZ:.8b<0r*C_,"+<qR$c'BC\<H!\n!SRXKKD%Q9=9*4\uSE;]uh>C6hW=TGr^O,S9gSQtIrnP3Fei`\@ZL3QQ:kjhUu)>u/cSQ6se?l\WI<66o-$QB9FO%5KF^_]#:J2O%9Gh6:%N>([[h/lo^$1\#eG6_VuKP=:?+Oia@^FX]^!Jn-Y_;[AMq9;2(4V#/ZI(($CZmJPHp^[7I05E^e74($;*EPK/73qi<mn&uZI>Klp=^!&]:@Ag_G,R[?s4n5`q+Yl>;N"gkJ!4I%9:'>DXWt=^<`8?J5f`H/(,tVVZStPcrB;!d[7*=C/CGq;TV"T+0pEI3eDBjX'Uo825"fn[I_T'a5*tR/S&&.Nh5@eTaZk7T#"eN(F7P5/"%8>4@7C@),://HhAUCqPj(huTEkIBkORsqjdBNUR5jo9J$l\;5$o77]88Gmi$[`+?ZJf8NqCQ*`1ZbI)qRa!X>M/-THNq\u;5DmM.E<@9O1aH4SRZ8is"2I'F69;1d+og_`fj0X).oLu7*$$+WAS"=*QIP!Dtp]-***L/Oee/L]'pt<1CeFi"3\bPYtTVp@sCBJ=ZDXh%?`&-k34c<n-j!Iq?MF_dXV8kqh';c5Lb?r\Emth`tPr&d:=gKBLIUg^TtIY%sKo6e>r]Yc:nJNiG%#n%D!)S=>sr_,oJ@N]CTN<Ag-4lqZ4rFd,t-BpW5S7S<qJ;]VY7(McqV_#=K@,\!LF1cgT+UdoV^2_Z`[7(o%<h'CmbD[`Rul55KU\,e&BRZa#)(Va<.."p.P)Ge&(`@jA7JlDYeCm<,&hL%j^Ho&i=2+CMrGQM<h4e34.3Jc=dUnA'2*+HP[UP+X%/b,:>HCIiPm#'m.a@P,fS6``:dBrA!HXtX7p-YU,H>=6t6()W$r0_'(\iGKIq%8udVl%3A=gAVFbliL
 `[4^[KN^Df[`.kUp65[`.[@m%WN@rmt!S[CJ^-/]PpgI_9?9^$BDD[nCL*aL_p#SaN4L`/u*gI<b/...@I>@U%k\%7PlSF-RT!M%Gb"16AM6N~>
+GatU6gQ(&I&q-CUd%_%\'TjS^ff-t3>C[j$1Vl8V(CQ7llIN+AD!U*Sr-_,l=Hk55[55f>9b!#^3ikAB7J/<pGOHUA^>0sq."=J:`LcBU5nM-;$!!Vd.Ig]i$_3AA:NrH"Ib>E#T'$_?rTEp+K<Y9s@s[=G;P*fAS5,5V2t2XpG]s)Zl46`lfi-1'4866jld]4j<;[iASUW_^^WM8o\BqGc$9^<RLq1eM]tgBk^GTE8P38q/#Q<RY$G#3MePAB*qK%&dZADIK&$p"lS"D#Xok),u1Isdd(^6cS-ZN7nS4'VTV]psWT33n)R7R4[987`D/C1_AKrC^1F]0'%S;L2TcD'CH-3bep0J+fDRTBL=025;S`Gl%_+,@"[M5fZ!"?o7l4;Gtg8dG@F*23'2T`(9AlToY+f:*:$VXgsq\a?l+B(_%ah&5.d`NulhG(&@%6Gnobi(7GRC<8,6\Q/V;OF>_U1F1T&pPJ(QKUBnuWUGW4>\I_8>)KX-0`WlAYYqJ2!U%T//UiQkht0"3Se8">!qj=faW@>+2qC:3A>[Q5'mS5sfUVs6e`VZGr:'A:YX!fa_:^uCTQX&[YWRDil5m6!8lShbHfi`eY$$1Y+\LeIN<ZdOV?/g&8[meAY\,/KquF,sncf:r--fmta<7N!SbaJ3"^jd?/HrmAY/1YR(^SsN>:ba8c%T(kL/8hJa0#iVRRdH?+*bUpFXfZ@lFEo<md)(l/lQBjc&r!R=kK6cdi&6S]Ft$aK4C1F`RN8djJ.o@n"HGM>]IbJ.[O)U>ceQW0eftGg0sK5'h=qd6W4nYpqS1"6@*5jMLN`o9gF-l;A'I>JPR&>!`MOH>t!(u$Nah/s.^\:k<4aH>VI9CVPLN)<Q3/M]NjrT9h-NM?KB+Y)%^q[A'*8pQE34>%9L9LbY0&A9IJ'd'=*C2/,sk9H+ac+`]BiE:l:/dB@CjW9KsSX#KQM(*;;V>Ej5'u>=KUm'Yq`3&mC_@Q%<B
 +AEK:]'g(tT[jN>>]pNKBO'H5jrBb3`B]oY?e60:`K(:!d]qi''$8!S`U^EJ#RsV<)=...@RdWG7>Pam0JSpcf'3c!FNJ(-=^?Zt/U>K3];$9XVEtL:eL[8Y5rTA(M'I+40ooF',h$I\N&1_r3QQ.gA`<^%>u/cSRO64Cl\WH"+d/WM9?:bc!LX[eToDnu)k0o3h6:%L>+HN-/fnhYBB&TmK0k?Q-]8W5,D0Y(e:nNW#a3Go$mA$u2MBSd8b]2q/J9f=ebmoX?Zf)'+3ETCk0'/VmZt=Xa8WgKXZGKaM`O);Qgs5Jf]d8jab#^K90DQ1LeJ?gUB/1_!*.jd'1&,/.YN.'nb6Kf[Qkg88J50Z-`I!`)/(lDOn/8DRS@<-WP+VH]uY*&gW6!".I*Bf_<S&pYd*cf`]\NfK.m/H%iLipD+&!G^lqs?aJH^l"-Y.IW"u]"<98I0[YJ'A^1O2n`g(IqUdHkoqXrG[HA=bdcoBpWOE&T8PkMC6n-@m6%2YMcDZR0b.5/*Yhi/r8_FD#e1LT's,0c-B3S(^2kOk6eNg\/l[kQQsR?p6*GD!Qm:HFGIR!gFs+Z"RFCV19AN8Idpn7a]3Y8G?F1^%`>iCT>I*5m:1QB?l1RJ`l$0LZ:N30a+W,Ya6AdiKpq):4%Z&%^2bqu$!Y#Q'C-W!UKug"!s#-Z8[Ra]^[NM"W-DAN.Blmqd<K=Tp]C2\e<,VeJZQmtE1*\k1@%a`p\;N?@IA$R)G$&#e'rDP"%OTA1+(H.hi+>=u(VYI2f!5\/i'Hg,\Mr(`ekqFV=,\6ql.U\E\X6JdF;2Yk&57Xm(GjAo)<2E"D-<(P$MJA[3O0,H9iCa=1&4gbBp^#meWnD<M!rnN>O"RL?Q'#1W5e:YONk\`!S%pTqEnn9X/#s'9-HjZ:NL.%A@OG?dKCLIDe@a00k-XEinK`TXc6/+9P)R<DL^hBg&M18/-GIp,<cnKs5/h#;HmB=mU/l9
 !oo;,La]5]+*imKUe"D3WJ`Y;GpS$U=_f&ja`J6O.6#OP/=Tt=1:ft%$kGMU1^:r'pm_e@3F2JSqqUDC@M\kjb'mhi)3`A7DRR>$9^m[=iQd-(Q-j+Wb@Q8CU+fFQ#kmm^ef36?^K5)q\Nf-k@pODL/70HRn-[30AjlOJJHTlL&Y-$ccXDmD]$HSF+_s-FYgmtQt[$;8]9&=5VF'0e<6#FR>Y=l,Co)gklFD?.*cl7]Q;mRHt`5P!utKL#/$Kn#9qUX>G<?N:u?[RrAfZHuPpL"m6P_fnOq#5Be]6!^n9h3qf,q"c:JF$K5V4PJkG_i*NGn<.%b@(cD5_9RF^oD7!(Wn@Q!>nmT6Aq7F:+e%F_O2ol%6Z04h@7V`C&Rf@bD(bK=C3]\62Xm&i;n(OH&oJ?d8';7]fQJ<*WfR`\hEPXqV-aF7-ZY'3Uq1?p&G[rqrEHmpll\^n7Q_+83"3%_lM&.454INJdeN%0WfPro_1sA,>_714WIc<n3OsM*k.)>+BB91.*S$'JWLop5.-st3A&qciDC>KS%R)-?%>TVR]6d0+31s#7Uq(0Kb.9^%g$o41n?83'4i3d,0&0C<\Zc3srtK01Hq0lWnm4/l@=$PqVYa+iJ%fZ9j,0[]rHnUUo5Es>ieI~>
 endstream
 endobj
 99 0 obj
@@ -596,10 +596,10 @@
 >>
 endobj
 100 0 obj
-<< /Length 2133 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2130 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau0EgQJ$c&:O:Spi01H'6N:*QqT9WCh5,"a8<6MQ,4ZuC^b=aO#):#!X!0T!G5W,e4^<(FfYD<qt(JL\!h_Ic$msbHn0\1c@"BPkDnTDhisCU0,VYDB(Lu-f<[\RmquLYjE`/&,O1W]8bpKIC>8;qq+o^deg'u8=)X%u4hk5rBYBGaZYT/A9W"mT#BF/+(J'`8VA$<&)@WK'/TNTU'fmL81A*W=#(qb-$_:"EA`Q8:4J4\a.seUkfi>bpr/^!YVkkCY(;]TB1B6\.OGWY%-b8nb^;-m!:%%F<=p/9-50.+%Jg[baJ'V32?+Q1.A%QAT6'T<%S/5=)Ls2lc)]AuM]g)^'mUut;+6Z-$0cQB@>V8EteD>sqEIpIk::&dg:BSl[)iQ>OL7+Ifka(N_*`lA:%1/3>&CN'P_=SA(ho&^K)#qRm@hFVuIC'=?rA!=ZjLY"KMVM=Wg^41R%/%$I6orkO5e!map@HAUZ\I`oaONYrpUoDr!&tWT>qNU>eQjbe734r=m.d88.^3Khj5"r0[r3>cQA>)aR.%L(oJ8.PU:!6,$]83tH^[MSOsERa/qj:Q`BcWV7fE90NlHI7kHukL$_DolOM7ZKJ&E8@)5e8VoO^c[a21s5AN>ii*L#frkP]M34Jlh_DP(6d/1#!!=<9c&WCT&9/]l/=c'apIXH':$5ctu3e1I)+eYf%R]XQ+6(i@S'%od0tDEo,\E!PmX9qYhZ77iDIcEh/T.@W^N>Y_IRhLf(AU.W;`MQ!D0`$p,:N!/X]k-EiiI:1SVa#)iP6)8f(bl?]kA[\W0.jq@:+U_88fuQQ%?ld]e,m^u]<f,t$JTLed.[juFfKc8gR-*=trdd*:Nm[ZF@tJ5@JFlH%cLV`:ZBQ)m"L>6sjc7X58RRO<X;d@9;o-/UHq:/ai!=a)T7_P#L.NfA9tWX3[aPB$oo*8HkIN7WADhG'#9BiL*OO"8=9`2GD^t4Y%J<!;NLPUt7hTemQYI!
 ?5IUAaC_!]eeh"b5MpE4cN4&#\c/P\_ml9Bd,WK>"1i[?D@:)sMZKRbkK]]m[1Dm`".U7Pt0Wt!?eJnRoTGfLlgjH=6+s@Gh6@s"om.WY)82]#78APd-S0pT7m\!7;""lOmI,S#$h-g-E,+(5@:7N9h=*HuYeK_g6LF&"ATr*Sh1E?=Z/F>:HS"4l*TKg,>ph&(g`)WYARNs=2odo"N*/nW)YIZ>OP?(VN@WPN)T&T\i.ZPJWp3ljk6g9a%`!HF@C!"a),tukTLr)R$6Cqe.5En;$/`4sA5=q!#*3'C`ON:\t%6(aCTrMau(tUAFFk=$p@06[*@WF;DT1'S2IHl_%eOZP<pfS$3ROe,P1bWXYLM+'[Td#(g[j<5N2i^kk,h;8Ff500f\k9:<N&d)66^UQqCtGkoU1opSBf8l[H&\o[YLt8=0rg@R9TVpOOC!db=gLCb,T0>gCQhR5'h:2pc).4]D;C:KiBX[AomDBKX"m7Jfu8rY*e]7X`Y-%@A&A2LjGdE>]'#HQHAHCYX]03JQXkIcBWkYtASFH!&jO1%.*S9Zp1c"r(em)G.ai+(Nd2^l@]@?cMud\p4:aQ52_iN!*b92g*Z3H*IcNpNH"2,`pNdOs(ic22"SC%NQPRTKW35*VS]gcn#3Gc4>m7I^Hd0t*7$K,gN602mP'Ri]FcmErF\h6VZj)+iLfou+%eJN?4"-%e&&O_U5QN,PaoMre,S^p;NOU4j")kRk.6"OX:8.(OAOu"*98F:.cq>t_RZ#'mA)>g99j(G9o".k/hn^>TX:98EW/NPZ]ZiDa>pUBb$Ndl=QTm$f?\Vkmf'bhsal!Yn83*biEPHm+4l3sP4K+'ab9`SlXE)!h09U<S^R*a)'o]$AZkJ^5]bMar@Fu3$'BHPPik#sLRaYI>RBiWG1H%RHkr9me0)Q:2Kk-!dl5Se,*M7Lp\-&[T(53&q,M>N(6J1brX=JY>_=P8lWV6+Y\$+APO8dAh6Yn
 s]G`3kAW78[\mV0;p`TmAT\m9fT%_e5c"XmgLgcE0Q_3Sk@+kKO);H@1l1@Wg@Ou(.&f\E5W=&`8734relFpBX5:RE<uKPfHIpIn\ND\#,>T>-4WE=1Vi5DWef>n6G7n@Yd7_'I<NotEHgf7JJQ@nfJ(~>
+Gau0ED0)1+&H;*)iK*4s9bEP5q3\$RRndnUF+'Z52]W=4bnZ<J3,\`o/XVli/\j2aaWt@5m:uCClIe\ugXYZhCA)^<k$.WX0_7uUSD1I]ru!IS00$9HMpF16?dJ_A]m]^$%c]SI-d4*]gIsEY1gC]C_!&Xc^`SNlBLf[@3SH;_Q_]M?G-2p)d:qW:_:6C"U1mN5f[O.Z/I%E0)EjXK%\&V6S\2=r(5(jH%A-FMB5D_Jglj`ICOEOXR8qfbr/s)5=D>jU6*9r4RK%\&NE>_*jg[#<AgOdU#LP\)H1s=Unj'(ABR@fgpptfZm(hPOq<HH)*3cnGk;:6906YE'p<U7/;Ep(-Y/[,U:B?G9KtboEL-@tpg#]k-cNMgn#s=F;=<ooDkYA"/*u*Ohr&HDuU3C1[/^Ag46tql%R:"%ZW/#0`#-[9C:guDZN&+B)B9^;Ma#FeOTsXMWZtZ]c?U[m(f*'Q1;aJ<,[k/,n6US2T8)^t<"b&[%3Yao'*?l7\LZFY(G82HRM;V2u1@8Cbr$[;7f)_f.L/Hkuq;d5pn>SZ[=\A=\QH0&s.A.`16o(Hl73P!ND^P-]RQG]947Z5/;(0eMn#M]dBC)QCSN$:LbKsm#P[1.]k@\,r7;G1A/=>N9QE-AU1.hC#eFRN00YMD9cd20Tc^1u(_KPnlZM)c1mbqN``giUbqL^D1k!GiLPZa:Sl..RDg9121c16sn;7_1'KsCj.n?P0L6rTK\]X<9Q?gBM'4k$KSOeH#9Z)DkW]'\@'r:8.[qm"@gD6/<RCjHO_it.llM<hRQl#P6gEQglFKNhb,'*53cMdhpo<`Ve*>VWG:<1uFO4ahH)T\b!C\D:aWUm]<u1<lRAnXJp13F.nWfhO8U/4dkr,L*TfF*,+&N4EQ-l?"c/Bs&L`Ki3sQl_KL2G0TFR:-&Q8Z+fn:jQK"qfQCSlROCX8$$D[2:emrq7iUV*SAs:4b7`tO@D/s[kXF%[T)"I3q/M)
 !8#*/6<Ie=Mnb%:63XqWjBO1Hr)m;:A[`_*9#,.r17]htl0[3']6N'''g4mKZ#Q#UtHmgnB)Ve4AjSfda0h<kDdb-O:_NM-u5V*OtT2f'je71All4O<)bmIqO?+:c2h4k^faEeD!l?Vaui3T/MC+sO3m/0]&4fT&X>PiEq1P>##0JYHe*:"6P#^0=:5tB,k31p!LRFYdCnLU'8.#pW-lhAV[h<g=hr;BNHLHlG:TcO^6$VEMRA%bgt(%fOjpYYV;J[2Gc<g,?cA$4cNMM"b<kuO\aCsn23?#6mKgLCr<=CU?iPK2&]J[It]P=GbC+s+c@eEZ=A6rFY,&6CTr)bM03qjsnuIfrc7m&Lf9OK)QCNR2T<C3Fq.X)I)V;"(tR1eU2e5YSWGmB[6!U/,Z0?FQ&=^$i9IAi0hEhc@Ck7?#i7dmHQig[2F;B)%1EJk]/9Ndd+FHe*f<.kY!%]:;Wm&W8RAC4or8b<!J4$E"b+-Ij[%DMua'QYM`R(m@HC9or,)OBi178[)VsJ.<qT[7N'3WM>elbpVOtD<9-&d_U7slflot(M:Hbg"@g^mY/5H%#V9_R34\Xe<)7tpCrHo&!ma9Ku84(-^fd=jdJUMQNh%Oq#e$^6LPfQ=2R)QB\GpTnQtg/aF!^r"Bg@3+teQ3?3JY&_APao":j.B1WAef;=sI(C#:.=`jkoq.^4]:^U,\tATdXrbY6s!Y7o7^f4fbcjD1'!-c<#Q7%51_/Wd'dkTW$DY'<R"JM@]=-er*/FdVVen"#9`m6TOYIB8"XU$U1:7T(*2rO3W^k3+-B"N?KL;2T5BcU1S8c68kRYa8PZ2.q]`7R&Qp2J#`7b3pIi^8#2$?66&2=<&c!Gaf"=\t*RQ-j\DkjnHs[Q_@'fqT]bD%*lX:-t7=V]B-rqiU6F2TIBLBLFQ?7b13LT987We^#YbXc)A7C*>+(0_/OYL?%>;@5qMJV0c[,!gR@#I8X7>?U:hC]?N$/@iA<
 2O*269o\[BM03DHD6-(M\12q?bc!iQJ<i,G5J^9@N:-rU^J6_3>JH4K!!.n]qlag:fuAWSFAf2(h,ZY6s<Vi=3)PO?OJ9a;]-0XS<95JYV&jJFp5=L?r.6Q2Q*Ug(LRX1;)'a[C:+)Bt1<++!ZM#6~>
 endstream
 endobj
 101 0 obj
@@ -611,10 +611,10 @@
 >>
 endobj
 102 0 obj
-<< /Length 2001 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2031 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau0F99Z,/&AJ$CE87RQ)>)p.gdbsT>F!HCS5YT'#%Wd00mE`f`;b:?0h;@SV"%umlnZ'sFar]U]%-TSB(bb-okalFSToQd-%R._@2OlG9\Rg.JjVaH?H'RteK:jd\'#F.:W,?18LojQ5s4Ys5l?I)P6!q]K_3hD*@IsGK^G#++@_^>c/K;Fa`km4`94Ml9nh6Mf'/!k`k#oG>g^A?js&ujSW:3pY,hE;'qV8X]t4LjBRP97>m4lA"7ZmaPi-^-5sBnWB(,]sL=^@W22kufqkbb\H#]MA=1Vn0]T\X]`R6(tq/<rr^!5a1X;Le"eBNl!3U?i"[#*7P^HWJrV%&VIT6^#RY@q?N!=9#aHF*Vi<Y[I;:[60CQLBj!Wq7qdmiQk(%H4EU\45kfL%&DfYu,n4"Sf4U;?Zs;n?s)sldAEFFQmf2?k]+s/fPInTJ/d[!Z#tLp1!WT,C%iR%Z&/MHnHM;Y;DO6Gui$+>KV$G:+"0n+h3'U@aNs9!c`nGeqMJhLE?5^k>[#3.@&4T8lV_\=>PY=GTYO]pMf&gIN]=,I]0Fq@b4-R,Y81Ae+ZBZ^4$KF@LUTfV6jk+XIu8m#%uN%:((-B1snXjd=pgN(bP?2^&2$&?@7SH8<aOA%>&k;E5H*>(iQbm\KZh]+mI'6`T0C8X;dE81.JTq12qhZ1&c&IS%-=MlT&YD3bkrB6hX3=pnu00>RM,7]PQ&HAe&^PBV4B.fpP/@#&.\Hk#njCD+d;$.R3',Yqn%*_LZhJ^1ZR@LL;l6#^g3a&KUqC=KR_NZ^<-U;ghZ[(E/cU("oJ)Z9GLWDn0$k4e?9:W)(:%]m33M#,Gq@k68%XhJ?0,e^)*m0eT=p"o"dcZ:c(Y=D$Ck*)"=>0<6j&ZUWC+1a#27YSgLGZl%>[js`[^;.&OYI46sPP:)qO"n+7JbSu@poXOabVQ?r08$1tqghI$H/H+koi.H+H](=sS7^eb_7FJH<PL:K5`I*-b=CrR
 *Vq3H+A4j$2a*eO6=_(TLnZsj]oMT_K!"Sl:i-]Qf!FmjNh.@aL6k<M]d:H>nO9o@D]Fqd*jOWqueciV'oQD/f`"?Ze:I5^rg)/gL.8Y8968'hm8;6b3E?'L[?_5cCouL7/Z+.Yr>kpi\Y(qm_kN1+8n?'eq%o!A*4>;mbGZi7pm%d9_>![Pl;ppLOWBa%g9#>g4j)WR!1!SF<9c(K!^>0-j/fFiM$>5ZiBl3J.U?k.B]Ha[$"b_WXQ</2bca0'm=`lC$\>57#K6'E(\*RF)Mg)`8F58a6B+YJ^-&Ui1ed7:(C:h_SjG4kc_kZ6p'p,RZYrfZZ!OTpU[olBEn[*BT2"?qL1agUhC5QSb>^HCsEUV(8KmdRV7Kh)GZ;E!Ao(bnCV8BJAa<par!AjsELk^(15W7Ti0]9$-0>GF*0Tka=J?LYW$Qr(sGH6G=)+/4s8]Ll^.)42_ee;EK!>h,h,4AR5M)2<CY(NUco=?;q(rQ._rVtEgJ<>4I1>g-&,T0/8Q2;CpU]`O+]m4T>"/9JEns0%g&/'8?IB>[;"F'q?H634ndd^YINr]mXEuGUA!q-%ufeGAX2U!Y&=Se2[%oU&"2/2$[-E%=!/",Wo4<%34LjQiY`.GF7`B.?XdS"9\K^qD5+S0<h"cUDGE1;9s&Nsre8!fB<5UK1"3PEDjhZ^F,S8]DU`"?Na01$=2HDd;3$qKGW;mBfhNoG;`1:[.jHE./e2=o>\ro:[i:ZFP9Sa#MAdfLp=BZ[,aTblL<np%EWk)RjiL'(ZM66skT)4d@Pg*_ocO1"/&TZmJTMaYYr?ui7%Bi^OTo7E*s6m;3Zr)RKt+5+Bs:%YpolB=Sbj3s-'g10.NH\c6cW8749(J$i=HI@;N1")0e_G(#F)'t:q.fN1e9NqtEMNPg&5(mbb-H_B6JFL`-,[QF`\_n*Ujl'2/h3/J!s$-YH'b#[b?>85nG6aS:f+6uOH)?jIkIs%o=hbE`YWQ!7ZsC
 :EI9&W/>p`8Hh@Jqm:H&~>
+Gau0F99Yi7&AII3E3uYibe/UNoHUg)Eh(0"V^.$0N3nf]aFGi-he*L]BjcIZeRl:6$`'Ytqj[#WRt`lV`R!;X[fpd^o'aJ*j11bf>-6k8b0&`jUFXr/:*uLeifD'JqrO61BC\9]Ro8)rO*f<H]...@V84Vo>`9F,4Upi2"Y3/kaq_V60*7IT[ZRCrC*i3:Zip-1J#tDTHERfcX,i<keL$F;BB0.0Tl@]![JnQ54+EMgeJk,bp8FB)eDNq1PP-e%5-Q[Zs#H0=IZV1KjHlXru>IRF+@/O6#F;+uEnT[eQ\Np4a92n$R1S/8]?uf$]R)P+QA;S7_$8j4.k]"h?d3%8ZIq\0hdN4@T-1PS]D^Gef[)^=.0BEHtTKP[,b)f4t@n6])Kp]Vi")=r*@E:#V0Gor";dCVkYYd2%0^V6t.G]P[b%.:UOL0?U`TK!pLN!\?C'Lh$9"PH2Ad>JIi/g7c4@I4<joD)!"ilZHN<=XT71L3=V-#jQ=QXnsWk4Ef<dj+sjf'EUcLtq^)p<"nkG!Li@Y+da-qgq9Dh#c(eF<OlTNVi-%/M&UnXCu8oILYPf!7+&-E+]]MR`l&cT>Tm*Ap3ZAci%Rg\@9TO8qV`_hm`h5\Me5mW4e!!brQ*A/I#)SG1FBE00Se>bk#L?Q>CQQjEB<9P@YNGN-U[J22uoePR.cYtge-eR=u69qH6"N*D`"U8-'o0asbA1[m2I/a6$<P!-!1/:*G9!ibH8pg..*eOn$5;B)]O!dE7Y2=dg?kGVH2]CZ:V*Zh(%b%6P`+Q2`kqU*>PVc;N7ZF4rbKEt#FhZCr"i/sr1OZKUD`EWW
 RfaDWn*<8l...@H9Q>/NfornQYegCN+i]HKm4K\A4K>%.h\q$X?_cZ#S$P#8c#k:Y)+OE.Kq41#0)E0$mcbPFEUuTToksk8RYKVIH\1KOfU7Iu<_8BSRHM-;kRO]"po-jLPK#F,;e-SuYKDl)ZI/B\g$)(tHbV.GIt=18YhZX%EYuB,-5^=!\eBk%_]&rXiB4W$*9`9nJ00\>Br5#'^&)Yg!o:4(2O*0Up&o)$JB'E;QQDC[MWE1\'i`mnb0a_hW&DQZaF(Ts?4'a%+':GZ4@A4A=5Q9nDbNr"XB]r0DG"hhbiaZeg*%=2U?K#9V5gfQg"kB9QTOo1Kdt[u\0SCut9"SrLsXTHR3Ff\3N'r1+otB/R%#::;g,8Deg;^oJT60mBs5cC.@L;&ttel'b%r7hCUY@#!/Kp,l]QFiH/>:HX
 0j&*^g<E;3>Oqt-D3brZs5AanN7gY+[C5mcXs<CJ0XrrHf/:GV~>
 endstream
 endobj
 103 0 obj
@@ -626,10 +626,10 @@
 >>
 endobj
 104 0 obj
-<< /Length 2453 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2425 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!#]968lH'#*[5b\a1+M^%qnDMfFQ:=\'T4ZR>\Ekmd0#&=]&!D/>"^HTmi)B<^,`NH=FAJGLPkjGXhIK9:SIIZ@oif=JQH@l/]?)4X`Y+d=rha,mY?\a*kUoqI1CpghKp#:a>(Q^V"ipb1i&E\c;RfmFi5I/LWS]$53Yj,a&Jc@F9Yg-!AQkq$=$LL4o-c>BGq4@W'"e@^7I#C0I%qJ+4+P+McgDTCq%p>_pCI[ML^:.;7<r]kG'?@0([0P^HeYSAeqG3ua*arE#Xktn%Z`DXFX7adcS6k\o4AV<6"n]b6q(HnWn-l*;KO-@QnBLj^)P\c\I#fsk8kERrc$q_[:R@RTmDToq01Pat*fcoh-cC@9BT24.dk=pn0;Buj24$YE+)!N>4-LA'NZ7_URYp41oFai2?KpX9Iq%LO.n/b-(&Or6M=gn=_8&6:Cm#,OG7-M,p,_ol$$^*ekr2I1<B#N\T^s\H)&AIYVF4g(-*=WLXkdN.b^nC#ZZbAFJ:u%N%^cQOds1F\-?hO$EpTW[Q%bt<hBK-rPr",iTnKgbjk_UA#q+=),8AQgk=*3$'/^"S%3mA#HB>>s43,1u(PB@*`G:Eo`RFjecCo"i([3'ZQ;^1*?6VrY/PC7";bei\`_g.\)!Y3Y9ZYARWj*dhY#n^tKc/"q['3+-FP+e^?Eq(=!p`Y$3R$ip'7)]_rZ`?jNkd;;`#CFH5hb48P<s@.jU@g8EP]B*rsQ9F3c8mP`N+':M'lhNLoG,6AM@QM"PZ_SWW]:2.YIRFn[r\nbsT,fIc%/!D+`Qo"OPJWB\5IeJh@p_h;.03RS13Cmm"uiV;L/&k4UGM)BlV8dK=pnkb"i'r7GNtX/_mCq]aCJhNao?<qQ%ML[I[`T9f+Um4`NN)NTlV:L]*PP(*!&Q.!",$[kJ'P2>!e5e^Q8PqbQ>Q[7_L$)XYpWm%b<TgaaQY:#X1YjD\"-or:E$B9nt5.P2-6CJ:Nebh5P,DAN
 `._0%Hhm%G>m>^js'91!NnnQ($mEG,#1E91*&l.b]mIl;#C4tLL9i[1Wo)j[7&FJ&'/oqYo\eLBqa;I?BS[PqX!9k^F5q""'ia=I,IE>UCs4f5g%g'%RqHNO`%AhsBSNkSj/"SuUp^k8<\\"9Dk<.KnIf91>ST258SXYCV3n+uO)BV"sPRK"g9l=3Vj+W"fjEA%qkgh,jJZD;t^3b+.htTBVmRn$!^o\[U^hS#Yi?(NE.0Pko4j_SjG_V7<1K1c([s$IOOV:1RkZ6qaW,a"Hh@QU^\IJKkMB0C^?)\[cO%>Al*K<R9csIog*\XS7/"KBZH[>5@e.@]%qF+F"hioMlmO9t]\'l\%3Jta-=:pqt]TZ\A%L8ks!m\k"-r3k@8aq=!KgnXG%rEu?+kjDriIlptY"^b]\s"+Y)MLA^45jl2@I0Z-oRkWI'<X,OUSkMO<d6r8ni-?i>V)gT!REeW(ObSd;(<cPWU3tibNh`^7@;roL?En3W\_@"Tn[ha?j`A^-Tu\coDU`0o`WBX?EdJ!e&<<c9qNgMca+Zj.et-ea8;sC%0o]c"%>GJZH.5ldq[2ai%]EQk.#r_>,je*>f:Yr+e`7A[)PspT62mQo&IrE+<aJu7]$4<jVa87'O3V)0qQ!/*d7]6*N/##i8QgQS3V"\[\UeB5'C$LNO!eqkIfW/U3[1V+du4p!o5]h=_uK%5OOP3L9q&ChmWBe*#ht!Og,S60&Yfe7-Dh0Of0V@I<A"WXCS\I3>1rpLe&%#.f9bgC$Yp6M9Ch)d-=+Ld$9_-GJ)YW3^]IkL=HOKQ:QA.JPggab^#hl@0U;t.k)u?_H<^3*'8Kn5P%paZ-D<?IGFG<49p8rF?umpWX[0@l??,(GdZII@kmi^]J*g]c0L.GLg**$WkhG\%VH="d!=5P.@bRYln[M1eB(q1H_+i@VrRPVBSQ9Wa3uU*]%@\W/F^9Nc:0r9D24pefbgQ%G2-7Hb?Q]!_Z,\LefK
 O@Oj4s0=?H,ppS90n6QPCJ5Ykm^iF9t7\J4B\kg[M)&$a+ThGS^`9g>/1$NAO'C(tkr>LI_[LAog)^7#Nidb:1Sa?s7WRr\Qq*=pBikXOU:jZ"62XtqkRT$+QAdB$sTEi&_:J<s*f#[l#jM_GPu7H%buM?GQgE*/c[m(lAqp2[Q'U6PP+(%sEl#nif:E'V1F#7Db(9d=_opN)YU%o,'Od=)d6FH;b6:)&';`Wk2'/^$<q4)X.g+\VLH`+]U+pOq'6b!AC5PlP+P;&U,*+^R3WjdW1ia%dOChWj[F0OA+ml-=>iqQ1\(a2`b')K(!k*H"&+VV?Mfl`Ub'`sZOPF);8]JWn$)I_X5WAr%W[12m"+lm,mWK]nUR$),\*_GpX@fc*%n0D@uUT=3t+p<a8)Ie-f'eo,>OZ$cknJDWT6U-8tlZQFISNQA^?J\LU.p%`sEoP\<9gLnL:qirV6!cibkpX>*n~>
+Gb!#]968lH'#*[5b\a1+M^%qnDMfIR:=\(OG]MG?m/]S+,A]?X"=-.%rUnomU-XD&Lg=5iasmI-TY%sfP<Z-eIU(e.EC3c2q#Af;Cg6T_#Qjegq9ANEmtR.g].;!(S""o_r,D@[j4KZIK%pTO++=kVDTFtMKemc(MJW%mLLpbsr!2N280,YY[Gs)F2M@[V?Z%37h!=/c@=%JjBa.QXmoj#[-Vc.<Xn;%hk]k^XlX"G^q2(=#?7Wa>/Ni3tqs[9[UiGpIG%8!bg[IR2DX94cIFiM1eU"_$f.G6gOjJu^G7Y6m"@m?n]Ik]]eHR\Wo9Ol7Kj)p:e\>2OT;N)[a0NUC_<eUp99rOD*nAhm=0H@=#k_G'+IedS$[D;9n0/Nd7k62!X!]fY15>+dKY[i.I)_j,dHl.-:Id\Ho?hqGI4J#fD@gDFV?7#2n+Ya)'h=3uEW9Am&\@<ZYE7R/b"V":K'Ot8QNcHB#K4:kE:5Ob*H);DqbQ[B4!p-Z&S+R-+\e=A,4mEuB;>;B1%;Bcpd20*B5[Ge;\2s49J'R>\dYIg2Z\lC!\KCon&Osc^?UlXDc!=2bZQIZ^U*ioKqd+LLg<]AfLCuqC2Ko:3+Z"S(2iR4[EOtiD[b=c[jISEFTIm`5JFt#@7H*PF"M+To$r,1;mgq^ogETB)s7:@9Umr<M5fs'2G1o*7uJ'cWFU9dWJqG0l9_AX>#ZnU]s<$(jp(L!0F`8[7$=H1bEug/`S3_2PUQ(m+PrK(G0+D6c$9h_<u<*5V>jSf6J'H,;*fjmVoZ]!N]8=]^Y(08XG5QL7gh+?>K)c&_K+>LiAPfd!s^J[@5Emfaf8M[=FOGD_TWu]?DM&nT;'?`'R6<?]G@glU^c`=/tiWIPQ<U&?Ee@Ps+2kSMAr'Sn`a"\a"'QSYph1TA`.0;.6Euf36tYlV7HRVSsP^hGRdfnmJ>278SS$!cZ(OtoSRs\f-Z,n.(an';^(jLrNk.@CA"i1[p/c
 6(BlJ#C83:$h(r&lTBdb2AXV(o<s6+j-f"QA>AjbM2ti=U2XrBF$ci&T4>0)+rS\V$[pr=fL0^EnlE5KslWBGZ/#_Mqm;,qA,h59t8Q&3'kg8(,VC;l,D?I3`Hi5m:Y=QpV3Qhu^]V%h"XhWT3"QE=:*NSsq9p97k]F0EL)O/kK<LOi0'>si?1H^qY3NXd>gM<[e&:tih.dOt<+2E8Zghs7913GohQAkAS)5Ajbj0_>f+FO@p#akZc*&PuQ?PD#a5EC^)N#RG9gGiQl::c1((R'\A5B2.&EF%IZJA._!*U@MpGr^:#:/>a?kM\EB-WY)SEIH^g6(`r!keSSVNXrW'G)I:G*aS@#fkT]fa6-65`V55^2WrEe4K?Y5=XB+Lr;BA7M?:qig1]<AItj!C$^6WMZaS:Jk7Nns0WVE9<*GA++,JJH4Sl2k7Sn:ljc\$`L_r_?]()F(q?mGUbAI&qVm:#E:+n6D%.W7\^PK2VRiI-t>7+*Pj*8[.8!20,K##k(q'[j)LBE`5!N0K8Pc%-f/U5:/6DGg4LUNQ0&FJ1HImcX3f=IITh(/dLU(H%LE)?$XFO3DO_<GfplV,Ib]N3Al'/V"bKE'/R"n>4SZW>7<S%;FA!tshG51Pq.*sGf#ksMIR^4W.B@=+W"Q4nO)ZY=L/K'1('jUW'o7S(g-_,tF6LH35@DCI6aHG'D0ebotaYMHP)3ZLE/"9eZDPsrF)P*UH\J0/:=DiP3]XG-SI`^MG4()$I$8Lkc,pfS>q2EsqNn0.qm)X%O`k9j7&RaHD,@[Ob:((VCC$tLg1Gk%=eSA`,VK@=NC5.=W8[BfRlVS'HtU3[1V+X3j-JSsar(0abm%GM\j)Rfg/hkp7U'J!8U,%39W?,F^A<8RNdM/)[lM_gN,3MRln&Ym*-6oq$a+l<opp`>5^>[Fdl<]rd#0"%Lbj5l;%$0o_mX?&&DjKu6$[,Q]eVg[ibBeJ/QOto')nPoA'Z*TeV$ZC
 9*f=]m>a$!5j3T(:C$URimDL`LZha[:^h1E2F_sAoKKbe1eh`ZHY^@bu5f%:8TiTq^+>3d(`[>E$Y4g%GK]E,[ODFPgS`UPmsR<Hn`hT_4lMk)"MLS"^#b!qp\RYIWDhIra%12\[)b>^*b_uJ&fNBIX=?'REFH0rNkhpjlZ;<WA:-bcL.Z"8Ml'^PmFl<qLsX>[j5C@AOoLD_Q$gKILW\=;38Y+sM-^]42e37s1^9HKdr<FgA2"@M0P`/4@%0V]InBZ4E<XDU6;g@?7'ha\,[^Qnc0b@0G/Rd4=iqPb0Rg.ej:?g64/j%mCaRKS;s0+*(%I\BuCYp(o#Du9rX78E(BkZ]Th_);f$<TJ_64\BY3r[@U9'tm@hEI=K]NbsPd[Djj?TCt+Xld$cU%_XZB43sWRdbu_@GcZh*re51+)nd,RXIXc0T*OHV#N>'gcN~>
 endstream
 endobj
 105 0 obj
@@ -641,10 +641,10 @@
 >>
 endobj
 106 0 obj
-<< /Length 2386 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2390 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gatm=gN)%,&:O:Sn?(qKN"We0I<$r8g*TO_W9lt,a\X62TqM`0,bqkVhrRSfV$JMa1*1cFRTSq<m+G\.dH^#]lK[ep>9!?cFqrcU[XoWP^Rj>3^@pB53Iu*_@BH_^]m@&sqX-8K\-r=@j]?W7c\<NZom8ig`S@_!46t2t*qS'of!WsuHLUKSqYWItPhJq!T@A0j4B(p[pfSAdaM,(][T5UEl0A*rp;0\]fOk[k26aU>X%Loa*9R.2=7`i"._.1MFQhb\WPnPKU#4]&-UN&kZQSb9SCJC33$^qT(+O_s4Y#Mf,0R""87aDXj2OT)jJ!Pc>:G!PTQQFbA1=Q_-ahCOA,Nml58Xs((uRiQ`I:&]\1Z'om):]#k<%2-QDtpJ;%MFKlbdM+aCU2;Q)2=D8u,#;;Z&Mm30$+I^t[/$pTiRJU2I81[^)(5J?t`VeoKTrU,lem)nO79k\5gJR\Yb#W=Tq*Y**@R@oWL;&sJsc3+.+J>g&[')7/$TQ,-71d8[M=iBF3;5WW_F&*WBic6t7OO]3Ml#<`ZOP2]E$9?QV>6M*I]H*U"Pq/FaTa8lj4[VmHM(-I/,PP#[t6n+Db%Iq;LedXf#ii1NTi%4d5HpHe,"]BN/aU[<=5itZdl$I5@WA4m;2^6<BXjs6f_V&P.ht)EWUPPrL=97`>'V%s)a;9Hl72$d@0#`BXRM5W-[5jRjNbpT(UGB*F)hEOI;]8$+ba%%-GrCA'W`2r1*jNMAa!qfXZbhAMDA-.i_td20<O-=I1-YMgCp)s[X_OeOfDqSFUlbV."2?Q+4J)`(@W*fBJ^'ob.<o/=1+/*r(uRdl.<sU8j8Qm''?48b!YO62W8dRFM+5ln\H2-E?Tg\=9srcO?)cQF!4WOKbgl:6.AXYuA+jSH<J)3c8;iu<mp[35PaXla[%Tc<bF>697p*G"9N#aXR]nT>S<b7[!d><'gG^[n!Fd+0DP/AX17+J"-^8772mCeS3-N7"fV+J
 3YI>ukIGh7=M6*n-ni)or+CsnF$8.hBH^R2D\6j?sb]XCFmaqe:gHKE]Idocr_;X1%ddJ:;!3'S:V#WT+`qA^ua/1CVg2`"h?(f'M_ri<</A)d%cZ;DgftkaU+mChFm&(r1erQL1+iSA>O%E7<"t.AC\Dqf\C0F5Y/?rJjF),/GO2igBpuf*\SfKN2o=pgcYajU)XpF**`e.hVc1qo@?]2NcC.p*;D;Fa*GuLSg+"M+/10P77UNq`$2g1TF>4Q*>$.aN2"Mn)/f1]U<PW7)fJ($!tjL<9"?DfFN"H>&-EGc%X^I$;(*0M;0_#=1?IEPSMlWmLh@qUs03'X=O;8c^$U'^p.Sf?2;5s4$[eA348L_FUB(*V^.OF)V=%-!Q'KX,o&N7r@*hRO;X\]_q%3KlrVoB(B2V#K!Re*qT[&9/U/")"2mna#,8;WrmjP6g^G[;'t+-Ujbr1XP_r0\QYu_@TN9R:2kR)bBj`Uc.=sW[[5UA.MR?&5H#PdkB=?F[FM_)/&Y<9>h+\DG=@@IDT#9[MZ159]QO<mJj,'C^_I>)kH=Jej\2.D`$7S/k2_L\3.rrO=up7htDara:/1DpljIA`mX%g*qNeu)bQ_-IE/7M4t#?Ka3GL-+HZc/+QF4qr="POACVCu%'fXON&c9o$In5CNnIO^f;qol3RBq/UJZ[IRk@I6jF$="BY<jT0`rr%2T^d<&7gHoVe+Cl@l$(0Zuo$QBDdAaZ#HOaSGfE#I-CT"-_.A*g^\Zbi%7cV1cUB[hk(qP3D>A)HuD4q>g,g\n^qhJO-00CFO_0tkma_;$)N)mdBJ^64CGG[O*LmDLUNGFQLrpJQhg'Be4O.[S/KfJJp&`1&4,Fc9%/@Xa,Lc!h,dOlnn%35jKk3agAU+mrjfh[+P,rdQoj$noV4qrCdcld>V%Fo=>qWB4$q1bXj4Gd7b7`481^+<"1]f4K0rAt1;>1aQOn2oDj.gN>S=W,O"R,ofK^eCK6;
 f3Cl4&k1]R&U!^#D*R$b5/Mcnt"FPC)$GD$U]]r1JdF58k?*Ve`e4P*!4S25LEQV_"^'Y7kpf,0auc/\MOD^[_eLHEsMJ4&11<E3E"UDL.RgpU"O%hQ**1]\M@omKc.H@T8cWl@&N=6=D+OHo&Si"B#uQbXDVjoT?`%qdNS1*B5a]/&&*Q#Wm]H$&]J=lf?Y#`R'"628qfKi!'4^p+rn.`q7<fF?1g5(^UJP6]DPR?9R_p8c6jFsp2GaQ5=$]'h-?OimK)7j#q[r@DWaU2Ws!Fjf0-*D^H(JrW<@]6BnW[Y<)0DU<b5PT0BujFOk^X7Q;'QCD_-n$$pl"N9KPb-C>Q=q0]\(H;4:`Tsu_Y7F!1fg!#I9pm:t[N)aKo[kh.ZR`D;;PHBt?h]N)q[W_;#$:~>
+Gatm=968iG&AJ$Cn<RV)6:m9sUHQ.ZS2<s/1f;sogB0i1,&3!sq2"&0qQBT)G:?E^RuGB/J`[%2piaDXkf;f8oB"O$Q"+[hpVg-C1Y_JK+9$TGn9H1%^hd@[KsF`\^L$k`;8BT-LYi$u2R4;4s&cG-lpf'N+3/+"L!P/$Z^+h]O2m0F:TV=4jXUlS8!3dna7`nFo)A:qCVcJr+7E,KVo(9Tafm1;.b6?o*lP$/A6c+.*1ga<:14_PUSTE$Yh<pUYcL`*+Z35M`,^M0V92p.<.[%Y$5HXq!umiF=)1fX:8!(,>it^&<sG:XeV=%0acBd#:V@&5M^"e]pNCbB6I'gjo!R?(L!DWp_j>;6SI#f;6fnWDDS.<V93$@0G"g.%).H&I><ebc23+gWl\f'%Bc's49/UPa#Z$/l>P1**ORM)"o3TSXR,+uqAQH_."V0kE3m/"1D2t/X$sPFE"at,RJoQqlV\*[^7)YK<S6!mYVC_Bi6ZIQ)lV`.\/m/7Fq7]An=^n>rAX:<'M=5BjCiqTFK#WmX4j3nEBo;d+X_"fg\LspL<Yto5F!KQ[&=jZrKas#o:CUE:B2&#nLq.#P(+E/g-%Z[<k[$p3>3FO7ScA]uK,@+P7h>CA!h,e^-;!i<03jnNc>KY^d&X`UjVbD\^h#-rVsPeQ%J;_^.`',i3lf2KJ7)hHlR-&DT\m9->D4hERF^JYTAlq).ttjR2g'js8ED5kp',//Te[oeQ(Wc$WD6%XV8p\?3O'./O)Zd2;WlYq[L:C!dIpOLA&/i"3*i6KK\.H3`J/Wr2![2pcJkhR`,u(8hk2$PI0p(gCs+h#Lkc#!9-DJ@Ce\d[F\5t="arFeE44$Fmf?o!\PUhK)Q:6O$dPXsj:ah$_P&%KVU_9$g8NB52Oed@`bh3U*o.La\PWW7>D&CGSHBgKRln=(;BCoK(K&LV5+>W@</b%\Ze9<3;.V18#FP-Z*YI@G*8[t&DSlZD\WWB[#9<M
 PQLMQ6Aj#X1_XhU[IL4tYcp3=_psf?lq[gV;7umHcgJ06\8eHjn21d<,D^Po,D6ogbHdanoI2WoJLSUAV1/G&C0ZJ8#'[iRlRGSrd<hKX?Bsf;']9pSm/^9q$&u^r9eoaHneXQS@Pj=JZm&3Yhb>0n2h*f^]::S,m6)/W+4h9lc-*8u!)jonO\.'u-EOtaNOd^s2JQqK;XqkmET;Q3a@.&7U9UcPS*<Qm99Y+\D4,0$<D1n^l%GQPC?sr$n\U.91?/kpQHBV6W*C"%_44UU]Etod38:eB<K7Sg(_.-=UhMYC[N<0q;r4_G"UshSU5Q?\MIL7?R'YhUM-:tliS.r`rNoPhn.$a^pA%VU"G,F90@Dk:Sq6)Ba)o0P]M6F(,A=qaeVBq>5RH%(qBj;0goF#eKlN.lf2/V1>bNh3MgHJY>1WVP+E#d,$gq#[^@;j8cYpENH0aWH4OKOGVJ073=n8Fg@9g4ka`Tu"W?_Gfc50ig@k'r;^j*aI=,RX;;PPg`6I+5cs]#)`<\T!!mF.lNPm>re#p%$n2"qRH58B6?IbTKZc%@`"Z%jC\Y4VHRW!h>W5X1]apet%&Tqa@!E1S#)We5uo@lM"9&%?DliLstQ)\G8-!^CK,C<H10C&h/4?_Aqi!:'t,tB:o@GX1&BlKd!&Q1VuV\2j!_Z8SqX$auZTG3I?k)MU_88CAMM%=\4eMAp.d)ZpYY&hQD\#TMJ+VYMEHQ&&f8CmJj+LgDE7^2MKpmj@(+0DD^.?(W/7>S=X:_a=$6@j"<-Ng^mkS5J-kJ97>UiQijZt7t"^Zr%FbX_p1Qd^Uac8ID?S.gqoq\.H4Q;2PbjH<peFR%\I<`lJ000)Co":3e\Pt""&>h8.hqm31UiJA!]XENTZ*0=<Y(D7_FBs,?-hPbIX'Xk!knbF7X^t5<'2f=,P&OT/qOM9aa+kp@C/s%U(Po&R_9LjYbfKSK6makj[-B8@G'%/nUpnGtdij)'SI^DV,
 aqkrl,VP*UQ=d;YOU:?XLmMV5X'[A4NF>irQP[DC:!A=OOdM@&Y[:dP>+D1J)K6ln9^+M0.ZKQUn6'7pOge*^#W`Runk_G2<?m<S\6`AKQJkqXk(9;5HE$H8<qk,DCZ?S'Rs^_%4.1q+k,,Wfu/>e5m_aiPi^*r"D7005GES-?T!BI;;lM>6#'7Ngh/F=X^+'.i4]$38ikmku.&,R@KdptU2n2CH[\C>0Jhj!3c]$hE4EXV3HB*PV2^+TT%koWYbADn]1UpS`8T3XRPYoWo[h_OsitSSTqdNi*n0ihMWrh;ZK[gB-=#%;PP99>7Vs?n?c>7GL$?HBU6^$P)S.>RG+GESCtX<CaLbiasQJ]`)<ie\:(rp;sG9o0aXNdttJ'Bc#%I-!EZ:'q^qan(r?i!YupP[K~>
 endstream
 endobj
 107 0 obj
@@ -656,10 +656,10 @@
 >>
 endobj
 108 0 obj
-<< /Length 1333 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1425 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!;dgQ(#H&:O:SkcGesAk7g/V/Jqp98`de&a-,F(:$B`C*c`XbAR%B41^hIfs5(o85Uqhd*S3h&'l5Tr-G\qZWTGmQudfXGH6f<l?Jm*T0g!<C[NpoV<aAgfrfd0]j>gM3II:-?bU(]CR6sV(%%M>r%Y*nPTF7aE&O-UgYM=gb88GGcK6KnOsd0TJ^IlpnEAf83N<ll@@-_k9_(Od<OF=$>,i+cfL9qWF0h$/k.3%l0%hU%2G;e;F'Z8SL>'MNg0E5UU!N,k9L/gH=N=!YATn1uPg]oLR+.U4.VJmFE/>D6*-GNSLiK^#bG,JKH9[77&]9$[U9C/O1du@h6YImnV1aoK23fZG)G%!RLIU,"WOMUnr6iBhcCuR3?2f-)(a[%Z92;t&ZeKiX0u3WDehNfD1&d4>WFt$(,M)ZL[4r1!)(O7_iJ<P8YKO$-j0pi'Z3^!h.EYMp=sN%d2"aa:`+n&bSktIt]c:+8bP\(e#ttH\(>;3fbm"<0]%g=T<)lcV(#j05%3Yd7ms9t^CYY(Cqmru$VAm,0_=4<Rr1JD`k&cnX3Eet;>T'R;%Wa:":&9g%N;&/3!OA-o+$)R-d:p7KG-r)LkX.5'3*0DMJ`mAhe6OCg_Ca_0hgb)"pIiV_'1A>Y"Oc/A>n45NL"NugBr[e;^k8C2.SL)Wot.'GPV+>WbAQN;$-MRoRsFU.m@&@h"OGS=VC+,>UG&+ZK"uD3DioKl>&@t*mL<AM$c$nfCH%e&)B33!m30L=QPV__E_=siM%t?gPbl6Rb9gRq91_E$D`\X%#g^e,rm;iTi^n%"4]HQ'S#0N\c*d5S\CU#*&NYne\$4G5Tp%*@:?4-%RqkgBfprEME4D)='EE0'e5a2<UB%^m8%0ZliE9l/q(/4^;\r/f\G-Dp0*cr-F&=W(e"f<8WK+P]&U;@[&Z(GhaG..hbSDWT!atLlP\WEWRKfd+D$ij>PX!J8A>LUi/_::rgMLsW4Q"61k-uP
 B?Y=On+UJ7_ZD!X=R9O+jRX-WIXa&1(b@?9g_MHio4gk\`:&iLtXTN*@1:+PX5QX%21=\>aHlLVOj.marS!irN%K>n5.[WK]cIX";Xh<umfM]1PX6lt[1t',oX`>e>\#(UpHl-90&,SKXUKHjMM<Oj+DX2<*mcW@\Io'X4e'b.oIm0D=hDIm+n-%MF"OJH)[&)q>]Y`EmCe**jq9@hqJY=3;5LfF#FAQ!fcHu8%m@g=$i4b<:G6]H@#sIMUTJ(].oQsk+Qc\4=Oj\/>""bjfYrJSoYm*5RNE8QU_tHU6YFhO%Xh<1Y*_3-mE,b+hW&M<C'sce$<'I=L)!(Z#*L.7W~>
+Gb!;dac>+F&A@B[Gfpp0gV%XLbtbns0TZF2:JNU:`2:J+@V`KtAH"d;]p^-6#rZT&`Y^0t[J$ZQ:O4$th?9='%C,X'n(l"(#[<>Lkl82l?eZ!!j9]G[db8Sfhn39<+G:jBI/N)1@M,Wt$/uD3]WhB*XO^<0Lj7\^Nn1,?5:I=#XM:jp([WIPVquu4YOc^PkOI\A\Z8=_3;M`4gddBtVV=I8L?/fdG&Ua)SK3cp99h_@o)<R8]hb@1`A$*oT#M3qm:+OV%X4mMs,:!$)IJg93?!re=ohR@PKth(`jm,qRoCO'5jf/_.+dY')</?a.Eo])/7h!l:U5\+<E5Wj&rdD'phlV_Fn4C*9::j/'OY%"n[W*PGFi@B@osS%Ah&sWBU>6sgZ"1gaLr$q$mXKPkC_J-[B$,fXt,5d8DI5SE=qVs$.^GdW]`1^@@='1I_*KimZKPl!4U_GCD"W)6bZ4<lGeF;Y/?9_r'GU4'8MrE:o?mu;^=9[-3M*nH$t3qMXoR95VilA$gT]4_`16(>>IhZJoP(,T;FTA:OUmBWfVL3"#?8+jZ#0q(a^,8nh8=K@)U="X/H]7KD_38-X:kkLnDMZSlIWdOikB?]=XEFOI<-B#C)K<b)ZuQ^L%7j$j$@!_Q987])nj4jbQHF/%?8`;5Wr)3L[pRE;7KYJ[+dX0Jh)V"s`<_l4b"fY4;X5.+b9?4Ys9YKB;B&lL$6Ql)sU1GqbH"5bWLN5]c481iKcI!sIdjKZufB;8``W'60ha3X5B+n50Bbj1Sc#j+1gsU.]L/2$E#sEHb4u_FN*P)s@1/I_#knOR<6;o*n!SrL;p4<@e,RA!NqVBjl8_BMJ_aKDt'FCR`H=q(P9UfZ`'em@+t]d-M&khW'fj39lt@aHaUZJ`19\!Im"4D/_)^%?i8;HEKnF)`2@jg6rdC%hTe25.dND_asDE0gb?/4I7aA?=g0R=l2pPD.hk<Ln1*YW\?<c^7[/;idMPLC/f/
 c0]bVW7dp%R_XnQG?`hP0V'sMbZoG!6"iEETO!&"YJMr`qkA_M_>U0#%aDo"0(Golo4YIje+X]'LYEQQ,dZsMCkUJQnOR:ZIY/Jq,aK2Hnjr3'U^Doq\=(NoKGrIB438l*=I;@NY0cB_06+1q]]10+^cU49AF;8Q7df[;jC3>hn4oRC/okY($>HflL"1e$r"KR[:[el?$7BO/t_)0RV;6/4;oXC\H``t*($2*%8n&%\qk!mkXI=0Y?f%mNt@K%PL'Z6],7=.6.&)L;X,b]glJ+m]@&R7+]-XJO%U6_tPpd<_>JNcSqgXZ%&\<fZ78jI_+\"gm_UFmA@a#5+Enf;.aqJN.c9Rg$>k<.E>)Gn"&B_7/g10PB%GI0ClC5l;mE!Pbp<*VV@3I(*q<EU"GlEG>F.B#+mg]aqT?'IRr#`Y&F&'H03nG~>
 endstream
 endobj
 109 0 obj
@@ -1083,43 +1083,43 @@
 49 0 obj
 <<
 /S /GoTo
-/D [105 0 R /XYZ 85.0 481.25 null]
+/D [105 0 R /XYZ 85.0 438.5 null]
 >>
 endobj
 51 0 obj
 <<
 /S /GoTo
-/D [107 0 R /XYZ 85.0 659.0 null]
+/D [107 0 R /XYZ 85.0 628.6 null]
 >>
 endobj
 53 0 obj
 <<
 /S /GoTo
-/D [107 0 R /XYZ 85.0 533.747 null]
+/D [107 0 R /XYZ 85.0 503.347 null]
 >>
 endobj
 55 0 obj
 <<
 /S /GoTo
-/D [107 0 R /XYZ 85.0 442.894 null]
+/D [107 0 R /XYZ 85.0 412.494 null]
 >>
 endobj
 60 0 obj
 <<
 /S /GoTo
-/D [107 0 R /XYZ 85.0 317.641 null]
+/D [107 0 R /XYZ 85.0 287.241 null]
 >>
 endobj
 62 0 obj
 <<
 /S /GoTo
-/D [107 0 R /XYZ 85.0 239.988 null]
+/D [107 0 R /XYZ 85.0 209.588 null]
 >>
 endobj
 64 0 obj
 <<
 /S /GoTo
-/D [109 0 R /XYZ 85.0 587.0 null]
+/D [109 0 R /XYZ 85.0 547.4 null]
 >>
 endobj
 89 0 obj
@@ -1142,70 +1142,70 @@
 xref
 0 146
 0000000000 65535 f 
-0000062765 00000 n 
-0000062969 00000 n 
-0000063062 00000 n 
+0000062831 00000 n 
+0000063035 00000 n 
+0000063128 00000 n 
 0000000015 00000 n 
 0000000071 00000 n 
 0000001715 00000 n 
 0000001835 00000 n 
 0000002021 00000 n 
-0000063226 00000 n 
+0000063292 00000 n 
 0000002156 00000 n 
-0000063289 00000 n 
-0000002293 00000 n 
 0000063355 00000 n 
-0000002430 00000 n 
+0000002293 00000 n 
 0000063421 00000 n 
+0000002430 00000 n 
+0000063487 00000 n 
 0000002567 00000 n 
-0000063485 00000 n 
+0000063551 00000 n 
 0000002704 00000 n 
-0000063550 00000 n 
-0000002840 00000 n 
 0000063616 00000 n 
-0000002976 00000 n 
+0000002840 00000 n 
 0000063682 00000 n 
+0000002976 00000 n 
+0000063748 00000 n 
 0000003112 00000 n 
-0000063747 00000 n 
+0000063813 00000 n 
 0000003249 00000 n 
-0000063812 00000 n 
+0000063878 00000 n 
 0000003384 00000 n 
-0000063876 00000 n 
-0000003521 00000 n 
 0000063942 00000 n 
+0000003521 00000 n 
+0000064008 00000 n 
 0000003658 00000 n 
-0000064006 00000 n 
-0000003793 00000 n 
 0000064072 00000 n 
+0000003793 00000 n 
+0000064138 00000 n 
 0000003930 00000 n 
-0000064136 00000 n 
+0000064202 00000 n 
 0000004065 00000 n 
-0000064201 00000 n 
+0000064267 00000 n 
 0000004202 00000 n 
-0000064265 00000 n 
+0000064331 00000 n 
 0000004339 00000 n 
-0000064329 00000 n 
-0000004475 00000 n 
 0000064395 00000 n 
+0000004475 00000 n 
+0000064461 00000 n 
 0000004612 00000 n 
-0000064459 00000 n 
-0000004748 00000 n 
 0000064525 00000 n 
-0000004884 00000 n 
+0000004748 00000 n 
 0000064591 00000 n 
-0000005021 00000 n 
+0000004884 00000 n 
 0000064656 00000 n 
+0000005021 00000 n 
+0000064721 00000 n 
 0000005157 00000 n 
-0000064723 00000 n 
+0000064788 00000 n 
 0000005292 00000 n 
 0000005899 00000 n 
 0000006022 00000 n 
 0000006063 00000 n 
-0000064790 00000 n 
+0000064855 00000 n 
 0000006196 00000 n 
-0000064857 00000 n 
+0000064922 00000 n 
 0000006329 00000 n 
-0000064924 00000 n 
+0000064989 00000 n 
 0000006462 00000 n 
 0000009121 00000 n 
 0000009229 00000 n 
@@ -1230,63 +1230,63 @@
 0000034411 00000 n 
 0000034534 00000 n 
 0000034568 00000 n 
-0000064989 00000 n 
+0000065054 00000 n 
 0000034703 00000 n 
 0000034874 00000 n 
 0000037204 00000 n 
 0000037327 00000 n 
 0000037354 00000 n 
-0000065055 00000 n 
+0000065120 00000 n 
 0000037489 00000 n 
 0000039524 00000 n 
 0000039632 00000 n 
-0000042380 00000 n 
-0000042488 00000 n 
-0000044715 00000 n 
-0000044825 00000 n 
-0000046920 00000 n 
-0000047030 00000 n 
-0000049577 00000 n 
-0000049687 00000 n 
-0000052167 00000 n 
-0000052277 00000 n 
-0000053704 00000 n 
-0000065119 00000 n 
-0000053814 00000 n 
-0000053980 00000 n 
-0000054279 00000 n 
-0000054507 00000 n 
-0000054800 00000 n 
-0000055024 00000 n 
-0000055371 00000 n 
-0000055702 00000 n 
-0000055951 00000 n 
-0000056248 00000 n 
-0000056497 00000 n 
-0000056817 00000 n 
-0000057137 00000 n 
-0000057470 00000 n 
-0000057789 00000 n 
-0000057985 00000 n 
-0000058231 00000 n 
-0000058459 00000 n 
-0000058723 00000 n 
-0000059014 00000 n 
-0000059402 00000 n 
-0000059868 00000 n 
-0000060128 00000 n 
-0000060615 00000 n 
-0000061026 00000 n 
-0000061373 00000 n 
-0000061635 00000 n 
-0000061869 00000 n 
-0000061983 00000 n 
-0000062094 00000 n 
-0000062210 00000 n 
-0000062322 00000 n 
-0000062431 00000 n 
-0000062538 00000 n 
-0000062655 00000 n 
+0000042351 00000 n 
+0000042459 00000 n 
+0000044683 00000 n 
+0000044793 00000 n 
+0000046918 00000 n 
+0000047028 00000 n 
+0000049547 00000 n 
+0000049657 00000 n 
+0000052141 00000 n 
+0000052251 00000 n 
+0000053770 00000 n 
+0000065184 00000 n 
+0000053880 00000 n 
+0000054046 00000 n 
+0000054345 00000 n 
+0000054573 00000 n 
+0000054866 00000 n 
+0000055090 00000 n 
+0000055437 00000 n 
+0000055768 00000 n 
+0000056017 00000 n 
+0000056314 00000 n 
+0000056563 00000 n 
+0000056883 00000 n 
+0000057203 00000 n 
+0000057536 00000 n 
+0000057855 00000 n 
+0000058051 00000 n 
+0000058297 00000 n 
+0000058525 00000 n 
+0000058789 00000 n 
+0000059080 00000 n 
+0000059468 00000 n 
+0000059934 00000 n 
+0000060194 00000 n 
+0000060681 00000 n 
+0000061092 00000 n 
+0000061439 00000 n 
+0000061701 00000 n 
+0000061935 00000 n 
+0000062049 00000 n 
+0000062160 00000 n 
+0000062276 00000 n 
+0000062388 00000 n 
+0000062497 00000 n 
+0000062604 00000 n 
+0000062721 00000 n 
 trailer
 <<
 /Size 146
@@ -1294,5 +1294,5 @@
 /Info 4 0 R
 >>
 startxref
-65173
+65238
 %%EOF

Modified: hadoop/core/trunk/src/contrib/hod/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/CHANGES.txt?rev=662795&r1=662794&r2=662795&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hod/CHANGES.txt (original)
+++ hadoop/core/trunk/src/contrib/hod/CHANGES.txt Tue Jun  3 06:37:54 2008
@@ -8,6 +8,10 @@
   NEW FEATURES
 
   IMPROVEMENTS
+
+    HADOOP-3376: Provide a mechanism to detect and handle violations to 
+    resource manager limits. (Vinod Kumar Vavilapalli via ddas)
+
  
   BUG FIXES
 

Modified: hadoop/core/trunk/src/contrib/hod/bin/hod
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/bin/hod?rev=662795&r1=662794&r2=662795&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hod/bin/hod (original)
+++ hadoop/core/trunk/src/contrib/hod/bin/hod Tue Jun  3 06:37:54 2008
@@ -49,7 +49,8 @@
 from hodlib.Common.descGenerator import *
 from hodlib.Common.util import local_fqdn, need_to_allocate, filter_warnings,\
     get_exception_error_string, hodInterrupt, \
-    HOD_INTERRUPTED_MESG, HOD_INTERRUPTED_CODE
+    HOD_INTERRUPTED_MESG, HOD_INTERRUPTED_CODE,\
+    TORQUE_USER_LIMITS_COMMENT_FIELD
 from hodlib.Common.tcp import tcpError, tcpSocket
 from hodlib.Hod.hod import hodHelp
 
@@ -145,6 +146,9 @@
              ('update-worker-info', 'bool', 'Specifies whether to update Worker Info after allocation',
               False, False, False, True),
 
+             ('job-feasibility-attr', 'string', 'Specifies whether to check job feasibility - resource manager and/or scheduler limits, also gives the attribute value',
+              False, None, False, True),
+
              ('title', 'string', 'Title for the current HOD allocation.',
                True, "HOD", False, True, 'N'),
 

Modified: hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py?rev=662795&r1=662794&r2=662795&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py (original)
+++ hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py Tue Jun  3 06:37:54 2008
@@ -34,7 +34,7 @@
 reComma = re.compile("\s*,\s*")
 reDot = re.compile("\.")
 reCommentHack = re.compile("^.*?\s+#|;.*", flags=re.S)
-reCommentNewline = re.compile("\W$")
+reCommentNewline = re.compile("\n|\r$")
 reKeyVal = r"(?<!\\)="
 reKeyVal = re.compile(reKeyVal)
 reKeyValList = r"(?<!\\),"

Modified: hadoop/core/trunk/src/contrib/hod/hodlib/Common/util.py
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/hodlib/Common/util.py?rev=662795&r1=662794&r2=662795&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hod/hodlib/Common/util.py (original)
+++ hadoop/core/trunk/src/contrib/hod/hodlib/Common/util.py Tue Jun  3 06:37:54 2008
@@ -24,6 +24,10 @@
 
 HOD_INTERRUPTED_CODE = 127
 HOD_INTERRUPTED_MESG = "Hod interrupted. Cleaning up and exiting"
+TORQUE_USER_LIMITS_COMMENT_FIELD = "User-limits exceeded. " + \
+        "Requested:([0-9]*) Used:([0-9]*) MaxLimit:([0-9]*)"
+TORQUE_USER_LIMITS_EXCEEDED_MSG = "Requested number of nodes exceeded " + \
+                                  "maximum user limits. "
 
 class AlarmException(Exception):
     def __init__(self, msg=''):

Modified: hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hadoop.py
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hadoop.py?rev=662795&r1=662794&r2=662795&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hadoop.py (original)
+++ hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hadoop.py Tue Jun  3 06:37:54 2008
@@ -186,11 +186,14 @@
     count = 0
     status = False
     state = 'Q'
+    userLimitsFirstFlag = True
+
     while state == 'Q':
       if hodInterrupt.isSet():
         raise HodInterruptException()
 
-      state = self.__nodePool.getJobState()
+      jobInfo = self.__nodePool.getJobInfo()
+      state = jobInfo['job_state']
       if (state==False) or (state!='Q'):
         break
       count = count + 1
@@ -198,11 +201,28 @@
         time.sleep(0.5)
       else:
         time.sleep(10)
-    
+
+      if self.__cfg['hod'].has_key('job-feasibility-attr') and \
+                      self.__cfg['hod']['job-feasibility-attr']:
+        (status, msg) = self.__isJobFeasible()
+        if status == "Never":
+          self.__log.critical(TORQUE_USER_LIMITS_EXCEEDED_MSG + msg + \
+                "This cluster cannot be allocated now.")
+          return -1
+        elif status == False:
+          if userLimitsFirstFlag:
+            self.__log.critical(TORQUE_USER_LIMITS_EXCEEDED_MSG + msg + \
+                "This cluster allocation will succeed only after other " + \
+                "clusters are deallocated.")
+            userLimitsFirstFlag = False
+   
     if state and state != 'C':
       status = True
     
     return status
+
+  def __isJobFeasible(self):
+    return self.__nodePool.isJobFeasible()
   
   def __get_ringmaster_client(self):
     ringmasterXRS = None
@@ -434,13 +454,19 @@
         walltime = self.__cfg['hod']['walltime']
       self.jobId, exitCode = self.__nodePool.submitNodeSet(nodeSet, walltime)
       if self.jobId:
+        jobStatus = None
         try:
           jobStatus = self.__check_job_status()
         except HodInterruptException, h:
           self.__log.info(HOD_INTERRUPTED_MESG)
           self.delete_job(self.jobId)
-          self.__log.info("Job %s removed from queue." % self.jobId)
+          self.__log.info("Cluster %s removed from queue." % self.jobId)
           raise h
+        else:
+          if jobStatus == -1:
+            self.delete_job(self.jobId);
+            status = 4
+            return status
 
         if jobStatus:
           self.__log.info("Cluster Id %s" \
@@ -545,13 +571,13 @@
               self.__log.debug("Calling rm.stop()")
               ringClient.stopRM()
               self.__log.debug("Returning from rm.stop()")
-              self.__log.info("Job Shutdown by informing ringmaster.")
+              self.__log.info("Cluster Shutdown by informing ringmaster.")
             else:
               self.delete_job(self.jobId)
-              self.__log.info("Job %s removed from queue directly." % self.jobId)
+              self.__log.info("Cluster %s removed from queue directly." % self.jobId)
             raise h
         else:
-          self.__log.critical("No job found, ringmaster failed to run.")
+          self.__log.critical("No cluster found, ringmaster failed to run.")
           status = 5 
 
       elif self.jobId == False:

Modified: hadoop/core/trunk/src/contrib/hod/hodlib/Hod/nodePool.py
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/hodlib/Hod/nodePool.py?rev=662795&r1=662794&r2=662795&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hod/hodlib/Hod/nodePool.py (original)
+++ hadoop/core/trunk/src/contrib/hod/hodlib/Hod/nodePool.py Tue Jun  3 06:37:54 2008
@@ -101,13 +101,17 @@
   def getServiceId(self):
     raise NotImplementedError
  
-  def getJobState(self):
+  def getJobInfo(self):
     raise NotImplementedError
 
   def deleteJob(self, jobId):
     """Delete a job, given it's id"""
     raise NotImplementedError
 
+  def isJobFeasible(self):
+    """Check if job can run by looking at any user/job limits"""
+    raise NotImplementedError
+
   def updateWorkerInfo(self, workerInfoMap):
     """Update information about the workers started by this NodePool."""
     raise NotImplementedError

Modified: hadoop/core/trunk/src/contrib/hod/hodlib/NodePools/torque.py
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/hodlib/NodePools/torque.py?rev=662795&r1=662794&r2=662795&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hod/hodlib/NodePools/torque.py (original)
+++ hadoop/core/trunk/src/contrib/hod/hodlib/NodePools/torque.py Tue Jun  3 06:37:54 2008
@@ -21,7 +21,8 @@
 from hodlib.Hod.nodePool import *
 from hodlib.Schedulers.torque import torqueInterface
 from hodlib.Common.threads import simpleCommand
-from hodlib.Common.util import get_exception_string, args_to_string, local_fqdn
+from hodlib.Common.util import get_exception_string, args_to_string, local_fqdn, \
+                        TORQUE_USER_LIMITS_COMMENT_FIELD
 
 class TorqueNodeSet(NodeSet):
   def __init__(self, id, numNodes, preferredList, isPreemptee):
@@ -201,6 +202,7 @@
     
     jobId, exitCode = self.__torque.qsub(argList, stdinList)
     
+    ## UNUSED CODE: LINE ##
     nodeSet.qsubId = jobId
 
     return jobId, exitCode
@@ -224,6 +226,7 @@
       
     return status
     
+  ## UNUSED METHOD ?? ##
   def getWorkers(self):
     hosts = []
     
@@ -233,6 +236,7 @@
     
     return hosts
  
+  ## UNUSED METHOD ?? ##
   def pollNodeSet(self, nodeSet):
     status = NodeSet.COMPLETE  
     nodeSet = self.nodeSetDict[0] 
@@ -264,17 +268,17 @@
       
     return id
 
-  def getJobState(self):
+  def getJobInfo(self):
     #torque error code when credentials fail, a temporary condition sometimes.
     credFailureErrorCode = 171 
     credFailureRetries = 10
     i = 0
-    jobState = False
+    self.__jobInfo = None
     
     while i < credFailureRetries:
       qstatInfo, exitCode = self.__torque.qstat(self.getServiceId())
       if exitCode == 0:
-        jobState = qstatInfo['job_state'] 
+        self.__jobInfo = qstatInfo
         break
       else:
         if exitCode == credFailureErrorCode:
@@ -282,11 +286,35 @@
           i = i+1
         else:
           break
-    return jobState
+    return self.__jobInfo
 
   def deleteJob(self, jobId):
     exitCode = self.__torque.qdel(jobId)
     return exitCode
+
+  def isJobFeasible(self):
+    comment = None
+    msg = None
+    if self.__jobInfo.has_key('comment'):
+      comment = self.__jobInfo['comment']
+    try:
+      if comment:
+        commentField = re.compile(self._cfg['hod']['job-feasibility-attr'])
+        match = commentField.search(comment)
+        if match:
+          reqUsage = int(match.group(1))
+          currentUsage = int(match.group(2))
+          maxUsage = int(match.group(3))
+          msg = "Current Usage:%s, Requested:%s, Maximum Limit:%s " % \
+                                  (currentUsage, reqUsage, maxUsage)
+          if reqUsage > maxUsage:
+            return "Never", msg
+          if reqUsage + currentUsage > maxUsage:
+            return False, msg
+    except Exception, e:
+      self._log.error("Error in isJobFeasible : %s" %e)
+      raise Exception(e)
+    return True, msg
     
   def runWorkers(self, args):
     return self.__torque.pbsdsh(args)

Added: hadoop/core/trunk/src/contrib/hod/support/checklimits.sh
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/support/checklimits.sh?rev=662795&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/hod/support/checklimits.sh (added)
+++ hadoop/core/trunk/src/contrib/hod/support/checklimits.sh Tue Jun  3 06:37:54 2008
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+COMMANDS=( "qstat" "qalter" "checkjob" )
+ERROR=0
+for (( i=0; i<${#COMMANDS[@]}; i++ ))
+do
+  cmd=${COMMANDS[$i]}
+  CMD_PATH=`which $cmd 2>/dev/null`
+  if [ $? -ne 0 ]
+  then
+    echo Could not find $cmd in PATH
+    ERROR=1
+  fi
+done
+if [ $ERROR -ne 0 ]
+then
+  exit 1
+fi
+
+jobs=`qstat -i |grep -o -e '^[0-9]*'`
+for job in $jobs
+do
+  echo -en "$job\t"
+  PATTERN="job [^ ]* violates active HARD MAXPROC limit of \([0-9]*\) for user [^ ]*[ ]*(R: \([0-9]*\), U: \([0-9]*\))"
+  OUT=`checkjob $job 2>&1|grep -o -e "$PATTERN"`
+  if [ $? -eq 0 ]
+  then
+    echo -en "| Exceeds resource limits\t"
+    COMMENT_FIELD=`echo $OUT|sed -e "s/$PATTERN/User-limits exceeded. Requested:\2 Used:\3 MaxLimit:\1/"`
+    qstat -f $job|grep '^[ \t]*comment = .*$' >/dev/null
+    if [ $? -ne 0 ]
+    then
+      echo -en "| Comment field updated\t"
+      qalter $job -W comment="$COMMENT_FIELD" >/dev/null
+    else
+      echo -en "| Comment field already set\t"
+    fi
+  else
+    echo -en "| Doesn't exceed limits.\t"
+  fi
+  echo
+done

Modified: hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_admin_guide.xml
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_admin_guide.xml?rev=662795&r1=662794&r2=662795&view=diff
==============================================================================
--- hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_admin_guide.xml (original)
+++ hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_admin_guide.xml Tue Jun  3 06:37:54 2008
@@ -313,6 +313,32 @@
         <p><em>python logcondense.py -p ~/hadoop-0.17.0/bin/hadoop -d 7 -c ~/hadoop-conf -l /user</em></p>
       </section>
     </section>
+    <section>
+      <title>checklimits.sh - Tool to update torque comment field reflecting resource limits</title>
+      <p>checklimits is a HOD tool specific to torque/maui environment. It
+      updates torque comment field when newly submitted job(s) violate/cross
+      over user limits set up in maui scheduler. It uses qstat, does one pass
+      over torque job list to find out queued or unfinished jobs, runs maui
+      tool checkjob on each job to see if user limits are violated and then
+      runs torque's qalter utility to update job attribute 'comment'. Currently
+      it updates the comment as <em>User-limits exceeded. Requested:([0-9]*)
+      Used:([0-9]*) MaxLimit:([0-9]*)</em> for those jobs that violate limits.
+      This comment field is then used by HOD to behave accordingly depending on
+      the type of violation.</p>
+      <section>
+        <title>Running checklimits.sh</title>
+        <p>checklimits.sh is available under hod_install_location/support
+        folder. This is a shell script and can be run directly as <em>sh
+        checklimits.sh </em>or as <em>./checklimits.sh</em> after enabling
+        execute permissions. In order for this tool to be able to update
+        comment field of jobs from different users, it has to be run with
+        torque administrative privileges. This tool has to be run repeatedly
+        after specific intervals of time to frequently update jobs violating
+        constraints, for e.g. via cron. Please note that the resource manager
+        and scheduler commands used in this script can be expensive and so
+        it is better not to run this inside a tight loop without sleeping.</p>
+      </section>
+    </section>
   </section>
 </body>
 </document>

Modified: hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_config_guide.xml
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_config_guide.xml?rev=662795&r1=662794&r2=662795&view=diff
==============================================================================
--- hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_config_guide.xml (original)
+++ hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_config_guide.xml Tue Jun  3 06:37:54 2008
@@ -104,6 +104,27 @@
                            specified as key-value pairs. These will be used to
                            generate a hadoop-site.xml on the submit node that 
                            should be used for running MapReduce jobs.</li>
+          <li>job-feasibility-attr: A regular expression string that specifies
+                           whether and how to check job feasibility - resource
+                           manager or scheduler limits. The current
+                           implementation corresponds to the torque job
+                           attribute 'comment' and by default is disabled.
+                           When set, HOD uses it to decide what type
+                           of limit violation is triggered and either
+                           deallocates the cluster or stays in queued state
+                           according as the request is beyond maximum limits or
+                           the cumulative usage has crossed maxumum limits. 
+                           The torque comment attribute may be updated
+                           periodically by an external mechanism. For e.g.,
+                           comment attribute can be updated by running <a href=
+"hod_admin_guide.html#checklimits.sh+-+Tool+to+update+torque+comment+field+reflecting+resource+limits">
+                           checklimits.sh</a> script in hod/support directory,
+                           and then setting job-feasibility-attr equal to the
+                           value TORQUE_USER_LIMITS_COMMENT_FIELD i.e
+                           "User-limits exceeded. Requested:([0-9]*)
+                           Used:([0-9]*) MaxLimit:([0-9]*)" will make HOD
+                           behave accordingly.
+                           </li>
          </ul>
       </section>
       

Modified: hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml?rev=662795&r1=662794&r2=662795&view=diff
==============================================================================
--- hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml (original)
+++ hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml Tue Jun  3 06:37:54 2008
@@ -404,7 +404,8 @@
         <td> 4 </td>
         <td> Scheduler failure </td>
         <td> 1. Requested more resources than available. Run <code>checknodes cluster_name</code> to see if enough nodes are available. <br />
-          2. Torque is misconfigured, the path to Torque binaries is misconfigured, or other Torque problems. Contact system administrator. </td>
+          2. Requested resources exceed resource manager limits. <br />
+          3. Torque is misconfigured, the path to Torque binaries is misconfigured, or other Torque problems. Contact system administrator. </td>
       </tr>
       <tr>
         <td> 5 </td>