%!PS (but not EPSF because of memory limits) %%Creator: dvips by Radical Eye Software %%Title: usenix90t.dvi %%Pages: 10 1 %%BoundingBox: 0 0 612 792 %%EndComments %%BeginDocument: tex.pro /TeXDict 200 dict def TeXDict begin /bdf{bind def}def /bop-aux{}bdf /@rigin{ /@page-height exch def /@page-width exch def 72 Resolution div dup neg scale translate}bdf /@letter{Resolution dup -10 mul 8.5 11 @rigin}bdf /@landscape{[ 0 1 -1 0 0 0]concat Resolution dup 8.5 11 @rigin}bdf /@a4{Resolution dup -10.6929133858 mul 21 2.54 div 29.7 2.54 div @rigin}bdf /@legal{Resolution dup -13 mul 8.5 14 @rigin}bdf /@11x17{statusdict /11x17tray known{statusdict begin 11x17tray end}if Resolution dup -16 mul 11 17 @rigin}bdf /@manualfeed{ statusdict /manualfeed true put}bdf /@copies{/#copies exch def}bdf /@draft{ /bop-aux{gsave initmatrix 72 dup scale @page-width 2 div @page-height 2 div translate @page-height @page-width atan rotate /Helvetica-Bold findfont 2 scalefont setfont(DRAFT)dup stringwidth pop 2 div neg -1 moveto .95 setgray show grestore}bdf}bdf /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 0 0]def /dmystr(ZZf@@@)def /newname{dmystr cvn}bdf /df{/fontname exch def dmystr 2 fontname cvx(@@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 256 array def /BuildChar{CharBuilder}def /Encoding IdentityEncoding def end fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 6 string copy cvn cvx put}bdf /dfe{newname dup load definefont setfont}bdf /ch-image{ ch-data 0 get}bdf /ch-width{ch-data 1 get}bdf /ch-height{ch-data 2 get}bdf /ch-xoff{ch-data 3 get}bdf /ch-yoff{ch-data 4 get}bdf /ch-dx{ch-data 5 get} bdf /CharBuilder{save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{ch-dx 0 ch-xoff ch-yoff neg ch-xoff ch-width add ch-height ch-yoff sub setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-height ch-yoff sub .1 add]{ch-image}imagemask}if restore}bdf /dc{/ch-code exch def /ch-data exch def newname load /BitMaps get ch-code ch-data put}bdf /bop{gsave /SaveImage save def /bop-aux load exec 0 0 moveto}bdf /eop{clear SaveImage restore showpage grestore}bdf /@start{/Resolution exch def /IdentityEncoding 256 array def 0 1 255{IdentityEncoding exch 1 string dup 0 3 index put cvn put}for}bdf /p{show}bdf /RuleMatrix[1 0 0 -1 -.1 -.1]def /BlackDots 8 string def /v{gsave currentpoint translate false RuleMatrix{ BlackDots}imagemask grestore}bdf /a{moveto}bdf /delta 0 def /tail{dup /delta exch def 0 rmoveto}bdf /b{exch show tail}bdf /c{show delta 4 sub tail}bdf /d{ show delta 3 sub tail}bdf /e{show delta 2 sub tail}bdf /f{show delta 1 sub tail}bdf /g{show delta 0 rmoveto}bdf /h{show delta 1 add tail}bdf /i{show delta 2 add tail}bdf /j{show delta 3 add tail}bdf /k{show delta 4 add tail} bdf /l{show -4 0 rmoveto}bdf /m{show -3 0 rmoveto}bdf /n{show -2 0 rmoveto} bdf /o{show -1 0 rmoveto}bdf /q{show 1 0 rmoveto}bdf /r{show 2 0 rmoveto}bdf /s{show 3 0 rmoveto}bdf /t{show 4 0 rmoveto}bdf /w{0 rmoveto}bdf /x{0 exch rmoveto}bdf /y{3 2 roll show moveto}bdf /bos{/section save def}bdf /eos{clear section restore}bdf end %%EndDocument %%BeginDocument: texps.pro TeXDict begin /rf{655360 div mul Resolution mul 7227 div /PixPerEm exch def findfont dup length 1 add dict /newfont exch def{1 index /FID ne{newfont 3 1 roll put}{pop pop}ifelse}forall 256 dict begin newfont /Encoding get 255 -1 0{ 2 copy get 4 -1 roll 1000 mul PixPerEm div def pop}for pop newfont /Metrics currentdict put end /fontname exch def dmystr 2 fontname cvx(@@@@)cvs putinterval newname dup newfont definefont[PixPerEm 0 0 PixPerEm neg 0 0] makefont def fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 6 string copy cvn cvx put}bdf /ObliqueSlant{dup sin exch cos div neg}bdf /SlantFont{/foo exch def[1 0 foo 1 0 0]TransFont}bdf /ExtendFont{/foo exch def 258 2 roll 0 1 255{pop foo div 256 1 roll}for 258 -2 roll[foo 0 0 1 0 0] TransFont}bdf /TransFont{exch findfont exch makefont dup length dict /newfont exch def{1 index /FID ne{newfont 3 1 roll put}{pop pop}ifelse}forall dup newfont definefont pop}bdf end %%EndDocument %%BeginDocument: special.pro TeXDict begin /SDict 200 dict def SDict begin /@SpecialDefaults{/hs 612 def /vs 792 def /ho 0 def /vo 0 def /hsc 1 def /vsc 1 def /ang 0 def /CLIP false def /BBcalc false def}bdf /@scaleunit 1 def /@hscale{@scaleunit div /hsc exch def}bdf /@vscale{@scaleunit div /vsc exch def}bdf /@hsize{/hs exch def /CLIP true def}bdf /@vsize{/vs exch def /CLIP true def}bdf /@hoffset{/ho exch def} bdf /@voffset{/vo exch def}bdf /@angle{/ang exch def}bdf /@rwi{10 div /rwi exch def}bdf /@llx{/llx exch def}bdf /@lly{/lly exch def}bdf /@urx{/urx exch def}bdf /@ury{/ury exch def /BBcalc true def}bdf end /@MacSetUp{userdict /md known{userdict /md get type /dicttype eq{md begin /letter{}def /note{}def /legal{}def /od{txpose 1 0 mtx defaultmatrix dtransform exch atan/pa exch def newpath clippath mark{transform{itransform moveto}}{transform{itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{ itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{ closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}def /txpose{pxs pys scale ppr aload pop por{noflips{pop exch neg exch translate pop 1 -1 scale}if xflip yflip and{pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not and{pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ppr 1 get neg ppr 0 get neg translate} if}{noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{ translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not and{translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate} if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate}if}def /cp{pop pop showpage pm restore}def end}if}if}def /psf$TeXscale{65536 div}def /startTexFig {/psf$SavedState save def userdict maxlength dict begin Resolution 72 div dup neg scale currentpoint translate /psf$ury exch psf$TeXscale def /psf$urx exch psf$TeXscale def /psf$lly exch psf$TeXscale def /psf$llx exch psf$TeXscale def /psf$y exch psf$TeXscale def /psf$x exch psf$TeXscale def currentpoint /psf$cy exch def /psf$cx exch def /psf$sx psf$x psf$urx psf$llx sub div def /psf$sy psf$y psf$ury psf$lly sub div def psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub translate /showpage{}def /erasepage{ }def /copypage{}def @MacSetUp}def /doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto}def /endTexFig{end psf$SavedState restore}def /@beginspecial{SDict begin /SpecialSave save def Resolution 72 div dup neg scale currentpoint translate @SpecialDefaults}bdf /@setspecial{CLIP{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}{initclip}ifelse ho vo translate hsc vsc scale ang rotate BBcalc{rwi urx llx sub div dup scale llx neg lly neg translate}if /showpage{}def newpath}bdf /@endspecial{clear SpecialSave restore end}bdf /@defspecial{SDict begin}bdf /@fedspecial{end}bdf /li{lineto}bdf /rl{rlineto} bdf /rc{rcurveto}bdf /np{/SaveX currentpoint /SaveY exch def def newpath}bdf /st{stroke SaveX SaveY moveto}bdf /fil{fill SaveX SaveY moveto}bdf /ellipse{ /endangle exch def /startangle exch def /yrad exch def /xrad exch def /savematrix matrix currentmatrix def translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}bdf end %%EndDocument TeXDict begin bos 300 @start /fa 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 14 17 17 28 26 11 11 11 17 22 8 11 8 9 17 17 17 17 17 17 17 17 17 17 11 11 22 22 22 17 31 20 20 22 24 20 20 24 24 11 15 22 18 28 22 24 20 24 20 17 18 24 20 28 20 18 18 13 9 13 14 17 11 17 17 15 17 15 16 17 17 9 9 15 9 24 17 17 17 17 13 13 9 17 15 22 15 15 13 13 9 13 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 17 17 6 17 17 17 17 7 18 17 11 11 17 17 0 17 17 17 8 0 17 12 11 18 18 17 30 33 0 17 0 11 11 11 11 11 11 11 11 0 11 11 0 11 11 11 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 9 0 0 0 0 18 24 31 10 0 0 0 0 0 22 0 0 0 9 0 0 9 17 22 17 0 0 0 0 /Times-Italic-Math /Times-Italic 1.0 ExtendFont 1000 524288 rf /fb 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 11 14 17 17 28 26 11 11 11 17 22 8 11 8 9 17 17 17 17 17 17 17 17 17 17 11 11 22 22 22 17 31 20 20 22 24 20 20 24 24 11 15 22 18 28 22 24 20 24 20 17 18 24 20 28 20 18 18 13 9 13 14 17 11 17 17 15 17 15 9 17 17 9 9 15 9 24 17 17 17 17 13 13 9 17 15 22 15 15 13 13 9 13 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 17 17 6 17 17 17 17 7 18 17 11 11 17 17 0 17 17 17 8 0 17 12 11 18 18 17 30 33 0 17 0 11 11 11 11 11 11 11 11 0 11 11 0 11 11 11 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 9 0 0 0 0 18 24 31 10 0 0 0 0 0 22 0 0 0 9 0 0 9 17 22 17 0 0 0 0 /Times-Italic 1000 524288 rf /fc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 10 12 15 15 24 23 10 10 10 15 16 7 10 7 8 15 15 15 15 15 15 15 15 15 15 8 8 16 16 16 13 27 21 19 19 21 18 16 21 21 10 11 21 18 26 21 21 16 21 19 16 18 21 21 27 21 21 18 10 8 10 14 15 10 13 15 13 15 13 10 15 15 8 8 15 8 23 15 15 15 15 10 11 8 15 15 21 15 15 13 14 6 14 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 15 15 5 15 15 15 15 5 13 15 10 10 16 16 0 15 15 15 7 0 13 10 10 13 13 15 29 29 0 13 0 10 10 10 10 10 10 10 10 0 10 10 0 10 10 10 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 8 0 0 0 0 18 21 26 9 0 0 0 0 0 19 0 0 0 8 0 0 8 15 21 15 0 0 0 0 /Times-Roman 1000 458752 rf /fd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 12 15 15 24 23 10 10 10 15 20 7 10 7 8 15 15 15 15 15 15 15 15 15 15 10 10 20 20 20 15 27 18 18 19 21 18 18 21 21 10 13 19 16 24 19 21 18 21 18 15 16 21 18 24 18 16 16 11 8 11 12 15 10 15 15 13 15 13 14 15 15 8 8 13 8 21 15 15 15 15 11 11 8 15 13 19 13 13 11 12 8 12 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 15 15 5 15 15 15 15 6 16 15 10 10 15 15 0 15 15 15 7 0 15 10 10 16 16 15 26 29 0 15 0 10 10 10 10 10 10 10 10 0 10 10 0 10 10 10 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 8 0 0 0 0 16 21 27 9 0 0 0 0 0 19 0 0 0 8 0 0 8 15 19 15 0 0 0 0 /Times-Italic-Math /Times-Italic 1.0 ExtendFont 1000 458752 rf /fe 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 17 21 21 35 32 14 14 14 21 28 10 14 10 12 21 21 21 21 21 21 21 21 21 21 14 14 28 28 28 21 38 25 25 28 30 25 25 30 30 14 18 28 23 35 28 30 25 30 25 21 23 30 25 35 25 23 23 16 12 16 18 21 14 21 21 18 21 18 20 21 21 12 12 18 12 30 21 21 21 21 16 16 12 21 18 28 18 18 16 17 11 17 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 21 21 7 21 21 21 21 9 23 21 14 14 21 21 0 21 21 21 10 0 22 15 14 23 23 21 37 42 0 21 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 11 0 0 0 0 23 30 39 13 0 0 0 0 0 28 0 0 0 12 0 0 12 21 28 21 0 0 0 0 /Times-Italic-Math /Times-Italic 1.0 ExtendFont 1000 655360 rf /ff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 17 28 25 25 50 41 17 17 17 25 28 12 17 12 14 25 25 25 25 25 25 25 25 25 25 17 17 28 28 28 25 46 36 33 36 36 33 30 39 39 19 25 39 33 47 36 39 30 39 36 28 33 36 36 50 36 36 33 17 14 17 29 25 17 25 28 22 28 22 17 25 28 14 17 28 14 41 28 25 28 28 22 19 17 28 25 36 25 25 22 20 11 20 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 25 25 8 25 25 25 25 14 25 25 17 17 28 28 0 25 25 25 12 0 27 17 17 25 25 25 50 50 0 25 0 17 17 17 17 17 17 17 17 0 17 17 0 17 17 17 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 0 15 0 0 0 0 33 39 50 16 0 0 0 0 0 36 0 0 0 14 0 0 14 25 36 28 0 0 0 0 /Times-Bold 1000 786432 rf /fg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 11 14 17 17 28 26 11 11 11 17 19 8 11 8 9 17 17 17 17 17 17 17 17 17 17 9 9 19 19 19 15 31 24 22 22 24 20 18 24 24 11 13 24 20 30 24 24 18 24 22 18 20 24 24 31 24 24 20 11 9 11 16 17 11 15 17 15 17 15 11 17 17 9 9 17 9 26 17 17 17 17 11 13 9 17 17 24 17 17 15 16 7 16 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 17 17 6 17 17 17 17 6 15 17 11 11 18 18 0 17 17 17 8 0 15 12 11 15 15 17 33 33 0 15 0 11 11 11 11 11 11 11 11 0 11 11 0 11 11 11 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 9 0 0 0 0 20 24 30 10 0 0 0 0 0 22 0 0 0 9 0 0 9 17 24 17 0 0 0 0 /Times-Roman 1000 524288 rf /fh 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 8 10 12 12 21 19 8 8 8 12 14 6 8 6 7 12 12 12 12 12 12 12 12 12 12 7 7 14 14 14 11 23 18 17 17 18 15 14 18 18 8 10 18 15 22 18 18 14 18 17 14 15 18 18 24 18 18 15 8 7 8 12 12 8 11 12 11 12 11 8 12 12 7 7 12 7 19 12 12 12 12 8 10 7 12 12 18 12 12 11 12 5 12 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 12 12 4 12 12 12 12 4 11 12 8 8 14 14 0 12 12 12 6 0 11 9 8 11 11 12 25 25 0 11 0 8 8 8 8 8 8 8 8 0 8 8 0 8 8 8 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 7 0 0 0 0 15 18 22 8 0 0 0 0 0 17 0 0 0 7 0 0 7 12 18 12 0 0 0 0 /Times-Roman 1000 393216 rf /fi 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 17 21 21 35 32 14 14 14 21 28 10 14 10 12 21 21 21 21 21 21 21 21 21 21 14 14 28 28 28 21 38 25 25 28 30 25 25 30 30 14 18 28 23 35 28 30 25 30 25 21 23 30 25 35 25 23 23 16 12 16 18 21 14 21 21 18 21 18 12 21 21 12 12 18 12 30 21 21 21 21 16 16 12 21 18 28 18 18 16 17 11 17 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 21 21 7 21 21 21 21 9 23 21 14 14 21 21 0 21 21 21 10 0 22 15 14 23 23 21 37 42 0 21 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 11 0 0 0 0 23 30 39 13 0 0 0 0 0 28 0 0 0 12 0 0 12 21 28 21 0 0 0 0 /Times-Italic 1000 655360 rf /fj 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 17 21 21 35 32 14 14 14 21 23 10 14 10 12 21 21 21 21 21 21 21 21 21 21 12 12 23 23 23 18 38 30 28 28 30 25 23 30 30 14 16 30 25 37 30 30 23 30 28 23 25 30 30 39 30 30 25 14 12 14 19 21 14 18 21 18 21 18 14 21 21 12 12 21 12 32 21 21 21 21 14 16 12 21 21 30 21 21 18 20 8 20 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 21 21 7 21 21 21 21 7 18 21 14 14 23 23 0 21 21 21 10 0 19 15 14 18 18 21 42 42 0 18 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 11 0 0 0 0 25 30 37 13 0 0 0 0 0 28 0 0 0 12 0 0 12 21 30 21 0 0 0 0 /Times-Roman 1000 655360 rf /fk 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 17 21 25 25 41 39 17 17 17 25 34 12 17 12 14 25 25 25 25 25 25 25 25 25 25 17 17 34 34 34 25 46 30 30 33 36 30 30 36 36 17 22 33 28 41 33 36 30 36 30 25 28 36 30 41 30 28 28 19 14 19 21 25 17 25 25 22 25 22 14 25 25 14 14 22 14 36 25 25 25 25 19 19 14 25 22 33 22 22 19 20 14 20 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 25 25 8 25 25 25 25 11 28 25 17 17 25 25 0 25 25 25 12 0 26 17 17 28 28 25 44 50 0 25 0 17 17 17 17 17 17 17 17 0 17 17 0 17 17 17 44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 14 0 0 0 0 28 36 47 15 0 0 0 0 0 33 0 0 0 14 0 0 14 25 33 25 0 0 0 0 /Times-Italic 1000 786432 rf /fl 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 17 20 25 25 41 39 17 17 17 25 28 12 17 12 14 25 25 25 25 25 25 25 25 25 25 14 14 28 28 28 22 46 36 33 33 36 30 28 36 36 17 19 36 30 44 36 36 28 36 33 28 30 36 36 47 36 36 30 17 14 17 23 25 17 22 25 22 25 22 17 25 25 14 14 25 14 39 25 25 25 25 17 19 14 25 25 36 25 25 22 24 10 24 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 25 25 8 25 25 25 25 9 22 25 17 17 28 28 0 25 25 25 12 0 23 17 17 22 22 25 50 50 0 22 0 17 17 17 17 17 17 17 17 0 17 17 0 17 17 17 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 14 0 0 0 0 30 36 44 15 0 0 0 0 0 33 0 0 0 14 0 0 14 25 36 25 0 0 0 0 /Times-Roman 1000 786432 rf /fm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 20 33 30 30 60 50 20 20 20 30 34 15 20 15 17 30 30 30 30 30 30 30 30 30 30 20 20 34 34 34 30 56 43 40 43 43 40 37 47 47 23 30 47 40 56 43 47 37 47 43 33 40 43 43 60 43 43 40 20 17 20 35 30 20 30 33 27 33 27 20 30 33 17 20 33 17 50 33 30 33 33 27 23 20 33 30 43 30 30 27 24 13 24 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 30 30 10 30 30 30 30 17 30 30 20 20 33 33 0 30 30 30 15 0 32 21 20 30 30 30 60 60 0 30 0 20 20 20 20 20 20 20 20 0 20 20 0 20 20 20 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 18 0 0 0 0 40 47 60 20 0 0 0 0 0 43 0 0 0 17 0 0 17 30 43 33 0 0 0 0 /Times-Bold 1000 943718 rf end TeXDict begin @letter %%EndProlog %%Page: 1 1 bop 720 193 a fm(Real-T)o(ime)13 b(Mach:)419 268 y(T)-5 b(owards)14 b(a)h (Pr)o(edictable)d(Real-T)o(ime)h(System)463 388 y fl(Hideyuki)f(T)m(okuda,)h (T)m(atsuo)f(Nakajima,)h(Prithvi)e(Rao)663 446 y fk(School)h(of)h(Computer)f (Science)665 505 y(Carnegie)h(Mellon)g(University)625 563 y(Pittsbur)o(gh,)g (Pennsylvania)g(15213)778 621 y fl(hxt@cs.cmu.edu)-118 784 y fm(Abstract)-118 881 y fj(Distributed)7 b(real-time)h(systems)i(play)e(a)h(very)g(important)e (role)i(in)f(our)-118 931 y(modern)g(society)m(.)15 b(They)8 b(are)i(used)e (in)g(aircraft)g(control,)g(communica-)-118 981 y(tion)j(systems,)i(military) e(command)i(and)f(control)f(systems,)j(factory)-118 1031 y(automation,)f(and) g(robotics.)22 b(However)o(,)14 b(satisfying)e(the)h(rigid)e(tim-)-118 1081 y (ing)h(requirements)g(of)h(various)e(real-time)i(activities)f(in)g(distribute\ d)-118 1130 y(real-time)i(systems)h(often)e(requires)h fi(ad)g(hoc)g fj(metho\ ds)g(to)g(tune)g(the)-118 1180 y(system')n(s)c(runtime)g(behavior)-77 1233 y (The)i(objective)f(of)g(Real-T)o(ime)g(Mach)h(is)f(to)g(develop)g(a)h(real-ti\ me)-118 1283 y(version)g(of)h(the)g(Mach)g(kernel)g(which)g(provides)f(users) h(with)f(a)i(pre-)-118 1332 y(dictable)c(and)h(reliable)f(distributed)e(real-\ time)i(computing)g(environ-)-118 1382 y(ment.)33 b(In)16 b(this)f(paper)n(,)j (we)f(describe)g(a)f(real-time)g(thread)g(model,)-118 1432 y(real-time)g(sync\ hronization,)g(and)h(the)f(ITDS)g(scheduler)h(in)e(Real-)-118 1482 y(T)o(ime) i(Mach.)35 b(W)m(e)17 b(also)g(discuss)g(the)f(implementation)g(issues,)j(a) -118 1532 y(real-time)10 b(toolset,)g(and)g(the)g(current)g(status)g(of)g(the) g(system.)-118 1687 y fm(1)60 b(Intr)o(oduction)-118 1785 y fj(Distributed)26 b(real-time)j(systems)g(are)h(becoming)e(more)h(com-)-118 1834 y(mon)20 b(as) g(real-time)g(technology)e(is)h(applied)g(to)g(many)i(real-time)-118 1884 y (applications[20)n(].)14 b(However)o(,)8 b(satisfying)f(the)g(rigid)g(timing) f(require-)-118 1934 y(ments)16 b(of)f(various)g(real-time)h(activities)e(in) h(distributed)f(real-time)-118 1984 y(systems)d(is)g(getting)e(more)i(complex) g(due)g(to)f(the)h(distributed)e(nature)-118 2034 y(of)h(the)g(system.)-77 2086 y(In)j(many)g(cases,)i(system)e(designers)f(of)h(such)f(complex)h(system\ s)-118 2136 y(lack)i(systematic)g(development)f(methods)g(and)h(analysis)g (tools,)f(so)-118 2186 y(they)j(resort)h(to)f fi(ad)h(hoc)g fj(methods)f(to)h (develop,)h(test,)h(and)e(verify)-118 2236 y(real-time)g(systems.)40 b(For)17 b(processor)i(scheduling,)g(for)f(instance,)-118 2286 y(the)d(cyclic)g(execut\ ive)h(model)f(which)g(uses)g(time)g(line)g(analysis)g(to)-118 2335 y(schedule) h(real-time)g(activities)e(is)i(not)f(suitable)f(for)i(a)g(distributed)-118 2374 y 411 2 v -73 2401 a fh(1)-25 2413 y fg(This)c(research)f(was)h(supporte\ d)e(in)i(part)f(by)h(the)f(U.S.)j(Naval)d(Ocean)g(Systems)-58 2453 y(Center)f (under)f(contract)h(number)f(N66001-87-C-0155,)f(by)i(the)h(Of)o(\256ce)g(of) f(Naval)-58 2492 y(Research)g(under)g(contract)g(number)g(N00014-84-K-0734,)e (by)j(the)g(Defense)f(Ad-)-58 2532 y(vanced)f(Research)h(Projects)h(Agency)n (,)f(ARP)m(A)i(Order)f(No.)20 b(7330)10 b(under)g(contract)-58 2571 y(number) d(MDA72-90-C-0035,)f(by)i(the)g(Federal)g(Systems)h(Division)f(of)g(IBM)h(Cor\ -)-58 2610 y(poration)g(under)g(University)g(Agreement)g(Y)l(A-278067,)g(and) h(by)f(the)h(SONY)h(Cor-)-58 2650 y(poration.)16 b(The)9 b(views)h(and)f(conc\ lusions)e(contained)h(in)i(this)g(document)e(are)h(those)-58 2689 y(of)e(the) h(authors)e(and)h(should)g(not)g(be)g(interpreted)g(as)h(representing)e(of)o (\256cial)i(policies,)-58 2729 y(either)h(expressed)e(or)j(implied,)f(of)g (NOSC,)i(ONR,)f(DARP)m(A,)g(IBM,)g(SONY)l(,)g(or)f(the)-58 2768 y(U.S.)g(Gove\ rnment.)982 784 y fj(environment.)17 b(It)10 b(is)h(very)g(dif)n(\256cult)f (to)h(test)f(and)h(tune)g(the)g(executive)982 833 y(based)d(on)e(some)h(chang\ es)g(in)f(the)h(task)f(set)h(or)f(its)g(timing)f(requirements)982 883 y(for) 13 b(complex)g(real-time)h(systems)f([9].)24 b(Message)15 b(communication)982 933 y(scheduling)e(in)g(a)h(network)e(is)i(also)f(dif)n(\256cult)g(since)h (some)h(commu-)982 983 y(nication)i(media)h(such)f(as)h(Ethernet)f(do)g(not)g (guarantee)h(bounded)982 1033 y(communication)8 b(delay)h(at)f(media)i(access) g(level)f(and)f(do)g(not)g(provide)982 1082 y(priority-based)h(arbitration.) 1024 1174 y(A)j(new)h(challenge)g(in)f(such)h(real-time)f(systems)h(is)f(to)g (develop)g(a)982 1224 y(real-time)k(kernel)f(which)g(can)h(provide)e(users)i (with)f(a)g(predictable)982 1274 y(and)d(reliable)g(distributed)e(real-time)i (computing)f(environment.)19 b(In)982 1323 y(particular)n(,)8 b(the)f(kernel) g(should)f(allow)h(a)h(system)f(designer)g(to)g(analyze)982 1373 y(the)13 b (runtime)f(behavior)h(at)f(the)h(design)g(stage)g(and)g(predict)f(whether)982 1423 y(the)h(given)f(real-time)h(tasks)g(having)f(various)g(types)h(of)g(syst\ em)g(and)982 1473 y(task)i(interactions)d(\(e.g.,)17 b(memory)d(allocation/de\ allocation,)f(mes-)982 1523 y(sage)19 b(communications,)h(I/O)e(interactions,) h(etc\))f(can)h(meet)g(their)982 1573 y(timing)9 b(requirements.)1024 1664 y (CMU')m(s)h(AR)n(T)g(\(Advanced)h(Real-T)n(ime)g(T)m(echnology\))e(group)h (has)982 1714 y(been)i(working)e(on)h(a)h(real-time)f(version)g(of)g(the)g (Mach)h(as)g(well)f(as)h(a)982 1764 y(real-time)j(toolset)e(for)g(system)i (design)f(and)g(analysis.)27 b(Real-T)o(ime)982 1814 y(Mach)13 b(is)g(being)e (developed)i(based)g(on)f(a)h(version)e(of)h(the)h(pure)f(ker-)982 1863 y(nel) h([1)o(,)g(7])g(using)e(a)i(network)f(of)g(SUN,)h(SONY)g(workstations,)f(and) 982 1913 y(single)f(board)g(tar)o(get)h(machines.)19 b(Unlike)11 b(the)g(stan\ dard)g(release)i(2.5)982 1963 y(Mach,)f(this)d(kernel)h(includes)g(new)h(real\ -time)f(thread)g(management,)982 2013 y(an)e(integrated)e(time-driven)f(sched\ uler)i(\(ITDS\),)h(real-time)f(synchro-)982 2063 y(nization,)14 b(and)f(memor\ y)h(resident)f(objects.)24 b(The)14 b(real-time)f(thread)982 2112 y(model)g (is)f(based)h(on)f(the)g(AR)m(TS)h(real-time)g(thread)f(model)g([21,)h(25)o (])982 2162 y(and)h(our)e(real-time)h(scheduling)g(theories.)23 b(Real-T)o (ime)14 b(Mach)f(was)982 2212 y(also)d(integrated)e(with)h(our)g(real-time)g (toolset,)g fi(Scheduler)h(1-2-3)p fj([23)n(])982 2262 y(and)h(Advanced)f(Rea\ l-T)o(ime)h(Monitor)l(,)g fi(ARM)p fj([22].)1024 2354 y(In)c(this)f(paper)o (,)i(we)f(describe)h(new)f(system)h(facilities)e(in)h(Real-T)o(ime)982 2403 y (Mach)h(and)f(the)g(current)g(status.)14 b(In)7 b(Section)g(2,)h(we)f(\256rst) g(introduce)f(the)982 2453 y(real-time)13 b(thread)f(model,)i(real-time)e(syn\ chronization)f(primitives,)982 2503 y(integrated)e(time-driven)e(scheduler)o (,)j(and)f(support)f(for)g(memory)i(res-)982 2553 y(ident)i(objects.)21 b(Sec\ tion)12 b(3)g(discusses)g(implementation)f(issues)i(and)982 2603 y(our)f(solu\ tion)e(to)i(priority)e(inversion)h(problems.)21 b(In)12 b(Section)g(4,)h(we) 982 2652 y(also)8 b(compare)h(our)f(approach)g(and)g(real-time)g(thread)g(mod\ el)g(to)g(other)982 2702 y(operating)f(systems.)14 b(Section)7 b(5)g(summariz\ es)i(the)e(development)g(sta-)982 2752 y(tus)j(and)h(considers)f(future)f(wor\ k.)935 2877 y(1)p eop %%Page: 2 2 bop -118 38 a 1026 3 v 50 x @beginspecial -99 @hoffset -720 @voffset @setspecial %%BeginDocument: fig1.ps /BS {/SV save def 0.0 792.0 translate .01 -.01 scale} bind def /ES {showpage SV restore} bind def /SC {setrgbcolor} bind def /FMTX matrix def /RDF {WFT SLT 0.0 eq {SSZ 0.0 0.0 SSZ neg 0.0 0.0 FMTX astore} {SSZ 0.0 SLT neg sin SLT cos div SSZ mul SSZ neg 0.0 0.0 FMTX astore} ifelse makefont setfont} bind def /SLT 0.0 def /SI { /SLT exch cvr def RDF} bind def /WFT /Courier findfont def /SF { /WFT exch findfont def RDF} bind def /SSZ 1000.0 def /SS { /SSZ exch 100.0 mul def RDF} bind def /AF { /WFT exch findfont def /SSZ exch 100.0 mul def RDF} bind def /MT /moveto load def /XM {currentpoint exch pop moveto} bind def /UL {gsave newpath moveto dup 2.0 div 0.0 exch rmoveto setlinewidth 0.0 rlineto stroke grestore} bind def /LH {gsave newpath moveto setlinewidth 0.0 rlineto gsave stroke grestore} bind def /LV {gsave newpath moveto setlinewidth 0.0 exch rlineto gsave stroke grestore} bind def /BX {gsave newpath moveto setlinewidth exch dup 0.0 rlineto exch 0.0 exch neg rlineto neg 0.0 rlineto closepath gsave stroke grestore} bind def /BX1 {grestore} bind def /BX2 {setlinewidth 1 setgray stroke grestore} bind def /PB {/PV save def newpath 3 -1 roll sub translate 100.0 -100.0 scale /showpage {} def} bind def /PE {PV restore} bind def /GB {/PV save def newpath translate rotate div dup scale 100.0 -100.0 scale /showpage {} def} bind def /GE {PV restore} bind def /FB {dict dup /FontMapDict exch def begin} bind def /FM {cvn exch cvn exch def} bind def /FE {end /original-findfont /findfont load def /findfont {dup FontMapDict exch known{FontMapDict exch get} if original-findfont} def} bind def /BC {gsave moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath clip} bind def /EC /grestore load def /SH /show load def /MX {exch show 0.0 rmoveto} bind def /W {0 32 4 -1 roll widthshow} bind def /WX {0 32 5 -1 roll widthshow 0.0 rmoveto} bind def /RC {100.0 -100.0 scale 612.0 0.0 translate -90.0 rotate .01 -.01 scale} bind def /URC {100.0 -100.0 scale 90.0 rotate -612.0 0.0 translate .01 -.01 scale} bind def /RCC {100.0 -100.0 scale 0.0 -792.0 translate 90.0 rotate .01 -.01 scale} bind def /URCC {100.0 -100.0 scale -90.0 rotate 0.0 792.0 translate .01 -.01 scale} bind def systemdict/currentpacking known{currentpacking true setpacking}if /LW{save statusdict/product get(LaserWriter)anchorsearch exch pop{length 0 eq{1}{2}ifelse}{0}ifelse exch restore}bind def /LW+{LW 2 eq}bind def /ok{systemdict/statusdict known dup{LW 0 gt and}if}bind def /md 250 dict def md begin /av 65 def /T true def /F false def /mtx matrix def /s75 75 string def /s8 8 string def /s1 ( ) def /pxs 1 def /pys 1 def 1 0 mtx defaultmatrix dtransform exch atan/pa exch def /nlw .24 def /ppr [-32 -29.52 762 582.48] def % default printable page rectangle /pgs 1 def /por true def /xb 500 array def /so true def /fillflag false def /pnm 1 def /fmv true def /sfl false def /ma 0 def /invertflag false def /xflip false def /yflip false def /noflips true def /scaleby96 false def /fNote true def /fBitStretch true def /fg (Rvd\001\001\000\000\177) def /bdf{bind def}bind def /xdf{exch def}bdf /xl{neg exch neg translate}bdf /fp{pnsh 0 ne pnsv 0 ne and}bdf /nop{}bdf/lnop[/nop load]cvx bdf /vrb[ {fp{gsave 1 setlinewidth pnsh pnsv scale stroke grestore}if newpath}bind /eofill load dup /newpath load 2 index dup {clip newpath}bind {}bind dup 2 copy ]def currentscreen/spf xdf/rot xdf/freq xdf /doop{vrb exch get exec}bdf /psu{ pop /fNote xdf /fBitStretch xdf /scaleby96 xdf pop F %UNI force yflip off /yflip xdf pop F %UNI force xflip off /xflip xdf pop F %UNI force black/white reversing off /invertflag xdf xflip yflip or{/noflips false def}if /pgs xdf % set pgs 2 index % get copy of scale .72 mul exch div /pys xdf % pys = (.72 * scale) / dpiy % S: smooth por bbs1 bbs2 bbey bbex scale dpix div .72 mul /pxs xdf % pxs = .72 * (scale / dpix) 2 index pxs mul 4 index pys mul neg translate %UNI xlate for scribe ppr astore pop % put "bbs1 bbs2 bbey bbex" into ppr pop T %UNI force portrait on /por xdf % set por pop F %UNI force smooth request off sn and /so xdf % set "so" T if smooth req'd AND avail in LW }bdf /txpose{ pxs pys scale ppr aload pop por { noflips{pop exch neg exch translate pop 1 -1 scale}if xflip yflip and{ pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate }if xflip yflip not and{ pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate }if yflip xflip not and{ ppr 1 get neg ppr 0 get neg translate }if } { noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{ translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate }if xflip yflip not and{ translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate }if yflip xflip not and{ translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate }if } ifelse %UNI statusdict begin waittimeout 300 lt{/waittimeout 300 def}if end scaleby96{ ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate }if }bdf /fr{3 index 3 index xl ppr aload pop 3 -1 roll 2 mul add 3 1 roll exch 2 mul add 6 2 roll 3 -1 roll sub 3 1 roll exch sub 3 1 roll exch 3 -1 roll div 3 1 roll div exch scale}bdf /lws{show}bdf /tv{show pop pop}bdf /obl{{0.212557 mul}{pop 0}ifelse}bdf /sfd{ps fg 5 -1 roll get mul 100 div 0 ps 5 -1 roll obl ps neg 0 0 6a astore makefont setfont}bdf /fnt{findfont sfd}bdf /bt{sa 3 1 roll 3 index and put}bdf /sa(\000\000\000\000\000\000\000\000\000\000)def /fs{0 1 bt 1 2 bt 2 4 bt 3 8 bt 4 16 bt 5 32 bt 6 64 bt 7 128 bt sa exch 8 exch put}bdf /mx1 matrix def /mx2 matrix def /mx3 matrix def /bu{currentpoint currentgray currentlinewidth currentlinecap currentlinejoin currentdash exch aload length fg 5 sfl{1}{0}ifelse put pnsv pnsh 2t aload pop 3a aload pop mx2 aload pop mx1 aload pop mtx currentmatrix aload pop mx3 aload pop ps pm restore/ps xdf mx3 astore pop}bdf /bn{/pm save def mx3 setmatrix newpath 0 0 moveto ct dup 39 get 0 exch getinterval cvx exec mtx astore setmatrix mx1 astore pop mx2 astore pop 3a astore pop 2t astore pop/pnsh xdf/pnsv xdf gw /sfl fg 5 get 0 ne def array astore exch setdash setlinejoin setlinecap setlinewidth setgray moveto}bdf /fc{save vmstatus exch sub 50000 lt {(%%[|0|]%%)=print flush}if pop restore}bdf /tc{32768 div add 3 1 roll 32768 div add 2t astore pop}bdf /3a [0 0 0] def /2t 2 array def /tp{3a astore pop}bdf /tt{mx2 currentmatrix pop currentpoint 2 copy 2t aload pop qa 2 copy translate 3a aload pop exch dup 0 eq {pop}{1 eq{-1 1}{1 -1}ifelse scale}ifelse rotate pop neg exch neg exch translate moveto}bdf /te{mx2 setmatrix}bdf /th{3 -1 roll div 3 1 roll exch div 2 copy mx1 scale pop scale/sfl true def}bdf /tu{1 1 mx1 itransform scale/sfl false def}bdf /ts{1 1 mx1 transform scale/sfl true def}bdf /fz{/ps xdf}bdf /dv{dup 0 ne{div}{pop}ifelse}bdf /pop4{pop pop pop pop}bdf /it{sfl{mx1 itransform}if}bdf /gm{exch it moveto}bdf/rm{it rmoveto}bdf /lm{currentpoint sfl{mx1 transform}if exch pop sub 0 exch it rmoveto}bdf /fm{statusdict/manualfeed known}bdf /se{statusdict exch/manualfeed exch put}bdf /mf{ pop %UNI never allow manual feed }bdf /jn{ pop %UNI don't set job name }bdf /pen{pnm mul/pnsh xdf pnm mul/pnsv xdf pnsh setlinewidth}bdf /min{2 copy gt{exch}if pop}bdf /max{2 copy lt{exch}if pop}bdf /dh{fg 6 1 put array astore exch pop exch pop exch setdash}bdf /ih[currentdash]def /rh{fg 6 0 put ih aload pop setdash}bdf /dl{gsave nlw pys div setlinewidth 0 setgray}bdf /dlin{exch currentpoint currentlinewidth 2 div dup translate newpath moveto lineto currentpoint stroke grestore moveto}bdf /lin{fg 6 get 0 ne{exch lineto currentpoint 0 doop moveto} {exch currentpoint/pnlv xdf/pnlh xdf gsave newpath/@1 xdf/@2 xdf fp{pnlh @2 lt{pnlv @1 ge {pnlh pnlv moveto @2 @1 lineto pnsh 0 rlineto 0 pnsv rlineto pnlh pnsh add pnlv pnsv add lineto pnsh neg 0 rlineto} {pnlh pnlv moveto pnsh 0 rlineto @2 pnsh add @1 lineto 0 pnsv rlineto pnsh neg 0 rlineto pnlh pnlv pnsv add lineto}ifelse}{pnlv @1 gt {@2 @1 moveto pnsh 0 rlineto pnlh pnsh add pnlv lineto 0 pnsv rlineto pnsh neg 0 rlineto @2 @1 pnsv add lineto}{pnlh pnlv moveto pnsh 0 rlineto 0 pnsv rlineto @2 pnsh add @1 pnsv add lineto pnsh neg 0 rlineto 0 pnsv neg rlineto}ifelse}ifelse closepath fill}if @2 @1 grestore moveto}ifelse}bdf /gw{/pnm fg 3 get fg 4 get div def}bdf /lw{fg exch 4 exch put fg exch 3 exch put gw pnsv pnsh pen}bdf /barc{/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf /@6 xdf/@7 xdf/@8 xdf gsave @5 @7 add 2 div @6 @8 add 2 div translate newpath 0 0 moveto @5 @7 sub @6 @8 sub mtx currentmatrix pop scale @1{newpath}if 0 0 0.5 @4 @3 arc @4 @3 sub abs 360 ge{closepath}if mtx setmatrix @2 doop grestore}bdf /ar{dup 0 eq barc}bdf /ov{0 exch 360 exch true barc}bdf /rc{/@t xdf currentpoint 6 2 roll newpath 4 copy 4 2 roll exch moveto 6 -1 roll lineto lineto lineto closepath @t doop moveto}bdf /mup{dup pnsh 2 div le exch pnsv 2 div le or}bdf /rr{/@1 xdf 2. div/@2 xdf 2. div/@3 xdf /@4 xdf/@5 xdf/@6 xdf/@7 xdf @7 @5 eq @6 @4 eq @2 mup or or{@7 @6 @5 @4 @1 rc} {@4 @6 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse @5 @7 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse @1 0 eq{/@2 @2 pnsh 2 div 2 copy gt{sub def}{0 pop4}ifelse}if currentpoint newpath @4 @6 add 2. div @7 moveto @4 @7 @4 @5 @2 arcto pop4 @4 @5 @6 @5 @2 arcto pop4 @6 @5 @6 @7 @2 arcto pop4 @6 @7 @4 @7 @2 arcto pop4 closepath @1 doop moveto}ifelse}bdf /pr{gsave newpath/pl{exch moveto/pl{exch lineto}def}def}bdf /pl{exch lineto}bdf /ep{dup 0 eq{{moveto}{exch lin}{}{(%%[|1|]%%)= flush}pathforall pop grestore}{doop grestore}ifelse currentpoint newpath moveto}bdf /gr{64. div setgray}bdf /pat{s8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi s8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}setscreen gr}bdf /sg{freq rot/spf load setscreen gr}bdf /dc{transform round .5 sub exch round .5 sub exch itransform}bdf /sn{userdict/smooth4 known}bdf /x8{3 bitshift}bdf /x4{2 bitshift}bdf /d4{-2 bitshift}bdf /d8{-3 bitshift}bdf /rb{15 add -4 bitshift 1 bitshift}bdf /db{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf/@6 @5 @3 4 add mul def dc translate scale/xdbit 1 1 idtransform abs/ydbit exch def abs def{0 0 1 ydbit add 1 10 rc clip}if @1 0 eq @1 4 eq or{1 setgray ydbit 0 1 ydbit add 1 2 rc}if @1 3 eq @1 7 eq or{1}{0}ifelse setgray/@9 @1 0 eq @1 1 eq @1 3 eq or or invertflag xor def/@13 @6 def @2 fBitStretch or{/@10 @4 x4 def/@11 @3 x4 def/@12 @10 rb def/@13 @12 @11 mul def/@15 1 1 dtransform abs/calcY 1 index def round cvi/@14 exch def abs/calcX 1 index def round cvi scaleby96 not{1 add}if def/@16 @15 rb def/@17 @16 @14 mul def}if sn @13 60000 lt and @2 fBitStretch or and{mtx currentmatrix dup 1 get exch 2 get 0. eq exch 0. eq and @17 60000 lt and fBitStretch and{@16 3 bitshift @14 @9 [calcX 0 0 calcY 0 0]{@17 string @13 string currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4 @10 @11 @12 dup string 5 index @15 @14 @16 dup string stretch}imagemask}{@12 x8 @11 @9 [@10 0 0 @11 0 0]{@13 string currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4}imagemask}ifelse}{@5 3 bitshift @3 4 add @9 [@4 0 0 @3 0 2]{currentfile @6 string readhexstring pop}imagemask}ifelse @7 restore}bdf /wd 16 dict def /mfont 14 dict def /mdf{mfont wcheck not{/mfont 14 dict def}if mfont begin xdf end}bdf /cf{{1 index/FID ne{def}{pop pop}ifelse}forall}bdf /rf{/@1 exch def/@2 exch def FontDirectory @2 known{cleartomark pop}{findfont dup begin dup length @1 add dict begin cf {/Encoding macvec def}{Encoding dup length array copy/Encoding exch def counttomark 2 idiv{Encoding 3 1 roll put}repeat}ifelse pop exec currentdict end end @2 exch definefont pop}ifelse}bdf /bmbc{exch begin wd begin /cr xdf save CharTable cr 6 mul 6 getinterval{}forall /bitheight xdf/bitwidth xdf .96 div/width xdf Gkernmax add/XOffset xdf Gdescent add/YOffset xdf/rowbytes xdf rowbytes 255 eq{0 0 0 0 0 0 setcachedevice} {Gnormsize dup scale width 0 XOffset YOffset bitwidth XOffset add bitheight YOffset add setcachedevice rowbytes 0 ne{ XOffset YOffset translate newpath 0 0 moveto bitwidth bitheight scale sn{ /xSmt bitwidth x4 def /ySmt bitheight x4 def /rSmt xSmt rb def rSmt x8 ySmt true [xSmt 0 0 ySmt neg 0 ySmt] {rSmt ySmt mul string CharData cr get 1 index bitwidth bitheight rowbytes rSmt so smooth4} }{rowbytes 3 bitshift bitheight 4 add true [bitwidth 0 0 bitheight neg 0 bitheight 2 add] {CharData cr get} }ifelse imagemask }if }ifelse restore end end }bdf /bb{.96 exch div/Gnormsize mdf 2 index /Gkernmax mdf 1 index/Gdescent mdf 3 index div 4 1 roll 2 index div 1. 5 2 roll exch div 4 1 roll 4 array astore/FontBBox mdf }bdf /cdf{mfont/CharData get 3 1 roll put}bdf /bf{ mfont begin /FontType 3 def /FontMatrix [1 0 0 1 0 0] def /Encoding macvec def /BuildChar/bmbc load def end mfont definefont pop }bdf /wi LW 1 eq{{gsave 0 0 0 0 0 0 0 0 moveto lineto lineto lineto closepath clip stringwidth grestore}bind}{/stringwidth load}ifelse def /aps{0 get 124 eq}bdf /xc{s75 cvs dup}bdf /xp{put cvn}bdf /scs{xc 3 67 put dup 0 95 xp}bdf /sos{xc 3 79 xp}bdf /sbs{xc 1 66 xp}bdf /sis{xc 2 73 xp}bdf /sob{xc 2 79 xp}bdf /sss{xc 4 83 xp}bdf /dd{exch 1 index add 3 1 roll add exch}bdf /smc{moveto dup lws}bdf /kwn{FontDirectory 1 index known{findfont exch pop}}bdf /gl{1 currentgray sub setgray}bdf /mm{/mfont 10 dict def mfont begin /FontMatrix [1 0 0 1 0 0] def /FontType 3 def /Encoding macvec def /df 4 index findfont def /FontBBox [0 0 1 1] def /xda xdf/mbc xdf /BuildChar{wd begin/cr xdf/fd xdf/cs s1 dup 0 cr put def fd/mbc get exec end}def exec end mfont definefont}bdf /ac{dup scs kwn{exch findfont dup length 1 add dict begin cf fmv{/Encoding macvec def}if/StrokeWidth nlw 1000 mul pys div ps div dup 12 lt{pop 12}if def /PaintType 2 def currentdict /UniqueID known{/UniqueID UniqueID 16#A80000 xor def}if currentdict end definefont}ifelse}bdf /mb{dup sbs kwn{exch{pop}{bbc}{}mm}ifelse sfd}bdf /mo{dup sos kwn{exch{pop}{boc}{}mm}ifelse sfd}bdf /ms{dup sss kwn{exch{pop}{bsc}{}mm}ifelse sfd}bdf /ou{dup sos kwn{exch dup ac pop{scs findfont /df2 xdf}{aoc}{}mm}ifelse sfd}bdf /su{dup sss kwn{exch dup ac pop{scs findfont /df2 xdf}{asc}{}mm}ifelse sfd}bdf /ao{/fmv true def ou}bdf/as{/fmv true def su}bdf /vo{/fmv false def ou}bdf/vs{/fmv false def su}bdf /bbc{/da .03 def fd/df get setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth cs 0 0 smc da 0 smc da da smc 0 da moveto lws}bdf /boc{/da 1 ps div def fd/df get setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth cs 0 0 smc da 0 smc da da smc 0 da smc gl da 2. div dup moveto lws}bdf /bsc{/da 1 ps div def /ds .05 def/da2 da 2. div def fd/df get setfont gsave cs wi 1 index 0 ne{exch ds add da2 add exch}if grestore setcharwidth cs ds da2 add .01 add 0 smc 0 ds da2 sub translate 0 0 smc da 0 smc da da smc 0 da smc gl da 2. div dup moveto lws}bdf /aoc{fd/df get setfont gsave cs wi grestore setcharwidth gl cs 0 0 smc fd/df2 get setfont gl 0 0 moveto lws}bdf /asc{/da .05 def fd/df get setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth cs da .01 add 0 smc 0 da translate gl 0 0 smc gl fd/df2 get setfont 0 0 moveto lws}bdf /st{1000 mul usertime add dup 2147483647 gt{2147483647 sub}if def}bdf /the{usertime sub dup 0 lt exch -2147483648 gt and}bdf /6a 6 array def /2a 2 array def /3q 3 array def /qs{3 -1 roll sub exch 3 -1 roll sub exch}bdf /qa{3 -1 roll add exch 3 -1 roll add exch}bdf /qm{3 -1 roll 1 index mul 3 1 roll mul}bdf /qn{6a exch get mul}bdf /qA .166667 def/qB .833333 def/qC .5 def /qx{6a astore pop qA 0 qn qB 2 qn add qA 1 qn qB 3 qn add qB 2 qn qA 4 qn add qB 3 qn qA 5 qn add qC 2 qn qC 4 qn add qC 3 qn qC 5 qn add}bdf /qp{6 copy 12 -2 roll pop pop}bdf /qc{exch qp qx curveto}bdf /qi{{exch 4 copy 2a astore aload pop qa .5 qm newpath moveto}{exch 2 copy 6 -2 roll 2 qm qs 4 2 roll}ifelse}bdf /qq{{qc 2a aload pop qx curveto}{exch 4 copy qs qa qx curveto}ifelse}bdf /pt{currentpoint newpath moveto}bdf /qf{/fillflag true def}bdf /ec{1 and 0 ne{0 doop}if grestore currentpoint newpath moveto/fillflag false def}bdf /eu{currentpoint fp{0 ep}{grestore newpath}ifelse moveto/fillflag false def}bdf /bp{currentpoint newpath 2 copy moveto}bdf /ef{gsave fillflag{gsave eofill grestore}if}bdf /sm{0 exch{@1 eq{1 add}if}forall}bdf /lshow{4 1 roll exch/@1 exch def{1 index wi pop sub 1 index sm dv 0 @1 4 -1 roll widthshow}{1 index wi pop sub 1 index dup sm 10 mul exch length 1 sub add dv dup 10. mul 0 @1 4 -1 roll 0 6 -1 roll awidthshow}ifelse}bdf /setTxMode{sa 9 2 index put 3 eq{1}{0}ifelse setgray}bdf /SwToSym{{}mark false/Symbol/|______Symbol 0 rf 0 sa 6 get 0 ne{pop 1}{sa 7 get 0 eq{pop 2}if}ifelse sa 1 get 0 ne/|______Symbol sa 4 get 0 ne{vs}{sa 3 get 0 ne{vo}{fnt}ifelse}ifelse}bdf /mc{0 3 1 roll transform neg exch pop}bdf /ul{dup 0 ne sa 2 get 0 ne and{gsave 0 0 /UnderlinePosition kif{mc}{ps -10 div}ifelse/UnderlineThickness kif{mc}{ps 15 div}ifelse abs setlinewidth neg rmoveto sa 4 get 0 ne{gsave currentlinewidth 2. div dup rmoveto currentpoint newpath moveto 2 copy rlineto stroke grestore}if sa 3 get sa 4 get or 0 ne{gsave gl 2 copy rlineto stroke grestore rlineto strokepath nlw pys div setlinewidth}{rlineto}ifelse stroke grestore}{pop}ifelse}bdf /sgt{2 copy known{get true}{pop pop false}ifelse}bdf /kif{currentfont dup/FontMatrix get exch/FontInfo sgt{true}{currentfont/df sgt {dup/FontInfo sgt{3 1 roll/FontMatrix get mtx concatmatrix exch true}{pop pop pop false} ifelse}{pop pop false}ifelse}ifelse{3 -1 roll sgt{exch true}{pop false}ifelse}{false}ifelse}bdf /blank/Times-Roman findfont/CharStrings get/space get def /macvec 256 array def /NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI /DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US macvec 0 32 getinterval astore pop macvec 32/Times-Roman findfont/Encoding get 32 96 getinterval putinterval macvec dup 39/quotesingle put 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/blank/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand/Acircumflex/Ecircumflex/Aacute /Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex /apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron macvec 128 128 getinterval astore pop {}mark true/Courier/|______Courier 0 rf {/Metrics 21 dict begin/zero 600 def/one 600 def/two 600 def/three 600 def/four 600 def/five 600 def/six 600 def/seven 600 def/eight 600 def /nine 600 def/comma 600 def/period 600 def/dollar 600 def/numbersign 600 def/percent 600 def/plus 600 def/hyphen 600 def/E 600 def/parenleft 600 def/parenright 600 def/space 600 def currentdict end def currentdict/UniqueID known{/UniqueID 16#800000 def}if/FontBBox FontBBox 4 array astore def}mark true/Helvetica/|______Seattle 1 rf /oldsettransfer/settransfer load def /concatprocs{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}def /settransfer{currenttransfer concatprocs oldsettransfer}def /PaintBlack{{1 exch sub}settransfer gsave newpath clippath 1 setgray fill grestore}def /od{(Rvd\001\001\000\000\177) fg copy pop txpose 1 0 mtx defaultmatrix dtransform exch atan/pa exch def newpath clippath mark {transform{itransform moveto}}{transform{itransform lineto}} {6 -2 roll transform 6 -2 roll transform 6 -2 roll transform {itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}} {{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}bdf /cd{}bdf /op{/sfl false def/pm save def}bdf /cp{ pop pop %UNI ignore two args pm restore }bdf /px{0 3 1 roll tp tt}bdf /psb{/us save def}bdf /pse{us restore}bdf /ct 40 string def /nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if} forall clip newpath moveto}bdf /kp{ct 0 2 index length 2 index 39 2 index put getinterval copy cvx exec mx3 currentmatrix pop}bdf end % dict "md" BS 0 SI 10 SS 5 10 0 9000 46800 GB md begin T T -31 -30 761 582 100 72 72 1 F F F F T T T psu (hxtmac.art.cs.cmu.edu; document: periodic.md)jn 0 mf od op 0 0 xl 1 1 pen 0 0 gm (nc 0 0 720 540 6 rc)kp 98 447 118 467 156 204 1 ar 108 60 gm 108 448 lin 72 60 gm 144 60 lin 47 43 gm 1 setTxMode 1 fs bu fc {}mark T /Helvetica-Bold /Helvetica-Bold 0 rf bn 12 fz bu fc 2 F /Helvetica-Bold fnt bn 0.11314 0.(Current)ashow 60 43 gm 0.33270 0.(Time)ashow 108 159 gm 0 gr 144 159 lin 108 204 gm 144 204 lin 72 267 gm 144 267 lin 108 294 gm 144 294 lin 108 339 gm 144 339 lin 0 0 gm 32 gr 97 159 109 205 4 rc 0 gr 97.5 159.5 108.5 204.5 0 rc 32 gr 97 294 109 340 4 rc 0 gr 97.5 294.5 108.5 339.5 0 rc 73 405 gm 145 405 lin 72 132 gm 144 132 lin 0 0 gm 62 258 82 278 156 204 1 ar 62 123 82 143 336 384 1 ar 72 140 gm 72 259 lin 128 439 gm 1 setTxMode 0.44497 0.(time)ashow 158 127 gm (S)show 156 256 gm 0.82910 0.(S+T)ashow 157 394 gm 0.66242 0.(S+2T)ashow 108 150 gm 0 gr 144 150 lin 108 285 gm 144 285 lin 137 152 gm 1 setTxMode (d)show 138 287 gm (d)show 138 137 gm (O)show 139 271 gm (O)show 138 175 gm (C)show 137 311 gm (C)show 67 198 gm (T)show 67 332 gm (T)show 0 0 gm 0 gr 62 393 82 413 156 204 1 ar 62 258 82 278 336 384 1 ar 72 275 gm 72 394 lin 193 64 gm 1 setTxMode -0.11534 0.(S: Start Time T: Period)ashow 206 64 gm -0.06199 0.(O: Phase Offset C: Worst Case Execution Time)ashow 219 64 gm -0.18437 0.(D: Deadline d: Scheduling Delay)ashow 158 379 gm (D)show 156 242 gm (D)show 72 245 gm 0 gr 144 245 lin 72 383 gm 144 383 lin F T cp cd end GE ES %%EndDocument @endspecial 2 810 a fj(Figure)9 b(1:)15 b(T)o(iming)9 b(attributes)g(of)h (a)g(periodic)g(thread)-118 859 y 1026 3 v 130 x fm(2)60 b(Real-T)o(ime)12 b (Mach)-118 1087 y fj(The)17 b(objective)e(of)h(Real-T)o(ime)g(Mach)h(\(R)m (T)l(-Mach\))g(is)e(to)h(develop)-118 1137 y(a)e(real-time)f(version)f(of)h (Mach)h(which)f(can)g(support)f(a)i(predictable)-118 1186 y(real-time)k(compu\ ting)f(environment)g(together)h(with)f(a)i(real-time)-118 1236 y(toolset.)29 b (Because)17 b(of)e(the)g(high)f(portability)f(of)i(Mach,)i(R)m(T)m(-Mach)-118 1286 y(should)10 b(be)i(able)f(to)g(provide)f(a)i(common)g(real-time)f(comput\ ing)f(en-)-118 1336 y(vironment)k(in)g(various)h(machine)h(architectures)f (including)e(single)-118 1386 y(board)d(computer)o(-based)g(targets.)-77 1438 y(In)16 b(this)f(section,)j(we)f(will)e(describe)h(the)g(new)g(features)h(of) f(R)m(T)m(-)-118 1488 y(Mach.)47 b(The)21 b(current)g(version)f(of)g(R)m(T)m (-Mach)h(supports)e(a)i(real-)-118 1538 y(time)11 b(thread)g(model,)h(integra\ ted)e(real-time)h(thread)g(scheduler)o(,)h(pol-)-118 1587 y(icy/mechanism)e (separation)f(in)g(the)g(scheduler)o(,)h(real-time)f(synchro-)-118 1637 y(niz\ ation)g(mechanisms,)j(and)e(memory)h(resident)f(objects.)-118 1770 y ff(2.1) 50 b(R)n(T)l(-Thr)o(ead)12 b(Model)-118 1853 y fj(The)7 b(objective)f(of)h (the)f(R)m(T)m(-thread)g(model)h(is)f(to)g(support)g(a)h(predictable)-118 1903 y(real-time)j(scheduler)h(and)g(provide)e(a)i(uniform)e(system)i(interface)g (to)-118 1952 y(both)5 b(real-time)h(and)g(non-real-time)g(threads.)13 b(Unli\ ke)6 b(the)g(traditional)-118 2002 y(real-time)14 b(systems)g(which)f(often)h (use)g(a)g(cyclic)g(executive)g(model,)-118 2052 y(the)7 b(R)m(T)m(-Mach)h (supports)e(an)h(integrated)g(time-driven)f(scheduler)h([26])-118 2102 y(base\ d)k(on)f(a)g(rate)h(monotonic)e(scheduling)g(paradigm)h([12,)h(13)o(].)-77 2154 y(A)17 b(thread)g(can)h(be)f(de\256ned)h(for)e(a)i(real-time)f(or)f(non-\ real-time)-118 2204 y(activity)l(.)f(Each)d(thread)e(is)g(speci\256ed)h(by)f (at)h(least)f(a)h(procedure)f(name)-118 2254 y(and)i(a)g(stack)g(descriptor)e (which)i(speci\256es)g(the)g(size)g(and)g(address)g(of)-118 2304 y(the)c(loca\ l)g(stack)g(region.)14 b(For)8 b(a)g(real-time)g(thread,)h(additional)d fi (timing)-118 2354 y(attributes)k fj(must)h(be)h(de\256ned)g(by)g(a)g(timing)e (attribute)g(descriptor)m(.)19 b(A)-118 2403 y(real-time)10 b(thread)g(can)h (be)f(also)g(de\256ned)g(as)h(a)g fi(har)n(d)f fj(real-time)g(or)f fi(soft) -118 2453 y fj(real-time)j(thread.)22 b(By)13 b(hard)f(real-time)h(thread,)g (we)g(mean)h(that)e(the)-118 2503 y(thread)h(must)f(complete)i(its)e(activiti\ es)g(by)g(its)h fi(har)n(d)g fj(deadline)f(time,)-118 2553 y(otherwise)g(it)f (will)g(cause)j(undesirable)e(damage)h(or)f(a)h(fatal)f(error)g(to)-118 2603 y (the)e(system.)17 b(The)12 b(soft)e(real-time)g(thread,)h(on)g(the)f(other)g (hand,)h(does)-118 2652 y(not)f(have)i(such)f(a)h(hard)e(deadline,)i(and)f (it)f(still)g(makes)i(sense)g(for)f(the)-118 2702 y(system)g(to)e(complete)i (the)f(thread)g(even)h(if)f(it)f(passed)i(its)f(critical)g(\(i.e.)-118 2752 y fi(soft)f fj(deadline\))h(time.)982 38 y 1026 3 v 50 x @beginspecial -90 @hoffset -720 @voffset @setspecial %%BeginDocument: fig2.ps /BS {/SV save def 0.0 792.0 translate .01 -.01 scale} bind def /ES {showpage SV restore} bind def /SC {setrgbcolor} bind def /FMTX matrix def /RDF {WFT SLT 0.0 eq {SSZ 0.0 0.0 SSZ neg 0.0 0.0 FMTX astore} {SSZ 0.0 SLT neg sin SLT cos div SSZ mul SSZ neg 0.0 0.0 FMTX astore} ifelse makefont setfont} bind def /SLT 0.0 def /SI { /SLT exch cvr def RDF} bind def /WFT /Courier findfont def /SF { /WFT exch findfont def RDF} bind def /SSZ 1000.0 def /SS { /SSZ exch 100.0 mul def RDF} bind def /AF { /WFT exch findfont def /SSZ exch 100.0 mul def RDF} bind def /MT /moveto load def /XM {currentpoint exch pop moveto} bind def /UL {gsave newpath moveto dup 2.0 div 0.0 exch rmoveto setlinewidth 0.0 rlineto stroke grestore} bind def /LH {gsave newpath moveto setlinewidth 0.0 rlineto gsave stroke grestore} bind def /LV {gsave newpath moveto setlinewidth 0.0 exch rlineto gsave stroke grestore} bind def /BX {gsave newpath moveto setlinewidth exch dup 0.0 rlineto exch 0.0 exch neg rlineto neg 0.0 rlineto closepath gsave stroke grestore} bind def /BX1 {grestore} bind def /BX2 {setlinewidth 1 setgray stroke grestore} bind def /PB {/PV save def newpath 3 -1 roll sub translate 100.0 -100.0 scale /showpage {} def} bind def /PE {PV restore} bind def /GB {/PV save def newpath translate rotate div dup scale 100.0 -100.0 scale /showpage {} def} bind def /GE {PV restore} bind def /FB {dict dup /FontMapDict exch def begin} bind def /FM {cvn exch cvn exch def} bind def /FE {end /original-findfont /findfont load def /findfont {dup FontMapDict exch known{FontMapDict exch get} if original-findfont} def} bind def /BC {gsave moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath clip} bind def /EC /grestore load def /SH /show load def /MX {exch show 0.0 rmoveto} bind def /W {0 32 4 -1 roll widthshow} bind def /WX {0 32 5 -1 roll widthshow 0.0 rmoveto} bind def /RC {100.0 -100.0 scale 612.0 0.0 translate -90.0 rotate .01 -.01 scale} bind def /URC {100.0 -100.0 scale 90.0 rotate -612.0 0.0 translate .01 -.01 scale} bind def /RCC {100.0 -100.0 scale 0.0 -792.0 translate 90.0 rotate .01 -.01 scale} bind def /URCC {100.0 -100.0 scale -90.0 rotate 0.0 792.0 translate .01 -.01 scale} bind def systemdict/currentpacking known{currentpacking true setpacking}if /LW{save statusdict/product get(LaserWriter)anchorsearch exch pop{length 0 eq{1}{2}ifelse}{0}ifelse exch restore}bind def /LW+{LW 2 eq}bind def /ok{systemdict/statusdict known dup{LW 0 gt and}if}bind def /md 250 dict def md begin /av 65 def /T true def /F false def /mtx matrix def /s75 75 string def /s8 8 string def /s1 ( ) def /pxs 1 def /pys 1 def 1 0 mtx defaultmatrix dtransform exch atan/pa exch def /nlw .24 def /ppr [-32 -29.52 762 582.48] def % default printable page rectangle /pgs 1 def /por true def /xb 500 array def /so true def /fillflag false def /pnm 1 def /fmv true def /sfl false def /ma 0 def /invertflag false def /xflip false def /yflip false def /noflips true def /scaleby96 false def /fNote true def /fBitStretch true def /fg (Rvd\001\001\000\000\177) def /bdf{bind def}bind def /xdf{exch def}bdf /xl{neg exch neg translate}bdf /fp{pnsh 0 ne pnsv 0 ne and}bdf /nop{}bdf/lnop[/nop load]cvx bdf /vrb[ {fp{gsave 1 setlinewidth pnsh pnsv scale stroke grestore}if newpath}bind /eofill load dup /newpath load 2 index dup {clip newpath}bind {}bind dup 2 copy ]def currentscreen/spf xdf/rot xdf/freq xdf /doop{vrb exch get exec}bdf /psu{ pop /fNote xdf /fBitStretch xdf /scaleby96 xdf pop F %UNI force yflip off /yflip xdf pop F %UNI force xflip off /xflip xdf pop F %UNI force black/white reversing off /invertflag xdf xflip yflip or{/noflips false def}if /pgs xdf % set pgs 2 index % get copy of scale .72 mul exch div /pys xdf % pys = (.72 * scale) / dpiy % S: smooth por bbs1 bbs2 bbey bbex scale dpix div .72 mul /pxs xdf % pxs = .72 * (scale / dpix) 2 index pxs mul 4 index pys mul neg translate %UNI xlate for scribe ppr astore pop % put "bbs1 bbs2 bbey bbex" into ppr pop T %UNI force portrait on /por xdf % set por pop F %UNI force smooth request off sn and /so xdf % set "so" T if smooth req'd AND avail in LW }bdf /txpose{ pxs pys scale ppr aload pop por { noflips{pop exch neg exch translate pop 1 -1 scale}if xflip yflip and{ pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate }if xflip yflip not and{ pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate }if yflip xflip not and{ ppr 1 get neg ppr 0 get neg translate }if } { noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{ translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate }if xflip yflip not and{ translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate }if yflip xflip not and{ translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate }if } ifelse %UNI statusdict begin waittimeout 300 lt{/waittimeout 300 def}if end scaleby96{ ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate }if }bdf /fr{3 index 3 index xl ppr aload pop 3 -1 roll 2 mul add 3 1 roll exch 2 mul add 6 2 roll 3 -1 roll sub 3 1 roll exch sub 3 1 roll exch 3 -1 roll div 3 1 roll div exch scale}bdf /lws{show}bdf /tv{show pop pop}bdf /obl{{0.212557 mul}{pop 0}ifelse}bdf /sfd{ps fg 5 -1 roll get mul 100 div 0 ps 5 -1 roll obl ps neg 0 0 6a astore makefont setfont}bdf /fnt{findfont sfd}bdf /bt{sa 3 1 roll 3 index and put}bdf /sa(\000\000\000\000\000\000\000\000\000\000)def /fs{0 1 bt 1 2 bt 2 4 bt 3 8 bt 4 16 bt 5 32 bt 6 64 bt 7 128 bt sa exch 8 exch put}bdf /mx1 matrix def /mx2 matrix def /mx3 matrix def /bu{currentpoint currentgray currentlinewidth currentlinecap currentlinejoin currentdash exch aload length fg 5 sfl{1}{0}ifelse put pnsv pnsh 2t aload pop 3a aload pop mx2 aload pop mx1 aload pop mtx currentmatrix aload pop mx3 aload pop ps pm restore/ps xdf mx3 astore pop}bdf /bn{/pm save def mx3 setmatrix newpath 0 0 moveto ct dup 39 get 0 exch getinterval cvx exec mtx astore setmatrix mx1 astore pop mx2 astore pop 3a astore pop 2t astore pop/pnsh xdf/pnsv xdf gw /sfl fg 5 get 0 ne def array astore exch setdash setlinejoin setlinecap setlinewidth setgray moveto}bdf /fc{save vmstatus exch sub 50000 lt {(%%[|0|]%%)=print flush}if pop restore}bdf /tc{32768 div add 3 1 roll 32768 div add 2t astore pop}bdf /3a [0 0 0] def /2t 2 array def /tp{3a astore pop}bdf /tt{mx2 currentmatrix pop currentpoint 2 copy 2t aload pop qa 2 copy translate 3a aload pop exch dup 0 eq {pop}{1 eq{-1 1}{1 -1}ifelse scale}ifelse rotate pop neg exch neg exch translate moveto}bdf /te{mx2 setmatrix}bdf /th{3 -1 roll div 3 1 roll exch div 2 copy mx1 scale pop scale/sfl true def}bdf /tu{1 1 mx1 itransform scale/sfl false def}bdf /ts{1 1 mx1 transform scale/sfl true def}bdf /fz{/ps xdf}bdf /dv{dup 0 ne{div}{pop}ifelse}bdf /pop4{pop pop pop pop}bdf /it{sfl{mx1 itransform}if}bdf /gm{exch it moveto}bdf/rm{it rmoveto}bdf /lm{currentpoint sfl{mx1 transform}if exch pop sub 0 exch it rmoveto}bdf /fm{statusdict/manualfeed known}bdf /se{statusdict exch/manualfeed exch put}bdf /mf{ pop %UNI never allow manual feed }bdf /jn{ pop %UNI don't set job name }bdf /pen{pnm mul/pnsh xdf pnm mul/pnsv xdf pnsh setlinewidth}bdf /min{2 copy gt{exch}if pop}bdf /max{2 copy lt{exch}if pop}bdf /dh{fg 6 1 put array astore exch pop exch pop exch setdash}bdf /ih[currentdash]def /rh{fg 6 0 put ih aload pop setdash}bdf /dl{gsave nlw pys div setlinewidth 0 setgray}bdf /dlin{exch currentpoint currentlinewidth 2 div dup translate newpath moveto lineto currentpoint stroke grestore moveto}bdf /lin{fg 6 get 0 ne{exch lineto currentpoint 0 doop moveto} {exch currentpoint/pnlv xdf/pnlh xdf gsave newpath/@1 xdf/@2 xdf fp{pnlh @2 lt{pnlv @1 ge {pnlh pnlv moveto @2 @1 lineto pnsh 0 rlineto 0 pnsv rlineto pnlh pnsh add pnlv pnsv add lineto pnsh neg 0 rlineto} {pnlh pnlv moveto pnsh 0 rlineto @2 pnsh add @1 lineto 0 pnsv rlineto pnsh neg 0 rlineto pnlh pnlv pnsv add lineto}ifelse}{pnlv @1 gt {@2 @1 moveto pnsh 0 rlineto pnlh pnsh add pnlv lineto 0 pnsv rlineto pnsh neg 0 rlineto @2 @1 pnsv add lineto}{pnlh pnlv moveto pnsh 0 rlineto 0 pnsv rlineto @2 pnsh add @1 pnsv add lineto pnsh neg 0 rlineto 0 pnsv neg rlineto}ifelse}ifelse closepath fill}if @2 @1 grestore moveto}ifelse}bdf /gw{/pnm fg 3 get fg 4 get div def}bdf /lw{fg exch 4 exch put fg exch 3 exch put gw pnsv pnsh pen}bdf /barc{/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf /@6 xdf/@7 xdf/@8 xdf gsave @5 @7 add 2 div @6 @8 add 2 div translate newpath 0 0 moveto @5 @7 sub @6 @8 sub mtx currentmatrix pop scale @1{newpath}if 0 0 0.5 @4 @3 arc @4 @3 sub abs 360 ge{closepath}if mtx setmatrix @2 doop grestore}bdf /ar{dup 0 eq barc}bdf /ov{0 exch 360 exch true barc}bdf /rc{/@t xdf currentpoint 6 2 roll newpath 4 copy 4 2 roll exch moveto 6 -1 roll lineto lineto lineto closepath @t doop moveto}bdf /mup{dup pnsh 2 div le exch pnsv 2 div le or}bdf /rr{/@1 xdf 2. div/@2 xdf 2. div/@3 xdf /@4 xdf/@5 xdf/@6 xdf/@7 xdf @7 @5 eq @6 @4 eq @2 mup or or{@7 @6 @5 @4 @1 rc} {@4 @6 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse @5 @7 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse @1 0 eq{/@2 @2 pnsh 2 div 2 copy gt{sub def}{0 pop4}ifelse}if currentpoint newpath @4 @6 add 2. div @7 moveto @4 @7 @4 @5 @2 arcto pop4 @4 @5 @6 @5 @2 arcto pop4 @6 @5 @6 @7 @2 arcto pop4 @6 @7 @4 @7 @2 arcto pop4 closepath @1 doop moveto}ifelse}bdf /pr{gsave newpath/pl{exch moveto/pl{exch lineto}def}def}bdf /pl{exch lineto}bdf /ep{dup 0 eq{{moveto}{exch lin}{}{(%%[|1|]%%)= flush}pathforall pop grestore}{doop grestore}ifelse currentpoint newpath moveto}bdf /gr{64. div setgray}bdf /pat{s8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi s8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}setscreen gr}bdf /sg{freq rot/spf load setscreen gr}bdf /dc{transform round .5 sub exch round .5 sub exch itransform}bdf /sn{userdict/smooth4 known}bdf /x8{3 bitshift}bdf /x4{2 bitshift}bdf /d4{-2 bitshift}bdf /d8{-3 bitshift}bdf /rb{15 add -4 bitshift 1 bitshift}bdf /db{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf/@6 @5 @3 4 add mul def dc translate scale/xdbit 1 1 idtransform abs/ydbit exch def abs def{0 0 1 ydbit add 1 10 rc clip}if @1 0 eq @1 4 eq or{1 setgray ydbit 0 1 ydbit add 1 2 rc}if @1 3 eq @1 7 eq or{1}{0}ifelse setgray/@9 @1 0 eq @1 1 eq @1 3 eq or or invertflag xor def/@13 @6 def @2 fBitStretch or{/@10 @4 x4 def/@11 @3 x4 def/@12 @10 rb def/@13 @12 @11 mul def/@15 1 1 dtransform abs/calcY 1 index def round cvi/@14 exch def abs/calcX 1 index def round cvi scaleby96 not{1 add}if def/@16 @15 rb def/@17 @16 @14 mul def}if sn @13 60000 lt and @2 fBitStretch or and{mtx currentmatrix dup 1 get exch 2 get 0. eq exch 0. eq and @17 60000 lt and fBitStretch and{@16 3 bitshift @14 @9 [calcX 0 0 calcY 0 0]{@17 string @13 string currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4 @10 @11 @12 dup string 5 index @15 @14 @16 dup string stretch}imagemask}{@12 x8 @11 @9 [@10 0 0 @11 0 0]{@13 string currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4}imagemask}ifelse}{@5 3 bitshift @3 4 add @9 [@4 0 0 @3 0 2]{currentfile @6 string readhexstring pop}imagemask}ifelse @7 restore}bdf /wd 16 dict def /mfont 14 dict def /mdf{mfont wcheck not{/mfont 14 dict def}if mfont begin xdf end}bdf /cf{{1 index/FID ne{def}{pop pop}ifelse}forall}bdf /rf{/@1 exch def/@2 exch def FontDirectory @2 known{cleartomark pop}{findfont dup begin dup length @1 add dict begin cf {/Encoding macvec def}{Encoding dup length array copy/Encoding exch def counttomark 2 idiv{Encoding 3 1 roll put}repeat}ifelse pop exec currentdict end end @2 exch definefont pop}ifelse}bdf /bmbc{exch begin wd begin /cr xdf save CharTable cr 6 mul 6 getinterval{}forall /bitheight xdf/bitwidth xdf .96 div/width xdf Gkernmax add/XOffset xdf Gdescent add/YOffset xdf/rowbytes xdf rowbytes 255 eq{0 0 0 0 0 0 setcachedevice} {Gnormsize dup scale width 0 XOffset YOffset bitwidth XOffset add bitheight YOffset add setcachedevice rowbytes 0 ne{ XOffset YOffset translate newpath 0 0 moveto bitwidth bitheight scale sn{ /xSmt bitwidth x4 def /ySmt bitheight x4 def /rSmt xSmt rb def rSmt x8 ySmt true [xSmt 0 0 ySmt neg 0 ySmt] {rSmt ySmt mul string CharData cr get 1 index bitwidth bitheight rowbytes rSmt so smooth4} }{rowbytes 3 bitshift bitheight 4 add true [bitwidth 0 0 bitheight neg 0 bitheight 2 add] {CharData cr get} }ifelse imagemask }if }ifelse restore end end }bdf /bb{.96 exch div/Gnormsize mdf 2 index /Gkernmax mdf 1 index/Gdescent mdf 3 index div 4 1 roll 2 index div 1. 5 2 roll exch div 4 1 roll 4 array astore/FontBBox mdf }bdf /cdf{mfont/CharData get 3 1 roll put}bdf /bf{ mfont begin /FontType 3 def /FontMatrix [1 0 0 1 0 0] def /Encoding macvec def /BuildChar/bmbc load def end mfont definefont pop }bdf /wi LW 1 eq{{gsave 0 0 0 0 0 0 0 0 moveto lineto lineto lineto closepath clip stringwidth grestore}bind}{/stringwidth load}ifelse def /aps{0 get 124 eq}bdf /xc{s75 cvs dup}bdf /xp{put cvn}bdf /scs{xc 3 67 put dup 0 95 xp}bdf /sos{xc 3 79 xp}bdf /sbs{xc 1 66 xp}bdf /sis{xc 2 73 xp}bdf /sob{xc 2 79 xp}bdf /sss{xc 4 83 xp}bdf /dd{exch 1 index add 3 1 roll add exch}bdf /smc{moveto dup lws}bdf /kwn{FontDirectory 1 index known{findfont exch pop}}bdf /gl{1 currentgray sub setgray}bdf /mm{/mfont 10 dict def mfont begin /FontMatrix [1 0 0 1 0 0] def /FontType 3 def /Encoding macvec def /df 4 index findfont def /FontBBox [0 0 1 1] def /xda xdf/mbc xdf /BuildChar{wd begin/cr xdf/fd xdf/cs s1 dup 0 cr put def fd/mbc get exec end}def exec end mfont definefont}bdf /ac{dup scs kwn{exch findfont dup length 1 add dict begin cf fmv{/Encoding macvec def}if/StrokeWidth nlw 1000 mul pys div ps div dup 12 lt{pop 12}if def /PaintType 2 def currentdict /UniqueID known{/UniqueID UniqueID 16#A80000 xor def}if currentdict end definefont}ifelse}bdf /mb{dup sbs kwn{exch{pop}{bbc}{}mm}ifelse sfd}bdf /mo{dup sos kwn{exch{pop}{boc}{}mm}ifelse sfd}bdf /ms{dup sss kwn{exch{pop}{bsc}{}mm}ifelse sfd}bdf /ou{dup sos kwn{exch dup ac pop{scs findfont /df2 xdf}{aoc}{}mm}ifelse sfd}bdf /su{dup sss kwn{exch dup ac pop{scs findfont /df2 xdf}{asc}{}mm}ifelse sfd}bdf /ao{/fmv true def ou}bdf/as{/fmv true def su}bdf /vo{/fmv false def ou}bdf/vs{/fmv false def su}bdf /bbc{/da .03 def fd/df get setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth cs 0 0 smc da 0 smc da da smc 0 da moveto lws}bdf /boc{/da 1 ps div def fd/df get setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth cs 0 0 smc da 0 smc da da smc 0 da smc gl da 2. div dup moveto lws}bdf /bsc{/da 1 ps div def /ds .05 def/da2 da 2. div def fd/df get setfont gsave cs wi 1 index 0 ne{exch ds add da2 add exch}if grestore setcharwidth cs ds da2 add .01 add 0 smc 0 ds da2 sub translate 0 0 smc da 0 smc da da smc 0 da smc gl da 2. div dup moveto lws}bdf /aoc{fd/df get setfont gsave cs wi grestore setcharwidth gl cs 0 0 smc fd/df2 get setfont gl 0 0 moveto lws}bdf /asc{/da .05 def fd/df get setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth cs da .01 add 0 smc 0 da translate gl 0 0 smc gl fd/df2 get setfont 0 0 moveto lws}bdf /st{1000 mul usertime add dup 2147483647 gt{2147483647 sub}if def}bdf /the{usertime sub dup 0 lt exch -2147483648 gt and}bdf /6a 6 array def /2a 2 array def /3q 3 array def /qs{3 -1 roll sub exch 3 -1 roll sub exch}bdf /qa{3 -1 roll add exch 3 -1 roll add exch}bdf /qm{3 -1 roll 1 index mul 3 1 roll mul}bdf /qn{6a exch get mul}bdf /qA .166667 def/qB .833333 def/qC .5 def /qx{6a astore pop qA 0 qn qB 2 qn add qA 1 qn qB 3 qn add qB 2 qn qA 4 qn add qB 3 qn qA 5 qn add qC 2 qn qC 4 qn add qC 3 qn qC 5 qn add}bdf /qp{6 copy 12 -2 roll pop pop}bdf /qc{exch qp qx curveto}bdf /qi{{exch 4 copy 2a astore aload pop qa .5 qm newpath moveto}{exch 2 copy 6 -2 roll 2 qm qs 4 2 roll}ifelse}bdf /qq{{qc 2a aload pop qx curveto}{exch 4 copy qs qa qx curveto}ifelse}bdf /pt{currentpoint newpath moveto}bdf /qf{/fillflag true def}bdf /ec{1 and 0 ne{0 doop}if grestore currentpoint newpath moveto/fillflag false def}bdf /eu{currentpoint fp{0 ep}{grestore newpath}ifelse moveto/fillflag false def}bdf /bp{currentpoint newpath 2 copy moveto}bdf /ef{gsave fillflag{gsave eofill grestore}if}bdf /sm{0 exch{@1 eq{1 add}if}forall}bdf /lshow{4 1 roll exch/@1 exch def{1 index wi pop sub 1 index sm dv 0 @1 4 -1 roll widthshow}{1 index wi pop sub 1 index dup sm 10 mul exch length 1 sub add dv dup 10. mul 0 @1 4 -1 roll 0 6 -1 roll awidthshow}ifelse}bdf /setTxMode{sa 9 2 index put 3 eq{1}{0}ifelse setgray}bdf /SwToSym{{}mark false/Symbol/|______Symbol 0 rf 0 sa 6 get 0 ne{pop 1}{sa 7 get 0 eq{pop 2}if}ifelse sa 1 get 0 ne/|______Symbol sa 4 get 0 ne{vs}{sa 3 get 0 ne{vo}{fnt}ifelse}ifelse}bdf /mc{0 3 1 roll transform neg exch pop}bdf /ul{dup 0 ne sa 2 get 0 ne and{gsave 0 0 /UnderlinePosition kif{mc}{ps -10 div}ifelse/UnderlineThickness kif{mc}{ps 15 div}ifelse abs setlinewidth neg rmoveto sa 4 get 0 ne{gsave currentlinewidth 2. div dup rmoveto currentpoint newpath moveto 2 copy rlineto stroke grestore}if sa 3 get sa 4 get or 0 ne{gsave gl 2 copy rlineto stroke grestore rlineto strokepath nlw pys div setlinewidth}{rlineto}ifelse stroke grestore}{pop}ifelse}bdf /sgt{2 copy known{get true}{pop pop false}ifelse}bdf /kif{currentfont dup/FontMatrix get exch/FontInfo sgt{true}{currentfont/df sgt {dup/FontInfo sgt{3 1 roll/FontMatrix get mtx concatmatrix exch true}{pop pop pop false} ifelse}{pop pop false}ifelse}ifelse{3 -1 roll sgt{exch true}{pop false}ifelse}{false}ifelse}bdf /blank/Times-Roman findfont/CharStrings get/space get def /macvec 256 array def /NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI /DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US macvec 0 32 getinterval astore pop macvec 32/Times-Roman findfont/Encoding get 32 96 getinterval putinterval macvec dup 39/quotesingle put 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/blank/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand/Acircumflex/Ecircumflex/Aacute /Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex /apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron macvec 128 128 getinterval astore pop {}mark true/Courier/|______Courier 0 rf {/Metrics 21 dict begin/zero 600 def/one 600 def/two 600 def/three 600 def/four 600 def/five 600 def/six 600 def/seven 600 def/eight 600 def /nine 600 def/comma 600 def/period 600 def/dollar 600 def/numbersign 600 def/percent 600 def/plus 600 def/hyphen 600 def/E 600 def/parenleft 600 def/parenright 600 def/space 600 def currentdict end def currentdict/UniqueID known{/UniqueID 16#800000 def}if/FontBBox FontBBox 4 array astore def}mark true/Helvetica/|______Seattle 1 rf /oldsettransfer/settransfer load def /concatprocs{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}def /settransfer{currenttransfer concatprocs oldsettransfer}def /PaintBlack{{1 exch sub}settransfer gsave newpath clippath 1 setgray fill grestore}def /od{(Rvd\001\001\000\000\177) fg copy pop txpose 1 0 mtx defaultmatrix dtransform exch atan/pa exch def newpath clippath mark {transform{itransform moveto}}{transform{itransform lineto}} {6 -2 roll transform 6 -2 roll transform 6 -2 roll transform {itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}} {{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}bdf /cd{}bdf /op{/sfl false def/pm save def}bdf /cp{ pop pop %UNI ignore two args pm restore }bdf /px{0 3 1 roll tp tt}bdf /psb{/us save def}bdf /pse{us restore}bdf /ct 40 string def /nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if} forall clip newpath moveto}bdf /kp{ct 0 2 index length 2 index 39 2 index put getinterval copy cvx exec mx3 currentmatrix pop}bdf end % dict "md" BS 0 SI 10 SS 5 10 0 9000 46800 GB md begin T T -31 -30 761 582 100 72 72 1 F F F F T T T psu (hxtmac.art.cs.cmu.edu; document: aperiodic.md)jn 0 mf od op 0 0 xl 1 1 pen 0 0 gm (nc 0 0 720 540 6 rc)kp 107 468 127 488 156 204 1 ar 117 54 gm 117 469 lin 81 54 gm 153 54 lin 47 37 gm 1 setTxMode 1 fs bu fc {}mark T /Helvetica-Bold /Helvetica-Bold 0 rf bn 12 fz bu fc 2 F /Helvetica-Bold fnt bn 0.11314 0.(Current)ashow 60 37 gm 0.33270 0.(Time)ashow 117 63 gm 0 gr 153 63 lin 117 108 gm 153 108 lin 99 198 gm 153 198 lin 81 234 gm 153 234 lin 117 243 gm 153 243 lin 117 288 gm 153 288 lin 0 0 gm 32 gr 106 63 118 109 4 rc 0 gr 106.5 63.5 117.5 108.5 0 rc 32 gr 106 243 118 289 4 rc 0 gr 106.5 243.5 117.5 288.5 0 rc 99 378 gm 153 378 lin 82 430 gm 154 430 lin 0 0 gm 71 225 91 245 156 204 1 ar 71 45 91 65 336 384 1 ar 81 62 gm 81 226 lin 0 0 gm 71 422 91 442 156 204 1 ar 71 225 91 245 336 384 1 ar 81 242 gm 81 423 lin 134 456 gm 1 setTxMode 0.44497 0.(time)ashow 166 47 gm 0.65817 0.(e1)ashow 167 227 gm 0.65817 0.(e2)ashow 167 423 gm 0.65817 0.(e3)ashow 146 56 gm (d)show 147 79 gm (C)show 148 262 gm (C)show 167 193 gm (D)show 166 374 gm (D)show 77 127 gm (A)show 77 325 gm (A+)show currentfont SwToSym (D)show setfont 148 236 gm (d)show 205 61 gm -0.00561 0.(A: Worst Case Interarrival Time C: Worst Case Execution Time)ashow 218 61 gm -0.17344 0.(D: Deadline ei: External Event)ashow 231 61 gm 0.08789 0. 32 0.00878 0.(d: Scheduling Delay)awidthshow F T cp cd end GE ES %%EndDocument @endspecial 1083 810 a(Figure)f(2:)15 b(T)n(iming)10 b(attributes)f(of)h(an) g(aperiodic)g(thread)982 859 y 1026 3 v 1024 989 a(A)e(real-time)g(thread)f (can)i(be)f(also)g(de\256ned)g(as)g(a)h fi(periodic)e fj(or)g fi(aperi-)982 1038 y(odic)g fj(thread)g(based)g(on)g(the)f(nature)h(of)g(its)f(activity)l (.)14 b(A)7 b(periodic)f(thread)982 1088 y fe(P)1007 1094 y fd(i)1032 1088 y fj(is)13 b(de\256ned)h(by)f(the)g(worst)g(case)i(execution)e(time)h fe(C)1810 1094 y fd(i)1820 1088 y fj(,)h(period)d fe(T)1987 1094 y fd(i)1997 1088 y fj (,)982 1138 y(start)g(time)g fe(S)1173 1144 y fd(i)1183 1138 y fj(,)h(phase)g (of)o(fset)f fe(O)1449 1144 y fd(i)1459 1138 y fj(,)h(and)f(task')n(s)g(seman\ tic)h(importance)982 1188 y(value)c fe(V)1106 1194 y fd(i)1117 1188 y fj(.)15 b(In)8 b(a)i(periodic)e(thread,)h(a)g(new)h(instantiation)c(of)i(the)h(thread) 982 1238 y(will)g(be)h(scheduled)g(at)g fe(S)1343 1244 y fd(i)1362 1238 y fj (and)g(then)g(repeat)g(the)g(activity)e(in)h(every)h fe(T)1987 1244 y fd(i) 1997 1238 y fj(.)982 1288 y(The)h(phase)f(of)o(fset)g(is)f(used)h(to)f(adjust) g(a)h(ready)g(time)g(within)e(each)j(pe-)982 1337 y(riod.)j(If)9 b(a)h(period\ ic)e(thread)h(is)g(a)h(soft)f(real-time)g(thread,)g(it)g(may)h(need)982 1387 y (to)g(express)g(the)g(abort)f(time)h(which)g(tells)f(the)g(scheduler)i(to)e (abort)g(the)982 1437 y(thread.)15 b(Figure)7 b(1)h(depicts)g(the)g(timing)f (attributes)f(of)i(a)h(hard)f(periodic)982 1487 y(real-time)j(thread.)1024 1539 y(An)i(aperiodic)g(thread)h fe(AP)1424 1545 y fd(j)1448 1539 y fj(is)g (de\256ned)g(by)f(the)g(worst)g(case)i(exe-)982 1589 y(cution)f(time)i fe(C) 1219 1595 y fd(j)1228 1589 y fj(,)h(the)e(worst)g(case)i(interarrival)d(time) h fe(A)1830 1595 y fd(j)1840 1589 y fj(,)i(deadline)982 1639 y fe(D)1012 1645 y fd(j)1023 1639 y fj(,)e(and)g(task')m(s)g(semantic)g(importance)f(value)h fe (V)1725 1645 y fd(i)1735 1639 y fj(.)28 b(In)14 b(the)g(case)i(of)982 1688 y (soft)f(real-time)h(threads,)h fe(A)1398 1694 y fd(j)1424 1688 y fj(indicates) e(the)h(average)h(case)g(interar-)982 1738 y(rival)10 b(time)h(and)f fe(D) 1254 1744 y fd(j)1275 1738 y fj(represents)h(the)f(average)i(response)f(time.) 16 b(Abort)982 1788 y(time)d(can)g(be)f(also)g(de\256ned)h(for)f(the)g(soft)f (real-time)h(thread.)21 b(Figure)982 1838 y(2)16 b(depicts)f(the)h(timing)e (attributes)g(of)i(a)g(hard)g(aperiodic)f(real-time)982 1888 y(thread)1086 1873 y fc(2)1103 1888 y fj(.)982 2019 y ff(2.2)50 b(R)o(T)-5 b(-Thr)o(ead)12 b (Cr)o(eation)g(and)g(T)-5 b(ermination)982 2101 y fj(A)28 b(thread)f(can)g (be)h(created,)k(within)26 b(a)i(task,)j(by)c(using)f(the)982 2151 y fi(rt)s 13 2 v 12 w(thr)n(ead)r 13 2 v 13 w(cr)o(eate)14 b fj(primitive.)24 b(As)13 b (we)i(described)e(in)h(the)f(model,)i(it)982 2201 y(can)8 b(be)f(a)g(periodic) f(or)h(aperiodic)f(thread)h(depending)e(on)i(its)f(timing)f(at-)982 2251 y (tributes.)14 b(The)c(timing)f(attributes)f(are)j(speci\256ed)f(in)f(the)h (correspond-)982 2301 y(ing)i(time)g(descriptor)m(,)h(and)f(the)g(user)g(and) g(kernel)g(stack)h(regions)e(are)982 2350 y(also)f(given)e(by)h(the)g(stack)h (descriptor)l(.)15 b(If)9 b(a)h(creation)f(is)g(successful,)h(a)982 2400 y (unique)g(thread)h(id)f(will)g(be)h(returned.)17 b(A)11 b(thread)g(can)g(be)g (terminated)982 2450 y(by)k(calling)f fi(rt)s 13 2 v 12 w(thr)n(ead)r 13 2 v 13 w(exit)h fj(primitive.)28 b(If)15 b(a)h(thread)f(is)g(a)h(periodic)982 2500 y(thread,)c(a)f(new)h(instantiation)c(of)j(the)g(thread)f(will)g(be)h(schedul\ ed)g(for)982 2550 y(the)h(next)g(start)f(time)h(and)g(a)h(new)f(thread)g(id)f (will)g(be)h(assigned.)20 b(The)982 2595 y 411 2 v 1028 2622 a fh(2)1042 2634 y fg(When)11 b(a)g(hard)g(real-time)g(thread)g(is)h(aperiodic,)f(we)g(call)h (it)g(a)f fb(sporadic)f fg(thread)1042 2674 y(where)e(consecutive)f(requests) h(of)h(the)g(task)f(initiation)h(are)g(kept)f(at)h(least)g fa(Q)g fg(units) 1042 2713 y(of)f(time)g(apart)g([15)o(].)935 2877 y fj(2)p eop eos end TeXDict begin bos 300 @start /fa df[55 58 2 58 60] 88 dc dfe /fb 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 9 10 10 17 16 7 7 7 10 14 5 7 5 6 10 10 10 10 10 10 10 10 10 10 7 7 14 14 14 10 19 13 13 14 15 13 13 15 15 7 9 14 12 17 14 15 13 15 13 10 12 15 13 17 13 12 12 8 6 8 9 10 7 10 10 9 10 9 10 10 10 6 6 9 6 15 10 10 10 10 8 8 6 10 9 14 9 9 8 8 6 8 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 10 10 3 10 10 10 10 4 12 10 7 7 10 10 0 10 10 10 5 0 11 7 7 12 12 10 18 21 0 10 0 7 7 7 7 7 7 7 7 0 7 7 0 7 7 7 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 6 0 0 0 0 12 15 20 6 0 0 0 0 0 14 0 0 0 6 0 0 6 10 14 10 0 0 0 0 /Times-Italic-Math /Times-Italic 1.0 ExtendFont 1000 327680 rf /fc df[25 2 3 -9 32]0 dc[<60F0F060>4 4 4 -8 12]1 dc[<03C00FF01FF83FFC7FFE 7FFEFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C0>16 16 2 -2 21]15 dc[<000001800000 078000001E00000078000001E00000078000001E00000078000001E00000078000001E00000078 000000E0000000780000001E0000000780000001E0000000780000001E0000000780000001E000 0000780000001E0000000780000001800000000000000000000000000000000000000000000000 00000000007FFFFF00FFFFFF80>25 34 3 8 32]20 dc[<400004C0000C600018600018600018 3000303000303000301800601800601FFFE00FFFC00C00C00C00C0060180060180030300030300 03030001860001860001860000CC0000CC0000CC00007800007800007800003000003000>22 30 0 1 23]56 dc dfe /fd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 7 8 10 10 17 16 7 7 7 10 12 5 7 5 6 10 10 10 10 10 10 10 10 10 10 6 6 12 12 12 9 19 15 14 14 15 13 12 15 15 7 8 15 13 18 15 15 12 15 14 12 13 15 15 20 15 15 13 7 6 7 10 10 7 9 10 9 10 9 7 10 10 6 6 10 6 16 10 10 10 10 7 8 6 10 10 15 10 10 9 10 4 10 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 10 10 3 10 10 10 10 4 9 10 7 7 12 12 0 10 10 10 5 0 9 7 7 9 9 10 21 21 0 9 0 7 7 7 7 7 7 7 7 0 7 7 0 7 7 7 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 6 0 0 0 0 13 15 18 6 0 0 0 0 0 14 0 0 0 6 0 0 6 10 15 10 0 0 0 0 /Times-Roman 1000 327680 rf /fe df[<0FFFE01FFFE03FFFC060C00040C000808000008000 0180000180000180000300000300000300000700000700000700000E0000060000>19 18 2 0 18]28 dc[<60F0F0701010101020204080>4 12 4 8 12]59 dc dfe /ff df[<60F0F060>4 4 3 -7 11]1 dc[<0300030003000300E31C73381FE0078007801FE07338E31C0300030003000300 >14 16 2 -1 19]3 dc[<007001C0038007000700070007000700070007000700070007000700 070007000E001C00F0001C000E0007000700070007000700070007000700070007000700070007 00038001C00070>12 37 3 9 19]102 dc[12 37 3 9 19]103 dc dfe /fg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 12 21 19 19 37 31 12 12 12 19 21 9 12 9 10 19 19 19 19 19 19 19 19 19 19 12 12 21 21 21 19 35 27 25 27 27 25 23 29 29 15 19 29 25 35 27 29 23 29 27 21 25 27 27 37 27 27 25 12 10 12 22 19 12 19 21 17 21 17 12 19 21 10 12 21 10 31 21 19 21 21 17 15 12 21 19 27 19 19 17 15 8 15 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 19 19 6 19 19 19 19 10 19 19 12 12 21 21 0 19 19 19 9 0 20 13 12 19 19 19 37 37 0 19 0 12 12 12 12 12 12 12 12 0 12 12 0 12 12 12 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 11 0 0 0 0 25 29 37 12 0 0 0 0 0 27 0 0 0 10 0 0 10 19 27 21 0 0 0 0 /Times-Bold 1000 589824 rf /fh 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 12 15 19 19 31 29 12 12 12 19 21 9 12 9 10 19 19 19 19 19 19 19 19 19 19 10 10 21 21 21 17 34 27 25 25 27 23 21 27 27 12 15 27 23 33 27 27 21 27 25 21 23 27 27 35 27 27 23 12 10 12 18 19 12 17 19 17 19 17 12 19 19 10 10 19 10 29 19 19 19 19 12 15 10 19 19 27 19 19 17 18 7 18 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 19 19 6 19 19 19 19 7 17 19 12 12 21 21 0 19 19 19 9 0 17 13 12 17 17 19 37 37 0 17 0 12 12 12 12 12 12 12 12 0 12 12 0 12 12 12 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 0 10 0 0 0 0 23 27 33 12 0 0 0 0 0 25 0 0 0 10 0 0 10 19 27 19 0 0 0 0 /Times-Roman 1000 589824 rf /fi 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 23 21 21 42 35 14 14 14 21 24 10 14 10 12 21 21 21 21 21 21 21 21 21 21 14 14 24 24 24 21 39 30 28 30 30 28 25 32 32 16 21 32 28 39 30 32 25 32 30 23 28 30 30 42 30 30 28 14 12 14 24 21 14 21 23 18 23 18 14 21 23 12 14 23 12 35 23 21 23 23 18 16 14 23 21 30 21 21 18 16 9 16 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 21 21 7 21 21 21 21 12 21 21 14 14 23 23 0 21 21 21 10 0 22 15 14 21 21 21 42 42 0 21 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 0 12 0 0 0 0 28 32 42 14 0 0 0 0 0 30 0 0 0 12 0 0 12 21 30 23 0 0 0 0 /Times-Bold 1000 655360 rf /fj 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 10 12 15 15 24 23 10 10 10 15 16 7 10 7 8 15 15 15 15 15 15 15 15 15 15 8 8 16 16 16 13 27 21 19 19 21 18 16 21 21 10 11 21 18 26 21 21 16 21 19 16 18 21 21 27 21 21 18 10 8 10 14 15 10 13 15 13 15 13 10 15 15 8 8 15 8 23 15 15 15 15 10 11 8 15 15 21 15 15 13 14 6 14 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 15 15 5 15 15 15 15 5 13 15 10 10 16 16 0 15 15 15 7 0 13 10 10 13 13 15 29 29 0 13 0 10 10 10 10 10 10 10 10 0 10 10 0 10 10 10 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 8 0 0 0 0 18 21 26 9 0 0 0 0 0 19 0 0 0 8 0 0 8 15 21 15 0 0 0 0 /Times-Roman 1000 458752 rf /fk 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 12 15 15 24 23 10 10 10 15 20 7 10 7 8 15 15 15 15 15 15 15 15 15 15 10 10 20 20 20 15 27 18 18 19 21 18 18 21 21 10 13 19 16 24 19 21 18 21 18 15 16 21 18 24 18 16 16 11 8 11 12 15 10 15 15 13 15 13 14 15 15 8 8 13 8 21 15 15 15 15 11 11 8 15 13 19 13 13 11 12 8 12 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 15 15 5 15 15 15 15 6 16 15 10 10 15 15 0 15 15 15 7 0 15 10 10 16 16 15 26 29 0 15 0 10 10 10 10 10 10 10 10 0 10 10 0 10 10 10 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 8 0 0 0 0 16 21 27 9 0 0 0 0 0 19 0 0 0 8 0 0 8 15 19 15 0 0 0 0 /Times-Italic-Math /Times-Italic 1.0 ExtendFont 1000 458752 rf /fl 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 17 21 21 35 32 14 14 14 21 28 10 14 10 12 21 21 21 21 21 21 21 21 21 21 14 14 28 28 28 21 38 25 25 28 30 25 25 30 30 14 18 28 23 35 28 30 25 30 25 21 23 30 25 35 25 23 23 16 12 16 18 21 14 21 21 18 21 18 20 21 21 12 12 18 12 30 21 21 21 21 16 16 12 21 18 28 18 18 16 17 11 17 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 21 21 7 21 21 21 21 9 23 21 14 14 21 21 0 21 21 21 10 0 22 15 14 23 23 21 37 42 0 21 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 11 0 0 0 0 23 30 39 13 0 0 0 0 0 28 0 0 0 12 0 0 12 21 28 21 0 0 0 0 /Times-Italic-Math /Times-Italic 1.0 ExtendFont 1000 655360 rf /fm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 17 28 25 25 50 41 17 17 17 25 28 12 17 12 14 25 25 25 25 25 25 25 25 25 25 17 17 28 28 28 25 46 36 33 36 36 33 30 39 39 19 25 39 33 47 36 39 30 39 36 28 33 36 36 50 36 36 33 17 14 17 29 25 17 25 28 22 28 22 17 25 28 14 17 28 14 41 28 25 28 28 22 19 17 28 25 36 25 25 22 20 11 20 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 25 25 8 25 25 25 25 14 25 25 17 17 28 28 0 25 25 25 12 0 27 17 17 25 25 25 50 50 0 25 0 17 17 17 17 17 17 17 17 0 17 17 0 17 17 17 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 0 15 0 0 0 0 33 39 50 16 0 0 0 0 0 36 0 0 0 14 0 0 14 25 36 28 0 0 0 0 /Times-Bold 1000 786432 rf /fn 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 11 14 17 17 28 26 11 11 11 17 19 8 11 8 9 17 17 17 17 17 17 17 17 17 17 9 9 19 19 19 15 31 24 22 22 24 20 18 24 24 11 13 24 20 30 24 24 18 24 22 18 20 24 24 31 24 24 20 11 9 11 16 17 11 15 17 15 17 15 11 17 17 9 9 17 9 26 17 17 17 17 11 13 9 17 17 24 17 17 15 16 7 16 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 17 17 6 17 17 17 17 6 15 17 11 11 18 18 0 17 17 17 8 0 15 12 11 15 15 17 33 33 0 15 0 11 11 11 11 11 11 11 11 0 11 11 0 11 11 11 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 9 0 0 0 0 20 24 30 10 0 0 0 0 0 22 0 0 0 9 0 0 9 17 24 17 0 0 0 0 /Times-Roman 1000 524288 rf /fo 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 8 10 12 12 21 19 8 8 8 12 14 6 8 6 7 12 12 12 12 12 12 12 12 12 12 7 7 14 14 14 11 23 18 17 17 18 15 14 18 18 8 10 18 15 22 18 18 14 18 17 14 15 18 18 24 18 18 15 8 7 8 12 12 8 11 12 11 12 11 8 12 12 7 7 12 7 19 12 12 12 12 8 10 7 12 12 18 12 12 11 12 5 12 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 12 12 4 12 12 12 12 4 11 12 8 8 14 14 0 12 12 12 6 0 11 9 8 11 11 12 25 25 0 11 0 8 8 8 8 8 8 8 8 0 8 8 0 8 8 8 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 7 0 0 0 0 15 18 22 8 0 0 0 0 0 17 0 0 0 7 0 0 7 12 18 12 0 0 0 0 /Times-Roman 1000 393216 rf /fp 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 17 21 21 35 32 14 14 14 21 28 10 14 10 12 21 21 21 21 21 21 21 21 21 21 14 14 28 28 28 21 38 25 25 28 30 25 25 30 30 14 18 28 23 35 28 30 25 30 25 21 23 30 25 35 25 23 23 16 12 16 18 21 14 21 21 18 21 18 12 21 21 12 12 18 12 30 21 21 21 21 16 16 12 21 18 28 18 18 16 17 11 17 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 21 21 7 21 21 21 21 9 23 21 14 14 21 21 0 21 21 21 10 0 22 15 14 23 23 21 37 42 0 21 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 11 0 0 0 0 23 30 39 13 0 0 0 0 0 28 0 0 0 12 0 0 12 21 28 21 0 0 0 0 /Times-Italic 1000 655360 rf /fq 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 17 21 21 35 32 14 14 14 21 23 10 14 10 12 21 21 21 21 21 21 21 21 21 21 12 12 23 23 23 18 38 30 28 28 30 25 23 30 30 14 16 30 25 37 30 30 23 30 28 23 25 30 30 39 30 30 25 14 12 14 19 21 14 18 21 18 21 18 14 21 21 12 12 21 12 32 21 21 21 21 14 16 12 21 21 30 21 21 18 20 8 20 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 21 21 7 21 21 21 21 7 18 21 14 14 23 23 0 21 21 21 10 0 19 15 14 18 18 21 42 42 0 18 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 11 0 0 0 0 25 30 37 13 0 0 0 0 0 28 0 0 0 12 0 0 12 21 30 21 0 0 0 0 /Times-Roman 1000 655360 rf /fr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 20 33 30 30 60 50 20 20 20 30 34 15 20 15 17 30 30 30 30 30 30 30 30 30 30 20 20 34 34 34 30 56 43 40 43 43 40 37 47 47 23 30 47 40 56 43 47 37 47 43 33 40 43 43 60 43 43 40 20 17 20 35 30 20 30 33 27 33 27 20 30 33 17 20 33 17 50 33 30 33 33 27 23 20 33 30 43 30 30 27 24 13 24 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 30 30 10 30 30 30 30 17 30 30 20 20 33 33 0 30 30 30 15 0 32 21 20 30 30 30 60 60 0 30 0 20 20 20 20 20 20 20 20 0 20 20 0 20 20 20 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 18 0 0 0 0 40 47 60 20 0 0 0 0 0 43 0 0 0 17 0 0 17 30 43 33 0 0 0 0 /Times-Bold 1000 943718 rf end TeXDict begin @letter %%Page: 3 3 bop -118 77 a fp(rt)r 13 2 v 13 w(thr)m(ead)s 13 2 v 12 w(kill)14 b fq(primi\ tive)f(terminates)i(the)f(speci\256ed)i(thread)e(while)-118 127 y(the)f fp (rt)r 13 2 v 12 w(thr)n(ead)s 13 2 v 12 w(wait)f fq(primitive)f(blocks)i(the) f(caller)i(thread)e(until)g(the)-118 177 y(tar)o(get)h(thread)g(terminates.) 24 b(The)14 b fp(rt)r 13 2 v 13 w(thr)n(ead)r 13 2 v 13 w(self)f fq(primitive) e(returns)-118 226 y(the)17 b(thread)h(id)f(of)g(the)g(caller)n(.)37 b(The)18 b fp(rt)r 13 2 v 13 w(thr)n(ead)r 13 2 v 13 w(set)r 13 2 v 13 w(attribute)d fq (and)-118 276 y fp(rt)r 13 2 v 13 w(thr)m(ead)s 13 2 v 12 w(get)s 13 2 v 12 w (attribute)c fq(primitive)g(are)i(used)g(to)f(assign)g(or)g(get)h(the)-118 326 y(value)c(of)g(the)h(attribute)e(respectively)l(.)16 b(The)10 b(brief)f(descr\ iption)f(of)h(the)-118 376 y(thread)h(attribute)f(is)h(shown)g(in)f(below)m (.)-118 479 y 1026 3 v -59 581 a(kval)r 13 2 v 12 w(t)h(=)h fi(rt)s 13 2 v 12 w(thread)s 13 2 v 12 w(create)p fq(\()g(parent,)f(child)r 13 2 v 12 w(thread,) 354 630 y(thread)r 13 2 v 13 w(attr)m(,)h(entry)r 13 2 v 12 w(point,)f(ar)o (g)g(\))-59 680 y(kval)r 13 2 v 12 w(t)g(=)h fi(rt)s 13 2 v 12 w(thread)s 13 2 v 12 w(exit)p fq(\()f(\))-59 730 y(kval)r 13 2 v 12 w(t)g(=)h fi(rt)s 13 2 v 12 w(thread)s 13 2 v 12 w(kill)p fq(\()e(thread)h(\))-59 780 y(kval)r 13 2 v 12 w(t)g(=)h fi(rt)s 13 2 v 12 w(thread)s 13 2 v 12 w(wait)p fq(\()e(thread)h (\))-59 830 y(thread)r 13 2 v 13 w(t)g(=)g fi(rt)s 13 2 v 13 w(thr)o(ead)s 13 2 v 12 w(self)p fq(\()g(\))-59 880 y(kval)r 13 2 v 12 w(t)g(=)h fi(rt)s 13 2 v 12 w(thread)s 13 2 v 12 w(set)s 13 2 v 12 w(attribute)p fq(\()f(thread,)h(thr\ ead)r 13 2 v 13 w(attr)e(\))-59 929 y(kval)r 13 2 v 12 w(t)h(=)h fi(rt)s 13 2 v 12 w(thread)s 13 2 v 12 w(get)s 13 2 v 12 w(attribute)p fq(\()f(thread,)h (thread)r 13 2 v 12 w(attr)f(\))-118 1080 y 1026 3 v 104 x 1026 3 v 97 x fh (typedef)e(stuct)h fg(time)s 12 2 v 11 w(desc)f ff(f)-71 1327 y fh(int)i(rt)s 12 2 v 11 w(type;)289 b(/)p ff(\003)10 b fh(periodic)f(or)g(aperiodic)f(threa\ d)h ff(\003)p fh(/)-71 1372 y(union)g ff(f)-24 1418 y fh(struct)h(rt)s 12 2 v 11 w(Periodic)f ff(f)24 1464 y fh(time)r 12 2 v 11 w(value)r 12 2 v 11 w(t)h (rt)s 12 2 v 11 w(start;)50 b(/)p ff(\003)10 b fh(start)g(time)f ff(\003)p fh (/)24 1509 y(time)r 12 2 v 11 w(value)r 12 2 v 11 w(t)h(rt)s 12 2 v 11 w(peri\ od;)18 b(/)p ff(\003)10 b fh(period)f(or)g(response)e(time)j(info)f ff(\003)p fh(/)24 1555 y(time)r 12 2 v 11 w(value)r 12 2 v 11 w(t)h(rt)s 12 2 v 11 w (of)o(fset;)30 b(/)p ff(\003)10 b fh(phase)d(offset)i ff(\003)p fh(/)-24 1601 y ff(g)h fh(rt)s 12 2 v 11 w(periodic;)-24 1646 y(struct)g(rt)s 12 2 v 11 w (Aperiodic)p ff(f)24 1692 y fh(time)r 12 2 v 11 w(value)r 12 2 v 11 w(t)g(rt) s 12 2 v 11 w(wcia;)43 b(/)p ff(\003)10 b fh(worst)f(case)f(interarrival)i (time)g ff(\003)p fh(/)-24 1738 y ff(g)g fh(rt)s 12 2 v 11 w(aperiodic;)-71 1783 y ff(g)g fh(rt)s 12 2 v 11 w(attribute;)-71 1829 y(time)s 12 2 v 11 w (value)q 12 2 v 11 w(t)g(rt)s 12 2 v 11 w(wcec;)131 b(/)p ff(\003)10 b fh(wor\ st)f(case)f(exec)g(time)h ff(\003)p fh(/)-71 1875 y(time)s 12 2 v 11 w(value) q 12 2 v 11 w(t)h(rt)s 12 2 v 11 w(deadline;)81 b(/)p ff(\003)10 b fh(deadlin\ e)e ff(\003)p fh(/)-71 1920 y(time)s 12 2 v 11 w(value)q 12 2 v 11 w(t)i(rt)s 12 2 v 11 w(abort;)132 b(/)p ff(\003)10 b fh(abort)f(time)h ff(\003)p fh(/) -71 1966 y(int)g(rt)s 12 2 v 11 w(value;)272 b(/)p ff(\003)10 b fh(semantic)q 12 2 v 11 w(value)e ff(\003)p fh(/)-12 2012 y ff(\001)e(\001)g(\001)-118 2057 y(g)j fh(time)s 12 2 v 11 w(desc)q 12 2 v 11 w(t)-118 2149 y(typedef)f(struct) i fg(stack)q 12 2 v 11 w(desc)e ff(f)-71 2194 y fh(vm)r 12 2 v 11 w(address)q 12 2 v 11 w(t)i(rt)s 12 2 v 11 w(stack)q 12 2 v 11 w(addr;)-71 2240 y(vm)r 12 2 v 11 w(size)r 12 2 v 11 w(t)g(rt)s 12 2 v 11 w(stack)q 12 2 v 11 w(size;) -12 2286 y ff(\001)c(\001)g(\001)-118 2331 y(g)j fh(stack)q 12 2 v 12 w(desc) p 12 2 v 11 w(t)-118 2423 y(typedef)f(struct)i fg(thr)o(ead)q 12 2 v 11 w(att\ ribute)g ff(f)-71 2468 y fh(time)s 12 2 v 11 w(desc)q 12 2 v 11 w(t)g(time)r 12 2 v 11 w(desc;)-71 2514 y(stack)q 12 2 v 11 w(desc)q 12 2 v 11 w(t)g(stack) q 12 2 v 11 w(desc;)-12 2560 y ff(\001)c(\001)g(\001)-118 2605 y(g)j fh(threa\ d)r 12 2 v 11 w(attr)s 12 2 v 11 w(t;)-118 2752 y 1026 3 v 982 77 a fm(2.3)50 b(R)o(T)-5 b(-Thr)o(ead)12 b(Synchr)o(onization)982 155 y fq(Synchronization) f(among)h(threads)g(is)f(necessary)j(since)e(all)g(threads)982 205 y(within)f (a)h(task)g(share)h(the)e(task')n(s)h(resources.)21 b(The)13 b(synchronizatio\ n)982 254 y(mechanism)k(in)d(R)m(T)m(-Mach)h(is)g(based)h(on)e(mutual)h(exclu\ sion)f(using)982 304 y(a)j(lock)f(variable.)32 b(A)16 b(thread)g(can)h(alloca\ te,)h(deallocate,)g(and)e(ini-)982 354 y(tialize)g(a)h(lock)f(variable.)33 b (A)17 b(simple)f(pair)g(of)g fp(rt)r 13 2 v 12 w(mutex)s 13 2 v 12 w(lock)h fq (and)982 404 y fp(rt)s 13 2 v 12 w(mutex)s 13 2 v 12 w(unlock)f fq(primitives) f(is)h(used)g(to)g(specify)g(mutual)g(exclu-)982 454 y(sion.)i(The)12 b fp (rt)r 13 2 v 12 w(mutex)s 13 2 v 13 w(trylock)f fq(primitive)f(is)h(used)g (for)g(acquiring)f(the)982 503 y(lock)i(conditionally)-5 b(.)21 b(A)12 b(modi\ \256ed)g(version)f(of)h(the)g(condition)f(vari-)982 553 y(able)f(is)f(also)g (created)h(for)f(specifying)f(a)i(conditional)d(critical)h(region.)982 603 y (A)j(pair)g(of)g fp(rt)r 13 2 v 12 w(condition)q 13 2 v 12 w(signal)f fq(and) h fp(rt)r 13 2 v 12 w(condition)p 13 2 v 13 w(wait)f fq(primitives)982 653 y (is)16 b(used)g(to)e(synchronize)i(over)f(a)h(condition)e(variable.)31 b(R)m (T)m(-Mach)982 703 y(uses)16 b(the)g(earliest)f(deadline)g(\256rst)g(\(or)g (highest)g(priority)e(\256rst\))i(pol-)982 752 y(icy)c(as)g(a)g(queueing)f (policy)g(in)g(both)g(the)g fp(rt)r 13 2 v 13 w(mutex)h fq(and)f fp(rt)s 13 2 v 12 w(condition)982 802 y fq(primitives.)28 b(A)15 b(caller)g(can)h(also)f (control)f(its)g(priority)e(inheritance)982 852 y(policy)j(by)g(setting)g(the) g(proper)g(mutex')n(s)h(or)f(condition)e(variable')n(s)982 902 y(attribute.) 982 987 y 1026 3 v 1041 1122 a(kval)r 13 2 v 13 w(t)d(=)h fi(rt)r 13 2 v 13 w (mutex)r 13 2 v 12 w(allocate)p fq(\()f(lock,)g(lock)r 13 2 v 12 w(attr)g(\)) 1041 1172 y(kval)r 13 2 v 13 w(t)g(=)h fi(rt)r 13 2 v 13 w(mutex)r 13 2 v 12 w (deallocate)p fq(\()f(lock)g(\))1041 1222 y(kval)r 13 2 v 13 w(t)g(=)h fi(rt) r 13 2 v 13 w(mutex)r 13 2 v 12 w(lock)p fq(\()f(lock,)h(timeout)e(\))1041 1272 y(kval)r 13 2 v 13 w(t)h(=)h fi(rt)r 13 2 v 13 w(mutex)r 13 2 v 12 w(unl\ ock)p fq(\()g(lock)e(\))1041 1322 y(kval)r 13 2 v 13 w(t)h(=)h fi(rt)r 13 2 v 13 w(mutex)r 13 2 v 12 w(trylock)p fq(\()f(lock)g(\))1041 1421 y(kval)r 13 2 v 13 w(t)g(=)h fi(rt)r 13 2 v 13 w(condition)q 13 2 v 13 w(allocate)p fq(\()e (cond,)h(cond)s 13 2 v 12 w(attr)g(\))1041 1471 y(kval)r 13 2 v 13 w(t)g(=)h fi(rt)r 13 2 v 13 w(condition)q 13 2 v 13 w(deallocate)p fq(\()f(cond)g(\)) 1041 1521 y(kval)r 13 2 v 13 w(t)g(=)h fi(rt)r 13 2 v 13 w(condition)q 13 2 v 13 w(wait)p fq(\()e(cond,)i(lock,)f(cond)r 13 2 v 12 w(attr)n(,)h(timeout)e (\))1041 1571 y(kval)r 13 2 v 13 w(t)h(=)h fi(rt)r 13 2 v 13 w(condition)q 13 2 v 13 w(signal)p fq(\()e(cond,)h(cond)r 13 2 v 13 w(attr)g(\))982 1706 y 1026 3 v 50 x(Unlike)31 b(the)h(ordinary)e(mutual)h(exclusion)g(mechanism,)39 b (the)982 1806 y fp(rt)s 13 2 v 12 w(mutex)s 13 2 v 12 w(lock)13 b fq(and)g fp (rt)s 13 2 v 12 w(mutex)s 13 2 v 12 w(unlock)g fq(pair)g(provide)f(a)h(priori\ ty)e(in-)982 1855 y(heritance)h(mechanism)g(in)e(order)h(to)g(avoid)f(an)h (unbounded)f fp(priority)982 1905 y(inversion)h fq(problem.)k(Priority)9 b (inversion)g(occurs)i(when)f(a)h(high)f(pri-)982 1955 y(ority)k(task)h(must)h (wait)e(inde\256nitely)g(for)h(a)h(lower)e(priority)f(task)j(to)982 2005 y (execute.)1024 2055 y(Suppose)8 b(that)g(a)h(low)e(priority)f(thread)j fe(\ \034)1605 2061 y fk(L)1632 2055 y fq(is)f(in)f(the)i(critical)e(region.)982 2104 y(While)h(thread)g fe(\034)1222 2110 y fk(L)1248 2104 y fq(is)g(executin\ g,)h(a)f(high)f(priority)f(thread)i fe(\034)1836 2110 y fk(H)1867 2104 y fq (attempts)982 2154 y(to)h(enter)f(the)h(critical)f(region)g(by)h(executed)g (the)g fp(rt)r 13 2 v 12 w(mutex)s 13 2 v 13 w(lock)g fq(prim-)982 2204 y(iti\ ve.)28 b(Since)15 b fe(\034)1220 2210 y fk(L)1253 2204 y fq(is)f(in)h(the)f (critical)g(region,)h fe(\034)1688 2210 y fk(H)1726 2204 y fq(must)g(wait)f (for)g fe(\034)1989 2210 y fk(L)982 2254 y fq(to)h(exit.)29 b(Now)14 b(suppos\ e)h(that)f(other)h(threads)g fe(\034)1707 2260 y fk(M)1731 2264 y fd(1)1753 2254 y fc(\001)6 b(\001)h(\001)f fe(\034)1826 2260 y fk(M)1850 2264 y fb(k) 1879 2254 y fq(become)982 2304 y(active.)31 b(These)17 b(threads)e(can)h(begi\ n)f(their)g(computation)f(and)h(will)982 2354 y(preempt)9 b(thread)f fe(\034) 1257 2360 y fk(L)1276 2354 y fq(,)h(thus)f(we)h(cannot)f(bound)g(the)g(worst) g(case)i(block-)982 2403 y(ing)g(time)g(of)g fe(\034)1193 2409 y fk(H)1216 2403 y fq(.)1024 2453 y(In)i(order)h(to)f(bound)f(the)i(worst)f(case)i(blocki\ ng)d(time)h(of)h(threads,)982 2503 y(our)c(group)g(has)g(developed)g(priority) e(inheritance)i(protocols)f(includ-)982 2553 y(ing)13 b fp(Priority)f(Ceiling) g(Pr)o(otocol)g fq([18)o(].)24 b(In)13 b(this)f(example,)j(once)f fe(\034) 1985 2559 y fk(H)982 2603 y fq(executes)i fp(rt)r 13 2 v 12 w(mutex)s 13 2 v 12 w(lock)p fq(,)g(then)e fe(\034)1495 2609 y fk(L)1528 2603 y fq(will)f(inhe\ rit)g(the)h(high)f(priority)982 2652 y(from)f fe(\034)1093 2658 y fk(H)1117 2652 y fq(.)21 b(In)11 b(this)h(way)m(,)h(the)f(highest)f(priority)f(thread') n(s)i(worst)f(case)982 2702 y(blocking)j(time)g(is)h(bounded)f(by)g(the)h(siz\ e)g(of)g(critical)f(region)g(\(See)982 2752 y(Section)c(2.5\).)935 2877 y(3)p eop %%Page: 4 4 bop -118 77 a fm(2.4)50 b(R)n(T)l(-Thr)o(ead)12 b(Scheduling)-118 158 y fq (In)d(real-time)g(operating)f(systems,)i(thread)f(scheduling)f(plays)h(an)h (im-)-118 207 y(portant)d(role)h(in)g(managing)g(the)g(system)h(resources)g (in)f(a)h(timely)e(fash-)-118 257 y(ion.)28 b(However)o(,)17 b(traditional)12 b(operating)i(systems)i(do)e(not)h(provide)-118 307 y(us)i(a)g(\257exible)f (and)h(a)g(adaptable)g(scheduling)e(management.)36 b(W)m(e)-118 357 y(have)15 b(developed)f(a)h(novel)f(scheduling)g(model,)h(Integrated)f(T)o(ime-)-118 407 y(Driven)f(Scheduler\(ITDS\))h(for)g(the)g(AR)m(TS)h(kernel[24)o(],)g(and)f (have)-118 456 y(extended)e(the)h(model)f(for)g(R)n(T)l(-Mach.)23 b(This)12 b (section)h(describes)g(the)-118 506 y(Mach)e(scheduling)e(mechanism)i(and)g (an)f(extended)h(ITDS)f(model.)-118 625 y fi(2.4.1)41 b(Mach)11 b(Scheduling) g(Mechanism)-118 705 y fq(Mach)17 b(provides)e(a)i(\257exible)f(processor)h (allocation)e(facility)l(.)34 b(The)-118 755 y(facility)9 b(uses)i(two)f(obje\ cts:)15 b fp(pr)n(ocessor)c fq(and)g fp(pr)n(ocessor)h(set)p fq(.)k(A)10 b (pro-)-118 805 y(cessor)j(object)f(represents)g(a)h(physical)f(processor)g (and)h(a)f(processor)-118 855 y(set)d(object)g(corresponds)g(to)f(a)i(set)f (of)g(processors.)15 b(A)9 b(thread)g(belongs)-118 905 y(to)j(a)g(processor)h (set)f(and)g(similarly)f(a)i(processor)f(belongs)g(to)f(a)i(pro-)-118 954 y (cessor)g(set.)21 b(A)13 b(special)f(processor)h(set)f(called)h(a)g fp(defaul\ t)d(pr)o(ocessor)-118 1004 y(set)f fq(exists.)14 b(Before)9 b(a)g(new)g(proce\ ssor)g(set)g(is)f(created,)j(all)d(processors)-118 1054 y(belong)h(to)h(a)h (default)e(processor)i(set.)-77 1105 y(The)h(most)e(important)g(data)h(struct\ ure)f(to)g(manage)i(scheduling)e(of)-118 1155 y(thread)16 b(is)f(the)h fp(run) g(queue)p fq(.)32 b(All)15 b(processor)h(sets)g(have)h(their)e(own)-118 1205 y (respective)c(run)f(queues.)17 b(When)11 b(a)h(thread)e(becomes)i(runnable,)f (it)f(is)-118 1255 y(enqueued)h(into)f(the)g(run)h(queue)g(of)g(the)f(process\ or)i(set)f(to)f(which)h(the)-118 1305 y(thread)c(belongs.)14 b(Also,)8 b(when) f(the)g(current)g(running)f(thread)h(in)g(a)h(pro-)-118 1354 y(cessor)i(is)f (blocked)g(or)g(preempted,)i(the)e(new)g(thread)h(is)f(chosen)h(from)-118 1404 y(the)i(processor)g(set)g(where)g(the)g(blocked)g(thread)g(belongs.)19 b(Beca\ use)-118 1454 y(threads)7 b(do)g(not)f(migrate)i(between)f(processor)h(sets,) g(we)g(can)g(choose)g(a)-118 1504 y(suitable)e(scheduling)f(policy)h(for)g (each)h(processor)g(set.)14 b(However)o(,)8 b(the)-118 1554 y(current)i(Mach) i(scheduler)f(has)g(only)f fp(r)o(ound-r)m(obin)g fq(and)h fp(\256xed)g(prior\ -)-118 1603 y(ity)d fq(policies)g(and)h(manages)h(32-levels)e(of)h(thread)f (priorities.)13 b(Mach')n(s)-118 1653 y(\256xed)g(priority)e(policy)h(preempt\ s)h(the)g(running)f(thread)h(if)f(there)i(are)-118 1703 y(runnable)7 b(thread\ s)h(with)e(same)j(priority)c(and)j(its)f(quantum)g(is)h(expired.)-118 1753 y (In)j(real-time)g(computing,)g(such)h(preemption)f(decreases)i(schedula-)-118 1803 y(bility)7 b(and)i(we)h(need)g(other)e(scheduling)h(policies,)g(for)g (example,)h(rate)-118 1853 y(monotonic)f(policy)l(,)i(and)f(various)g(aperiod\ ic)f(servers[19].)-118 1971 y fi(2.4.2)41 b(ITDS)11 b(Scheduling)f(in)g(R)o (T)l(-Mach)-118 2052 y fq(The)f(objective)e(of)h(the)h(integrated)e(time-driv\ en)g(scheduler)h(is)h(to)e(pro-)-118 2101 y(vide)k(predictability)-6 b(,)13 b (\257exibility)-6 b(,)12 b(and)g(modi\256ability)d(for)i(managing)-118 2151 y (both)i fp(har)n(d)i fq(and)f fp(soft)g fq(real-time)g(activities.)27 b(The) 15 b(ITDS)f(scheduler)-118 2201 y(allows)f(the)g(system)g(designer)g(to)g(pre\ dict)f(whether)h(the)g(given)g(task)-118 2251 y(set)d(can)h(meet)g(its)f(dead\ lines)g(or)g(not.)-77 2302 y(The)d(ITDS)g(scheduler)f(adopted)g(a)h fp(capaci\ ty)f(pr)o(eservation)g fq(scheme)-118 2352 y(to)14 b(cope)i(with)d(hard)i(and) g(soft)g(types)f(of)h(real-time)g(activities.)28 b(By)-118 2402 y(bandwidth)8 b(preservation)h(we)i(mean)g(that)e(we)h(divide)f(the)h(necessary)-118 2452 y (processor)i(cycles)h(between)f(the)g(two)g(types.)20 b(W)m(e)12 b(\256rst)g (analyze)h(the)-118 2501 y(necessary)g(processor)g(cycles)f(by)g(accumulating) g(the)g(total)f(compu-)-118 2551 y(tation)d(time)h(for)h(the)f(hard)g(periodi\ c)g(and)g(sporadic)h(activities.)k(Then,)-118 2601 y(we)8 b(will)e(assign)h (the)g(remaining)g(schedulable)g(amount)g(of)g(the)g(unused)-118 2651 y(proce\ ssor)j(cycles)h(to)f(the)g(soft)g(real-time)g(tasks.)-77 2702 y(The)k(ITDS)f (scheduler)g(was)g(designed)f(and)h(implemented)f(using)-118 2752 y(an)f(obje\ ct)g(model)g(and)g(layered)g(structure.)17 b(The)12 b(scheduling)e(policy)982 38 y 1026 3 v 50 x @beginspecial -90 @hoffset -405 @voffset 0.700000 @hscale 0.700000 @vscale @setspecial %%BeginDocument: itds.ps 50 dict begin /arrowHeight 8 def /arrowWidth 4 def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { /patternGrayLevel idef patternGrayLevel -1 eq { /patternString idef } if false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont findfont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 0 descender sub printSize sub printFont /Courier ne printFont /Courier-Bold ne and { 1 add } if def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def Begin [ 0.6 0 0 0.6 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Elli 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 267 596 ] concat 96 209 50 27 Elli End Begin %I Elli 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 267 596 ] concat 242 210 54 27 Elli End Begin %I Elli 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 267 596 ] concat 389 209 49 27 Elli End Begin %I Rect 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 270 595 ] concat 44 247 149 315 Rect End Begin %I Rect 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 267 596 ] concat 190 247 296 315 Rect End Begin %I Rect 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 267 596 ] concat 334 249 443 317 Rect End Begin %I Line 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 267 596 ] concat 225 315 225 249 Line End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 649 882 ] concat [ (RR) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 468 879 ] concat [ (RM) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 501 879 ] concat [ (FP) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 539 879 ] concat [ (RR) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 323 878 ] concat [ (RM/DS) ] Text End Begin %I Elli 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 267 596 ] concat 241 129 23 22 Elli End Begin %I Elli 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 267 596 ] concat 56 129 19 19 Elli End Begin %I Elli 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 267 596 ] concat 334 130 19 19 Elli End Begin %I Elli 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 267 596 ] concat 388 130 19 20 Elli End Begin %I Elli 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 267 596 ] concat 435 130 18 19 Elli End Begin %I Elli 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 283 596 ] concat 122 130 19 20 Elli End Begin %I Text 0 0 0 SetCFg /Helvetica 12 SetF [ 1 0 0 1 344 811 ] concat [ (pset 1) ] Text End Begin %I Text 0 0 0 SetCFg /Helvetica 12 SetF [ 1 0 0 1 489 810 ] concat [ (pset 2) ] Text End Begin %I Text 0 0 0 SetCFg /Helvetica 12 SetF [ 1 0 0 1 639 810 ] concat [ (pset 3) ] Text End Begin %I Text 0 0 0 SetCFg /Helvetica 12 SetF [ 1 0 0 1 314 729 ] concat [ (p 1) ] Text End Begin %I Text 0 0 0 SetCFg /Helvetica 12 SetF [ 1 0 0 1 396 730 ] concat [ (p 2) ] Text End Begin %I Text 0 0 0 SetCFg /Helvetica 12 SetF [ 1 0 0 1 500 730 ] concat [ (p 3) ] Text End Begin %I Text 0 0 0 SetCFg /Helvetica 12 SetF [ 1 0 0 1 592 732 ] concat [ (p 4) ] Text End Begin %I Text 0 0 0 SetCFg /Helvetica 12 SetF [ 1 0 0 1 645 732 ] concat [ (p 5) ] Text End Begin %I Text 0 0 0 SetCFg /Helvetica 12 SetF [ 1 0 0 1 692 731 ] concat [ (p 6) ] Text End Begin %I Line 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 267 596 ] concat 121 248 111 238 Line End Begin %I Line 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 267 596 ] concat 277 248 269 236 Line End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 531 610 ] concat [ (RM/DS : RM with Deferrable Server) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 532 672 ] concat [ (RM : Rate Monotonic ) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 533 651 ] concat [ (FP : Fixed Priority) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 533 631 ] concat [ (RR : Round Robin) ] Text End Begin %I Line 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 57 481 66 470 Line End Begin %I Line 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 90 548 90 482 Line End Begin %I Line 2 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 255 549 255 484 Line End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 377 879 ] concat [ (RM/SS) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 532 589 ] concat [ (RM/SS : RM with Sporadic Server) ] Text End Begin %I Line 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 197 481 205 470 Line End Begin %I Line 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 230 481 230 472 Line End Begin %I Line 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 378 484 378 473 Line End Begin %I Line 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 231 387 231 415 Line End Begin %I Line 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 329 385 351 420 Line End Begin %I Line 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 423 384 406 417 Line End Begin %I Line 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 379 384 379 415 Line End Begin %I Line 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 51 384 67 416 Line End Begin %I Line 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 123 381 103 415 Line End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 310 671 ] concat [ (P i : Processor i) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 308 651 ] concat [ (Pset i : Processor Set i) ] Text End End %I eop showpage end %%EndDocument @endspecial 1254 1020 a(Figure)g(3:)k(ITDS)d(for)e(R)n(T)l(-Mach)982 1069 y 1026 3 v 150 x(used)18 b(by)e(the)h(scheduler)g(object)g(is)g(a)g(self-contai\ ned)f(object)h(and)982 1269 y(separated)f(from)e(the)g(mechanism)i(layer)f (used)g(to)e(actually)h(switch)982 1319 y(threads)e(within)f(the)h(kernel.)20 b(Using)12 b(the)g(ITDS)g(scheduler)o(,)h(we)f(can)982 1369 y(assign)d(\256ve) h(dif)n(ferent)f(polices)g(for)g(each)h(processor)f(set)g(in)g(R)m(T)m(-Mach) 982 1419 y(\(See)j(Figure)d(3\).)1024 1481 y(The)e(low)e(level)h(mechanism)i (layer)e(is)g(divided)f(into)g(two)h(sublayers:)982 1531 y(a)k(processor)g (set)f(management)i(sublayer)e(and)g(a)h(thread)f(dispatching)982 1581 y(mana\ gement)16 b(layer)n(.)27 b(The)15 b(processor)g(set)g(management)g(sublayer) 982 1631 y(manages)j(context)e(switching,)h(preemptions)f(of)g(threads)h(and) f(as-)982 1680 y(signment)c(of)g(processors.)21 b(The)12 b(thread)g(dispatchi\ ng)f(management)982 1730 y(layer)j(controls)e(idle)h(threads)g(and)g(aperiodi\ c)g(servers:)21 b(the)13 b(polling)982 1780 y(server)o(,)e(deferrable)g(serve\ r)n(,)g(and)f(sporadic)g(server[19].)1024 1843 y(Each)i(processor)e(set)h(can) h(have)f(a)g(scheduling)e(policy)h(since)h(each)982 1892 y(processor)i(set)g (maintains)e(its)h(own)g(run)g(queue)h(and)f(operations)f(for)982 1942 y(cont\ rolling)i(the)i(run)g(queue.)31 b(Therefore,)18 b(we)e(can)g(con\256gure)f (the)982 1992 y(system)h(for)e(the)h(various)f(real-time)h(applications.)28 b (For)15 b(example,)982 2042 y(let)i(us)h(consider)f(the)g(multiprocessor)f (with)g(six)h(processors,)j(and)982 2092 y(three)c(processor)f(sets:)26 b fl (pset)1422 2098 y fj(1)1438 2092 y fq(,)17 b fl(pset)1532 2098 y fj(2)1549 2092 y fq(,)g(and)e fl(pset)1718 2098 y fj(3)1735 2092 y fq(.)31 b fl(pset) 1843 2098 y fj(1)1875 2092 y fq(has)16 b(two)982 2142 y(processors:)i fl(p) 1208 2148 y fj(1)1237 2142 y fq(and)12 b fl(p)1330 2148 y fj(2)1346 2142 y fq (,)h fl(pset)1436 2148 y fj(2)1464 2142 y fq(has)g(one)f(processor:)17 b fl (p)1813 2148 y fj(3)1830 2142 y fq(,)12 b(and)g fl(pset)1991 2148 y fj(3)982 2191 y fq(has)17 b(a)f(three)g(processors:)26 b fl(p)1421 2197 y fj(4)1437 2191 y fq(,)18 b fl(p)1486 2197 y fj(5)1518 2191 y fq(and)e fl(p)1615 2197 y fj(6)1631 2191 y fq(.)33 b fl(pset)1741 2197 y fj(1)1773 2191 y fq(executes) 17 b(real-)982 2241 y(time)d(applications)e(using)g(two)h(processors)g(using) g(rate)g(monotonic)982 2291 y(with)d(deferrable)g(server)h(or)f(rate)h(monoto\ nic)e(with)g(sporadic)h(server)n(.)982 2341 y fl(pset)1049 2347 y fj(2)1076 2341 y fq(executes)g(real-time)g(and)g(non)f(real-time)h(applications,)e(so)i (the)982 2391 y(application)d(program)h(may)h(change)g(scheduling)f(policies) f(from)i(rate)982 2440 y(monotonic,)i(\256xed)h(priority)-5 b(,)13 b(or)e(rou\ nd-robin.)17 b fl(pset)1763 2446 y fj(3)1791 2440 y fq(executes)c(non)982 2490 y(real-time)i(applications)e(using)g(three)i(processors)g(by)f(round-robin) 982 2540 y(algorithm.)1024 2603 y(W)m(e)f(can)g(change)h(scheduling)d(policie\ s)h(by)g(using)g(the)g(following)982 2652 y(primitives.)j(The)c(policy)f(attr\ ibute)f(is)h(used)h(to)f(pass)i(policy)d(speci\256c)982 2702 y(arguments)f (such)g(as)h(a)g(server)r(')n(s)f(period,)g(capacity)h(of)f(the)g(server)o (,)h(etc.)982 2752 y(to)h(the)g(speci\256ed)h(policy)e(module)h(in)g(the)g (system.)935 2877 y(4)p eop %%Page: 5 5 bop -118 77 a 1026 3 v 0 233 a fq(kval)r 13 2 v 12 w(t)10 b(=)h fi(rt)s 13 2 v 12 w(get)s 13 2 v 12 w(sched)t 13 2 v 12 w(policy)p fq(\()f(policy)l(,)h (policy)q 13 2 v 12 w(attr)f(\))0 283 y(kval)r 13 2 v 12 w(t)g(=)h fi(rt)s 13 2 v 12 w(set)s 13 2 v 13 w(sched)s 13 2 v 13 w(policy)p fq(\()e(policy)l(,)i (policy)q 13 2 v 13 w(attr)e(\))-118 435 y 1026 3 v 135 x fm(2.5)50 b(Memory) 13 b(Object)e(Management)-118 653 y fq(The)f(kernel)e(must)h(also)g(avoid)g (unbounded)e(delay)j(while)e(it)g(manages)-118 703 y(memory)k(objects)g(for)g (real-time)g(threads.)20 b(In)12 b(general,)h(Mach')n(s)f(re-)-118 753 y(sour\ ce)e(allocation)e(policy)g(is)h(based)g(on)g fp(lazy)g fq(evaluation)g(techni\ que.)-118 803 y(For)g(instance,)h(if)f(a)h(thread)g(allocates)g(a)g(region)e (of)h(memory)n(,)h(the)g(sys-)-118 853 y(tem)k(does)f(not)g(allocate)g(the)h (physical)f(memory)g(object)g(unless)h(the)-118 902 y(thread)c(touches)g(the) g(region)g(and)g(cause)i(a)e(page)h(fault.)-77 955 y(In)g(order)f(to)g(elimin\ ate)g(such)g(unpredictable)g(page)h(fault)f(handing)-118 1005 y(delay)m(,)g (a)g(real-time)g(thread)f(can)h(\252pin-down\272)f(any)g(region)g(of)g(its)g (par-)-118 1055 y(ent)f(task')m(s)h(virtual)e(address)i(space)g(by)f(using)g (the)g(following)e fp(vm)s 13 2 v 12 w(wir)n(e)-118 1105 y fq(primitive.)-118 1211 y 1026 3 v 152 x(kval)r 13 2 v 12 w(t)k(=)h fi(vm)r 13 2 v 12 w(wir)o (e)p fq(\(task,)g(start)r 13 2 v 13 w(addr)n(,)g(size,)g(access)t 13 2 v 13 w (type\))-118 1516 y 1026 3 v 135 x fm(2.6)50 b(Schedulability)10 b(Analysis) -118 1734 y fq(In)15 b(the)g(R)m(T)m(-Thread)h(Model,)g(our)f(goal)g(is)g(to) f(provide)h(a)g(better)g(in-)-118 1784 y(terface)f(to)e(adopt)g(the)g(well-kn\ own)f(schedulability)g(analysis)h(tech-)-118 1834 y(niques.)36 b(For)17 b(ins\ tance,)j(given)c(a)i(set)g(of)f(periodic,)h(independent)-118 1884 y(tasks)13 b (in)f(a)i(single)e(processor)h(environment,)g(with)f(the)h(rate)g(mono-)-118 1933 y(tonic)e(scheduling)h(algorithm)f(the)h(worst)f(case)j(schedulable)f (bound)-118 1983 y(is)g(69%[13)n(],)i(the)e(average)h(case)h(is)e(88%)f([12],) i(and)f(the)g(best)h(case,)-118 2033 y(where)h(threads)h(have)f(harmonic)g (periods,)h(is)f(up)f(to)h(100%)f(of)h(the)-118 2083 y(CPU)10 b(utilization.) -77 2136 y(In)16 b(the)f(case)j(of)d(a)i(more)f(general)g(task)g(set)g(where) g(threads)g(can)-118 2185 y(synchronize)e(via)f(critical)h(regions,)g(we)h (can)f(also)g(bound)f(the)h(syn-)-118 2235 y(chronization)c(\(blocking\))f (time)j(for)e(each)j(task)e(by)g(using)g(the)g(prior-)-118 2285 y(ity)d(ceili\ ng)g(protocol.)14 b(Using)8 b(these)i(inheritance)f(protocols,)f(we)i(can) -118 2335 y(also)d(check)i(schedulable)e(bound)f(for)h fl(n)g fq(periodic)g (threads)g(as)h(follows.)85 2465 y fc(8)p fl(i)p fe(;)e fq(1)11 b fc(\024)h fl (i)f fc(\024)h fl(n)p fe(;)325 2448 y fk(B)343 2452 y fb(i)325 2456 y 26 2 v 326 2480 a fk(T)342 2484 y fb(i)365 2465 y fq(+)424 2413 y fk(i)398 2426 y fa (X)408 2515 y fk(j)p fj(=1)463 2444 y fk(C)482 2448 y fb(j)463 2456 y 28 2 v 464 2480 a fk(T)480 2484 y fb(j)506 2465 y fc(\024)g fl(i)p fq(\(2)601 2439 y fd(1)601 2444 y 11 2 v 604 2460 a fb(i)628 2465 y fc(\000)e fq(1\))-118 2600 y (where)h fl(C)22 2606 y fk(i)32 2600 y fq(,)g fl(T)76 2606 y fk(i)86 2600 y fq (,)h fl(B)133 2606 y fk(i)154 2600 y fq(represents)f(the)g(total)e(computatio\ n)h(time,)h(the)f(pe-)-118 2649 y(riod,)e(and)h(the)g(worst)g(case)h(blocking) d(time)i(of)g fl(Thread)680 2655 y fk(i)699 2649 y fq(respectively)m(.)-77 2702 y(These)14 b(techniques)f(are)h(integrated)d(with)h(our)h(real-time)f (toolset.)-118 2752 y(However)n(,)17 b(providing)12 b(end-to-end)h(schedulabi\ lity)g(analysis)i(for)f(a)982 77 y(given)e(task)h(set)f(which)h(communicates) g(over)f(a)h(real-time)g(network)982 127 y(still)c(remains)i(as)g(a)g(future) e(challenge)1539 112 y fj(3)1556 127 y fq(.)982 285 y fr(3)60 b(Implementatio\ n)982 385 y fq(The)16 b(current)e(version)g(of)g(R)m(T)m(-Mach)h(is)f(being)g (developed)h(using)e(a)982 434 y(network)e(of)f(SUN,)i(SONY)f(workstations)e (and)i(single)f(board)h(tar)o(get)982 484 y(machines.)34 b(W)m(e)17 b(\256rst) f(experimented)g(with)f(our)h(real-time)g(thread)982 534 y(model)f(using)e (a)i(modi\256ed)f(version)f(of)h(Release)i(2.5)e(Mach)h(kernel)982 584 y(whic\ h)6 b(can)i(support)d(\256xed)i(priority)t(thread)f(scheduling,)h(a)g(cpu)f (server)982 634 y(\(i.e.,)11 b(processor)f(set\),)h(and)f(a)g fp(vm)s 13 2 v 13 w(wir)m(e)h fq(call.)k(W)m(e)10 b(then)g(moved)g(to)f(the)982 683 y(curren\ t)j(pure)g(kernel)g(based)g(environment.)19 b(The)13 b(pure)f(kernel)g(pro-) 982 733 y(vided)k(us)g(much)h(better)f(execution)g(environment)f(where)h(we)h (can)982 783 y(reduce)c(unexpected)g(delays)f(in)f(the)h(kernel)g(and)h(can)f (run)g(real-time)982 833 y(threads)g(without)d(having)h(a)h(UNIX)g(server)o (,)h(if)f(necessary)n(.)18 b(The)12 b(pre-)982 883 y(emptability)7 b(of)h(the) g(kernel)g(was)g(also)h(improved)e(signi\256cantly)g(since)982 933 y(many)k (device)g(drivers)e(are)i(no)f(longer)g(in)f(the)i(kernel.)1024 986 y(A)f(pla\ tform)e(for)i(R)m(T)l(-Mach)h(has)f(slightly)d(dif)o(ferent)i(requirements) 982 1036 y(in)15 b(terms)h(of)g(its)f(execution)g(environment.)30 b(For)15 b (embedded)i(real-)982 1085 y(time)c(applications,)h(we)f(need)h(to)e(support) g(not)h(only)f(various)g(types)982 1135 y(of)17 b(workstations,)h(but)e(also) h(a)h(wide)f(variety)g(of)f(single-board)g(or)982 1185 y(multiple-board)c(bas\ ed)i(tar)o(get)f(machine)i(environments.)24 b(Booting)982 1235 y(the)9 b(tar) o(get)f(machines)i(also)f(requires)f(a)h(dif)o(ferent)f(booting)f(procedure) 982 1285 y(via)i(the)g(system')n(s)g(backplane-bus)g(or)g(via)f(a)i(network.) k(For)8 b(instance,)982 1334 y(we)j(are)g(working)e(on)h(a)h(VME-bus)f(based) h(tar)o(get)f(environment.)k(For)982 1384 y(real-time)d(communication,)f(we)h (are)g(also)f(supporting)e(a)j(FDDI)f(net-)982 1434 y(work)g(in)g(addition)e (to)i(the)g(IEEE)h(802.5)f(token)g(ring)f(network.)1024 1487 y(In)e(this)g (section,)h(we)g(will)f(describe)h(some)g(implementation)f(issues)982 1537 y (encountered)13 b(in)f(our)h(\256rst)f(version)g(of)h(the)g(pure)f(kernel-bas\ ed)h(R)n(T)l(-)982 1587 y(Mach.)22 b(W)m(e)13 b(also)f(discuss)g(the)g(capabi\ lity)f(of)h(the)g(real-time)g(toolset)982 1637 y(and)f(the)f(current)g(status) g(of)g(R)m(T)l(-Mach.)982 1774 y fm(3.1)50 b(Implementation)12 b(Issues)982 1858 y fq(Our)6 b(primary)g(focus)g(in)g(the)g(current)g(implementation)f(was) i(to)e(remove)982 1908 y(unbounded)h(delay)i(in)e(the)h(system)h(and)g(provid\ e)e(better)h(preemptabil-)982 1958 y(ity)k(among)g(real-time)g(threads.)19 b (However)n(,)12 b(there)f(are)i(many)e(places)982 2008 y(we)18 b(encountered) f(problems)f(in)h(managing)f(system)i(resources)g(in)982 2058 y(Mach.)d(In)7 b (many)g(cases,)j(we)e(can)f(recognize)h(dif)n(ferences)h(in)d(resource)982 2108 y(allocation)12 b(policy)g(between)h(the)g(time-sharing)f(paradigm)h(and) g(the)982 2157 y(real-time)e(computing)e(paradigm.)15 b(Major)10 b(policy)f (dif)n(ferences)j(are)1024 2262 y fc(\017)20 b fq(\252lazy\272)12 b(evaluatio\ n)d(vs.)15 b(\252eager)s(\272)c(evaluation)e(policy)1024 2359 y fc(\017)20 b fq(FIFO)13 b(ordering)e(vs.)22 b(deadline-driven)11 b(ordering)h(\(starvation\ -)1065 2409 y(free)f(vs.)16 b(no)9 b(missed)i(deadlines\))1024 2506 y fc(\017) 20 b fq(unbounded)9 b(delay)i(vs.)k(bounded)9 b(delay)982 2555 y 411 2 v 1028 2583 a fo(3)1042 2595 y fn(Using)k(the)g(latest)h(processor)e(architecture)g (such)h(as)g(various)f(RISC)j(chips,)f(it)1042 2634 y(becomes)9 b(an)h(intere\ sting)h(practical)f(problem)f(in)i(determining)e(the)i(worst)g(case)1042 2674 y(execution)d(time)h(for)g(sections)f(of)h(code)f(\(which)g(must)h(take)g(int\ o)g(account)e(cache)1042 2713 y(management)f(and)h(pipelined)g(architectures\ \).)935 2877 y fq(5)p eop %%Page: 6 6 bop -118 38 a 1026 3 v 50 x @beginspecial -90 @hoffset -400 @voffset 0.700000 @hscale 0.700000 @vscale @setspecial %%BeginDocument: lock1.ps 50 dict begin /arrowHeight 8 def /arrowWidth 4 def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { /patternGrayLevel idef patternGrayLevel -1 eq { /patternString idef } if false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont findfont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 0 descender sub printSize sub printFont /Courier ne printFont /Courier-Bold ne and { 1 add } if def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def Begin [ 0.6 0 0 0.6 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 276 362 ] concat 148 288 290 488 Rect End Begin %I Rect 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 274 363 ] concat 190 328 255 447 Rect End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 473 797 ] concat [ (l2) ] Text End Begin %I Line 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 222 529 222 370 Line End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 407 539 322 535 293 493 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 374 489 276 469 258 452 3 BSpl End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 437 838 ] concat [ (l1) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 664 920 ] concat [ (Th2 \(8\)) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 654 868 ] concat [ (Th3 \(9\)) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 512 914 ] concat [ (Th1 \(7\)) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 507 874 ] concat [ (\(7\)) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 507 832 ] concat [ (\(8\)) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 507 763 ] concat [ (\(9\)) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 507 679 ] concat [ (\(8\)) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 508 626 ] concat [ (\(7\)) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 358 610 ] concat [ (Th i : Thread i) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 359 590 ] concat [ (l i : Lock i) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Italic 14 SetF [ 1 0 0 1 357 571 ] concat [ (\(i\) : priority ) ] Text End End %I eop showpage end %%EndDocument @endspecial 18 930 a fq(Figure)9 b(4:)15 b(Priority)8 b(Inheritance)i(in)g (Nested)g(Lock)-118 979 y 1026 3 v -77 1126 a(In)f(many)h(resource)g(allocati\ on)e(cases,)j(Mach)f(takes)g(advantage)f(in)-118 1175 y(deferring)h(the)h(act\ ual)g(allocation)f(of)h(resources)h(until)d(the)i(requester)-118 1225 y(needs) h(it.)k fp(Copy-on-write)10 b fq(and)h fp(map-on-r)m(efer)o(ence)h fq(techniq\ ues)f(are)-118 1275 y(good)i(examples)h(of)g(the)g(lazy)g(evaluation)e(scheme\ .)28 b(On)13 b(the)h(other)-118 1325 y(hand,)9 b(this)e(type)h(of)f(memory)i (management)g(policy)e(often)h(creates)h(an)-118 1375 y(unpredictable)h(delay) g(in)g(getting)f(the)i(actual)f(resources)i(that)e(the)g(re-)-118 1424 y(ques\ ter)f(needs.)15 b(For)9 b(instance,)h(if)e(a)i(thread)e(needs)i(to)e(allocate) i(mem-)-118 1474 y(ory)m(,)i(it)g(calls)g fp(vm)s 13 2 v 12 w(alloc)f fq(rout\ ine,)h(but)f(the)g(actual)i(physical)e(memory)-118 1524 y(may)k(not)f(be)h (allocated)g(unless)f(the)h(thread)f(actually)h(touches)f(that)-118 1574 y (region)j(and)h(causes)h(a)f(page)g(fault.)37 b(However)n(,)20 b(if)e(the)f (thread)h(is)-118 1624 y(a)d(real-time)f(thread,)h(it)f(cannot)g(afford)f(to) h(wait)g(for)f(unpredictable)-118 1674 y(page)k(fault)g(service)g(time.)36 b (Rather)n(,)19 b(we)f(would)d(like)i(to)f(allocate)-118 1723 y(memory)11 b (resources)h(in)e(eager)i(fashion.)k(W)l(e)c(can)f(then)f(estimate)i(the)-118 1773 y(worst)e(case)h(time)g(for)e(the)h(allocation)f(delay)n(.)-77 1834 y (Mach)f(uses)f(many)g(queues)g(to)f(manage)i(various)e(system)i(resources) -118 1884 y(such)13 b(as)g(ready)g(queues,)i(message)f(queues,)g(and)f(free)g (memory)h(list)-118 1933 y(queues.)k(FIFO)11 b(queuing)f(is)h(often)f(used)i (in)e(these)i(queues)f(since)h(the)-118 1983 y(system)e(can)h(easily)f(avoid) g(the)f(starvation)g(among)h(waiting)f(threads.)-118 2033 y(However)n(,)18 b (in)e(a)h(real-time)f(environment,)h(FIFO)f(queueing)f(often)-118 2083 y(crea\ tes)c(a)f(priority)d(inversion)h(problem.)14 b(If)9 b(all)g(of)g(real-time)g (threads)-118 2133 y(can)e(meet)h(their)d(deadlines,)j(then)e(there)h(will)e (be)i(no)f(starvation)f(among)-118 2182 y(these)11 b(threads.)-77 2243 y(Simi\ larly)l(,)e(in)e(real-time)g(synchronization,)g(we)h(do)f(not)g(treat)g(wait-) -118 2293 y(ing)16 b(threads)h(in)f(FIFO)h(order)m(.)36 b(For)16 b(instance,) j(when)e(a)h(real-time)-118 2343 y(thread)e(attempts)h(to)f(enter)h(a)g(criti\ cal)f(region,)h(it)f(will)g(be)g(queued)-118 2393 y(in)f(its)f(waiting)g(queu\ e)i(in)e(earliest)i(deadline)f(\256rst)g(\(or)f(the)h(highest)-118 2442 y(pri\ ority)9 b(\256rst\))j(order)m(.)20 b(Then,)14 b(when)e(a)g(thread)g(exits)f (from)h(the)g(criti-)-118 2492 y(cal)f(region,)e(the)h(highest)g(priority)d (real-time)k(thread)f(will)f(be)h(chosen)-118 2542 y(rather)g(than)g(the)g (oldest)g(waiting)e(thread)j(in)e(the)h(waiting)f(queue.)-77 2603 y(In)e(R)m (T)m(-Mach,)h(we)f(also)g(use)g(a)g(basic)g(priority)e(inheritance)h(protocol) -118 2652 y(to)12 b(avoid)f(priority)f(inversion)h(problem)h(in)g(real-time)g (synchroniza-)-118 2702 y(tion.)32 b(Let)17 b(us)f(describe)h(three)f(interes\ ting)f(cases)j(where)f(priority)-118 2752 y(inheritance)10 b(requires)g(an)g (additional)f(mechanism.)982 38 y 1026 3 v 50 x @beginspecial -90 @hoffset -360 @voffset 0.700000 @hscale 0.700000 @vscale @setspecial %%BeginDocument: lock2.ps 50 dict begin /arrowHeight 8 def /arrowWidth 4 def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { /patternGrayLevel idef patternGrayLevel -1 eq { /patternString idef } if false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont findfont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 0 descender sub printSize sub printFont /Courier ne printFont /Courier-Bold ne and { 1 add } if def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def Begin [ 0.6 0 0 0.6 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 276 362 ] concat 109 369 38 38 Elli End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 282 362 ] concat 230 236 38 40 Elli End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 277 364 ] concat 375 370 37 39 Elli End Begin %I Rect 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 277 373 ] concat 123 236 164 290 Rect End Begin %I Rect 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 276 362 ] concat 308 249 349 304 Rect End Begin %I BSpl 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 274.5 362 ] concat 99 333 99 303 123 299 3 BSpl End Begin %I BSpl 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 276 363 ] concat 275 230 312 231 322 247 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 329 307 328 346 339 362 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 278 362 ] concat 165 299 218 300 230 280 3 BSpl End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 640 739 ] concat [ (Th 1) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 415 644 ] concat [ (l1) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 500 604 ] concat [ (Th 2) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 599 645 ] concat [ (l2) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 377 736 ] concat [ (Th3) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 383 548 ] concat [ (Th i : Thread i) ] Text End Begin %I Line 2 0 0 [2 2 2 2 2 2 2 2] 15 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 1 0 0 1 276 362 ] concat 109 117 188 117 Line End Begin %I Line 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 279 351 ] concat 109 91 187 91 Line End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 493 456 ] concat [ (Acquired Lock) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 494 487 ] concat [ (Wait For Relation) ] Text End Begin %I Line 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 0.5 0 0 0.5 391.5 509.5 ] concat 398 185 408 195 Line End Begin %I Line 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 0.5 0 0 0.5 269 511 ] concat 244 302 255 301 Line End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 276 362 ] concat 329 307 328 346 339 362 3 BSpl End Begin %I BSpl 1 1 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 275 355 ] concat 165 299 218 300 230 280 3 BSpl End Begin %I BSpl 1 1 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 283 361 ] concat 329 307 328 346 339 362 3 BSpl End Begin %I Text 0 0 0 SetCFg /Times-Roman 14 SetF [ 1 0 0 1 384 525 ] concat [ (l i : Lock i) ] Text End Begin %I Line 1 1 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 278 359 ] concat 109 91 187 91 Line End End %I eop showpage end %%EndDocument @endspecial 1165 930 a(Figure)h(5:)k(Cascaded)e(Priority)c(Inheritance)982 979 y 1026 3 v 1024 1113 a(In)13 b(the)g(\256rst)h(example,)h(when)e(a)h(prio\ rity)e(inversion)g(occurs)i(in)e(a)982 1162 y(nested)f(critical)f(region,)g (the)g(propagation)f(of)h(the)g(effective)g(priority)982 1212 y(has)j(to)f (be)h(performed)g(carefully)m(.)22 b(Let)13 b(us)f(consider)h(three)f(threads\ :)982 1262 y fl(th)1015 1268 y fj(1)1031 1262 y fq(,)g fl(th)1086 1268 y fj (2)1102 1262 y fq(,)f(and)g fl(th)1227 1268 y fj(3)1243 1262 y fq(,)g(and)g (two)f(locks:)15 b fl(l)1535 1268 y fj(1)1562 1262 y fq(and)c fl(l)1645 1268 y fj(2)1661 1262 y fq(.)17 b(W)m(e)11 b(assume)h(that)e fl(th)1992 1268 y fj (1)982 1312 y fq(has)k(priority)d(7,)j fl(th)1267 1318 y fj(2)1296 1312 y fq (has)f(priority)e(8,)j(and)f fl(th)1653 1318 y fj(3)1682 1312 y fq(has)h(prio\ rity)d(9.)23 b(The)982 1362 y(lar)o(ger)15 b(value)g(means)h(higher)e(priorit\ y)-5 b(.)29 b fl(th)1634 1368 y fj(1)1665 1362 y fq(acquires)15 b fl(l)1830 1368 y fj(1)1861 1362 y fq(and)g(then)982 1412 y fl(l)994 1418 y fj(2)1011 1412 y fq(.)j fl(th)1072 1418 y fj(3)1100 1412 y fq(then)11 b(tries)g(to)g (acquire)g fl(l)1455 1418 y fj(2)1472 1412 y fq(,)h(and)f fl(th)1598 1418 y fj (2)1626 1412 y fq(tries)g(to)g(acquire)g fl(l)1898 1418 y fj(1)1914 1412 y fq (.)19 b(The)982 1461 y(priority)7 b(inheritance)h(protocol)f(makes)i fl(th) 1603 1467 y fj(1)1628 1461 y fq(inherit)e(a)i(priority)d(of)j fl(th)1982 1467 y fj(3)1997 1461 y fq(,)982 1511 y(then)14 b(the)f(priority)f(of)h fl(th)1352 1517 y fj(1)1382 1511 y fq(becomes)i(9.)25 b(After)13 b fl(th)1731 1517 y fj (1)1761 1511 y fq(unlocks)g fl(l)1916 1517 y fj(2)1932 1511 y fq(,)i(the)982 1561 y(priority)c(of)i fl(th)1201 1567 y fj(1)1230 1561 y fq(must)g(become)i (8)e(because)h fl(th)1678 1567 y fj(2)1694 1561 y fq(')n(s)f(priority)e(is)i (8)g(and)982 1611 y fl(th)1015 1617 y fj(2)1046 1611 y fq(waits)h(for)g fl (th)1244 1617 y fj(1)1274 1611 y fq(for)g(unlocking)e fl(l)1529 1617 y fj(1) 1545 1611 y fq(.)28 b(When)14 b fl(th)1729 1617 y fj(1)1760 1611 y fq(unlocks) f fl(l)1915 1617 y fj(1)1931 1611 y fq(,)j(the)982 1661 y(priority)8 b(of)i fl (th)1195 1667 y fj(1)1222 1661 y fq(goes)g(back)h(to)e(the)i(base)g(priority) d(7.)1024 1715 y(The)14 b(second)f(case)i(is)e(where)h(the)f fp(waiting)e(for) i fq(relation)f(must)h(be)982 1765 y(maintained)c(among)g(threads)f(so)h(that) f(we)i(can)f(propagate)g(the)g(proper)982 1814 y(priority)h(to)h(a)i(tar)o (get)f(thread.)20 b(Let)13 b(us)f(consider)g(three)g(threads:)18 b fl(th)1982 1820 y fj(1)1997 1814 y fq(,)982 1864 y fl(th)1015 1870 y fj(2)1031 1864 y fq (,)9 b(and)e fl(th)1150 1870 y fj(3)1166 1864 y fq(,)h(and)f(two)g(locks)g fl (l)1428 1870 y fj(1)1452 1864 y fq(and)g fl(l)1531 1870 y fj(2)1547 1864 y fq (.)14 b fl(th)1604 1870 y fj(3)1628 1864 y fq(has)7 b(the)g(highest)g(priorit\ y)-6 b(,)982 1914 y fl(th)1015 1920 y fj(2)1046 1914 y fq(has)14 b(middle)g (priority)-5 b(,)15 b(and)f(the)g(priority)e(of)i fl(th)1752 1920 y fj(1)1782 1914 y fq(is)g(the)g(lowest.)982 1964 y fl(th)1015 1970 y fj(1)1048 1964 y fq (acquires)j fl(l)1215 1970 y fj(2)1231 1964 y fq(.)34 b fl(th)1308 1970 y fj (2)1341 1964 y fq(acquires)17 b fl(l)1508 1970 y fj(1)1541 1964 y fq(and)f (waits)h(for)f(unlocking)e fl(l)1981 1970 y fj(2)1997 1964 y fq(.)982 2014 y (When)g fl(th)1128 2020 y fj(3)1157 2014 y fq(tries)e(to)g(acquired)h fl(l) 1454 2020 y fj(1)1471 2014 y fq(,)h fl(th)1528 2020 y fj(1)1557 2014 y fq(mus\ t)e(inherit)g(the)h(priority)d(of)982 2063 y fl(th)1015 2069 y fj(3)1031 2063 y fq(.)15 b(T)m(o)8 b(manage)i(this)d(type)h(of)g(blocking)e(case,)11 b(the)d (ef)o(fect)h(of)e(priority)982 2113 y(inheritance)j(is)g(cascaded)1363 2098 y fj(4)1382 2113 y fq(.)1024 2167 y(The)i(third)f(case)i(is)f(where)g(the)g(hig\ hest)f(priority)e(thread)j(is)f(timed)982 2217 y(out)h(while)f(waiting)g(for) g(a)i(lock.)20 b(For)12 b(instance,)h(in)e(Figure)g(5,)i fl(th)1952 2223 y fj (3)1980 2217 y fq(is)982 2267 y(inherits)d(the)h(priority)e(of)h fl(th)1394 2273 y fj(1)1410 2267 y fq(.)18 b(However)o(,)11 b(if)g fl(th)1680 2273 y fj (1)1707 2267 y fq(is)g(timed)f(out)h(while)982 2317 y(waiting)f(for)h fl(l) 1190 2323 y fj(1)1206 2317 y fq(,)h(the)f(priority)e(of)i fl(th)1505 2323 y fj (3)1532 2317 y fq(must)g(be)g(changed)h(back)g(to)e(the)982 2367 y(priority)e (of)i fl(th)1195 2373 y fj(2)1211 2367 y fq(.)1024 2421 y(The)k(above)h(probl\ ems)e(can)i(be)f(solved)f(by)h(maintaining)e(a)j(rela-)982 2471 y(tion)10 b (between)i(the)f(lock)g(variables)g(and)h(the)f(threads.)18 b(In)11 b(R)n(T)l (-Mach,)982 2520 y(each)h(thread)e(maintains)f(a)i(pointer)e(to)g(lock)h(vari\ ables,)g(and)g(the)g(lock)982 2570 y(variable)15 b(also)f(keeps)i(track)e(of) h(the)f(nesting)g(relation)f(to)h(the)h(other)982 2620 y(locks)c(and)g(the)g (holding)d(thread.)17 b(For)11 b(example,)h(in)e(Figure)h(4,)g(when)982 2673 y 411 2 v 1028 2701 a fo(4)1042 2713 y fn(The)d(similar)h(cascading)d(problem)h (and)g(its)i(solution)e(was)h(also)g(described)e(in)j([8)o(])935 2877 y fq (6)p eop %%Page: 7 7 bop -118 77 a fl(th)-85 83 y fj(1)-55 77 y fq(acquires)15 b fl(l)110 83 y fj (1)126 77 y fq(,)h fl(th)185 83 y fj(1)215 77 y fq(points)d(to)g fl(l)389 83 y fj(1)405 77 y fq(.)27 b(Next,)16 b(when)e fl(th)686 83 y fj(1)716 77 y fq(acq\ uires)h fl(l)881 83 y fj(2)897 77 y fq(,)-118 127 y fl(l)-106 133 y fj(2)-75 127 y fq(points)e(to)h fl(l)100 133 y fj(1)116 127 y fq(,)i(and)f fl(th)250 133 y fj(1)280 127 y fq(points)f(to)g fl(l)456 133 y fj(2)472 127 y fq(.)28 b (Then,)16 b(if)e fl(th)694 133 y fj(1)725 127 y fq(unlocks)g fl(l)881 133 y fj (2)897 127 y fq(,)-118 177 y(the)c(priority)e(of)h fl(th)155 183 y fj(1)182 177 y fq(can)i(degrade)f(to)g(the)g(priority)d(of)j fl(th)p fq(2)g(because)h fl(l)891 183 y fj(2)-118 226 y fq(knows)f fl(l)13 232 y fj(1)29 226 y fq(,)h (and)f fl(l)132 232 y fj(1)158 226 y fq(knows)g(the)g(priority)e(of)i fl(th) 551 232 y fj(2)567 226 y fq(.)-77 278 y(W)m(e)17 b(can)g(solve)f(the)g(timeou\ t)g(problem)g(mentioned)f(above,)k(the)-118 328 y(following)12 b(way)m(.)28 b (From)15 b(Figure)e(5,)j fl(th)469 334 y fj(1)500 328 y fq(points)d(to)g fl (l)674 334 y fj(1)690 328 y fq(,)j fl(l)728 334 y fj(1)759 328 y fq(points)d (to)-118 378 y fl(th)-85 384 y fj(2)-69 378 y fq(,)i fl(th)-11 384 y fj(2)19 378 y fq(points)d(to)h fl(l)192 384 y fj(2)208 378 y fq(,)j(and)d fl(l)319 384 y fj(2)349 378 y fq(points)g(to)g fl(th)544 384 y fj(3)560 378 y fq(.)26 b (So,)15 b fl(th)698 384 y fj(1)727 378 y fq(can)g(inherit)-118 428 y(the)10 b (priority)e(of)j fl(th)157 434 y fj(3)173 428 y fq(.)16 b(If)10 b fl(th)270 434 y fj(1)297 428 y fq(is)g(timed)g(out)g(while)g(waiting)f(to)h(acquire) -118 478 y fl(l)-106 484 y fj(1)-90 478 y fq(,)h(the)e(priority)f(of)h fl(th) 203 484 y fj(2)229 478 y fq(reverts)h(to)g(its)f(base)i(priority)-5 b(,)10 b (and)g fl(th)773 484 y fj(3)799 478 y fq(inherit)-118 527 y(that)g(priority) -6 b(.)-118 658 y fm(3.2)50 b(Real-T)o(ime)13 b(T)-5 b(oolset)-118 740 y fq (W)m(e)15 b(have)h(also)f(developed)f(a)i(set)f(of)f(tools)g(which)h(we)g(can) h(use)f(in)-118 790 y(conjunction)8 b(with)h(Real-T)o(ime)i(Mach)g(for)e(pred\ icting)g(the)h(behavior)-118 839 y(of)f(the)h(system)g(and)f(for)h(runtime)e (monitoring)g(and)h(debugging.)14 b(The)-118 889 y(goal)d(of)f(the)h(toolset) f(is)h(to)g(incorporate)f(a)h(system-wide)h(scheduling)-118 939 y(analysis)h (which)h(includes)f(communication)g(and)g(synchronization)-118 989 y(among)j (real-time)f(threads.)31 b(The)17 b(toolset)d(consists)h(of)g fp(Scheduler) -118 1039 y(1-2-3)9 b fq(and)i fp(ARM)p fq(.)-77 1091 y fp(Scheduler)g(1-2-3) f fq(is)g(a)h(schedulability)e(analyzer)i(and)g(is)f(an)h(X11-)-118 1141 y (window)e(based)j(interactive)e(tool)f(for)h(creating,)h(manipulating,)e(and) -118 1190 y(analyzing)17 b(real-time)g(task)g(sets.)37 b(It)17 b(employs)g (methods)h(ranging)-118 1240 y(from)10 b(closed)h(form)f(analysis)g(to)g(simu\ lation)f(to)h(determine)h(whether)-118 1290 y(a)16 b(feasible)g(schedule)g (exists)g(for)f(a)h(given)f(task)h(set)g(and)g(what)g(the)-118 1340 y(schedul\ able)10 b(bound)f(is)h(for)g(that)g(set.)-77 1392 y fp(ARM)p fq(\(Advanced)d (Real-T)o(ime)f(Monitor\))f(is)h(also)g(an)g(X11-window)-118 1442 y(based)14 b (tool)e(designed)g(to)h(analyze)h(and)f(visualize)g(the)g(runtime)f(be-)-118 1491 y(havior)h(of)g(the)g(tar)o(get)g(nodes)h(in)f(real)g(time.)25 b(The)14 b (ARM)g(allows)e(us)-118 1541 y(to)h(reach)h(into)e(a)i(remote)f(tar)o(get)h (and)f(view)g(the)g(scheduling)f(events)-118 1591 y(which)e(are)h(extracted)f (using)g(event)g(taps)g(in)g(R)m(T)m(-Mach.)-118 1722 y fm(3.3)50 b(Curr)o (ent)12 b(Status)-118 1803 y fq(In)h(the)g(current)g(version)g(of)g(R)m(T)l (-Mach,)i(the)f(R)m(T)l(-thread)f(model)g(and)-118 1853 y(extended)f(ITDS)h (scheduler)g(have)g(been)g(implemented.)22 b(R)m(T)m(-Mach)-118 1903 y(has)12 b(also)f(been)h(integrated)e(with)g(the)h(real-time)h(tool)e(set.)18 b(In)11 b (Figure)-118 1953 y(6,)g(we)h(show)e(the)h(snapshot)f(of)h(ARM)f(with)g(three) h(periodic)f(threads,)-118 2003 y(and)i(ten)h(aperiodic)f(threads.)22 b(ARM) 12 b(is)g(useful)g(for)h(monitoring)d(the)-118 2052 y(occurrences)i(of)f(pree\ mption)f(and)i(the)f(order)f(in)h(which)g(threads)g(are)-118 2102 y(executed.) 16 b(T)n(iming)9 b(bugs)g(can)i(also)e(be)h(deleted)g(easily)g(using)e(ARM.) -77 2154 y(Figure)15 b(7)g(demonstrates)g(the)g(R)m(T)m(-thread)g(model.)29 b (In)15 b(the)g(gmol)-118 2204 y(demo,)10 b(seven)f(periodic)f(threads)g(are)i (created)f(and)g(every)g(thread)g(rep-)-118 2254 y(resents)j(an)g(atom)g(of)f (a)h(molecule.)20 b(The)12 b(threads,)h(while)e(executing,)-118 2304 y(cause) 18 b(the)f(molecule)g(to)f(rotate)g(about)g(an)h(axis)g(passing)f(through) -118 2354 y(the)f(atom)g(at)g(the)f(center)n(.)30 b(If)14 b(scheduled)h(corre\ ctly)m(,)h(the)f(molecule)-118 2403 y(maintains)10 b(its)g(integrity)-5 b(,) 11 b(otherwise)f(the)g(atoms)h(move)g(in)f(a)h(random)-118 2453 y(fashion.)28 b(Gmol)15 b(visually)e(demonstrates)i(lack)g(of)g(schedulability)-5 b(,)-118 2503 y(when)14 b(the)g(molecule')m(s)h(rotation)d(is)i(random.)26 b(If)14 b (we)g(use)h(a)f(proper)-118 2553 y(scheduling)6 b(policy)l(,)i(we)g(can)g(ens\ ure)f(schedulability)f(with)g(high)g(CPU)-118 2603 y(utilization)h(and)j(each) g(molecule)g(rotates)g(in)f(a)h(completely)f(synchro-)-118 2652 y(nized)e(way) g(\(the)f(left)h(\256gure\).)14 b(However)n(,)8 b(if)e(the)h(scheduling)f(pol\ icy)g(is)-118 2702 y(inappropriate,)i(some)i(deadlines)e(are)i(missed,)g(so)f (the)g(synchronized)-118 2752 y(rotation)d(of)i(the)f(molecules)h(is)g(violat\ ed,)g(and)g(each)h(molecule)f(rotates)982 38 y 1026 3 v 50 x @beginspecial -149 @hoffset -740 @voffset @setspecial %%BeginDocument: gmolgmol.ps /BS {/SV save def 0.0 792.0 translate .01 -.01 scale} bind def /ES {showpage SV restore} bind def /SC {setrgbcolor} bind def /FMTX matrix def /RDF {WFT SLT 0.0 eq {SSZ 0.0 0.0 SSZ neg 0.0 0.0 FMTX astore} {SSZ 0.0 SLT neg sin SLT cos div SSZ mul SSZ neg 0.0 0.0 FMTX astore} ifelse makefont setfont} bind def /SLT 0.0 def /SI { /SLT exch cvr def RDF} bind def /WFT /Courier findfont def /SF { /WFT exch findfont def RDF} bind def /SSZ 1000.0 def /SS { /SSZ exch 100.0 mul def RDF} bind def /AF { /WFT exch findfont def /SSZ exch 100.0 mul def RDF} bind def /MT /moveto load def /XM {currentpoint exch pop moveto} bind def /UL {gsave newpath moveto dup 2.0 div 0.0 exch rmoveto setlinewidth 0.0 rlineto stroke grestore} bind def /LH {gsave newpath moveto setlinewidth 0.0 rlineto gsave stroke grestore} bind def /LV {gsave newpath moveto setlinewidth 0.0 exch rlineto gsave stroke grestore} bind def /BX {gsave newpath moveto setlinewidth exch dup 0.0 rlineto exch 0.0 exch neg rlineto neg 0.0 rlineto closepath gsave stroke grestore} bind def /BX1 {grestore} bind def /BX2 {setlinewidth 1 setgray stroke grestore} bind def /PB {/PV save def newpath 3 -1 roll sub translate 100.0 -100.0 scale /showpage {} def} bind def /PE {PV restore} bind def /GB {/PV save def newpath translate rotate div dup scale 100.0 -100.0 scale /showpage {} def} bind def /GE {PV restore} bind def /FB {dict dup /FontMapDict exch def begin} bind def /FM {cvn exch cvn exch def} bind def /FE {end /original-findfont /findfont load def /findfont {dup FontMapDict exch known{FontMapDict exch get} if original-findfont} def} bind def /BC {gsave moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath clip} bind def /EC /grestore load def /SH /show load def /MX {exch show 0.0 rmoveto} bind def /W {0 32 4 -1 roll widthshow} bind def /WX {0 32 5 -1 roll widthshow 0.0 rmoveto} bind def /RC {100.0 -100.0 scale 612.0 0.0 translate -90.0 rotate .01 -.01 scale} bind def /URC {100.0 -100.0 scale 90.0 rotate -612.0 0.0 translate .01 -.01 scale} bind def /RCC {100.0 -100.0 scale 0.0 -792.0 translate 90.0 rotate .01 -.01 scale} bind def /URCC {100.0 -100.0 scale -90.0 rotate 0.0 792.0 translate .01 -.01 scale} bind def systemdict/currentpacking known{currentpacking true setpacking}if /LW{save statusdict/product get(LaserWriter)anchorsearch exch pop{length 0 eq{1}{2}ifelse}{0}ifelse exch restore}bind def /LW+{LW 2 eq}bind def /ok{systemdict/statusdict known dup{LW 0 gt and}if}bind def /md 250 dict def md begin /av 65 def /T true def /F false def /mtx matrix def /s75 75 string def /s8 8 string def /s1 ( ) def /pxs 1 def /pys 1 def 1 0 mtx defaultmatrix dtransform exch atan/pa exch def /nlw .24 def /ppr [-32 -29.52 762 582.48] def % default printable page rectangle /pgs 1 def /por true def /xb 500 array def /so true def /fillflag false def /pnm 1 def /fmv true def /sfl false def /ma 0 def /invertflag false def /xflip false def /yflip false def /noflips true def /scaleby96 false def /fNote true def /fBitStretch true def /fg (Rvd\001\001\000\000\177) def /bdf{bind def}bind def /xdf{exch def}bdf /xl{neg exch neg translate}bdf /fp{pnsh 0 ne pnsv 0 ne and}bdf /nop{}bdf/lnop[/nop load]cvx bdf /vrb[ {fp{gsave 1 setlinewidth pnsh pnsv scale stroke grestore}if newpath}bind /eofill load dup /newpath load 2 index dup {clip newpath}bind {}bind dup 2 copy ]def currentscreen/spf xdf/rot xdf/freq xdf /doop{vrb exch get exec}bdf /psu{ pop /fNote xdf /fBitStretch xdf /scaleby96 xdf pop F %UNI force yflip off /yflip xdf pop F %UNI force xflip off /xflip xdf pop F %UNI force black/white reversing off /invertflag xdf xflip yflip or{/noflips false def}if /pgs xdf % set pgs 2 index % get copy of scale .72 mul exch div /pys xdf % pys = (.72 * scale) / dpiy % S: smooth por bbs1 bbs2 bbey bbex scale dpix div .72 mul /pxs xdf % pxs = .72 * (scale / dpix) 2 index pxs mul 4 index pys mul neg translate %UNI xlate for scribe ppr astore pop % put "bbs1 bbs2 bbey bbex" into ppr pop T %UNI force portrait on /por xdf % set por pop F %UNI force smooth request off sn and /so xdf % set "so" T if smooth req'd AND avail in LW }bdf /txpose{ pxs pys scale ppr aload pop por { noflips{pop exch neg exch translate pop 1 -1 scale}if xflip yflip and{ pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate }if xflip yflip not and{ pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate }if yflip xflip not and{ ppr 1 get neg ppr 0 get neg translate }if } { noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{ translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate }if xflip yflip not and{ translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate }if yflip xflip not and{ translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate }if } ifelse %UNI statusdict begin waittimeout 300 lt{/waittimeout 300 def}if end scaleby96{ ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate }if }bdf /fr{3 index 3 index xl ppr aload pop 3 -1 roll 2 mul add 3 1 roll exch 2 mul add 6 2 roll 3 -1 roll sub 3 1 roll exch sub 3 1 roll exch 3 -1 roll div 3 1 roll div exch scale}bdf /lws{show}bdf /tv{show pop pop}bdf /obl{{0.212557 mul}{pop 0}ifelse}bdf /sfd{ps fg 5 -1 roll get mul 100 div 0 ps 5 -1 roll obl ps neg 0 0 6a astore makefont setfont}bdf /fnt{findfont sfd}bdf /bt{sa 3 1 roll 3 index and put}bdf /sa(\000\000\000\000\000\000\000\000\000\000)def /fs{0 1 bt 1 2 bt 2 4 bt 3 8 bt 4 16 bt 5 32 bt 6 64 bt 7 128 bt sa exch 8 exch put}bdf /mx1 matrix def /mx2 matrix def /mx3 matrix def /bu{currentpoint currentgray currentlinewidth currentlinecap currentlinejoin currentdash exch aload length fg 5 sfl{1}{0}ifelse put pnsv pnsh 2t aload pop 3a aload pop mx2 aload pop mx1 aload pop mtx currentmatrix aload pop mx3 aload pop ps pm restore/ps xdf mx3 astore pop}bdf /bn{/pm save def mx3 setmatrix newpath 0 0 moveto ct dup 39 get 0 exch getinterval cvx exec mtx astore setmatrix mx1 astore pop mx2 astore pop 3a astore pop 2t astore pop/pnsh xdf/pnsv xdf gw /sfl fg 5 get 0 ne def array astore exch setdash setlinejoin setlinecap setlinewidth setgray moveto}bdf /fc{save vmstatus exch sub 50000 lt {(%%[|0|]%%)=print flush}if pop restore}bdf /tc{32768 div add 3 1 roll 32768 div add 2t astore pop}bdf /3a [0 0 0] def /2t 2 array def /tp{3a astore pop}bdf /tt{mx2 currentmatrix pop currentpoint 2 copy 2t aload pop qa 2 copy translate 3a aload pop exch dup 0 eq {pop}{1 eq{-1 1}{1 -1}ifelse scale}ifelse rotate pop neg exch neg exch translate moveto}bdf /te{mx2 setmatrix}bdf /th{3 -1 roll div 3 1 roll exch div 2 copy mx1 scale pop scale/sfl true def}bdf /tu{1 1 mx1 itransform scale/sfl false def}bdf /ts{1 1 mx1 transform scale/sfl true def}bdf /fz{/ps xdf}bdf /dv{dup 0 ne{div}{pop}ifelse}bdf /pop4{pop pop pop pop}bdf /it{sfl{mx1 itransform}if}bdf /gm{exch it moveto}bdf/rm{it rmoveto}bdf /lm{currentpoint sfl{mx1 transform}if exch pop sub 0 exch it rmoveto}bdf /fm{statusdict/manualfeed known}bdf /se{statusdict exch/manualfeed exch put}bdf /mf{ pop %UNI never allow manual feed }bdf /jn{ pop %UNI don't set job name }bdf /pen{pnm mul/pnsh xdf pnm mul/pnsv xdf pnsh setlinewidth}bdf /min{2 copy gt{exch}if pop}bdf /max{2 copy lt{exch}if pop}bdf /dh{fg 6 1 put array astore exch pop exch pop exch setdash}bdf /ih[currentdash]def /rh{fg 6 0 put ih aload pop setdash}bdf /dl{gsave nlw pys div setlinewidth 0 setgray}bdf /dlin{exch currentpoint currentlinewidth 2 div dup translate newpath moveto lineto currentpoint stroke grestore moveto}bdf /lin{fg 6 get 0 ne{exch lineto currentpoint 0 doop moveto} {exch currentpoint/pnlv xdf/pnlh xdf gsave newpath/@1 xdf/@2 xdf fp{pnlh @2 lt{pnlv @1 ge {pnlh pnlv moveto @2 @1 lineto pnsh 0 rlineto 0 pnsv rlineto pnlh pnsh add pnlv pnsv add lineto pnsh neg 0 rlineto} {pnlh pnlv moveto pnsh 0 rlineto @2 pnsh add @1 lineto 0 pnsv rlineto pnsh neg 0 rlineto pnlh pnlv pnsv add lineto}ifelse}{pnlv @1 gt {@2 @1 moveto pnsh 0 rlineto pnlh pnsh add pnlv lineto 0 pnsv rlineto pnsh neg 0 rlineto @2 @1 pnsv add lineto}{pnlh pnlv moveto pnsh 0 rlineto 0 pnsv rlineto @2 pnsh add @1 pnsv add lineto pnsh neg 0 rlineto 0 pnsv neg rlineto}ifelse}ifelse closepath fill}if @2 @1 grestore moveto}ifelse}bdf /gw{/pnm fg 3 get fg 4 get div def}bdf /lw{fg exch 4 exch put fg exch 3 exch put gw pnsv pnsh pen}bdf /barc{/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf /@6 xdf/@7 xdf/@8 xdf gsave @5 @7 add 2 div @6 @8 add 2 div translate newpath 0 0 moveto @5 @7 sub @6 @8 sub mtx currentmatrix pop scale @1{newpath}if 0 0 0.5 @4 @3 arc @4 @3 sub abs 360 ge{closepath}if mtx setmatrix @2 doop grestore}bdf /ar{dup 0 eq barc}bdf /ov{0 exch 360 exch true barc}bdf /rc{/@t xdf currentpoint 6 2 roll newpath 4 copy 4 2 roll exch moveto 6 -1 roll lineto lineto lineto closepath @t doop moveto}bdf /mup{dup pnsh 2 div le exch pnsv 2 div le or}bdf /rr{/@1 xdf 2. div/@2 xdf 2. div/@3 xdf /@4 xdf/@5 xdf/@6 xdf/@7 xdf @7 @5 eq @6 @4 eq @2 mup or or{@7 @6 @5 @4 @1 rc} {@4 @6 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse @5 @7 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse @1 0 eq{/@2 @2 pnsh 2 div 2 copy gt{sub def}{0 pop4}ifelse}if currentpoint newpath @4 @6 add 2. div @7 moveto @4 @7 @4 @5 @2 arcto pop4 @4 @5 @6 @5 @2 arcto pop4 @6 @5 @6 @7 @2 arcto pop4 @6 @7 @4 @7 @2 arcto pop4 closepath @1 doop moveto}ifelse}bdf /pr{gsave newpath/pl{exch moveto/pl{exch lineto}def}def}bdf /pl{exch lineto}bdf /ep{dup 0 eq{{moveto}{exch lin}{}{(%%[|1|]%%)= flush}pathforall pop grestore}{doop grestore}ifelse currentpoint newpath moveto}bdf /gr{64. div setgray}bdf /pat{s8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi s8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}setscreen gr}bdf /sg{freq rot/spf load setscreen gr}bdf /dc{transform round .5 sub exch round .5 sub exch itransform}bdf /sn{userdict/smooth4 known}bdf /x8{3 bitshift}bdf /x4{2 bitshift}bdf /d4{-2 bitshift}bdf /d8{-3 bitshift}bdf /rb{15 add -4 bitshift 1 bitshift}bdf /db{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf/@6 @5 @3 4 add mul def dc translate scale/xdbit 1 1 idtransform abs/ydbit exch def abs def{0 0 1 ydbit add 1 10 rc clip}if @1 0 eq @1 4 eq or{1 setgray ydbit 0 1 ydbit add 1 2 rc}if @1 3 eq @1 7 eq or{1}{0}ifelse setgray/@9 @1 0 eq @1 1 eq @1 3 eq or or invertflag xor def/@13 @6 def @2 fBitStretch or{/@10 @4 x4 def/@11 @3 x4 def/@12 @10 rb def/@13 @12 @11 mul def/@15 1 1 dtransform abs/calcY 1 index def round cvi/@14 exch def abs/calcX 1 index def round cvi scaleby96 not{1 add}if def/@16 @15 rb def/@17 @16 @14 mul def}if sn @13 60000 lt and @2 fBitStretch or and{mtx currentmatrix dup 1 get exch 2 get 0. eq exch 0. eq and @17 60000 lt and fBitStretch and{@16 3 bitshift @14 @9 [calcX 0 0 calcY 0 0]{@17 string @13 string currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4 @10 @11 @12 dup string 5 index @15 @14 @16 dup string stretch}imagemask}{@12 x8 @11 @9 [@10 0 0 @11 0 0]{@13 string currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4}imagemask}ifelse}{@5 3 bitshift @3 4 add @9 [@4 0 0 @3 0 2]{currentfile @6 string readhexstring pop}imagemask}ifelse @7 restore}bdf /wd 16 dict def /mfont 14 dict def /mdf{mfont wcheck not{/mfont 14 dict def}if mfont begin xdf end}bdf /cf{{1 index/FID ne{def}{pop pop}ifelse}forall}bdf /rf{/@1 exch def/@2 exch def FontDirectory @2 known{cleartomark pop}{findfont dup begin dup length @1 add dict begin cf {/Encoding macvec def}{Encoding dup length array copy/Encoding exch def counttomark 2 idiv{Encoding 3 1 roll put}repeat}ifelse pop exec currentdict end end @2 exch definefont pop}ifelse}bdf /bmbc{exch begin wd begin /cr xdf save CharTable cr 6 mul 6 getinterval{}forall /bitheight xdf/bitwidth xdf .96 div/width xdf Gkernmax add/XOffset xdf Gdescent add/YOffset xdf/rowbytes xdf rowbytes 255 eq{0 0 0 0 0 0 setcachedevice} {Gnormsize dup scale width 0 XOffset YOffset bitwidth XOffset add bitheight YOffset add setcachedevice rowbytes 0 ne{ XOffset YOffset translate newpath 0 0 moveto bitwidth bitheight scale sn{ /xSmt bitwidth x4 def /ySmt bitheight x4 def /rSmt xSmt rb def rSmt x8 ySmt true [xSmt 0 0 ySmt neg 0 ySmt] {rSmt ySmt mul string CharData cr get 1 index bitwidth bitheight rowbytes rSmt so smooth4} }{rowbytes 3 bitshift bitheight 4 add true [bitwidth 0 0 bitheight neg 0 bitheight 2 add] {CharData cr get} }ifelse imagemask }if }ifelse restore end end }bdf /bb{.96 exch div/Gnormsize mdf 2 index /Gkernmax mdf 1 index/Gdescent mdf 3 index div 4 1 roll 2 index div 1. 5 2 roll exch div 4 1 roll 4 array astore/FontBBox mdf }bdf /cdf{mfont/CharData get 3 1 roll put}bdf /bf{ mfont begin /FontType 3 def /FontMatrix [1 0 0 1 0 0] def /Encoding macvec def /BuildChar/bmbc load def end mfont definefont pop }bdf /wi LW 1 eq{{gsave 0 0 0 0 0 0 0 0 moveto lineto lineto lineto closepath clip stringwidth grestore}bind}{/stringwidth load}ifelse def /aps{0 get 124 eq}bdf /xc{s75 cvs dup}bdf /xp{put cvn}bdf /scs{xc 3 67 put dup 0 95 xp}bdf /sos{xc 3 79 xp}bdf /sbs{xc 1 66 xp}bdf /sis{xc 2 73 xp}bdf /sob{xc 2 79 xp}bdf /sss{xc 4 83 xp}bdf /dd{exch 1 index add 3 1 roll add exch}bdf /smc{moveto dup lws}bdf /kwn{FontDirectory 1 index known{findfont exch pop}}bdf /gl{1 currentgray sub setgray}bdf /mm{/mfont 10 dict def mfont begin /FontMatrix [1 0 0 1 0 0] def /FontType 3 def /Encoding macvec def /df 4 index findfont def /FontBBox [0 0 1 1] def /xda xdf/mbc xdf /BuildChar{wd begin/cr xdf/fd xdf/cs s1 dup 0 cr put def fd/mbc get exec end}def exec end mfont definefont}bdf /ac{dup scs kwn{exch findfont dup length 1 add dict begin cf fmv{/Encoding macvec def}if/StrokeWidth nlw 1000 mul pys div ps div dup 12 lt{pop 12}if def /PaintType 2 def currentdict /UniqueID known{/UniqueID UniqueID 16#A80000 xor def}if currentdict end definefont}ifelse}bdf /mb{dup sbs kwn{exch{pop}{bbc}{}mm}ifelse sfd}bdf /mo{dup sos kwn{exch{pop}{boc}{}mm}ifelse sfd}bdf /ms{dup sss kwn{exch{pop}{bsc}{}mm}ifelse sfd}bdf /ou{dup sos kwn{exch dup ac pop{scs findfont /df2 xdf}{aoc}{}mm}ifelse sfd}bdf /su{dup sss kwn{exch dup ac pop{scs findfont /df2 xdf}{asc}{}mm}ifelse sfd}bdf /ao{/fmv true def ou}bdf/as{/fmv true def su}bdf /vo{/fmv false def ou}bdf/vs{/fmv false def su}bdf /bbc{/da .03 def fd/df get setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth cs 0 0 smc da 0 smc da da smc 0 da moveto lws}bdf /boc{/da 1 ps div def fd/df get setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth cs 0 0 smc da 0 smc da da smc 0 da smc gl da 2. div dup moveto lws}bdf /bsc{/da 1 ps div def /ds .05 def/da2 da 2. div def fd/df get setfont gsave cs wi 1 index 0 ne{exch ds add da2 add exch}if grestore setcharwidth cs ds da2 add .01 add 0 smc 0 ds da2 sub translate 0 0 smc da 0 smc da da smc 0 da smc gl da 2. div dup moveto lws}bdf /aoc{fd/df get setfont gsave cs wi grestore setcharwidth gl cs 0 0 smc fd/df2 get setfont gl 0 0 moveto lws}bdf /asc{/da .05 def fd/df get setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth cs da .01 add 0 smc 0 da translate gl 0 0 smc gl fd/df2 get setfont 0 0 moveto lws}bdf /st{1000 mul usertime add dup 2147483647 gt{2147483647 sub}if def}bdf /the{usertime sub dup 0 lt exch -2147483648 gt and}bdf /6a 6 array def /2a 2 array def /3q 3 array def /qs{3 -1 roll sub exch 3 -1 roll sub exch}bdf /qa{3 -1 roll add exch 3 -1 roll add exch}bdf /qm{3 -1 roll 1 index mul 3 1 roll mul}bdf /qn{6a exch get mul}bdf /qA .166667 def/qB .833333 def/qC .5 def /qx{6a astore pop qA 0 qn qB 2 qn add qA 1 qn qB 3 qn add qB 2 qn qA 4 qn add qB 3 qn qA 5 qn add qC 2 qn qC 4 qn add qC 3 qn qC 5 qn add}bdf /qp{6 copy 12 -2 roll pop pop}bdf /qc{exch qp qx curveto}bdf /qi{{exch 4 copy 2a astore aload pop qa .5 qm newpath moveto}{exch 2 copy 6 -2 roll 2 qm qs 4 2 roll}ifelse}bdf /qq{{qc 2a aload pop qx curveto}{exch 4 copy qs qa qx curveto}ifelse}bdf /pt{currentpoint newpath moveto}bdf /qf{/fillflag true def}bdf /ec{1 and 0 ne{0 doop}if grestore currentpoint newpath moveto/fillflag false def}bdf /eu{currentpoint fp{0 ep}{grestore newpath}ifelse moveto/fillflag false def}bdf /bp{currentpoint newpath 2 copy moveto}bdf /ef{gsave fillflag{gsave eofill grestore}if}bdf /sm{0 exch{@1 eq{1 add}if}forall}bdf /lshow{4 1 roll exch/@1 exch def{1 index wi pop sub 1 index sm dv 0 @1 4 -1 roll widthshow}{1 index wi pop sub 1 index dup sm 10 mul exch length 1 sub add dv dup 10. mul 0 @1 4 -1 roll 0 6 -1 roll awidthshow}ifelse}bdf /setTxMode{sa 9 2 index put 3 eq{1}{0}ifelse setgray}bdf /SwToSym{{}mark false/Symbol/|______Symbol 0 rf 0 sa 6 get 0 ne{pop 1}{sa 7 get 0 eq{pop 2}if}ifelse sa 1 get 0 ne/|______Symbol sa 4 get 0 ne{vs}{sa 3 get 0 ne{vo}{fnt}ifelse}ifelse}bdf /mc{0 3 1 roll transform neg exch pop}bdf /ul{dup 0 ne sa 2 get 0 ne and{gsave 0 0 /UnderlinePosition kif{mc}{ps -10 div}ifelse/UnderlineThickness kif{mc}{ps 15 div}ifelse abs setlinewidth neg rmoveto sa 4 get 0 ne{gsave currentlinewidth 2. div dup rmoveto currentpoint newpath moveto 2 copy rlineto stroke grestore}if sa 3 get sa 4 get or 0 ne{gsave gl 2 copy rlineto stroke grestore rlineto strokepath nlw pys div setlinewidth}{rlineto}ifelse stroke grestore}{pop}ifelse}bdf /sgt{2 copy known{get true}{pop pop false}ifelse}bdf /kif{currentfont dup/FontMatrix get exch/FontInfo sgt{true}{currentfont/df sgt {dup/FontInfo sgt{3 1 roll/FontMatrix get mtx concatmatrix exch true}{pop pop pop false} ifelse}{pop pop false}ifelse}ifelse{3 -1 roll sgt{exch true}{pop false}ifelse}{false}ifelse}bdf /blank/Times-Roman findfont/CharStrings get/space get def /macvec 256 array def /NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI /DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US macvec 0 32 getinterval astore pop macvec 32/Times-Roman findfont/Encoding get 32 96 getinterval putinterval macvec dup 39/quotesingle put 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/blank/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand/Acircumflex/Ecircumflex/Aacute /Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex /apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron macvec 128 128 getinterval astore pop {}mark true/Courier/|______Courier 0 rf {/Metrics 21 dict begin/zero 600 def/one 600 def/two 600 def/three 600 def/four 600 def/five 600 def/six 600 def/seven 600 def/eight 600 def /nine 600 def/comma 600 def/period 600 def/dollar 600 def/numbersign 600 def/percent 600 def/plus 600 def/hyphen 600 def/E 600 def/parenleft 600 def/parenright 600 def/space 600 def currentdict end def currentdict/UniqueID known{/UniqueID 16#800000 def}if/FontBBox FontBBox 4 array astore def}mark true/Helvetica/|______Seattle 1 rf /oldsettransfer/settransfer load def /concatprocs{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}def /settransfer{currenttransfer concatprocs oldsettransfer}def /PaintBlack{{1 exch sub}settransfer gsave newpath clippath 1 setgray fill grestore}def /od{(Rvd\001\001\000\000\177) fg copy pop txpose 1 0 mtx defaultmatrix dtransform exch atan/pa exch def newpath clippath mark {transform{itransform moveto}}{transform{itransform lineto}} {6 -2 roll transform 6 -2 roll transform 6 -2 roll transform {itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}} {{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}bdf /cd{}bdf /op{/sfl false def/pm save def}bdf /cp{ pop pop %UNI ignore two args pm restore }bdf /px{0 3 1 roll tp tt}bdf /psb{/us save def}bdf /pse{us restore}bdf /ct 40 string def /nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if} forall clip newpath moveto}bdf /kp{ct 0 2 index length 2 index 39 2 index put getinterval copy cvx exec mx3 currentmatrix pop}bdf end % dict "md" BS 0 SI 10 SS 10 10 0 16200 86400 GB md begin T T -216 -208 5284 4042 60 300 300 1 F F F F T T T psu (hxtmac.art.cs.cmu.edu; document: gmol3.md-Layer#1)jn 0 mf od op 0 0 xl 1 1 pen 0 0 gm (nc 0 0 5068 3834 6 rc)kp 0 setlinecap currentscreen 3 1 roll pop pop 60 45 3 -1 roll setscreen 64 gr 75 750 713 1388 1 rc 4 4 pen 0 gr 75 750 713 1388 0 rc 64 gr 75 75 713 713 1 rc 0 gr 75 75 713 713 0 rc 64 gr 108 123 683 677 1 rc T 554 583.33331 123 108 18 133 140 T 1 db 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000FF8000000000000000 00000000000000000700F000000000000000 000000000000000019242C00000000000000 000000000000000020204200000000000000 0000000000000000C2031780000000000000 0000000000000001843820C0000000000000 000000000000000320A36A60000000000000 000000000000000204180AA0000000000000 000000000000000602A3AF50000000000000 00000000000000080484F208000000000000 000000000000000830717BD8000000000000 0000000000000010024D512C000000000000 0000000000000012022FAEC4000000000000 00000000000000100088E9BC000000000000 000000000000002032636EB6000000000000 00000000000000200054FDCA000000000000 0000000000000022032AB3B2000000000000 00000000000000208827DB5A000000000000 00000000000000202136FFFE000000000000 0000000000000020016DAD6A000000000000 0000000000000022623FFBBE000000000000 000000000000002004D6EDD6000000000000 000000000000002023BDBEB2000000000000 000000000000001008BFFFCC000000000000 0000000000000012433F00F4000000000000 00000000000000108CD9242C000000000000 000000000000000821602042000000000000 00000000000000090DC20317800000000000 000000000000000623843820C00000000000 00000000000000024320A36A600000000000 00000000000000032E04180AA00000000000 0000000000000001A602A3AF503FE0000000 0000000000000000C80484F209C03C000000 00000000000000003830717BDE490B000000 000000000000000010024D51280810800000 000000000000000012022FAEF080C5E00000 0000000000000000100088E9E10E08300000 00000000000000002032636EC828DA980000 0000000000000000200054FD810602A80000 000000000000000022032AB380A8EBD40000 0000000000000000208827DA01213C820000 0000000000000000202136FE0C1C5EF60000 000000000000000020016DAC0093544B0000 000000000000000022623FFC808BEBB10000 00000000000000002004D6EC00223A6F0000 00000000000000002023BDB80C98DBAD8000 000000000000003FF008BFD800153F728000 00000000000001C03E433EE880CAACEC8000 00000000000006490B8CDBF82209F6D68000 000000000000080810A175D8084DBFFF8000 0000000000003080C5EDDDF8005B6B5A8000 000000000000610E0832FAB8988FFEEF8000 000000000000C828DA9A9BF80135BB758000 000000000000810602ACF6B808EF6FAC8000 00000000000180A8EBD517D4022FF7F30000 00000000000201213C82CFBC90CFBAF90000 0000000000020C1C5EF63D842336FD510000 0000000000040093544B6AAE085D77EA0000 000007FC0004808BEBB1087243777F720000 00003807800400223A6FFF8188BEAEA40000 0000C92160080C98DBAD800090A6FFC80000 00010102100800153F728000CB3DAED80000 00061018BC0880CAACEC80006845F5300000 000C21C106082209F6D6800031B3EEE00000 0019051B5308084DBFFF80000C0F60800000 001020C05508005B6B5A8000069AAB000000 0030151D7A88988FFEEF800001C21C000000 0040242790480135BB758000003FE0000000 0041838BDEC808EF6FAC8000000000000000 0080126A8964022FF7F30000000000000000 0090117D763FF0CFBAF90000000000000000 008004474DC03F36FD510000000000000000 0101931B76490B5D77EA0000000000000000 010002A7E80810F77F720000000000000000 01101955B080C5FEAEA40000000000000000 0104413EE10E0836FFC80000000000000000 010109B7C828DA9DAED80000000000000000 01000B6D810602ADF5300000000000000000 011311FF80A8EBD7EEE00000000000000000 010026B601213C8360800000000000000000 01011DEE0C1C5EF6AB000000000000000000 008045FC0093544B1C000000000000000000 009219F4808BEBB1E0000000000000000000 008466DC00223A6F00000000000000000000 00410BA80C98DBAD80000000000000000000 00486EE800153F7280000000000000000000 003117D880CAACEC80000000000000000000 001214D82209F7FE80000000000000000000 001967B8084DBC03C0000000000000000000 000D08B8005B6490B0000000000000000000 00063678988F808108000000000000000000 000181E80137080C5E000000000000000000 0000D35808EE10E083000000000000000000 00003844022C828DA9800000000000000000 000007FC90C810602A800000000000000000 0000000423380A8EBD400000000000000000 0000000208601213C8200000000000000000 000000024360C1C5EF600000000000000000 0000000188C0093544B00000000000000000 0000000090C808BEBB100000000000000000 00000000CB400223A6F00000000000000000 000000006880C98DBAD80000000000000000 0000000031800153F7280000000000000000 000000000C880CAACEC80000000000000000 000000000682209F6D680000000000000000 00000000018084DBFFF80000000000000000 00000000008005B6B5A80000000000000000 00000000008988FFEEF80000000000000000 000000000080135BB7580000000000000000 0000000000808EF6FAC80000000000000000 00000000004022FF7F300000000000000000 0000000000490CFBAF900000000000000000 000000000042336FD5100000000000000000 00000000002085D77EA00000000000000000 0000000000243777F7200000000000000000 0000000000188BEAEA400000000000000000 0000000000090A6FFC800000000000000000 00000000000CB3DAED800000000000000000 000000000006845F53000000000000000000 0000000000031B3EEE000000000000000000 000000000000C0F608000000000000000000 00000000000069AAB0000000000000000000 0000000000001C21C0000000000000000000 00000000000003FE00000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 133 798 692 1377 1 rc T 579 567.34326 798 133 18 139 136 T 1 db 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 0000000000007FC000000000000000000000 000000000003807800000000000000000000 00000000000C921600000000000000000000 000000000010102100000000000000000000 000000000061018BC0000000000000000000 0000000000C21C1060000000000000000000 00000000019051B530000000000000000000 0000000001020C0550000000000000000000 00000000030151D7A8000000000000000000 000000000402427904000000000000000000 00000000041838BDEC000000000000000000 00000000080126A896000000000000000000 00000000090117D762000000000000000000 0000000008004474DE000000000000000000 00000000101931B75B000000000000000000 0000000010002A7EE5000000000000000000 0000000011019559D9000000000000000000 00000000104413EDAD000000000000000000 0000000010109B7FFF000000000000000000 000000001000B6D6B5000000000000000000 0000000011311FFDDF000000000000000000 0000000010026B76EB000000000000000000 000000001011DEDF59000000000000000000 0000000008045FEFE6000000000000000000 0000000009219F75F2000000000000000000 0000000008466DFAA2000000000000000000 000000000410BAEFD4000000000000000000 000000000486EEFEE4000000000000000000 0000000003117D5D48000000000000000000 0000000001214DFF90000000000000000000 0000000001967B5DB01FF000000000000000 0000000000D08BEA60E01E00000000000000 00000000006367DDC3248580000000000000 0000000000181EC104040840000000000000 00000000000D3556184062F0000000000000 000000000003843830870418001FF0000000 0000000000007FC064146D4C00E01E000000 000000000000000040830154032485800000 0000000000000000C05475EA040408400000 000000000000000100909E41184062F00000 0000000000000001060E2F7B308704180000 00000000000000020049AA25E4146D4C0000 00000000000000024045F5D8C08301540000 000000000000000200111D37C05475EA0000 0000000000000004064C6DD700909E410000 0000000000000004000A9FB9060E2F7B0000 0000000000000004406556760049AA258000 00000000000000041104FB6A4045F5D88000 00000000000000040426DFFE00111D378000 0000000000000004002DB5AC064C6DD6C000 00000000000000044C47FF74000A9FB94000 0000000000001FF4009ADDBC406556764000 000000000000E01E0477B7D41104FB6B4000 00000000000324858117FBFC0426DFFFC000 00000000000404084867DD7C002DB5AD4000 0000000000184062F19B7EAC4C47FF77C000 00000000003087041C2EBBF4009ADDBAC000 000000000064146D4DBBBFBC0477B7D64000 0000000000408301545F57520117FBF98000 0000000000C05475EA537FE64867DD7C8000 000000000100909E419ED76E119B7EA88000 00000FF801060E2F7B22FA99042EBBF50000 0000700F020049AA25D9F77121BBBFB90000 00019242C24045F5D887B040C45F57520000 000202042200111D37CD558048537FE40000 000C20317C064C6DD6E10E00659ED76C0000 001843820C000A9FB95FF0003422FA980000 00320A36A64065567640000018D9F7700000 00204180AA1104FB6B4000000607B0400000 00602A3AF50426DFFFC00000034D55800000 0080484F20802DB5AD40000000E10E000000 00830717BDCC47FF77C00000001FF0000000 010024D513FF9ADDBAC00000000000000000 012022FAEE01F7B7D6400000000000000000 0100088EB2485FFBF9800000000000000000 02032636C04087DD7C800000000000000000 0200054F84062F7EA8800000000000000000 022032AB087041BBF5000000000000000000 0208827E4146D4FFB9000000000000000000 0202136C0830155752000000000000000000 020016DC05475EBFE4000000000000000000 022623F00909E4176C000000000000000000 02004D7060E2F7BA98000000000000000000 02023BE0049AA25F70000000000000000000 01008BE4045F5D8840000000000000000000 012433E00111D37D80000000000000000000 0108CDC064C6DD6E00000000000000000000 0082174000A9FB9400000000000000000000 0090DDC406556764007FC000000000000000 00622FC1104FB6B403807800000000000000 002429C0426DFFFC0C921600000000000000 0032CF4002DB5AD410102100000000000000 001A1144C47FF77C61018BC0000000000000 000C6CC009ADDBACC21C1060000000000000 000303C0477B7D659051B530000000000000 0001A6A0117FBF99020C0550000000000000 000070A4867DD7CB0151D7A8000000000000 00000FE119B7EA8C02427904000000000000 0000001042EBBF541838BDEC000000000000 000000121BBBFB980126A896000000000000 0000000C45F575290117D762000000000000 000000048537FE48004474DE000000000000 0000000659ED76D01931B75B000000000000 00000003422FA990002A7EE5000000000000 000000018D9F7711019559D9000000000000 00000000607B04104413EDAD000000000000 0000000034D55810109B7FFF000000000000 000000000E10E01000B6D6B5000000000000 0000000001FF0011311FFDDF000000000000 0000000000000010026B76EB000000000000 000000000000001011DEDF59000000000000 0000000000000008045FEFE6000000000000 0000000000000009219F75F2000000000000 0000000000000008466DFAA2000000000000 000000000000000410BAEFD4000000000000 000000000000000486EEFEE4000000000000 0000000000000003117D5D48000000000000 0000000000000001214DFF90000000000000 0000000000000001967B5DB0000000000000 0000000000000000D08BEA60000000000000 00000000000000006367DDC0000000000000 0000000000000000181EC100000000000000 00000000000000000D355600000000000000 000000000000000003843800000000000000 0000000000000000007FC000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 000000000000000000000000000000000000 F T cp cd end GE ES %%EndDocument @endspecial 1224 780 a(Figure)h(7:)15 b(The)c(Snapshot)e(of)h(Gmol)982 829 y 1026 3 v 1131 925 a 728 2 v 45 x 2 46 v 1249 956 a fh(Null)g(Argument)e(T)o (rap)1671 970 y 2 46 v 1706 956 a(0.03)h(ms)1858 970 y 2 46 v 1131 972 a 728 2 v 46 x 2 46 v 1247 1004 a(Null)h(Argument)e(MIG)1671 1018 y 2 46 v 1706 1004 a (0.30)h(ms)1858 1018 y 2 46 v 1131 1019 a 728 2 v 46 x 2 46 v 1286 1051 a(Con\ text)g(Switch)1671 1065 y 2 46 v 1706 1051 a(0.26)g(ms)1858 1065 y 2 46 v 1131 1066 a 728 2 v 46 x 2 46 v 1206 1098 a(vm)r 12 2 v 11 w(alloc)g(1KB)g(\(no)g (wiring\))1671 1112 y 2 46 v 1706 1098 a(0.59)g(ms)1858 1112 y 2 46 v 1131 1114 a 728 2 v 45 x 2 46 v 1229 1146 a(vm)r 12 2 v 11 w(alloc)g(1KB)g(\(wirin\ g\))1671 1159 y 2 46 v 1706 1146 a(2.67)g(ms)1858 1159 y 2 46 v 1131 1161 a 728 2 v 46 x 2 46 v 1218 1193 a(Port)g(Allocate/Deallocate)1671 1207 y 2 46 v 1716 1193 a(1.2)g(ms)1858 1207 y 2 46 v 1131 1208 a 728 2 v 46 x 2 46 v 1156 1240 a(R)n(T)l(-Thread)g(Creation/T)m(ermination)1671 1254 y 2 46 v 1697 1240 a(4.258)f(ms)1858 1254 y 2 46 v 1131 1256 a 728 2 v 45 x 2 46 v 1245 1288 a (R)m(T)m(-Lock)g(and)h(Unlock)1671 1301 y 2 46 v 1697 1288 a(0.146)f(ms)1858 1301 y 2 46 v 1131 1303 a 728 2 v 1120 1419 a fq(T)n(able)i(1:)15 b(The)c(Bas\ ic)f(Performance)i(of)e(R)m(T)l(-Mach)982 1546 y(in)16 b(chaotic)h(manner)g (\(the)f(right)f(\256gure\).)34 b(Gmol)16 b(further)g(demon-)982 1596 y(strat\ es)g(the)e(importance)h(of)g(the)g(R)m(T)m(-thread)f(model)h(in)g(preserving) 982 1646 y(the)c(schedulability)f(of)h(R)m(T)l(-thread.)18 b(The)12 b(traditi\ onal)d(system)j(of)o(fers)982 1695 y(the)j fp(delay)f fq(primitive)f(for)h (representing)g(time)h(description.)26 b(How-)982 1745 y(ever)o(,)13 b(the)e (calculation)g(of)g(delay)h(time)f(and)h(the)g(execution)f(of)g(delay)982 1795 y(primitives)6 b(may)j(not)d(be)i(atomic)g(giving)d(rise)j(to)f(invalid)f(tim\ e)h(values,)982 1845 y(resulting)i(in)h(non)f(synchronized)h(rotation)f(of)h (the)g(molecule.)1024 1896 y(T)m(able)16 b(1)f(summarizes)i(the)f(basic)g(per\ formance)g(of)f(the)g(current)982 1946 y(version)10 b(of)g(R)m(T)m(-Mach.) 1024 1996 y(All)g(measurements)i(are)f(performed)g(on)f(a)i(Sun3/60)d(worksta\ tion)982 2046 y(with)16 b(12)g(Mbytes)g(by)g(repeating)h(the)f(tar)o(get)g (function)f(more)i(than)982 2096 y(10,000)g(times.)35 b(The)18 b(trap)e(inter\ face)h(to)g(the)g(kernel)f(is)h(about)f(10)982 2146 y(times)i(faster)f(than)g (MIG)1386 2131 y fj(5)1403 2146 y fq(.)h(The)g(context)e(switch)h(time)h(betw\ een)982 2196 y(threads)d(is)f(acceptable)i(in)e(our)g(application,)g(and)h (we)f(can)i(assume)982 2246 y(this)e(number)h(as)g(the)f(worst)g(case)i(since) f(all)g(resources)g(are)g(wiring)982 2295 y(down)h(for)f(these)h(threads.)32 b (Allocation)14 b(of)i(memory)g(is)g(normally)982 2345 y(done)i(without)d(wiri\ ng,)j(thus)f(the)g(overhead)h(is)f(relatively)g(small.)982 2395 y(However)o (,)h(additional)d(wiring)g(cost)h(is)g(not)g(reduce)h(to)f(negligible)982 2445 y(yet,)21 b(since)e(we)h(simply)d(reused)j(the)e(original)f(wiring)g(facility) h(in)982 2495 y(Mach.)29 b(The)16 b(creation)e(and)h(termination)e(cost)h(are) i(mainly)e(due)h(to)982 2544 y(allocation)8 b(and)h(deallocation)e(of)i(syste\ m)g(resources)g(which)g(belongs)982 2594 y(to)14 b(a)h(thread.)28 b(The)15 b (total)f(cost)g(should)f(be)i(reduced)g(further)f(by)g(re-)982 2634 y 411 2 v 1028 2662 a fo(5)1042 2674 y fn(Mach)8 b(uses)h(a)h(MIG\(Mach)e(Interface)g (Generator\))h([10)o(])h(to)f(call)h(kernel)e(primitives)1042 2713 y(in)g(a)g (object-oriented)f(fashion)g(and)g(generates)g(stubs)g(for)h(user)g(programs.) 935 2877 y fq(7)p eop %%Page: 8 8 bop -118 2116 a @beginspecial 464 @hoffset 120 @voffset 0.500000 @hscale 0.500000 @vscale 90 @angle @setspecial %%BeginDocument: rt_arm.ps /bitdump % stk: width, height, iscale { % read arguments /iscale exch def /height exch def /width exch def % scale appropriately width iscale mul height iscale mul scale % allocate space for one scanline of input /picstr % picstr holds one scan line width 7 add 8 idiv % width of image in bytes = ceiling(width/8) string def % read and dump the image width height 1 [width 0 0 height neg 0 height] { currentfile picstr readhexstring pop } image } def 72 300 div dup scale 209 180 translate 533 735 4 bitdump 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800003ff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe03fbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfddfbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfdefbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfdf7bff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfdefbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfddfbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe03fbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf07fbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbefbfbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbefbfbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbefbfbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbefbfbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf77fbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe007bff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff3fbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfcffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf3ffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbefffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf3ffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfcffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff3fbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf3ffbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbedbfbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbedbfbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbedbfbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbedbfbff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf5bfbff0 7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffffffffbe07fbff0 780000ffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c00000007ffffffffffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffff7dffffffe7ffffffffffbffffbff0 79fffeffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabffffffffff7dffffffe7ffffffffffbe03fbff0 79fffeffffffff9555555555555555555555555555555555555555555554d5555555555555555555555555555555555ffffffffff7dffffffe7ffffffffffbff7fbff0 79fffeffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabffffffffff7dffffffe7ffffffffffbffbfbff0 79fffeffffffff9555555555555555555555555555555555555555555554d5555555555555555555555555555555555ffffffffff7dffffffe7ffffffffffbffbfbff0 79fffeffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabffffffffff7dffffffe7ffffffffffbffbfbff0 79fffeffffffff9555555555555555555555555555555555555555555554d5555555555555555555555555555555555ffffffffff7dffdf7fe7ffffffffffbffbfbff0 79fffeffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabffffffffff7dffc07fe7ffffffffffbe07fbff0 79fffeffffffff9555555555555555555555555555555555555555555554d5555555555555555555555555555555555ffffffffff7dffdf7fe7ffffffffffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffff7dffffffe7ffffffffffbffffbff0 79fffeffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007dffffffe7ffffffffffbf07fbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffff7dffe3ffe7ffffffffffbefbfbff0 79fffeffffffffbfffff8000000000000000000000000000000000000000fffffe0000000000000000000000000000000000000007dffddffe7ffffffffffbefbfbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffddffe7ffffffffffbefbfbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffebffe7ffffffffffbefbfbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffc07fe7ffffffffffbefbfbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbf77fbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbffffbff0 79fffeffffffffbfffffbf80fd01fa03f407e80fd01fa03f407e80fd01f8fffffefe03f407e80fd01fa03f407e80fd01fa03f407e7dffdf7fe7ffffffffffbffffbff0 79fffeffffffffbfffffbfbffd7ffafff5ffebffd7ffafff5ffebffd7ff8fffffefefff5ffebffd7ffafff5ffebffd7ffafff5ffe7dffc07fe7ffffffffffbf07fbff0 79fffeffffffffbfffffbfbffd7ffafff5ffebffd7ffafff5ffebffd7ff8fffffefefff5ffebffd7ffafff5ffebffd7ffafff5ffe7dffdfffe7ffffffffffbedbfbff0 79fffeffffffffbfffffbfbffd7ffafff5ffebffd7ffafff5ffebffd7ff8fffffefefff5ffebffd7ffafff5ffebffd7ffafff5ffe7dffffffe7ffffffffffbedbfbff0 79fffeffffffffbfffffbfbffd7ffafff5ffebffd7ffafff5ffebffd7ff8fffffefefff5ffebffd7ffafff5ffebffd7ffafff5ffe7dffffffe7ffffffffffbedbfbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffe3ffe7ffffffffffbedbfbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffd5ffe7ffffffffffbedbfbff0 79fffeffffffffbfffffbfbbfd77faeff5dfebbfd77faeff5dfebbfd77f8fffffefeeff5dfebbfd77faeff5dfebbfd77faeff5dfe7dffd5ffe7ffffffffffbfc7fbff0 79fffeffffffffbfffffbf82fd05fa0bf417e82fd05fa0bf417e82fd05f8fffffefe0bf417e82fd05fa0bf417e82fd05fa0bf417e7dffd5ffe7ffffffffffbffffbff0 79fffeffffffffbfffffbfbffd7ffafff5ffebffd7ffafff5ffebffd7ff8fffffefefff5ffebffd7ffafff5ffebffd7ffafff5ffe7dfff3ffe7ffffffffffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fff80000ffbf07fbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbfffeffbefbfbff0 79fffeffffffffbfffffbfc7fd8ffb1ff63fec7fd8ffb1ff63fec7fd8ff8fffffeff1ff63fec7fd8ffb1ff63fec7fd8ffb1ff63fe7dffffffe7fffbfffeffbefbfbff0 79fffeffffffffbfffffbfbbfd77faeff5dfebbfd77faeff5dfebbfd77f8fffffefeeff5dfebbfd77faeff5dfebbfd77faeff5dfe7dffffffe7fffbfffeffbefbfbff0 79fffeffffffffbfffffbfbbfd77faeff5dfebbfd77faeff5dfebbfd77f8fffffefeeff5dfebbfd77faeff5dfebbfd77faeff5dfe7dffffffe7fffbfffeffbefbfbff0 79fffeffffffffbfffffbfd7fdaffb5ff6bfed7fdaffb5ff6bfed7fdaff8fffffeff5ff6bfed7fdaffb5ff6bfed7fdaffb5ff6bfe7dffffffe7fffbc01effbf77fbff0 79fffeffffffffbfffffbf80fd01fa03f407e80fd01fa03f407e80fd01f8fffffefe03f407e80fd01fa03f407e80fd01fa03f407e7dffffffe7fffbc01effbe007bff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbf9deffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbf1deffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbe41effbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbce3effbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbfffeffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbe1feffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbc0feffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbdafeffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbdafeffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbc8feffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbe9feffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbfffeffbe007bff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbe1feffbff77bff0 79fffeffffffffbfffffbfbbfdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefeeff5dfebbfd77fbfff7ffefffdfffbfff7ffe7dffffffe7fffbc0feffbff77bff0 79fffeffffffffbfffffbfbdfdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefef7f5efebdfd7bfbfff7ffefffdfffbfff7ffe7dffffffe7fffbdefeffbfe77bff0 79fffeffffffffbfffffbf80fdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefe03f407e80fd01fbfff7ffefffdfffbfff7ffe7dffffffe7fffbdefeffbfd77bff0 79fffeffffffffbfffffbfbffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefefff5ffebffd7ffbfff7ffefffdfffbfff7ffe7dffffffe7fffbccfeffbfb77bff0 79fffeffffffffbfffffbfbffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefefff5ffebffd7ffbfff7ffefffdfffbfff7ffe7dffffffe7fffbedfeffbe78fbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbfffeffbffffbff0 79fffeffffffffbfffffbfe3fdf3fb27f7f7ec3fda1fb9ff6f7e9dfd77f8fffffeff7bf4efebbfdc7fbe7f64fefefd87fb43f73fe7dffffffe7fffbe1feffbffffbff0 79fffeffffffffbfffffbfddfd6dfadbf4f7eadfd6dfbaff5f7eaefd7bf8fffffefefbf577ebdfdbbfadbf5b7e9efd5bfadbf75fe7dffffffe7fffbc0feffbf07fbff0 79fffeffffffffbfffffbfbefd6dfadbf777eb6fd75fbb7f5b7eb6fd01f8fffffefedbf5b7e80fd7dfadbf5b7eeefd6dfaebf76fe7dffffffe7fffbdefeffbedbfbff0 79fffeffffffffbfffffbfddfdb5fadbf797eb6fd75fa03f597eb6fd7ff8fffffefecbf5b7ebffdbbfb6bf5b7ef2fd6dfaebf407e7dffffffe7fffbdefeffbedbfbff0 79fffeffffffffbfffffbfe3fdc3fb27f7e7ecffd8dfbbff667eb9fd7ff8fffffeff33f5cfebffdc7fb87f64fefcfd9ffb1bf77fe7dffffffe7fffbc0feffbedbfbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbe1feffbedbfbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbfffeffbedbfbff0 79fffeffffffffbfffffbfe3fdc7fb8ff71fee3fdc7fb8ff71fee3fdc7f8fffffeff8ff71fee3fdc7fb8ff71fee3fdc7fb8ff71fe7dffffffe7fffbc0feffbfc7fbff0 79fffeffffffffbfffffbfddfdbbfb77f6efeddfdbbfb77f6efeddfdbbf8fffffeff77f6efeddfdbbfb77f6efeddfdbbfb77f6efe7dffffffe7fffbc0feffbffffbff0 79fffeffffffffbfffffbfbefd7dfafbf5f7ebefd7dfafbf5f7ebefd7df8fffffefefbf5f7ebefd7dfafbf5f7ebefd7dfafbf5f7e7dffffffe7fffbfefeffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbfefeffbf3ffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbfcfeffbedbfbff0 79fffeffffffffbfffffbfbbfdf3fb27f7f7ec3fda1fb9ff6f7e9dfd77f8fffffefeeff5dfebbfd77fbe7f64fefefd87fb43f73fe7dffffffe7fffbfdfeffbedbfbff0 79fffeffffffffbfffffbfbdfd6dfadbf4f7eadfd6dfbaff5f7eaefd7bf8fffffefef7f5efebdfd7bfadbf5b7e9efd5bfadbf75fe7dffffffe7fffbfffeffbedbfbff0 79fffeffffffffbfffffbf80fd6dfadbf777eb6fd75fbb7f5b7eb6fd01f8fffffefe03f407e80fd01fadbf5b7eeefd6dfaebf76fe7dffffffe7fffbe1feffbedbfbff0 79fffeffffffffbfffffbfbffdb5fadbf797eb6fd75fa03f597eb6fd7ff8fffffefefff5ffebffd7ffb6bf5b7ef2fd6dfaebf407e7dffffffe7fffbc0feffbf5bfbff0 79fffeffffffffbfffffbfbffdc3fb27f7e7ecffd8dfbbff667eb9fd7ff8fffffefefff5ffebffd7ffb87f64fefcfd9ffb1bf77fe7dffffffe7fffbdefeffbe07fbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbdefeffbffffbff0 79fffeffffffffbfffffbfe3fdfffbfff7ffefffdfffbfff7ffefffdfff8fffffeff7bf4efebbfdc7fbfff7ffefffdfffbfff7ffe7dffffffe7fffbc01effbffffbff0 79fffeffffffffbfffffbfddfd7dfafbf5f7ebefd7dfafbf5f7ebefd7df8fffffefefbf577ebdfdbbfafbf5f7ebefd7dfafbf5f7e7dffffffe7fffbc01effbffffbff0 79fffeffffffffbfffffbfbefdbbfb77f6efeddfdbbfb77f6efeddfdbbf8fffffefedbf5b7e80fd7dfb77f6efeddfdbbfb77f6efe7dffffffe7fffbfffeffbefffbff0 79fffeffffffffbfffffbfddfdc7fb8ff71fee3fdc7fb8ff71fee3fdc7f8fffffefecbf5b7ebffdbbfb8ff71fee3fdc7fb8ff71fe7dffffffe7fffbfffeffbeff7bff0 79fffeffffffffbfffffbfe3fdfffbfff7ffefffdfffbfff7ffefffdfff8fffffeff33f5cfebffdc7fbfff7ffefffdfffbfff7ffe7dffffffe7fffbfffeffbe007bff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbfffeffbefffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7fffbfffeffbefffbff0 79fffeffffffffbfffffbfbefdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefefbf5f7ebefd7dfbfff7ffefffdfffbfff7ffe7dffffffe7fff80000ffbffffbff0 79fffeffffffffbfffffbfddfdfffbfff7ffefffdfffbfff7ffefffdfff8fffffeff77f6efeddfdbbfbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbffffbff0 79fffeffffffffbfffffbfe3fdfffbfff7ffefffdfffbfff7ffefffdfff8fffffeff8ff71fee3fdc7fbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfeffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfeffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfeffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfeffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfeffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfeffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfeffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfff7bff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfff7bff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfff7bff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbe007bff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfff7bff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfff7bff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbfff7bff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbffffbff0 79fffeffffffffbfffffbffffdfffbfff7ffefffdfffbfff7ffefffdfff8fffffefffff7ffefffdfffbfff7ffefffdfffbfff7ffe7dffffffe7ffffffffffbffffbff0 79fffeffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c00000007ffffffffffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffbefffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffbefbfbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffbe02fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000007fff7ffffffffffbefffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffbeff7ffffffffffbefffbff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffff80ff7ffffffffffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe26fffffffffffffffffffffffffffffffffffb6ff7ffffffffffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16fffffffffffffffffffffffffffffffffffb6ff7fff80000ffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe39fffffffffffffffffffffffffffffffffffc9ff7fffbfffeffbe03fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbf07fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbe07fbff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc01effbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc01effbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbf9deffbf07fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbf1deffbedbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbe41effbedbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbce3effbedbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffffff7fffbfffeffbedbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7fffbe1feffbedbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7fffbc0feffbfc7fbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000003fff7fffbdafeffbffffbff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbefc0000000000000000000000000000000007fff7fffbdafeffbffffbff0 79fffefffddfffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffbeff7fffbc8feffbffffbff0 79fffefffdefffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6dfffffffffffffffffffffffffffffff80ff7fffbe9feffbffffbff0 79fffefffc07ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc4dfffffffffffffffffffffffffffffffb6ff7fffbfffeffbffffbff0 79fffefffdffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2dfffffffffffffffffffffffffffffffb6ff7fffbedfeffbffffbff0 79fffefffdffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc73fffffffffffffffffffffffffffffffc9ff7fffbc8feffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbdafeffbffffbff0 79fffefffe4fffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbd6feffbffffbff0 79fffefffdb7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbc4feffbffffbff0 79fffefffdb7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbedfeffbffffbff0 79fffefffdb6003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffbe007bff0 79fffefffe4fffbffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbe1feffbffdfbff0 79fffeffffffffbffffffffffffffffffffffffedfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbc0feffbff3fbff0 79fffeffffffffbffffffffffffffffffffffffcdfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbdafeffbfcffbff0 79fffefffdffffbffffffffffffffffffffffffadfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbdafeffbff3fbff0 79fffefff8ffffbffffffffffffffffffffffff73fffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbc8feffbffdfbff0 79fffefffdffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbe9feffbe007bff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbe03effbffffbff0 79fffeffff1fffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffff7fffbc03effbf07fbff0 79fffefffeeff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6dfffffffffffffffffffffffffffffffffff7fffbdefeffbefbfbff0 79fffefffdf7ffbfffffffffffffffffffffffe101010101010101010101010101010101010100c1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e03fff7fffbdefeffbefbfbff0 79fffefffeefffbffffffffffffffffffffffff7dffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffffffe3fff7fffbcffeffbefbfbff0 79fffeffff1fffbffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffff7dffffffffffffffffffffffffffffffe3fff7fffbeffeffbefbfbff0 79fffeffffffffbffffffffffffffffffffffff6dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbefbfbff0 79fffeffffffffbffffffffffffffffffffffff6dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbf07fbff0 79fffeffffffffbffffffffffffffffffffffff93ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000007fff7fffbfffeffbe03fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffbeff7fffbfffeffbff7fbff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffff80ff7fffbfffeffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe26fffffffffffffffffffffffffffffffffffb6ff7fffbfffeffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16fffffffffffffffffffffffffffffffffffb6ff7fffbfffeffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe39fffffffffffffffffffffffffffffffffffc9ff7fff80000ffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbe07fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbefffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbefbfbff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbe02fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbefffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbefffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffffff7ffffffffffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7ffffffffffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7ffffffffffbf00fbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000003fff7ffffffffffbefbfbff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbeffffffffffffffffffffffffffffffffffe3fff7ffffffffffbefbfbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffbefbfbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffbf7ffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffbf07fbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000007fff7ffffffffffbefbfbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffffffffffffffffffffffffffffbeff7ffffffffffbefbfbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff1b7ffffffffffffffffffffffffffffffffffffff80ff7ffffffffffbefbfbff0 79fffeffffffffbffffffffffffffffffff80ffffffffffffffffffffffffffffffff007ffffffffffffffffffffffffffffffffffffffb6ff7ffffffffffbefbfbff0 79fffefffffff03fffffffffffffffffffff6ffffffffffffffffffffffffffffffff0b7ffffffffffffffffffffffffffffffffffffffb6ff7ffffffffffbefbfbff0 79fffeffffffffbffffffffffffffffffffe6ffffffffffffffffffffffffffffffff187ffffffffffffffffffffffffffffffffffffffc9ff7ffffffffffbf07fbff0 79fffeffffffffbffffffffffffffffffff040c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f03fff7fff80000ffbffffbff0 79fffeffffffffbffffffffffffffffffffb8ffffffffffffffffffffffffffffffffdf7fffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffffbff0 79fffeffffffffbffffffffffffffffffff80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffbfbff0 79fffeffffffffbffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbe07fbff0 79fffeffffffffbffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbff7fbff0 79fffeffffffffbffffffffffffffffffffc9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffbfbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffbfbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffbfbff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbfe7fbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc7deffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc3deffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbd9deffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbdcdeffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000007fff7fffbde1effbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffbeff7fffbdf1effbffffbff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffff80ff7fffbfffeffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe26fffffffffffffffffffffffffffffffffffb6ff7fffbe1feffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16fffffffffffffffffffffffffffffffffffb6ff7fffbc0feffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe39fffffffffffffffffffffffffffffffffffc9ff7fffbdefeffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbdefeffbfc3fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc0feffbf3cfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbe1feffbeff7bff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbe1feffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc0feffbffffbff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbdefeffbffffbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbdefeffbe03fbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc0feffbfddfbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbe1feffbfdefbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbfdf7bff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc0feffbfdefbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffffff7fffbc0feffbfddfbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7fffbf9feffbe03fbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7fffbf8feffbffffbff0 795556ffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000003fff7fffbc0feffbffffbff0 79aaaafffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbefc0000000000000000000000000000000007fff7fffbc1feffbe007bff0 795556fffddfffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffbeff7fffbfffeffbff77bff0 79aaaafffdefffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6dfffffffffffffffffffffffffffffff80ff7fffbfffeffbff77bff0 795556fffc07ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc4dfffffffffffffffffffffffffffffffb6ff7fffbfffeffbfe77bff0 79aaaafffdffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2dfffffffffffffffffffffffffffffffb6ff7fffbfffeffbfd77bff0 795556fffdffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc73fffffffffffffffffffffffffffffffc9ff7fffbfffeffbfb77bff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffbe78fbff0 795556ffffcfffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffbffffbff0 79aaaafffdb7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffbffffbff0 795556fffdb7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffbe007bff0 79aaaafffed6003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffbffdfbff0 795556ffff0fffbffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffbff3fbff0 79aaaaffffffffbffffffffffffffffffffffffedfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffbfcffbff0 795556ffffffffbffffffffffffffffffffffffcdfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fff80000ffbff3fbff0 79aaaafffdffffbffffffffffffffffffffffffadfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbffdfbff0 795556fff8ffffbffffffffffffffffffffffff73fffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbe007bff0 79aaaafffdffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 795556ffff1fffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79aaaafffeeff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6dfffffffffffffffffffffffffffffffffff7ffffffffffbeff7bff0 795556fffdf7ffbfffffffffffffffffffffffe101010101010101010101010101010101010100c1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e03fff7ffffffffffbf3cfbff0 79aaaafffeefffbffffffffffffffffffffffff7dffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffffffe3fff7ffffffffffbfc3fbff0 795556ffff1fffbffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffff7dffffffffffffffffffffffffffffffe3fff7ffffffffffbffffbff0 79aaaaffffffffbffffffffffffffffffffffff6dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffbffffbff0 795556ffffffffbffffffffffffffffffffffff6dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffbffffbff0 79aaaaffffffffbffffffffffffffffffffffff93ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffbffffbff0 795556ffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffbffffbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000007fff7ffffffffffbffffbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffbeff7ffffffffffbffffbff0 79aaaafffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffff80ff7ffffffffffbffffbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe26fffffffffffffffffffffffffffffffffffb6ff7ffffffffffbffffbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16fffffffffffffffffffffffffffffffffffb6ff7ffffffffffbffffbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe39fffffffffffffffffffffffffffffffffffc9ff7ffffffffffbffffbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbff3fbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbfcffbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbf3ffbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbefffbff0 79aaaafffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbf3ffbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbfcffbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fff80000ffbff3fbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbffffbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbffffbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbf07fbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbedbfbff0 795556ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffffff7fffbfffeffbedbfbff0 79aaaaffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7fffbfffeffbedbfbff0 795556ffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000003fff7fffbfffeffbedbfbff0 79aaaafffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbedbfbff0 795556ffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbeffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbfc7fbff0 79aaaaffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc01effbffbfbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc01effbe07fbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000007fff7fffbdfdeffbff7fbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffffffffffffffffffffffffffffbeff7fffbdfdeffbffbfbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff1b7ffffffffffffffffffffffffffffffffffffff80ff7fffbc01effbffbfbff0 79fffeffffffffbffffffffffffffffffff80ffffffffffffffffffffffffffffffff007ffffffffffffffffffffffffffffffffffffffb6ff7fffbe03effbffbfbff0 79fffefffffff03fffffffffffffffffffff6ffffffffffffffffffffffffffffffff0b7ffffffffffffffffffffffffffffffffffffffb6ff7fffbfffeffbfe7fbff0 79fffeffffffffbffffffffffffffffffffe6ffffffffffffffffffffffffffffffff187ffffffffffffffffffffffffffffffffffffffc9ff7fffbe0feffbffffbff0 79fffeffffffffbffffffffffffffffffff040c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f03fff7fffbc0feffbffffbff0 79fffeffffffffbffffffffffffffffffffb8ffffffffffffffffffffffffffffffffdf7fffffffffffffffffffffffffffffffffffffe3fff7fffbdffeffbf67fbff0 79fffeffffffffbffffffffffffffffffff80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbdffeffbedbfbff0 79fffeffffffffbffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc0feffbedbfbff0 79fffeffffffffbffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc0feffbedbfbff0 79fffeffffffffbffffffffffffffffffffc9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbedbfbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc0feffbedbfbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc0feffbf37fbff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbf9feffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbf8feffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc0feffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc1feffbefffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbefbfbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffb00feffbe02fbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffb00feffbefffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbeefeffbefffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000007fff7fffbeefeffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffbeff7fffbe0feffbffffbff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffff80ff7fffbf1feffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe26fffffffffffffffffffffffffffffffffffb6ff7fffbfffeffbf07fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16fffffffffffffffffffffffffffffffffffb6ff7fffbfffeffbefbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe39fffffffffffffffffffffffffffffffffffc9ff7fffbfffeffbefbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbefbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbefbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbefbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbf07fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbffffbff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbe03fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbff7fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fff80000ffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffbffbfbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffffff7ffffffffffbe07fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000003fff7ffffffffffbffffbff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbefc0000000000000000000000000000000007fff7ffffffffffbffffbff0 79fffefffcefffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffbeff7ffffffffffbffffbff0 79fffefffd77ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6dfffffffffffffffffffffffffffffff80ff7ffffffffffbffffbff0 79fffefffdb7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc4dfffffffffffffffffffffffffffffffb6ff7ffffffffffbffffbff0 79fffefffdb7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2dfffffffffffffffffffffffffffffffb6ff7ffffffffffbffffbff0 79fffefffdcfffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc73fffffffffffffffffffffffffffffffc9ff7ffffffffffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffeffff1fffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffefffeefffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbe7cfbff0 79fffefffdf7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbebf7bff0 79fffefffeee003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbedf7bff0 79fffeffff1fffbffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbedf7bff0 79fffeffffffffbffffffffffffffffffffffffedfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbeef7bff0 79fffeffffffffbffffffffffffffffffffffffcdfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbef77bff0 79fffefffdffffbffffffffffffffffffffffffadfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbef8fbff0 79fffefff8ffffbffffffffffffffffffffffff73fffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffefffdffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7ffffffffffbffffbff0 79fffeffff1fffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffff7ffffffffffbefffbff0 79fffefffeeff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6dfffffffffffffffffffffffffffffffffff7ffffffffffbc7ffbff0 79fffefffdf7ffbfffffffffffffffffffffffe101010101010101010101010101010101010100c1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e03fff7ffffffffffbefffbff0 79fffefffeefffbffffffffffffffffffffffff7dffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffffffe3fff7fff80000ffbffffbff0 79fffeffff1fffbffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffff7dffffffffffffffffffffffffffffffe3fff7fffbfffeffbffffbff0 79fffeffffffffbffffffffffffffffffffffff6dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffffbff0 79fffeffffffffbffffffffffffffffffffffff6dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbffffbff0 79fffeffffffffbffffffffffffffffffffffff93ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffbf81fbff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc03effbf7efbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000007fff7fffbc01effbeff7bff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffbeff7fffbfddeffbeff7bff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffff80ff7fffbfddeffbeff7bff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe26fffffffffffffffffffffffffffffffffffb6ff7fffbc01effbf7efbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16fffffffffffffffffffffffffffffffffffb6ff7fffbc03effbf81fbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe39fffffffffffffffffffffffffffffffffffc9ff7fffbfffeffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc0feffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc0feffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfefeffbffffbff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfefeff800003ff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc0feffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc1feffffffffff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbe7feffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc2feffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbdafeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbdafeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc0feffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffffff7fffbc1feffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7fffbdffeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000003fff7fffbdfdeffffffffff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbeffffffffffffffffffffffffffffffffffe3fff7fffbc01effffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc01effffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbdffeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbdffeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbb0feffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000007fff7fffb20feffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffffffffffffffffffffffffffffbeff7fffb6ffeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff1b7ffffffffffffffffffffffffffffffffffffff80ff7fffb6ffeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff137ffffffffffffffffffffffffffffffffffffffb6ff7fffb00feffffffffff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffff0b7ffffffffffffffffffffffffffffffffffffffb6ff7fffb80feffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffffffffffffffffffffffffffffc9ff7fffbfffeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff1b7ffffffffffffffffffffffffffffffffffffffffff7fffbcefeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff1b7ffffffffffffffffffffffffffffffffffffffffff7fffbc6feffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff800000000000000000000000000000000000000003fff7fffbd6feffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffdf7fffffffffffffffffffffffffffffffffffffe3fff7fffbdafeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbd8feffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbdcfeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbe1feffffffffff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc0feffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbdafeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbdafeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fff80000ffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000007fff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffbeff7ffffffffffffffffff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffff80ff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe26fffffffffffffffffffffffffffffffffffb6ff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16fffffffffffffffffffffffffffffffffffb6ff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe39fffffffffffffffffffffffffffffffffffc9ff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000003fff7ffffffffffffffffff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbefc0000000000000000000000000000000007fff7ffffffffffffffffff0 79fffefffcefffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffbeff7ffffffffffffffffff0 79fffefffd77ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6dfffffffffffffffffffffffffffffff80ff7fff80000ffffffffff0 79fffefffdb7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc4dfffffffffffffffffffffffffffffffb6ff7fffbfffeffffffffff0 79fffefffdb7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2dfffffffffffffffffffffffffffffffb6ff7fffbfffeffffffffff0 79fffefffdcfffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc73fffffffffffffffffffffffffffffffc9ff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffefffddfffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffefffdefffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffefffc07ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffefffdfe003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffefffdffffbffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffeffffffffbffffffffffffffffffffffffedfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffeffffffffbffffffffffffffffffffffffcdfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffefffdffffbffffffffffffffffffffffffadfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbc01effffffffff0 79fffefff8ffffbffffffffffffffffffffffff73fffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbc01effffffffff0 79fffefffdffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfddeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfddeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfddeffffffffff0 79fffeffff1fffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffff7fffbffdeffffffffff0 79fffefffeeff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6dfffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffefffdf7ffbfffffffffffffffffffffffe101010101010101010101010101010101010100c1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e03fff7fffbdffeffffffffff0 79fffefffeefffbffffffffffffffffffffffff7dffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffffffe3fff7fffbdefeffffffffff0 79fffeffff1fffbffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffff7dffffffffffffffffffffffffffffffe3fff7fffbc09effffffffff0 79fffeffffffffbffffffffffffffffffffffff6dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbc09effffffffff0 79fffeffffffffbffffffffffffffffffffffff6dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbdffeffff1fffff0 79fffeffffffffbffffffffffffffffffffffff93ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbdffefffce7ffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffefffbfbffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000007fff7fffbdffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffbeff7fffbdfdeffffffffff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffff80ff7fffbc01efffc03ffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe26fffffffffffffffffffffffffffffffffffb6ff7fffbc01efffbffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16fffffffffffffffffffffffffffffffffffb6ff7fffbdffefffbffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe39fffffffffffffffffffffffffffffffffffc9ff7fffbdffefffbffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffefffc03ffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbe1feffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc0fefffdbfffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbdafefffb5fffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbdafefffb5fffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc8fefffadfffff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbe9fefffdbfffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffefffbdfffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffefff817ffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffefffbffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7fffbfffefff81fffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000003fff7fffbfffeffffbfffff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffe3fff7fffbfffeffffdfffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbeffffffffffffffffffffffffffffffffffe3fff7fffbfffeffffdfffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffefff83fffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fff80000ffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffffffffff63fffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffeddfffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000007fff7ffffffffffeddfffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffffffffffffffffffffffffffffbeff7ffffffffffeddfffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff1b7ffffffffffffffffffffffffffffffffffffff80ff7fffffffffff03fffff0 79fffeffffffffbffffffffffffffffffff80ffffffffffffffffffffffffffffffff007ffffffffffffffffffffffffffffffffffffffb6ff7ffffffffffffffffff0 79fffefffffff03fffffffffffffffffffff6ffffffffffffffffffffffffffffffff0b7ffffffffffffffffffffffffffffffffffffffb6ff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffe6ffffffffffffffffffffffffffffffff187ffffffffffffffffffffffffffffffffffffffc9ff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffff040c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f03fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffb8ffffffffffffffffffffffffffffffffdf7fffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffff80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffe01fffff0 79fffeffffffffbffffffffffffffffffffc9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffffffffffddfffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffffffffffddfffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffffffffffddfffff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffffffffffe3fffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffffffffffc3fffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffffffffffbdfffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffffffffffbdfffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffffffffffbdfffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffffffffffc3fffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000007fff7fffffffffff81fffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffbeff7ffffffffffffbfffff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffff80ff7ffffffffffffdfffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe26fffffffffffffffffffffffffffffffffffb6ff7ffffffffffffdfffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16fffffffffffffffffffffffffffffffffffb6ff7fff80000ffffbfffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe39fffffffffffffffffffffffffffffffffffc9ff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffffdfffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffefffc07ffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffefffbdfffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffefffbdfffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffefffdffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbe03effffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7fffbc01effffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffffff7fffbd7defffd83ffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7fffbcfdefffbbbffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7fffb801efffbdbffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000003fff7fffba03efffbdbffff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbefc0000000000000000000000000000000007fff7fffbfffefffc3bffff0 79fffefffcefffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffbeff7fffbe0feffffffffff0 79fffefffd77ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6dfffffffffffffffffffffffffffffff80ff7fffbc0fefffe0fffff0 79fffefffdb7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc4dfffffffffffffffffffffffffffffffb6ff7fffbdffefffdf7ffff0 79fffefffdb7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2dfffffffffffffffffffffffffffffffb6ff7fffbdffefffbfbffff0 79fffefffdcfffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc73fffffffffffffffffffffffffffffffc9ff7fffbc0fefffdf7ffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbc0fefffe0fffff0 79fffefffcefffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffeffffffffff0 79fffefffd77ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbdffefffe0fffff0 79fffefffdb7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbdefefffdf7ffff0 79fffefffdb6003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbc09efffbfbffff0 79fffefffdcfffbffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbc09efffdf7ffff0 79fffeffffffffbffffffffffffffffffffffffedfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbdffefffe0fffff0 79fffeffffffffbffffffffffffffffffffffffcdfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbdffeffffffffff0 79fffefffdffffbffffffffffffffffffffffffadfffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbfffefffe0fffff0 79fffefff8ffffbffffffffffffffffffffffff73fffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbe03efffdf7ffff0 79fffefffdffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbc03efffbfbffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbdefefffdf7ffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffff7fffbdefefffe0fffff0 79fffeffff1fffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffff7fffbcffeffffffffff0 79fffefffeeff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6dfffffffffffffffffffffffffffffffffff7fffbeffeffffffffff0 79fffefffdf7ffbfffffffffffffffffffffffe101010101010101010101010101010101010100c1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e03fff7fffbfffefffbffffff0 79fffefffeefffbffffffffffffffffffffffff7dffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffffffe3fff7fffbfffefff1ffffff0 79fffeffff1fffbffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffff7dffffffffffffffffffffffffffffffe3fff7fffbfffefffbffffff0 79fffeffffffffbffffffffffffffffffffffff6dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffffffffff0 79fffeffffffffbffffffffffffffffffffffff6dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffffffffff0 79fffeffffffffbffffffffffffffffffffffff93ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffeffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7fffbfffefffbfbffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000007fff7fffbfffefffce7ffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffbeff7fffbfffeffff1fffff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffff80ff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe26fffffffffffffffffffffffffffffffffffb6ff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16fffffffffffffffffffffffffffffffffffb6ff7fffbfffeffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe39fffffffffffffffffffffffffffffffffffc9ff7fff80000ffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe36fffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000003fff7ffffffffffffffffff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbeffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000007fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffffffffffffffffffffffffffffbeff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff1b7ffffffffffffffffffffffffffffffffffffff80ff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff137ffffffffffffffffffffffffffffffffffffffb6ff7ffffffffffffffffff0 79fffefffffff03ffffffffffffffffffffffffffffffffffffffffffffffffffffff0b7ffffffffffffffffffffffffffffffffffffffb6ff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffffffffffffffffffffffffffffc9ff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff1b7ffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff1b7ffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff800000000000000000000000000000000000000007fff7ffffffffffffffffff0 79fffeffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffdf7ffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffefffffff03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 79fffeffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 780000ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff0 7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 showpage %%EndDocument @endspecial @beginspecial 464 @hoffset -80 @voffset 0.500000 @hscale 0.500000 @vscale 90 @angle @setspecial %%BeginDocument: rt_arm2.ps /bitdump % stk: width, height, iscale { % read arguments /iscale exch def /height exch def /width exch def % scale appropriately width iscale mul height iscale mul scale % allocate space for one scanline of input /picstr % picstr holds one scan line width 7 add 8 idiv % width of image in bytes = ceiling(width/8) string def % read and dump the image width height 1 [width 0 0 height neg 0 height] { currentfile picstr readhexstring pop } image } def 72 300 div dup scale 890 145 translate 154 602 5 bitdump 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 3fffffffffffffffffffffffffffffffffffff00 2abfffffffffffffffffffffffffffffffffff00 157fffffffffffffffffffffffffffffffffff00 2abfffffffffffffffffffffffffffffffffff00 157fffffffffffffffffffffffffffffffffff00 2abfffffffffffffffffffffffffffffffffff00 157fffffffffffffffffffffffffffffffffff00 2abfffffffffffffffffffffffffffffffffff00 157fffffffffffffffffffffffffffffffffff00 2abfffffffffffffffffffffffffffffffffff00 157fffffffffffffffffffffffffffffffffff00 2abfffffffffffffffffffffffffffffffffff00 157fffffffffffffffffffffffffffffffffff00 2abfffffffffffffffffffffffffffffffffff00 157fffffffffffffffffffffffffffffffffff00 2abfffffffffffffffffffffffffffffffffff00 157fffffffffffffffffffffffffffffffffff00 2abfffffffffffffffffffffffffffffffffff00 157fffffffffffffffffffffffffffffffffff00 3fffffffffffffffffffffffffffffffffffff00 0000000000000000000000000000000000000000 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff007fffc01e00fff780fc01ffef80 7fffffffffff777fffff7ffbfff7f77fddffef80 7fffffffffff777ffffcffe7f007f7bfdde00f80 7fffffffffff777fffff7ffbfff7f77fddffef80 7fffffffffff7f7fffc01e00fff780ffe3ffef80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffe3ffffffff0ff87e01fe1fffff80 7fffffffffff9fffffdefed7f7bfddfdafef7f80 7fffffffffff7fffffc0bed7f7bfddfdafe05f80 7fffffffffff9fffffdffed7f7bfddfdafefff80 7fffffffffffe3ffffffff4ff87fe3fe9fffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff87fcffedff0fffbfc3fc0fe07f80 7fffffffffff6bfb5fdafed7f80fb5ffdfff7f80 7fffffffffff6bfb5fdafed7f7bfb5ffeff0ff80 7fffffffffff6bfb5fd6fed7f7bfb5ffefff7f80 7fffffffffffa7f83fedff4ffbffd3ffdfe0ff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff03f803edfff7f9ff81fffff0ff80 7ffffffffffff7fbdfdaff01f6bffbfdefed7f80 7ffffffffffffbfbdfdafef7f6bffdfc0bed7f80 7ffffffffffffbfbdfd6fef7f6bffdfdffed7f80 7fffffffffff07fc3fedff7ff07ffbfffff4ff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffbfc3fe1fffffffffffe1fffff80 7fffffffffff80fbdfdafffff7f7bdfdefef7f80 7fffffffffff7bfbdfdafffff007817defc63f80 7fffffffffff7bfbdfdafffff7ffbffdefef7f80 7fffffffffffbffc3fe9fffffffffffe1fffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffb7f81fe1ff0fffffc3fe1fffff80 7fffffffffff6bffbfdefef7ffffbdfdefffff80 7fffffffffff6bffdfdefef7ffffbdfdefffff80 7fffffffffff5bffdfdefef7ffffbdfdefffff80 7fffffffffffb7ffbfc01e00ffffc3fc01ffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffdfffff0ff80fc3ffffefbf80 7fffffffffff7bfc07fffed7f7f7bdfdefefdf80 7ffffffffffe31fbdffffed7f7f7bdfc0be00f80 7fffffffffff7bfbdffffed7f7f7bdfdffefff80 7ffffffffffffffdffffff4ffbef803fffefff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffc3fe1ff3ff007fffe1ff11f80 7ffffffffffffffb5fdefed7ff77bdfdefeeef80 7ffffffffffffffb5fdefed7ff77817defeeef80 7ffffffffffffffb5fdefed7ff77bffdefeeef80 7ffffffffffffffd3fc01e0fff8ffffedff11f80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff7dfc3fe1ff0ff807c3fffff11f80 7fffffffffff7efbdfdafef7f7ffbdffffeeef80 7fffffffffff007bdfdafef7f7ffbdffffeeef80 7fffffffffff7ffbdfdafef7f7ffbdffffeeef80 7fffffffffff7ff803e9fe00f807dbfffff11f80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffc1ffffe7ffffffffffffeff60f80 7fffffffffffbefbdfdafefefffffffe03eeef80 7fffffffffff7f718fdafe00fffffffdefef6f80 7fffffffffffbefbdfdafefffffffffdefef6f80 7fffffffffffc1ffffc1fffffffffffefff0ef80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff88ffffe1fffff83ffdfe7ff83f80 7fffffffffff777fffdefef7f7ffc07daff7df80 7fffffffffff777fffdefe05f7ffbdfdafefef80 7fffffffffff777fffdefefffbffbdfdaff7df80 7fffffffffff88ffffc01ffff03fdffc1ff83f80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff88fe0ffffe07ffbfcffedfffff80 7fffffffffff777df7dfdfeff80fb5fdafffff80 7fffffffffff777bfbc01ff7f7bfb5fdafffff80 7fffffffffff777df7dffff7f7bfb5fd6fffff80 7fffffffffff88fe0ffffe0ffbff83fedfffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffff0fffffdbfc01e07f80 7fffffffffffffffffdefed7f7bfb5ffbfff7f80 7fffffffffffffffffc0bed7f02fb5ff5ff0ff80 7fffffffffffffffffdffed7f7ffadfeefff7f80 7fffffffffffffffffffff4fffffdbfdffe0ff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff87ffffc0ffffffff803edff6ff80 7fffffffffff6bfffffdfffff7f7f7fdafed7f80 7fffffffffff6bfffffefffff007ebfdafed7f80 7fffffffffff6bfffffefffff7ffddfd6feb7f80 7fffffffffffa7ffffc1ffffffffbffedff6ff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffe3ffffe1ffffffffdbffffffff80 7fffffffffff9fffffdafef7f7bfb5ffffefff80 7fffffffffff7fffffdafc63f02fb5ffffc7ff80 7fffffffffff9fffffdafef7f7ffadffffefff80 7fffffffffffe3ffffe9ffffffffdbffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff87fffffffffff3bfffffffffff80 7fffffffffff6bffffdefffff5bfffffffffff80 7fffffffffff6bffff8c7ffff6bfffffffffff80 7fffffffffff6bffffdefffff73fffffffffff80 7fffffffffffa7fffffffffff7bfffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff03ffffffff01f9ffffffffffff80 7ffffffffffff7fffffffeeef6bfbdfdefffff80 7ffffffffffffbfffffffeeef6bf18f8c7ffff80 7ffffffffffffbfffffffeeef6bfbdfdefffff80 7fffffffffff07ffffffff1df07fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffbfffff07f9fffbfffffffffff80 7fffffffffff80ffffefbfa7f80fffffffffff80 7fffffffffff7bffffdfdfbbf7bfffffffffff80 7fffffffffff7bffffefbe00f7bfffffffffff80 7fffffffffffbffffff07fbffbffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffb7ffffffffffffffbefdf7ffff80 7fffffffffff6bfffffffffff7bfbf7dfbffff80 7fffffffffff6bfffffffffff02f803c01ffff80 7fffffffffff5bfffffffffff7ffbffdffffff80 7fffffffffffb7ffffffffffffffbffdffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff87fe0ffffffff80 7ffffffffffffffffffffffff7bfdf7fffffff80 7ffffffffffffffffffffffff7bfbfbfffffff80 7ffffffffffffffffffffffff7bfdf7fffffff80 7ffffffffffffffffffffffff87fe0ffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff03fffffffffff80 7fffffffffffffffffffffffff7fffffffffff80 7fffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffff07fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffb07fffffffffffffffffffffff80 7fffffffffff777ffffffffff7bfffffffffff80 7fffffffffff7b7fffffffffe31fffffffffff80 7fffffffffff7b7ffffffffff7bfffffffffff80 7fffffffffff877fffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffff7fffffffffffffffffffffff80 7fffffffffff1f7fffffffffffffffffffffff80 7fffffffffffe77fffffffffffffffffffffff80 7ffffffffffff97fffffffffffffffffffffff80 7ffffffffffffe7fffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffc1fffffffffff80 7fffffffffff7ffffffffffffbefffffffffff80 7ffffffffffe3ffffffffffff7f7ffffffffff80 7fffffffffff7ffffffffffffbefffffffffff80 7ffffffffffffffffffffffffc1fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffff7fffffffffffffffffffffff80 7fffffffffff1f7ffffffffff7ffffffffffff80 7fffffffffffe77fffffffffe3ffffffffffff80 7ffffffffffff97ffffffffff7ffffffffffff80 7ffffffffffffe7fffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff7dfffffffffffb07ffffffffff80 7fffffffffff7efffffffffff777ffffffffff80 7fffffffffff007ffffffffff7b7ffffffffff80 7fffffffffff7ffffffffffff7b7ffffffffff80 7fffffffffff7ffffffffffff877ffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffb8fffffffffffbf7ffffffffff80 7fffffffffff777ffffffffff777ffffffffff80 7fffffffffff777ffffffffff737ffffffffff80 7fffffffffff777ffffffffff757ffffffffff80 7fffffffffff80fffffffffff8e7ffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffbf7ffffffffff80 7ffffffffffffffffffffffff777ffffffffff80 7ffffffffffffffffffffffff737ffffffffff80 7ffffffffffffffffffffffff757ffffffffff80 7ffffffffffffffffffffffff8e7ffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffc03ffffffffffffffffffffffff80 7fffffffffffbbffffffffffffffffffffffff80 7fffffffffffbbffffffffffffffffffffffff80 7fffffffffffbbffffffffffffffffffffffff80 7fffffffffffc7ffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff87ffffffffffffffffffffffff80 7fffffffffff6bfffffffffffe3fffffffffff80 7fffffffffff6bfffffffffff9cfffffffffff80 7fffffffffff6bfffffffffff7f7ffffffffff80 7fffffffffffa7ffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff03fffffffffff87fffffffffff80 7ffffffffffff7fffffffffff7bfffffffffff80 7ffffffffffffbfffffffffff7bfffffffffff80 7ffffffffffffbfffffffffff7bfffffffffff80 7ffffffffffff7fffffffffffb7fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffec3fffffffffff80 7fffffffffffffffffffffffdbffffffffffff80 7fffffffffffffffffffffffdbffffffffffff80 7fffffffffffffffffffffffddffffffffffff80 7fffffffffffffffffffffffe03fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffb7fffffffffff87fffffffffff80 7fffffffffff6bfffffffffff7bfffffffffff80 7fffffffffff6bfffffffffff7bfffffffffff80 7fffffffffff5bfffffffffff7bfffffffffff80 7fffffffffffb7fffffffffffb7fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff87ffffffffffffffffffffffff80 7fffffffffff6bfffffffffff7f7ffffffffff80 7fffffffffff6bfffffffffff007ffffffffff80 7fffffffffff6bfffffffffff7ffffffffffff80 7fffffffffffa7ffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff87ffffffffffffffffffffffff80 7fffffffffff7bfffffffffff7bfffffffffff80 7fffffffffff7bfffffffffff02fffffffffff80 7fffffffffff7bfffffffffff7ffffffffffff80 7fffffffffffb7ffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff87fffffffffff87fffffffffff80 7fffffffffff7bfffffffffff7bfffffffffff80 7fffffffffff7bfffffffffff7bfffffffffff80 7fffffffffff7bfffffffffff7bfffffffffff80 7fffffffffff87fffffffffffb7fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff03ffffffffffffffffffffffff80 7ffffffffffff7ffffffffffffffffffffffff80 7ffffffffffffbffffffffffffffffffffffff80 7ffffffffffffbffffffffffffffffffffffff80 7fffffffffff07ffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffff87ffffffffffffbfffffffffff80 7fffffffffff7bfffffffffff80fffffffffff80 7fffffffffff7bfffffffffff7bfffffffffff80 7fffffffffff7bfffffffffff7bfffffffffff80 7fffffffffff007ffffffffffbffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff9ffffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff07fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffb7fffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff5bfffffffffff80 7ffffffffffffffffffffffffb7fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff007ffffffffff80 7ffffffffffffffffffffffffeffffffffffff80 7ffffffffffffffffffffffffd7fffffffffff80 7ffffffffffffffffffffffffbbfffffffffff80 7ffffffffffffffffffffffff7ffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffb7fffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff5bfffffffffff80 7ffffffffffffffffffffffffb7fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffe3fffffffffff80 7ffffffffffffffffffffffff9cfffffffffff80 7ffffffffffffffffffffffff7f7ffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffc1fffffffffff80 7ffffffffffffffffffffffffbefffffffffff80 7ffffffffffffffffffffffff7f7ffffffffff80 7ffffffffffffffffffffffffbefffffffffff80 7ffffffffffffffffffffffffc1fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff7ffffffffffff80 7fffffffffffffffffffffffe3ffffffffffff80 7ffffffffffffffffffffffff7ffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffcffffffffffff80 7ffffffffffffffffffffffffd3fffffffffff80 7ffffffffffffffffffffffffddfffffffffff80 7ffffffffffffffffffffffff007ffffffffff80 7ffffffffffffffffffffffffdffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffcffffffffffff80 7ffffffffffffffffffffffffd3fffffffffff80 7ffffffffffffffffffffffffddfffffffffff80 7ffffffffffffffffffffffff007ffffffffff80 7ffffffffffffffffffffffffdffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffcffffffffffff80 7ffffffffffffffffffffffffd3fffffffffff80 7ffffffffffffffffffffffffddfffffffffff80 7ffffffffffffffffffffffff007ffffffffff80 7ffffffffffffffffffffffffdffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff7f7ffffffffff80 7ffffffffffffffffffffffff9cfffffffffff80 7ffffffffffffffffffffffffe3fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff7f7ffffffffff80 7ffffffffffffffffffffffff9cfffffffffff80 7ffffffffffffffffffffffffe3fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffe3fffffffffff80 7ffffffffffffffffffffffff9cfffffffffff80 7ffffffffffffffffffffffff7f7ffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff9ffffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff07fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff87fffffffffff80 7ffffffffffffffffffffffff7bfffffffffff80 7ffffffffffffffffffffffff7bfffffffffff80 7ffffffffffffffffffffffff7bfffffffffff80 7ffffffffffffffffffffffffb7fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffec3fffffffffff80 7fffffffffffffffffffffffdbffffffffffff80 7fffffffffffffffffffffffdbffffffffffff80 7fffffffffffffffffffffffddffffffffffff80 7fffffffffffffffffffffffe03fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff87fffffffffff80 7ffffffffffffffffffffffff7bfffffffffff80 7ffffffffffffffffffffffff7bfffffffffff80 7ffffffffffffffffffffffff7bfffffffffff80 7ffffffffffffffffffffffffb7fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff7f7ffffffffff80 7ffffffffffffffffffffffff007ffffffffff80 7ffffffffffffffffffffffff7ffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff7bfffffffffff80 7ffffffffffffffffffffffff02fffffffffff80 7ffffffffffffffffffffffff7ffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff87fffffffffff80 7ffffffffffffffffffffffff7bfffffffffff80 7ffffffffffffffffffffffff7bfffffffffff80 7ffffffffffffffffffffffff7bfffffffffff80 7ffffffffffffffffffffffffb7fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffff80fffffffffff80 7ffffffffffffffffffffffff7bfffffffffff80 7ffffffffffffffffffffffff7bfffffffffff80 7ffffffffffffffffffffffffbffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff9ffffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff07fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffb7fffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff5bfffffffffff80 7ffffffffffffffffffffffffb7fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff007ffffffffff80 7ffffffffffffffffffffffffeffffffffffff80 7ffffffffffffffffffffffffd7fffffffffff80 7ffffffffffffffffffffffffbbfffffffffff80 7ffffffffffffffffffffffff7ffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffb7fffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff6bfffffffffff80 7ffffffffffffffffffffffff5bfffffffffff80 7ffffffffffffffffffffffffb7fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffe3fffffffffff80 7ffffffffffffffffffffffff9cfffffffffff80 7ffffffffffffffffffffffff7f7ffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffc1fffffffffff80 7ffffffffffffffffffffffffbefffffffffff80 7ffffffffffffffffffffffff7f7ffffffffff80 7ffffffffffffffffffffffffbefffffffffff80 7ffffffffffffffffffffffffc1fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff7ffffffffffff80 7fffffffffffffffffffffffe3ffffffffffff80 7ffffffffffffffffffffffff7ffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffc1fffffffffff80 7ffffffffffffffffffffffffbefffffffffff80 7ffffffffffffffffffffffff7f7ffffffffff80 7ffffffffffffffffffffffffbefffffffffff80 7ffffffffffffffffffffffffc1fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff88fffffffffff80 7ffffffffffffffffffffffff777ffffffffff80 7ffffffffffffffffffffffff777ffffffffff80 7ffffffffffffffffffffffff777ffffffffff80 7ffffffffffffffffffffffff88fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffb8fffffffffff80 7ffffffffffffffffffffffff777ffffffffff80 7ffffffffffffffffffffffff777ffffffffff80 7ffffffffffffffffffffffff777ffffffffff80 7ffffffffffffffffffffffff80fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff7f7ffffffffff80 7ffffffffffffffffffffffff9cfffffffffff80 7ffffffffffffffffffffffffe3fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffff7f7ffffffffff80 7ffffffffffffffffffffffff9cfffffffffff80 7ffffffffffffffffffffffffe3fffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffff80 0000000000000000000000000000000000000000 showpage %%EndDocument @endspecial 28 x fq(This)14 b(\256gure)h(shows)f(an)h(example)g(of)f(the)g (history)f(execution)h(diagram.)28 b(The)15 b(top)e(six)h(boxes)g(indicate)g (the)h(action)f(menus.)28 b(The)15 b(top)e(half)-118 2194 y(of)f(threads)g (correspond)g(to)g(the)g(periodic)g(threads)g(and)g(the)h(bottom)e(half)h(cor\ respond)g(to)f(the)i(aperiodic)f(threads.)21 b(Character)13 b('R')f(shown)g (in)-118 2244 y(the)h(execution)f(history)f(diagram)i(indicates)g(a)g(periodi\ c)f(thread)h(which)f(becomes)i(runnable)e(and)h('E')g(indicates)g(that)f(it)g (terminates)h(with)f(its)-118 2293 y(deadline)h(being)f(met;)j('A)-5 b(')13 b (or)g('C')f(indicate)h(that)g(the)g(thread)g(is)g(aborted)f(or)h(canceled)i (due)e(to)f(a)i(missed)g(deadline.)23 b('B')13 b(indicates)g(that)f(the)-118 2343 y(thread)e(is)g(blocked)g(waiting)f(for)h(some)h(event,)f(or)g(for)g(pre\ emption.)k(The)d(bottom)e(window)g(shows)i(the)f(various)f(statistical)h(info\ rmation.)571 2435 y(Figure)f(6:)15 b(An)10 b(Example)h(of)f(the)g(ARM)g(Snaps\ hot)935 2877 y(8)p eop eos end TeXDict begin bos 300 @start /fa 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 10 12 15 15 24 23 10 10 10 15 20 7 10 7 8 15 15 15 15 15 15 15 15 15 15 10 10 20 20 20 15 27 18 18 19 21 18 18 21 21 10 13 19 16 24 19 21 18 21 18 15 16 21 18 24 18 16 16 11 8 11 12 15 10 15 15 13 15 13 8 15 15 8 8 13 8 21 15 15 15 15 11 11 8 15 13 19 13 13 11 12 8 12 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 15 15 5 15 15 15 15 6 16 15 10 10 15 15 0 15 15 15 7 0 15 10 10 16 16 15 26 29 0 15 0 10 10 10 10 10 10 10 10 0 10 10 0 10 10 10 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 8 0 0 0 0 16 21 27 9 0 0 0 0 0 19 0 0 0 8 0 0 8 15 19 15 0 0 0 0 /Times-Italic 1000 458752 rf /fb df[<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFF FF7FFE7FFE3FFC1FF80FF003C0>16 16 2 -2 21]15 dc dfe /fc df[<000100030006000600 06000C000C000C0018001800180030003000300060006000C000C000C001800180018003000300 0300060006000C000C000C00180018001800300030003000600060006000C000C000>16 41 2 10 21]61 dc dfe /fd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 23 21 21 42 35 14 14 14 21 24 10 14 10 12 21 21 21 21 21 21 21 21 21 21 14 14 24 24 24 21 39 30 28 30 30 28 25 32 32 16 21 32 28 39 30 32 25 32 30 23 28 30 30 42 30 30 28 14 12 14 24 21 14 21 23 18 23 18 14 21 23 12 14 23 12 35 23 21 23 23 18 16 14 23 21 30 21 21 18 16 9 16 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 21 21 7 21 21 21 21 12 21 21 14 14 23 23 0 21 21 21 10 0 22 15 14 21 21 21 42 42 0 21 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 0 12 0 0 0 0 28 32 42 14 0 0 0 0 0 30 0 0 0 12 0 0 12 21 30 23 0 0 0 0 /Times-Bold 1000 655360 rf /fe 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 17 21 21 35 32 14 14 14 21 28 10 14 10 12 21 21 21 21 21 21 21 21 21 21 14 14 28 28 28 21 38 25 25 28 30 25 25 30 30 14 18 28 23 35 28 30 25 30 25 21 23 30 25 35 25 23 23 16 12 16 18 21 14 21 21 18 21 18 20 21 21 12 12 18 12 30 21 21 21 21 16 16 12 21 18 28 18 18 16 17 11 17 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 21 21 7 21 21 21 21 9 23 21 14 14 21 21 0 21 21 21 10 0 22 15 14 23 23 21 37 42 0 21 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 11 0 0 0 0 23 30 39 13 0 0 0 0 0 28 0 0 0 12 0 0 12 21 28 21 0 0 0 0 /Times-Italic-Math /Times-Italic 1.0 ExtendFont 1000 655360 rf /ff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 17 21 21 35 32 14 14 14 21 28 10 14 10 12 21 21 21 21 21 21 21 21 21 21 14 14 28 28 28 21 38 25 25 28 30 25 25 30 30 14 18 28 23 35 28 30 25 30 25 21 23 30 25 35 25 23 23 16 12 16 18 21 14 21 21 18 21 18 12 21 21 12 12 18 12 30 21 21 21 21 16 16 12 21 18 28 18 18 16 17 11 17 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 21 21 7 21 21 21 21 9 23 21 14 14 21 21 0 21 21 21 10 0 22 15 14 23 23 21 37 42 0 21 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 11 0 0 0 0 23 30 39 13 0 0 0 0 0 28 0 0 0 12 0 0 12 21 28 21 0 0 0 0 /Times-Italic 1000 655360 rf /fg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 14 17 21 21 35 32 14 14 14 21 23 10 14 10 12 21 21 21 21 21 21 21 21 21 21 12 12 23 23 23 18 38 30 28 28 30 25 23 30 30 14 16 30 25 37 30 30 23 30 28 23 25 30 30 39 30 30 25 14 12 14 19 21 14 18 21 18 21 18 14 21 21 12 12 21 12 32 21 21 21 21 14 16 12 21 21 30 21 21 18 20 8 20 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 21 21 7 21 21 21 21 7 18 21 14 14 23 23 0 21 21 21 10 0 19 15 14 18 18 21 42 42 0 18 0 14 14 14 14 14 14 14 14 0 14 14 0 14 14 14 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 11 0 0 0 0 25 30 37 13 0 0 0 0 0 28 0 0 0 12 0 0 12 21 30 21 0 0 0 0 /Times-Roman 1000 655360 rf /fh 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 20 33 30 30 60 50 20 20 20 30 34 15 20 15 17 30 30 30 30 30 30 30 30 30 30 20 20 34 34 34 30 56 43 40 43 43 40 37 47 47 23 30 47 40 56 43 47 37 47 43 33 40 43 43 60 43 43 40 20 17 20 35 30 20 30 33 27 33 27 20 30 33 17 20 33 17 50 33 30 33 33 27 23 20 33 30 43 30 30 27 24 13 24 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 30 30 10 30 30 30 30 17 30 30 20 20 33 33 0 30 30 30 15 0 32 21 20 30 30 30 60 60 0 30 0 20 20 20 20 20 20 20 20 0 20 20 0 20 20 20 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 18 0 0 0 0 40 47 60 20 0 0 0 0 0 43 0 0 0 17 0 0 17 30 43 33 0 0 0 0 /Times-Bold 1000 943718 rf end TeXDict begin @letter %%Page: 9 9 bop -118 77 a fg(placing)12 b(the)i(allocation)e(and)h(deallocation)f(polici\ es.)24 b(The)14 b(current)-118 127 y(version)f(of)g(the)g ff(rt)s 13 2 v 12 w (thr)n(ead)r 13 2 v 13 w(cr)o(eate)p fg(,)i ff(rt)r 13 2 v 13 w(thr)m(ead)s 13 2 v 12 w(exit)p fg(,)g ff(rt)r 13 2 v 13 w(mutex)r 13 2 v 13 w(lock)p fg(,) -118 177 y(and)e ff(rt)r 13 2 v 12 w(mutex)s 13 2 v 12 w(unlock)g fg(primitiv\ es)e(are)i(implemented)g(using)f(a)h(trap)-118 226 y(mechanism,)f(rather)e (than)g(MIG.)-118 370 y fh(4)60 b(Related)13 b(W)m(ork)-118 464 y fg(The)20 b (pure)g(kernel-based)g(approach)h(is)e(gaining)g(popularity)e(and)-118 514 y (several)d(pure)g(\(or)f(micro\))g(kernel-based)h(operating)f(systems)h(have) -118 564 y(been)19 b(developed)f(for)g(the)h(distributed)d(computing)i(enviro\ nment)-118 614 y([3)o(,)e(16)o(,)f(17].)28 b(Advantages)15 b(of)f(using)g(a)h (pure)g(kernel)f(instead)h(of)f(a)-118 664 y(standard)i(monolithic)f(kernel)h (is)g(that)g(the)h(preemptability)d(of)j(the)-118 713 y(kernel)9 b(will)g(be) g(inherently)f(better)n(,)i(the)g(size)g(of)f(the)h(kernel)f(becomes)-118 763 y(much)15 b(smaller)o(,)h(and)f(modi\256cation)e(of)i(the)f(kernel)h(will)e (be)i(easier)o(.)-118 813 y(However)n(,)j(only)e(a)g(few)h(micro-kernels)f (were)g(designed)g(for)g(sup-)-118 863 y(porting)8 b(distributed)g(real-time) i(applications.)-77 913 y(In)d(many)g(commercially)g(available)g(real-time)f (operating)g(systems)-118 963 y(and)13 b(executives,)h(a)g(\256xed)f(priority\ -based)e(preemptive)i(scheduling)-118 1013 y(policy)j(has)i(been)g(used.)36 b (Emphasis)18 b(was)g(placed)g(on)f(fast)g(inter-)-118 1063 y(rupt)10 b(latenc\ y)m(,)i(fast)f(context)f(switching,)g(and)h(small)g(kernel)g(size)h([6)o(].) -118 1113 y(Although)f(these)j(factors)f(are)h(important)e(properties)h(for)g (real-time)-118 1163 y(operating)8 b(systems,)j(users)f(were)h(often)e(forced) g(to)g(create)i(an)f ff(ad)f(hoc)-118 1212 y fg(scheduling)16 b(module)g(for) h(each)h(particular)e(application.)34 b(Further)-118 1262 y(more,)10 b(under) f(a)g(transient)f(overload,)h(users)h(may)f(loose)g(control)f(over)-118 1312 y (which)16 b(tasks)h(should)e(complete)i(their)f(computations)f(and)i(which) -118 1362 y(should)c(be)h(aborted)g(or)f(canceled.)28 b(It)14 b(is)g(also)g (dif)n(\256cult)f(to)h(remove)-118 1412 y(priority)8 b(inversion)i(problems)g (in)h(the)f(kernel)h(and)g(bound)e(the)i(worst)-118 1461 y(case)h(blocking)c (time)j(for)e(threads.)-77 1512 y(The)g(proposed)f(real-time)g(thread)g(model) g(is)h(dif)n(ferent)f(from)g(many)-118 1562 y(other)i(thread)g(models.)15 b (In)10 b(particular)m(,)h(our)f(model)-77 1647 y fb(\017)21 b fg(distinguishe\ s)31 b(between)i(real-time)g(and)g(non)g(real-time)-35 1697 y(threads,)-77 1783 y fb(\017)21 b fg(assumes)g(explicit)d(timing)g(constraints)g(for)h(each) i(real-time)-35 1833 y(thread,)10 b(and)-77 1919 y fb(\017)21 b fg(provides)g (a)h(priority)e(inheritance)h(protocol)g(to)g(avoid)g(un-)-35 1969 y(bounded) 9 b(priority)f(inversion.)-77 2054 y(The)13 b(POSIX-Thread)f(proposal[11)o (])g(is)f(very)h(similar)g(to)f(Mach')n(s)-118 2104 y(C-Thread)f(package[5)q (])g(and)g(it)g(also)g(does)g(not)g(distinguish)d(between)-118 2154 y(real-ti\ me)19 b(threads)g(and)g(non-real-time)f(threads.)41 b(This)19 b(poses)g(a) -118 2203 y(problem)c(of)h(identifying)d(the)j(type)f(of)h(threads)g(that)f (can)h("pinned)-118 2253 y(down")c(its)g(memory)i(objects.)23 b(However)o(,) 14 b(it)e(can)i(dynamically)e(se-)-118 2303 y(lect)d(the)f(thread)h(schedulin\ g)f(policy)g(and)h(a)g(thread)g(also)f(contains)h(the)-118 2353 y(thread)j (attributes)f(such)i(as)g("inherit)e(priority",)g("scheduling)g(prior-)-118 2403 y(ity",)k("scheduling)e(policy",)i(and)f("minimum)g(stack)h(size".)29 b (Thus,)-118 2452 y(adding)9 b(the)h(timing)f(attributes)g(would)g(be)i(very)f (simple.)-77 2503 y(The)23 b(Ultrix-Thread)e(model[4)o(])h(does)h(not)e(addre\ ss)i(real-time)-118 2553 y(thread)12 b(issues,)i(however)n(,)g(the)e(designer) h(intended)e(to)h(create)i(much)-118 2603 y(lighter)9 b(threads)i(by)f(leavin\ g)g(the)g(context)g(information)f(of)h(thread)g(at)-118 2652 y(the)f(process) i(level)e(as)h(much)g(as)h(possible.)j(Thus,)c(creation)g(of)f(a)h(new)-118 2702 y(thread)e(can)g(be)h(done)e(by)h(specifying)f(thread')m(s)h(stack)g(pag\ e)h(and)f(guard)-118 2752 y(page)j(address:)k fd(tfork)p fg(\()10 b(stack)s 13 2 v 12 w(ptr)m(,)h(guard)r 13 2 v 13 w(ptr)e(\).)1024 77 y(The)j(T)n(opaz-Thr\ ead)h(model[14)o(]provides)d(a)j(clean)f(thread)g(inter-)982 127 y(face)f(lib\ rary)d(at)i(the)f(Modula-2+)g(language)g(level,)h(however)n(,)g(it)f(does)982 177 y(not)h(address)h(real-time)f(thread)g(issues.)982 314 y fh(5)60 b(Summar\ y)982 407 y fg(The)17 b(objective)e(of)h(Real-T)n(ime)h(Mach)f(is)g(to)f(deve\ lop)h(a)g(real-time)982 457 y(version)h(of)g(Mach)g(which)g(can)h(support)e (a)h(predictable)g(real-time)982 506 y(computing)12 b(environment)h(together) f(with)g(a)i(real-time)f(toolset.)23 b(In)982 556 y(particular)n(,)15 b(the)f (kernel)f(should)g(allow)g(a)i(system)f(designer)g(to)f(pre-)982 606 y(dict)f (the)h(schedulability)d(of)i ff(har)o(d)g fg(and)h ff(soft)e fg(real-time)i (tasks)f(which)982 656 y(communicate)f(over)g(a)f(real-time)h(network.)1024 706 y(In)i(this)f(paper)n(,)i(we)g(described)f(a)g(real-time)g(thread)g(model\ ,)h(real-)982 755 y(time)j(synchronization,)h(integrated)e(time-driven)f(sche\ duler)o(,)k(and)982 805 y(memory)c(resident)e(objects)h(for)g(Real-T)o(ime)g (Mach.)27 b(W)m(e)15 b(also)f(dis-)982 855 y(cussed)j(the)e(implementation)f (issues,)k(real-time)d(toolset,)i(and)e(the)982 905 y(current)10 b(status)g (of)g(the)g(system.)1024 955 y(W)m(e)18 b(are)h(still)d(improving)g(the)i(sys\ tem)g(capability)f(in)g(order)h(to)982 1005 y(provide)d(a)h(system-wide)g(sch\ edulability)e(analysis)i(in)f(Real-T)o(ime)982 1054 y(Mach.)21 b(In)12 b(part\ icular)m(,)h(we)g(are)g(working)d(on)i(predictable)f(real-time)982 1104 y(com\ munication)h(support,)f(priority)e(inversion)i(problems)g(in)g(Mach)982 1154 y (IPC,)g(and)f(multi-board)e(based)j(multiprocessor)e(targets.)982 1292 y fh (6)60 b(Acknowledgments)982 1384 y fg(W)m(e)13 b(would)e(like)g(to)h(thank)f (the)h(members)i(of)d(the)h(AR)n(T)g(Project)g(and)982 1434 y(the)e(Mach)h (group)e(for)h(their)g(valuable)g(comments)g(and)h(inputs)e(to)g(the)982 1484 y(development)h(of)g(Real-T)o(ime)h(Mach.)982 1621 y fh(Refer)o(ences)1003 1714 y fg([1])20 b(M.J.)i(Accetta,)j(W)l(.)d(Baron,)h(R.V)-5 b(.)21 b(Bolosky) l(,)j(D.B.)e(Golub,)1072 1764 y(R.F)m(.)32 b(Rashid,)17 b(A.)f(T)m(evanian,)i (and)d(M.W)m(.)h(Y)l(oung,)29 b(\252Mach:)1072 1814 y(A)10 b(new)f(kernel)g (foundation)e(for)i(unix)f(development\272,)13 b ff(In)c(Pr)o(o-)1072 1863 y (ceedings)i(of)f(the)g(Summer)g(Usenix)h(Confer)n(ence,)p fg(,)h(July)l(,)f (1986.)1003 1942 y([2])20 b(David)15 b(L.)i(Black,)30 b(\252Scheduling)15 b (support)f(for)h(concurrency)1072 1991 y(and)h(parallelism)f(in)g(the)g(Mach) h(operating)e(system\272,)31 b ff(IEEE)1072 2041 y(Computer)-5 b(,)10 b fg (V)-5 b(ol.23,)10 b(No.5,)h(1990)1003 2119 y([3])20 b(D.R.)14 b(Cheriton,)e (G.R.)h(Whitehead)g(and)g(E.D.)h(Sznyter)n(,)22 b(\252Bi-)1072 2169 y(nary)7 b (emulation)f(of)h(UNIX)g(using)f(V)h(Kernel\272,)k ff(In)c(pr)n(oceedings) 1072 2219 y(of)j(Summer)g(Usenix)h(Confer)n(ence,)h fg(June,)e(1990.)1003 2297 y([4])20 b(D.)h(S)f(Conde,)j(F)m(.)d(S.)h(Hsu,)i(and)e(U.)f(Sinkewicz,)44 b (\252Ultrix)1072 2347 y(threads\272,)15 b(In)9 b ff(Pr)o(oceedings)h(of)f(Sum\ mer)h(Usenix)g(Confer)m(ence,)1072 2397 y fg(June,)h(1989.)1003 2475 y([5])20 b(E.)13 b(C.)f(Cooper)m(,)h(and)e(R.)h(P)l(.)g(Draves,)20 b(\252C)11 b(thread\ s\272,)20 b(T)n(echnical)1072 2524 y(report,)11 b(Computer)f(Science)i(Depart\ ment,)f(Carnegie)g(Mellon)1072 2574 y(University)l(,)g(CMU-CS-88-154,)d(March\ ,)j(1987.)1003 2652 y([6])20 b(B.)15 b(Furht,)h(J.)f(Parker)o(,)h(and)f(D.)g (Grostick,)28 b(\252Performance)16 b(of)1072 2702 y fe(REAL)p fc(=)p fe(IX) 1230 2687 y fa(TM)1285 2702 y fg(-)11 b(Fully)f(Preemptive)h(Real)h(T)n(ime)g (UNIX\272,)17 b ff(Op-)1072 2752 y(erating)10 b(System)g(Review)n(,)h fg(V)-6 b(ol.23,)10 b(No.4,)h(April,)e(1989)935 2877 y(9)p eop %%Page: 10 10 bop -97 77 a fg([7])20 b(D.)13 b(Golub,)h(R.)f(Dean,)i(A.)e(Forin,)h(and)f (R.)g(Rashid,)23 b(\252Unix)13 b(as)-28 127 y(an)f(application)e(program\272,) 18 b ff(In)11 b(the)h(pr)n(oceedings)g(of)e(Summer)-28 177 y(Usenix)g(Confer) n(ence)p fg(,)i(June,)f(1990.)-97 263 y([8])20 b(Mark)14 b(Heuser)o(,)28 b (\252An)15 b(implementation)f(of)g(real-time)h(thread)-28 312 y(synchronizati\ on\272,)39 b ff(In)19 b(Pr)o(oceedings)g(of)g(Usenix)g(Summer)-28 362 y(Confe\ r)n(ence,)11 b fg(June,)g(1990.)-97 448 y([9])20 b(P)-5 b(.)16 b(Hood)f(and)g (V)-6 b(.)16 b(Grover)n(,)30 b(\252Designing)14 b(real)i(time)f(systems)-28 498 y(in)e(ADA)-5 b(\272,)25 b(T)n(ech)14 b(Report)f(1123-1,)g(SofT)n(ech,)i (Inc.,)h(January)m(,)-28 548 y(1986.)-118 634 y([10])k(M.B.)13 b(Jones,)h(and) f(R.F)m(.)g(Rashid,)22 b(\252Mach)13 b(and)g(Matchmaker:)-28 683 y(Kernel)21 b (and)g(language)g(support)e(for)i(object-oriented)e(dis-)-28 733 y(tributed) 11 b(system\272,)23 b ff(In)12 b(pr)n(oceedings)h(of)f(the)g(\256rst)h(confer) n(ence)-28 783 y(of)c(OOPSLA,)j fg(September)o(,)e(1986)-118 869 y([11])20 b (IEEE,)f(\252Realtime)11 b(Extension)g(for)f(Portable)h(Operating)g(Sys-)-28 919 y(tems\272,)16 b(P1003.4/Draft6,)9 b(February)m(,)i(1989.)-118 1005 y([12\ ])20 b(J.)8 b(P)l(.)g(Lehoczky)n(,)h(L.)f(Sha,)h(and)f(Y)-5 b(.)8 b(Ding,)j (\252The)e(rate-monotonic)-28 1055 y(scheduling)k(algorithm:)20 b(Exact)14 b (characterization)g(and)g(aver-)-28 1104 y(age)i(case)g(behavior)q(\272,)30 b (Department)15 b(of)g(Statistic,)h(Carnegie)-28 1154 y(Mellon)9 b(University) l(,)h(1987.)-118 1240 y([13])20 b(C.)c(L.)g(Liu)g(and)g(J.)g(W)m(.)g(Layland,) 32 b(\252Scheduling)15 b(algorithms)-28 1290 y(for)10 b(multiprogramming)e (in)i(a)h(hard)f(real)h(time)g(environment\272,)-28 1340 y ff(Journal)e(of)h (the)g(ACM,)g fg(V)-5 b(ol.20,)10 b(No.1,)h(1973.)-118 1426 y([14])20 b(P)-5 b (.)19 b(McJones)g(and)f(Swart)g(P)-5 b(,)36 b(\252Evolving)17 b(the)h(unix)f (system)-28 1476 y(interface)9 b(to)f(support)f(multithreaded)h(programs\272) h(,)k(T)m(echnical)-28 1525 y(report,)k(T)m(ech)g(Report)e(21,)j(Part)e(I,)g (DEC)g(SRC,)g(September)o(,)-28 1575 y(1987.)-118 1661 y([15])k(A.)f(K.)g(Mok\ ,)38 b(\252Fundamental)19 b(Design)f(Problems)h(of)f(Dis-)-28 1711 y(tributed) 8 b(Systems)j(for)e(the)h(Hard-Real-T)n(ime)h(Environment\272,)-28 1761 y ff (PhD)g(thesis)p fg(,)g(Massachusetts)g(Institute)e(of)h(T)n(echnology)l(,)h (May)-28 1811 y(1983.)-118 1896 y([16])20 b(S.J.)15 b(Mullender)m(,)g(G.V)-5 b (.)14 b(Rossum,)h(A.S.)f(T)n(anenbaum,)i(R.)d(Re-)-28 1946 y(nesse)d(and)g (H.)f(Staveren,)15 b(\252Amoeba:)g(A)9 b(Distributed)f(Operat-)-28 1996 y(ing) f(System)h(for)f(the)g(1990s\272,)k ff(IEEE)e(Computer)e fg(V)-6 b(ol.23,)8 b (No.5,)-28 2046 y(May)m(,)j(1990)-118 2132 y([17])20 b(M.)8 b(Rozier)n(,)h (V)-5 b(.)8 b(Abrossimov)l(,)h(F)m(.)g(Armand,)g(I.)f(Boule,)g(M.)g(Gien,)-28 2182 y(M.)16 b(Guillemount,)f(F)m(.)h(Herrmann,)i(C.)e(Kaiser)o(,)h(S.)g(Lang\ lois,)-28 2231 y(P)-5 b(.)9 b(L)s(\302)-17 b(eonard,)9 b(and)g(W)l(.)g(Neuhau\ ser)o(,)j(\252Chorus)c(distributed)e(oper-)-28 2281 y(ating)k(system\272,)17 b ff(Computing)9 b(Systems)i(Journal)p fg(,)f(The)i(Usenix)-28 2331 y(Associati\ on,)e(December)o(,)h(1988)-118 2417 y([18])20 b(L.)14 b(Sha,)i(R.)e(Rajkumar) n(,)h(and)f(J.)h(P)-5 b(.)14 b(Lehoczky)n(,)26 b(\252Priority)12 b(in-)-28 2467 y(heritance)h(protocols:)19 b(An)13 b(approach)g(to)g(real-time)g(synchr\ o-)-28 2517 y(nization\272,)i(T)n(echnical)c(Report)f(CMU-CS-87-181,)f(Carneg\ ie)-28 2566 y(Mellon)g(University)l(,)h(November)h(1987)-118 2652 y([19])20 b (B.)15 b(Sprunt,)h(L.)f(sha)h(and)f(J.)h(P)-5 b(.Lehoczky)o(,)29 b(\252Aperio\ dic)15 b(T)m(ask)-28 2702 y(Scheduling)c(for)g(Hard-Real-T)o(ime)h(Systems\ \272,)22 b ff(The)12 b(Journal)-28 2752 y(of)d(Real-TIme)i(Systems)p fg(,)g (V)-5 b(ol.1,)10 b(No.1,)h(1989.)982 77 y([20])20 b(J.)13 b(A.)g(Stankovic,) 21 b(\252Misconceptions)11 b(about)h(real-time)h(com-)1072 127 y(puting:)g (A)c(serious)g(problem)g(for)g(next-generation)g(systems\272,)1072 177 y ff (IEEE)j(Computer)p fg(,)d(V)-5 b(ol.21,)10 b(No.10,)g(October)n(,)h(1988.)982 260 y([21])20 b(H.)f(T)m(okuda)f(and)g(M.)h(Kotera,)38 b(\252A)18 b(real-time) g(tool)f(set)h(for)1072 309 y(the)12 b(AR)m(TS)h(kernel\272,)20 b(Proceedings) 12 b(of)g(9th)f(IEEE)i(Real-T)o(ime)1072 359 y(Systems)e(Symposium,)f(Decembe\ r,)h(1988.)982 442 y([22])20 b(H.)14 b(T)n(okuda)f(and)g(M.)h(Kotera,)25 b (\252Scheduler1-2-3:)c(An)13 b(inter-)1072 492 y(active)e(schedulability)e (analyzer)i(for)f(real-time)h(systems\272,)17 b ff(In)1072 542 y(Pr)o(oceedin\ gs)11 b(of)e(Compsac88,)h fg(October)g(1988.)982 625 y([23])20 b(H.)13 b(T)m (okuda,)g(M.)g(Kotera,)g(and)f(C.)g(W)m(.)g(Mercer)o(,)21 b(\252A)13 b(real-t\ ime)1072 675 y(monitor)c(for)g(a)i(distributed)c(real-time)j(operating)f(syst\ em\272,)15 b ff(In)1072 725 y(Pr)o(oceedings)e(of)g(ACM)g(SIGOPS)g(and)f(SIGP\ LAN)h(workshop)1072 774 y(on)d(parallel)f(and)h(distributed)e(debugging)p fg (,)h(May)m(,)i(1988.)982 857 y([24])20 b(H.)9 b(T)n(okuda,)g(M.)g(Kotera,)g (and)g(C.)g(W)l(.)g(Mercer)o(,)k(\252An)c(integrated)1072 907 y(time-driven)e (scheduler)i(for)f(the)g(AR)m(TS)h(kernel\272,)j ff(In)c(Pr)o(oceed-)1072 957 y(ings)h(of)h(8th)f(IEEE)h(Phoenix)g(Confer)n(ence)h(on)f(Computers)f(and) 1072 1007 y(Communications)p fg(,)f(March,)k(1989.)982 1090 y([25])20 b(H.)9 b (T)n(okuda)f(and)h(C.)f(W)m(.)h(Mercer)o(,)k(\252AR)m(TS:)c(A)g(distributed)d (real-)1072 1140 y(time)13 b(kernel\272,)24 b ff(ACM)13 b(Operating)f(Systems) h(Review)p fg(,)j(V)-6 b(ol.23,)1072 1189 y(No.3,)11 b(July)l(,)g(1989.)982 1273 y([26])20 b(H.)15 b(T)m(okuda,)g(C.)f(W)l(.)g(Mercer,)h(Y)-6 b(.)15 b (Ishikawa,)g(and)f(T)m(.)g(E.)h(Mar-)1072 1322 y(chok,)i(\252Priority)9 b(inv\ ersions)g(in)h(real-time)h(communication\272,)1072 1372 y(In)f ff(Pr)o(oceedi\ ngs)h(of)e(10th)g(IEEE)j(Real-T)m(ime)f(Systems)f(Sympo-)1072 1422 y(sium)p fg (,)g(December,)h(1989.)924 2877 y(10)p eop eos %%Trailer end %%EOF