ࡱ>  yF0#„9Dܷz^JFIFPhotoshop 3.08BIM Print InfoxHHH VG(HH(d'`8BIM Resolution8BIM FX Global Lighting Anglex8BIMFX Global Altitude8BIM Print Flags 8BIM Copyright Flag8BIM'Japanese Print Flags 8BIMColor Halftone SettingsH/fflff/ff2Z5-8BIMColor Transfer Settingsp8BIMGuides@@8BIM URL overrides8BIMSlicesfcrop_of_DM04_12_2_bluef8BIMICC Untagged Flag8BIMLayer ID Generator Base8BIM New Windows ThumbnailpPJFIFHHAdobed            p"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?{kxh 7MU:̬Vױ=KإfV5%uI\܊4[+;Hq!)]:!eeV~T`9ķx.Un%ɤ=4k?VyƊGOQgVnk;nWz^+oh$jd}a~LpiK{~DqCM+U~! WI"$I)I$J6FBRZ?,'gvT$^vE|FF:sV.IOxy*Iw;}'^>`IxI)8BIM!Version compatibility infoUAdobe PhotoshopAdobe Photoshop 6.08BIM JPEG Quality&Adobed@            f !p1"0A#2@3PBC!1AQaq" 2pBRr0b3@#P!1AQaq p0@P <*S/t+HJI+(k,ZԂKi[M^Ib&,(A$J V/PV+%J%V$ Ez R[ZV&feR456}ɭu-ZZZjif^4Zɩ$Tx^=盜S6XtM TTKYYfzV$Ԗ+=&AjZ&H$V*+,-e %MJV4Vp$"j$XiWүfRZSJkzijSJR}%&HgHVZ@yAY`DԀ &AjUkYz@l(XŪJ@)(TE"5lKIID_PZRA4iZXjkj{5]MtRծ}K֕}M*j5 Tx>.eIiY`A4X)BI%&Z &IID-b& JDЬVeժK"$ h Vb5IMIֺVk6K5^ҭVjIt*KUXX<-e3UXA% &&Rj5dEtn^^,@/U),,ԤR -SQ"*XU줢VY^SRj^4S]/eMKVښij*@S,*KX@e Q@&`-SRI}$SM5ԚQAXVQ6%YYBb" -TjA $ԚjDI%H-ee^f}HiMM,iږu/^WԵZR L<♵DͿID HDԓeKUK-VYbAU2e X}ALD"Yb ժI%+jKVAItMX욽ZfmzrMu/WK^WjRH=3,U"$<ߎA$ E&t;MD DJeL LH՜DUb&B}"&""H/ZBZiҕ 鮦mZU5K/^VEI"|_+Ͳz^8|:RI>>mAzOro>|۬zIׅy5NYx]mH<٫|zj˺ŪeH KV 7}J&Z V+V$ss㯤Xᦚj^YjZ&PbI9ߖb I߃jN/w97$o_G.[j(y5/m|Ho\ul|Y@=8=>>bZ$В EAjPM}/ 4|=9ŪbZ Y4$AH}ϥrԧT[/ZjMZZɩ$T?r|@{}+Ӌk~|} @/>/gYCb )/x:V\r6 >mUM$_֐).YS!4$5z1jIyy,R-RM^&Y-ծmol)o'+}/WjY&>k`)$~Waj=f;{f Dx~NR!yY3z3k뛝I&ʲ͕ *S I5{>jZ/NlX dbIzZԵ 51SM>M&M-VjM &<>ӿDG: |w5kzof 5>W稁H='n=3~k}'|?;Ip럤V<>wǫy]5Y@/V&QiL4Եmzmwϻ¥1u/Wj&@j|"i ҾOm}_%}iG'+q}&y>]/4׍e:L,ܲ=g;dMOKzzL1|f?F:7)/6-}ܵI)Zi5XibioWLګ=]dZ4$@ ׏-4kK>KNwN|9ޮ3ϯAYG^o gypqwَS]?X5ϋvf/?:竤HZ`ۑQiwg\=,UeoZjiZjMI")%;gOInV0Q<|ǵ箚jtZ_&u:Y?YX=.jLjc^}]%^}qnzxx뫤8s,tc<>:=8X99ZK5ywX +B#8I=8֦&R4K&B@y}aիK8k8Z ФxN\uϋ5X˻P=Xs''; 妤իK&γMK>/_ID M*_KjM+ͪ,DiZ^o\럠MM5$m<xksk}O7qβ:g\A}/U.q\ksebqOIwS<|>g6Ay7_E o S!U(Q|߃rr]]'7;y5m,|-t/ɾ='CG_YjsS]$M,YTgYL^66~}ssgM3R]Le!xܳ}o1&&ڜVk{zkwFa7K ˞Xb~}痛T2cm&nzy~}rף=]r6 Lrl1e-\|X}xsMN~w^v-VZ55== iZPRŪZ@p>.8A6,D֕S_9;:nwss}H&6S_#ͮʯƚ'+Z{e9b7=?FzzK m##Ͳ{~QzgM/frb}ss'S,ڜWI8ksS]$ rsՒk9E5V/C;mM,54$Ԋ,n<.687|msb=.sd=!^_U>Bx>>yޤd*A=}3zoo 6KY$БRD|n?ƌ9;z珖mM4)>sח|X>q4M9;힍qv~_n޹>rjA5^g~_^|uR5Ԧo|]3Y|GIz=\ut9f" =o;je-cԖ6Խ^/V4k٦ZٮS>ss]I/+ja_C}4 ]0.0ŬtF7;s5qzqjy5wz55Q}Mu4V& >_uLyyݷ+.yug/;^}Ixy5wu>/xY`9y3 ;z.VkzWяm_{:̲N6N]Ok׍<_'O79޳7m'g\ss|YGztn8ۚVےIۚUj )&Mx:S7,ɼ9b۔._Iۚ﹖oOIZi|ڻf#)MLzιMcy7yr:N|_cՍ"6 ?γbM1ũﹶe4<{~A& <>ͷ-Bm%JsJ^lAj(HJKxeY :zgԤq򣳬~r=%럝s<+ϭ2sJ8k}NlQaD_Ssks ,X9ɽ8N}q`WӞ٬o,naa5'-S/k\S|Q.qhmH3.Zxk=_Fgy5Zjqq۝]'/;H_Ym11NjѹoOIӹϋnc/;n驥mpqb/WIssk>+|[m^drrʉtSmʹKcmժI/V&*A"6Jc}~vV3˫<_GOI&g|ki_Lcc매7s8ߤM9wѹϋ5ӹ.b冻rr{).ۘb:70StqܼWImcDZ^/rAzm敶k-[nmZ5$R@&Ol1pͦVs%o.lQsCw̚e'-wuR멾 R]3 Twvrng]LsFaWI53er/Tt 4ӟK2ͽm-"͋YDR:Oo̤g^ V-SZYozS]KTի},X-`s囎RgHo'+Lqz^VoYϋ>^K5ϋR"&8oLޞ,Ls,7ܱjU4!ᦔqf`L1krsd6۟km [Y=V7܀y7Ie&Rkj_S}4KYjSm TRRHh+byj kqֺ˾k|,غYl[f휱zzLae1}iۙfڴu7,]N^w}Lk'7;ssiΈ)-줠V&eZWGI溚U5Kk A  .9sΞ6rrub3}3[nrM1S,s멎m,w7܃}[u,,6R7,N/;_I]]3W65_K3o.jUuԤV])iU.*LYm a%Rej{9tc sr,s3vt.tnV$2S HV$TZY5OIkz,TH @>g,r<♹%SJF8|F';ѹ-ygYXc{5ұ3`eͬkrXLI-#])eHLV^,Ma)nD+]2M3$.yg,@{-Ҵ=&mA f㛞Yyf)sq˧sw7K:LsfeDڙ妗Ԧn+)/RiVYVLR4,*kZjBeAX4 VeXg-I T,TI/[ntno^dH P;nYeV\ZqaѹQ]g'+8޻:珖ξ,::Lҵܦnۘ "L`RreV{1VYi8h6LAXk,,3̓]N|[DX,@ +K5ұ}NΞm5ҭd fy3r9kc%c,/OIXS}s˧fmHJTLe[mZejR],PZYf+-2YJK{/@L6JEb"bc4/fV-[joidАA P@( 8V{8>}Οzm{AUn hPj6p1 a 5-%vA.me+2m+l[T3yj5sp QtBtgyDiT^檰]kUjYZdԛzX%uu+wMqSVժ%UusUPv5i*SQ Mm Fj*%)-1"EZp6ӻ1ҍa8;Hb*ˊDa@qхZ`h)^>PEb%iœ)h-1Vv)˭18Fh!("*TAQ*A;Oh'cc.jvν}羘h5L lHXP{HZmxr{4OFL:H+5шZ?pЩ)93qM$yn33:3&fw3Cw;L#3&gL&g3:dL>)΢c-J\lJ$ ,=|oM\r*UV7Lzf{똫q,*S» PQZr8q<αn+%WQ=ҖUoZ]"\ՅqsY?e㥁WM/V]}rr] 0cmǐ_wQeT5jOp߰囐£'!Rlrl垵r?eC5p\9{ƽKD-ư] =LJgTVNGHMyWۯ>'A |g,D@88n4+; yX LN)֌2I#fߌڙ;sɦ+l(1ݶδe׏^0 |*U8qZ8G^>^9MkE&qY2V= 0L(7:цZpÅLS* Vm {@%uC)v]tqS'&~@( ǯe}f"^3,gۉ19+9vxdt*,[3V_k/3ӴV;A>c7w0i;4mð3hf{gcLA>_t} w6g}f/vrܫx#ˈo 9jV=ubm%ܿ)rb'%ЎSU@31ٶِWEȗqj7Ġߘ g6p|qh,?O?NԷqXҾ5vi(M`*xe5x%v[e}i'̹H\`܏%g+%~*J{ Wbti7Y^b2rٷ2+]6ސr;3{-=;pNk =rGtf,%zY!ʯy 7M&.lȭVj9XESdyV(UV IEYkn>RӸ5aj/|XQr7}́s,dl[ ormuD^U+`-c<iD[Q0P?{Gj6[nGl%>넍L۽;cX?D$ou3ᓳ<E3ke 3?dz5@kxF&Ms5xNj,j8,T ƺx)o5Dr!4ešCHӜӸY-TN('1NKŖ-X,r|bwfee  wyˮ,4]޳J9 x=lU[Q[e!TOPe/{ 3`۷/@l5mvKF,_fP'l`_|+H2bx 29yAXݲ2`Paŵ@Un\W.qbڱ;F^#NAFM;J[iEvb{Z=$ݣw+sLf/#}EbveU6"–nkm`De]W*9KgXۚPw=/t^Vbcaib'N/w1WąlN0g p؁O^%zYr̳ͦ&Qŵg/ҟ 3rB0@a6`L)bz7ѻOکVnN(gk*3-+̵;{・^wݴw>v%131Ygq0'&fH̺[ <GY?fki6[XmҚa+UG}-Uq}C(B-q˹ Ue]T, *=f{Oc,l1k[-5I;F| fn1L u\7foy2N"S)*fLoxeF{nc7Ihs4{M f ƨ='v-9ZٞpO~qӎ7}8*3v'|NVX-3nμS&_x]Ixb*;OlM&ƛ3}XG5sґc8o>K?Lӆ.KN'*~`<|3{M(437N5&/co Yo[mZ2fg6i[XҎU2ᓀq7|wpcWO#ZQkCXovݦM>B!b?KX_{;O#-|y]er|F=Wa"H{O#O#fis2fsA4ɀL覆 kF*`δgmif|R.t7KӋۉIw.Tx1ڒfYn= bSz `c*aCIὬ d/ no+߾%qW- ޶ZҌH{,a0-\w[ nq`>Gv\q*9 vJ۶ykNZ WJ),nГ^{畒9`J y´- ŕAZDAۛG[[eu]ajjR TWu@HA@55W,ZzqHʓՇ³e\jrHEx-T(ҨasVQ,!S$~=DEY)\\ ^k -fLIVTtchgK-!vj8q?&V;NO{%giAǍ`8whgx(<{WMx8bRJ|,ZطĪ0ͥcjlhcu{k K/lcE Yպ["x {PǹE50&Pka_GN .[phbElgC}dKZɷO{~<E ݠSiSl)`2t} _c,L`CXҢ @%eڂ sWlӓ) fg4hDjfmhbr0f8;E;K{q9X >))ю0Ɲ(S0V=]?mk`_fLw`YWK0bP(H'˭kJ/ఉyɳ=[䟰p.(}*]Mff쯓Wln=k g&y3XlL|t6n'`jݸo+~,<`}Gݒo-<ض+wn3}$0l1(ZjZWX5r_SƓlK2Tf BV1싕0Q+\D-e͢'dT,n߉PMjEc /X;&TᒥMI[܏S&ㅪERUedwR|Ԩ>32Xd#YRxA,tw-!abP͖+\Zgn?d[n{OcrJԲ{hAvgZ#Y<imtR8J{/%s/6,8fcűk=[[#Sux_؇6mEk urrǾ/7l&c"q^=^߯b3qGرh Yxlia6g3>u0i拏RV=廴 ?4>'#M}%} 1gaYngH|LO^!"1q"` {dcOa)(Cl6pG˧,>D0{AcS :>l{7Y[c3`Z+@'9#_-ufSd:Fy\ci6u_X[} ]_ XʷګŹՃ0s\0b {.}k'yY4V 3Q1 3}缱W+|ΜV5ڎ'g"|O70 ~V Q!sڂSdR-k ;7Y`)@?U3=&0Y;Vpwoxxec:Xղ7)Ks8B;O5mQ dc=5|lkֵءϏd+6¹ lQ,O3f~n&bj$2,MD'k]j^ÉVrM˛o-4ZE#N @U 1IL0gWa|=x;;^ne0N?k2 S j{G/6 ^㿼eLN.6`-_fѰPLKH/qሣN,R@̷̫&'۝0L;Eۼ@&ͰQ1QYʚ6X0ؕK ]dGJ~M{ȋ4a튆#:(#5s>Fh3#aluʧik`33-dSֳ#5b\Yk8j}5mB[fQٝvasu<$Z {^&طuΧy%ma Ͽy[b^l;1.P&%53zr0[ePe#`@#`mbrvh6`30#+@>XK9]ĬY?es^Ƴr ; @Dq)d!xܸ)Y3;##5@V00JeLHFtL3VWbY+| N&(9}l3QRO.s`B#QDr4_ૺlܤͰW+5>evYŘ3fBDŽ TUQxb0C5qb Y1sQmVF 0 Swo>H|l_&۲|>\....|S~l\~]˅~~s}'$&fffffffffffftfff333Ќ 1111&&&&&&&&&&&&&&&&&&&&&&&&&&&&bbbbbcLz^F?f111116ͳif&&ٴͳl6mLf6Ml16ͳl6MiL16ͦm3lǦg03333333333333333333333333333333333333333333333333333333:fffggi^iNm;tvm;NӴ;NӴ;Cvm;NӴ;kv׷M~&ىmL6ͳlf6ͳmf6ͳlf6ͦm3ifٴͳifٴͦm3iL6m3iL6LLLLLLLzZqLhV 6uf!MBLhVffff 1ffffffff q3337@33333t33333337L1#M3333333333?H 11A@R/K@1F'ivi(,'ivivivivivLt;NӴ;NӴn#vn=#bb(a111116&&&4+6ͳl6ͳm:L@&&&&&&&&&>H/SttNG5="K1zIu3Lff3Znfnfnn/7M333t7M3333333>1z t= z;E9'3;NӴivm;NӴ;NӴSviۧzJcLLhQ\@1ӲbmfVm&&&&!Ilfٶmfٶm&ٶlfɶt6LMl6ͳ 1:Lu:~t_~E?umGY3330&fffff4&fff337Mt:COI1IuӴ^q;E~R:Aiviۣfg:&fszFzLƀ11&"cSӈf"15HnE 57:atƂ O@YVA} :zN}bffffffL3333F"dә3337M333333>tN3330ffg诿I1zA='E?@DƘƆb/" =bbbbbbbbbbbIqٶcLLjzBq6lƘYil:b~Cӈb鉉 F&&&&&&:Gdtu΀f L# f`:f07AhL Զ zru&ti[0j-:}fbnn L33:13fff}5m:}|@"uckh@ {hO NDx5^GD"b1Ƙ=.uߡ: AK=,z3fc nms3 3L-su?T:ԱtGAzNtΙ30陝3ft&f 3ffffffffff陙M:tGz4AuƇLLiLLL@&&&&4ƘzN_AY=Q:.mu@Ι3:gӁIuX:?q:/Q~d:s;/ι>A=C?ᇪgk=yι9:CO ?B3Sg?zgR/cCSϩH ϩ[?R+?R+? *Vr"+Fê}q5DltWYd%dxWΫ0q'k"zSozm_GL>y?7㏟5-i"x=;<+@~i"+!?>54{"xG~j"5[ޞȎVDp#p|iG'#¿4%dxWc~8ǃ~84Mw~j"*%d| jn#ƿ4p<_ˋ-Ξj#¿5w8Yi;7_dOld#*~4WK/> WTMҵ[0vvzo9c_"j SZ*Lօ?b:ExmP[6*-0AWlE9SKۍQ ok- N>91N~/ S~@͛B?ubp; 7s< #҆LPU&L~'eWC)w}qD) [6(7֪pE>'_?p/04(:p*vk?" n+^9ӒoM(ӘjKemDHUN"H)ID[iiH'K+-z}Q )UB֟T,2艌O wɴ0M>w픟z> rVo&M>ȝe'O)Iw}Wy;tBZ!i{%"v7RRvUYI}W|"[1AZ}POHeғw.dYvPi֋D]rqwݭ>Im( A_po`vemЌ\ewDԲQ"*J@AF ܀0.rO8T$B,4_qc$J%j0$"#LsV͕—MrO(0,SI1Yi6B&ćP,2 'IF1qv͐K$'1 'I˶b1.d"b\U$"sFZzKO(4NmzXb** 5M?r`b0Ɖ :dS©>/,{L{!ܜ* )BA”M/sd[:*Z[*1pܻ@D9$Ad5ulX "XWpWvBL)ԭVX vzB9*_pWF۸]SpU@V[[Q#.?i M Ei{ʛLmn&6^o@s ?Vŵ1èLPQ' pWQr74ށZ[d* Ubʊ8US/dMopꩅ|_\7¼ ;SI߃*KR}L҉ɵ픺.I/t2͝wQUfYg씮IHdQkg lvJO.J⻥'໥' (XRZ!l6JO/T}Wq<H++Db錋]Nw.drU 4e.<dnOU%e =aE"IK Ц^Ȏ4vx(*57ڪݸUNg<[8B4s'-ZzMMYQfqV29gN[O]Nd*56rWyH'W 57aJoag;WxNYWQWS3,/ހjNE:m.4#*庄4n!v̦U4d| `h? Uۿɰ,ݪ DmlH& 5necڟ8 uaڕoyǹ\2$5w+ QtLmmL=ˉ،W2܀D4[?&mw}:}n@ [hB[{rq!+ek&ow-*d2~ ܻZE@Yʕvl7-)Zân DYFlW~JnL[nދN5:'X8N<-rzTm?E)ڭlB- K)%TV-ZŎw ]wUAmm jU>$SG:쌺Ozew?oꋉ[dmⅢMW`v ]V2~+HĎ*VNҳZh+2yTߏwFOLKF-#rzYQj1jOTK]\$6YJ5Nmj#.ev]]WpS_qNAcPo d,Sb vLU>tLpޝ~R!lW/ هkiW ɵMLr(W5 7-"4W9<ŽBjsVQG; <ӪzuOn,hz0TْUnE;][6چZuZ*0VқՔ| i]9nE[OF07UFaJoVӪnªSON 0*a0iNsAZ3ȧ骯45|->'؛~ THCڼ-\)[߃A+W#m|XY`ꙧx@]{pܠD&QQp[x F"Fk<xQU9;^IN?r_] *у`v(F&M2}LdSWjȲ݇h.TVU[jr 0]QxNދVB@Uި 9eeAF*=P+D*4AUPUAYPYFMW`2?Xte9V!h;hU?U|_<\c' xb0 Tx'd*bLƝUTb;T-jiࡪrF8^Q^'[cR EOp^Ĩw/5PAç'IF6k z2s"7+'1E; ,s]Ym} Ʃ{#/\x!+#"P5U 9 ?r|0R5W=ʸ9%v|AEMQc^,}i%S,9pY* A5L$8Hӕxڨl02c6 Tv9]UL \a|^-?[sJvJd'jK)Ev@yEYz<ТdEzU*QxS@JzW2(,W+j%dOjUbW 7CsMc)Jk<סEˣ0ſ#<<*!8tq70}rDo UHl3Y^DMH#qQyD15UiP 0 U 2X0}wmm x!Fi $4+  ,,azA[p .Rq*%&!5 LܽAg욙g A]ulbZ qgb|#%[ENi cT*'Y=Q,YU,# ZҞ *1Y$2\S%@Tm[$K$CdUxDܲ.4*9eD$sxxNd阹NDTYzh+"뺘\}o[?H"EpSj݄ ڜ`:)ulhtKE!N& J6T *@e~IBF+A-S[JBӔjOwH%4mD>>.ri)YTM?_֫5lMeMSD,+5UO'#ap6q[(7^ܟT,ьrԯ,~*`Ci\2C&e Cjb1T.d,uOc]hSj ,95UWS~1#Gh]`c<_`3k<&ɥۓ\hf3y8Vm gۥ\Ӣ 7rx*MY"e8&VNQ9x'c.lmeISZ*IR^I^˸/U8.فZ2_n8}̛U2eSDC[W<"w2q>2 tUkO.)UHT ‰9<'ʏvl! d}ʹL߰`yqQSMQMovOA|SQSnkGNeK=aḩUR& 5\c|p~&{O[TEZEGn`ꮚNεe]d1~Hv ÊQusevTE D؁oTьnrs*3&7ZX.7w2e*:}U仮~HJ6V_MkU]Vuqu4~;DpԲHpEM˸6NSb0ހ}S-[F;T$HgAT\q؈q3b`CW8n+1f:zq3 w2f:xj98}S8E+uYUV`+1 0ڍcEVa. 9Փ4D\:$T3^g:p8[&ީoUtO4GGw K&xf8baq;:YaEU pcZaE. 24v=p%QG:~$o6|0-]QوG>p-S8oT݅MX6~:`*7ڠD&OX~4v|p#(·ap M p ޫr;B෩q \@L7`M|dS$Q%pU*O53rA[*NMMF[DNvAOgKr ?$H5zʊbr["2e;wث\O22#UHirnz[a#kDzY^4I}eD6qT 6Gsj˅SfYyͫ^*DUʋ%A@^ҏ4ڜQOdNJj!yP4X5L#?k=i۷A/z U OjR)3{5Ҿ#8KsaHTQ,k]Ǻ`[aNpu8NOE8Afw Vc5*B&apzAS>k<"G$:ppj/PjVc8LU곏Tzw~oV;tGw3D\:q 1f:-=@_~l# |wgLQoۃ!GnOUBq;Q2E!lډC3ĬUB[+2T3+5:ªQf(3jU] j7[`J>)ܺ2]T#a"P̬e3ʡY^]V^i-5PK/Qt];*fVe9Y4;O i@|m/73nÑ猩֘Q >uTYyF'YQdE%X Q$ *EdDO^8!D;[mSF5∴kҪBʚU8* Gz|קTyeuA5>js9svAN(0T,^+%&QpԶ10CUωv혁N7,rzUP4Ӻgf 5;ךd;fnY=VuNgE)^J 泡'^z{{54Nk5I;'^*٤G&~р',HS*`arָ7Fa]S߉n*1*:~;*d,&d=W\":-:7G\cNnKzp~v UEDWf[ksQ5GZkwrtn|]WZUt]֪]TwBZ*uzsUv_my=*ܻemrϪOVVjsAQg޵uWG?!| zx]˗)AG ilZ+8#,ET^%ԫݮg4ѭHeUm !#Sl *`+5fEn^xw:mRc*!٩#cvI*6v=c#WC}_!pm{Sp+9|F,Mxͯ z.X%-qo\_>iS[^t.<+sA^} Bʛ[_.hytAӎx"[6H-rp Y,-bOa 66?wpaKw-p}~^Q+ʓw'`>s@%0oW<ɲy;6^rF7>5 MuG :yPRe|napaRCռkU*=%|Cp_S%Rc"?73_Cy '){">Qwedg?P̣:i]nUJadl~ m渓w@cN_usgA[!p1rXǝ07cUzxԺW'zļyN2 WYFxpL?w%w>JUaC/W:@x]k{}ޠٹ [Z׃b]NW/UA*7n^{_yX:cvQ)uRT9rI~bJ+bbק1u*@mh듎C;knEqθ"D+ss UwZS@ݔ|B C\k~U<8#yzp },NZ+P:@:x 1q5 ˎֽ|5|N Ke8eĺ~p/^5Zc}= psu}k0rPW`,G>Grhu,tyqeOIˤe]{z'F޾nmzQ9#e2a]zCc0S]ԲeSh #=)r;(G^k¯f^&+C]탮ab n CNCC*+P""pO2S5ֺBOÆ56 (&60Mn:D9ctClʬ9f-[b3kTkI$VKDyJM=EzECrV}o^uE c5/^ T2}ϗm|J;Pg&P|QqQh3·W\dypj8=#Zn zONwEc.lbЦ!>B+S4~Gw2Y.ޱô?l~ ˗w03?/P%sݛ7D*տϼΣ߿,_yM$ =ۼΥ[syכּ{J|tsKkB,eۺX_}:jّt̷'O).y{B.jEu.7;gIMȹˬw8/z&Smߺܴw3Ֆ_腋T{i|?ZJoPEXaVe~a5 -4U6QnN^Y( po+_W%x(ޥUU)X(B?{u_/ќi{L<̳1}^;ttm1uϩs$V}f]wF]߮#ˢ?y+)2󝘌{z߬]f Q=a/?o>ڗ>|wճ,阥9ṢSiټHrsK}byf5DtvsRV3m SO&N\/6D]X`<ל/A.QE}t{uS{~~bVdw5b~O["1Uʮ>e8h gS{Dl~R=/̶Γ>Vtƞ>p=jWY{uQ`-.@ٷ^qhVn`)o'RZL:i*<9epw!8z^UPZ26?e3@__9`5Ej~`1'][yq(gcwqv#t@j9hK~ pTmt`5yq8t)Е5}@<@|Ԫ¼􁩍;?3d]c59-?3XrtjR |uD F'Vu*-8Y j^xQgNS5W}÷[]|Β9~fKQ,zC=L,48!~iC7xaw凛w NY@Y&=PGWSS1YWf<4/~ׯ_H]ObߨeٲSJKaz,-z3T[:B 拿,xE"D:''DD 뤇J0+򖎙9S΅J$85!J0vav&=L=y~#UfWg~th)bPςO. 49`܅q紷1CEo*zV$ϝ?5A#^>aH8tUgk@=#&=]b0$69o{,:`QN̴VU֖SKo8{ξ9e0<@߀C3-C 9 P?1ÿ7Ωnjw\Jݝ#Yb&߽NLnr-:h; :[o|%&=ݠ;|zYȜ\,=Un؇oUZ Hvuty?rGX߬%Qӈ[ihUVaߧ&B&ZO7=l*f B-~!io\`V`Φ[\.:GC򳎰%d Qo\5QGVPyFΚzh3.bG!YxU]%+j؎:to8,{K ى׬CibQCCNU&L70};ԭYD784y˵9*__9LaLnS/z .^%ʦ{3OT UKiD _lΦM p<L ^7|M}%D4#Q3d7JDž2tNް};LVzJmYTk!*zf ~&]\t`4kB_pTO?d|M㾼E0pY_|2(79"5.̣&S(yY-VkfYr(bj厯nK[n"[-?0s8%5xCkFGҍUbRn+8 irK4?] 0ɖZoww,,^\ffi=~íԯ̽n׆>)4cF9Lct?޿!=`N0aw[; y; \ 现lfa7f< L1upEJWσ^6~a|D@QMI+ ~"!x~pjv8""k~$VzREc?ʱ2Oh]oLt}w-s2q=* f0~㪇Cx _*m [Nq1E# 6*H5RbV^SN]{!pM73Ԣ<ʊUWW^(ࢦy;E:]ĪRoC4{O˄;o)f%Q("5U '#KDtUJbc͞wL}TmXY#7GQ µlK¿<ʋL‴ҋ?PPOG)oa"Ү& )WA{%0cj8xzgYGh.iC^S~븰ZT;kk=\W 2%p+,]q^1퟼.>sx{.X1Z,o?SbY\c%?"?0Gcr3Z;u7[?uݫq*oru\jb yŇJWf"Ư 5ۏI@= 5=zE&y]T8fN}G*_0Y?2c#J.}5о`{|bf zbI ~7V8r |xR:C? Sq(<9M2yaA=o2Sj5̳gw̋"Χy~Y?H u(Cbٟ#'` o?|̇๧h Go<y^į:_u;ռvH!n'YgWy O/Q ˓F%;e?rseŪidHt} /Wv]FGᏖrkBZ'6{^&X:6^UlcB^"ޝy? V#˓iXigAN;>9ř 9/LhL-Eg ʀ.'%7Rs .;I7l[i~e#>ߜ\pq|]~X菺\ت-qCߥjQyꋽR]o9Jl1M~|ps4]ԭmeE׿gUq/_ŧ+G|uQo!v~"Ve!>|~ө>xnZ G0ˬ9gULng`DkyK''#CE_(?lc;ӧ̲8&0_?U27"6:'[\BiSퟺpe\!Ci3cĠ3nVijóyJq~,cs+-&!ў'?~^R,2WOXUv0φ&I_H@هár_SĶW[o׬o&(k9`T1Z׷^39j-P5Hx5X'Rb?(lZԈiӻ|\z@)1cS"zk(3ߩbf4?(*˴9eҞ= 0XɭϮJ/zߔ`t%?[ybR!4fC` 2T +h`Q,8 0,|n!DoK[*fs25GNǤb*3ncbiZq\Uf5vUC*"P9y?Ajq&*?.zq(E)!6a5(dӞ,(c^.v%`0ktT82!m ׷@U1C ߤ.:, t[>8msgR_\DaJy xQ#Csa4#E!}Τzp^RS(U^u_NUPy0-U7:1q/J?ԯu{`c<5\![ {L*kxLTO~(n, ^Ugj#]̢Io ;JOH?5},ew - 3kC{Ϋ0!;@2I_O^ĦnzۋQ^ I3KD\J qRaunfߟ Dc9eq9vCkCyZO(C9tw&jk)Z^%~O?Yc`3j1[̈́3̩[#LO'ss6`>e)PA^pL3a0ᆔK"CTxNzbJsU?B̩~`&gX<1W8)}YݡΥh7(U^ڟY#ZԁA墎v1K$ZĴWB κz QԻ9 Q Uu1jEX:NxX5އ);^;` yi7\ܒB[xKVV%̢[ Q4M,F:IըmRoZvwXΟ0yY9.];޻@W,f%ZW4XY-8AukaW\e5GUvXUgvT PqHwϿ('_)YH6 _8s17FnZ`,Vܰmץƭ\+lE?}SAv< ͿQbȹ| g3:>f|%/?g/[eA=, 6_2zU3[GXeUM.&M.^Mڪc_9i>RIx= ] Y*Ϝ.ƳjYyAUT7,~ev+ߥC+JrVIVkgu]CpU Љ̔эeK3. JL 3ݍp(+L=Pe42v!9o[3n+*=۔1rs1giALg&P73؅Qp:6ܵB;®D^f OP nv:˷yNܲCWϙ~[~8Z }J\gLJ.N$GxU b(Nj'`\P7_NJl!3kMF~RM}. N^zˊ+ UZwOKP6<EJԙ|@VPX5 Xy/&0ˡZS*RFZZ031-m9sa]SZ5omV ȤySU;\#oaX-9poujn|fF#];W` [9p/MZ|q1)ЗqavaҒ1O"zb$KwAoB*qu_eT68QeC1O'I9PB@t!%"EhxCj q,:x[C"llq  4]^Ҙu<>{B vf E2 X$`PZW;w ~a︡WDš.'\Y%++;@Yq[t*#Ukpk(qp[>%{GcFKkW0VsNI> B]e0cO|"oOˆtcؙOcuop=&syt ]K+ Rʫ:i' &l@(ޚtz[zgX=%׷| D+ ?35WbeuKkp\kX35c%fZx'qͺkŃW DSlk,v,e:K%fYVwP53y~=↊YrlsϴLm^(& ^hu!5WB/RQz|'e8!<f2%xThqQeAO1$o-Wa_'lZ;/O\u} `aKm Ǒ!Q@SIbgUq܂h+}8h_'Kޥ]%Z!'"IM_yyeml/ƥT@3Ԛb_(t;.7ϔf`K=I+2-9\˭|vɊ?v`-g_.{ ? @=ߟI)w٪(蛰~뇳:8j?:-GĪ c9/"Hg\v|q.Ľsm;jJ6EIoscUZg g_vQvx<_9?fe6bʯ`)e۾yoRmd>CmEEy,4__Dlc`˶4\̱_<̛b4_XIa|pW LJ_7wR\y^rŤs8͹%ymhŗM:30s2Lʗb̷/xjeo(Y%3/.sB(:`76ms}LVUQ4ۯ5|*S}zek{k_6ۯ/h^Z~loEAy?_WHuag?~:`} iqk%vwl&4 ;k6Qj eʿb#+gmϬ{4%vj׼bOAs4 5…/ ^|f!y=wK=iO,`ӨbW(zKyt-nd\_1w/@ 2ZXJ7(T`{6MCXk7%^|\2Aໆ87yEݾ _*Kr9xsAU0]s>}8Uw4|yT7C6* k?qJ\1J0߽A}7[`ߍ7k0Xp8A܄}qJQ 4!W3́]V'ԭ嘨ۼ/US`}j"4VHzva78,ݿ2V&wU=.Wt+K_:GP`ͻ /48հaefWxkZܸ=oZ:|zs ^ٕ[:7?8#f]͜ .[[pYm#y7ҷ)`9&w)" :K{v]j\|nߔ0V?{gS7~.Yuj #VW'IX<,¾ <4iLV޿F9x:yD}-ue4AF 4+N>}O3(ekX&k D~]0|Ds;,䰲\ΧYsKDKW7_1u$Oj;LygWD2}Į-k_Xyfiƙha_ߤ8ϻw0_~q'<1Ij‘@dNYY yĢJ+5hw^<~~ Moit9'(>Ys1>Oyw5ȴ <"9JY7K7rЗyS} CD`c\>\LZFΘ )^ 9%C"P&_濻.i^~l ]w6O6P.͑kL Q+\I`y&m$_y!eetԳKΜ+;-BZb_\;DK7\pINi+v==x*\|Vϲ뺧`پfic*Xmk2SIǯxxN;tYs5^|5b)TϿ`2\cF߃H0C߸uKYw`;Rrsuſqj_lb̶~6e{{MA=M+1wWQ}{#+9]-Wq;HU*%ş=zam[:ve7ˬ/g0_md9}z+C玓!5w* wk)4pӗʅŗZ [>uz"+y:+PL U)c{lN Nye,2ʉiqYqf?9f AAm}cΆ}͓ܿ)c7ƟL<gN }}D} c6,N^ìX| V- ðߤ6mo5ls15|eלjk!8 PZ٬ܸn3ԠSg^3^w 8%|W~Lf(פL%!y@B=ceEbzd^T|1tu8TG'Iլ0m1=P=}YGǔtaw'WaXX2YqMޓ7kU5z׃&Q2oGstYyf(XK陔*s J0Ni\; | fP<&}: ZĠ 2¾ɏ\)e bYF L|䖪?Pdѡ(߿,Рy7@-iTO1%/rYȹAo(oj8}Ny&27(d)iʿe*y1nϮb7{/\q?c1TzL̳S]~ј > (/3n׫}G=+AY:Mq3ku~a}fP2䨭Ft8E<رkxЬ7Ը#nYԣ.ϝr66ݽVKÁȀKD;F)`66zs3޲*.`ͳ$[Vf=trז/E(xx}b B/]_%*)/> ywTח"qX7\d~S zLG' ֻ/˩#z50(`޲ң/"@#o?0]⿸#E}%,~&1qbd|ǒ 2GIps0_b}%Ce](X#Ay)|~ͳ3C]yoP *Twk)eAsRm]TcT/,g):=bYu wk |p9V)^i]2Gn" xV{52$Հ)!jA& ??`9/hMMzoڍc}&G'p#tayRGۿW>[+_ mꔙZгr>pp o̸xî%Ⱥq o5z%Det+0Z2s$>0vjWڏA5W:nϮX08ʩkV&^~sOĪz)%lsn":T}ju/UeJv>`kAh*5|6 _ʤ] v/(>iEyBV=.,2z.&{QˋuߋNߩ@1 BZd\,8ۨ= VOfhU&kEƨ X9LZl. !S5bw|_ Ql!ʨ492@U,/"P+DD3(7fK `IUAeP5 :#r(˵Ilϣ6q}Ꟙ&wf917IZ&krO`6&EobUfnw8_caKХƞBg`R% Q3}1 P^G™v4yx]VL[C0u`^9"mm=MW: w%wD?L=+JX^.56GxKrkf`URRQz" 4p=q+ȅ~%[F+(DVZMdpEx(ƒX3JxjLο>gS6Xџ6.ـ%yJ kD$0ռpK*8}`vv7V|Jq=~(?N-_>o(koc7,@I^Pu^"VfI</y(Z,:jM5Azڷ/ˈ#gPTuϟ^f `"]l7fCh KkYP5B;[9XĦ: Pt֞Ts|F6YNc>h&r+OA.$Gia pRzܡ<_B랟k/vˮq]kLWu[^}%Vo2+9]ʙhZ7Y;kX ]l%l9TݶqURJ t2}agvn?MGr6-oU~1Td]gcen9{Kϼ!2ƪG2ӈ܆ swʺ./BXW6jVL zٺ1;XzgQ]5f rLSrL93Q9pG~U7|/*ô_} qS1azT3ZyO(ߟ0XEY" ۦ e5q{-i2+<Rg._e_}%g/r%4=8kN;q-/r$ÊP>zJ8MJg+3mYhV}Kɖc1aG-o˂CkF oMǾXTN{*8P##MQby?~G0s.lҰ'h-L|צ>#㹓g>];BFs%Xg},B}fJР/Ĩ,/)Ƭh1oY2DdN4e̯%XSn 6C`}SH[F`ҫ}&kiZSN!5˜+N=ȬqDfJ6,ps*Ƚn[0q_R* Q m%v*ɩxyq,w/>ak2swe |AdE{ǧiq7]`q}{yP߅BY// W~Ks7*At/P߻; !o+f<%vN#cnNj?)|%[E㤵SG)xOĥ:J=ߤ6+-Y+u荷72GP;RJ8/j͖}>ugl<~"ngU%qǜoses_ gOCFJ ?i(GwX;4p{ަw*{(lp8A2joױ5dZ״ocrŢW0wѫhrŹ x*sCp:'TBz,noSknl3XJ~;,x79fDT[g:⮷4rnjfpwg.9YYҫҟv6;m"XNCP1)A%mvn:Lx:_Xl]pzu=UZWX,cqQc{Cuk~c]}&sބ,:GT#4U=nMV¶n@*L5ذMe{-7˨kn?H8r፩w\SEq5fiw W4C2B]`i'HyVZV/.zw-ǃ r>!З{zkx7A JZd$}>$vSf5RE'cL‹B^liz&iоzGٗ tfFSwИ=NO # KT+Y&}3dN(De7Pׇ:F \ƱU722w@( cb+';oGUĥ3!ۃL{|DLNUcX̩rLzL-t{v(S\on8te۬U'=!㖗}eDG}?+/ԵҩnU]޺Euk:}11 p _槔SF7_6޺v +YX_ya&Ru<ט(aԩ(xOꯕn-:LPRխpϜ\y0.޿Eb+=g 2|Ơ{ zvߤkwq'k3e]]qhOh0.ߖamelהٺ}equ+{̩RcTp&8J(IA)>u:H^yhpsYv&e?6I~ϞQ Gh(h lݺyh X(mϤuEmuqɃs%6 bvVr2kU`z?»V:fe8~1@X"^SA+z{:gD0reԭ:#QL\Q{cġZQ_0KJeQ2qLukS:]WOzڴg0 /4ƻf D)ZXYҨ^W\L$po:8_1p'-ށ֠LHiHm]Ag.SGOt3*nq+ϱϳ^Yӵ9)ҽ!UP|~} E8KE\0_csvtXE=zb2E y|F  p@l֏P~ yFz[x  q9zxNǾ2F.WU{b}}[N,-bYe=ðGgM`?<20RS<>(|=ȷmbʃxʨ^OLD1~?q6 | %p8H~>9>??M:1Qh7z ;`}xW7(ҞWaW9S_ W`C`Qfx"ZVmK' 7*Z{zWA\gӫᩥiZ~&`EUNW{m7uIb}ƞ7nۿG:[~{جP@sW{{iغ4^}~} "GU?3(KT׿cuMũ5;t/)X(~ DZ ! fݞX.Շ!GgzEX8Zum]/9.ckRn=#ᛓ5G2"pn*t9yt⥐@^=%3}}7|21/n|s +EJ%qpM0Z_e *./I⛥VX:?%v[ypXUϖg'W]FqRd/%wRQ{v%Wȷݗ=%s|H{ߙ'Kf֋q+;u&qٖXch(md0*}onoMޒ0/Q}\e+=luןOQHe |.,)O{x(Y 7gi_bӑ=&ak~Ik)ms|7~l0{u ~rاɆdNmh;D}tT"_;9R%'g+E6 8J>v KmʰGb?lʉw/YJSܰPF73 7 9= N Nfk8cW.innN<W1/PGxt> .] +@6fR;p&ݝ{_I^U*l@`nU!͗5c̶]tVkQse.Lt~^kXT^}E(f\7G,Ǯ*!V8Ya6%jP cqsiwo΁KъSd7r:/`S>s9.cN@/x\d[/~=m/uG!^˪'[ܿLb@ [=R"{v,gL`pwTtрK^_F̶u!yGwhkeG7i.b~;up4˔y* 4uc9W$[tC OykCrc7GN oh#'hmFi]} \v88칯 ō! yZg3H8 Nne59*Gf VuX'7 xW $l__(ˆ펽gyXrNXֵ_1(X*~%<ƑWM*:u #?;({込.޿0/$FuU-F:;)]_|JcoQuLwHd0׃^k.%ℿW`6Rloc+UC:Mj3_8l\vAULuC52s9EK+̯n]u*|aw$Ϸİmc947@[jcnQ ILhB+gSu`m1y /e[2!|{D]b꿹 ؾ1;}YV=޺EUiRʹbwA:}kc*RATG?UJ\Pc>|{գsn6"P_7eg|Sd_'d61ILO _d=eF0vCihhGn]U-2y.g|o vgcV[蒋SV%Wۙf?1I'!9;o ub9!_x}S3r^^P~Ʉ(%}#0%>wD$ZLPPvER^eͧu̪0 Xk<="Uy~:`5pa>_u xbvx+9Zi] أ}JFRGɘa1V;SXGyWIA{)}x.YjM4je:S4^jL1A#Dy@3tjqCh2b;F|jVξbAcמr~=VM5C\L͎6-#-McݯZuV[ϗm1{ӎڿiN`)qd_yorBdO?qq3D1^ `0cYU _9n[1=%=NM2完}:;w7C)jUoHe}xq빧w"jrÙj0wM_nɏi%N>[yw.pZG>JeoPKꞑvjMp.%.MK]rsf1FtzK>p88æwjuL b_y01.C@V)f௾#eb,uK؈EZzRԹKxrsz7G׿X ԥV ܷI|40(;K7{qh՝L1>/Gpu{^oyEo;gYҷS״.24~sNu*x45? jư__"~Cwj]& ߔj'^Қ>~qկ6W5^?5>Y;VU!ϯns1u87On7uf܀h溸p7?'qL}pG75r<] Dk|NwJ7U~O_.uëq~~TPվή뙛Yb6֒u>oژO}Rna=<88=>k<~>>S߬3m~>ۏ{yO}!/k?1)NCm>c~Siœ?)!y6ny(|>gU?{XۃC8>>a}? =:b:~uu<`:`:e:b8uu̧_XG__2}s{uĜez`:`:`:\[#:ez`:`:`9S##w0/?)K߮bN112000211225Vȳ 76_RE l-KQ|ś876_"q;On䴶d'RږE$9}KE'b  (5D.oWygiaN&#F>gayO)a= CGDt"^ >v;OyMyfnۂWk3F1>ez; y=%q!bwL}++Gx~+>/Gܯ5ďW7߬+g~a~]迿YWe}'bWw+D>*5J*TPnEG7.ϙ-87vKjqsqx'ϤN q7n Zmse%]` KtJ"ڂAȷ/؅C؍[؞b!3uz{%{g!_KKF[Av!_Kd< Kv%{&>Do*z}}!o!_"Y辰s9''yg螩mLLwL@cq;zwJp;rݧz#q8\}111|9\S+?'tN_bhWPW+J"> PWg.5G%gi^ -܂~7YbEv%{O ߲___?, *T=yxϲ^ _mP~>HEV}KZշ mNZ)RJ#_K Pd_q}b؜> IrQOK?["> ΞrwE?A=z_=ޑOOhgOhW`"^u☧Kv!7o oKR'T<.*TqnXb1(qU 1jSz.X(LLF=_t:W=Szqx\Co' 60((x0^UxqP}OD?@x:#x/ 5xq ˏʔ J>1S~]%J51S|>mG\*5*LB#/s=PCǤY.+ >qĵ.xWωxm ߍ>|C$UFH^%@ĨbbTsUf, Ěx:~瘘M%J=* Q<!nI>Rx3C+_J/u-^3fyo1/߁,W.-2 7e0k|+ 10xQ2Cexxׅx|P( x^.|7%ˌƿ)f ^XyuYmKD5[3-eZZ4Yiih\ \e˗q̴V._.Y%_rX5WKxY ><|Hx^+)`̤#̾%:CJt>1/dIpe˗Wˇ˔gHHIgH'H'Ids_4[ uaϊἿ >xT| ;y[Us|W߾2 BJGrJJT9O9+ԇtOGtguC/_V@9dB _mKӴGr }[x=K".T*TJeWJ%JeY{㴩QJHsokx}Y*gR\K͉Gr e7._re˗?>6hxi.EoGc*<N`?sxc_Dx`krd8q+!xcSMNS^ΞW {eJt(>smï?NOOܧIGNΐNe%,x\3Q,s-zWo >7<>'x# Jg@+R(( -quWW (@_IGXXP5Q@  DUφo O>^ O_<byEgG"_L! y4*kLH&/\Tz{/r伱/r13Tf `/-,AK@_S*Tφ4x| |3^o /ʭJ%^߹~LߔbOR I^^ܶZ|CG[~ZZZZT|%,w-r._? 0k3txm6~<6eS|Q~؄?|/|HrVgvDF!~R.%,U*L+>Yi2' /[%z@==3.D eU+.Q}K߀ws~/>&Ծ|<˗b-SLf'K"ŗ|f%osz%]!Nrˏr㟇?0e˗?30{x/  <#^^B~7f ^XPD0OZ-h)ibXKKR.ZYy[r̳\rr fR2ߡpxm4׊חߧ L |W;}'Pf%>#PLLJqWy1 jS#Sxyc+RsW0\| Au4+LwL\.>m>+^^5 Gx%BdE@< ~TcR@HcB_V'3> '} JRSb}$>ڇ@`>.ChS0t}2k~%L&&#Dĥ#S,EIJ5/옄Y15c,,KK&<xh~s㿁xǏC_~&f73333333ffaCᙙ s335 7333go|4/L?!jT+_Exԩ_EJ+¥xׅ}U+k._r/._~._e˗.\r˗.\r˗.\r˗.\r˗.\r˗.\r˗.\r˗._q׍J*WJ*WJRxTRJ+¥J*TR*T^RJr˗.\r˗.\r˗.\r˗.\r˗.\r˗.\r˗.\r˗'~7/¥x߅¥J*T*TRJ*TRJ*TQ RJ*TRJOOk"#k~Wx}gGrDr˗r˗.\r˗.\r.\r˗/'_h>?IJ*TQ>*TRJ*TRJ*TO*TRJ*TRJ%#?A?@>7H~~QJP"}GJ*TR?K>ЉV'语>x''_AܸQU_|/MJJ?Aо1>c%xTRWJ^RG*TRJ*WSwB?Q?'x?QrKrϤ+/#Q?1k>II?'^ D+¿?Q#T^5RJ<RJJ R!E?P_8@~IKr˗~.\qe˗/6?|_"}!'_AH}ox?R}+ JxⒼ*T|kR*T_ *2*>5*T|*T>p_p_ǯ?>.\.\r/.1}D.\?><~?}oQ>ƥJ*T_?O1+>r. r˗/r˗\Eˋ7.\rGF?+J^5Q>*W!HCx|*Tȿ_R.\C1Y< ^J+¼jT W<Vx?ggx??_ hdIOtZK^dRVE^7[Iq)BCot]]/B16=ϷEnI杭7إ$9pQC([,e)*, xQ)yPR`oVoҘ17OsB]QaV*#/&(Gs&}9I$= ,*#>; )On8L G Kwg -v.^;y1bz8mV(ګ"gF)\U% :,HW?m?ݖ n)/ ۛDDY7Ej!w2FwU@⽷iS%C^=z[©[\E9ai8 f%I.<3g\!G;3 VQw&&X&z#2?r&&))ӏ{P1T,7'\%$L=73BHf=EqEi>ZMmȶñ,r:FSE1i{*QE@ڂI~47}j@H++ 9هڤUl+- M?/,q<4P$} |@L*0x|mj2%u,&/p 'K&(f"& [ <{$ZgVQ'嵐ґ)qyWώ#8F3u4RhhmEl-QID19^\{t]w@Pl^Yu :;W>xDχZL-Km8T!VfK2tRb ]T Þh5D=WwBum2/t ߋZ{uM컆 ;1N.g%M%Ƹ2LA*+ ؊%"=27y>omY+ItDgFYTs;0)&v䵐.Jԋp`ԁes Y5#skRE|}I:mn_`𙭔2n'0_\"u,mHa"/@;wNȝZ(aI%\]z5 #Zq).btx6D> lBRTg \eZ襸C_qo o%H% "'&XQHfB$H $R ooW΃=[%džC?q`9߷ҹ|pX.UD2?Xg,z@D])9e]OuO6hd@ 08?6wh-q[j| &>$R }8.0!d;m  hOHgaM.ڀ<!wFR?@i EK2FzAu)J]"X_mr`O/f=?#F~MH}y}I׭8) {^3&_G8o0r"m7UfrdδZ:}e%t1RI[yL, Ïi_~m$1=:5IhlB ꜐Kx}Dki}U@:00%0i2 k|ОDU:`sWǒc(SٹФ -$8<6&b^70^clc_A+: Blgi?us!kww~f1?Qv{G јTVgzɖӛ{nPLԁe򁗯lEmJ29b7iݎO9rVE{g  *wQJᖪm,+"PG>y(Yruy].JtAՇ4eGǤR:4~R0+Kq5Xnݹ,[[kE:b 0.,Kk0.lk ֒,1c6Yr:m..<.Gǔ*+ /rMP`? @[XJW7Dو*h n[C`ڹ3Ud,5p4TM z^=mB—)(uK1(b ]/[là1J- \/5B;K)Ԁ BtjLeD,5eHӮ?"Vq7Ie[aK87Q-T"4q,š4jXP-=]*Cʫ̻Ǹici;,=qV{EAX[޽A{S nFޥD?>W> 4ݣCDB7Sа2⬥|Vq*QpO(2AXoiـCeoht铸Ό[.uҬ0>"Ʋh;WY`=!p8U*S5RJ0w27D4s긅F T B_ 4L hҞ!i{CC0k\?ɛ]+F[ bR#]( g7hw%S\@ѝ*/|JiT/*h\ɅBv&A73ޢ(" ʦTh̠9m7Rdi[ )1ڋ+b/7]fֻ2VB!4. }+Qk[Ƣ\fNuzjC#ٵ]HUxZZ.+LHeM{cwY t\F P6mZ.eSg֯"֣N AS~MƎGXp/do愫SSUW.kN&h@2|Ti.p`n:.q0b=S .twRcS 4`Ɇl[ X=d<[85)В\Uumh \t2TVSL@mQe3A"StgbAFkԞnӾUW-x>\ J Al0d,{Y-ax" 'U*gjQr FWy\#e El{@6g! [@}:vY0Nav~y,&9ow gijG9h-;JL]q->-$RtLHP/ U*b9v$@.]{F& XAQib;,:jgs)˄bӄIb; {CPTYy@F6Ub'K|3Ϥ_࿅pDs>hQ ;:_tet<kPmL]}[Ť;.LЧ+e Q4Ӊd /o@žft0Ypz)Jp!FC``am]1@kY) ap@ǛҀ} {J XZ޻Kڪ\oX6=0To9克 yh`͙qg0 `7] zEh N0[S 僴Bb.Z:G:Y~s{Lj˲}qd,?[xPl]R-rc3aV7 QpZ(Ȯwy:e_*t)ay{1ȭ.凝Lj-gᅣܣ +M~w $OԨJpZdU[j[A 3|A k$n \y|{jK6-" WCizj/7] DX Mj# n LPb3ңvrP~>TJ<;%ULH [C48YY"x]D6"̵/S`)Ϝ_L$k#t10&0 jḀ-l"{{sgT4p9T&)8.xܙ Ժ MA;PPf>5.,^sHTJF\ACbqHܢ`1<t+5t^ax8UDF+T T+?26/@-(-<GUZu3η* ͠%Q+lJU~*B nW@bKmgOSu0 j˛1!Uy*r=xޜFCl,)Mg&Gq@?pitT>PR[48k0ܖa+OZ}k)(eMY+8qG#`@<ﻔ"W6?b]cDxcn66&Sd]6{5ɠ7V&ڢaUqjگ&|LW:9tuC8QV t{(%R* ^GKJ\1-3x*üXT_3m4Ǽ@KENk& bJN p`hSץAAi:ww@F#z+MpvebYYk^اvΧX(W1 8^7-t%S;"-w,"C3( [\*4+C8Kfmrk@Jxܹc JQZq\ꎤmF5Ұe-gY-z􀂁v50-AAF-e(dY7MD%tpVs_qްC#sdATx E!TZfH^ϣ5ĿX-Ǽ8⯓S!,V֜ G|p? `=Z-YeU+qG=@20Iֽe[Wfa{M"A3gSegy+BʹFprf*)[26E+6tb֮8CV8/`uʚ'Rp@zo^qלbD3XKmb:K3~ҤZ+dNu tEm2l8 ah.5e-߫yP$Oq0CICq|b L-޵_}Μ< >^F/7p&Sx;w2d9in<08Y1HQa` RltzP4NQSNMlNWv#PI@}' 3ƝR񪝌C`E;jcN(SY hNGb$kEсtӼH u6L4쥭!&:p05&]͇^L1.tֵoĊLD-Rzd5eP] AX.`^F6į֯Xr~^QjGMw&d+*xӤL9)h_c@\*$} zP:,Y/rV px%iy)K=x54 8M @`!.ж8-*=e(נhy*T@9aB+͎aï9eM&Ń*PV :p()WG cï+E쁛F\@ %S`2E!/PqPjW%A:+!w6-`^:n7uUp7Й*XQwYҨ{hiccËp5NQAj"a-2j&`OOUߞҖҚq1Unr]n4zCs^۔\t{yL3X%_uMn*{U2Zg.}ƣ|rޣ sܯ p0ÿ+. XT;]9:sV Ӓ%4~ bYǰwǬT?i (Ԋَ<|'8VҦ€y(~cjY4Yw:w4 qfE o4h ˠuqeYV\!e+J*Y;B)ၶL,P4`ZaeHEϼ<.0U/ 5XՆ 3SMZͱ)!wps-(=!w`e*@ǹQt&}tT$ڔTz720^hx}rZV57eжҤjJOFJp4+)dr5F8'7 GZUd` p Խ(!k`qVeZ?XTɀ^rKJ؜SJh: OPUט,(9Tj}O3hUMtl+nCj9azq 1% b@UZ~'%bW:B Di6Ž4y#e!kWG"8l8M|ݪSÈz-*:S|@)PkOjۼ6$FQEܓNKK.ݢڣ/0V~Z#iNlugs"Nu Oc5qjlZ i׫t0 (d &2u_Rp ?;+#bXU,ch]}W&;F@,HFumgud˽v*s,]]L<=efX1s m&89 ?Үccz\Lcw({r[> ]`zZ޾a9uQ6ٴ+ )DoNO9xy5w))eA,WŕWFP<_hx uab2#תܣWG*5ܭKZ5Ⱥ1x >8ϯ$h8%73X@NKbG[Uu;gS{Zh^>"wgsjopeu9C/tdɤ ؾ}Yx`FzEs#7AssT-R4ld ۛzއc{& p,@ЊB0KxmP0]`5`c\?些jP BS%)KW̴AlqZ nam)q:o9k5mvb°]WMf(g8Errչ~Pi8X9RE9 ahw-jJIK|̣UfB@`17]Af@61ϒ:ګmwKKN[0UYV89@`Q3du8sXW [1ٙBhsazL ho˲+rxPnQUr nRL-BHYjn-qq( ΢.-m^mhXۣR,>J٪۾BPD(]tͮeU q3+䆂YC_8/ םT[9PW˜]s;)h0Z9K}E h=>ݦ*ܞp`*F7 4[/ [*q ZEa9`8oĬ ;#ط@')<QwAiJi]h(:,`tS8*[>.Y9 F[q1)bb[ͯp( +o~ܻ^ȹ8eu]mOR 5v0^]`$m"=z^\A]`FRuJ0Ucв~(x= )AZ2Z |Xf(-a(5ZLzb*=눂A | iq)[s၈nz,v}K۴Yc9;-׬rQk? K(_s*R WKWeA^L>" * :sGW99y[ Lb(аgUcYx0&sq':[JsvvEپ7固_L1]bp(%:V%Uh6<싡V /}hˠq R95%Ki%ؽ3ڭrv5v~ qL3MSY~}"8:]FzWlh-UԼ] A4+t^pu%5cݗcZͭ_u)gŤ ;?)[ӮYLE)GCkSI+Ry3Kz_57 U0qڣoO8 6'/}%*-\騮\~K3!ڴvu8Hv]dt @VY7^['bL_'PtBXp1FDeav1)%޽ e/ Ŋ1(w@"ϬqTGya˴ F @_/_!^yh)*V)pM Z.`BiOS>Aey=e|2ND fH;ÍqC Vx 2j9-HLŬ[.P0yh &\"ʭdјl sYh*񖈰V݁!zujv!VpVL,R֮ .m7^\D3t5@Wn0Ugk0f +f1^ oa}`xB,;g9baUE3]%tz̃H9awFj*,PB0ģCav_5TnLs=,<եpxL\J8TX NQ="ǮS ԤԒ֬oЌJ.GOۥbu6E2F Yp=[JHz ё+JGCPXg|uFB!Ghqfiw%[UV܁ub*!LM{ ] p 9:6y: r(0¨BR("!|bF R,Q<#$tVBBĦMDۜBy*:F#soXeu 2 wzL`P媫Fph݉|bH590S)YUK+qӱ+(@Z$F<)XAVq60|Rrӡ: WB-!_jĶ%7@*=%ٞ_3vzۣs],:l 0H^o2Vh#W_2,OOibB`Pgnd,rX6=՗!e:̀bF7h_6 b¬8y.ڜ8Z] KT`jL:כ0jsKx{ߙĵdV09*VtǼdT uShWq(/RJe丟,FGZ y -ifަ8 6x\EQr$;dCb!TU|?$@Ϡ_rqnVB^Q8o* R蛬8&VPrh[*CCB K)TAuGk@Ta[;[m=AeJnwz^ ֔-)'Va b@4 ӓH=EE>_ N-wWb`*u..pUz {Ͱ L2W|tQX:,cZoՌ.x>pm8^xHT2"~sWOudi$VE|ں+u,bwdHd2Aҋs)( 7/:bQtl}fmH (c*@/4^ 3,ޯd2֔Ңtض`p^k؀jk.roj eDc棭%U( M>[=k;2Y 9MX7X_-ǷyYoZӤ3~o\ʑEw/?xyX!)!HV0 Q2A/Zik YPrZ# \^X BdӴV :y1r"Fya2]:VX`✩-?fe%U )EXX&xl[7p  wֆAtT+mSɆ d*tu%9! ysUNGӤeUeqXdek=-h}@G{DXb jȆ5Hays /[jP-7q"b" 6 *y涁J0dTCCY`bEX{)Jv>INd%*zwG_PS>Gcq KLHN7 )[*䣃MWɧ`2˱fѯ.Rԉʥ}u[,kN d}K[bu{Ԉ؛wX)~xTX\ޗWZ;;ۘC)9W@/'22mbVkE1ˀ"6z%4fY^:F~cXm7LEz\`H쳓(kSV"S 1XDLA]jH@YCCa՗ 0 PЀKıNmQs=ع=r]Y@UC`u_Bsd]ȪC4il|sTuWFxUqUL bvNV׎ħsRb-[zG^ſx3]%ڀ‡,EGUS 3^0l #N hBk!aܨ {sc.뷤)M:ܠ&˚/ZYh2m)nV]-"1cƧ!V؈%)B4t w"-xYbuF9;j(lRdIn-x {UtNr,6adS {Eh/,_G Ro:t`CmxUȞY LVl 6ӿˆ`S\ӈ% Ui×%J@&nCɈ,J%d(ԡ9!@_HuBcGHufP՟†+~2f72,4~eÖ պ'k7J-J& ʨu%7kGwqQh@CAqU |~J,JsҠtIUޜyJeD+%TS)U)lN% E0]ԗQg65nNFX\R/yR#bߔ6sМj2v[G^=2|n+m}~X bu&<l+>@:}GT6Vyi/BF ]8DhX`(4wtMd9^=gș:ņǂ <tt1]em;D'"yܿO6|O.[p<'~zt ZE#v>q]Nk*ZJW)W=ɉfP^C=Xq2M^Pd<M;YkV!jLc(s>FqA5uv24Ƹ8QtpqT ZZÅ1m -iWlT9^-Dpylpp*]5ɅKBQ͈6џe ^L*(R@o(Cy:Q:PoeHA]8ʨ Q`:6t5d;hܐQW+bF5{C)?BtĬ/YM!!ұUU5YF=fȵScz" J CFuiCMKY#!Pm?0f|GY8XHCW(ڼcQݮKb"Wb:ltLzJ`uX<) ##p9 iJM3"LBݺ=D_bͻ ܨih ˪"FĪ0J 6 Jf-CZp0&Ri3܅הXGEњq!@ˀ0㮮5i'XQ(eAw Y `цƞl=k.pVpYZUFzN P4h 9h m{J֠cpAJ14,7 ؝α,C`Y%N18CJP)l _~3wMqm,R<؀f -ewDhg9pzf彮ht{Ch̎|JJ/-o V`l9̯Ȃ0j>e:)}cY/7,@D6WQz o/7)mD#**.S-m˓j.B1X_EQMΏI m6?y/r(aҷܮX%< 7ƣAX6:^z e+HCrho|hWW]!zwM`7 'QEx0KaxFysѸp'> Y/BT#skn@4[r{!VxS6 ͨ_nyR3.cS EtЭRb|/Xgb;b6'dwpЕZ4uC+1OJ 9EW|F)3qtߘ M# CdatdZ6݌{a+@O3׼XW="d<׏hlX(Dr~_iÏ0mj32YX7>R01t"ux̴(!Z,:iA6baQ b))+vqeYj6KgbZ5t^IBA1jPQlgati( nܷXW7)0IcR݁ >BwJ,/X(N@U}/RNiJ^axVnS&)B X h`PWf#PG5L>@J5S4yd4 @d*b7-L-iS.w窛ak؆a5(Ĭ97?TNX [S.[_r"} wUHrֽcQF# a Pq- >hhHs p<۶8VPkS0r=I9k 6/Lt FGH';sUĬM@FYFKs\>xtǴp,<ʧζ :v1VyKQRqk8 Oh)ZY[h2wǤ:%ɽM(P󀳶]Y"ک29 O~h5Xhu H龾f*B[40cu)~fcJ7@)#w!ؤN5(!z5Ye 0#g\q nW*`o2XEWQc1x: N UWJH,V?>m  [JZ,还pq(K3̩c8*&;yǼL|{Y*82]AH*bS^*RV%27 ֥]DT[峯,vխu0I6Q4l7* ((0dRLL; @m _F,9c4gXZ~r63sx s1 %"x-cܻͬPi %Xr(:R(x7ZXN;!0jQU++X-q] Ч7{G%ⷈR]( Ϙ.5F %Kys2hfrPaLD02 3_|&q86 t9X ' *5T/2d (o#6Hx [z *Ջ?NqNa18ţܽ_ xMQF BQ-Ϥ O_0`#x z0{~j-WbekN*6, "y./\ tZ0+8kbqQ@3`<^CcuAh}]zPwTot ƈ&tR%<^]VLaKneD7uߡXN*yKnϞ"f ]-#:âU .x,,UB`Aa`scB]8M^-Pa,Eע0V$n4 bũW*70dháҦ6sqQ)pJ=VE55bAڪ݆a S֖y_(*6!(+6W: LLT޴b5P&;4oXh-1GN6C7zpAEʐާS 3aARiDY6Li(ek1"E\B[Z|~%h|N{#06^㈊YG6ScJc $hU,ėmKCTNC`L$BJkK-ME;r GyQ*Mi INz9Fe C EW#sS2}"0 1CíZTRαK&.`|T6u҉+7Cu4k(_Ļ:y5puRA5QkG\{@UeV.&qgT]9*>7*f( mbYWvhT; -cUE28ܲnA^-An,"Tr"=%$|6QIƘT/&#@BV707-AF^BPr'kjYEn<c#VZ 5[qj8*gL8"DTh&O4׼A4\ YM A@4qq^M@Dmo **b({vlA|kڄv]!2â+Szs,oCbe*Ű1e:in%`sYCgN" QZt{f ْ҂~$c:F| 2 Fԣd꫁ ]Ñ Duw5M`'X`@v`( <\2-j@qfkюj,J煏̼ㅝAg9iSA6cW^y;g 4P1sPtMS|8l/E܋kzK7Qפ ,r ;hϔl L+]~$C@1JX.̘@vKn"A hw+S_N% z<ʀC|%iBd*Ljëz%5 T09z"Z`%=|6(fH#ibQpyTLta:]{&h԰т9A%|dW:kbdH{.)mt>p(<ԧ,VQcpA0[&x9]v ª;ŇeSc GnDiv>tǜv Al|%Z kȬD*#gxʊc)QLK(gwq; Ar:l5HP7l[N"ܺjՅ{\0hi=%-?o G%\CAx 9p1AYkW(ȮWkGAn}LT,Tn̫TQ(sv+|- 0maw~!hEAԕkmqOJQXuXX)ΡOjual B-{-\:NdBLPRSokAd+z8.65Z0 .kdL2]QTUSz`ӡ\\(9.ɴVLq}33dw@s !Wm_Si ILוJAx- @pV cvѬӚc7)ef$wr5DWX07Een͸.ܡFR⠼㼦`.H.5)<_ QoF)п4ERBt9ۂhBrB Jt/\2cƙ*(n3C=X:e+H^kQltVy"I@TuJ5)h㲻CZvE؎*R ZiЉuQ{nؠ[P]8neZXd]aTj+ 0@B)nBZ)C~,NJ .0F v=3kf%+NfGuR4C5 ܔjӖūT+aמpڔ5<ߒ+YK#^RATP:!݈|"+aQxv2 Vo\tqH4V(.tU[%Ǣ4"X3DM/~Yu~)cCMZv)E]7*(a=7 -MX;/('HEN.6,x-1IAF/ l;<&K9q6k9:y[gE Z8Ҿj(49e0&ɁfѣH׳ >7^XAs)4 ǐ{Њ"c,ĵ`@*mrAIIRĠZilJtCB(Wx@֦vmj`C͇5-v"amy"HgkDe` ={P ,3A|PhKg?T,9o2L8?D%?e68پ^),%ن'T3J- 1Zr*QE]>I\ڜp:!\F񈰭`Ek-Yb8مhЫ_-jFMv fQmP]R,Lv%jdbZM@*pfRqE -`uAKusZݺME6spfSX.3 lZ@B mUAv -eyq`UݩDH8]6i<XU)+m2^/]r Rt8Xp5#[:9.W,C6ʮr7E RңѫL A૬+( + ̠sm3|%hc#kQVLޟ[".Q)J9,cEr:T0*8ʐ]u#Qn6q 0c:]lI¬)n1E,xipZJk#I2^saњt T1ZiXaULE|ۓZ6UߣQ=y{Yiv N[tK5,b퀬h&M= l]u VJ6K½A%lV{ ؇7r6GOz[sfVzȩJJ=܏Ӥ,K [\S;cفwڮp.#0 1E'$.R+8Ձ* H}`֪ڼ"i<+k@=z+'XvzVZ X:BLka{)thpӓ`Lp-TVY, j9kXro#Wc`.94'#O;IB6'(6E\;:;/D|NPKjĩthAKa`,B!8p%RV[tqj*Rc׉$MYqĽZ~.hfXW]0 |E.qQJ8[z[pA_pK:JhpSR7@+pCdh.b4ib^C֤ lzZȠ1yY سOC݇ #W6aFCy&k=GFjL8PZSԏ,pyRGSR+QHǬOYĬۯƮ ʁ]/>>\EyWVp/!+Pxb/2lT9*o~wbjVض|NH꺮!D wD l;+^֯fd{0E gpʕH:sS L*  cw~Pr]g~ps+9?s0Q+E|$ CWhkSl^\́+TtOEFf1 T_1Ds!"yd^fT˱5Pq/e(թj)桔q7`8o7a,ة-0NͯHM}c(F_d%V3-U+3nbl3G >+aJT x#R2/XPL h %thӶ w y<-[m].DnCI*Zuux340qL\p)[ȄMg]^@-P@6vcQ -ʳz]ޖzB#khZYqCDYF.K pX7$.6,,p.g. Rd(Oʥ!,AxZZ)p ZˆE@7o3Y4Ն8 =i@ѳUo4@!o<|2׉`(9F GcPݭAZ.{ !O,&6lq%8\[)* +m aIcAz|kmU>OA,%ZF4*P[n(TbqPv6[_uNVs*s={Ò:'LJs۲u, @%kF>`^dZ^/J : VXѵT|X|/H5)zdL7xGZ҄$Z;DXS[ ɫ%0Ĭm+\ ;}a!0 n޽&53cl .,Fsߨ@ 9qV3 ߈]zR{YNq.\~`Z(ˋ{E].bIpv_1KU7Q/c턛PC L'wrJ ^F7NeJm8ܢS|^%:OHfh01\1~, 4:ĩ-[_6@MڸF)VL*3,IYZP&!mXx{klT,QGz:t\[J0sn#W%uX_cjyExmHȽm UP5(PsH/5np^_0igϬS/f iJ.EDP*2U^2Mi]%Jlo-+*ſBNL6(v :L9ppқ:f`۲֛F1?H0懘iBoWNs'"e]D:/W@PbG*QaVٌqĆf+0OvځV4^֌6c"1 8ǶhF|CswU}e*2(ٮ3һ`[aq W/WD/L9 9J7QQE#|1!IiN'NmXЮkt -HW\%-Vwۘ-* y0@MJj9.cc%Mŋ[}b[\cR.֌V cG"gR|EEkFH~E,V *Kեc{:&t %XUy˿)aYHfu,! hlyLx7-F m|@UP,fb48=#W R֣Fp9]pBPK*+Kb7DF=:j f݈reifK24-PW tl,zhDA@9eYßJ՗{J:KC.asAt ٍrq8>q:sBPōA[#]WV3KZ$#RSH;O n,2XK;)ۖaA]Ucl<& /ǜLdC:jŭ7*6,V*aIᙉ`rW| ( ["+j @-b=>@~e ]!P / |ۨ#^7mN3 V#FE2H)VZwfY,)|4mhr^Zy^\]Յu( ]l4;:ӯcTDrWB j:7<.k](C\t~s Q.ڪKenQ͕w*3s} "db'%zwR8ZnT?aP52%"[R.LEI z#7)zs\VX zsyEfa!X矉h&b lo/ģwcs7pn^.5k`^c9++#~|WԙLZ۳u`hbW`=Ǧnǃa h]޴¹s\D<Ͱe7XAK̉UUJ]WV~Y]60 eS P U(443 R QE-[g@I B`S1:԰4Ȱi jťu1Cb4[\Dy&Qt`nVnE"eI u4q{l{eus<02#b]1+39!(7/KCGG ʮur BK Z9n&@!n9 3fҹ! !YyS`kf:^}@(&0FCS0L|& DeJu)&eW̖b!Ʒ,ÓpAըړ R\0d uetm:pag"VtP)S! |uZ)ѵ㳤j|豰Ŕ^PΰSc3D( *b5\=DaJZ=zŅZ aZzEc^s2Ȩ8Oh|~ *Ht2Xf5z*B<שvcBȾCta[ޒExU i8m(qU7trMUbf:uSK۔N%VPhf {+jT@QB p6/|D"moS $zXp XpZ Ĩ&b"й[rR릞{LkܯHKr(ylB򝥄!O IHbO @xQhHT2{FR+/Ԯ&1JUɑ []gDh[V9/1 */Άl@ʼLsBZƿp''u%[|Bs_-1nP;p{&m+3ԝ:n?"L5G ihFj +gpm `,Z̞ZթCw"9 fCjGr3֌zDV >>0z|Q1qEaz?%#y1xvٹhN{wa81cgB8Ph~RbA&dԸ~QK즍X%M 쮈4JӴc*(l+f@={UFLaR a´ea" dhp]CZ= l@ YIjQ-6)CAdFvL0JWW.<^`@&N[=Nc[VGWV4΁aX<VjRRyd:FiPy#p_40Z f@#䱪[T4#h*<"m:J"ΰ֫(0^)uP4hZ1tw@7PmyRo"}ic` 3m%qTPdjҔ0(%V{W8i8Tf̓mϋV=aa<]G^;J; &R`A* f0Jǘa+}nEh8`]cmVU|D^4~ iZpBR8F(D&A[rb[Q7 d)(LزU+F;g`+*g\ -wYAIhJ* ռibwmUI۶/Qy Z]]Ġ3u45aOy̩c95345>q [ZiBr ,^p6.78 n*MU]11xXɮX,< wUˑi47 J ܗ W;q+-U5/*l2[[b翍Vbpz |̰\%x.t4XDgY."Z̦@ U1BG3x7[+yGǫi=sT)4 %v׼FP2=e@$p鋕;Fb-Kʦg5%݉FNl9sү)`,!Eͻt1r Lv$ Gf:Pz[6_H\y FBzYD=(hZT Rtr*M = M"]˂`{VMU{hba^PsdA+R)EF-f0iDwUSJо՘F6j΃z*}*6ꬷy;˱s]\oK$XZU 5jX/MݏdFhfO!*.0Dn *T45m} lo-u^Zzܡ^¾Z WR \oQV }!8o48s:}\ UBt/0RQRݛ 6ϟxKv=(4f/sӯx F"#Ye&0!CVQap櫤5FQRY5h#WraUE\o`-eڕ^rl@kpmp+/l{DX {XE-%Z*c!Q:bfzN (N!EۉnU{*SBR7**N!L cee3%weo).((Zf[%[x_T(b8@P4͢[_Kd&rW[`лCm(>IFx,Okb+icD߬\|ԇr#% ^5`dm3@\gl~4TҰ2Qdr`q΃\PׁviE}ȼಖ4ͱ]%TzP4X7WՕ&" cm4نYsmN" NPsh+yat} ]:nNDj_"X@ޯs(Z"~`B[w%:&%KKME<nΏyBo]s ,6%tbGڤF EvX=iuع@v޷!4EV,9E @*Wgq5uhRD.u!G6`0,<-t&rw Y &ҤʯR Qv&|Jhf!U=gpSTFh9Z \(gh=fUEVϏX)7B2f-8ʝ Ye|`tQƽe %F9t(X.dLE2,9yk+-( dzxQ4TY -AYvqhu=1ǬRdw14#pE1WVR3i։`^9"ǩ28#4FE}|K:btwa% fد‘*3#ERD%EOzL:UtX79U+T]t{#nʂye Yj L1:r1 v8pz.];qV;,ے~ǣJiPxML+óWJ"25MsiWl( ÃcfVWQ cQ||NECDJha6/4\q +eWPnvAxu%bK]gDG Yo7z(' p@2壗dY1Lp dppʢJ:r aa0PuM؆1^Y;z(2C@E.(.7w^Q@ `cPsn(E"r0)nbSS YP{)]m_2^ƝP]#`7\~"31HhPWg}XE,ňd{ !`~N- Mϟhj-Jg@C(8* )%+Qc<,N+P \/v E0Q69l^*~/ ]tM ߴAWdfxR̠hZeAqYYd0Q_Q=UrEWCx*V(ժV2RȮ')流y`]C>f`ʬ\kSBv2WBy* WG0pEP UGD(* (( <U"'A~^Q i2`4 `Np.J^+`~5.$Z SэE6ŝʿBً[|1-Y.j[re{D.o!. ]\*QDgV刃BZrog;3ݪx ww1jŔG:0fo%X7HK\;,!FKŠ;ɩH*7 hKxj-b.e,}JWKCdWbµ9*0SZo킁C!EoYcȉC8f28`rAB+sD\,X9șP`wy|GBa8-xr b :.Xk^jVED<&}m9&fzu|Df)79@,z= `+*7ێg3P/V7\y ]fgi[3kQĪDžT%_†zu#Fb'R3dNI`'_?TM1|%Yu ys8ݵi(iwǔb*@tc3}n1Q Mn"f5c"Et"*6)j'!TfpLG1]ڥ8ʷocPM06ߓ6.J;K&R2 @jX( 꼵{Tyg uZ,0m|"ҡ[4i+# q6Xܫ"(S `^pFX JT+d=@hqV| nРD)cw'*n3"g\Z]yu\&Cut5sQFEXpEq0'B3\,rYh瓱LK= & O65"m6l1&[HyKݨ)yz]"a?H-߼sȏTa"iAl4XǠKhn R.Wr-n/+@!ϗX.,5lE`siiqK:`;ܡˈ!>#0Bˎ[ZͣKt3g5z|j6p8^.A}Yyw `nNXACylb%@t_BenYz,Y{,<aP\[dB0zJPk*6-L,ҍٯ" D CW WWa!w=cXqml>}%Fd+Gx ]@4an( i`}G/T,%A(QZ3W"5*By^ X!ݚ|ߟ4<2u+aezEV v`odDZ!u+DZ{Ú,\Lb9&jFum_h " wDeejQ{Z3] IE0dq׷X iUGm])צ^laмW0Tt8߼B dqg/nגvA._Ba\P-~Q̸l'{ɚo-h*U50:VjrcB:o?YrmU%9[lJ)iM UaE*^* %yM԰Ä֮v+^Ik+eR֮VA;ie@ 8*O5uB6toQBnSRv抔t`6빷{襪G 6q;D[u]$8@P5'+ N[Eor =@d 5^lGz0uY rnB^gX -QklKbJ'@B-w8\;<Wh[,:-veL@0@o!x 4po>ΐAXbR ҠـR[t #V9j O!@xaQr%( 7/8ZarMRJl^`XEp0m:ŏFWU8vtK_+eРM\kSkͭQ 6S mĻ!4/eYd]:bEHAghf/ -h h`Ëp-ca+Gxb-d;6VEtAsmiM5rY]`L3tVG q LVGd@`|&@j‹GL!"˵Vm2wΆ06%VƋRos߈V +_!+j*6uluTJR3`L%;\U G*3\JurW_3i!]k]0⪲ \:ఇ8?B0@@wbyZ[VqJ-zWX _E[9_L-EӬu؉aSm A·2 RlmSEaЕ2PnIJ4Kw @BY6ˡVpS`%b Wp!w9hhޢ8l7<)r4\ގgd)Hez)ʪs1tPկzޟCHoAp794^zPP,F۶e7\F.C0X&$-3ʔp :tȋ,r1PlxF0P4*1 W)a 맴[FӪJ+9 s\*m)9EB;sdUTV: P؅lR`)Up]b1FփW!.ݡ`4[Cd4iܯ-⁾mB=;ġTEnHUqo[{KKuծpUP{MUUGOM.+$=%5-*Ӵ@vd֫ G`ցQGG0DhPl5ѲSH{)`wܪ]:S . 9W= )aT8C*uLaPlс"ڸ'{eЃ ZiA%mS|B -\z)f,7 J*#Ԁ=Qsn.;2 qʼnPnwR tՔw p^m֭&U̪u^Pbn9o50 }`ƥNY/Z5}57.}i|+@B*̉a 7|]b g3x*r9(hیgJBwW9CP0FaBQ ];t љVvyZruZ(&w ۍ~mSGe ,rז.[Xp8& !&Eiu: 󲲯0Z+h!B?0x֠TQ+j`1q#0o`ʽELböq0*lte ҜZ״/FvqQAr_PQm:n;8iY~^(\8(h0\ψ8UlUYUh5N7DzE*/6zcXb,7YH2 (..`@!]*l`2L\ ebne&*R4дp\Y:J 8C@ a )Cbw/f/]4TYEgnCJ;)*ZBm̵_1A5ޫeEX).=*pj%Vrz"vfH1<eFyx_(90aWN/z5)iy8aMUwī]'e8qz!l0sJ Q8/J}Oׯ*v‹# 7G_0h~}`իi7踪ܡ1e1<%* Qk 4E`5 8 瘢;+ʣrS_3j^}qt2iLFsuCЉBfdKYVy{!]ݔcH.j vhU89{_.J/<";teg@5a͵)~ BؗM %jt 0WF_Wt|qZp# ]_d;]QWg*OT(N(|S9胕pگ.800]6e|K0+F7;.ZJ3Y31dun-{6_z( cKw*RA1jsheE"lʁq\sP^Y[6swVn PN*6qWמ!" (\?(ÇzU`p,ѨfЧF׈%ҳ_; āQ&] gb`8 N4G;iyPNDttUa`6/b\|aqp2i~&^m cTWᾍu+)~ˡ:/:d1n30.ݷUx)Y7 q??c_r5~ܩT|9OW s/D&<OH 4wO`^@Sf(} >G͗[?S, p)UYwb;ۇ̦^k(_o U(@'aj!t+t}G_gۤryFkChâ<~YB?J UWDJ+C/'@MW:0È >py_*J`;i3!¦^O9x3B!$i~\ cX{Lijqp{9R97zAyLLq-j8n!/P@-AH&-poRSX @uRmf[AHۭ̰N5׈5^Sdd_ﴩ}!gIPb! |BH 1P5w~! x<XG2'=%˃w.˩swr_,%=GP`J3xo"_W*TXyQ 03x%\pR_C83_6`PQb_cRix̮^kp! ^@}XaVy ^>b!@y_Tw-i[|{Q3_(*rP*{gpl)L(u4fTw.3AY#i~ۀ|1/p~wc0x_hP 93>37FE{(c2CyC?T|ƖUR&BKxfܨc¦;BNq_c](_de>~`׶?q <_n=|i[S'`]?ɶ r coaU } '`Z`Xеq.SNp|A:W?a wEL9!p <ܫmk` o$[@Olq Cas]da(en݂ a?վi?Qg,U?4a!oin^]ko+Ne/7_no>5*e9 YP P?,._7&e߅xs2e2yTǃRV~z͐2HK4̰'V Je1p*LLjXY HlĩY."E͡*6V Yל* Z*f`LB]\"m(,KʈLzs>Kvn͈Kh[t4XT@#@N D&Z [#5қsnekGXbe ü'%x?>7H$ }})+zC@TFV{}K>*+Z@?QM?)_acuH 7?nk؁[+ԥNN@cz@WGֽDegıl{S)op P8Q^c(ob.x Jj_J=^ 5j%a,J{%oYyA> lO yNa? %TK[*z2"Uϼ@Ӝ̩p&y?%+'s3uq~P}ew?rpك~.d ˅>*na۬Gik-Wwq*ܢԟ"e3`[ GwKRʙYl,cיSb[ ?Br?&Ŗ_V8Ϯb_my3'NQre@?}S{ aK;d})r})qMV;¹+}Ifu+:YU +̰/^ٸWMٸ 1uΦTGHEUXu 1]ĝ=Ex[U? o\y,Pʬwg7mY%& mW٦$WwMK;n'nsA>u WsV/{*:'^/T^=k܋zw?\a'1}_?EE`?@dNׇO\!p%ɛN*ƉO̻;Ca x&X+>%OW!Dq2J _DͲi9Uu_2d\4~V`Y<+W,"F"+e{ A+=Oc=T{"`dvs P-w%ߥ@i!"QG-nϲRF; 4WW^\ r _Nc ^"⼈.ي E_|UAb\k}b~"=?qVa\3㤽گȊv"k؊qb؈b9_0"KC})o]vLڧ/( ģ2P/7y-Tb CJ7~|0F);JUNy?UnA 5wkn?=~ od|qpw/Ǵo1B{ a"ʞfq}E"أ?TJ[KyTy%~#6O2q]LiQSddL=~*U<:|ó0zT f]0{lG['f8}65O'G",2{ g?[#g?m<h8ƝWl.(9Դjspy!e1(bUr~ä'n>jf~exTj1 #X2T g2 z$v1 *E\|ka#%g> cgNB6IZr}I`{GaU@*Zq|AעLC&ɨq.ewO!"=ӣԙkB/{>Qec=ϲeZ k܃g&`sr cf{z'v+ܕer /Ax%D2)O`b*]"91.kufedsJaf ^˻JyҖTǔ˺wr™chkV(|7LT=T$n Q:wJ8?Fx1.\w@*sJ+S)Nұ*52Ix#?PǁCuUy̕A(gT q|LׄU>XJ-w2){B?B7 ^Q,Pys/wq:R }qA_Q0{AwF- BY0{Ep89cj.] Sl,Xa`ĹgM^e^b_嘵W4 [5`TJvuPXg nć eL=2t< s)1 z̈ฮrg$/[G2O@%iC4d\3i\QlK֥" sL& l! wE=w t>}+ ל͍S:p>z_x@r9*rLEŋD\u-)b?y0{5o3l=mhלfiC1ytˊ.x` k6ׂW# Lgr2cPGeEg0Ľg)0rI@3Y`߉q2ʒe)ԂϾ#8<s2U9%,u!+HS`,G?dOJb2FPݐvLCQ<䤻;g1&>"VRa%7d 6@ǜ369_/O?Զ=|=# B2wZFU# >9#W !RxC\f seaP/]e~%XKI)ӟ65.P__9K]-8 RR*&%T6>_sqx;f VƮV%:&aUA{AE:~F*62[&7&VS*TF )KnJR3Q1φx*| e*  t{C*È.aZ-vneXs-^L .yyD. Ӟ#M0U - c17% Xj&)f[1=^xܹfWjP.RoEq&5X Sl[ 2` BFש/[\R LEKݷk""$V%[ nLsKm5 Pmx' xڏ_υ;#j.EN~SO Ȓ!6\̵UsPYN/p9˘t"(`snWkNJDS0}XwY(LbdC\4t 5wtB/1wRÇ"*&oV\NmtJtx(fC'/$bɾ-7LwsEcVU=,~LW.Ħs7 P+<"y 9znq.5pxx=au߂T:#h^Y# ,%FFe,Pg)e0ԯbe͸$)Q2c!.-ŴSqi&vN*IN S .i('$I[!~B ~%n;>9 # yORSVO1%w ^IWK5 BQB@Bŏ K"G D[!nex+?FvDo| [~2R\*WAWT4\uVéʑڎ%!A(j< h.iN^Q:E%pS1XXHǔv} ˹j$D 2.V>_g).!vxY8g,(Pה))h7(u.*D2*u5vC7X^[ЯKZ׃G1R}V8̹"y/ v ~):1? QCr?F> .9W} sS2B~Hs*, la}l^{ˇ>p_UQ5_2YAcq,Qo>2Z1\ʰ?0>heXWr7aGp0ԫ/9buw@vOjs(ݿ.h :>w3Cf}|ultY+C.V?p@O}PZ Urw  ]e4a sKP=0<1Y1 ?VzJi0s0ެT2\B˥t)·=LJnr@EĶ,S:w1Kt]SV_"fnً&|,~fa.!kR + ecrTJ}&8ۢ'T*AhA 5 n `H [լyx&)!S`m0++!¯9a9脪QU?كG[%F٬;N ۂ7*h=W2ah=T3!WK:B6̫N<,*Qy?:H>1(^(Gf;s;K$,lw 1OXqm/z@:q[qTߤ!nx VY^'1P= =IbbGp[lʚlçwqi~&MBh13~ߤ).(֬*K7x~"y>h? 1~RCG e{w^WZWUO#Λ emSR1_NJJω+5**aa<27xqᗁSʲ*w^:ΌFW-^V;h 0$HT 85.Q:J6EԸ\Ӽ 쒠r?aWUd³dYˆ)j X΢Xכּ0&#.UGTc[.DVl"%H#pf,!%F]QL'!%|X*2;/SN[(a*#0MыSo|̬ueޥ+_;:?+ Ya !/*J $^e=;O)pC wSy^Rbh|4P|wnzCGN>n(i(U aѯXz\Q2C Ч& -0?ۃ6^@+G7lz(8!WDhk6FqQ\iH{C{%<N-3xtx7F'WTov !*vWʕSQvzx((h}fT@SBϬ88ĻYxJiu =~&v~K{-3 uWEC;u\LûK .^k3|AW+ z~!_8蹁^`*/b_0~Ibq2V!G~ O5Lz.=m9z|f*rz@~1cOUC:0Y =2u:MhyW3wuA?ī)%M3D޻VOfxRԀu#J'Wb]>rܨ.IuD`T̹Y%WxZCی?PS)#M:ȉ2V~'S6Rkʬ۴,Eayv% Oĥa-_ޢJҺt2fg# [77]Gp Gm1u/qdK3zu5:d^ޠbȌ਽KKRr$ZνG[=Q>`qk7/GGC/H[Sp0o3 {ݷ*ő] ׻7 ~eJUv1R=j!W3~+hnT]ԪI}"R F%TOЛFYK?4m<q~|FG}T2<Ә lJ)@^ -dJ/kg1^hƱeou2ʩvAZkcs͊>#{q? ?Q YwpQ~%ѽy P]A21 n G8N/(:?)刟KO1ٔ6;QǗQmU}Ը?A ^_(m VC)wJjPD]p?WP _]v&%?a~s@Cf(\~y-YQ_.]na< TZfMy2>L׆!Ss$.*͟r%̃?n xךcH_j>7UhG7euzG.kJĿiH桗5 xYtoR!]DoX t"y[n sj骕g*ӡ} rS˴ۙ. qdru? &>U闼Q~ޯs3p>PFHxW@Č|эΨ/TG0_zp8+09<"٘;x7!0Sr}A~U/.yrŕܖEMvD}H_iCy%ٴjz4sЍ0'ܲu=cg4c|RYb|Aig\<Ox78=f&|E0-1=䨲qO|!GZ&K܂Ox}OeƬ8C s#$'qfJYS&VCV6{}qy"]5F=JDeG~Ĵ߸X1[!czpS*Y\8~w BG*^c1Gi37KuP)WYKJI] ۖb=H2?q%cwc̳쎻AufK?QF8oiW^X~V  u_})8%Km7"EЖ[޴PE~?G+H]|GT z#&b?(ohkiN  \y=#Q(5x%zyNG~Ȇ"T.sqYf[bF1 M u !u2 D>ga>Ȩi,8YG%WNz|ɘ zX1O=Z>ȡSY>`ϟ#uLX"YzQԾC} I~R͞Y /_?[k: ?X<xn3|4y_cVxJqiτ߹Ĺuekྯ_=/}JeT6<Ȟ<{΢՞Ͽ+#x_fqs)=4{-;L=nOxgݙOr r{SхVOFd]NlMu[yr{3+!{'9|jxwyG'6>/ɞR;UcV|cSͫ]W%te,!Y1LǼi;/?Tʕ{8s![lkopۢq2 ~Uq )vm%7O6 u(K\ʃ,J<26ด#"S/%\E>D0>h>P*So$@fw)Ghzs/F0 DĤ&w' )1%auC!7X ljz4 w"Pa`灙M\:ʗr):JQ_Wᐝrb_v&6_{"p:+LKL9_XS ~]aԂ 񨫝&*ߜVV`sEt/bHݾ:{,ZO?ü5 0?1o1XYl-r߬Z嘆?1o)g}4.X=rrVH(A.Hĉ1<`>t>ɛ_?^p=vސyMj=|K<ɐ;6>o,5BvZ'.0NK/cT %eDJ]jkk*0n"b]OGEy2laFӹr7u2/Q{Ɩ+̦WUSwJ`̦! /`}B9-R/L_>"x|L?>xl?> Qxh?35߸PWPD38ĥ7у8As%*挩r}ʹ>=?rf礨s,N1"z2f8=`SĨuR B)_ihiH.ԬcRh O2ܼ3-%Et B'c:)eɻQA8%y+fl}z0Ɋ:߅&z+7 1:̥%G/ Ǫpb/}[=WG]ן)~aw͗ro7sNge.7ܵ.c]ε8 Xe̷7Y78a^̻70eN~[} j/l2s>S7?jYWxۘJ+;<"D*WxwhwV @aܡ%<!eA6m)))))J|YOiOFZ.*ԫb fe30,mLg_2s32,/pn73-fe$s30)2٘,[eз<}{}/?V,X0xc.\rA):R4%7:hV r˃R4Bi. kc~OgjWr 2_.[x)sʕ*T%b"&:%R&%ee V%ʕ*TDKx:< IX1O) ~K~)pWāS330Y.)H".S/ n7e1!ύF7)3)?F? UŔKqJc\x\i,.ee˗(xNRVWrr?25q bbH\p  X1M2e< %\WN<|G_Cᧃj-EXˎc_G@߆oßn?|~_~ < 1|5| Q"WRi YJ(%8O}*Q(R(*m(@D@ H )RGJ%\ IBe W?H0ǗiĸS̼.f_rj^ffnffS1\.3ffe?'J<, px&߂>G},) E}e, <1"ߋ ~:Bx>7#Ljn=bbS&b}%u+2S0:2O RJ*T;|U*TJ`wzzzaCoi߉G߆r.4]1c.\.^eˆŗ.\.\(eŏI\r_%UpQx /(aYQF%ׂ2Idw,DfRPH K&Dsr\qK\pJK%b>Hk~5<W[ Dq!+"ߍx*T ,TSe%xRgJ*RJ+¾qßHx;ox;<o e؉*K rG|$#b>0׃faq@jF"%-PYl.[dE0YՈf`oHe0Rٙl[˙~,dic(vxQJ%%cF,2l.\s+J ,.]@ ܦ$r)ࠗY,A'rˋ*RRRR K?Hx;?Fq~C>o5&Oq&as1qs733 as733L0\.f7>XY30~&C2x%oĸk.-˗ŗŹr,j\s.\ˋ0e\rK/2qlKq<,r˗_x_Pvxǟ<>&׋7k7<4_迢_Π<'w㤯ω<q.QTJVeJQ*RU̩XVe% \B DH))))(e Pe RPJ?EeGqߊ <׋\r˗.\K.\r rˋr\rr˗. ,rˋ~9ǟ"c^/e'|G׍_ˋr rno<-'| ^$υxWCφc f|s|)S)|3)c3 WǟQQ p/.\Kppe._r.\rˌ:iώYx>/F ._x:/r~._˗._a<4ĸFIyLLLLLLLCSdž#FXLLF&&&!Pjbbb111٠FRQ_j)9H A*JFIF,, Photoshop 3.08BIM Resolution,,8BIM FX Global Lighting Angle8BIMFX Global Altitude8BIM Print Flags 8BIM Copyright Flag8BIM'Japanese Print Flags 8BIMColor Halftone SettingsH/fflff/ff2Z5-8BIMColor Transfer Settingsp8BIMGuides@@8BIM URL overrides8BIMSlicessibm_light_gray_logos8BIMLayer ID Generator Base8BIM New Windows ThumbnailMp*P7 1JFIFHHAdobed            *p"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?G$q<N5}VSQlb2mqז 5,7B\u#~!aC\Hs_kUoQy,3u ǸIq$V1,mxͶ 3{@ݜ3@uu7G$wYpbAtzݍ-lF܌*0`Ni^4kV~П3! x9[·1)K HPZ6lVmdcF*u]hsn}uH?LthӆAZ\h!ֿ5T2[&%iY ]^{,i v>#bW5,w-FQt,km^a{[?ZƣYlv5$H}zZqsi<GAͯ <wFp-{m{)ɲFyq1GH2[#o.--&λ54PQS46wN=r-/\G>vv幖]~W;\lVs,ي3 hʢCm{~K_hRo^P߹<2q+Fn ݓʾ6fm׶:föڪw0!/1uZWQ7 v?kqUud7!͆~CkO&eu6 Y٫ pNW߯)':=kem!aQe[P{:S^{vM"9+·Of]T鮵qq!iyo*DH9wZjvmUzH[us4j縱*5Bu@T6%۶9ȴ2ÏQS/gO5#Du?Q+޹e&?(`A3{o\!^rbE[mj}R_o3zpmۀ@l~*-ޟ"xa=s n+vT[m*-֯ޙD?}/Y/O5ʷ {loU,gc}e&? .y9'Nl~R{cx~(kD8?F_O9Yo4PaI;?t軟"濋xv'ӾS/}WϥE8e ȇn^N/^e&1R7'_?It_бi,„CsuJi@iV3xp>;w?Ϳ _.}X67?YR_/8BIM!Version compatibility infoUAdobe PhotoshopAdobe Photoshop 6.08BIM JPEG Quality XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmAdobed@       s/  s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?ngb]v*Uثɿ0?"9,=>Qo;7hb?|7f99N]v*UثVUVq4M4-@^5szO_+h1}3?W,Q=Fwfqw0ٿF!'$n7a%XP=k 6 '?%R_6sI_w<ٻv*UثVsUE& VYzN<γpv*y_N)Z[0*ެAs]:O)u=xsݳWb]bu,72=}&@u]_4h`G3t^<7Geǟ{h#я>lZw$a1G3_}[?F?O}kϽ4hI϶_|yoo0#?>-F}'>~ޔpnn _efa {\dl1k:D m\0xFb&(h0gH٪Ae[?Fc#??H4cg/־<7Geǟ{h#я>lZw$a1G3_}[?F?O}kϽ4hI϶_|yoo0#?>-F}'>~?H4cg/־<7GeǟzO{}s5i܄W6XpxcyJD(|&P.VOJ UPFl #a7[?Fke|yoo0#?>-F}'>~?H4cg/־<7Geǟ{h#я>lZC^mն׉ne{7Obp/Ye!Djv*Uت7Mյ WNіEif.K8 lZw$a1G3_}[?F?O}kϽ4hI϶_|yu3kzm SӍw^;?qB4}2) %)̓SWb_O-3?vZu?p 'lW/<,#d-j>A|; f'kU AO-3??Z_ykYFqZ8|w_6O֫vg gb ,XՆ]z3f˅"2/ZFu I2\4jC!; |048onÊ2E?kU ?p 'lW/<,#d-j>A|; f'kU AO-3??Z_ykYFqZ8|w_6O֫Zg\_ ?p 'lW/<,#d-j>A|0:yzC{+gpIjH}ψ#:nKS'D͌DM:T֡RPJ7̮<8 o(JпZg\_ w_6O֫Zg\_ ?p 'lW/<,#d-j>A|; f'kU AkuwJH,O> u:"R{,$iv*کf MI8 ZZ·P܄_YĎz|TӮp9{kPfxM a؍_2;+2?N?z_/ڿ[F=/珗_̎̃#GӏGsfAViKW# s4<Ŭ.5Da8~z SM>pYN^fp䪴hQdYRs+2?Nk?>_# s4YչhqCx~w?48<|jdw;Vdn?>_2;+2?N?z_/ڿ[F=/珗_̎̃#GӏGsfAViKW# s4YչhqCx~w?48<|jdw$gt>a,Q!pqe"j3iݗ-.C#+\rIGeuH̱_2;+2?N?z_/ڿ[F=/珗_̎̃#GӏGsfAViKW# s4Ǽ[o1-KFÙpFwϖ%ї(F9ت/KQ#4p8J{18FBMg? s4-gGsfAViKW# s4YչhqCx~w?48<|jdw;Vdn?>_2;+2?N?z_/ڿWY%_0O d6^3+۹&n!T3q]v*ӑg<۱VI2[fN2rU]_kc$d-0m]?Әe~{[jo406_g_KJS) 4:O'qNB"2Oփ ] Wb]Ez|:|,$g@Ncjs83x2Vگ9D/{[jo406_g_K_kqD/ǵ@K;Wx(Yk#AkǛNH)fg5;UaB ^ID,/m]?Ӝ }*UA?ZZ]m]?ӏ }-.MB2sK]w̭/kdH'x E8].Ie "WsobP2ĘJtc,sSWb]V_b*79(Jzy"m_&W+'?/#&W+'?/w@\̗|HϷwYNĶȅ`0CJcb,$L.9 bپqH+9$`3Nc8:?s8chrqdNď{Ě\bdKGMV1qO2_%#ƼiZ0YeNk!SOp3w,87>@c@;GثWYBK;t}FYc@ȵ(5ˠȈKc5_IF.UdLHIF.?K${$?o#G%_=hr~/4[?Q|ď{<,_[N9Q+0w$rs`1~+ LTҧaRiZv:=J߄ur;gr%=3h&W+G~2#&W+'?/w@\̗|HIF.?K${$?o#G%_=7̓"*3lSǂ6y [1ݸ]v*UՑg<۱Tu'xI IZɫÌ@{1 A[7նEU|~l9w;7նE?r$i$Xv1RNМoޏ]ng5v*UتS-m,Fh+NqxhO$7նEa(ig.ȶCO×sz[n?[c|~k˹-P>?5޿Vۏ(irwo_ml4Ϗ|9w;7նE?q" ?_] mm.ȶCO×rWlkv(v*U3_.뮡Nd` P0NN ˹޿Vۏ?4Ϗ>q" ?_] mm.ȶCO×sz[n?[c|~k˹N} Y縰8cwd`'' n |qtPӯu5-@zVn\}r"$Eȶ ?g˹-P>?5޿Vۏ(irwo_ml4Ϗ|9w;7նE?q" ?_]+;} ^ hs+Xd`bG5 Wb]֑g<۱WQ~>C(U*a}WNUثWb瓿%o6٪_YHn盻Wb]v*UثV4-/=o%ndSY7cq!c>Lk`<{Wb^a(#<7sA2v*[+ܦ PS̬8BDuT-uG.~F^9wڦQgd`C) Wbc {ЙثWbWE,h_JDa +-5Q\?̏2{Kjq#_\?̏/[Ud~Axگ\W# .~F^9w-5?˽ߥ_nqG]-up2? rwmW[?k\+z1,jw$2ثWbQW9b?g.Kjq#_G]-up2? rSPi l9ŇB*v98~ADT-uG.~F^9w-5?˽ߥ_nqG]-up2? rwmW[?k\+z/dy.w6i'$1@#-uG.~F^9w-5?˽5/\JIJs5ˡT@ɉ$SɡثWb]Бg<۱W+Fүt$2H f;ns}^lzȁCo@m\(j?/ȵCQ|ÏrSy$z| "A+#B̍>Prʬuc,qsSWb]V_eكhw)y&m2_ށV(j?/ށV(j?/qwo@m\5ϗ|8;7նE?{?o" G_= mkȵCQ|Ïsz[mZ|kǹ-qP>_5r?Rb'$Wjx߻t?8y90Gb]˺ۻ&5%Fy]~N@N\WkqJ-r Geǹ-qP>_5ļimV[fB81v&.\Qאt}N0w@X sAY3aBDFCF !ȵ{CQ|ܯ= mkȵCQ|Ïsz[mZ|kǹN}˖q.nD#*dB"r4p_-'էoA+TXeK*&ȵ CQ|ݏȵCQ|Ïsz[mZ|kǹy֖ 8R}nMvy0\&? Kf5ثWb]ёg<۱VIDf~RrV]_dd b)0%?՘~sdo5c:_g_˹JS` 24lG:O'BBBROԃ$U1 Wb]EzU:*$WPFcjp MY:[YC/9sdo5c:_g_˹u_dC//eY:[X?Η2wWY-KKw;VN,V?~̻+'UK??Rf]%?Տ}3.jtԿr?1uhxt`" {Mǻ)ԓ0!WHQR:@(8aCWb]RcmmơU&w'3] ,I[f(=nA7̆7G ̝fpm&`l2/Y:[YC/7f]%?Տ}3.jtԿsdo5c:_g_˹ Sfx!']ˍA Uߦdi`^2d) ӯoU䁹xJf>Z#.lVN,Vh?KNOeY:[X?Η2wWY-KKw1sY]r񎴢{㛝:hpD.h͔3Z݊v*Uثґg<۱Ve%bu$NUHOsz֞/;9x UKD??,;*[\OQ[Y UhJ)42]91-88.]v*hzj#v E-zL GT?ZXt+ XwUK aV?/ 20/{N!fe,")7DUq4f١تל`~g##@ʴW8AwKnqD?ý,_d`_~HFQyLEuqsƻ{ lKQc@kɃ7l3:WثW[\MoPdEr܅s#"8`G5OV?/ ',;*[\OH;/s p5n9jbb iˈ@[4"iڦm~ҁ:e 7FAg'rcl0 m*[\D?~XwUK aV?/ 20/{ ״m+TOH8H#o :}yf'!Vd)h)v9D],f8qJ`_D#@g,_Sd`s?,;*[\OwKnqD?ýyEBE2bY9ՉgΧ8ai&͓KWb]ӑg<۱V{?6iFW HBaF;oiflUC,c)˿/9Dw _qDbk<7V񼾤V2&R](ՌĂsWb]~]Mm/B\R:}9,%?d z7˿/9"j{?"?Ț_A.<,5Wn8}6O.D'IO|q3LHt_VX!!.<,7e;E5=濘]yYS>k%-KG3L4d@733E:Y2ד4eqUث|a^iR3@8<n{ݐVwg+D1ȳ&|c^s63#nhTqGd~]>C) ^t#6w,t lu&p'8 -|CڄWc{3&|x뗩ÔDQd.<,S>m]yYS>k-/b+8dT;S{.'ynf5giם ! uٴny^ @TT҇ckqK.Bk;E5=濘~gwdX!H䥉Ϋ;pLJV4;v*UثW_34?/7ʿE#sM~KyU/??˚n_1\w^n/F曼w1$_0L4俗_"c?%*_7y/]ޏvlB†!O!Fm4ژg94&&7H򾫭5Պ)n&:yp8b1$_0L\w?1\w^n/F曼w1$_0L4俗_"c?%*_7y/WbH`.i/7ʿE#sM~KyU/??˚n_1\w^n/F曼w1$_0L4俗U򮭣ZXF8bYFFeiK|00)DY@im֭x6aLcQENFe59 ##A=/F隯7y7~^n/F曼w1$_0L4俗_"c?%*_7y/Y4HPG#kT'f^1j$c O柒}~Zbqr4w?_돃C|9|0{;&:`ˮ}LudӐM=8擷qYHiL_1sO染;iF/^!L_1>O柒}~Zbqr4w?_돃C_b\|?%#i/w/'Ox{c-19?~K;iF/^!L_1>O柒}~Zbqr4wXKm2A"Ye! (۸?NuHUGp(<+w Ij@`9툙iՀޯiF/v\C_b\|?%#i/w/'Ox{c-19?~K;w-ͼ]2H#4:N(啂=?8 CpBoK#YY{M7qԂAp;Z&EoK)舥!9"h$ Vu5wi5K CQ96^֑g<۱Wb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWbY(:Wy-Ǣj6%ijZn4Uibdu2[8xFQo;7hb?|7f99N]v*UثWb3*@Q'` Z}o:V ΁c5ON6?%3{lٍ?yyn=KTC$eW30|dl%$'K&i;kV^>瞻7b]a_?ʴѳWSn݊^_?E4,akx%f9poV6jYiO.r,v\Lgj݊TN͸GlUثWb_e?GK2 fͪi0T ލ> *P3HDχ' "&T.o ku%f$;Pgl˖(i2 W!!6=Xgz_}z?Gߠ9}?SSk|16{ngb]v*Uثɿ0?"9,=>Qo;7hb?|7f99N]v*UثU ݽoqss/6goKI7ijq]dDI'm>#fUثWb+'9V6t}/j~<{Wbm k3UsK?ϗ._r3s7تqOH?QoiOۋi4v]v*(X^o{d{M_ɿޟ?y䛓%sOE9>t٠F*])#1D'JFIF,, Photoshop 3.08BIM Resolution,,8BIM FX Global Lighting Angle8BIMFX Global Altitude8BIM Print Flags 8BIM Copyright Flag8BIM'Japanese Print Flags 8BIMColor Halftone SettingsH/fflff/ff2Z5-8BIMColor Transfer Settingsp8BIMGuides@@8BIM URL overrides8BIMSlices}sibm_white_logos8BIMLayer ID Generator Base8BIM New Windows Thumbnail {p*P7 _JFIFHHAdobed            *p"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?ۅ/kx\UdC#EЁEI\~ x?_{DW}xjԗ/!,7gno\vgO9XN3XCgh_ 5Ͼ׺5q-?{Us xy ]tޤT#xӃ$F3@S)w֋XG<~Ecg݋M]g#&ͮ';۵U̲ܖ/E֋]􋾓#\L +^Q-?Ɠ=jQE~cƭ[v~-.&vVIy-isU,fyC{ksvfdT컩sZOh;}RpK.:? J)q:uC}_ >}yhͥ?'XۚKXn{O*QgL8}=Z˘A_!#lMAPYj7b8wfu6qKõOֿnӅ̎ Ti~rH'?=cXt=*-쬏n&3j,pyC`ڹ6F^Uȶ|1enݮߤ\QO#J -ssc {^Q`tFᴷ\Y{kkoK9ՆÿX;}qOgju*7u6~~ju~v~S C>_if$Mf=K=hF:qٰj}-*ln_;WI%v:ٸx=oOW0;ۿ誘]OdWEE| .FN8f8E2>_-oo2[±wj9#&+Up>7b-lT7=~+\!62-j D WX@B쌘1qƇcP16ʭlAIFuWA t*ɬ5zsi#e. KioTF&ך//WX0hvhVw˝Ecu l"g~ߣǃߚf_'PssGHqktug3d9{Y^_NMtwoZ7/ݗˁ3_r0}&f TnߩO?Wo׿.jO=cM//t퀟_lӡӾS._/1zS1[z;2-iYmmd=FTt:%/ m!#_ۖ_Q.+?;Ȧ{CL)_\boslM2 w5~~6ȼyL<ߣOdw#_//-ܶdݮ1uovlZXvC6k]ާY]GQyv'Jfk77rY z  sVN6m5dMsY] ԕgC+F%\ cs9~J//8BIM!Version compatibility infoUAdobe PhotoshopAdobe Photoshop 6.08BIM JPEG Quality XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmAdobed@       s/  s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?*UثWb]|) D{9&?]>z''җLA׵Qu'/G{s]v*UثWb]E)"F*pFXֱyq^i0$_/>5?W6~a>iKy$=)$ԭ٠֎P?Os{I)8;ˤ#xVF())؂;(gߓ_+2C%/|9Z_tUثWb^3zoJ ln}9*0gDz𞾡K|~ <'=ջv*U~]?/7/+X;AbOkj/:᏾[}C`>w]v*U_10Ďtqq5_ݾhSt]?1?N֟G=kCN9;;Z4?;V'^Se?N1?N֟G )/rwWv8 hO)3wOӵQCKso~b???S_+{?iTq@Rg'uwU޲f^ #Um4\zxpcg3#e1<,Y[I%3~FURk$lz(ڮjeǖʚKIXoXq;Tא?_Hj?+__4"# C'v$wڬ8Cf˭@Bt?<.j:ճu,D usN]F83@@r4c8g򦼁,DVs[.Wq;Tא?_Hj?+򦼁,DV?[+\}5`&D:_w 7Տ!8WsMyX%,W*k/$M5cubS^@ "oCpK>ʚKIXoXq;Tא?_Hj?+򦼁,DV?[+\}5`&D:_y/ϑ|YKW0Tfi & ǰJzr'p58I?嶅ͶNT )0H=FfƧ&M,HWE_򦼁,DVp?[.*k/$M5cubS^@ "oCpK>ʚKIXoXq;Tא?_Hj?+򦼁,DV?[+\}5`&D:_xW&쐦4iqd"6Xw4uo;֝VN_P&2{*nwb4,B'`hYK=7_ɱZI6 O*@V_-Q$oӰz;xa[EʚKIYW!8/w 7Տ!8WsMyX%,W*k/$M5cubS^@ "oCpK>ʚKIXoXq0˟*ykʲjExvI$cvS+zQgv]v* XeyI~tw; 2J<Ф_ڿ O)/AGs`/$S KP+?I+TBTjtw; 2J<Ф_ڿ O)/AGs`/$S KP=y?8kGlm/EHv)Z~Yvf0dnK'_~i[#FJM{ƚ(ƜhQ5}ؒaxqe0VaW KP O)/AGs`/$S KP+?I+TBTjtw; 2J<Ф_ڿ O)/AGs`/$S KP+?I+TBTjtw; 2J<Ф_ڿ O)/AGs`/$S KP+?I+TBTjtw1/_]FͣIWV%,@u-. ӯH b]L\yZ-dH.ٕ$U/Olc,"qJ* ̟sFs?%~/rOoS?ZN]W;-4cp2_g_˼09yBZZ]\M4 r.!](ykT9|5qf͛KTE0Y.fҰPM;oe1'"=GT?c%NKno* ̟sF?%~ÿAyv?[hdֿxIISEoey r@6w9Zc Mi/>Αv*Uꖿ>b5+%IIUOPC~|g6Hǂ[/ $Ayv?[h̗9wʂ'\я)}'.P^d1E8?/* ̟sF?%~ÿAyv?[hdֿxy]մw3Z\KwhC] VABbq4C?.=jgtg90,8#w]۸tN9";Ǧŧ_W;-4f)}rOoS?ZN]W;-4cp2_g_˼;T?c%NKk9wʂ'\я)}'.|K'jˤ_M4)?8yqt t5H.\fAb]v*ԑg<۱WkޑMV\LT~,E suFP(ndaDc#/W/C;}X%_-5=Y4E9|C~/JOaSy+?=??z9|Ƈxw_~qK4;¿:5}/ZE֓wXGKPi#çrDՋHJ[w<:g تc״G W$h*I1uQ209 H{TWW_z\r/c#S|hwpy@|4R/R8$V(9&vgfǩ:qu9ba@= ջv*Jדbb]I%u3 ! A5G$.ghP#?JO%Oc#S|hwW_KC;}X%_%G/W/?4'u -AêLjN?Y=0X}_Q\v:^nc@+OLݓA}SyȚc[&+(R޺|EGz#赙!+N1a0y+?=?c%eC;}X%_%G/W/y+?=??z9|Ƈxw_~qK4;8u]7Xj]WQ^Z8 ^JH+ t3<S!)ytn#Wb]Ցg<۱TN5{ayW7vC:r^v,9'㔅7!ST͗>}"cT|yq>y1)y$h\*M:iid@#gBfũثWbU쬯5 {A,@$aq2:A;7!`*i?#lg]XoCL4>}"cT||VM'~kϸ_ȇ*i?#_}:ՆD?SI3.7!?ʚOHqwοa1TG >u R?5g] R?5gX6mN])cIbЯ^7.AVmzPhͻq]XoCLʚOHqwοa1TG >u R?5g]XoCL4>}"cT|&K XG)fTU& >drD惊`Yzƶ&c5J C!PiҴqa䐍 _ȇT͟>}"cT||VM'~kϸ_ȇ*i?#_}:ՆD?SI3.7!?ʚOHqJu-+Rk-P)qjh{ffGMrv*UثWb֑g<۱W13ĆygΗ4J(ޱ07?e/G?Ga>y*ʫiz}9$zB&_a)Uy1v*SX5_ԸN]v*Uבg<۱Tu nm3IT4V13rI"&'^/&o!<qJKMO_LV?|IwyE.x*e"[pp&lB?B8R`UثWb-ŬnIٖd'TI̟x8 IwWIjx?/.7?}I3XO҅%]&'^/&oSP$˿d$5c<qJėyw̟x'N?B.y7Տ(_]o2f8 KMO_LV?|IwvF/#jŎz@(0[]L̞bETM^Q@ P#6q˼&'^/&oSP$˿d$5c<qJėyQ[nFQXL$^cBu,;#4lv%IjM y7AU_7?}I3YSP]o2f8 KMO_LV?|IwķSԙF: &[1$jcb]v*Бg<۱WTޯ5M*LiW~*EHsF0(l cd3c"fSW/ø;Ȅ*j%_-ohvq"& NNRrJ_63_=qѻv*Uث(|Y_6HX%Ȩ>5=XM9C~ />J OaT0+6?!??ʚI|pw_a 1TK ;>J OR_5aWXlBL5c"cT|w|VM_kø;Ȅ*j%_%ՆD'SW/0^/ 2tGaQV6;}N_C~Pb]ҼteЬG(If@I;gg=P 2Kc6c"e?ʚI|ø;Ȅ*j%_^Z4]O4{)AА:TgS6l&d8z01:Ӽ &Uҭn+CY ùfiPX@7O+6?!?rʚI|%ՆD'SW/0+6?!??ʚI|pw_a 1TK ;ci=·bѼ?$jYNdr%d>X=n-"3Yq0@(: yG1qT{c"g*j%v ;>J OR_5aWXlBL5_+MږUVv'1B3h;g{?&m7dx?Ft;UثWb_ёg<۱V{?mg::VV_g_K;W?c%жKw'[,׏}9._deB?//%+̟l^?[~仃~?[k `|Կpw2ղKxlϗ '׮Ie1J0bA#ur=eyhJ !A;MNցCw nI]RVZdijB(PO휌9qs᫐2ղKy-?R9._deB?//%ߜ2_;X[_[o7>EmiݏG3(ț4r )Wݨ3T}SNHy"h%n\X߉e|Cg?|V-5 `|r]|V-5>_g_K;W?c%жKw'[,׏}9.yailmQs PHۦei=R&=OU) aZ>Y6Ѥ%H@"i|RM 6_deB?/9pw2ղKxlϗOXo-?Rr]wq՗W(&XR ~"M~,4hq$\ ͔6-N]v*Uґg<۱W NYf/J4FZFiZ;Sgሂ(;N7lG5_/~ec/?^.\xqA꿑zNj \;[:c&L9m޺b]NO1hEx*Yx>05,Ym9?.!aqAx&GU'ÑFF)xs"=EY.c/?^.\xqw W?/~e&;מ(m|ٵB[o$bhEQ* ˛NjR W9^QUث,!+kU%*#_if<bG2ƌBEǕq_s"eS̯{ FiZKt$Q\vGl[PDh_g18og΅-ZWU]G ]ذ#8}g9zOyv8AG0V_8g{_\ȸEY+1?.<V_8LwΚui/wie*;>Qd2e!04Ҵ1^J"iP&Y% 1x_\ȸEY.c/?^.\xqw W?/~e&;[;&ˤ[\=mnWfW:KYĐpsc1\۴;v*UثWӑg<۱W~Z~e_WJdnid"8 ;Q F/_o_97#X+ȿ954Q[=ʹ rF*ks#Mc" ͌01!z[v*UثVCmb@^ݥ((oiM

nX+ȿ957/D7k;5"毓u+zEz}BJ/#cx8ǔE|A6m5niyKo KIl;h`m<r HF@/D7<Cv]E\Ȇgp汻Wg?!?sY>ko.2&3dB]M. ~ 0޸]v*U3Կ_'OIT6=?G/Rn%ͷ_#俔Iym#c}/&R^z|=|KIT6=?G/Rn%ͷ_#俔Iym#c}/&KiZݪ,F׋7jqÓ8). 5-8Z)̲UW;Ҏ3[4M LXNIym#f#IT6=?G/Rn%ͷ_#俔Iym#c}/&R^z|=|KIT6=?G/Rn%ͷ_#俔Iym#c}/&R^z|=|KIT6=?G/Rn%ͷ_#俔Iym#c}/&̾Tӆ jdXWӔ;pH3t}O_&%e%yTH`F഍KϰVlg$@f_3I}9Iym#c}/&R^z|=|KIT6=?G/Rn%ͷ_#俔G1yFe"X'ь [p͆pjc Փ ,l4*۽ȑ#9※a B&Gf*K_o9G*K_oG)69%k~O6UR) t͞qjÿOxiɊPsfҍ4oRҬBx#QbGuX[Euܟa>' s\JӎUثW:?/_柑c;gGj~Ex{LpX_/Oȯw:?i3GG5c|?"Cߦt[/WwΏW oՏ4~m#_柑^! ;K-4F6Nz(uszfai+C%P`VFg96)SOt!:?\-tVr.ow:?i3GG5c|?"Cߦt[/WwΏW oՏ4~m#_柑^!:?\-tV?+;gGj~Ex{LpX_/Oȯw:?i3GG5c|?"Cߦt[/WwKxkuvtqj6^D3gE,bYf*1Q cx-c-ĩ B;Ea`74hciJ~m#˿/]w:?i3GG5c|?"Cߦt[/WwΏW oՏ4{_wMK[u,R+='܅':fqNdyVA= ջ*nӵ,麅1IKUVgvxubjN%IO?LpY_柑m6׼t Ie۲ἄSoX}=4J^?غ}L`8X,αķ P'5]tM>ΏW o՞G|?"{LpX_/Oȯw:?i3GG5c|?"Cߦt[/WwQ|,Vp/`<# Γ3&@zkVmPH 0"HE_:S.c@0I ]FUU)N2?"_s# a/̖֑g<۱Wb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb^k z6iu=Y'b=פn1q͆Z/P=b\?<8e?!mANյ]*MZV{fTi`3v'1\ dey1!#-$OgɟX^ܿDz^Xy}j~w~_帿j|8wK*UثWb]|) D{9&?]>z''җLA׵Qu'/G{s]v*UثWbZwHԼU'~mR.tTnWtg71G51-0yV69^V{(}.̺J-~Ma?g;ti]ӱWb]Q3cKcϹتs;/VfS5%ܕ+~cO<}Hx zνm"/7Ldfs_/,Gga確bS bGD棶?{xY;b]ygL#/\MWo33..j̎V]P]\ͦl^,>奣# cݹN爛T|=ϘbJpJ~114GYd4Uf=sF#˂?ŻXݔz]^C}_}w槇=_?n*UثWb]|) D{9&?]>z''җLA׵Qu'/G{s]v*UثWb=OCe~rc.O3kROK=U;y8N]ɯO?l}?/yKv*UثW~7w|}!}#=Իv*5㭣k/oau/ZctN+VSm)օ1#"sQy=?ǝWb]PY&Η.&n?պ{y'_wKs>/@~3c}~>vw;?KlP٠F NaRA GJFIFKKMSO Palette ’ͨɝұѪΡ׷կңӭױطڹݾ֫ڸܸٯݹݵ߾߸۹—Ơ޿ɧȠƚ̫ʦ̥έɝÉƘΧΫаʟ̠ΣϬЫұӳƌɔѫӲʝͤϨЩӭ̟͘ΤФЪѪҰө԰Դձֵָ׷ɒΠϧԳծձױڹПХѫҥҫӥӮԬթղֶ׶زطΖӬԲײ׷ٶٹڸڹڻܿҦԫժծձֵ׭ײدٲڶڻ۷ܻݿѝԦկطۼܸܾܺӟ֪֮׫װٯٲٶڶں۷ܴܻܾݷݻ߾֧֠٪ٱڲڷܴܾݷݾ޸޻ߺ߽ڮ۸ܸܵݽ޾ܲ޺߸ߺ߽ڨܭܹݵ߽߲߶C   ")$+*($''-2@7-0=0''8L9=CEHIH+6OUNFT@GHEC !!E.'.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"0!1AQ"aq2#CRr1A ?%~cߓFD){|`tU)%ln` *cR"lBwo|=nx&I`~s-ޮORvʴoҎy/ߞ1¼hdzOyU/&9srj2+ŽEb*&+LYO8cTTFOx/S\ MT.Ae|HC<j}Kk. FRם`^=(`jD/ dƯM]$CI±|iw)xY;#)Vvl{2ExƔ<^Tmvb[xC*?XJ1bvy=9^+xI,d[7?5o`eb&^k떌dK~ю:ob36P4k'.5\gD$=c-Q](XG|X/Pz4Ҡ):G̓5z_VA+S`|JonNKwԌrUxŭv/S7řPzP>9듺54 q2.nx~R( &%hۛRRPWM& "?9 Mu3q85 F]|o`kj^~E:q':X_(8 mohv-SӄC# :Mv^DIi]F( wwza%3àRHM;"( FP v! )NJFIFKKMSO Palette C   ")$+*($''-2@7-0=0''8L9=CEHIH+6OUNFT@GHEC !!E.'.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE",!1A"Qa2qBRb!1A"Qaq ?H'9QDdڒ~JQ|~iSy$2Z]۝-ѣ0kl5a %kYA! :n d]G]Ju政CQeW8|~M!%w{C CN~QB伂AQ>Vg+*)#""4%lNk3X?f7uD9R(3dPr8ɪ_!mz\aBtt%P9w FWI5 pF!:辴}a)K "(kS\y__fZ3A\bT O.;djzqˢ׳ ۚӛUd:l_0v~Bo(lt=R+䯪q]`2]aț6n\p9{׬FQ8)ִfF3l3%cN6Wquc7Jy >œzy#)%,&.^0[ݕHtivYduFGypT$k6Z:'Q=7(?F^*"w1cNMiE~=F<NQB]~01ӥq'$y9Gy_texTixWT)U2bt@ 8=2tsڵW42m*e\ky(R.:E߬JYY$A.gk)ĄE{XKc6^8zC9. }HB):/}c8nbƥU omd<&dvVl Ty8UƬo5ɪ e(ӏCfNIE$YZqO7wU_y?4O HO|E}^$[ϒ=hsKsvձ}fQEwHbԅ!CRSNT}g(Ύ+.I DŽsusPug0ZyX$cl,WEߵ=̘ ɧ1#5xs~'0w,ǔFl#-/N,&iI4Hx;͊K"WneH徫t^*I߷hjѶ$j'(LR-t}gp^ ȔD}55F]v۾CKRaIزJk1D rCo$aKr+EaC.Ͼ1%l3@r`1/ێֳo_d}GZѝcH}#6H]Yg}}50ójT1)ɶy"y7YD:Q6E)ZoHn e)&ҟy>1(G)ŌKxq(pDeY9 K]ᕃ8Q`qJ_Q F#F:(Ȃw'PhqS}ĪfO8+r;qQLY@& M5,Blxef jKUrvHbLDNZ@)qĜXTR `y;yqj6"iH3% ybH~n5A V&Lj́e%{k3@eG$j@$bh!7n6X.pIQN e2oi!TI*8.Q“nQ`xԱgcF~\vn{ÿʰ$ 4 #x=^ZK#6z(:sA):m"$-TFp=$dQP*=mTʁDOh֩*CH2Oz԰d$vq[V0@ @$`HӱlA ;M@: t7XR H2?\iI!@*ON s< M%&A$yHSxp:DdT1747oD3$`QQF]8Ted0b@;mz‚P`zWkVW6)bdH *rwڃK$O'>>@`&-EC` pW.g6XevlU1DbPŭG΂0ehYPC8GnߚW6*̤?ږNaJC`P(F,aAcfVwFa $g('M]m|AH6vjIXC 8SuiHA'f}~SQRmNwrZg41?B 3;} `1t{iVEkn N6iъm7RN 2$ L}h:ڋb#h+4.l-Q7+^*We@ V-$dS0~,mf@Hi ` W(fP#opӤ9#z!S }l+tLAC0;n}Б$5A,w ~tT;ϯ'7$ #4 *)sYeaH䁸,VȀp*ϼH8&?@BQh0K@N70v#<ʺ|mMn '8%T 5Hm9KmRS|:$vYDV 21el gT[b+Yy rB` GTR rPñ{2J iQV@6<|]oba aOU2` L[V Ib /CR _( h  v&rnorthru@us.ibm.com4mailto:rnorthru@us.ibm.com~http://www.rexxinfo.org/html/rexxinfo1.html#Rexx-Best-PracticesVhttp://www.rexxinfo.org/html/rexxinfo1.html0&Rexx-Best-Practices,/ 0`DArialNew ps,MQ0,0$"DWingdingsps,MQ0,0$ DTimesngsps,MQ0,0$ 0DImpactgsps,MQ0,0$"@DTrebuchet MSps,MQ0,0$"PDCourier Newps,MQ0,0$1`DCordia Newps,MQ0,0$"pDTimes New Roman,MQ0,0$ B(.  @n?" dd@  @@`` &@)}  /k !"#$%&'()*+,-./0123456789@ADEFGHILMNOPQRS l o prsutwxyz|{}~R$0#„9Dܷz^R$Q_j)9H A*RR$)#1D'2]R$R$NaRA G r$ԑ]>]Fir$%3àRHM;"i"R$v! )NX R$qܣ!h=;h jjjj     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab 33@8jTZ ʚ;15ʚ;g4(d(dD0ppp@ <4ddddp0Hs g4ddddD0p pl<4BdBdp0Hs0___PPT10 |___PPT9^VRARB6 5?  O  =W0z/OS System REXX 1  Table of ContentsTrademarks Theme Session Objectives Overview Logical Overview Diagram Comparison of REXX & TSO Servers TSO/E Command Support Security & Enclave Considerations  Usage & Invocation Arguments & Variables Interaction & Dependencies Migration & Coexistence Considerations Installation Exploiting SYSREXX Best Practices Session Summary Appendix TrademarkspSee http://www.ibm.com/legal/copytrade.shtml for a list of trademarks. New trademarks: System REXXTM SYSREXXTM X(,   *!D  0- ThemeSimplification The role of SYSREXX in  New Face of z/OS is to provide an infrastructure through which REXX execs may be run outside the normal TSO/E or Batch environments, using a simple programming interface. This enables the leveraging of base operating system components by new style applications that will, over time, lead to simplified interaction and more intuitive system management capabilities on z/OS. The ability to initiate REXX execs directly from an operator console has been long overdue on z/OS and is a drag along benefit of this initiative. The possibilities for exploiting existing REXX code through the use of SYSREXX are vast, whether to provide operator assists or to provide routines that can be leveraged by new strategic initiatives.F" Session Objectives]Describe System REXX The Design Customization Getting Started Where to find more information(HH Overview *Problem Statement / Need Addressed: Required an Infrastructure to Support Web Based Initiatives interacting with z/OS Components New Face of z/OS z/OS Simplification & Management Solution: SYSREXX allows execs to be run simply & independently from traditional TSO/E & Batch Invocation uses a single program interface (AXREXX) Operator exploitation directly from a console Benefit: Enables rapid development & deployment of system programmer tools and operator assists Can be exploited by new & old style applications Health Checks may be written in REXX$P]PP!P PUPcP PP$]!   Uc    SYSREXX Logical OverviewDSysrexx Logical OverviewRequests to execute a specific exec enter from 2 sources  as an operator command and from an assembler API (AXREXX) Operator command is taken and converted into an AXREXX invocation AXREXX processing space switches into AXR address space, constructs a request and passes it to 1 of 2 server tasks: REXX Master Server or TSO Master Server task The client task is either suspended until the request completes or is resumed depending on the SYNC= specification BuZBZZuBESysrexx Logical OverviewThe REXX Master Server will attempt to find a free worker task (1 of 64). If none are available, the request is queued Otherwise, the Request is passed to a REXX Worker task who in turn passes the request to his daughter task (worker subtask or worker daughter) It is the worker subtask that sets up the REXX environment and runs the exec Rexx Worker task will time the daughter task, depending on whether the AXREXX client requested timing 6  WdFSysrexx Logical OverviewWhen the request completes, the Worker Subtask notifies the worker task For SYNC=YES requests, the Worker Task resumes the client taskGSysrexx Logical OverviewnTSO=YES path is similar  TSO Master Server looks for 1 of 8 Worker Tasks to pass the request to Worker task does not have a Worker Subtask, but instead manages a separate address space  a TSO Server address space Worker task passes the request to the Job Step Task of the TSO Server address space Job step Task creates a Worker subtask to run the exec and behaves in a similar fashion to the REXX Worker task in the TSO=NO environment VTTHSysrexx Logical Overview>In the event of an error e.g. REXX syntax or time out Worker subtask is detached Guarantees clean up of any task related resources exec might have failed to clean up TSO Server address spaces are never terminated unless they do not respond to requests from their corresponding Worker Task in the AXR address space 6ZZUZZZZZ6U   REXX Server vs TSO Server  REXX Server Execs run in AXR AS 1-64 Worker Subtasks EMCS for each subtask Detach after 100 execs Default HCE - MVS Recommend no Data Set Allocation here Availability impact if something serious breaksX ZZzZ0Z z0 *TSO Server Execs run in AXRnn AS 1-8 TSO Server Address Spaces EMCS for each AS Detach after 200 execs All Allocation capabilities Default HCE - TSO IKJTSOEV  Dynamic TSO environment SYSCALL supported Better availability should something serious break.. just cancel AXRnn ASn ZZvZ5ZJZ v5  Jd.!TSO/E Command Support 1 of 3"<TSO=YES requires an isolated address space to avail itself of TSO/E services and POSIX host commands authorized & jscbauth = 1 Address spaces called AXR01-08 within a dynamic TSO/E environment & ikjtsoev service TSO/E was modified to allow Sysrexx execs to invoke authorized commands PeqHeqH>rK%&J TSO/E Command Support 2 of 3!xTSO=Y Requests Run authorized & jscbauth = 1 in a separate address space & axr01-08 within a dynamic TSO/E environment & ikjtsoev service We restrict the number of commands that Sysrexx officially supports because the Dynamic TSO environment does not set up all the features of the Terminal Monitor Program (TMP) VZyZZZy> S1e/ TSO/E Command Support 3 of 3!*Problems Encountered: Some authorized commands do not tolerate a dynamic environment TSO/E control blocks are unavailable or incomplete CONSOLE host command environment is not supported Userid function does not return a valid userid In R11 (or with OA26802 applied), in most cases this has been corrected, but still would be in the case where the AXREXX invoker does not specify (or default to) a valid security environment. Link, Load, or Attach unauthorized modules & ABEND306 Resources not cleaned up, may influence subsequent execs Data sets left allocated are freed (but execs should clean up) Error handling paths that ABEND if error messages are issued ?33/o?>?33/  o?<," !Security & Enclave Considerations"AXREXX is an Authorized System Service Security Controls Essential Userid and Groupid Associations for SYSREXX Address Spaces Access to APF Library Permissions Standard security administration what can be accessed and/or run EXECs by default use Invoker s Security Environment Alternatively may use: Authority of a 3rd party  a surrogat Special userid which is assigned to AXRUSER EXECs use Invoker s Enclave service class Prevent CPU priority inversion & excessive resource usage Resource usage is charged back to invoker R'PP]P!P!PP4PPTP+PdPP ]!  !4    B    *  d$$((PNc0r3System REXX Address SpacesNSome Installation s Tightly Control Started Procedures Security Administrator must update the STARTED class profile and/or the Started Procedures Table (ICHRIN03) This assigns Userid and Group characteristics to these address spaces The AXR address space is System REXX Attach to Group for System address spaces Requires READ authority SYS1.PARMLIB & SYS1.SAXREXEC In R11 (or with OA26802 applied) - REXXLIB data sets :DVDV OUsage & Invocation 1 of 7PIQEasy way for Web Based Servers to run commands/functions & get back pertinent details Method for system and application components to exploit REXX parsing strengths Leverage REXX coding skills which are extensive & span all operating systems Faster development possibilities for new Health Checks Controlling RACF passwords and phrases QR OUsage & Invocation 2 of 7PI,Provision of simplified operator assist functions & quick fixes when necessary Exploitive possibilities by Customer code, IBM & ISV components & products SYSREXX is a Server Starts early during Master Scheduler Initialization No STOP capability but the AXR address space can be forced FORCE AXR,ARM |ZZZoZZZo OUsage & Invocation 3 of 7PIbNew Macro is AXREXX Caller must be authorized Two Modes of Execution TSO=NO Limited Data Set Support TSO=YES Full Data Set Support Permitted Three Operations are supported REQUEST=EXECUTE | CANCEL| | GETREXXLIB Arguments & Variables are used to pass input to and receive output from the REXX exec Parameter List is mapped by the AXRZARG macrov1R(1R( OUsage & Invocation 4 of 7PIDNew Macro is AXREXX continued Data Types supported: Input is converted to strings Output is returned as signed/unsigned, char, binary, hex Security Environment of Requester is used by default Can be changed with SECURITY= keyword Service Classification using Requester s enclave Time Limitations are Applied to Execs Default is 30 seconds Cancellation of REXX Exec using API OREQTOKEN parameter with REQUEST=CANCEL W5&1'$) W5&0    '  $)OUsage & Invocation 5 of 6PIOperator Command Support Detected by System REXX SSI Listener Uses a customizable Command Prefix (cpf) Administrative Support cpfSYSREXX STATUS[,DETAIL] cpfSYSREXX REXXLIB Seamless operator interface for REXX execs cpfRexxExecName Arg1 Arg2 & Argn REXX Execs Read From SYS1.SAXREXEC Or other data set in REXXLIB Concatenation (R11 or OA28602 applied) 8Z%Z)ZZ0Z,Z!Z#ZDZZ%$   ,   #Dbb  7 iOUsage & Invocation 6 of 7PIOriginally three SYSREXX Functions were provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console l2ZZ7ZZ,Z Z/Z2 OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console v&7, /&>i OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console N&&>36 OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console @&&o8 OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console @&&o8 y6OUsage & Invocation 7 of 7PITwo additional ones were added in R11 (or OA26802 ): AXRWAIT Waits for a specified number of seconds Similar to SLEEP host command (available in TSO=YES environment) AXRINFO Obtains environmental information 5j $5j "n1EConsole Interface for REXX Execs 1 of 4 $F>The Console Interface is the MODIFY AXR command Can be replaced by the CPF value defined in AXR00 Provides a seamless operator interface for REXX execs MODIFY AXR,[,TIMEINT= ] cpf ] REXX execs are run with the AXREXX macro CONSDATA keyword in effect AXRWTO and AXRMLWTO functions send messages to the invoking console as command responses126aDY1265)DY  >!o2DConsole Interface for REXX Execs 2 of 4E>Command Authority determines which commands may be entered from a console. A userid logging onto a console has all permissions associated with the userid Console initiated REXX Execs run TSO=YES A blank separates arguments from one another and from the other command keywords The is a CHAR string consisting of the remainder of the command line SAY, TRACE and REXX messages are directed to the invoking console as multi-line message AXR0500I{7DConsole Interface for REXX Execs 3 of 4E>AXRUSER has NOTHING to do with the Console Interface for REXX Execs Common misconception Security environment is that of the user logged onto the console MVS.SYSREXX.EXECUTE. Resource used to determine whether the invoker is authorized to execute the exec MVS.SYSREXX. Resource used to determine whether the invoker is authorized to issue F AXR,SYSREXX STATUS and other MODIFY AXR commandstDWR yDWR y  :DConsole Interface for REXX Execs 4 of 4E>MODIFY AXR,SYREXX STATUS Provides overall status of System REXX MODIFY AXR,SYSREXX STATUS,DETAIL Provides detailed information about actively running execs MODIFY AXR,SYSREXX REXXLIB (R11 or OA28602 installed) Displays the REXXLIB concatenation'!<7#'!<  7  #  Arguments & VariablesUp to 20 ARGs and 256 VARs are Supported Caller specifies the data type of the ARG/VAR, the name of the ARG/VAR and whether it is input, output or both Signed/Unsigned 32 or 64 bit, CHAR String, BIT String, and HEX String Types are supported If the ARG/VAR is input, System REXX will convert the data type to a character string and set the ARG/VAR prior to exec invocation If the ARG/VAR is output, System REXX will obtain the final value of the ARG/VAR, convert it into the specified data type and copy it into the AXREXX invokers storage AXRZARG macro provides the ARG/VAR list mapping Special Variables set by AXR on input to the exec AXRREQTOKEN 32 Hex Request Token AXRINDD 8 Char If RexxInDsn Specified AXROUTDD 8 Char If RexxOutDsn Specified P[PZPP2PP[\2, ,  bAAXRZARG Mapping Macro BA cAAXRZARG Mapping Macro BAInteractions & Dependencies6Hardware Dependencies None Software Dependencies To Process Compiled REXX Code IBM Library for REXX on zSeries OR IBM Library for REXX on zSeries Alternate Library Exploiters CIM Server .. Cluster Instrumentation Health Checker Security Server (RACF) Open to exploitation by IBM, ISV and Customer Code\ \  ,g#XInstallation 1 of 5 $YQNo Installation Requirements on z/OS V1 R9 Install OA26802 (no need if running z/OS V1 R11 or higher) SYSREXX is a new BCP Component .. 5752SCAXR All Cross-Component Dependencies Included In Base Implementation & Customization Easy & Straightforward Reference Publications Authorized Assembler Services Guide .. SA22-7605 Starting SYSREXX Requires Ability to read SYS1.PARMLIB Parmlib member CTIAXR00 Ability to read SYS1.SAXREXEC (and the REXXLIB)+PPP.P6PPfP+.6  f XInstallation 2 of 5 $YQ" Parmlib Support SYSREXX Customization: AXR00 In R11 (or with OA28602 installed) IEASYSxx can specify an AXRxx parmlib concatenation AXR=(xx,yy,& ) First valid instance of option used CPF( cpfvalue ,SYSTEM|SYSPLEX) AXRUSER(userid) Optional with APAR OA22146 applied 4X22#X  2  #33tS(,}8XInstallation 3 of 5 $YQR Parmlib Support (continued) REXXLIB support (R11 or OA28602 installed) Up to 255 data sets are supported SYS1.SAXREXEC concatenated as the last data set unless specified Data sets must have the same characteristics as SYS1.SAXREXEC (i.e. variable length records of size 255) Component Trace (SYSAXR): CTIAXRxx Defaults to ERROR tracing ZZ+ZZ$ZZZ+$  /~9XInstallation 4 of 5 $YQ Proclib Support SYSREXX is restarted using procedure AXRPSTRT S AXRPSTRT Uses AXR00 for start parms S AXRPSTRT,AXR=(xx,yy& ) - in R11 or OA28602 installed REXX LIBRARY/REXX ALTERNATE LIBRARY Must be set up to run any compiled exec . 7$(.   7$(33>Wo!WInstallation 5 of 5XQParmlib & Proclib Members Copy member AXR00 from SAMPLIB to PARMLIB Customize AXR00 Choose a Command Prefix CPF( @ ,SYSTEM) If required setup a surrogat userid that SYSREXX may use AXRUSER(SYS1) On R11 or with OA28602 installed set up REXXLIB On R11 or with OA28602 installed set up IEASYSxx and specify multiple AXRxx members CTRACE member is CTIAXR00 Restart AXR using the AXRPSTRT procedure ::1::    1P O#Exploiting SYSREXXnCustomer Validation Is Critical Implement automation tasks that could be carried out from SYSREXX: Perhaps launch from exits Implement operator assists that could be launched from the console via SYSREXX Implement health checks in SYSREXX Reference Session 2815 from Orlando SHARE Proceedings  z/OS 1.9: Health Checker Update and User Experiences with System REXX Checks http://ew.share.org/proceedingmod/abstract.cfm?abstract_id=17633  Cr7 Cr7  O@}3AExploiting SYSREXXhInvocation from the AXREXX macro SAY/TRACE output goes to the output data set specified by REXXOUTDSN on the AXREXX invocation If not specified output goes to the console specified by CONSDATA (this is the invoking console when the exec is initiated from an operator console) If CONSDATA is not specified, SAY/TRACE output is dropped AXRWTO/AXRMLWTO output goes to the Console specified by CONSDATA. Goes to the System Log if CONSDATA is not specified Errors converted into return/reason codes More info is needed to debug problems REXX communicates with messages NOT codes Use of REXXDIAG keyword essential !_:t!_: tBExploiting SYSREXXInvocation from the AXREXX macro Diagnostics when failing to process an input/output argument or variable For example, in the REXXVARS AXREXX parm, MyVar is an output variable of type AXRARGTypeUnSigned, but the variable contains non-numeric data Bad argument/variable number is stored in AXRARGLstEntryInError SYNC=YES option will suspend invoker until exec completes Do not use if the invoker cannot tolerate a delay (e.g. in an MPF exit) !I:H!I:H     PWaExploiting SYSREXXSample invocation of AXREXX macro Takes a jobname as input and issues the DISPLAY JOBS command to obtain the ASTE address of the job Typical of some applications that have been written in support of z/OSMF Invoke a command to fetch some piece of data to return to the invoker Many execs also invoke utility programs to obtain data in other ways e.g. generating data sets For example EREP can easily be invoked from an exec to format SYS1.LOGREGbIF_JIF_J  *eP_`T\ W] [^ C Common ErrorszFailure to correctly set up the REXX Run Time Library or the Alternate Library Causes failure to run compiled REXX execs Return/reason code 0C/xxxx0C08, message IRX0157E Performance issues Service class of AXR or AXRnn address spaces not set up properly (Discretionary  should be privileged) Parent task monitoring exec has much lower priority than subtask running exec (priority inversion) Causes failure to apply time limit or Cancel execs O[3O[3  ;QBest Practices 1 of 4RJ?Execs should free any obtained resources Since AXREXX is an authorized API, a level of trust is assumed since the REXX environments are reused unless the request fails (AXREXX non-zero retcode) For TSO=YES requests, SYSREXX detects data sets left allocated by the exec and deallocates them Negative performance impact Use Signal Handles: NOVALUE, SYNTAX, HALT Return the value of SIGL and the return code to the AXREXX invoker Provide a consistent diagnostic strategy Pass back return codes and reason codes of the failing API to the AXREXX invoker and any relevant messages)ZZZ*ZCZ)ZkZ)*C  )j,Q $dQBest Practices 2 of 4RJAlways specify the DIAG parm on AXREXX invocations Provides valuable diagnostic info Provide an argument to the exec to run with some level of REXX tracing active Specify RexxOutDsn or CONSDATA on AXREXX invocation to provide a destination for the trace output ^3"Nb3"Nd, RfQBest Practices 3 of 4RJCreate a REXXLIB concatenation and do NOT modify SYS1.SAXREXEC Ensure your exec names do not start with the letters A-I Use the TSO=NO environment if possible Benefits  Use of a shared address space Downside  NO TSO Host commands, NO SYSCALL (POSIX) Host commands. Single point of failure  a serious problem could cause a disruption to the AXREXX service @Z9Z'ZpZ\ZZZ@9'p[    <QBest Practices 4 of 4RJCoding conventions Use PROCEDURE/EXPOSE to ensure that changes made by a procedure only affect variables introduced within the procedure Prefix global variables with a lower case g and constants with a k. Input and Ouput Args/Vars can be prefixed with In, Out or INOUT. Variable naming conventions critical to program understanding See: http://www.rexxinfo.org/html/rexxinfo1.html#Rexx-Best-Practices I found Howard Fosdick s article to be helpful (he also has a book which is also informative)vPP>PFP^P>F  ^N l? F 0U=Possible Future EnhancementsUse the TMP for TSO=YES in place of the TSO Dynamic Environment Enables use of the CONSOLE Host Command Environment Enhance AXRWTO/AXRMLWTO Allow TSO=NO execs to be run as an operator command Operator command to cancel an exec B@4o@4p>Possible Future EnhancementsNew parmlib options Customization of default TIMEINT value (current default is 30 sec) Customization of the number of TSO=NO worker tasks and TSO=YES TSO Server address spaces Support for updating parmlib options without having to restart SYSREXX GG,/$Session SummarySystem REXX provides a gateway for new style applications to interface with z/OS components While the New Face matures, System REXX adds real value today through exploitation possibilities for operator assists and also certain system management processes We are keenly interested in your opinions and suggestions that will help to extend and mature this component Any Questions& ? .l~% AppendixCWeb Download Details Publication References SYSREXX Command Details&!Publication References)MVS Initialization & Tuning Reference SA22-7592 MVS System Commands SA22-7627 Authorized Assembler Services Guide SA22-7605 Authorized Assembler Services Reference Volume 1 SA22-7609 MVS System Codes SA22-7626 MVS Diagnosis: Tools and Service Aids GA22-7589 MVS System Messages Volume 3 SA22-7633L&P PP P$P P1P PP P&P PP P&    $  1      &    t4JSYSREXX Command 1 of 2KD   The STATUS sub-function results in a summary display of System REXX environmental information: time and date the AXR address space was started parmlib member/s used at startup command prefix used to identify console initiated REXX execs scope of the command prefix special userid against which SYSREXX requests may be invoked default timeout interval number of queued REXX execs requests REXX worker tasks available to process REXX execs Number of tasks actively processing requests Number of idle tasks Total number of tasks (active+idle) Maximum number of tasks that may be started Number of synchronous and asynchronous requests Number of untimed requests TSO server address spaces available to process REXX execs Number of address spaces actively processing requests Number of idle address spaces Total number of address spaces (active+idle) Maximum number of address spaces that may be started Number of synchronous and asynchronous requests Number of untimed requestsxcPXPP:PPcX  :   P h q u5JSYSREXX Command 2 of 2KD  q The DETAIL parameter causes detailed information about executing REXX execs to be displayed: name of the REXX exec requester Jobname and ASID type of request - TSO=N or TSO=Y time limit for the request unique request token associated with the request execution Jobname, ASID and TCB address for TSO=Y requests cpu seconds currently used current elapse time seconds<`ZZ_" >+4/3456 7 8 9 : ;<=>?@ABCDEIKLM O"P#Q$R%i0k2l3p4q5s6v7w8z:|;<=>?@ABEFGHIJKLM ` xx-т` xfт>?" dZ@?nd#@% d e" ! ?>@ n?" dd@   @@``PRqZ @ ` `pF%@`F%@`   @ _ (    jK<A.g crop_of_DM04_12_2_blue#" `  p%E%A.g crop_of_DM04_12_2_blue#" `,  N'? ?"6?@`NNN?NP  ' X Click to edit Master title style!!  4  6' #" `_  ' RClick to edit Master text styles Second level Third level Fourth level Fifth level!    S    6'#" `#,O h 2008 IBM Corporation"0       A6x? ?ibm_light_gray_logo_300dpi"6?@`NNN?N'Z2  H '? ?"6?@`NNN?Na ' d*(2   lB   6D"]pplB   6D"ppe   0' #" `q~ SSHARE San Jose, California    # l'pGpGpGpG? ?"6?@`NNN?NP 8Session 2813: An Introduction To SYSREXX Infrastructure 09 0b8F  9  B  s *޽h ? xx-т___PPT10i.Jv+D=' = @B + @Spring 2007 Technical Disclosurex   P ~(    ^A.g crop_of_DM04_12_2_blue#" `  ^A.g crop_of_DM04_12_2_blue#" `   NA'? ?"6?@`NNN?N"`  / System REXX Harris Morgenstern  hmorgen@us.ibm.com Ronald Northrup  RNorthru@us.ibm.com[[    bA,xibm_white_logo_300dpi"`p  # l/pGpGpGpG? ?"6?@`NNN?NQ REXX Language Symposium: 2010 2 0bG   B  T?D1?"0?@NNN?NP  B  T?D1?"0?@NNN?NZ)   6/#" `` j 2010 IBM Corporation$0        63 #" `T D* B  s *޽h ? xx-т80___PPT10.Mu( 0  8(      NC3j@j@ M(  3 v* I%%IInn  NM3j@j@  ( 3 x* I%%IInnd  c $ ?4h  34  NW3j@j@  )c 3 RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  T\3j@j@ M  3 v* I%%IInn  TPf3j@j@   3 x* I%%IInnH  0Bhy ? 3380___PPT10."ā) P(    N쥄dndn M(   X* ???__  Ntdndn  (  Z* ???__  Tdndn M   X* ???__  Tńdndn    Z* ???__H  0Bhy ? 3380___PPT10.DP 0  L(  x  c $3@ 3 |  N3 1?"6@ NNN?N@   Ron Northrup Email Address: rnorthru@us.ibm.com Updated 11/30/2010  Harris Morgenstern Email Address: hmorgen@us.ibm.com DnZ`*: 02  H3 ?"6@ NNN?N0}  ZDecember 2010 `  H  0޽h ? 33___PPT10i.P:+D=' = @B +3 L0 2*@P(  P~ P s *Ć3P   3 ~ P s *P3_  3 ~ P s *3_p   3 H P 0޽h ? xx-т___PPT10i.0wX_+D=' = @B +G L0 F>`X(  X~ X s *43P   3  X  30e0e̙ #" 0e_  3 , @`H X 0޽h ? xx-т___PPT10i.*eE+D=' = @B +  `(  `~ ` s *3P   3  `  `3oAoA̙ 0 3 2%@eH ` 0޽h ? xx-т___PPT10i.+e&)+D=' = @B +  L0 h<(  h~ h s *3P   3 ~ h s *l3_  3 H h 0޽h ? xx-т___PPT10i.se^"+D=' = @B +   p<(  p~ p s *3P   S ~ p s *3IP  3 H p 0޽h ? xx-т___PPT10i.|&0$nn+D=' = @B +1r   Hq@qjjxo(  x~ x s **S   S 2 x  v1SA?Stationery"6@ NNN?NI 75X x H3S ?"6@`NNN?Nxd  CMD SERVER CIB Control Process MODIFY Cmd SYSREXX STATUS[,DETAIL] RexxExec  Args/Vars No work waitf 7  #3 >&# B x TD?"0@NNN?Np x N4S ?"6@ NNN?N C  (2 x  vPDSA?Stationery"6@ NNN?N ?  77 x HHS ?"6@`NNN?N [   Convert & Buffer Results Marshall ARGs/VARs etc. Resume Requestor|Done Cleanup REXX CB Fields Mark Task Available Back To REXX Server$9@^B  x 6DjJ <   x HFS ?"6@ NNN?N: K  =R-SRB B  x TD?"0@NNN?N: 0 ( ; Z  x c $"`q + +   x < SS ?"6@ NNN?ND  @TSO WkT8   x <VS ?"6@ NNN?N   HSTORAGE CELLPOOL x <`ZS ?"6@ NNN?ND   @TSO WkT1  j x BA Weave +c X x 0A S  x H^S ?"6@`NNN?Nh 4  CTSO SERVER Queue Control PC Entry (API) Schedule Task No work wait x 8 L /$  x# u@  lT . x# /r bb x c $"`. x c $|jSU BPARMLIB(AXR00)bb x c $"` $  x 0PmS   BREXXLIB D/Sets` x s *"`c* x 0pSP' a MPF U/EXITs Z x c $"`cK x 0uSPI <HARDCOPY Z x c $"`c9 x 0zS"`h@ <CONSOLES  x 0(uS"`c9 (  x 0Sl6 ;MGCR(E)Z !x c $"`;T "x 0dSP =S S IR" #x@ s *ZHXINc'X" $x 0G)HIgTZ %x c $" \ &x 0hS"`V < AXR Listener FB 'x S DIFB (x S DUFB )x S DF *x H S ?"6@ NNN?N A CPF F AXR  +x HГS ?"6@`NNN?N4  DREXX SERVER Queue Control PC Entry (API) Schedule Task No work wait x 8 2 ,x  p,SA?Bouquet"6@ NNN?N' @  73 -x HS ?"6@ NNN?N  6&  .x HS ?"6@`NNN?N/  .B /x TD?"0@NNN?N: ;  0x <S ?"6@ NNN?ND {w  B REXX WkT64   1x <S ?"6@ NNN?N/ >TSO WkD8  2x NS ?"6@ NNN?N h  (L 2  3x# 2 ]h 4x ZSqA ?"6@ `NNN?Ncn  $JobStepTASK Initialize AXR Environment - Read AXR00 Allocate REXXLIB D/Set  SYS1.SAXREXEC Initialize XMS  LX/ET -> PC # CB Structures  Work Queue Initialize Component Trace Attach Server Sub-Tasks Stack/Linkage Control Initialize ESTAE & RESMGR No Work Wait Termination >    5x HDS ?"6@ NNN?N2x a SYSREXX (AXR)8  6x <dS ?"6@ NNN?ND ]X  A REXX WkT1   7x <S ?"6@ NNN?N/ >TSO WkD1 L  8x# $ 9x HS ?"6@ NNN?N   6&   :x ZSqA ?"6@ `NNN?Nh P TSO WkAsid8 (   ;x HtS ?"6@`NNN?Nr KAXR08* 1N 6     >x HdS ?"6@`NNN?Nr KAXR01* " ?x BH,I-?"0@NNN?NC 2  @x HtS ?"6@ NNN?N:    =R-SRB B Ax TD?"0@NNN?NpB Bx TD?"0@NNN?N p2 Cx  v@SA?Stationery"6@ NNN?N;| 712 Dx  pSA?Bouquet"6@ NNN?N8| 71B Ex@ ZD?"0@NNN?NB Fx ZD?"0@NNN?N(  Gx ZSA?"6@ NNN?N# B AXREXX TSO=Y    Hx  pSA?Bouquet"6@ NNN?N #l B AXREXX TSO=N   Ix N8S ?"6@`NNN?N7# =R-SRB  Jx NS ?"6@`NNN?NoRv :PC B Kx@ ZD?"0@NNN?N34 Lx NDg ?"6@`NNN?NgJ+ :PC 2 Mx  vgA?Stationery"6@ NNN?N( 8  722 Nx Ng?"6@ `NNN?N,  732 Ox  ph gA?Bouquet"6@ NNN?N ! 74 Px < S ?"6@ NNN?N B REXX WkD64   Qx Ng ?"6@ NNN?Nto ( Rx <|g ?"6@ NNN?N]X A REXX WkD1   Sx Hg ?"6@`NNN?N    Convert & Buffer Results Marshall ARGs/VARs etc. MCSOPER (EMCS) MGCRE & MCSOPMSG Resume Requestor|Done Cleanup REXX CB Fields Mark Task Available Back To REXX Server$Y@ Tx Hg ?"6@ NNN?N   6& 2 Ux  p!gA?Bouquet"6@ NNN?N.   752 Vx  v %gA?Stationery"6@ NNN?N'   732 Wx  v|(gA?Stationery"6@ NNN?NQ 74" Xx  `H,I-1?"0@NNN?NC 2 ^B Yx 6DjJ t  Zx H,g ?"6@ NNN?Nl  6&   [x H0g ?"6@`NNN?Nu TKey8 Storage IRXINIT/LOAD/EXEC \x Ht1g ?"6@ NNN?Nv] 6&   ]x H3g ?"6@`NNN?NE  TKey8 Storage IRXINIT/LOAD/EXECB ^x TD1?"0@NNN?N\ 2 _x  v=gA?Stationery"6@ NNN?N I  76" `x@  fZG*H.jIc1?"0@NNN?NVF  ax s `0e0e    B:CDEFT @  1 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||77'(* 10-pph b X G((-(":,pM'J0%27 $ e` XRH7&('(@                  s " 0e@        @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab@   bx  fGJHE<IJ1?"0@NNN?N) o cx  fG;H8I;1?"0@NNN?N_g dx  f@g1?"6@`NNN?Nn%V SConvert ARGs / VARs to string format for REXX & pass request to appropriate server$T 2Tr ex c $Eg3f"`    SYNOPSIS: AXR is a sub-system, started during MSI. Reads PARMLIB member AXR00 & allocates REXXIN data set. REXX work requests originate from operator console (detected by AXR SSI Listener) or program interface (AXREXX). REXX work arrives via PC directly into the appropriate Server. SYSREXX or console initiated REXX execs are detected by the AXR SSI Listener, converted to MODIFY AXR format and queued to the Command Server s CIB. In turn they are selected and scheduled for processing REXX Server controls a group of worker subtasks that attach daughter subtasks to process TSO=N requests. Initially 4 are started. Up to 64 as required. TSO Server controls a group of worker subtasks that start between 1-8 address spaces to process TSO=Y requests. Extended MCS consoles are associated with every REXX worker task and TSO worker address space for z/OS command/response processing. Output Arg/Var results are returned by writing into the storage locations indicated by the caller & for synchronous requests, resuming the suspended Task in the caller s AS. Results from asynchronous requests (SYNC=N) in nature fire & forget. They will usually cause other processes, watching for specific events to be triggered. J 4=2 fx  pHgA?Bouquet"6@ NNN?N8P 722 gx NZg?"6@ `NNN?N $ |  742 hx N^g?"6@ `NNN?Nt< 71d ix NtOg1?"0@NNN?Nc xConvert ARG/VAR to string format for REXX Pass request to appropriate AXR Server Return for SYNC=Y pass output ARGs backyy2 jx N\fg?"6@ `NNN?N,x 72H x 0޽h ?x!x#xx!x$xx=x?xx=xXx&xx`xJxxbxcx xx-т___PPT10i.Pa3+D=' = @B +$   $(  r  S mgP   g r  S ng_  g H  0޽h ? xx-т80___PPT10.up 0  0 0(  x  c $|gP   g x  c $`}g_  g H  0޽h ? xx-т80___PPT10.up 0  @ 0(  x  c $gP   g x  c $g_  g H  0޽h ? xx-т80___PPT10.up 0  ` 0(  x  c $hgP   g x  c $(g_  g H  0޽h ? xx-т80___PPT10.up 0  p 0(  x  c $gP   g x  c $pg_  g H  0޽h ? xx-т80___PPT10.up    2*(  ~  s *NgP   g ~  s *D7g7  g ~  s *g7q ` g H  0޽h ? xx-т___PPT10i.ph+D=' = @B +i 2 x (  r  S gP   g r  S g&  g F  @   ~  6g "`   F @`   6g "` @ H @`H  0޽h ? xx-т___PPT10i.ځ00+D=' = @B +t H  (  x  c $gP   g x  c $tg&  g F  @   ~  6g "`   @Supported Commands allocate attrib call delete exec(.. @`g  6g "` @ A free help profile rmm smcopy time <@@,# @`H  0޽h ? xx-т___PPT10i.ځ00+D=' = @B + 3 *(  r  S  P    x  c $ `    H  0޽h ? xx-т___PPT10i.ށ"+D=' = @B +    <(  ~  s *dP    ~  s *80*  H  0޽h ? xx-т___PPT10i. +D=' = @B +$ 6 ,$(  ,r , S 'P    r , S (``   H , 0޽h ? xx-т80___PPT10.}6  @<(  ~  s *d-P    ~  s *8.  H  0޽h ? xx-т___PPT10i.|&0$nn+D=' = @B +  `<(  ~  s *`7P    ~  s *8  H  0޽h ? xx-т___PPT10i.|&0$nn+D=' = @B +  <(  ~  s *dG *   ~  s *K~  H  0޽h ? xx-т___PPT10i.|&0$nn+D=' = @B +  6(  ~  s *RP    x  c $R0   H  0޽h ? xx-т___PPT10i.e@+D=' = @B +  <(  ~  s *cP    ~  s *`d  H  0޽h ? xx-т___PPT10i.|&0$nn+D=' = @B +  <(  ~  s *,NP    ~  s *m_   H  0޽h ? xx-т___PPT10i.e+D=' = @B + L0 <(  ~  s *L~P    ~  s * _   H  0޽h ? xx-т___PPT10i.e+D=' = @B + L0  (  ~  s *܄P      H썃 "`_   , @`H  0޽h ? xx-т___PPT10i.Aj,-+D=' = @B + L0 @(  ~  s *0P      H왃 "`_   , @`H  0޽h ? xx-т___PPT10i.Gj+D=' = @B + L0 `(  ~  s *|P      H( "`_   , @`H  0޽h ? xx-т___PPT10i.Gj+D=' = @B + :L0 0H(  H~ H s *|P     H HTŃ "`_   , @`H H 0޽h ? xx-т___PPT10i.Gj+D=' = @B + 4 p<(  ~  s *P    ~  s *T`  H  0޽h ? xx-т___PPT10i.|&0$nn+D=' = @B + 5  0(   x   c $ʃP    x   c $̓   H   0޽h ? xx-т___PPT10i.y4+D=' = @B + ; `T0(  Tx T c $ރP    x T c $ރ   H T 0޽h ? xx-т___PPT10i.y4+D=' = @B + > l0(  lx l c $P    x l c $   H l 0޽h ? xx-т___PPT10i.y4+D=' = @B +  <(  ~  s *TP    ~  s *0Z   H  0޽h ? xx-т___PPT10i.X+D=' = @B + J  xA(  xx x c $iP   i  x 6|i "``  AXRARGLST AXRARGLST DSECT AXRARGLSTID DS CL4 Use AxrArgLstAcro for REXXArgLst and X AxrVarLstAcro for REXXVarLst AXRARGLSTVER DS X AXRARGLSTRSV1 DS CL3 Reserved - must be 0 AXRARGLSTNUMBER DS H Number of arguments AXRARGLSTENTRYINERROR DS H Output argument in error AXRARGLSTRSV2 DS CL4 Reserved - must be 0 AXRARGLSTEND DS 0C AXRARGLSTACRO EQU C'ARGL' AXRVARLSTACRO EQU C'VARL' AXRARGLSTCURVER EQU 0 AXRARGLSTVER0 EQU 0 Version 0 AXRARGLST_LEN EQU *-AXRARGLST :  Px  )  yF  p x  $ x Z<i?"6@`NNN?N@   TVAR1$h    x H?"6@`NNN?N 0 N  0 ` x p 0  x H?"6@`NNN?N 0 `B  x 6D?"0@NNN?N@0 @B  x 6D?"0@NNN?N 0 %  x T4?"6@`NNN?Np  [ AXRARGENTRY$ h    %  x Th0i?"6@`NNN?NF  [ AXRARGENTRY$ h    #  x T3i?"6@`NNN?N  Y AXRARGLST$ h     x H?"6@`NNN?N  p # x TAi?"6@`NNN?N   Y VAR1 NAME$ h    $ x ZEi?"6@`NNN?N z TVAR2$h    x H?"6@`NNN?N  x H?"6@`NNN?N pp# x TPi?"6@`NNN?N Y VAR2 NAME$ h    B x 6D?"0@NNN?N0  B x 6D?"0@NNN?N0  B x 6D?"0@NNN?N0 @@B x 6D?"0@NNN?N0 @ H x 0޽h ? xx-т___PPT10i.xZ+D=' = @B + K @ ^(  x  c $m/P   / %  6v/ "`0`  AXRARGENTRY AXRARGENTRY DSECT AXRARGADDR DS AD Address of argument ORG AXRARGADDR AXRARGADDRHIGH DS F High half of address AXRARGADDRLOW DS A Low half of address AXRARGNAMEADDR DS AD Address of the name of the argument. X this is required for all variables and X output arguments ORG AXRARGNAMEADDR AXRARGNAMEADDRHIGH DS F High half of address AXRARGNAMEADDRLOW DS A Low half of address AXRARGLENGTH DS F Length of arg/var in bytes AXRARGALET DS F Alet of arg/var AXRARGNAMEALET DS F Alet of name of arg/var H  b38: yF  p   $  ZȤ/?"6@`NNN?N@   TVAR1$h     H?"6@`NNN?N 0 N  0 `  p 0   H?"6@`NNN?N 0 `B   6D?"0@NNN?N@0 @B   6D?"0@NNN?N 0 %   T.?"6@`NNN?Np  [ AXRARGENTRY$ h    %   Tܫ/?"6@`NNN?NF  [ AXRARGENTRY$ h    #   T|/?"6@`NNN?N  Y AXRARGLST$ h      H?"6@`NNN?N  p #  TD/?"6@`NNN?N   Y VAR1 NAME$ h    $  Z/?"6@`NNN?N z TVAR2$h     H?"6@`NNN?N   H?"6@`NNN?N pp#  T/?"6@`NNN?N Y VAR2 NAME$ h    B  6D?"0@NNN?N0  B  6D?"0@NNN?N0  B  6D?"0@NNN?N0 @@B  6D?"0@NNN?N0 @ H  0޽h ? xx-т___PPT10i.Y/g+D=' = @B +  6(  ~  s *HiP   i x  c $   H  0޽h ? xx-т___PPT10i.+j+=?+D=' = @B +  @6(  ~  s *diP   i x  c $eiPZ  i H  0޽h ? xx-т___PPT10i.e+D=' = @B +  `B(  ~  s *\iP   i ~  s *]ib  i   H~i ?"6@`NNN?NpMg H$` 33 H  0޽h ? xx-т___PPT10i.|&0$nn+D=' = @B + < \B(  \~ \ s *iP   i ~ \ s *؈ib  i  \ Hdi ?"6@`NNN?NpMg H$` 33 H \ 0޽h ? xx-т___PPT10i.|&0$nn+D=' = @B + = dB(  d~ d s *|iP   i ~ d s *|ib  i  d Hti ?"6@`NNN?NpMg H$` 33 H d 0޽h ? xx-т___PPT10i.|&0$nn+D=' = @B +    <(   ~   s *diP   i ~   s *ܯi`  i H   0޽h ? xx-т___PPT10i. - <+D=' = @B + " 0<(  0~ 0 s *iP   i ~ 0 s *|i`   i H 0 0޽h ? xx-т___PPT10i.e=]+D=' = @B + E  <(  ~  s *`iP   i ~  s *i`   i H  0޽h ? xx-т___PPT10i.e=]+D=' = @B + F  <(  ~  s *iP   i ~  s *i`   i H  0޽h ? xx-т___PPT10i.e=]+D=' = @B + I  p<(  p~ p s *4iP   i ~ p s *i`   i H p 0޽h ? xx-т___PPT10i.e=]+D=' = @B + 80 (  =  T$ujjjj ?"6@ NNN?N~  {IEE115I 14.45.42 2010.347 ACTIVITY FRAME 1 F E SYS=SY1 JOBS M/S TS USERS SYSAS INITS ACTIVE/MAX VTAM OAS 00000 00005 00000 00026 00009 00000/00300 00003 CONSOLE CONSOLE NSW * A=0009 PER=NO SMC=000 PGN=N/A DMN=N/A AFF=NONE CT=000.152S ET=132.523S WKL=SYSTEM SCL=SYSTEM P=1 RGP=N/A SRVR=NO QSC=NO ADDR SPACE ASTE=0F255240 DSPNAME=IEAM0015 ASTE=0C032780 h m  3333NK  T`&jjjj ?"6@ NNN?N P@  5Sample output for the Display JOBS, command6 26$ H  0޽h ? xx-т80___PPT10. @  (   N   Zk ?"6@`NNN?N ) GETASTE CSECT , GETASTE AMODE 31 GETASTE RMODE 31 * * TITLE: GETASTE * * FUNCTION: OBTAIN THE ADDRESS OF MASTER'S ASTE BY INVOKING * AN EXEC TO PARSE THE OUTPUT OF DISPLAY JOBS,*MASTER*. * THE FOLLOWING EXEC TAKES A JOBNAME AS AN INPUT ARGUMENT * AND SETS THE VARIABLE OUTASTE@. * INPUT: InJobname (argument) * OUTPUT: OutAste@ (Output variable) * * NUMERIC DIGITS 25 * ARG INJOBNAME * MYCMD = 'D JOBS,' || STRIP(INJOBNAME); * RESULT = AXRCMD(MYCMD,OUTPUTVAR.,10); /* Issue the * cmd to obtain info about the address space*/ b` 2$`2` 2$`2 > }I H   0޽h ? xx-т___PPT10i.c+D=' = @B + _W d(  d d Z0 kjjjj ?"6@ NNN?N p  * IF RESULT = 0 THEN * DO; * OUTASTE@ = ' ' * DO LINENUM = 1 TO OUTPUTVAR.0 WHILE(OUTASTE@=' '); * PARSE VAR OUTPUTVAR.LINENUM 'ASTE=' OUTASTE@ * END; * IF OUTASTE@ = ' ' THEN * DO; * MYRETCODE = 8; * OUTASTE@ = 0; * END; * ELSE * MYRETCODE = 0; * END; N -   J H d 0޽h ? xx-т80___PPT10.pH( SK h(  h h Zkjjjj ?"6@ NNN?Np * ELSE * DO; * MYRETCODE = 12; * OUTASTE@ = 0; * END; * EXIT MYRETCODE; ******************************************************************** BAKR 14,0 USING GETASTE,12 LR 12,15   H h 0޽h ? xx-т80___PPT10.!_s  s(  ;  Zk ?"6@`NNN?N ) s MODID BR=YES XC MYARGLST,MYARGLST CLEAR THE ARGLST HEADER XC MYVARLST,MYVARLST CLEAR THE VARLST HEADER XC MYARGEN1,MYARGEN1 CLEAR THE ARG ENTRY XC MYVAREN1,MYVAREN1 CLEAR THE VAR ENTRY LA 2,MYARGLST USING AXRARGLST,2 MVC AXRARGLSTID,MYAXRARGLSTACRO LA 5,AXRARGLSTCURVER ST 5,AXRARGLSTVER INITIALIZE THE VERSION LA 5,KNUMARGS OBTAIN THE NUMBER OF ARGUMENTS STH 5,AXRARGLSTNUMBER STORE THE NUMBER OF ARGUMENTS DROP 2 LA 5,AXRARGLSTCURVER ST 5,AXRARGLSTVER INITIALIZE THE VERSION@` 2}   H  0޽h ? xx-т80___PPT10.  {0 H(  H H T3kjjjj ?"6@ NNN?Nx  USING AXRARGENTRY,2 LA 2,MYARGEN1 ADDRESSABILITY TO FIRST ARG ENTRY LA 5,KMASTER ST 5,AXRARGADDRLOW STORE ADDRESS OF JOBNAME (*MASTER*) OI AXRARGINPUTFLGS1,AXRARGINPUT INDICATE INPUT ARG LA 5,L'KMASTER OBTAIN LENGTH OF ARG ST 5,AXRARGLENGTH STORE LENGTH OF ARG IN ENTRY MVI AXRARGTYPE,AXRARGTYPECHAR STORE TYPE OF ARG DROP 2 LA 2,MYVARLST USING AXRARGLST,2 MVC AXRARGLSTID,MYAXRVARLSTACRO LA 5,AXRARGLSTCURVER ST 5,AXRARGLSTVER INITIALIZE THE VERSION &  2 H H 0޽h ? xx-т80___PPT10. 2* ((  ( ( ZAk ?"6@`NNN?N ) r LA 5,KNUMVARS OBTAIN THE NUMBER OF VARIABLES STH 5,AXRARGLSTNUMBER STORE THE NUMBER OF VARIABLES DROP 2 USING AXRARGENTRY,2 LA 2,MYVAREN1 ADDRESSABILITY TO 1ST VAR ENTRY LA 5,OUTASTE@ ST 5,AXRARGADDRLOW STORE OUTPUT ARGUMENT LA 5,OUTARGNAME ST 5,AXRARGNAMEADDRLOW STORE ADDRESS OF NAME OF OUTPUT VAR MVI AXRARGNAMELENGTH,L'OUTARGNAME OI AXRARGINPUTFLGS1,AXRARGOUTPUT INDICATE OUTPUT VAR MVI AXRARGTYPE,AXRARGTYPEHEXSTRING INDICATE HEX STRING LA 5,L'OUTASTE@ OBTAIN LENGTH (IN BYTES) SLL 5,1 MULT BY 2 - LENGTH IS IN HEX DIGITS (NOT BYTES) ST 5,AXRARGLENGTH STORE LENGTH IN VAR ENTRY DROP 2 AXREXX REQUEST=EXECUTE,NAME=KEXECNAME,REXXARGS=MYARGLST, * REXXVARS=MYVARLST,REXXDIAG=MYAXRDIAG, * REXXOUTDSN=KOUTDSN $s` 2s  H ( 0޽h ? xx-т80___PPT10.I  jbP P(  P P TpUkjjjj ?"6@ NNN?N^   LTR 15,15 JNZ FAILLABEL USING AXRDIAG,2 LA 2,MYAXRDIAG TM AXRDIAGFLGS1,AXRDIAGNOEXECRETCODE JNZ FAILLABEL L 15,AXRDIAGEXECRETCODE &  2 H P 0޽h ? xx-т80___PPT10.K$ XP 8(  8 8 Zqk ?"6@`NNN?N )  LTR 15,15 JNZ FAILLABEL * EVERYTHING LOOKS GOOD. PROCESS OUTASTE@ HERE FAILLABEL DS 0H * PERFORM ERROR CHECKING * OUTASTE@ SHOULD CONTAIN MASTER'S ASTE ADDRESS PR KOUTDSN DC CL44'RONN.REXXLOG' KNUMARGS EQU 1 KNUMVARS EQU 1 DS 0D MYAXRARGLSTACRO DC C'ARGL' MYAXRVARLSTACRO DC AL4(AXRVARLSTACRO) KEXECNAME DC CL8'GETASTE ' KMASTER DC CL8'*MASTER*' OUTARGNAME DC CL8'OUTASTE@' $` 2  H 8 0޽h ? xx-т80___PPT10.Pc  p Xc(  X+ X T}kjjjj ?"6@ NNN?N @  i MYARGLST DS CL(AXRARGLST_LEN) MYARGEN1 DS CL(AXRARGENTRY_LEN) MYVARLST DS CL(AXRARGLST_LEN) MYVAREN1 DS CL(AXRARGENTRY_LEN) MYAXRDIAG DS CL(AXRDIAG_LEN) OUTASTE@ DS A AXRZARG DSECT=YES,AXRARGLST=YES,AXRARGENTRY=YES,AXRDIAG=YES END @   2 ,  H X 0޽h ? xx-т80___PPT10.: G  <(  ~  s *,kP   k ~  s *Ѕk`   k H  0޽h ? xx-т___PPT10i.e=]+D=' = @B + ? t<(  t~ t s *kP   k ~ t s *pk`   k H t 0޽h ? xx-т___PPT10i.e=]+D=' = @B + L ` <(  ~  s *kP   k ~  s *tk`   k H  0޽h ? xx-т___PPT10i.e=]+D=' = @B + M  <(  ~  s *؊#P   # ~  s *L+`   # H  0޽h ? xx-т___PPT10i.e=]+D=' = @B + @  |<(  |~ | s *kP   k ~ | s *k`   k H | 0޽h ? xx-т___PPT10i.e=]+D=' = @B + A  <(  ~  s *kP   k ~  s *tk`   k H  0޽h ? xx-т___PPT10i.e=]+D=' = @B + B @ <(  ~  s *kP   k ~  s *k`   k H  0޽h ? xx-т___PPT10i.e=]+D=' = @B + # 86(  8~ 8 s *kP   k x 8 c $k0  k H 8 0޽h ? xx-т___PPT10i.e`+D=' = @B + $ @<(  @~ @ s *kP   k ~ @ s *Xk_  k H @ 0޽h ? xx-т___PPT10i.e+D=' = @B + %  H6(  H~ H s *$kP   k x H c $k_`  k H H 0޽h ? xx-т___PPT10i.we2+D=' = @B +  7 0g(  0~ 0 s *kP   k ~ 0 s *k  k  0 Tm1?"0@NNN?Np  *AXR0200I SYSREXX STATUS DISPLAY SYSTEM REXX STARTED AT 11.00.30 ON 09/18/2006 PARMLIB MEMBERS: AXR00 CPF: @ (SYSTEM) AXRUSER: MEGA TIMEINT: 30 SUBSYSTEM: AXR REQUESTS QUEUED: 0 ACCEPTING NEW WORK REXX WORKER TASKS: ACTIVE: 0 TOTAL: 4 IDLE: 4 MAX: 64 ASYNC: 0 SYNC: 0 UNTIMED: 0 TSO SERVER SPACES: ACTIVE: 0 TOTAL: 0 IDLE: 0 MAX: 8 ASYNC: 0 SYNC: 0 UNTIMED: 0 " 2 0 Zd m1?"0@NNN?Nn D@SR ST" 2  0 Zdk1?"0@NNN?Nqn [@SYSREXX STATUS0 2    0 Z(k1?"0@NNN?No @OR"(2 H 0 0޽h ? xx-т___PPT10i.+D=' = @B +n 8 }8(  8~ 8 s *0mP   m  8 Hm "` =  m q 8 Tp m1?"0@NNN?Nw@  wAXR0201I SYSREXX STATUS DETAIL EXEC=WAITLOOP CJBN=AXR CASID=0015 TSO=Y T/L=00.00.30 REQTOKEN=0000520000000000BF3A704A6511A3B5 EJBN=AXR02 EASID=0033 TCB=006FF098 CPU=000.004S TIME=005.739S EXEC=INFINITE CJBN=AXR CASID=0015 TSO=Y T/L=00.00.30 REQTOKEN=0000540000000000BF3A704C2088405C EJBN=AXR03 EASID=0032 TCB=006FF098 CPU=000.006S TIME=003.925S"x 2x 8 T!m1?"0@NNN?NE[ F@SR ST,D" 2   8 T+m1?"0@NNN?NYc b@SYSREXX STATUS,DETAIL0 2   8 T0m1?"0@NNN?N2@\ @OR"(2 H 8 0޽h ? xx-т___PPT10i.~+D=' = @B + 0 PT"(  Td T c $ 4h   m~ T s *lm  )c  m H T 0Bhy ? 3380___PPT10.gɛ 0 p\"(  \d \ c $ 4h   m~ \ s *Tm  )c  m H \ 0Bhy ? 3380___PPT10.gо 0 d(  dd d c $ 4h   m  d s *Tm  )c`  mH@___PPT9" HSystem REXX has the following uses: A straightforward mechanism for Common Information Model (CIM) Server Indication, Instance and Method Providers to request execution of REXX routines and z/OS System Commands and for the return of parsed operational information in support of the Business Resiliency effort. A way for system and application components to leverage the parsing strengths of REXX. Because REXX coding skills are relatively abundant and span the primary operating systems there is the possibility that code developed on one platform could be shared on others with minimal change. Faster and simpler development of new Health Checker routines. Can be leveraged to provide simplified operator assist functions and quick fixes to niggling problems.4$$H d 0Bhy ? 3380___PPT10.qe0 0 l"(  ld l c $ 4h   u~ l s *4 u  )c  u H l 0Bhy ? 3380___PPT10.g`ť 0 t"(  td t c $ 4h   u~ t s *Du  )c  u H t 0Bhy ? 3380___PPT10.gO 0 |(  |d | c $ 4h   u  | s */u  )c  u Y Overview System REXX execs may be initiated through an assembler macro interface called AXREXX or through an operator command. Two different execution environments are supported: TSO=NO and TSO=YES. In both environments the exec runs in problem state, key 8, in an APF authorized address space; thus any modules that are loaded, linked or attached from the exec must reside in an APF authorized library. Also in both cases, the REXX exec runs under the WLM enclave of the AXREXX invoker. When TSO=NO is specified on the AXREXX invocation, the exec is executed in an MVS host command environment, sharing the address space where it is executing with up to 63 other concurrently running TSO=NO execs. The exec runs under a task in the AXR address space which runs under the MASTER subsystem. Besides MVS, the following host command environments are supported: LINK, LINKMVS, ATTACH, ATTCHMVS, ATTCHPGM, CPICOMM, LU62, APPCMVS Dataset allocation, other than provided by the AXREXX macro, is not supported in this environment. Applications that perform input/output to datasets other than those specified on the REXXINDSN and REXXOUTDSN AXREXX keywords should use TSO=YES. The TSO=YES environment supports all of the host commands that TSO=NO supports, along with some of the host commands supported by TSO. If TSO=YES is specified on the AXREXX invocation, the exec will run isolated in a single address space, and can safely allocate datasets without concern of a DDNAME conflict with a concurrently running exec. If the exec were to exit with datasets allocated, System REXX will free the allocations. The TSO environment is established by the Dynamic TSO Service (IKJTSOEV) and does not support all of the TSO functionality. In R11 (or with OA26802 applied) the TSO=YES environment supports UNIX System Services host commands, assuming that the invoker of AXREXX specifies (or defaults to) a valid security environment. Additionally, in R11 (or with OA26802 applied) execs running in this environment will run under the primary subsystem (i.e. JES) if it is available. Below is a list of TSO host commands that are intended to be supported: ALLOCATE (excludes the SYSOUT operand), FREE, ALTLIB, ATTRIB, CALL, DELETE, EXEC, HELP, PROFILE, SMCOPY, TIME, WHEN. In R11 (or with OA26802 applied), the STORAGE external function is enabled, but only for reading storage; writing storage is prohibited due to the potential risk of inadvertently modifying system storage. There can be up to 64 REXX worker tasks, running TSO=NO execs and up to 8 TSO Server address spaces running TSO=YES execs. If a worker task is not available for an inbound TSO=NO request or a TSO Server address space is not available for a TSO=YES request, the request is queued and the requestor is suspended if SYNC=YES is specified. AXREXX invokers who use SYNC=YES should be careful when a potentially long wait time is unacceptable. At most 5000 active and waiting requests are allowed to exist at any time. Once this threshold is reached, subsequent AXREXX requests are rejected until the number of active and waiting requests drops to 4000. ENF signals (65) are issued when the threshold is exceeded (qualifier of 20000000x), when the total number of requests is getting close to the threshold (qualifier of 08000000x) and when acceptance of inbound requests is resumed (qualifier of 10000000x). "Z P Q H | 0Bhy ? 3380___PPT10.}ez 0 (  d  c $ 4i   u  s *u  )cT  u<4___PPT9 0qH  0Bhy ? 3380___PPT10.Mp5  0 |0(  d  c $ 4h   up  s *ğu  )c  u 0Security The SECURITY and UTOKEN parameters on the AXREXX macro determine the security environment that the exec runs in. If omitted, the exec will run under the same security environment as its invoker. The security environment determines the datasets that may be accessed and the commands and programs that may be invoked. When SECURITY=BYUTOKEN is specified, the invoker can provide a UTOKEN to define the specific security environment that the exec should run under (see z/OS Security Server RACROUTE Macro Reference). When SECURITY=BYAXRUSER is specified, the exec will run under the security environment associated with the value (surrogat userid) of the AXRUSER parameter specified in the AXR00 parmlib member. This could be useful if the installation wants to invoke AXREXX in an address space that does not have a security environment such as the MASTER address space. The exec should not invoke any services that alter the security environment of the task running the exec. Controlling use of the surrogat userid may be restricted through universal access control and limiting the userids or groups in the permission's list. ADDUSER siteuserid DFLTGRP(sitegroupid) RDEFINE SURROGAT SYSREXX.* UACC(NONE) PERMIT SYSREXX.* CL(SURROGAT) ID(siteuserid) ACCESS(READ) SETROPTS RACLIST (SURROGAT) REFRESH By default the AXREXX macro invocation uses SECURITY=BYUTOKEN. In this situation a security token always accompanies the request. It is used to establish the security environment of the invoker under which the exec will be run and is limited to whatever permission's are applicable to the invoker. Additionally, if the REXX exec uses the AXRCMD function to issue a system command, the security token will be passed to MGCRE ensuring the identical security information is used. The security token value may be explicitly provided using the optional parameter UTOKEN, on the AXREXX macro. If omitted, this value will be implicitly set to that of the invoker s security environment. In all cases, the REXX exec runs under the WLM enclave of the AXREXX invoker. 6 t}lL/ F -H  0Bhy ? 3380___PPT10.{ePY5  0 P"(  d  c $ 4h   u~  s *|u  )c  u H  0Bhy ? 3380___PPT10.gH  0 p"(  d  c $ 4h   u~  s *u  )c  u H  0Bhy ? 3380___PPT10.gPīN  0 ^(  d  c $ 4h   u  s *lu  )c  u HInput/Output files AXREXX allows TSO=NO invokers to pass an input dataset via the REXXINDSN parameter and both TSO=NO and TSO=YES invokers to specify an output dataset via the REXXOUTDSN parameter. The input dataset is used by REXX functions that require input from a user such as PARSE EXTERNAL or could be read directly via EXECIO, using the DDNAME specified by the REXX variable AXRINDD. If an output dataset is specified, any SAY or TRACE output from the exec is directed there. Data may also be written to the output dataset via EXECIO using the DDNAME specified by the REXX variable AXROUTDD. Any error messages that the REXX interpreter issues will also be directed to the output dataset. If no output dataset is supplied, SAY, TRACE and REXX messages will be directed to the console specified by the CONSNAME keyword as part of a multi-line WTO AXR0500I. The AXREXX user should be careful not to flood the system with messages and be especially careful when using REXX Tracing when the output is directed to a console. If CONSNAME and REXXOUTDSN are both not specified, the output is lost. Both the input and output datasets may either be sequential or partitioned. In the case of the latter, the REXXINMEMNAME or REXXOUTMEMNAME keywords must be specified. If the output dataset does not exist, System REXX will create a sequential or partitioned dataset consisting of 3 primary blocks, 3 secondary blocks and 1 directory block (if it s a PDS) where each block is 27920 bytes. The dataset will be kept when the exec completes and excess space will be released. If System REXX detects that the output dataset runs out of space, the exec will be terminated and a return code of 8 will be returned to the AXREXX invoker. If there is no data for the PARSE EXTERNAL command in the input dataset, the null string will be returned. Other Outputs In the case where the request is issued with the SYNC=YES option, the invoker is suspended and the results of the request are provided to the invoker upon resumption. For SYNC=NO, when a failure occurs in attempting to process the exec and System REXX cannot pass a return code back to the AXREXX invoker, message AXR0203I will be issued to the console specified on the CONSDATA keyword. If the request is successful, no message is issued. 8Z!H  0Bhy ? 3380___PPT10.e$J  0 Z(  d  c $ 4h   u  s *p  )c  u D Time Limits and Canceling a Request The AXREXX invoker can limit the amount of time that an exec can run by using the TIMELIMIT/TIMEINT keywords. When the time limit is reached, System REXX will attempt to HALT the exec. If the exec still does not complete after waiting for some time, the task running the exec will be detached. Invokers who specify a time limit should realize that time out is an error condition and that for SYNC=YES invokers, the final values of output arguments and variables will not be returned to the AXREXX invoker. AXREXX supports an interface to CANCEL an exec. SYNC=NO AXREXX invokers can obtain the Request Token via the OREQTOKEN parameter for later input to AXREXX CANCEL. Cancel is processed internally as if the exec timed out. *$H  0Bhy ? 3380___PPT10.e,Ap 0 "(  d  c $ 4h   ~  s *  )c   H  0Bhy ? 3380___PPT10.g  0 $(  d  c $ 4h     s *   )c   ,Functions Three functions are provided: AXRCMD, AXRWTO and AXRMLWTO. AXRCMD is used to issue a system command from within the exec and obtain one or more command responses. The arguments that can be specified are listed below: " Command text  The system command to be invoked. This is an optional argument. If it is omitted, no command will be issued, but a response from the last command issuance will be returned if one exists. " Msgstem - The stem of a list of variables into which AXRCMD places the command response message text. This is an optional argument. If it is omitted, Command text must be specified. To place the message text into compound variables which allows for indexing, msgstem should end with a period (e.g.  messg. ). AXRCMD places each line of the retrieved message into successive variables. For example, if the command response is a 3 line message, messg.1 contains line 1, messg.2 contains line 2 and messg.3 contains line 3. messg.0 will contain the number of lines. If msgstem does not end with a period, the variable names are appended with consecutive numbers. For example, suppose you specify msgstem as  conmsg (without a period). If AXRCMD retrieves a message that has two lines of message text, AXRCMD place the text in the variables consmsg1 and consmsg2. The variable consmsg0 contains the number of lines in the message text, which is 2. " Time  The amount of time in seconds that AXRCMD should wait for a command response. This is an optional argument. If it is omitted, AXRCMD will not wait before attempting to determine whether a command response was returned. A value of 0  21474535 seconds may be specified. Return codes are as follows: " 0  the system command was issued and the command response received if requested. The REXX variable AXRDIAG contains the return code and ASID (separated by a blank) from MGCRE which are only valid for the START command. " 4  Command was issued but no command response was received in the specified time limit. " 8  The input wait time contained an invalid value. AXRCMD is not processed. " 12  Too many arguments were passed. AXRCMD is not processed. " 16  The variable name to contain the output of the system command was not acceptable to REXX. If a command was specified, it is issued, but no command response is returned. " 20  A required argument was omitted. Either the Command text or Msgstem (or both) must be specified. This return code will also occur if the one of these two arguments are 0 in length. AXRCMD is not processed.8 P = # |H  0Bhy ? 3380___PPT10.e!( 0 (  d  c $ 4h     s *X  )c    Functions continued& AXRCMD continued& " 24  STIMERM could not be issued to time the request, possibly because there were too many STIMERM requests already in existence. The command was issued if the command argument was specified, but the command response is not returned. " 32  The command text is too long, exceeding 126 characters. AXMCMD not processed. When command text is specified, AXRCMD invokes the MGCRE macro to issue the command. When the START command is invoked, AXRDIAG will contain the return code from MGCRE in hexadecimal, followed by the ASID of the new address space (also in hexadecimal), separated by a blank. Users of AXRCMD can initiate another REXX exec by either specifying the MODIFY AXR command or CPF prefix, but should be careful not to recursively invoke the same exec using AXRCMD. Some examples of the invocation of AXRCMD follow: CmdResult=AXRCMD('D U,,,480', OUTPUTVAR. ,40); /* Issue the D U command */ DO I = 1 TO OUTPUTVAR.0 /* Iterate for the number of lines returned */ SAY OutputVar.I /* Say the line */ END; MyResult=AXRCMD('D T'); /* Issue the D T command but don t wait for a command response */ MyResult=AXRCMD(,  OUTPUTVAR. ,10); /* Obtain the command response from the last command issued and wait up to 10 seconds if it has not arrived */X  acP} p NH  0Bhy ? 3380___PPT10.e!(  0 V N 0 (  d  c $ 4h   B   s *D  )c   6Functions continued& AXRWTO is a function that issues the WTO macro containing the specified text, using the CONSNAME and CART provided on the AXREXX invocation. If CONSDATA is not specified the message text is sent to the system log. There is one required argument for AXRWTO: " Message text - containing the message text to be issued via the WTO macro. The text must be from 1-126 characters in length. The return codes from AXRWTO are: " 0  AXRWTO was successful " 4  Input message text was too long. WTO is truncated. " 8  Input message text was a 0 length string. WTO not issued. " 12  Too many arguments were passed. WTO not issued " 16  The WTO macro returned a bad code. The REXX variable AXRDIAG contains the return code from WTO (in hexadecimal) " 20  Required argument was omitted. WTO not issued. The following are examples of AXRWTO: WTOResult=AXRWTO('Hello from a REXX Exec'); CALL AXRWTO  Hello from a REXX Exec ; /* The return code from AXRWTO is set in the variable  Result */ J  L,h  H  0Bhy ? 3380___PPT10.Aj@Xf 0 <4P(  d  c $ 4h   (  s *m  )cz  bZ___PPT9<4 LxFunctions continued& AXRMLWTO is similar to AXRWTO, except instead of issuing a single line WTO, a multi-line WTO is issued instead. There are three required arguments for AXRMLWTO: " Message Text  containing the text of the message, the length of which depends on the line type. " Name of connect id variable - for the first invocation of the multi-line WTO, the variable should be set to FIRSTLINE. After the first call, the variable will contain the connect id and should not be altered by the application until the multi-line WTO is completed. " Line type  there are 5 different line types. For details, see the description of the WTO macro in z/OS Authorized Assembler Services Guide. C  Control line. The message text must be from 1-35 characters. If used, this must be the first line of the multi-line. L  Label line. The message text must be from 1-71 characters. D  Data line. The message text must be from 1-71 characters. DE  Data end line. The message text must be from 1-71 characters. E  End line. The message text must be omitted. AXRMLWTO has the following return codes: " 0  AXRMLWTO was successful " 4  Message text was too long. Message is truncated. " 8  Text length was 0. WTO not issued. " 12  Too many arguments were passed. WTO not issued. " 16  WTO macro returned a bad code. The REXX variable AXRDIAG contains the return code from WTO in hexadecimal. " 20  A required argument was omitted. WTO not issued. " 24  Invalid line type. WTO not issued. " 28  Invalid connect id. WTO is not issued " 32  Unable to set connect id variable. The variable name is bad. WTO was issued Some examples of the invocation of AXRMLWTO follow: PUP{P+PP  +    H  0Bhy ? 3380___PPT10.Gjp  0   p(  d  c $ 4h     s *Ձ  )c   Functions continued& AXRMLWTO continued& ConnectId = 'firstline'; MyResult=AXRMLWTO('Line 1 from a REXX Exec', 'Connectid','c'); /* Issue the 1st line of the multiline */ IF MyResult^=0 THEN EXIT 1; MyResult=AXRMLWTO('Line 2 from a REXX Exec', 'Connectid','d'); /* Issue the 2nd line of the multiline */ IF MyResult ^=0 THEN EXIT 2; CALL AXRMLWTO ,'ConnectId','e'; /* End the multiline. In this case, return code from AXRMLWTO is set in the variable  result */ DP  ,  * A u > (  H  0Bhy ? 3380___PPT10.Gjp> 0 N(  d  c $ 4h     s *  )c   8Argument and Variable processing The AXREXX macro allows the invoker to specify up to 20 arguments and 256 variables by specifying the REXXARGS or REXXVARS parameter respectively. To use the REXXARGS and REXXVARS parameters, the AXREXX invoker must create a header section mapped by AXRARGLST followed in contiguous storage by 1 or more AXRARGENTRY sections. The mappings for AXRARGLST and AXRARGENTRY can be found in AXRZARG. AXRARGLST contains the following: " AxrArgLstId  Set this to either AxrArgLstAcro or AxrVarLstAcro depending on whether this is for the RexxArgs parameter or the RexxVars parameter " AxrArgLstVer  Set to 0 (the current version) " AXRARGLstNumber  Set to the number of Arguments or variables i.e. the number of AXRARGLstEntry s that follow " Other fields must be cleared to 0 AXRARGLSTEntry contains the following: " AXRARGAddr  Set this to the 64 bit address of the buffer containing the argument or variable. If the argument or variable resides below 2Gig, use AXRARGAddrLow and make sure AXRARGAddrHigh is 0. " AxrNameAddr  Set this to the 64 bit address of the buffer containing the name of the argument or variable. This field can be set to 0 if this is for an input only argument. If this name resides below 2Gig, use AXRNameAddrLow and set AXRNameAddrHigh to 0. " AXRARGLength  Set this to the length of the buffer containing the argument or variable. Note that different argument/variable types have specific requirements regarding lengths. " AXRARGAlet  Set this to the alet of the argument/variable. Must be on the DUAL of the task that invokes AXREXX. If the argument/variable resides in the invoker s primary address space, set this to 0. " AXRARGNameAlet  Set this to the alet of the buffer containing the name of the argument/variable. Must be in the DUAL of the task that invokes AXREXX. If the name resides in the invoker s primary address space, set this to 0. " AXRArgOutLength  System REXX sets this to the length of data returned to the invoker. Note that this value is in units of bytes for types Signed, Unsigned and Char, in units of hex digits (half bytes) for type HexString and in units of bits for type BitString. " AxrArgNameLength  Set this to the length of the name of the argument. This must contain the actual length of the argument or variable and not include any trailing blanks. " AxrArgType  Set this to the type of the argument/variable. " AXRARGInput  Set this if the argument/variable in the REXX exec is to be initialized to a value on entry to the exec. " AXRArgOutput  Set this if you want to retrieve the final value of the argument/variable on exit from the exec for a SYNC=YES request. Note that if the variable is not set by the exec, System REXX will fail the request. " P"    ( $D2         6 o H  0Bhy ? 3380___PPT10.~e c' 0 7(  d  c $ 4h     s * 7  )c   ! There are no hardware or cross-component BCP dependencies for System REXX on z/OS 1.9. All dependencies are incorporated in z/OS 1.9 base. There is a loosely coupled software prerequisite when compiled REXX code is to be processed; IBM Library for REXX on zSeries Alternate Library (5695014/HWJ9143) will automatically be included on z/OS ServerPacs from z/OS 1.9 onwards, should the installation not be licensed for IBM Library for REXX on zSeries (5695014/HWJ9140). This Alternate Library is entitled and provides a basic runtime processor capable of interpreting compiled REXX execs. Its inclusion is necessary as some IBM REXX code is shipped only in compiled format.>L \H  0Bhy ? 3380___PPT10.,jC 0 P"(  d  c $ 4h   ~  s *   )c   H  0Bhy ? 3380___PPT10.g@] 0 pm(  d  c $ 4h     s * U  )c   WNote that the first valid instance of a parmlib keyword is used. So for example, if two valid instances of the CPF keyword were to appear in a single parmlib member or multiple parmlib members, the first would be used. >(j%H  0Bhy ? 3380___PPT10.g@۽B 0 $R(  $d $ c $ 4h    $ s *`  )c   <Planning to Use System REXX System REXX starts automatically during Master Scheduler Initialization. There is a SYS1.PARMLIB member (CTIAXR00) for controlling Component Trace (Errors are traced by default) and also a SYS1.SAMPLIB member (AXR00) that may be tailored and copied into SYS1.PARMLIB to override IBM supplied defaults. AXR00 parameters are described in z/OS MVS Initialization and Tuning Reference. If AXR00 is not found, default in SYS1.PARMLIB default specifications apply (CPF = REXX&sysclone. and AXRUSER = AXRUSER). The System REXX address space, AXR, is non-cancelable, but can be terminated by invoking FORCE AXR,ARM. When the AXR address space terminates, ENF signal 65 with a qualifier of 40000000x is issued. AXR can be restarted by starting the AXRPSTRT proc, which can be found in SYS1.PROCLIB. When the AXR address space initializes, an ENF signal of 80000000x is issued. The Command (CPF) prefix defined in AXR00 can be used as a short-hand way of invoking a REXX exec or the SYSREXX STATUS command from a console as opposed to specifying MODIFY AXR. The installation has the option of defining the prefix to be SYSTEM or SYSPLEX in scope. See z/OS MVS Planning: Operations for more detail about CPF processing. The MODIFY AXR command is discussed in z/OS System Commands. The installation should also evaluate the security issues involved with System REXX, including restricting access to the SYS1.SAXREXEC dataset. Additionally, the installation should determine who should be allowed to issue MODIFY AXR to submit an exec for execution or to display status from an operator console. The resource entities for these are MVS.SYSREXX.EXECUTE.<exec name> or MVS.SYSREXX.STATUS. For MODIFY AXR,SYSREXX STATUS, if SAF cannot decide whether the request is authorized it will be allowed. For MODIFY AXR,<exec name>, if SAF cannot decide whether the request is authorized, it will be allowed only if the invoking console has MASTER authority. The SYS1.SAXREXEC dataset contains execs that IBM has provided. These execs should never be deleted or modified in any way. Customers can add their own execs to this dataset, although in R11 or with OA28602 installed it is recommended to maintain non-IBM execs in different data sets. In any case, the installation s execs should not start with the letters A through I which are reserved for IBM. "f PJ , NH $ 0Bhy ? 3380___PPT10.}e@ 0 4"(  4d 4 c $ 4h   ~ 4 s *k  )c   H 4 0Bhy ? 3380___PPT10.g`ĭ 0 <"(  <d < c $ 4h   ~ < s *q  )c   H < 0Bhy ? 3380___PPT10.gP  0 D"(  Dd D c $ 4h   ~ D s *,  )c   H D 0Bhy ? 3380___PPT10.g!2! 0 0L"(  Ld L c $ 4h   ~ L s *  )c   H L 0Bhy ? 3380___PPT10.gp`L 0 ~(  ^  S  4R   3x  c $x3  )c  3 H  0Bhy ? 3380___PPT10.%GA. 0 ~ (  ^  S  4h   x  c $0  )c   H  0Bhy ? 3380___PPT10.YZ/ 0 ~0(  ^  S  4h   x  c $/  )c   H  0Bhy ? 3380___PPT10. uZ_1 0 o(  d  c $ 4h     s *  )c   YENote that TIMEINT defaults to 30 seconds and may be abbreviated as T=H  0Bhy ? 3380___PPT10.g 2 0 $"(  $d $ c $ 4h   ~ $ s *  )c   H $ 0Bhy ? 3380___PPT10.yPӏ3 0 ((  (^ ( S  4h     ( c $̯  )c    A new system address space, AXR, must be added to the installation s designated RACF group for system address spaces, if it does not already do so by default. Even though there is no AXR procedure in SYS1.PROCLIB, you must still ensure that there is a matching entry in either the Started Procedures Table (ICHRIN03) or that a STARTED class profile has been defined that matches the name AXR, assigning userid and system group characteristics to the AXR address space. The following RACF commands can be used to accomplish this dynamically. If SYS1 is not the RACF group name used for procedures starting system address spaces in your installation, substitute it with the correct group name established by your installation. RDEFINE STARTED AXR*.* STDATA(USER(=MEMBER),GROUP(SYS1)) SETROPTS RACLIST(STARTED) GENERIC(STARTED) REFRESH For details, see the topic "Using Started Procedures" in the z/OS Security Server RACF Security Administrator s Guide. Alternatively, the following statements might be added to ICHRIN03 that must then be recompiled and link-edited. Also, recognize that an IPL is required for the updated started procedures table to take effect. Separate entries for each AXRnn address space must be added. ICHRIN03 CSECT ... DC CL8 AXR  SYSREXX Procedure Name DC CL8 =  Procedure Name is USERID DC CL8 SYS1  Sites Group Name for System Tasks DC XL1 00 Neither Privileged or Trusted DC XL7 00 Reserved For details, see the topic "The Started Procedures Table (ICHRIN03)" in the z/OS Security Server RACF System Programmer s Guide. v~Zm=8)M3H ( 0Bhy ? 3380___PPT10.}64 0 4"(  4d 4 c $ 4h   ~ 4 s *Ђ  )c   H 4 0Bhy ? 3380___PPT10.g݀5 0 <"(  <d < c $ 4h   ~ < s *<Ղ  )c   H < 0Bhy ? 3380___PPT10.g>6 0 @LN(  Ld L c $ 4h    L s *ڂ  )c   8Functions continued& AXRWAIT: CALL AXRWAIT 5 /* Wait for 5 seconds */ AXRINFO: MySubsystem = AXRINFO( SUBSYSTEM ); /* Obtain the subsystem we are running under */\P   P U{ JH L 0Bhy ? 3380___PPT10.Gjp7 0 pX"(  Xd X c $ 4h   ~ X s *  )c   H X 0Bhy ? 3380___PPT10.yPӏ8 0 7/`(  `d ` c $ 4h   # ` s *  )c   wHere are some examples of REXXLIB statements: REXXLIB ADD DSN(HMORGEN.MYREXX) VOL(PEVTST) REXXLIB ADD DSN(hmorgen.pds2)x.JH ` 0Bhy ? 3380___PPT10.g@۽9 0 h(  hd h c $ 4h    h s *(  )c   Some REXX code that IBM provides is compiled and requires a runtime processor from either the licensed IBM Library for REXX on zSeries (5695-014  FMID HWJ9140) or the entitled no charge IBM Library for REXX on zSeries Alternate Library. For z/OS Version 1 Release 9 and above ServerPacs, orders will be shipped with either one or the other depending on the configuration that was ordered.  >M< hH h 0Bhy ? 3380___PPT10.g@۽N: 0   p^ (  pd p c $ 4h     p s *$   )c   H  MODIFY AXR,SYSREXX may be replaced by <cpf>SYSREXX SYSREXX may be abbreviated as SR STATUS  ST DETAIL  D REXXLIB  R Output from MODIFY AXR,SR ST: SY1 AXR0200I SYSREXX STATUS DISPLAY 770 SYSTEM REXX STARTED AT 16.55.00 ON 11/30/2010 PARMLIB MEMBERS: AXRHM CPF: @ (SYSTEM) AXRUSER: IBMUSER TIMEINT: 30 SUBSYSTEM: AXR REQUESTS QUEUED: 0 ACCEPTING NEW WORK REXX WORKER TASKS: ACTIVE: 0 TOTAL: 4 IDLE: 4 MAX: 32 ASYNC: 0 SYNC: 0 UNTIMED: 0 TSO SERVER SPACES: ACTIVE: 0 TOTAL: 1 IDLE: 1 MAX: 8 ASYNC: 0 SYNC: 0 UNTIMED: 0 Output from MODIFY AXR,SR ST,D: SY1 AXR0201I SYSREXX STATUS DETAIL 786 EXEC=JUNK2 CJBN=AXR CASID=0015 TSO=Y T/L=00.01.40 REQTOKEN=0000400000000000C6F6BF142A45D603 EJBN=AXR04 EASID=002C TCB=006E4668 CPU=000.009S TIME=003.328S Output from MODIFY AXR,SR R: SY1 AXR0202I SYSREXX REXXLIB DISPLAY 792 ENTRY VOLUME DATA SET 1 PEVTST HMORGEN.MYREXX 2 PEVTST HMORGEN.AXRR11.REXX 3 BCPSV1 SYS1.SAXREXEC 4 ZD113B SYS1.SAXREXEC $E'H p 0Bhy ? 3380___PPT10.yPӏ; 0 x"(  xd x c $ 4h   ~ x s *,)  )c   H x 0Bhy ? 3380___PPT10.g`ĭ< 0  "(  d  c $ 4h   ~  s *.  )c   H  0Bhy ? 3380___PPT10.g`ĭ= 0 0 "(  d  c $ 4h   ~  s *  )c   H  0Bhy ? 3380___PPT10.g`ĭ> 0 P "(  d  c $ 4h   ~  s *L4  )c   H  0Bhy ? 3380___PPT10.g`ĭA 0 SK (  d  c $ 4h   ?  s *9  )c   System REXX keeps track of IRX (REXX) and IKJ (TSO) messages. In the event of a syntax error SYSREXX is able to return the message id corresponding to the syntax error, the line number and possibly other REXX/TSO issued messages. xxxx0828 Name: AXRExecSyntaxError Meaning: A syntax error or some other run time error was encountered during the execution of a REXX exec. Action: The REXX interpreter issues one or more error messages that indicate the offending line number. If RexxOutDsn is specified, look at the dataset for the message. If RexxOutDsn is not specified but ConsData is specified, look at the console or the system log. If RexxDiag is specified, AXRDIAG1 contains the number of the error which corresponds to an IRXnnnI message, AXRDIAG2 contains the line number where the error occurred and AXRDIAG3 and AXRDIAG4 contain the message ids of the last two IRX or IKJ messages that were issued before the exec completed. All of these values are in packed decimal format with the sign bits shifted out. A 1 in the high order byte distinguishes an IKJ message from an IRX message.  P t G "[nH  0Bhy ? 3380___PPT10.g`ĭB 0  "(  d  c $ 4h   ~  s *P  )c   H  0Bhy ? 3380___PPT10.g`ĭC 0  "(  d  c $ 4h   ~  s *U  )c   H  0Bhy ? 3380___PPT10.g`ĭJ 0  "(  d  c $ 4h   ~  s *xg  )c   H  0Bhy ? 3380___PPT10.YZa 0  t"(  td t c $ 4h   ~ t s *l  )c   H t 0Bhy ? 3380___PPT10.g`ĭC b 0 0 |S(  |d | c $ 4h    | s * t  )c   =Both the REXXARGS and REXXVARS parameters are mapped using the same mapping in AXRZARG. The mapping consists of a header, AXRARGLST, followed by one or more entries mapped by AXRARGENTRY. The entries point to buffers which contain the actual value of the input arg/var or the spot where the output arg/var will be placed. These buffers are 64 bit addressable and can be alet qualified. This diagram shows the format of the AXREXX RexxVars (RexxArgs) parameter with two variables (arguments). AxrArgLst is the header followed by 1 or more AxrArgEntry; 1 for each argument or variable. AxrArgLst is the header followed by 1 or more AxrArgEntry; 1 for each argument or variable. AxrArgLstNumber contains the number of variables (arguments). When a failure occurs attempting to process a variable (argument), AxrArgLstEntryInError contains the index of the AxrArgEntry that caused the error. The reason code from AXREXX describes the problem. When an error occurs processing an output arg/var, processing terminates i.e. no subsequent args/vars are processed. AXRZARG &DSECT=YES,&LIST=YES,&TITLE=YES,&AXRARGLST=YES, &AXRARGENTRY=COND,&AXRDIAG=COND FUNCTION: Contains the mapping of the argument/variable list and the DIAG area for the AXREXX service. SIZE: AXRARGLST -- X'0010' bytes AXRARGENTRY -- X'0028' bytes AXRDIAG -- X'0028' bytes ACRONYM: ARGL or VARL Inclusion will create a DSECT AXREXX Return and Reason Code definitions EYE-CATCHER: ARGL or VARL OFFSET: 0 LENGTH: 4 A=. % $ % %t y+ H | 0Bhy ? 3380___PPT10.uy}c 0 P "(  d  c $ 4h   ~  s *đ  )c   H  0Bhy ? 3380___PPT10.^,d 0 p "(  d  c $ 4h   ~  s *  )c   H  0Bhy ? 3380___PPT10.g`ĭf 0  "(  d  c $ 4h   #~  s *#  )c  # H  0Bhy ? 3380___PPT10.g`ĭrLPg!0~  S36ӧjYZ[0B #@_ tg jl30}Wq0ضHhF "I<K0B/DGO@\^a,cd h Fek Tgbin]pkmНo?oyy \|ҌpW_Ơ:bd. )U#(` ,=l1>I&,7EP6WJqcZ]D ( h  v&rnorthru@us.ibm.com4mailto:rnorthru@us.ibm.com~http://www.rexxinfo.org/html/rexxinfo1.html#Rexx-Best-PracticesVhttp://wwOh+'0T hp    $, RONNTDM Spring 2007Harris Morgenstern107Microsoft PowerPoint@=@0^,@@G!GS;  )'  A  """)))UUUMMMBBB999|PP3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f333f3333f3ffffff3f̙3f3f3f333f3333f3ffffff3f̙3f3ffffffffff!___wwwJava4'A x@(xKʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwfffffffϋϋφϭϋϋϭϋϋφφϋffffϋϮϴϋϋϋϮϮՋffffffffφϋϋϋϋϋϋϮϋϋϋϮϋϋφφϋϋffffffϋϋϮϴϮϮϮϮϮϮϋϮϋՆfffffffffφϋϋϋϋϋφϋφφϋϋծffffϋϋϋϮϮϋϋϋϮϋϋϋՆffffffϋφϋφϋφծffffϮϋϮϋϮϋϮϋϮϮffffffffffφfffffφfϋ֮ffflfffϋfϋϋϮφϋϋϋφϋՋfffffffffϋfffϋφfϋϋφϭϮφϋϴϋffffffϋφfϋϋfϮφϋϮϋϮϮխφefffBffφfffϋϋfffffφfϋ֮fffffϋfϋφϴφffffffϮϴφfffffφfϭϋϋϋϋffffffϭφfϭϋffφϮϮϋϮϴffϋfϮφfffϭφffφϋϋfϋfϋϮϋφfϮfφϋϮϋϋϋϋϋφfffϋφfϋϮφffϋffffϮϋfϮϮϴϴϮφϋϮφϮϋfff洆fffϭφϋφϭφffφffffffϋϋfϋ洮ϋφfffϮffϋffffffϭffφfffffffffffφfffϋCffϋf洮ϮfφffffffffϮfffφeCBffffBՋfffφffefffeffffffffffִϴϋφfBfffffCffϋϮφffffffffffffffffϴՋφfBf]Fir$%3àRHM;"i"R$v! )NX R$qܣ!h=;h jjjj     A@  A  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}Root EntrydO)0QGPicturesKCurrent UserVSummaryInformation(S UPowerPoint Document(l?DocumentSummaryInformation8~w.rexxinfo.org/html/rexxinfo1.html0&Rexx-Best-Practices,/ 0`DArialNew ps MQ0 0"DWingdingsps MQ0 0 DTimesngsps MQ0 0 0DImpactgsps MQ0 0"@DTrebuchet MSps MQ0 0"PDCourier Newps MQ0 01`DCordia Newps MQ0 0"pDTimes New Roman MQ0 0 B(.  @n?" dd@  @@`` 6.P z  /k !"#$%&'()*+,-./0123456789@ADEFGHILMNOPQRS l o prsutwxyz|{}~R$0#„9Dܷz^R$Q_j)9H A*RR$)#1D'2]R$R$NaRA G r$ԑ]>]Fir$%3àRHM;"i"R$v! )NX R$qܣ!h=;h jjjj     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab 33@8TZ ʚ;15ʚ;g4(d(d$0ppp@ <4ddddP0Hs g4dddd$0p pl<4BdBdP0Hs0___PPT10 ___PPT9RARg<B6 5?  O  =m0z/OS System REXX 1  Table of ContentsTrademarks Theme Session Objectives Overview Logical Overview Diagram Comparison of REXX & TSO Servers TSO/E Command Support Security & Enclave Considerations  Usage & Invocation Arguments & Variables Interaction & Dependencies Migration & Coexistence Considerations Installation Exploiting SYSREXX Best Practices Session Summary Appendix TrademarkspSee http://www.ibm.com/legal/copytrade.shtml for a list of trademarks. New trademarks: System REXXTM SYSREXXTM X(,   *!D  0- ThemeSimplification The role of SYSREXX in  New Face of z/OS is to provide an infrastructure through which REXX execs may be run outside the normal TSO/E or Batch environments, using a simple programming interface. This enables the leveraging of base operating system components by new style applications that will, over time, lead to simplified interaction and more intuitive system management capabilities on z/OS. The ability to initiate REXX execs directly from an operator console has been long overdue on z/OS and is a drag along benefit of this initiative. The possibilities for exploiting existing REXX code through the use of SYSREXX are vast, whether to provide operator assists or to provide routines that can be leveraged by new strategic initiatives.F" Session Objectives]Describe System REXX The Design Customization Getting Started Where to find more information(HH Overview *Problem Statement / Need Addressed: Required an Infrastructure to Support Web Based Initiatives interacting with z/OS Components New Face of z/OS z/OS Simplification & Management Solution: SYSREXX allows execs to be run simply & independently from traditional TSO/E & Batch Invocation uses a single program interface (AXREXX) Operator exploitation directly from a console Benefit: Enables rapid development & deployment of system programmer tools and operator assists Can be exploited by new & old style applications Health Checks may be written in REXX$P]PP!P PUPcP PP$]!   Uc    SYSREXX Logical Overview REXX Server vs TSO Server  REXX Server Execs run in AXR AS 1-64 Worker Subtasks EMCS for each subtask Detach after 100 execs Default HCE - MVS Recommend no Data Set Allocation here Availability impact if something serious breaksX ZZzZ0Z z0 *TSO Server Execs run in AXRnn AS 1-8 TSO Server Address Spaces EMCS for each AS Detach after 200 execs All Allocation capabilities Default HCE - TSO IKJTSOEV  Dynamic TSO environment SYSCALL supported Better availability should something serious break.. just cancel AXRnn ASn ZZvZ5ZJZ v5  Jd.!TSO/E Command Support 1 of 3"<TSO=YES requires an isolated address space to avail itself of TSO/E services and POSIX host commands authorized & jscbauth = 1 Address spaces called AXR01-08 within a dynamic TSO/E environment & ikjtsoev service TSO/E was modified to allow Sysrexx execs to invoke authorized commands PeqHeqH>rK%&J TSO/E Command Support 2 of 3!xTSO=Y Requests Run authorized & jscbauth = 1 in a separate address space & axr01-08 within a dynamic TSO/E environment & ikjtsoev service We restrict the number of commands that Sysrexx officially supports because the Dynamic TSO environment does not set up all the features of the Terminal Monitor Program (TMP) VZyZZZy> S1e/ TSO/E Command Support 3 of 3!*Problems Encountered: Some authorized commands do not tolerate a dynamic environment TSO/E control blocks are unavailable or incomplete CONSOLE host command environment is not supported Userid function does not return a valid userid In R11 (or with OA26802 applied), in most cases this has been corrected, but still would be in the case where the AXREXX invoker does not specify (or default to) a valid security environment. Link, Load, or Attach unauthorized modules & ABEND306 Resources not cleaned up, may influence subsequent execs Data sets left allocated are freed (but execs should clean up) Error handling paths that ABEND if error messages are issued ?33/o?>?33/  o?<," !Security & Enclave Considerations"AXREXX is an Authorized System Service Security Controls Essential Userid and Groupid Associations for SYSREXX Address Spaces Access to APF Library Permissions Standard security administration what can be accessed and/or run EXECs by default use Invoker s Security Environment Alternatively may use: Authority of a 3rd party  a surrogat Special userid which is assigned to AXRUSER EXECs use Invoker s Enclave service class Prevent CPU priority inversion & excessive resource usage Resource usage is charged back to invoker R'PP]P!P!PP4PPTP+PdPP ]!  !4    B    *  d$$((PNc0r3System REXX Address SpacesNSome Installation s Tightly Control Started Procedures Security Administrator must update the STARTED class profile and/or the Started Procedures Table (ICHRIN03) This assigns Userid and Group characteristics to these address spaces The AXR address space is System REXX Attach to Group for System address spaces Requires READ authority SYS1.PARMLIB & SYS1.SAXREXEC In R11 (or with OA26802 applied) - REXXLIB data sets :DVDV OUsage & Invocation 1 of 7PIQEasy way for Web Based Servers to run commands/functions & get back pertinent details Method for system and application components to exploit REXX parsing strengths Leverage REXX coding skills which are extensive & span all operating systems Faster development possibilities for new Health Checks Controlling RACF passwords and phrases QR OUsage & Invocation 2 of 7PI,Provision of simplified operator assist functions & quick fixes when necessary Exploitive possibilities by Customer code, IBM & ISV components & products SYSREXX is a Server Starts early during Master Scheduler Initialization No STOP capability but the AXR address space can be forced FORCE AXR,ARM |ZZZoZZZo OUsage & Invocation 3 of 7PIbNew Macro is AXREXX Caller must be authorized Two Modes of Execution TSO=NO Limited Data Set Support TSO=YES Full Data Set Support Permitted Three Operations are supported REQUEST=EXECUTE | CANCEL| | GETREXXLIB Arguments & Variables are used to pass input to and receive output from the REXX exec Parameter List is mapped by the AXRZARG macrov1R(1R( OUsage & Invocation 4 of 7PIDNew Macro is AXREXX continued Data Types supported: Input is converted to strings Output is returned as signed/unsigned, char, binary, hex Security Environment of Requester is used by default Can be changed with SECURITY= keyword Service Classification using Requester s enclave Time Limitations are Applied to Execs Default is 30 seconds Cancellation of REXX Exec using API OREQTOKEN parameter with REQUEST=CANCEL W5&1'$) W5&0    '  $)OUsage & Invocation 5 of 6PIOperator Command Support Detected by System REXX SSI Listener Uses a customizable Command Prefix (cpf) Administrative Support cpfSYSREXX STATUS[,DETAIL] cpfSYSREXX REXXLIB Seamless operator interface for REXX execs cpfRexxExecName Arg1 Arg2 & Argn REXX Execs Read From SYS1.SAXREXEC Or other data set in REXXLIB Concatenation (R11 or OA28602 applied) 8Z%Z)ZZ0Z,Z!Z#ZDZZ%$   ,   #Dbb  7 iOUsage & Invocation 6 of 7PIOriginally three SYSREXX Functions were provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console l2ZZ7ZZ,Z Z/Z2 OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console v&7, /&>i OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console N&&>36 OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console @&&o8 OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console @&&o8 y6OUsage & Invocation 7 of 7PITwo additional ones were added in R11 (or OA26802 ): AXRWAIT Waits for a specified number of seconds Similar to SLEEP host command (available in TSO=YES environment) AXRINFO Obtains environmental information 5j $5j "n1EConsole Interface for REXX Execs 1 of 4 $F>The Console Interface is the MODIFY AXR command Can be replaced by the CPF value defined in AXR00 Provides a seamless operator interface for REXX execs MODIFY AXR,[,TIMEINT= ] cpf ] REXX execs are run with the AXREXX macro CONSDATA keyword in effect AXRWTO and AXRMLWTO functions send messages to the invoking console as command responses126aDY1265)DY  >!o2DConsole Interface for REXX Execs 2 of 4E>Command Authority determines which commands may be entered from a console. A userid logging onto a console has all permissions associated with the userid Console initiated REXX Execs run TSO=YES A blank separates arguments from one another and from the other command keywords The is a CHAR string consisting of the remainder of the command line SAY, TRACE and REXX messages are directed to the invoking console as multi-line message AXR0500I{7DConsole Interface for REXX Execs 3 of 4E>AXRUSER has NOTHING to do with the Console Interface for REXX Execs Common misconception Security environment is that of the user logged onto the console MVS.SYSREXX.EXECUTE. Resource used to determine whether the invoker is authorized to execute the exec MVS.SYSREXX. Resource used to determine whether the invoker is authorized to issue F AXR,SYSREXX STATUS and other MODIFY AXR commandstDWR yDWR y  :DConsole Interface for REXX Execs 4 of 4E>MODIFY AXR,SYREXX STATUS Provides overall status of System REXX MODIFY AXR,SYSREXX STATUS,DETAIL Provides detailed information about actively running execs MODIFY AXR,SYSREXX REXXLIB (R11 or OA28602 installed) Displays the REXXLIB concatenation'!<7#'!<  7  #  Arguments & VariablesUp to 20 ARGs and 256 VARs are Supported Caller specifies the data type of the ARG/VAR, the name of the ARG/VAR and whether it is input, output or both Signed/Unsigned 32 or 64 bit, CHAR String, BIT String, and HEX String Types are supported If the ARG/VAR is input, System REXX will convert the data type to a character string and set the ARG/VAR prior to exec invocation If the ARG/VAR is output, System REXX will obtain the final value of the ARG/VAR, convert it into the specified data type and copy it into the AXREXX invokers storage AXRZARG macro provides the ARG/VAR list mapping Special Variables set by AXR on input to the exec AXRREQTOKEN 32 Hex Request Token AXRINDD 8 Char If RexxInDsn Specified AXROUTDD 8 Char If RexxOutDsn Specified P[PZPP2PP[\2, ,  bAAXRZARG Mapping Macro BA cAAXRZARG Mapping Macro BAInteractions & Dependencies6Hardware Dependencies None Software Dependencies To Process Compiled REXX Code IBM Library for REXX on zSeries OR IBM Library for REXX on zSeries Alternate Library Exploiters CIM Server .. Cluster Instrumentation Health Checker Security Server (RACF) Open to exploitation by IBM, ISV and Customer Code\ \  ,g#XInstallation 1 of 5 $YQNo Installation Requirements on z/OS V1 R9 Install OA26802 (no need if running z/OS V1 R11 or higher) SYSREXX is a new BCP Component .. 5752SCAXR All Cross-Component Dependencies Included In Base Implementation & Customization Easy & Straightforward Reference Publications Authorized Assembler Services Guide .. SA22-7605 Starting SYSREXX Requires Ability to read SYS1.PARMLIB Parmlib member CTIAXR00 Ability to read SYS1.SAXREXEC (and the REXXLIB)+PPP.P6PPfP+.6  f XInstallation 2 of 5 $YQ" Parmlib Support SYSREXX Customization: AXR00 In R11 (or with OA28602 installed) IEASYSxx can specify an AXRxx parmlib concatenation AXR=(xx,yy,& ) First valid instance of option used CPF( cpfvalue ,SYSTEM|SYSPLEX) AXRUSER(userid) Optional with APAR OA22146 applied 4X22#X  2  #33tS(,}8XInstallation 3 of 5 $YQR Parmlib Support (continued) REXXLIB support (R11 or OA28602 installed) Up to 255 data sets are supported SYS1.SAXREXEC concatenated as the last data set unless specified Data sets must have the same characteristics as SYS1.SAXREXEC (i.e. variable length records of size 255) Component Trace (SYSAXR): CTIAXRxx Defaults to ERROR tracing ZZ+ZZ$ZZZ+$  /~9XInstallation 4 of 5 $YQ Proclib Support SYSREXX is restarted using procedure AXRPSTRT S AXRPSTRT Uses AXR00 for start parms S AXRPSTRT,AXR=(xx,yy& ) - in R11 or OA28602 installed REXX LIBRARY/REXX ALTERNATE LIBRARY Must be set up to run any compiled exec . 7$(.   7$(33>Wo!WInstallation 5 of 5XQParmlib & Proclib Members Copy member AXR00 from SAMPLIB to PARMLIB Customize AXR00 Choose a Command Prefix CPF( @ ,SYSTEM) If required setup a surrogat userid that SYSREXX may use AXRUSER(SYS1) On R11 or with OA28602 installed set up REXXLIB On R11 or with OA28602 installed set up IEASYSxx and specify multiple AXRxx members CTRACE member is CTIAXR00 Restart AXR using the AXRPSTRT procedure ::1::    1P O#Exploiting SYSREXXnCustomer Validation Is Critical Implement automation tasks that could be carried out from SYSREXX: Perhaps launch from exits Implement operator assists that could be launched from the console via SYSREXX Implement health checks in SYSREXX Reference Session 2815 from Orlando SHARE Proceedings  z/OS 1.9: Health Checker Update and User Experiences with System REXX Checks http://ew.share.org/proceedingmod/abstract.cfm?abstract_id=17633  Cr7 Cr7  O@}3AExploiting SYSREXXInvocation from the AXREXX macro SAY/TRACE output goes to the output data set specified by REXXOUTDSN on the AXREXX invocation If not specified output goes to the console specified by CONSDATA (this is the invoking console when the exec is initiated from an operator console) If CONSDATA is not specified, SAY/TRACE output is dropped AXRWTO/AXRMLWTO output goes to the Console specified by CONSDATA. Goes to the System Log if CONSDATA is not specified !_:z!_: zgExploiting SYSREXXInvocation from the AXREXX macro Errors converted into return/reason codes More info is needed to debug problems REXX communicates with messages NOT codes Use of REXXDIAG keyword essential for SYNC=YES System REXX processing interrogates REXX messages and returns REXX and TSO message ids In the case of a Syntax/Run-time error, returns the line where the error occurred Contents of REXXDIAG are reason code specific !*P0!*P0  BExploiting SYSREXXInvocation from the AXREXX macro Diagnostics when failing to process an input/output argument or variable For example, in the REXXVARS AXREXX parm, MyVar is an output variable of type AXRARGTypeUnSigned, but the variable contains non-numeric data Bad argument/variable number is stored in AXRARGLstEntryInError SYNC=YES option will suspend invoker until exec completes Do not use if the invoker cannot tolerate a delay (e.g. in an MPF exit) !I:H!I:H     PWaExploiting SYSREXXSample invocation of AXREXX macro Takes a jobname as input and issues the DISPLAY JOBS command to obtain the ASTE address of the job Typical of some applications that have been written in support of z/OSMF Invoke a command to fetch some piece of data to return to the invoker Many execs also invoke utility programs to obtain data in other ways e.g. generating data sets For example EREP can easily be invoked from an exec to format SYS1.LOGREGbIF_JIF_J  *eP_`T\ W] [^ C Common ErrorszFailure to correctly set up the REXX Run Time Library or the Alternate Library Causes failure to run compiled REXX execs Return/reason code 0C/xxxx0C08, message IRX0157E Performance issues Service class of AXR or AXRnn address spaces not set up properly (Discretionary  should be privileged) Parent task monitoring exec has much lower priority than subtask running exec (priority inversion) Causes failure to apply time limit or Cancel execs O[3O[3  ;QBest Practices 1 of 4RJ?Execs should free any obtained resources Since AXREXX is an authorized API, a level of trust is assumed since the REXX environments are reused unless the request fails (AXREXX non-zero retcode) For TSO=YES requests, SYSREXX detects data sets left allocated by the exec and deallocates them Negative performance impact Use Signal Handles: NOVALUE, SYNTAX, HALT Return the value of SIGL and the return code to the AXREXX invoker Provide a consistent diagnostic strategy Pass back return codes and reason codes of the failing API to the AXREXX invoker and any relevant messages)ZZZ*ZCZ)ZkZ)*C  )j,Q $dQBest Practices 2 of 4RJAlways specify the DIAG parm on AXREXX invocations Provides valuable diagnostic info Provide an argument to the exec to run with some level of REXX tracing active Specify RexxOutDsn or CONSDATA on AXREXX invocation to provide a destination for the trace output ^3"Nb3"Nd, RfQBest Practices 3 of 4RJCreate a REXXLIB concatenation and do NOT modify SYS1.SAXREXEC Ensure your exec names do not start with the letters A-I Use the TSO=NO environment if possible Benefits  Use of a shared address space Downside  NO TSO Host commands, NO SYSCALL (POSIX) Host commands. Single point of failure  a serious problem could cause a disruption to the AXREXX service @Z9Z'ZpZ\ZZZ@9'p\  <QBest Practices 4 of 4RJCoding conventions Use PROCEDURE/EXPOSE to ensure that changes made by a procedure only affect variables introduced within the procedure Prefix global variables with a lower case g and constants with a k. Input and Ouput Args/Vars can be prefixed with In, Out or INOUT. Variable naming conventions critical to program understanding See: http://www.rexxinfo.org/html/rexxinfo1.html#Rexx-Best-Practices I found Howard Fosdick s article to be helpful (he also has a book which is also informative)vPP>PFP^P>F  ^N l? F 0U=Possible Future EnhancementsUse the TMP for TSO=YES in place of the TSO Dynamic Environment Enables use of the CONSOLE Host Command Environment Enhance AXRWTO/AXRMLWTO Allow TSO=NO execs to be run as an operator command Operator command to cancel an exec B@4o@4p>Possible Future EnhancementsNew parmlib options Customization of default TIMEINT value (current default is 30 sec) Customization of the number of TSO=NO worker tasks and TSO=YES TSO Server address spaces Support for updating parmlib options without having to restart SYSREXX GG,/$Session SummarySystem REXX provides a gateway for new style applications to interface with z/OS components While the New Face matures, System REXX adds real value today through exploitation possibilities for operator assists and also certain system management processes We are keenly interested in your opinions and suggestions that will help to extend and mature this component Any Questions& ? .l~% AppendixCWeb Download Details Publication References SYSREXX Command Details&!Publication References)MVS Initialization & Tuning Reference SA22-7592 MVS System Commands SA22-7627 Authorized Assembler Services Guide SA22-7605 Authorized Assembler Services Reference Volume 1 SA22-7609 MVS System Codes SA22-7626 MVS Diagnosis: Tools and Service Aids GA22-7589 MVS System Messages Volume 3 SA22-7633L&P PP P$P P1P PP P&P PP P&    $  1      &    t4JSYSREXX Command 1 of 2KD   The STATUS sub-function results in a summary display of System REXX environmental information: time and date the AXR address space was started parmlib member/s used at startup command prefix used to identify console initiated REXX execs scope of the command prefix special userid against which SYSREXX requests may be invoked default timeout interval number of queued REXX execs requests REXX worker tasks available to process REXX execs Number of tasks actively processing requests Number of idle tasks Total number of tasks (active+idle) Maximum number of tasks that may be started Number of synchronous and asynchronous requests Number of untimed requests TSO server address spaces available to process REXX execs Number of address spaces actively processing requests Number of idle address spaces Total number of address spaces (active+idle) Maximum number of address spaces that may be started Number of synchronous and asynchronous requests Number of untimed requestsxcPXPP:PPcX  :   P h q u5JSYSREXX Command 2 of 2KD  q The DETAIL parameter causes detailed information about executing REXX execs to be displayed: name of the REXX exec requester Jobname and ASID type of request - TSO=N or TSO=Y time limit for the request unique request token associated with the request execution Jobname, ASID and TCB address for TSO=Y requests cpu seconds currently used current elapse time seconds<`ZZ_" >+4/3456 7 8 9 : ;<=>?@ABCDEIKLM O"P#Q$R%i0k2l3p4q5s6v7w8z:|;<=>?@ABEFGHIJKLMN E  <(        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxz{|}~~  s *`iP   i ~  s *i`   i H  0޽h ? xx-т___PPT10i.e=]+D=' = @B + N  <(  ~  s *`tP    ~  s *`    H  0޽h ? xx-т___PPT10i.e=]+D=' = @B + M  <(  ~  s *؊#P   # ~  s *L+`   # H  0޽h ? xx-т___PPT10i.e=]+D=' = @B +A 0  "(  d  c $ 4h   ~  s *9  )c   H  0Bhy ? 3380___PPT10.g`ĭg 0 SK (  d  c $ 4h   ?  s *WR  )c   System REXX keeps track of IRX (REXX) and IKJ (TSO) messages. In the event of a syntax error SYSREXX is able to return the message id corresponding to the syntax error, the line number and possibly other REXX/TSO issued messages. xxxx0828 Name: AXRExecSyntaxError Meaning: A syntax error or some other run time error was encountered during the execution of a REXX exec. Action: The REXX interpreter issues one or more error messages that indicate the offending line number. If RexxOutDsn is specified, look at the dataset for the message. If RexxOutDsn is not specified but ConsData is specified, look at the console or the system log. If RexxDiag is specified, AXRDIAG1 contains the number of the error which corresponds to an IRXnnnI message, AXRDIAG2 contains the line number where the error occurred and AXRDIAG3 and AXRDIAG4 contain the message ids of the last two IRX or IKJ messages that were issued before the exec completed. All of these values are in packed decimal format with the sign bits shifted out. A 1 in the high order byte distinguishes an IKJ message from an IRX message.  P t G "[nH  0Bhy ? 3380___PPT10.g`ĭr( V p^K0( h  v&rnorthru@us.ibm.com4mailto:rnorthru@us.ibm.com~http://www.rexxinfo.org/html/rexxinfo1.html#Rexx-Best-Practice5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab 33@8TZ ʚ;15ʚ;g4(d(d$0ppp@ <4ddddP0Hs g4dddd$0p pl<4BdBdP0Hs0___PPT10 ___PPT9RARg<B6 5?  O  =m0z/OS System REXX 1  Table of ContentsTrademarks Theme Session Objectives Overview Logical Overview Diagram Comparison of REXX & TSO Servers TSO/E Command Support Security & Enclave Considerations  Usage & Invocation Arguments & Variables Interaction & Dependencies Migration & Coexistence Considerations Installation Exploiting SYSREXX Best Practices Session Summary Appendix TrademarkspSee http://www.ibm.com/legal/copytrade.shtml for a list of trademarks. New trademarks: System REXXTM SYSREXXTM X(,   *!D  0- ThemeSimplification The role of SYSREXX in  New Face of z/OS is to provide an infrastructure through which REXX execs may be run outside the normal TSO/E or Batch environments, using a simple programming interface. This enables the leveraging of base operating system components by new style applications that will, over time, lead to simplified interaction and more intuitive system management capabilities on z/OS. The ability to initiate REXX execs directly from an operator console has been long overdue on z/OS and is a drag along benefit of this initiative. The possibilities for exploiting existing REXX code through the use of SYSREXX are vast, whether to provide operator assists or to provide routines that can be leveraged by new strategic initiatives.F" Session Objectives]Describe System REXX The Design Customization Getting Started Where to find more information(HH Overview *Problem Statement / Need Addressed: Required an Infrastructure to Support Web Based Initiatives interacting with z/OS Components New Face of z/OS z/OS Simplification & Management Solution: SYSREXX allows execs to be run simply & independently from traditional TSO/E & Batch Invocation uses a single program interface (AXREXX) Operator exploitation directly from a console Benefit: Enables rapid development & deployment of system programmer tools and operator assists Can be exploited by new & old style applications Health Checks may be written in REXX$P]PP!P PUPcP PP$]!   Uc    SYSREXX Logical Overview REXX Server vs TSO Server  REXX Server Execs run in AXR AS 1-64 Worker Subtasks EMCS for each subtask Detach after 100 execs Default HCE - MVS Recommend no Data Set Allocation here Availability impact if something serious breaksX ZZzZ0Z z0 *TSO Server Execs run in AXRnn AS 1-8 TSO Server Address Spaces EMCS for each AS Detach after 200 execs All Allocation capabilities Default HCE - TSO IKJTSOEV  Dynamic TSO environment SYSCALL supported Better availability should something serious break.. just cancel AXRnn ASn ZZvZ5ZJZ v5  Jd.!TSO/E Command Support 1 of 3"<TSO=YES requires an isolated address space to avail itself of TSO/E services and POSIX host commands authorized & jscbauth = 1 Address spaces called AXR01-08 within a dynamic TSO/E environment & ikjtsoev service TSO/E was modified to allow Sysrexx execs to invoke authorized commands PeqHeqH>rK%&J TSO/E Command Support 2 of 3!xTSO=Y Requests Run authorized & jscbauth = 1 in a separate address space & axr01-08 within a dynamic TSO/E environment & ikjtsoev service We restrict the number of commands that Sysrexx officially supports because the Dynamic TSO environment does not set up all the features of the Terminal Monitor Program (TMP) VZyZZZy> S1e/ TSO/E Command Support 3 of 3!*Problems Encountered: Some authorized commands do not tolerate a dynamic environment TSO/E control blocks are unavailable or incomplete CONSOLE host command environment is not supported Userid function does not return a valid userid In R11 (or with OA26802 applied), in most cases this has been corrected, but still would be in the case where the AXREXX invoker does not specify (or default to) a valid security environment. Link, Load, or Attach unauthorized modules & ABEND306 Resources not cleaned up, may influence subsequent execs Data sets left allocated are freed (but execs should clean up) Error handling paths that ABEND if error messages are issued ?33/o?>?33/  o?<," !Security & Enclave Considerations"AXREXX is an Authorized System Service Security Controls Essential Userid and Groupid Associations for SYSREXX Address Spaces Access to APF Library Permissions Standard security administration what can be accessed and/or run EXECs by default use Invoker s Security Environment Alternatively may use: Authority of a 3rd party  a surrogat Special userid which is assigned to AXRUSER EXECs use Invoker s Enclave service class Prevent CPU priority inversion & excessive resource usage Resource usage is charged back to invoker R'PP]P!P!PP4PPTP+PdPP ]!  !4    B    *  d$$((PNc0r3System REXX Address SpacesNSome Installation s Tightly Control Started Procedures Security Administrator must update the STARTED class profile and/or the Started Procedures Table (ICHRIN03) This assigns Userid and Group characteristics to these address spaces The AXR address space is System REXX Attach to Group for System address spaces Requires READ authority SYS1.PARMLIB & SYS1.SAXREXEC In R11 (or with OA26802 applied) - REXXLIB data sets :DVDV OUsage & Invocation 1 of 7PIQEasy way for Web Based Servers to run commands/functions & get back pertinent details Method for system and application components to exploit REXX parsing strengths Leverage REXX coding skills which are extensive & span all operating systems Faster development possibilities for new Health Checks Controlling RACF passwords and phrases QR OUsage & Invocation 2 of 7PI,Provision of simplified operator assist functions & quick fixes when necessary Exploitive possibilities by Customer code, IBM & ISV components & products SYSREXX is a Server Starts early during Master Scheduler Initialization No STOP capability but the AXR address space can be forced FORCE AXR,ARM |ZZZoZZZo OUsage & Invocation 3 of 7PIbNew Macro is AXREXX Caller must be authorized Two Modes of Execution TSO=NO Limited Data Set Support TSO=YES Full Data Set Support Permitted Three Operations are supported REQUEST=EXECUTE | CANCEL| | GETREXXLIB Arguments & Variables are used to pass input to and receive output from the REXX exec Parameter List is mapped by the AXRZARG macrov1R(1R( OUsage & Invocation 4 of 7PIDNew Macro is AXREXX continued Data Types supported: Input is converted to strings Output is returned as signed/unsigned, char, binary, hex Security Environment of Requester is used by default Can be changed with SECURITY= keyword Service Classification using Requester s enclave Time Limitations are Applied to Execs Default is 30 seconds Cancellation of REXX Exec using API OREQTOKEN parameter with REQUEST=CANCEL W5&1'$) W5&0    '  $)OUsage & Invocation 5 of 6PIOperator Command Support Detected by System REXX SSI Listener Uses a customizable Command Prefix (cpf) Administrative Support cpfSYSREXX STATUS[,DETAIL] cpfSYSREXX REXXLIB Seamless operator interface for REXX execs cpfRexxExecName Arg1 Arg2 & Argn REXX Execs Read From SYS1.SAXREXEC Or other data set in REXXLIB Concatenation (R11 or OA28602 applied) 8Z%Z)ZZ0Z,Z!Z#ZDZZ%$   ,   #Dbb  7 iOUsage & Invocation 6 of 7PIOriginally three SYSREXX Functions were provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console l2ZZ7ZZ,Z Z/Z2 OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console v&7, /&>i OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console N&&>36 OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console @&&o8 OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console @&&o8 y6OUsage & Invocation 7 of 7PITwo additional ones were added in R11 (or OA26802 ): AXRWAIT Waits for a specified number of seconds Similar to SLEEP host command (available in TSO=YES environment) AXRINFO Obtains environmental information 5j $5j "n1EConsole Interface for REXX Execs 1 of 4 $F>The Console Interface is the MODIFY AXR command Can be replaced by the CPF value defined in AXR00 Provides a seamless operator interface for REXX execs MODIFY AXR,[,TIMEINT= ] cpf ] REXX execs are run with the AXREXX macro CONSDATA keyword in effect AXRWTO and AXRMLWTO functions send messages to the invoking console as command responses126aDY1265)DY  >!o2DConsole Interface for REXX Execs 2 of 4E>Command Authority determines which commands may be entered from a console. A userid logging onto a console has all permissions associated with the userid Console initiated REXX Execs run TSO=YES A blank separates arguments from one another and from the other command keywords The is a CHAR string consisting of the remainder of the command line SAY, TRACE and REXX messages are directed to the invoking console as multi-line message AXR0500I{7DConsole Interface for REXX Execs 3 of 4E>AXRUSER has NOTHING to do with the Console Interface for REXX Execs Common misconception Security environment is that of the user logged onto the console MVS.SYSREXX.EXECUTE. Resource used to determine whether the invoker is authorized to execute the exec MVS.SYSREXX. Resource used to determine whether the invoker is authorized to issue F AXR,SYSREXX STATUS and other MODIFY AXR commandstDWR yDWR y  :DConsole Interface for REXX Execs 4 of 4E>MODIFY AXR,SYREXX STATUS Provides overall status of System REXX MODIFY AXR,SYSREXX STATUS,DETAIL Provides detailed information about actively running execs MODIFY AXR,SYSREXX REXXLIB (R11 or OA28602 installed) Displays the REXXLIB concatenation'!<7#'!<  7  #  Arguments & VariablesUp to 20 ARGs and 256 VARs are Supported Caller specifies the data type of the ARG/VAR, the name of the ARG/VAR and whether it is input, output or both Signed/Unsigned 32 or 64 bit, CHAR String, BIT String, and HEX String Types are supported If the ARG/VAR is input, System REXX will convert the data type to a character string and set the ARG/VAR prior to exec invocation If the ARG/VAR is output, System REXX will obtain the final value of the ARG/VAR, convert it into the specified data type and copy it into the AXREXX invokers storage AXRZARG macro provides the ARG/VAR list mapping Special Variables set by AXR on input to the exec AXRREQTOKEN 32 Hex Request Token AXRINDD 8 Char If RexxInDsn Specified AXROUTDD 8 Char If RexxOutDsn Specified P[PZPP2PP[\2, ,  bAAXRZARG Mapping Macro BA cAAXRZARG Mapping Macro BAInteractions & Dependencies6Hardware Dependencies None Software Dependencies To Process Compiled REXX Code IBM Library for REXX on zSeries OR IBM Library for REXX on zSeries Alternate Library Exploiters CIM Server .. Cluster Instrumentation Health Checker Security Server (RACF) Open to exploitation by IBM, ISV and Customer Code\ \  ,g#XInstallation 1 of 5 $YQNo Installation Requirements on z/OS V1 R9 Install OA26802 (no need if running z/OS V1 R11 or higher) SYSREXX is a new BCP Component .. 5752SCAXR All Cross-Component Dependencies Included In Base Implementation & Customization Easy & Straightforward Reference Publications Authorized Assembler Services Guide .. SA22-7605 Starting SYSREXX Requires Ability to read SYS1.PARMLIB Parmlib member CTIAXR00 Ability to read SYS1.SAXREXEC (and the REXXLIB)+PPP.P6PPfP+.6  f XInstallation 2 of 5 $YQ" Parmlib Support SYSREXX Customization: AXR00 In R11 (or with OA28602 installed) IEASYSxx can specify an AXRxx parmlib concatenation AXR=(xx,yy,& ) First valid instance of option used CPF( cpfvalue ,SYSTEM|SYSPLEX) AXRUSER(userid) Optional with APAR OA22146 applied 4X22#X  2  #33tS(,}8XInstallation 3 of 5 $YQR Parmlib Support (continued) REXXLIB support (R11 or OA28602 installed) Up to 255 data sets are supported SYS1.SAXREXEC concatenated as the last data set unless specified Data sets must have the same characteristics as SYS1.SAXREXEC (i.e. variable length records of size 255) Component Trace (SYSAXR): CTIAXRxx Defaults to ERROR tracing ZZ+ZZ$ZZZ+$  /~9XInstallation 4 of 5 $YQ Proclib Support SYSREXX is restarted using procedure AXRPSTRT S AXRPSTRT Uses AXR00 for start parms S AXRPSTRT,AXR=(xx,yy& ) - in R11 or OA28602 installed REXX LIBRARY/REXX ALTERNATE LIBRARY Must be set up to run any compiled exec . 7$(.   7$(33>Wo!WInstallation 5 of 5XQParmlib & Proclib Members Copy member AXR00 from SAMPLIB to PARMLIB Customize AXR00 Choose a Command Prefix CPF( @ ,SYSTEM) If required setup a surrogat userid that SYSREXX may use AXRUSER(SYS1) On R11 or with OA28602 installed set up REXXLIB On R11 or with OA28602 installed set up IEASYSxx and specify multiple AXRxx members CTRACE member is CTIAXR00 Restart AXR using the AXRPSTRT procedure ::1::    1P O#Exploiting SYSREXXnCustomer Validation Is Critical Implement automation tasks that could be carried out from SYSREXX: Perhaps launch from exits Implement operator assists that could be launched from the console via SYSREXX Implement health checks in SYSREXX Reference Session 2815 from Orlando SHARE Proceedings  z/OS 1.9: Health Checker Update and User Experiences with System REXX Checks http://ew.share.org/proceedingmod/abstract.cfm?abstract_id=17633  Cr7 Cr7  O@}3AExploiting SYSREXXInvocation from the AXREXX macro SAY/TRACE output goes to the output data set specified by REXXOUTDSN on the AXREXX invocation If not specified output goes to the console specified by CONSDATA (this is the invoking console when the exec is initiated from an operator console) If CONSDATA is not specified, SAY/TRACE output is dropped AXRWTO/AXRMLWTO output goes to the Console specified by CONSDATA. Goes to the System Log if CONSDATA is not specified !_:z!_: zgExploiting SYSREXXInvocation from the AXREXX macro Errors converted into return/reason codes More info is needed to debug problems REXX communicates with messages NOT codes Use of REXXDIAG keyword essential for SYNC=YES System REXX processing interrogates REXX messages and returns REXX and TSO message ids In the case of a Syntax/Run-time error, returns the line where the error occurred Contents of REXXDIAG are reason code specific !*P0!*P0  BExploiting SYSREXXInvocation from the AXREXX macro Diagnostics when failing to process an input/output argument or variable For example, in the REXXVARS AXREXX parm, MyVar is an output variable of type AXRARGTypeUnSigned, but the variable contains non-numeric data Bad argument/variable number is stored in AXRARGLstEntryInError SYNC=YES option will suspend invoker until exec completes Do not use if the invoker cannot tolerate a delay (e.g. in an MPF exit) !I:H!I:H     PWaExploiting SYSREXXSample invocation of AXREXX macro Takes a jobname as input and issues the DISPLAY JOBS command to obtain the ASTE address of the job Typical of some applications that have been written in support of z/OSMF Invoke a command to fetch some piece of data to return to the invoker Many execs also invoke utility programs to obtain data in other ways e.g. generating data sets For example EREP can easily be invoked from an exec to format SYS1.LOGREGbIF_JIF_J  *eP_`T\ W] [^ C Common ErrorszFailure to correctly set up the REXX Run Time Library or the Alternate Library Causes failure to run compiled REXX execs Return/reason code 0C/xxxx0C08, message IRX0157E Performance issues Service class of AXR or AXRnn address spaces not set up properly (Discretionary  should be privileged) Parent task monitoring exec has much lower priority than subtask running exec (priority inversion) Causes failure to apply time limit or Cancel execs O[3O[3  ;QBest Practices 1 of 4RJ?Execs should free any obtained resources Since AXREXX is an authorized API, a level of trust is assumed since the REXX environments are reused unless the request fails (AXREXX non-zero retcode) For TSO=YES requests, SYSREXX detects data sets left allocated by the exec and deallocates them Negative performance impact Use Signal Handles: NOVALUE, SYNTAX, HALT Return the value of SIGL and the return code to the AXREXX invoker Provide a consistent diagnostic strategy Pass back return codes and reason codes of the failing API to the AXREXX invoker and any relevant messages)ZZZ*ZCZ)ZkZ)*C  )j,Q $dQBest Practices 2 of 4RJAlways specify the DIAG parm on AXREXX invocations Provides valuable diagnostic info Provide an argument to the exec to run with some level of REXX tracing active Specify RexxOutDsn or CONSDATA on AXREXX invocation to provide a destination for the trace output ^3"Nb3"Nd, RfQBest Practices 3 of 4RJCreate a REXXLIB concatenation and do NOT modify SYS1.SAXREXEC Ensure your exec names do not start with the letters A-I Use the TSO=NO environment if possible Benefits  Use of a shared address space Downside  NO TSO Host commands, NO SYSCALL (POSIX) Host commands. Single point of failure  a serious problem could cause a disruption to the AXREXX service @Z9Z'ZpZ\ZZZ@9'p\  <QBest Practices 4 of 4RJCoding conventions Use PROCEDURE/EXPOSE to ensure that changes made by a procedure only affect variables introduced within the procedure Prefix global variables with a lower case g and constants with a k. Input and Ouput Args/Vars can be prefixed with In, Out or INOUT. Variable naming conventions critical to program understanding See: http://www.rexxinfo.org/html/rexxinfo1.html#Rexx-Best-Practices I found Howard Fosdick s article to be helpful (he also has a book which is also informative)vPP>PFP^P>F  ^N l? F 0U=Possible Future EnhancementsUse the TMP for TSO=YES in place of the TSO Dynamic Environment Enables use of the CONSOLE Host Command Environment Enhance AXRWTO/AXRMLWTO Allow TSO=NO execs to be run as an operator command Operator command to cancel an exec B@4o@4p>Possible Future EnhancementsNew parmlib options Customization of default TIMEINT value (current default is 30 sec) Customization of the number of TSO=NO worker tasks and TSO=YES TSO Server address spaces Support for updating parmlib options without having to restart SYSREXX GG,/$Session SummarySystem REXX provides a gateway for new style applications to interface with z/OS components While the New Face matures, System REXX adds real value today through exploitation possibilities for operator assists and also certain system management processes We are keenly interested in your opinions and suggestions that will help to extend and mature this component Any Questions& ? .l~% AppendixCWeb Download Details Publication References SYSREXX Command Details&!Publication References)MVS Initialization & Tuning Reference SA22-7592 MVS System Commands SA22-7627 Authorized Assembler Services Guide SA22-7605 Authorized Assembler Services Reference Volume 1 SA22-7609 MVS System Codes SA22-7626 MVS Diagnosis: Tools and Service Aids GA22-7589 MVS System Messages Volume 3 SA22-7633L&P PP P$P P1P PP P&P PP P&    $  1      &    t4JSYSREXX Command 1 of 2KD   The STATUS sub-function results in a summary display of System REXX environmental information: time and date the AXR address space was started parmlib member/s used at startup command prefix used to identify console initiated REXX execs scope of the command prefix special userid against which SYSREXX requests may be invoked default timeout interval number of queued REXX execs requests REXX worker tasks available to process REXX execs Number of tasks actively processing requests Number of idle tasks Total number of tasks (active+idle) Maximum number of tasks that may be started Number of synchronous and asynchronous requests Number of untimed requests TSO server address spaces available to process REXX execs Number of address spaces actively processing requests Number of idle address spaces Total number of address spaces (active+idle) Maximum number of address spaces that may be started Number of synchronous and asynchronous requests Number of untimed requestsxcPXPP:PPcX  :   P h q u5JSYSREXX Command 2 of 2KD  q The DETAIL parameter causes detailed information about executing REXX execs to be displayed: name of the REXX exec requester Jobname and ASID type of request - TSO=N or TSO=Y time limit for the request unique request token associated with the request execution Jobname, ASID and TCB address for TSO=Y requests cpu seconds currently used current elapse time seconds<`ZZ_" >+4/3456 7 8 9 : ;<=>?@ABCDEIKLM O"P#Q$R%i0k2l3p4q5s6v7w8z:|;<=>?@ABEFGHIJKLMNr{qE( h   v&rnorthru@us.ibm.com4mailto:rnorthru@us.ibm.com~http://www.rexxinfo.org/html/rexxinfo1.html#Rexx-Best-PracticesVhttp://www.rexxinfo.org/html/rexxinfo1.html0&Rexx-Best-Practices,/ 0`DArialNew t MQ0 0DWingdingst MQ0 0 DTimesngst MQ0 0 0DImpactgst MQ0 0"@DTrebuchet MSt MQ0 0"PDCourier Newt MQ0 01`DCordia Newt MQ0 0"pDTimes New Roman MQ0 0 B(.  @n?" dd@  @@`` 6.P z  /k !"#$%&'()*+,-./0123456789@ADEFGHILMNOPQRS l o prsutwxyz|{}~R$0#„9Dܷz^R$Q_j)9H A*RR$)#1D'2]R$R$NaRA G r$ԑ]>]Fir$%3àRHM;"i"R$v! )NX R$qܣ!h=;h jjjj     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab 33@8TZ ʚ;15ʚ;g4(d(d$0ppp@ <4ddddP0t g4dddd$0p pl<4BdBdP0t 0___PPT10 ___PPT9RARg6B6 5?  O  =ç0z/OS System REXX 1  Table of ContentsTrademarks Theme Session Objectives Overview Logical Overview Diagram Comparison of REXX & TSO Servers TSO/E Command Support Security & Enclave Considerations  Usage & Invocation Arguments & Variables Interaction & Dependencies Migration & Coexistence Considerations Installation Exploiting SYSREXX Best Practices Session Summary Appendix TrademarkspSee http://www.ibm.com/legal/copytrade.shtml for a list of trademarks. New trademarks: System REXXTM SYSREXXTM X(,   *!D  0- ThemeSimplification The role of SYSREXX in  New Face of z/OS is to provide an infrastructure through which REXX execs may be run outside the normal TSO/E or Batch environments, using a simple programming interface. This enables the leveraging of base operating system components by new style applications that will, over time, lead to simplified interaction and more intuitive system management capabilities on z/OS. The ability to initiate REXX execs directly from an operator console has been long overdue on z/OS and is a drag along benefit of this initiative. The possibilities for exploiting existing REXX code through the use of SYSREXX are vast, whether to provide operator assists or to provide routines that can be leveraged by new strategic initiatives.F" Session Objectives]Describe System REXX The Design Customization Getting Started Where to find more information(HH Overview *Problem Statement / Need Addressed: Required an Infrastructure to Support Web Based Initiatives interacting with z/OS Components New Face of z/OS z/OS Simplification & Management Solution: SYSREXX allows execs to be run simply & independently from traditional TSO/E & Batch Invocation uses a single program interface (AXREXX) Operator exploitation directly from a console Benefit: Enables rapid development & deployment of system programmer tools and operator assists Can be exploited by new & old style applications Health Checks may be written in REXX$P]PP!P PUPcP PP$]!   Uc    SYSREXX Logical Overview REXX Server vs TSO Server  REXX Server Execs run in AXR AS 1-64 Worker Subtasks EMCS for each subtask Detach after 100 execs Default HCE - MVS Recommend no Data Set Allocation here Availability impact if something serious breaksX ZZzZ0Z z0 *TSO Server Execs run in AXRnn AS 1-8 TSO Server Address Spaces EMCS for each AS Detach after 200 execs All Allocation capabilities Default HCE - TSO IKJTSOEV  Dynamic TSO environment SYSCALL supported Better availability should something serious break.. just cancel AXRnn ASn ZZvZ5ZJZ v5  Jd.!TSO/E Command Support 1 of 3"<TSO=YES requires an isolated address space to avail itself of TSO/E services and POSIX host commands authorized & jscbauth = 1 Address spaces called AXR01-08 within a dynamic TSO/E environment & ikjtsoev service TSO/E was modified to allow Sysrexx execs to invoke authorized commands PeqHeqH>rK%&J TSO/E Command Support 2 of 3!xTSO=Y Requests Run authorized & jscbauth = 1 in a separate address space & axr01-08 within a dynamic TSO/E environment & ikjtsoev service We restrict the number of commands that Sysrexx officially supports because the Dynamic TSO environment does not set up all the features of the Terminal Monitor Program (TMP) VZyZZZy> S1e/ TSO/E Command Support 3 of 3!Problems Encountered: Some authorized commands do not tolerate a dynamic environment TSO/E control blocks are unavailable or incomplete CONSOLE host command environment is not supported Userid function does not return a valid userid In R11 (or with OA26802 applied), in most cases this has been corrected, but still would be in the case where the AXREXX invoker does not specify (or default to) a valid security environment. Link, Load, or Attach unauthorized modules & ABEND306 Resources not cleaned up, may influence subsequent execs Data sets left allocated are freed (but execs should clean up)?33/o??33/  o?,"o !Security & Enclave Considerations"AXREXX is an Authorized System Service Security Controls Essential Userid and Groupid Associations for SYSREXX Address Spaces Access to APF Library Permissions Standard security administration what can be accessed and/or run EXECs by default use Invoker s Security Environment Alternatively may use: Authority of a 3rd party  a surrogat Special userid which is assigned to AXRUSER EXECs use Invoker s Enclave service class Prevent CPU priority inversion & excessive resource usage Resource usage is charged back to invoker R'PP]P!P!PP4PPTP+PdPP ]!  !4    B    *  d$$((PNc0r3System REXX Address SpacesNSome Installation s Tightly Control Started Procedures Security Administrator must update the STARTED class profile and/or the Started Procedures Table (ICHRIN03) This assigns Userid and Group characteristics to these address spaces The AXR address space is System REXX Attach to Group for System address spaces Requires READ authority SYS1.PARMLIB & SYS1.SAXREXEC In R11 (or with OA26802 applied) - REXXLIB data sets :DVDV OUsage & Invocation 1 of 7PIQEasy way for Web Based Servers to run commands/functions & get back pertinent details Method for system and application components to exploit REXX parsing strengths Leverage REXX coding skills which are extensive & span all operating systems Faster development possibilities for new Health Checks Controlling RACF passwords and phrases QR OUsage & Invocation 2 of 7PI,Provision of simplified operator assist functions & quick fixes when necessary Exploitive possibilities by Customer code, IBM & ISV components & products SYSREXX is a Server Starts early during Master Scheduler Initialization No STOP capability but the AXR address space can be forced FORCE AXR,ARM |ZZZoZZZo OUsage & Invocation 3 of 7PIbNew Macro is AXREXX Caller must be authorized Two Modes of Execution TSO=NO Limited Data Set Support TSO=YES Full Data Set Support Permitted Three Operations are supported REQUEST=EXECUTE | CANCEL| | GETREXXLIB Arguments & Variables are used to pass input to and receive output from the REXX exec Parameter List is mapped by the AXRZARG macrov1R(1R( OUsage & Invocation 4 of 7PIDNew Macro is AXREXX continued Data Types supported: Input is converted to strings Output is returned as signed/unsigned, char, binary, hex Security Environment of Requester is used by default Can be changed with SECURITY= keyword Service Classification using Requester s enclave Time Limitations are Applied to Execs Default is 30 seconds Cancellation of REXX Exec using API OREQTOKEN parameter with REQUEST=CANCEL W5&1'$) W5&0    '  $)OUsage & Invocation 5 of 6PIOperator Command Support Detected by System REXX SSI Listener Uses a customizable Command Prefix (cpf) Administrative Support cpfSYSREXX STATUS[,DETAIL] cpfSYSREXX REXXLIB Seamless operator interface for REXX execs cpfRexxExecName Arg1 Arg2 & Argn REXX Execs Read From SYS1.SAXREXEC Or other data set in REXXLIB Concatenation (R11 or OA28602 applied) 8Z%Z)ZZ0Z,Z!Z#ZDZZ%$   ,   #Dbb  7 iOUsage & Invocation 6 of 7PIOriginally three SYSREXX Functions were provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console l2ZZ7ZZ,Z Z/Z2 OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console v&7, /&>i OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console N&&>36 OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console @&&o8 OUsage & Invocation 6 of 7PIThree SYSREXX Functions are provided: AXRCMD Issue a console command and return command responses AXRWTO Issue a single line message to a console AXRMLWTO Issue a multiline line message to a console @&&o8 y6OUsage & Invocation 7 of 7PITwo additional ones were added in R11 (or OA26802 ): AXRWAIT Waits for a specified number of seconds Similar to SLEEP host command (available in TSO=YES environment) AXRINFO Obtains environmental information 5j $5j "n1EConsole Interface for REXX Execs 1 of 4 $F>The Console Interface is the MODIFY AXR command Can be replaced by the CPF value defined in AXR00 Provides a seamless operator interface for REXX execs MODIFY AXR,[,TIMEINT= ] cpf ] REXX execs are run with the AXREXX macro CONSDATA keyword in effect AXRWTO and AXRMLWTO functions send messages to the invoking console as command responses126aDY1265)DY  >!o2DConsole Interface for REXX Execs 2 of 4E>Command Authority determines which commands may be entered from a console. A userid logging onto a console has all permissions associated with the userid Console initiated REXX Execs run TSO=YES A blank separates arguments from one another and from the other command keywords The is a CHAR string consisting of the remainder of the command line SAY, TRACE and REXX messages are directed to the invoking console as multi-line message AXR0500I{7DConsole Interface for REXX Execs 3 of 4E>AXRUSER has NOTHING to do with the Console Interface for REXX Execs Common misconception Security environment is that of the user logged onto the console MVS.SYSREXX.EXECUTE. Resource used to determine whether the invoker is authorized to execute the exec MVS.SYSREXX. Resource used to determine whether the invoker is authorized to issue F AXR,SYSREXX STATUS and other MODIFY AXR commandstDWR yDWR y  :DConsole Interface for REXX Execs 4 of 4E>MODIFY AXR,SYREXX STATUS Provides overall status of System REXX MODIFY AXR,SYSREXX STATUS,DETAIL Provides detailed information about actively running execs MODIFY AXR,SYSREXX REXXLIB (R11 or OA28602 installed) Displays the REXXLIB concatenation'!<7#'!<  7  #  Arguments & VariablesUp to 20 ARGs and 256 VARs are Supported Caller specifies the data type of the ARG/VAR, the name of the ARG/VAR and whether it is input, output or both Signed/Unsigned 32 or 64 bit, CHAR String, BIT String, and HEX String Types are supported If the ARG/VAR is input, System REXX will convert the data type to a character string and set the ARG/VAR prior to exec invocation If the ARG/VAR is output, System REXX will obtain the final value of the ARG/VAR, convert it into the specified data type and copy it into the AXREXX invokers storage AXRZARG macro provides the ARG/VAR list mapping Special Variables set by AXR on input to the exec AXRREQTOKEN 32 Hex Request Token AXRINDD 8 Char If RexxInDsn Specified AXROUTDD 8 Char If RexxOutDsn Specified P[PZPP2PP[\2, ,  bAAXRZARG Mapping Macro BA cAAXRZARG Mapping Macro BAInteractions & Dependencies6Hardware Dependencies None Software Dependencies To Process Compiled REXX Code IBM Library for REXX on zSeries OR IBM Library for REXX on zSeries Alternate Library Exploiters CIM Server .. Cluster Instrumentation Health Checker Security Server (RACF) Open to exploitation by IBM, ISV and Customer Code\ \  ,g#XInstallation 1 of 5 $YQNo Installation Requirements on z/OS V1 R9 Install OA26802 (no need if running z/OS V1 R11 or higher) SYSREXX is a new BCP Component .. 5752SCAXR All Cross-Component Dependencies Included In Base Implementation & Customization Easy & Straightforward Reference Publications Authorized Assembler Services Guide .. SA22-7605 Starting SYSREXX Requires Ability to read SYS1.PARMLIB Parmlib member CTIAXR00 Ability to read SYS1.SAXREXEC (and the REXXLIB)+PPP.P6PPfP+.6  f XInstallation 2 of 5 $YQ" Parmlib Support SYSREXX Customization: AXR00 In R11 (or with OA28602 installed) IEASYSxx can specify an AXRxx parmlib concatenation AXR=(xx,yy,& ) First valid instance of option used CPF( cpfvalue ,SYSTEM|SYSPLEX) AXRUSER(userid) Optional with APAR OA22146 applied 4X22#X  2  #33tS(,}8XInstallation 3 of 5 $YQR Parmlib Support (continued) REXXLIB support (R11 or OA28602 installed) Up to 255 data sets are supported SYS1.SAXREXEC concatenated as the last data set unless specified Data sets must have the same characteristics as SYS1.SAXREXEC (i.e. variable length records of size 255) Component Trace (SYSAXR): CTIAXRxx Defaults to ERROR tracing ZZ+ZZ$ZZZ+$  /~9XInstallation 4 of 5 $YQ Proclib Support SYSREXX is restarted using procedure AXRPSTRT S AXRPSTRT Uses AXR00 for start parms S AXRPSTRT,AXR=(xx,yy& ) - in R11 or OA28602 installed REXX LIBRARY/REXX ALTERNATE LIBRARY Must be set up to run any compiled exec . 7$(.   7$(33>Wo!WInstallation 5 of 5XQParmlib & Proclib Members Copy member AXR00 from SAMPLIB to PARMLIB Customize AXR00 Choose a Command Prefix CPF( @ ,SYSTEM) If required setup a surrogat userid that SYSREXX may use AXRUSER(SYS1) On R11 or with OA28602 installed set up REXXLIB On R11 or with OA28602 installed set up IEASYSxx and specify multiple AXRxx members CTRACE member is CTIAXR00 Restart AXR using the AXRPSTRT procedure ::1::    1P O#Exploiting SYSREXXnCustomer Validation Is Critical Implement automation tasks that could be carried out from SYSREXX: Perhaps launch from exits Implement operator assists that could be launched from the console via SYSREXX Implement health checks in SYSREXX Reference Session 2815 from Orlando SHARE Proceedings  z/OS 1.9: Health Checker Update and User Experiences with System REXX Checks http://ew.share.org/proceedingmod/abstract.cfm?abstract_id=17633  Cr7 Cr7  O@}3AExploiting SYSREXXInvocation from the AXREXX macro SAY/TRACE output goes to the output data set specified by REXXOUTDSN on the AXREXX invocation If not specified output goes to the console specified by CONSDATA (this is the invoking console when the exec is initiated from an operator console) If CONSDATA is not specified, SAY/TRACE output is dropped AXRWTO/AXRMLWTO output goes to the Console specified by CONSDATA. Goes to the System Log if CONSDATA is not specified !_:z!_: zgExploiting SYSREXXInvocation from the AXREXX macro Errors converted into return/reason codes More info is needed to debug problems REXX communicates with messages NOT codes Use of REXXDIAG keyword essential for SYNC=YES System REXX processing interrogates REXX messages and returns REXX and TSO message ids In the case of a Syntax/Run-time error, returns the line where the error occurred Contents of REXXDIAG are reason code specific !*P0!*P0  BExploiting SYSREXXInvocation from the AXREXX macro Diagnostics when failing to process an input/output argument or variable For example, in the REXXVARS AXREXX parm, MyVar is an output variable of type AXRARGTypeUnSigned, but the variable contains non-numeric data Bad argument/variable number is stored in AXRARGLstEntryInError SYNC=YES option will suspend invoker until exec completes Do not use if the invoker cannot tolerate a delay (e.g. in an MPF exit) !I:H!I:H     PWaExploiting SYSREXXSample invocation of AXREXX macro Takes a jobname as input and issues the DISPLAY JOBS command to obtain the ASTE address of the job Typical of some applications that have been written in support of z/OSMF Invoke a command to fetch some piece of data to return to the invoker Many execs also invoke utility programs to obtain data in other ways e.g. generating data sets For example EREP can easily be invoked from an exec to format SYS1.LOGREGbIF_JIF_J  *eP_`T\ W] [^ C Common ErrorszFailure to correctly set up the REXX Run Time Library or the Alternate Library Causes failure to run compiled REXX execs Return/reason code 0C/xxxx0C08, message IRX0157E Performance issues Service class of AXR or AXRnn address spaces not set up properly (Discretionary  should be privileged) Parent task monitoring exec has much lower priority than subtask running exec (priority inversion) Causes failure to apply time limit or Cancel execs O[3O[3  ;QBest Practices 1 of 4RJ?Execs should free any obtained resources Since AXREXX is an authorized API, a level of trust is assumed since the REXX environments are reused unless the request fails (AXREXX non-zero retcode) For TSO=YES requests, SYSREXX detects data sets left allocated by the exec and deallocates them Negative performance impact Use Signal Handles: NOVALUE, SYNTAX, HALT Return the value of SIGL and the return code to the AXREXX invoker Provide a consistent diagnostic strategy Pass back return codes and reason codes of the failing API to the AXREXX invoker and any relevant messages)ZZZ*ZCZ)ZkZ)*C  )k,Q $dQBest Practices 2 of 4RJAlways specify the DIAG parm on AXREXX invocations Provides valuable diagnostic info Provide an argument to the exec to run with some level of REXX tracing active Specify RexxOutDsn or CONSDATA on AXREXX invocation to provide a destination for the trace output X3"Nb3"Nd, RfQBest Practices 3 of 4RJCreate a REXXLIB concatenation and do NOT modify SYS1.SAXREXEC Ensure your exec names do not start with the letters A-I Use the TSO=NO environment if possible Benefits  Use of a shared address space Downside  NO TSO Host commands, NO SYSCALL (POSIX) Host commands. Single point of failure  a serious problem could cause a disruption to the AXREXX service @Z9Z'ZpZ\ZZZ@9'p\  <QBest Practices 4 of 4RJCoding conventions Use PROCEDURE/EXPOSE to ensure that changes made by a procedure only affect variables introduced within the procedure Prefix global variables with a lower case g and constants with a k. Input and Ouput Args/Vars can be prefixed with In, Out or INOUT. Variable naming conventions critical to program understanding See: http://www.rexxinfo.org/html/rexxinfo1.html#Rexx-Best-Practices I found Howard Fosdick s article to be helpful (he also has a book which is also informative)vPP>PFP^P>F  ^N l? F 0U=Possible Future EnhancementsUse the TMP for TSO=YES in place of the TSO Dynamic Environment Enables use of the CONSOLE Host Command Environment Enhance AXRWTO/AXRMLWTO Allow TSO=NO execs to be run as an operator command Operator command to cancel an exec B@4o@4p>Possible Future EnhancementsNew parmlib options Customization of default TIMEINT value (current default is 30 sec) Customization of the number of TSO=NO worker tasks and TSO=YES TSO Server address spaces Support for updating parmlib options without having to restart SYSREXX GG,/$Session SummarySystem REXX provides a gateway for new style applications to interface with z/OS components While the New Face matures, System REXX adds real value today through exploitation possibilities for operator assists and also certain system management processes We are keenly interested in your opinions and suggestions that will help to extend and mature this component Any Questions& ? .l~% Appendix/ Publication References SYSREXX Command Details/0&!Publication References)MVS Initialization & Tuning Reference SA22-7592 MVS System Commands SA22-7627 Authorized Assembler Services Guide SA22-7605 Authorized Assembler Services Reference Volume 1 SA22-7609 MVS System Codes SA22-7626 MVS Diagnosis: Tools and Service Aids GA22-7589 MVS System Messages Volume 3 SA22-7633L&P PP P$P P1P PP P&P PP P&    $  1      &    t4JSYSREXX Command 1 of 2KD   The STATUS sub-function results in a summary display of System REXX environmental information: time and date the AXR address space was started parmlib member/s used at startup command prefix used to identify console initiated REXX execs scope of the command prefix special userid against which SYSREXX requests may be invoked default timeout interval number of queued REXX execs requests REXX worker tasks available to process REXX execs Number of tasks actively processing requests Number of idle tasks Total number of tasks (active+idle) Maximum number of tasks that may be started Number of synchronous and asynchronous requests Number of untimed requests TSO server address spaces available to process REXX execs Number of address spaces actively processing requests Number of idle address spaces Total number of address spaces (active+idle) Maximum number of address spaces that may be started Number of synchronous and asynchronous requests Number of untimed requestsxcPXPP:PPcX  :   P h q u5JSYSREXX Command 2 of 2KD  q The DETAIL parameter causes detailed information about executing REXX execs to be displayed: name of the REXX exec requester Jobname and ASID type of request - TSO=N or TSO=Y time limit for the request unique request token associated with the request execution Jobname, ASID and TCB address for TSO=Y requests cpu seconds currently used current elapse time seconds<`ZZ_" >+4/3456 7 8 9 : ;<=>?@ABCDEIKLM O"P#Q$R%i0k2l3p4q5s6v7w8z:|;<=>?@ABEFGHIJKLMN 3 *(  r  S ,QUP   U x  c $WU`   U H  0޽h ? xx-т___PPT10i.ށ"+D=' = @B + $ @<(  @~ @ s *