[llvm-commits] CVS: llvm-www/pubs/2006-06-07-LewyckyChecker.html 2006-06-07-LewyckyChecker.pdf 2006-06-07-LewyckyChecker.ps

Chris Lattner lattner at cs.uiuc.edu
Mon Jun 12 13:32:56 PDT 2006



Changes in directory llvm-www/pubs:

2006-06-07-LewyckyChecker.html added (r1.1)
2006-06-07-LewyckyChecker.pdf added (r1.1)
2006-06-07-LewyckyChecker.ps added (r1.1)
---
Log message:

New thesis


---
Diffs of the changes:  (+5254 -0)

 2006-06-07-LewyckyChecker.html |   56 
 2006-06-07-LewyckyChecker.pdf  |    0 
 2006-06-07-LewyckyChecker.ps   | 5198 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 5254 insertions(+)


Index: llvm-www/pubs/2006-06-07-LewyckyChecker.html
diff -c /dev/null llvm-www/pubs/2006-06-07-LewyckyChecker.html:1.1
*** /dev/null	Mon Jun 12 15:32:54 2006
--- llvm-www/pubs/2006-06-07-LewyckyChecker.html	Mon Jun 12 15:32:44 2006
***************
*** 0 ****
--- 1,56 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+ <html>
+ <head>
+   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+   <link rel="stylesheet" href="../llvm.css" type="text/css" media="screen" />
+   <title>Checker: a Static Program Checker</title>
+ </head>
+ <body>
+ 
+ <div class="pub_title">
+   Checker: a Static Program Checker
+ </div>
+ <div class="pub_author">
+   Nicholas Lewycky, B.Sc. Thesis
+ </div>
+ 
+ 
+ <h2>Abstract:</h2>
+ <blockquote>
+ <p>Automated software analysis is the process of testing program source
+ code against a set of conditions. These may be as simple as verifying
+ the coding standards, or as complicated as new languages which are
+ formally verifiable by a theorem solver.</p>
+ 
+ <p>Checker is able to find two small classes of errors, one is memory
+ faults, the other, non-deterministic behaviour. Lacking interprocedural
+ analysis, checker can not be applied to real-world software.</p>
+ </blockquote>
+ 
+ <h2>Published:</h2>
+ <blockquote>
+   Checker: a Static Program Checker.<br>
+   <i>Undergraduate Thesis</i>, Computer Science Dept., Ryerson University, June 2006.
+ </blockquote>
+ 
+ <h2>Download:</h2>
+ <ul>
+   <li><a href="2006-06-07-LewyckyChecker.ps">Checker: a Static Program Checker</a> (PS)</li>
+   <li><a href="2006-06-07-LewyckyChecker.pdf">Checker: a Static Program Checker</a> (PDF)</li>
+ </ul>
+ 
+ <h2>BibTeX Entry:</h2>
+ <pre>
+   @MastersThesis{Lewycky:Checker06,
+     author  = {Nicholas Lewycky},
+     title   = "{Checker: a Static Program Checker}",
+     school  = "{Computer Science Dept., Ryerson University}",
+     year    = {2006},
+     address = {Toronto, ON},
+     month   = {June},
+     note    = {{\em See {\tt http://wagon.no-ip.org/checker}.}}
+   }
+ </pre>
+ 
+ </body>
+ </html>


Index: llvm-www/pubs/2006-06-07-LewyckyChecker.pdf


Index: llvm-www/pubs/2006-06-07-LewyckyChecker.ps
diff -c /dev/null llvm-www/pubs/2006-06-07-LewyckyChecker.ps:1.1
*** /dev/null	Mon Jun 12 15:32:56 2006
--- llvm-www/pubs/2006-06-07-LewyckyChecker.ps	Mon Jun 12 15:32:44 2006
***************
*** 0 ****
--- 1,5198 ----
+ %!PS-Adobe-2.0
+ %%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software
+ %%Title: thesis.dvi
+ %%Pages: 18
+ %%PageOrder: Ascend
+ %%BoundingBox: 0 0 612 792
+ %%DocumentFonts: CMR17 CMR12 CMBX10 CMR10 CMBX12 CMTT12 CMMI12 CMR8
+ %%+ CMSY10 CMMI8 CMITT10 CMTI12
+ %%DocumentPaperSizes: Letter
+ %%EndComments
+ %DVIPSWebPage: (www.radicaleye.com)
+ %DVIPSCommandLine: dvips -tletter thesis.dvi -o thesis.ps
+ %DVIPSParameters: dpi=600
+ %DVIPSSource:  TeX output 2006.06.07:2255
+ %%BeginProcSet: tex.pro 0 0
+ %!
+ /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+ N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+ mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+ 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+ mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+ exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+ N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+ /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+ /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+ array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+ df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+ definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+ }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+ B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+ 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+ /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+ setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+ restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+ /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+ }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+ mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+ 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+ index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+ /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+ (LaserWriter 16/600)]{A length product length le{A length product exch 0
+ exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+ end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+ grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+ imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+ exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+ fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+ delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+ B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+ rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+ 
+ %%EndProcSet
+ %%BeginProcSet: texps.pro 0 0
+ %!
+ TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+ index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+ exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+ div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+ /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+ definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+ sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+ mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+ forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+ end
+ 
+ %%EndProcSet
+ %%BeginProcSet: special.pro 0 0
+ %!
+ TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+ /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+ /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+ /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+ X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+ /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+ {userdict/md get type/dicttype eq{userdict begin md length 10 add md
+ maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+ /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+ atan/pa X 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}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+ -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+ get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+ yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+ neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR 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 TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+ 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+ 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+ -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+ TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+ }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+ save N userdict maxlength dict begin/magscale true def normalscale
+ currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+ /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+ psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+ psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+ TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
+ @MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
+ newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
+ closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
+ /@beginspecial{SDict begin/SpecialSave save N gsave normalscale
+ currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
+ N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
+ neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
+ rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
+ scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
+ lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
+ ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
+ /setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
+ pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
+ restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
+ /rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
+ setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
+ moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
+ matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
+ savematrix setmatrix}N end
+ 
+ %%EndProcSet
+ %%BeginFont: CMTI12
+ %!PS-AdobeFont-1.1: CMTI12 1.0
+ %%CreationDate: 1991 Aug 18 21:06:53
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMTI12) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMTI12 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 38 /ampersand put
+ dup 39 /quoteright put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 47 /slash put
+ dup 48 /zero put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 54 /six put
+ dup 65 /A put
+ dup 67 /C put
+ dup 68 /D put
+ dup 69 /E put
+ dup 71 /G put
+ dup 73 /I put
+ dup 76 /L put
+ dup 77 /M put
+ dup 78 /N put
+ dup 79 /O put
+ dup 80 /P put
+ dup 82 /R put
+ dup 83 /S put
+ dup 84 /T put
+ dup 87 /W put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 121 /y put
+ dup 122 /z put
+ readonly def
+ /FontBBox{-36 -251 1103 750}readonly def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
+ 525003F3DBE5BF07B2E83E66B7F97DDD7CE0EEB75A78BD9227BF359D002B6ADB
+ 8AC57A33FED4EF021A7085B1E2B933DE602F0FF71467ECD501744AE338AF29A0
+ 26F7D368AC6F25CCB882DB7B7343566192BD687E1349225982823027D3B66703
+ 3B0DB7A7E680A682B98023D39C7FAE81A5D5B867A0A66C8AA0DBC83B1596A84F
+ 0436AC6A7900B767BDCCE0060A4811003C79FDCC71D73F7F2D0A6675E93AD21A
+ 56B4CD8EF75EED3DE8C0A18BEBF7B9D1BE72504872D56EDB272F1E97FC726CB6
+ 68C85C713059DA19F6C2E0F3E12710A59B6FC4699AE883DE8C8615B7292AC25C
+ D5714B6CFB14EF0EF11EB13009BEBA4F345A5D3D6D9926ABC2BAD7DB1328651E
+ 437BFB3C46DA7B62219660FC368CF3D3704DAD3AB461C28F711665BF484BF61C
+ 052093D231CA65618EA463D63E406ECE858D180A6C0589B2FEDC321371C28E77
+ DE974D655DF5FF7D41ED01FE717D928A885F6FA6CFE4D2C0807F8E7F937916E0
+ 96EDD1A3BA67802B1F4A49100E75613BA0356D9DCBBAD4DAB3C59E70A47058F5
+ 2163D1730F0EE4D1F87C3A4AE723A23CFD7986FC4FBD399347E9F5946354E013
+ D860FC446AFF0B0744F5DA27CC777C96ADB388D1E835DDCBE123FB517679B9B7
+ EE5A3DDDCD392415AF58CE22EA55B7F47031138C6F27798B40F7E18FDD315912
+ BE99F33ADE0FDD538A8A3E5DE58AF68A54732AE69F188F3F7E0458D848205648
+ CBE820C287ADC2394520F03BBB97DB893F6A12154B1B7F8626D35CE6B70F8524
+ CB128DE87821A0E32F1E825F6C50AE8B4BE37FAA3183BA4D678E896CC7E61CC9
+ D0226FC38B9CAE0939D19149D987979B96A86EB69A105807AB426639292FF5FB
+ EFF0817FCFD5E517837AD66AE8E3BBE34EC130F8F3F6460A712601686071854A
+ 3D983D84F6EEC4E6F04912E37ABB067121E0BFD5DBCB38065D15A73B4F148829
+ 7932E91870ED3566BC3384F562C824ED4211BF793113943CCFAC49B348361C48
+ 036E01364F9CA555CFF8E5E888D90B1BBA51911B9E72C8A20C99645E95BBA4D6
+ 2000318B2ECC2322B8504044707C15ED5C5A5F3E62518774C1001132C36B2497
+ 6A5962DD93B8E612EB1C3EC92BAE2E1316E0254540CEF9C8947D1A732FDD6973
+ 2A84D2660A873E495DFB3BB0FF79F2CA458A905871C6B6E1DFABBD7CBED979A4
+ DFC77FDBCEE671F3B9DD5D637A2E5C521F1F725B5A54B15A3635F7A336CEB18C
+ 20D3333E0DF79CAA0A60E7DD01B134CD62688F542F0D2CF79B9DA7F8BB4A73EF
+ 509409716FE59E0C9F72E3DEC73C5FEE424C12AD1A6C365E14927259CACE09C0
+ D8AA5D4E19CA34F74ADCAAB1E51021461D123FB8765589264DA08BCF5F72BE4E
+ 10AAA1471988D1E82B12422CC216E2E4470BE5B3D804E2C8A14A35295562C87B
+ 0ED837729143A45C9BA0FA438D5B68BECDBFEFA31460D3850CE54B41FEA8DFEB
+ F7F1A7C9A8BF03ACA079667AE235A758E5C9A37AB28F3AE3FDBAB76AEBBE7B7E
+ 3B91405401924F6E9EB91E04982627EDF68FD26E613ED250CEFB075765C2E86E
+ 38C5E3AA947DE0DA39183A09F58C0185D8F6AE76EFA0A8C41A55256FA3838406
+ E160882C068567636E964ED3EFF87105F68AC486270377C4B570CDF4247C28E3
+ 34774671A882665D740C400694826E9754F679EA3007A442EF179F738FB2E182
+ E2EF67A411EAF4307841A5ABB2EBDF3790510543FE0E6FFAED60331EA96D17DC
+ EF734BD076DBC41BC01483822BA048713938FACDF503A580168CBFF824433F1B
+ C1EA34BEF484B8BC95FE6A21FA636BAD34AE91167BFBB2438EF085F0B294FBEE
+ 34959A6B91DF7A82E8A9AA11C0060234E221BDC52D0D2F336D72D465FFBC5636
+ EB42E45087341A590ACA40AB2F7614541AD635ECD8E908338383380380E7BCC9
+ AA6D72D7BAFF984CF7F884CDEFBBA6EFDECDA511871808AB076E2097D15E0276
+ AA0B097806AE7D9171E93F6EDC6ACF6A40119DB5F64AF313DCCAACA46DB3E64E
+ 0881F1AF2898AEEDAA4A9AFBB3A24C7271C5DA9B05A4BD8C8D206874D483B832
+ F47B6D8C7A2FD120B43FB75F7AE3621F42212CC2325387960A37E05014F060EB
+ 2D33A5D518C8F69EF97E6B9A2BCA43376F354583784263E782D05936FEFC5218
+ E2352768B438D0529EC7830EA0387FC77F9960C188A2DB296244AFF1115DA8E5
+ B39D19D0EA1B1BFE0CA2E1B02AF37CD400ECFEAC03055AA61998BF07B6C0F06B
+ 29A94E287485E6E652329F38DAC877AA06BBA70BA564F5B16F5B9096D818880A
+ 1500A89B834587F253912AC55F1A70BCB0410D743B63699711E5252E46502C9D
+ 3CCF98AF85DB3B89DE5AB3DABF274C3A1225E683F27A2D0D28E43A1F679494A5
+ 385D18D1DA5507617BC194D473D54C27A9905C589F00F80C5FCF9F5082E1C067
+ E94526A9A7168C555956FEF1E8374127E26745AD6249A2585C8B83E546CE409B
+ 7E4B767B457A6F4A14E4FD34B613F93B907E49E5623E70B86B06FF8566FB2B1B
+ 74FB517792BA42F2D2F1B4B234118D306A49468809B5630854EAA748479FA397
+ 77C2E9545DF0AC4B9C66F44DADB1A53F361C20B130BBF69078BED68BB497EB61
+ FFAD51AA160059B923D2E3546F23C46C060F9BAAE8AF4E90EDE47121354E8E89
+ 5FD249EA1D922D80A4FFD37D5BAF406FA0E11B31B14E48A3FE291CC302D598A3
+ 9FCD893561FBEB0FA73B33420FDE3AEAE44792D98B94EC2C41201912AD16183B
+ E556F3F3E9C3F0A41CC2113CB8C35A84BE2C70E8456AC38A332A3BEBF581199E
+ 25A29034BED4D2C57A1731762D9F6B672A21F6A265B33999D504D2288639341A
+ 054988A037F73F7CB95342D40996F677714389E071603097B17912EA405B3DEE
+ EC6E719045850B404F7B24DE391C59F84C14FF96026085C428FB791C74917BAC
+ F12B23578ADE04270AB790F171A1D740C82135B4467B6DCDB833525DAC0D3D48
+ F36954006EDE6F94A8DCF01A57F3E019C9DC0DF1E1EE984E0EF1DB67EDD9FAE3
+ 86DA83DC039AD0E128FCC6C6A80F6F09DEA11A3A4A61A2E5B7AEE869E1DFEEBC
+ 8EC0201178BBD107662F4BC402DF289B4B40A5D3B69595762D58AED124EDAF99
+ C665B79A36D73473A0C291A4AEEE1F6FB1FD9A53100D23EF7A2DC9D8033CA919
+ 3B5A7E2CFC6DC4B162A120208179AD3B3168DC9ECECCC10B81EC3A9C536B2A81
+ 40DE5D3623210EB092FB5924339981E44B1B6198D875F421F2A77E648122BA48
+ A919A36AD41317C5A2531D7A5B00FD332AC7E60B1470B183FC59859851DC2A65
+ 878D6C025830DD7FD59A9855F98FADBA37467379043C9E8BABEC72CF6FAE1CB3
+ 0E10AD79606AB5D1EFFEAF75A5DF50A33270BD8723E71B58C8DA509C292FFF02
+ A2C623DCDB0B679642B8D9EAF91B988768EEE14EFC7C6A8B0A7B2FAD355E848B
+ 208BE353D48864B3255FDC4C625BC2759D73DD11429C33ABD695386A5B03098D
+ EBB02E9081B1B94C5E384C191068DFDD070C1CD3A319BB9E620BF4D69E1BACC2
+ 178AC549562699DB847C4FF61E1F21CCCAE13A0D5B68F568DDFD38D8244E3053
+ AF49B62D313DF7DE909D2020B63EDA601CF3DEBC8185CFE808870D004DBD7BB2
+ C11298E61CA27EAEA6B973D3A7636E68ED370E95FC4BAB32DF3D431F8F3D8F16
+ 1CEDB9A22CD93ED2DD6B2C99858BB3912C7156B54442395E82AB6B6FC5E87460
+ 85136638A6B012988880ADA78784241C248604768940D3AAD47C01CA722B3373
+ A2E79360E5763D6562EFD556CC831C208D0B00813FA13407B237CB7E4BE7B661
+ DA3DC5C6AE78C3F564EF56AEF786E47A156390A1C03A2E23BB497CFD4984F450
+ A7848CEE650815F7280F295B2D70AB36BB1EBC9E8DAE981C0EADF10C1079AD9C
+ C858783AAC36E8504DC854C77248D9A0B80FFA6A5740FAFD315C3340333D57FE
+ D9B77960147A6CF8FCF98D6B59F7C799B9FD473CCA05BC559E728B610913F7C7
+ D6D1BE16D307B0DBDFFBC7ED49C6DF887DD619EDEAF0BA4F12A9BCDDCEB9F73D
+ A8CF34E25183189EACD4DA70258D117E201CE334491DB96DB962D8835D5DE14D
+ 2748FF52E7EC157400E98150D1870E0720D48BF5CA9DF315E2814A4F35402C0F
+ A1172954DC7C14960FEBE46C56A2CB6E9E83C3D75D6D647BD494CC8FEA58A7B7
+ 6D4FD65DF3C44A91744B678D8F218E69C16AFBC80A53B3F2A9997C6DF910A985
+ 544B326306BAF7987C01173046C746E17003DF7A2E3F500F33F679E89495DB50
+ 350398791856447A32ABB40D299BC53AF53933D1FB844B72C2B2A6312B09B7F7
+ 480C05D5CBA02CF5CDB7C33FE774B7339D7C8F9C4DD41247AB44F76AF6E861B6
+ F2B6203CB0DFFE40E539B398A81D757F322716011EC5BA16907DAAB1CF7C93F0
+ E9EA33DCCEB5C2F6BF3B7682B020879A296A8D4041715581654DCF6BCB9F230C
+ 81032D6AC76396119AADDFDE75E0E299C9BFDDB36E9F255A6D0C87B7DFF05C36
+ 0261081D67E039CB1A84055C87BADD5303402978A7CC87D997D0A7A5A0B98160
+ 3AE4B129B4E76464F7AA4CDDEADF73C53ABB4BDEA5863D7D33FB9BF1A24CD9A3
+ 7113B8F8E599AD7A76A3560BC713A829A6E7B2EDE9FF92039CD50C50E94CEBCD
+ 596B3FE640BE1A1112684AA65AEABE7A29794024682EAC59E2E209C7DB8D6820
+ 7CB55C4530E3DBCEE65B6A147A67BB1EC84B4ADBE30D6DEEDBE0183513BAC0BE
+ 7F8AF036B002E7132EF64AB1A19FBE232592F3421AC9DFDF316E2A71DDC13689
+ E84A3F52BFE24AABF7CDBDE974D45C047535BF1A202F8C3EEC0EEB20708A17F6
+ 04C674C1391A02FD89FFDEB5E7E7A8D87A4F976565F7293BD65B2FBE2B78B079
+ C8FCC8B55625C27EC2E493C8A567CC7C7003CE6F714CFC051291EE884CC305E7
+ 77819FAB9FB7940984DDDD5F5C6E246A659FF68F6549F513F93C855658FA11F1
+ 859DEAADDEF02BC24C3F7596812D828F090FF3E1091185E4D748C6E0C0313B58
+ 3E790CFC61CFDC6E2EB92268C4DA69AD0BC9FAF87FC670190B90CDBE9A6E6CE3
+ F194734028388FDDD2587AD5C5FB011BB9DA23C974B05ED60A0A012F9A5C5CA7
+ 7E556661553807F47CD6A87904D97042CD9E97E3ED87EFD08F282FDB5BC663A2
+ 2EE0C20639E6B0D1DD62271E96BEB5E7BC7984CAE0E448ECD903627F690C1F08
+ 3CE9B9343AEA9247B6B977464C2A8228F3CBEFFBF767E2481D80F64AB5AC2E75
+ 36766125CD5AA6992459195A689EA5F9A745B61F3F99F7DC0F09BBCAC83F74B9
+ 19006200AC42573A3582D48BB729BAD07C81105D6F41C1EF33D6604E13C8E649
+ 6777415618F685F5FAA1F9734C28E139745F4FD92C57D2389B43E2536E93D090
+ FECB26BE4A95EC042E79EAB974015362696601A895E9743DBAB525A0F8926B0D
+ 7C77B9422F584498470A182123174EA68D08D7B5BA761BF14A17A7FDD441D3C6
+ 28663A0633BCB5BF735C7F0AD11D05B984BBFFF562CB4AC1B6BFA72B0422DAF8
+ 7D24ABF1560CEA8A78B90E3133A804F3AE2ACBB2050FAF141C9E0561FFEA0966
+ D119C7F41858B18987CE96363CEAFCEFBF09956AEB0EB44ABDEABC4D9435554B
+ 46F29202DE2E7AD45A4170638B43E2A44B014EE6E7C975364C558076D62B165C
+ 2B44716E05F4F3D989E1D6BE3F001A1B093825A63BBA029EFE234E5FFB94D732
+ 8DEF9FBBE5E62CFBDDD3BB45091660396AD61B7A24F610E902D213E1721C5398
+ A982C8EE862F1369003466CCA88BFAF17901DDD21E632B6405940E162B7CBEEF
+ A8F3D1A411A77FD80F69EA91816396EDA4616815E7B410AD827637E43AFEFD8A
+ A3AC37119FC0A095942711FB34875F301712299F3F93E2474C8A45E073442DF0
+ A666F46DF0721548AB589D4D495A43317CAE1F67C740B88E9780E2AABF7486A4
+ 201B277B9DB1E35515602F1CC003F392C6515A62FE3F106C02C26DEA4BD5A463
+ B8708CFDFD3B64BB79D262A96D3416F7C5DD4E8E6C87C2292A783ECCEDA8659D
+ D4C1BFEFC5F009F9CF158E7EA3FF1307EC574637B7C22528C927083161CA9146
+ 30E86B2F11636E71990E35FA26F43E1539DFEB444389A2DEFD41E00B8A5B5889
+ FCC1B1DE520CEDCD4C3327FB997B8C6982703EF83DC2E5C35D1476C0D3754732
+ 64136F5EE31ADE0493EA580C785EAF181EC545270EB7A30C873D369D5B64A034
+ 8A1FAB6E48FF6433ED5D8A44CC91683406ADB7C52CD7E5D738EF8E9E3DD290B2
+ 0101856BE8E22FDE7BB5A0A6EDEBA3E9DECC8573C65FE92278F3746716D72494
+ 58D1B0F07082B7D7B32A3B9B32A997B11D682FE942F6DC15EC4094D1651197CD
+ 786043787F465CB5B5107FE9CECC0448CEA354B32906C6A07436B05B287DA9DD
+ 1DC29DD5E6EAEA80B673FF6F7A815782093059E5694ABC419FE85AC6D35494B7
+ E195BD1978C10F3194686827ED4EFFCF9B24F1444B739982754493DC333430BB
+ 1D5B686B73E342C155009719EEDE5C0016B406C00606B523950A40E4327DB919
+ CC607122AF22E65BE80C429F8A0E9D63B8684B8D5DBC81D5EF2736FD36CA43EE
+ 030DA8ECD039578940D4B3F8E41E16579DD93C88F2FC95E29A3C3CA073D9E047
+ E647C328A2CB464613B34BD7C68422C964E8B014592DBFFB4C669DF10ED97F26
+ 317D234E84BF6DE673E07547EB9A76B040989090B30FA3BDFFEB7B301D3085ED
+ F7C913AC6281229CE2B162B075FDE95BCD7F8740B8FA7B83715C63B1CA6EEA56
+ BDB152199CF75BCEDDE656A49364246EA9ACFC7A1E95A46864A1ACEE20D8A2A9
+ 2E7D7AF33E8931CE7FE587F746BDB5F3FDEE0E27346EB755AB8361F6350D1457
+ BF84234F6BE443E586131FF27E5AB8B6FAC34ED59468D0C6B2D5E19BD51C0A9F
+ 5CFCC5F1878A86808C2A2FA6CC881DD64FA33BB2A776C87FF17411A356BE9FF1
+ 97B2586C4390F33627EB38CA48D14C428094AAAE368AFF888FC66C23D20DC418
+ 3969E25FCBE7B698828DC78C93F85D3B3EBD4DABE889E4FD9E985D978CE8882F
+ F365F56BC3D0F92A6D4D0DF3BDE5ED16E61BE2972A7AA74299CEB247363A8D13
+ D3B572F9029841AAC8CB3A28485E1FFD4E74A1108E726EFAF9A35FEEC202AB01
+ 28541C1FCDED32986163EF1D715B50494B0ACA419BF5081BC370F09DEC2A3537
+ 52D00621A326D36E231CE778A9B9E143A3EFD6008FA631CD9BA6C3B67B6A2262
+ 698931C5DA263EEB9C44AE02089084B6C0BEB8FBFF8675C2678B181456A2EB68
+ 7C447352942DE6B3021E95B5DF006E1E57AE28D8EFE0C29DA59209FD1785CBAB
+ 6B24E7778BF463E7E9703C8EC754A1A1012F49A0CE52AC2C4E2ADC533E8BC542
+ AA6345F011D79C63DD2E96FD415FD628BC32D31C42BE12D41118024134D325F6
+ 272A201A6D896052FB89EFF6AB18FB60C9E7647C4EBC2CB84D370E619639548E
+ 58019B167474031C5C0962BAC15CF7BE61E3BCB7F2A52D5FEA85B908FE100C04
+ 701E6B54EBDB524E751F0A302A324D78F736C177E0559045BA95095A71665665
+ D7766CD26969C07F5E88F0684A46D2C7AD1B9E3113D0CFA1FC6136BEBAFFEBB3
+ 893AB3B8538F4E74EE502D51D1A5078E5C9AB9E98417D5D08475A0186B50CA80
+ 5DB4F98B3334810F3CB0D2EA73DA94BEA2B1E41C1C318571903BC33BB516C497
+ 07E1EC708FDD9E50EAB59639424DD88935CE6F8C31712EE8BF48A3FE3FAE7755
+ 3396E92B0AEAECD6900B5F326B728D424FD62687C6811318D7CFF58EFA2A9C24
+ BE5A5950C29A51934460FFCD52697CA9A89B59F1ADA99DA4A1F21D20B0D0105B
+ AB8EF83ECD6A1B9C6DF4A5EA93E9380479CC97998207F92ECF54986D502FA024
+ B5EFC5BBFBBB9824044B9984A7DA08F2481CBE5D1DF4BE7215E16F0FCDE6DF39
+ 6FCCBD77DEF61FFAB08E2610C309377257144A2AD8B136BDEC8065B40762652E
+ 31176BD7DF5E21AB32DB7FD0A10C782883FC5C7EB9F16EB358FFA0812464910F
+ E98547B0562411C5FEEDB503FF4C1F7EF83D389AE01A7282FE41EEBC1C638A10
+ F72A4473A2DCC402F227A6D7A0F1C46A2D445359DA350B4487CB105DA3939CD1
+ 61F703E43DCE95B8CF9A3D563EB47AF9900364F8616BF9F3E0A22F04B26CAAA1
+ FAD3D1C99E46AAF3A1C6799772EF6DC26C33D369E543039C49B39129FD4D6836
+ 1ADEF1E2835F08419A48045ACB9183C1438DE74B50A0192F7A25053F9AF68A78
+ 72D13974BF26BD3945F5EABBCB150096BD0BF39A4D9A8FD14DB7025F6726E477
+ 8A4CEF395F01393AF7F58C27679612EBFC6A4DC0EAA1D2396604698CF13336FC
+ E39E34B84C346446D4BCB36A29CD6D599450E842B7EA42FD3C3740F53003C2AE
+ 01368EFCAD5B8C19363A678B9AEC7B60641DAE7B643CB2C88C81757FB8EC3D77
+ B8E18AF54E32477AAADE7E2B77D61C586054F6547942261FF4F6F297F102040F
+ 755923298C7DD39ECB2825DCBF88446724A2F0CD9F7AF416F807AF74E3C70B5C
+ F11D4C5BE0E61BF9A1CD9A3F1079EBAD910E7BF875CE89A7489214FFDFE46AC8
+ 2C53B0DA76A5434C3053EB68EAD681C7AA2411A3DC8042A55B1DD9E7E88D0FA6
+ 236C6CFC8EB1ABC6CC2C02C9E0BB00FEC3392F2FFF63DD402A9B6162FEDA6FF5
+ 592E6E5D2FC6E5C9EB06439E5F181772D9A3655AB736153D42C192A4AB88FC94
+ 6888118535D7DE59C4AAAF7D3F6B3C0D1F3FA727115D5834A9D791A78812B360
+ 5F67D2778D3ECC400101143D4F0C85BFC09E61278699F390671021624CE354D2
+ 6FB0B975789CC1CE332AA164A9A3B1601D403AF9688EC2FB14BF696D14FC9460
+ 3438F8EF0D5D76193DCBCD66FA2D0A7E10BE2C4658BA2155DC82A65D4528112F
+ 51D2DF6F486B6F74FBCA742BDA4E4FCF2CE771AA37A905B95957D54DA78B463E
+ 6AE1545E3D0BDFDBED754C34C5BD978BAF59D35E1FD687E5596DC2AAB6E68C19
+ 6D9148EC3AF5287DC7D77D2859F2489B00E318DDC736A3B32704CB62371D9A11
+ B7C3F3E8BAB8D3C39CA8F9CB3D032E6B6AA272CF660BF5F0AA2503E4B6620F9F
+ 93ACF9F38D40190B2314A78BF8960786B26177D2D5D6F1D55C2D619843ECB00B
+ FF7420DA5DEB6B2F18D41B84ED5AF30C7FF7355B8D598091D8CADBAB25AEBF77
+ 39ED64737C4D25A4F4DB7DF00999E60041A4582F4A162C55A43C7F63A8F4FF0A
+ B27A7E98F7AF974C7BE28533066AC6DBD1683C4A882DD49C2352BF9DA7B39837
+ 34D03FC9B71484BDD9DE3AFDB9B85E2063681BCFE2FEC77E6FC1DAA6F4045570
+ 7EFAA7E584C19EAE66875A8B701E81FE354B2CF79F32579B6A49C0790FBF8D0F
+ EE821B1DE1EC062F1326C83DCFB3F0626059A712516A3B14C2C8F2D72214B04B
+ 50C707477B55C03F51F6AF5E9642B772C8E687A2B1EEBF2F8083DAD90429F720
+ 962C110024384506EB61656CB3241193B5C9B005821BFAA5E46F0005A281DA7E
+ E04576606897B61C016D2B77B8481B2772F565696434F2BDFA26B082A7E6D4CC
+ EE62DF9046356D5F8A0FE74782C4CC8D7133D7FC1B5D39E4E6145EE4CCEAAB0F
+ 1063C932537AE481BF66F2559F6542DC7C735766FEF189841F37F46F0B07A960
+ 71EBD713A573D519AE94B4F93035834C223A875BF5132B5B4C9462C541A77B1C
+ EA01C4AC078AEF8E463943FA66D612037CB76A9887F6F207193524B5E1E5A85B
+ CA66AFB1A9B812FBF5CFA55D1F0F6CFAC26CFD53484E7D81D31E53BB94CAC5CC
+ 568A18ACBCDB5893A90AD0950D75C194FD2C5121276D1006B1C43040FB8D3D4F
+ 5A907D95395B53382087BAB21AF6FF83D78A804BAFEF00C57A7E2A8E5C5E5D04
+ 3CD46CBD6CB22B4A77B61B1E5C8086057F90D908579D04D04CB0960E3CCC093E
+ F6D0C01E2A2438A7726CD2519EC1DD43E9DAA33DC0299D2C7FD9A368D346B8AA
+ FF1EDA2F3DEBEEA2EDEDB8D441454A69A8338E81E125330924BFF168E877C913
+ 84A44375A6A59B96F9921F4D5AD527D36D7F377FF2D164B33D839B2EA7ABF221
+ 4DB582E66D186073D8223B5C8F6E13B3FF0A30C71D2891AA3AB775362A492E43
+ F4654344D9C1AE6216D269B4BED78119100864B0C02B15877F5CEA18B88E28E9
+ 15BC86CE328AD0BBA335C649431F253FFD98646A21035822092765A5278BA757
+ 64C9FA40D6FD942E750BAC922145EA32156D47FCFA706D066280A8484B1E91C1
+ B8E7389888A23EA3F8664C3EE61B728386C969E31E6062C9F289089E53E3B546
+ 2ABDA0B01C04F5A48F7484B14480638A826B526935F65ED5839F4BB47C11A5CF
+ 6BCF01DD84DB75EC782934AEC675B6CAA627D90DBD4A4762935448AC58E96BC2
+ 9FB9854AF81407EF479C88E72076E1EE57E3D2A6150C9E05FD3FE10CEDA15598
+ FFD5FE72FC48B29501B466EDC6EBDD439BAD9D8C1E406DCD63B0B7CBBE692BBF
+ 02B28109B1E04CF7DE63C5987FFF86F555D0A25E80D57FCB83874F592AE9F151
+ 376D99334B6A45269B0BAC8422860006B169EF2195F0E6F878D1D4CA50059513
+ 00F1A94FFFE4081BA50A92874B1013AA004F921EBFDD8972264E981574B822F7
+ 2417BEF9AEA160C56619F3266AD96FE06F39120784F5BD80C2F520A648AF8DC2
+ 1640E5178DFC7239A1B65B9D8C4660C4076D9C02A19541C9DE47AC697B8491E1
+ 911535BE527886B51E4BB0113E8FD2A64B2711F8A6818850799D457E6FE0C928
+ E18C7A1F3DF2444049711EABF6AF60FFBF92A159503B919E605E76FB3FAC89D2
+ 9D6FC985C5EA667F8ABFF293DBD11280A3E8EDE8A46F6D92D48AD171BB6EFC98
+ 1689504DB71708D919E5195C99B2F3421FA50BEB143B5F3C660B4AB869172681
+ 9D603DCE1C8A7ECA8DBB9CB4A443C417350D14E106D2FBECC04178A23AF2FD1F
+ 660A7434E43769BE89C75A544D8E3912C174BEF56F9230B2C5BDCAEAF60F10EA
+ F44635B054097A6AE1B3B12619F559F07612CFD172B460173CE4CC18EE88F562
+ 494F7BB57672EE1B51A42110F5C8581AA40757ECB39CFBE9061DA22E0FEA84AE
+ 60FC96F92C223C5B28B5814FA246C50EBE75FA47E1D2C13B0F52BA2C74326B8F
+ 2BAD42E168217F60C159324BCE12181E8FE4D5D11E6FBC201E344900B54394A0
+ 1116918B5A8428D45021F9B99009E53A5B09900085A2159E7D1CE1B34D2FCA35
+ 8A2E8EB1457AADABC6C896C696378A0FFA02DE82A6D8D842409A520DC8CD7482
+ 5565A6AC5D1AE93FBB09C1B06CEA5115D873AA21F7B7E1D9A66B320E26FEEF1D
+ D31C768656412ACBC0150935863955B71EDD8283958A53110922C88198D306DD
+ AAE7D18FF14AF73A60234BEC6F05D2D7095A57C46850C9F9B782F255D8190D83
+ 719A8DF1248597D280EB8F33B01BC110FDD8A4C913F36DB729E31E768F5AD1D2
+ 65A0A3B13A25F04CE22477E327457EF54D4068E63E0423F3967F31CD0A7F9060
+ DF6922C843C6F7A4C7356B1573B99697CE8CA1290BF5C3FBEF08E37E7E731088
+ C425857E6343E02EE79CE17D0A5473DB7BE00586989F239307C70E5AC7DF7DB5
+ D8A868DC8D2A7400996AAA245124B7B446A802D5CB88C25292713F3FD3A3E9F5
+ 4A6D7242B663619B69495025165705F34DCF1D0F77350F4B18412072958AB7E8
+ 167CC13D9F886F57E15EAC57B68C10C3F1A282325F823B36A45B152CF11103FC
+ EE0889061EA1479F83CD2CCB1C1BD628F802C76952F4D0B8AD19F937AB2BEA8E
+ C72A824EC1ADA661C60A65D3BBB20E9D31D5EDFC3D76ED55B6AC0D66A5B92212
+ D4001F8B23C0D21152795CEC56C011295278DF8200F15661AD45E4DFFD72279F
+ FB101284F18AF8D6DE41EB10434B520F09B749170836D1E5B856E258CD5AD8AC
+ 544A66C723459252F25FD8DB60844853F2714305F83F0BC9248B42EDE9EF122F
+ 63F0D0363C456CD31FFAE9F46BE96B985020B2FCC6A45FCC6783ABED9BC9305B
+ 506145E39679D73AE210AE34A5114BBA173DD2687A80109BA970F0383DFD77C0
+ 86AABC65D4ECFE53849B522CBA0C1C675657E320541BE652EEA51CEB951CAA89
+ 27C312422113F4FDC834D05F76920907ABDA7BE1BCAD76A63FF75D1D1E12F93E
+ B6312431EA4EB3F42E89CD00163320F6FFEAFFA1385E29D4792B2B64DDF65C27
+ 49FBC3D726E13C9FFE15CF2CD0730583A82BA1EE46C593BB0AB03DCE565B0ACA
+ 4313C1528DFD323EF9DE816227984BE43370B9FEADFB4FECE55CB262C8F52329
+ DD3B6F751E80E442FA22FD928D3016254414D8668F9FC2D70FD253493C8EC915
+ 175D3626700C8FF1095A904CA49A6254BA6226FDDE75CD34B09625B6F20AAA54
+ 5C3E4BF0399F4A84F875FC085E3D85F8791FB2D32C0A32F118AA3E37C5914382
+ 1F641EADF6CF001AE2089E0CF3CFFF5F313EF4C88521827211F8D1261FFE8B1C
+ 2665C0F3C7F6E3676DCF07F20FAFE88124FFC4D39E17EAE771ED72DEBB897E8F
+ 09CB50BF488A645E4CEA19E4F0C336E8903D375C170F158CA15D8E201905C5FA
+ 5797CA0679C080A78BAD847F5087BC031EA36BA8DE92D40468D2410ABA3358BD
+ 6A0916575015BAF85E840CF94B5AC8984F3886E282851773BD1A1605813D86A7
+ 8583B6CE5512DBB5F23D0BDF37A1A760CF9FCF4F57658081AD5359FA02945FD0
+ 6863B791B274F1F8123A73C3C98F68C2A466B9894EAC5DE1B611D95638B42FFE
+ 620EDEFA266EDEFA770BA2FD37D71E0FBAEC369949771CE6F780B51948811A7A
+ 7DEE58A45A899A1F7C73A8DF3D3A1708765178DF8693AD20673FA29563D85CEC
+ C375EDBD8D33F2ADD104CC6C3F54A6AC2DCD9EA399E4F88837A51D492167639D
+ 134A97E25D0C890CBAADE7100BAB50872BA03633AEA7FEAE4D2780986EBEF394
+ B867154B03EEDFC8DCC1634B487C8BBFB5CD0ED68B93029CF932551A9F9ADC19
+ 5C90EF70593AD34F9314316D253049F65C0A8181C11428AEE46373D0224E1ACA
+ 54706F7DF4CF6BF0DF193A0A80AFFD8B1575015132CB56BB755E8121C051B000
+ 521841EDF0E6AF26DB57314ACDB9B31F835A27BDCC247CD2961E1079E4C69857
+ 2BA028862344B1A351289D1648528DEA0D4599E64375DB4C2B37B832D29FA9A8
+ F949C8E72D1D1C642A49A2C7801BE0D583975639C63E8F45B3E886CA8A87F6C2
+ 83D7640BA3230ABB8B30E72DE41AF5C58D97D183914091DE2C3238D0FA1365CC
+ 607E9734320804FAD45122F9455FEAF4DD1B5B5F328E32119B39D93E521D366A
+ B523630524D5861D01BC4B8985C5DF86735FACE85E55199EBF0BB83E87317258
+ E27444278034ABFC785F9277199B7E4A9CEBACAD1E8A2B19BFDD860C5E194FD4
+ 38878D4D037C02E2DF53477E336463E1DF3DF07E133E022E7AA3E6D39C676544
+ 0196C86AFE74C1ED8C7640922EBBDCAC82333AF422C1483D9ABF8DCC3F55C9AF
+ D3BE0C9CCA7D22593FA72654AEE54E8BD0A10F02BE1104E2B778E2E3D8079D90
+ 49E25C4F0056DFD2EFC66369AADBEC2EF14D6139A3C67AC3075B023A3A4C23D1
+ ED719C49075FF2B63E54F338EAF328FD0E92022CE7ED0FE4D5471B7A1447B547
+ 329197976D534C2FD4558D5D555F1DACD23B34A304CC35C59B088ABB9974D53C
+ 9536A02E4BA6D909A8AF24021CC4BC61B891E41E96F211904A50C5123569547C
+ 5C564A4BA3D78B1F2909ECE4E5609D05BF1E6C4D2CBD11F2813BB09BDB08D43C
+ DD96DD7E88A5AA56D4826F171546C39A07A124F57ABAD8C59C15EC83567ACD8A
+ 17A4DB5EBA59842C02D5F064E6BDB891DDA0B5F7EB00C44BD3B66EA445AC0EFD
+ 2EE5204A255C7DE6370A07C0E6C61B0FDF6DC3210C214B5DDA2B28A19EC2BCF2
+ 93C9F4015965DFB688884CA76B83BF12A8AA68ACC102128A0A63858D6608817F
+ 91B397627F7ACD00989EC1F10485864C4C2E389578EB0BC64DE05E9E221D70E9
+ 9842035EAE98FE4C65B1A87173FF22A0DFEC551EF5BAEF79F75380FFA30F43FE
+ 5A1F272E4955B6DA9F93FBB01187B27472C4F5B6F118D8862A66933A24AA1044
+ 4A49EC37F711E6A784A416BB81
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMITT10
+ %!PS-AdobeFont-1.1: CMITT10 1.0
+ %%CreationDate: 1991 Aug 18 17:48:50
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMITT10) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch true def
+ end readonly def
+ /FontName /CMITT10 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 101 /e put
+ dup 112 /p put
+ dup 116 /t put
+ dup 121 /y put
+ readonly def
+ /FontBBox{11 -233 669 696}readonly def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D004D606918A40B8D7BFA821B73E118040992A4
+ E1BF99740F8FAA47E4349853C8149C0F8BE2F23C6F332BC0373C867D0715E8FA
+ FF163A60AFD0FED665D5829739975C5DE12EB30895604D211F645D4E13330DB7
+ 64B6E35463C93B752F691FDDC44595B0A0E9E57C6F649809C4DBC7DB58102A60
+ 46349E9A5740893A1BD4536B99ECE72B147B713619037400669C07291022F84F
+ 4F3302F8244D2F0F1380466E81E0B5E00AF33E021A55620A7A93F3BD49C7040A
+ 67C096167F502EF2051B526405B9391B4340A3FFEC103E317E315A88D31661E1
+ 7E4104A2B925D1DDA9586861904FF6FFCE6A8E808385E4C4014F5A494874E2FB
+ C3758D6989AB68C4CEF82F92B9439794FC404A29D086ED6B27997735BC3A24F0
+ 473FFD74BAECF5282E2EBFCB92D69B81C568D394055E2E30A7E3F448796E4EB8
+ 019AC2E075377F777183BD87FDD194E855ABFA35AFA73304DBB181C267431B16
+ 70456FD8470B525011891C1E140B8FF24A474B89F1CEAAB509F91FCAF512E16D
+ 8413BAC0C664FDCD31245C5996F4883305D3EDF1C8D1E6F0B1E79A06028BBDDF
+ 6AA5B515DF33BA8FFF2394262F3FE1DF95AD661322BFA5179E325BD1B1EECE49
+ 69F64789FF1BE8DE5CD7485571A07471BD6CAB4891BAB122BE4C4A1B7176F33E
+ A1A434F745811B71EA8AF73407F32E9F4EAAE1C1FAA979523C18A24F754C307C
+ CE056DCB71B20292D4FBCBF9AB9E9B81DADAB90E60BE926315049E5BF0F50315
+ 66D82E4963CB556F19461F43EF80302912AC1168884A1692AC59BFBC431B14AC
+ A5FC06C4AB595F9DF66CE5EB69568038445A9EDDE20CF92BA308A235A872B15E
+ 8EE6356F4041C28B24C085EF70B6626241A3AD73D4DD274D5B7A4C0BCA80F121
+ 957D0E504B12C2484E2B7DFF711F704995A9AD468B796B294473D338BB8C8B76
+ E53D7C1D6A92F0B332F505A7FCECEA75BAAE4C92ED1397FAB77F6F69A2D42568
+ 52D623D1AC829D0B2F8642868CFCED6F86EAAE43C1C63F61E3FCFF126CDE44FD
+ 6BF01F8482B9CF1D0314714E91338BB4E6EA1ACA6492AF6AE6C06843E097D24C
+ 58E56D593B06EDEEF7EE67580E12C56F4864E82E695F36EFD7994279BEA7DB23
+ 9FB1233C13B431E4F635773B95DE3CBED208F23C6438D11BFCD53ED7D5729D94
+ 041A3F335433F1133CBC08D2BF20CDF11A0260107D3BEE61DA885174B857E004
+ FCDBA83E6AFE7402A8CD877D4E27E19ED64E33BBA1778734617B1A3DDDAD0567
+ 2F2F62EE5F3A3FE42339FAB24C3FB5FF14014E48685D42B9F90778D17B37858F
+ 054571505F374FB3F555B52744079428CDA68F1545930C7DB7E1A445E377CA7E
+ 52C626F0B937A58ACB848017B2B314644F02A8AA161D89DCBB6F635918E16617
+ FFBB21C9C32CF0C0D56DB3AA7B8FF877075F4D082B0E773A7E948E62B46EEF02
+ 3C6AE396CB348E796FA4D8DED175A3C3E2B45472CE234B25AF8439C811D1E2B4
+ 598F4BBB7FE866C55BCC8B910A7EC4496CA6A5351C5C432CC4B41A49B7ABE305
+ C7103DE7D32AB13C0811AE8D2A348FD9663DB21EED4BB174992D807BB526A5A6
+ 1B07776263573616BCBBB050047F72BF772185A4DF4A191B69F69104F8A87193
+ 9239BAF696BAF74DE2913439FD159805C18569E537D1926A873969FF738FA1BD
+ A82AAA4CE46F41AFF1EE4A294530447E7AC9A581162E6A00A024EB67EE126A23
+ 3CBC806316A3496CA6BC44A824D91DDCC348709FC4EB028D92A47074CF2FB889
+ A161425C354DB2F1445A1659BB410EB100D5D96D4480AE37565EA4B52FE18347
+ C9D1519C76A4C657709E30074C512069B747D56F5DDC11528AF703B63BE3EC26
+ 81A983C0C2FC601FEA4D7784A8069E21B03FE63FAAE988C6D4E8700D215E4854
+ B292C1D1FFC5D7938601D8D9D903A0ABFDE8A3572EF5EE092FE21193D146C41F
+ B07273556ECB3871730BE4E26B68C1517B659E9827BAC29B02906CF842BA950F
+ B946665707CE509DB3B6427ABF01D9D8C5784EE61B746330
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMMI8
+ %!PS-AdobeFont-1.1: CMMI8 1.100
+ %%CreationDate: 1996 Jul 23 07:53:54
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.100) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMMI8) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMMI8 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 110 /n put
+ readonly def
+ /FontBBox{-24 -250 1110 750}readonly def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
+ 5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
+ 4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120
+ 788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62
+ C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32
+ 617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1
+ D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63
+ 532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B
+ 5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8
+ 4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6
+ DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E
+ B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2
+ A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89
+ 8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA
+ D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817
+ AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04
+ AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748
+ A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827
+ AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011
+ 85B385124C2B6534F3CD1866AF92009D93B97F763AA3CF46C60636D7FC1564CF
+ 1DDFBC12CA37D27A79B11F2AFF2D70DBEE03CF1DFA5B864A2DC22266E4FA43DC
+ 3F2CC229231F1F72874E6A74A90E8003B9AF1BFAA55C071FDDE5C94E4AE3C5BF
+ 936EDFD4164624881410AB9EF0593F823D40BA7D059992104D08E41EBAD8F276
+ A84EE2C9AEBC7CCB72AA6B6E6FE52293DC7BC34C2D1B69418392608FC5920291
+ 733654FA401E05F3E647B1C6AF4BECC3E802F9963344B05EC3DE8C774293CDB4
+ 3F057D6F258BD341848FA7FDCFD4D1923FCAB51FA8ADAE6D9F19C1FFA6EB5E9F
+ ECF844CEC6C1320D3F00C7259EF5812526F58248C61F89A42D9C9288CA8076FA
+ 77E1C950940D8D6A7D852A0D0ABEBF2EDEDCDF6DDE0C8CCAC8DA9B28207D9CF8
+ 46446E1153D8D8795EE914B12349137D4BE461BCF5A6A3CF15FA5B9E91EB9B90
+ 0483916D0CD40EDC29EB0B996B16462A64F3B19B57802D9AFE3F1D91D9A8553C
+ 531EB8B4E975037ED620EED3020388BFE705958B1E3AD4638B9CC8644C2F4024
+ 5DACD97151C3DF7A448CC3
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMSY10
+ %!PS-AdobeFont-1.1: CMSY10 1.0
+ %%CreationDate: 1991 Aug 15 07:20:57
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMSY10) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.035 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMSY10 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 15 /bullet put
+ dup 32 /arrowleft put
+ dup 102 /braceleft put
+ dup 103 /braceright put
+ readonly def
+ /FontBBox{-29 -960 1116 775}readonly def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+ 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+ A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+ E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+ 221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
+ 27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
+ 5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
+ 0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
+ DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
+ 71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
+ 4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
+ 515DB70A8D4F6146FE068DC1E5DE8BC57030ACE57A0A31C99BEDB251A0ECAD78
+ 253AB321023D15FF7F55A3CE81514C1E7E76240C1FB36CD4874DDB761CC325F5
+ D588700B294849D690F93526EF438A42B9B5B0508584EA3766D35F5B8D51C458
+ ECB9FBD23A4A81F55A82F06621BF584C1717AF88B76BEED8CB031423DADAAB95
+ DEC610063D014DBD78BB0FA0699BBB5D3799867A7CFB9F5C34155617102AAB23
+ 3E4D0062E70596FFAD7B3E6BDF575D90AF573FC0D41E161EBF02619CB8C7B31E
+ 0FCD68A6EDD049AD899CDD867F0060838EE3F8FE1D3406CE29D7B91CDD01121C
+ 1847D58D23A9754104AAA45D4E6D0DE1325FC6E215120702185CB3839D58722A
+ 8339AC5484CB21500210BD3FECA95A437F2A18DE2B8D0B70B675101F51510545
+ F294E807DECB64DC608160DF38B61E5ABF1578FB31C627C92AC31E0D86AE68C4
+ B3C133ED939E6D26FE1EE6F13336BB8B3C69E86AA8867E1261730CD3FCBC61D5
+ 65665D91616A413FCE7DE2BC9AD4C6A7CD20D866589F7896F26E8D10AC7FE78E
+ C929CFD56FEA4962DB4E96A96F6DB3ABD4C2A0818AD705F0D4558B985447BC78
+ A10A7CBE81456824395BD345B3C0BC4DDDE9C577315A7A8C5EFCCA320DE62241
+ 7FA45252B47B70B25B8F445C377DB4C71C74299CDC798D725DA32E653CC104BC
+ 31514DA89F92457C59F1724D16CB4689980B23EF9884A9DD7B4DB4682069B63B
+ A3776EBFF52662E21414B4974C7F0945B5E35D9FBBC1AFD62D811F80226632B0
+ FB47DC3E41D51F9BC88C0F264AFA751FB6635B95CD29844BEED5150CC3128177
+ E1B92C56909D907898B6A6FC126EB3A7827F2D99880E004AA33EF65FF1A55226
+ 179EE22837147838EF3DC149498B2D50DC9975B888F7364832F62CFB94CA9182
+ BB5E1590968FD16CE930824218BC80DE826E6BF8504EF6A2DB70EFFFE2E16A6A
+ 51707E389EC6C6195C16A303D63BAE66F7189E9B3F87812C5E991D0904EBAF1A
+ B816104F7BC633921B9411AC41EFD8DD78E93B353D2FD1844AB38BBA
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR8
+ %!PS-AdobeFont-1.1: CMR8 1.0
+ %%CreationDate: 1991 Aug 20 16:39:40
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR8) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR8 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 43 /plus put
+ dup 49 /one put
+ dup 50 /two put
+ readonly def
+ /FontBBox{-36 -250 1070 750}readonly def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
+ 68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
+ 3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
+ 48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
+ 9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
+ 0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
+ 8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
+ EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
+ FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
+ 9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
+ D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
+ 9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
+ ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
+ 10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
+ 83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
+ 2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA901C077A059F709F30
+ 4384CB5FA748F2054FAD9A7A43D4EA427918BD414F766531136B60C3477C6632
+ BEFE3897B58C19276A301926C2AEF2756B367319772C9B201C49B4D935A8267B
+ 041D6F1783B6AEA4DAC4F5B3507D7032AA640AAB12E343A4E9BDCF419C04A721
+ 3888B25AF4E293AACED9A6BDC78E61DA1C424C6503CC1885F762BFD4563ABA4F
+ D926227FAD2B2D4975835541F5A97E7A70F5CB40266CB9B4E609B94B31263442
+ 35FBADB202B4032E1C3165F83176413544AECC056C371F4B41C04121C4D20A7A
+ CE519F46C3999F58F5F43BF799D624FDF62A229D8B9189CF5AFAE6141FF16B53
+ BB2B3EE9FB2467181C50CD8F8F32BC6609385D9D111EE2A589687D84C6C2FB75
+ A48CDD9A85F106AB9D3F906105C56CD993793C20FC7E5202428340F3DD4F10DB
+ 561A3958B4CD377D1B833D27F6F9F233CB9D99F95309D20134DD6A47A5291D43
+ E49BF013864BA87ED38FB9755A8077105EDF397023D0C1A1B21B951AB1A4FFA2
+ 72990283B3B455447DA9E68C7CE660F8BCC18F5FD82371D89BBB363EA0FDA552
+ 3059558108DEC9D2E6BED7BDD5C0243485F642DAF3B3A719E098D25B24E2D1F7
+ 9B9DE8CAD714415F9DC0F0A7BF618BE0FBD81618CAA161548B2038163020318F
+ 18C088D44BEFB4397412661EA87CE38799B3AAEE28A008A3FF638C665DE01D88
+ 1604BA57E90D82855317F1A99B9C6FE3E6B46F5EEC32DAA013BB124E6701FDBB
+ 821E8527C2BD04E8D9770BB5037793DC4DFE6CBFB2F0850B29BE67083451B071
+ 413B07804AD37CA3AAD6D799091E5ABB2F5C55FDD77C4E421D4070EAB055C3CD
+ 4DF259F039687CD598BCCA951367BD9CACFFA93F12F96BB0211EED9DF6276E2C
+ E2469BDFE697A61CB583EBB9CABE24568FB504C42AF29F9F90739AEF6412A1FE
+ C3B3B587A034F1
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMMI12
+ %!PS-AdobeFont-1.1: CMMI12 1.100
+ %%CreationDate: 1996 Jul 27 08:57:55
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.100) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMMI12) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMMI12 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 30 /phi put
+ dup 58 /period put
+ dup 59 /comma put
+ dup 60 /less put
+ dup 97 /a put
+ dup 98 /b put
+ dup 105 /i put
+ dup 110 /n put
+ dup 120 /x put
+ dup 121 /y put
+ readonly def
+ /FontBBox{-30 -250 1026 750}readonly def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
+ 5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
+ 4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67
+ 3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993
+ EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F
+ 4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59
+ 2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A
+ 323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C
+ 2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1
+ D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA
+ 5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F
+ 0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D
+ A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77
+ 2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60
+ 00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8
+ CA0A265B570BA294792DD2FC75CE2C83DCC225B902551DBD11E687EAC6E85D2B
+ 02C28359A40AE66A6A6A8862CB17815B41E280313F0EFAA9981755611F7F683D
+ 35603984D60BB0C772054355A97A5E03C689E23B04DA79080CE4579CC90EF38B
+ 1A64CDD92B907AE83192C3C46C5FC40BB412F6656DC6349E6D29B5936DCE94CB
+ 98E3B465FFF7574095F57BB3750F1A55F20456933FCA64CC1B060E260782BEF6
+ 721D38BF65DF1F1DA5439DBC802B4A9D803BD635C05B9ACA4D26C28195A1F4C4
+ CC623B30B076D4861E89B93E2CF26F6DF07199C03BA5466FA3EFBD7F77EFE068
+ E55B7186855063934C5716EDC3F5056BDA963B6B933B546475BCFF91C512F411
+ 8D14B1C32C9735281E536F87ADBF1AD9AA04D7DE2096413AB8B3C9E8B1F6F338
+ 3B80D637D761A7A992CF58188FB0A04FD6C6886A60F27EF31C45E92F4717D8FB
+ D4A0844A8D9036D5F2BBCA2C170F3042F22DEB8D151C7135AB91DA289886604B
+ 70B9F2A25A7D576FA1D70DC935CDD3E81915E9BE11CB03C9FDCFDE3700BDDAAE
+ D61CD52A78B075FF4FB8BE949FCC4B04813776A3451FE65A47D57D7B66499E99
+ B97C5141D2E05BA86C59535C34BA975381F96A4EC47EA032C6BEEF9F2E6565A0
+ 0712528976CD8FD94E2F8F2607FEE1B55382A62B35FA16C62707F805DDD68FAF
+ F18133F16F5D312246BE70BD7BDE367A314CDE17E9E69A7D63DE373262D397EF
+ 45C542582B6F56F890EC5EE8DD9D075383DAB8FB7A9F111BABBB8C52EA764237
+ BB66DD71D1AE8253B62B760DF589FB2A1EFC7012142611205589FA4C2263FAF8
+ 31B150E964FB49C0899A9FF862A4DED7EEF9D6D3DFC472576307A8DC809B6620
+ C88AC1B10B7BFACC1EFAFD38D3EDDB3E1A341AF31E0DD72AA1D6735F23ED2BF6
+ 3A091BDA83CA7D1FC1A124D3C9624699D76D7351A4A78FC2B506F8A6798B274B
+ 84C99DD186ABE4DF6BE93E260F9FADE88399CDF4A06BC71B8C4409385E2D6043
+ 7EFB9C2EEA1DD84D36DD07B023C872DE6CBEDC4ABE75AF0516EF9344ABC2DFD6
+ 7B4DADA727B8A442D650FA720E86EB4CA627A0A59116F5FF1F95AB2FC4F299FC
+ 03D49B22BED974852B206F88EC9AA95201EC771E406A663BC935A67F4D299496
+ A224B7734AB7E7AE516413704EA012C4B0FAF944039691400EEE74C7357BD781
+ 12B6B09688A1AA4A7DCC5E78FA932E224D5EE06C7EA40186133BAEA9EC247C99
+ 53297EBE63BEB61BB1E7F99C912C44AFEBB5DE375C26ECB81DE54223C9929EF7
+ 3C2D7B1FFF5BD1ABC0FD23A0D40F7F7B292A418A8F4DFCF697084FA2DC165F36
+ 2F68FE518A6064175EDF884739DF60D1C2D1287C50D510C0A182E42DBCA47F9C
+ 4A5202DFA349F802FECA28916D34C2440C46CC9CD6F92150DAFD5B90327012A9
+ 8BE35631A6CA673C349CE8AFE1E5840DE663EB244E7399787825B07040970B48
+ D52E597C959639CC6EA0BC2579D8C44FFC5E9AF212C80BB0897D475FDBB70E13
+ 3E587ED6A4CA371D307D10CAA0E1195BCD2A0BF0B453C70EF581CA58E104E32B
+ 7FAFA0797385433EAB43126ABE49D1315794A6A7C5EE2D8F051C68FC093D49D7
+ E5356F991B754CA5432BB12729E3E98734CF7F1BC7A0ECFDBB8BB5DDF4C43AA7
+ 245304F1441A503C18BCBC6BBC9DACDFF3043D975C950F92E4733E60909EE94D
+ 60FD56205E48F874E4DB08E4E49E8DE95382D618B180F05C9C114E1C0C79E1F7
+ D8C8E2A172481FBEE6DC709D578348C16665B409AC0ED16F7678A54F049ECB0A
+ CF1399D18507F750541D9734231A55EF10C8653671D1B4BA6481A5546A75D80F
+ C7B04D02787AE1F44D30FF551D280383680B0F5A5DF3EC84C7BDF769A604BC5E
+ 171FDDE45D8FC1F26FC89F73347334D8A5F044E8EB4B43D52972DF4787E390C1
+ D350C68E5DF98D5B3E2DB44DD90C706446EA2FEEFB9A46C2FFDFC14D24C8D2C5
+ 08D1789204C1F38EA04EF84B2412FC45E9A0AA71AA98AF3A0FC8F2C5F7339859
+ 6AAFF3A6522AAFB2576E75D4FD27192C650E64CBEFE7A537087A23D4C3DCA02C
+ DE4797C66BA3AF8FC8BD8C1C91047583B99DD5F9C6CBF6FDA591F8F2D558BFC3
+ 9EFA3EB42B99EEBADA30FA41C4CFE28E76137A3CC89E3E42362292D6639FD205
+ 36EE07BE6C21268A5EF01102F4DEBE916D70FA72586AC15762B36C4E2D326141
+ 29CDB773F7B5E675C7E6BF9B82D888A1C23BA275FA89A62A6ED355572227DE22
+ E5283F2CCF3D2E5C16A6F9E99D39146AC157B6C091519C2035FA7BC1093E4854
+ 928B51B394DBDF0AE4CD040D4982F6CBC8AA1AA7D9D3546F032DA5F1D50FBA0D
+ E4DB4C1FA6F29562CA9B1FC3FEC423565D9D9C7A7CCA6A76469426EC95EBACA4
+ EA15216B498DCC42B0FE42DD0DD305FF7FB6DDF28BF5F861A4C5D0D98424D005
+ 005A3BE48004035861768617610FE7E92DF08F0AF3EF98B0FE0FB9CF0BE00414
+ 66972F7E5F5E88518727D49EE9F5AFF6E467B739D29B892EE9F3BF8BF9561E54
+ C8A11259CF3CCA94074587B10E57B67D5B9377FB9B0FE98001D074794D5B19CE
+ 95CD7BED7AF53357205A1AA463F94C15F784C266EC8B046A5378DDDFA189CCF3
+ 1FFD7379078554AC01A6080636F3856283A898B0BD707396681492AB6546EEBC
+ 4751A4256929DFA1BC8D8A895359CF814CE5DB1C157EC1A20842B358D0D3EC7D
+ B2DE43A7D47822E981AD5192FF3A53E183B91F11A47C061B8C14628577383A35
+ D252E5176897A04F12FBE0EE1B0276F9D848398E0B8F610C0BDFBFC84A3B4495
+ 6B7F59449DA10B4D6168C7FE60EE5DE638955BEF47E235D42E4F4E71908A7005
+ 55309999A7639B8F8A1AEFEDBEB35D017316DCEA6ED307332773180656EF8EA9
+ EFC183DDCF1E95481B4672761BDF58E08B8352ED34519B38CCA0DDBBD494B551
+ 752FFF4CEA4D15AD4871B067A03491AC73DA4C07407989BB59341FB6AD8C5A7A
+ BEA3B2CA7451CB669FCF9CBC249323708C670F038CA4D08858EDD752DF3E34F2
+ 92E98938670453403DBA8C731D1364B0C114A28252F33EDA13FE51BFE229910C
+ 69FEB3535D057A460F79B2D51D2E8011296C07DD65D5D42ADA0384D01E9D7874
+ 202C39394D9DD62B33F32FC467A0F2B320104E3E5CBA31844E49E63FA77532B0
+ B631AC4B345BD126C630924CACBE724077EC43CE2586D7D0A675F1D1665B77D2
+ F5092B1D4C203172DC7DF0C9B28AD3C2109089AE026691710A4B41EAECBB0CFE
+ 1E458F3B067FA83ACF3AE4C6A360FB77F7524381CC7FF6B893E80A89E376EF49
+ 119C41EFBD35373D73EE275C17202E948AFB67EABA10D3507B5B76B03E57C78B
+ BA9500D83379D1E20A5C9AC698DBC2AABACB93FB093AAB27BFDF35ABF576940D
+ BEE36DD2F1F51B367EAC4089BD05909D8713DFD792CF81DBEDAEF75A5CBC3676
+ D237B40D1190B5E148849F01ABBA4E6CB3FEB48D030574AFBE7722FEB201DEEB
+ 8A6DC51B68A3D7EB9EA4694C8472DEF5B1859F68AA54ADB8F89BFA1B974BF969
+ 25C93D95698DA1168B7EA8B81CB61C3176ABF37E62107392D451252153575E3F
+ 98C6348C06F7208A49F64934FEBD8F1722D15D71B18FB62C98A7C16D4D870B27
+ 6A627E2D3CE60F4F1A6893993770085CE8C20019D4A397B3BE51905D4E672F61
+ 279F81661F4B16C01D9A6A2A71113C43A70FE4205203B626D075655B1D92615C
+ AB892B2C0626F477FC72B5901917867E1A3F79553388D9140A042E9ABBC48F9A
+ B8FD865FF575DD59A22165446736CE543016D3D606DC098D61E4DBC1F826E5FB
+ 0E265E351478EF08728273404D2B8E11A1F8882A44A81FE054A848CC6126017A
+ F3B0
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMTT12
+ %!PS-AdobeFont-1.1: CMTT12 1.0
+ %%CreationDate: 1991 Aug 20 16:45:46
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMTT12) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch true def
+ end readonly def
+ /FontName /CMTT12 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 33 /exclam put
+ dup 34 /quotedbl put
+ dup 35 /numbersign put
+ dup 37 /percent put
+ dup 38 /ampersand put
+ dup 39 /quoteright put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 42 /asterisk put
+ dup 43 /plus put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 47 /slash put
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 53 /five put
+ dup 54 /six put
+ dup 56 /eight put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 60 /less put
+ dup 61 /equal put
+ dup 62 /greater put
+ dup 70 /F put
+ dup 83 /S put
+ dup 88 /X put
+ dup 91 /bracketleft put
+ dup 92 /backslash put
+ dup 93 /bracketright put
+ dup 95 /underscore put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 113 /q put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 119 /w put
+ dup 120 /x put
+ dup 121 /y put
+ dup 123 /braceleft put
+ dup 124 /bar put
+ dup 125 /braceright put
+ readonly def
+ /FontBBox{-1 -234 524 695}readonly def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F0364CD5660FE13FF01BC20148F9C480BCD0E
+ C81D5BFC66F04993DD73F0BE0AB13F53B1BA79FE5F618A4F672B16C06BE3251E
+ 3BCB599BFA0E6041FBD558475370D693A959259A2699BA6E97CF40435B8E8A4B
+ 426343E145DF14E59028D4E0941AB537E34024E6CDE0EA9AF8038A3260A0358D
+ D5B1DB53582F0DAB7ADE29CF8DBA0992D5A94672DFF91573F38D9BFD1A57E161
+ E52DA1B41433C82261E47F79997DF603935D2A187A95F7A25D148FB3C2B6AA32
+ 6B982C32C6B25867871ED7B38E150031A3DE568C8D3731A779EAAF09AC5CE6C5
+ A129C4147E56882B8068DF37C97C761694F1316AF93E33FF7E0B2F1F252735CE
+ 0D9F7BCE136B06EE967ABE0C8DF24DCBBF99874702ED252B677F407CB39678CC
+ 85DDFC2F45C552BA967E4158165ED16FECC4E32AC4D3B3EB8046DCDD37C92FDF
+ F1F3710BB8EF5CA358ABACA33C7E5ACAD6BF5DC58BDFC3CF09BA2A38291D45A4
+ C15FF1916FE2EC47FDC80911EB9C61F5D355BEDFC9DB17588547763AC5F0B1CC
+ 12D2FFB32E0803D37E3281DA9CE36C5433655526ACFB3A301C56FAB09DF07B5D
+ 048B47687348DEB96F3F9C53CE56DDD312B93D3918CD92AF53FB9461864D11B8
+ 0138918D0B1270C54873C4012CDE6F886DB11BCEA04B023EBB43E0D0A06BE725
+ 741D08B9DB688731A6C9886C15A83C28DADCC81385EA239E045E8F3670CE03DB
+ 9EE77ED067036595C9F3B1854343BE3A12E486B6E5A2F8AC44FA5378D28DCCEE
+ 306B0E283AA444423F9A4FF38E2B56DCF67A39CEB2C643DAE86865517D5D0371
+ CB8797208ADEC637330A3A57902C9A88EDB75A7C16FA9850075D9F19578EC666
+ 1353CC1FC512D59DFF847ACCD483BCCE2DAD5F5A411208FB90EFF327E22C30B5
+ 58F9D34483864B061F425FC7837F26253B0A74AF24851B7A997FCB58C7FE029E
+ 2D6EE0CFF083B9D45DBC297188FEFD438BFF56CE6F01365BA970623AA85341CA
+ 43322A57E6CE91B3BBCFD2F24D9A0DEF275E19C8AA735CBD4A5CB2DDFC091B2B
+ D6C16961F6B6B993AE9B578CC97DE56A323AEC779AEA26B78D7F25920A3773BE
+ 20D249BB8F853EFE95030A2B4275B1AD9A8C562D53CF73AABB149B8892157C64
+ EB1CB07A4DF6D50B39A5A6793AB367B7EE2613B14F59DF18F6977D7E79A45DB1
+ D8F282781CB96F87C034DA6D52F69D352A1C5ECC547DEE096BAD6F2B3FBA11F3
+ 0B770BF39C38CC2E5C0E61EB0FE0AAE17246580F5F026E5AB84C9EB4E92036DF
+ BB4102C968D748A846169C4130F00C294236C6ABA13D115BBD0349D5E6900BD1
+ C74B078ADB1FD9B4F2E8ABA04BD2FDEAB68AE36687B974B5D915EB25937FCCFC
+ 43C29EE6A7FADCEBC96C380A2ECF828D2BE47BD6660A7CCFED5BCE7983A2834D
+ 3D831520519904A6225FFDFCCD3E83AEB70D34AF33696C020BE63435317C1E4F
+ 4FE8458DE8231F0BD97F16DEF04B1473626C1FC7D23EEC85ACAA4DEE0D45113D
+ 634E6E83700B45F5A54482D90B857FAEE51BBF207ACA9268A97C430568DD37E2
+ 7AA98F9EDC71CB8F1E6AAA51D24F532E0867071564E935FE57934130CD6BDD59
+ D93B22FD7A78B5F313B52C98BE6C02BE4A8C1B5F410F0C77E69023B0BBF509CA
+ AC41D417ED564AF9E0598CB52E0DA5E0307884C12FC01DAC3C37A8888AFB85C3
+ 82743DD123DDA7AE74199ED4CBF9DBB62CAFADE135DAD58383758A2FD103DDDE
+ A14FC73AF7CFF537CD8C2B47711CD0D1721802046E1BD57CD59C0DB10EFC08AD
+ 5334EA27A75702C8FDEA5A495D716B1198F3F53836E3A8D5185F42C392826272
+ 1E04E91ED50AA3F81E7D15E47C854DD91927CB1186E1AD74B7BC7839590CB68F
+ 9DDBC299ADCCBDE2AE156FDF26D57AC44DC229FF1ADDB386C4A6D8EF531CAB72
+ CA8402BD9839980A4D42A9E478B9AE57ACF542697F2E5203B9D04110CC3D1B17
+ 1E5F0841BF57D4233B62EC7AFDC82C3E7A29BE87786B9B2D5EF2DF83BE27D437
+ 13D8F29E2924A68582BBF9138EC23EE532E538661B8438B91ECEDC54D6619467
+ D2360571AF66A4B9D9BBBDFBE3526713C1E40D1B9A372483D7998C856ED18DE6
+ 10826EB5B841D48E04099D4148B97CD648ED0682D30B379A05B176C747798DD6
+ 28124460D17EB94CA7C34782DD1DEFEE7E7BA42492D3C668F13F23F08D9C090B
+ 68D3E03CF3A93DA5369379F28939B20D79E6B0D769FD7FEEE152DB695A1F28D9
+ 03AABAE3659AC73171847E2F83007D81C497CEEF2C9BF24D48CB0854FED6FBD8
+ 0DF4B3689776B16A85E33C2D0E27702B9D72A2744D0F5170B51EAACB0FE627F2
+ 1EF5D945AC6FA8722419D1C759D6DA435E356D879254ACF4201B9EB39670B44B
+ 752CA9FB041CF906E030A8B5E69E17706937003FBA14CA3D8DAF52465E3AACF1
+ D4F36AE7B276E9DAA4AA94F5EF3A779C9B2741379AAD0F43800C3DA5D0BB503F
+ 34F8CCD7FE5E8D80E02022B9419AC915BF69FEEDA3BE0DCA6A9E6F99851E643B
+ 9B4DCCDAEAB90A7EBCA89FD40356F07E710B58C534282DB337F2985546BCD286
+ AE21BFAF894566482D99F544BDD3DCF0F344F3BD1C8F7FAD6300AC7702DB32BF
+ 1B9903C7532C8BD79F6812BA6D50F1BA9A4CCF21006EF848E417D250DAD72FA7
+ 618622D7CFB0F2C3C607FDF538FB29057965E6C246786FDA42B8B0B4A3739A26
+ 112313A034EDA5355F210ADE6CBCB282DCBCEAF2EA902442896B2A8EB440BD44
+ 0AE05FD820ECB3B418CDA353909A8D16D65FF3BF3C0C683D9B4D741837B7262B
+ 078303D329DBE4BD6282D3BFE573C619E2907062FB7F0A1A96C11D502A3FB68C
+ 3D7A8947CF03C708640FEE7E6DE028C3B0349348910DC6C4339F01494B99F5D9
+ 5AB5B2A6D8DE926D32129D3BEF991AC10907CA228C8A5DDB4F4C9E02E388A665
+ 708336326D905ACE5FCEDD5219EA0C552EFCCE3F1675E679DD8E507EEA278D37
+ 4AE6DD004F7A5F9E6AC53AD04170B14435F1FD5DE6B9D44FC53E73D78A7D727F
+ B9DFA5D36C3A59980DAE290DA3462FA191565102B32FBA9CC15370A3CAA159CA
+ 4B6673376290880B44935B523E648E0E13EF9652E736DE8E296D598E6D2BA590
+ B7489444A31621C4FD30F063F0239C4B412B06D87CC1B6AC783CCF1C6EE177C5
+ 034AF9307576247A9DE3F2E34DE9D494AA4A7676D0E6D45A1C8962DABB04288B
+ 6F9DB917FA305848FE81D04EA17A3CC9FEAF499EAAB38FC6933D7D9DFB2B668E
+ A7721BD0D85E6C23761A2A133C571919293A7EABA1CC0B00D71467DFBA741FFE
+ C7556B58391F8A1388D50314E634A13388BD75062104D5551C20545E41B0DAC2
+ 855F7A7BFF4F31D09F560EF0CC1B4BFE0F50EFA82BBB87D00D06413DC60E7E01
+ 7B91F09187E8A8A2930E25D9CD866C04BCA80A2E02E5F785FB5B979B751F4CB3
+ E5EBD182ED6767336233E32971F3F91EA893ED0D2B7A9CC34C2A7FA17933DE28
+ EA1AB135BF215012C189CC53F2844161E5D5B5E8839237A645604800F645F5BD
+ D621D0A90286D73AE85E486FA67FA6C62AD412BC2381B709335EFD2DC1D3CC1A
+ 66102591683FE8E512C55C42CAD7CDAD35B61391FE787796A7A068E5ED5298D5
+ 81A5ED5B28AD0C85FD0FA75B5FB0D6849E8E1B60043F3FE6DB8B6CB152397E58
+ 605CD8D7D2CF5B9BEFCC2EBD1EAC808355994E61BC3D3D4A4D2537CC449730B4
+ FF5EC3D8566A77BFFE6B1C638D77ADE861EA726C3F0A01899CD8160AE7C9B712
+ 3EC9BB9FF97B131523A8A9FF99011292E2AD1FEE407D5D5BAF518BC6EDEAFCDE
+ 2D01F8486BCAD41D38321640F46593D1D60A2AE0543A7BF8A6C60EF1E800D9B5
+ F85DECC999360B2BA2EB51FB0E9E20114180BB6C6378F2F941EF5E7F3AEC7C93
+ F30E2B907019FD1FA81FF60C65A79CE036274E510233FA2CE3BF5F6DA936B779
+ 8B3FD05135266983B07D9BA27A15CE4B30750604FD1FAB9FCC4FB10FFF2F2093
+ CA7734D13C8D16D3551987EB3FD64C306B24FA5F661ED2896425132EFCA62CD9
+ A6A6A84B8EC86B8349A3EE8B8EAC3455337E6D50CB2B8FBE5749D474747DAEB4
+ AC335923F1B02FB750454FE7AFD0868CEE23934146E38882F4DD59D8221614B4
+ B7A90D24E362D086162F31E12D941622394398AFFF122E37D2421CF65932A5FA
+ 1BD94AA669BB7FD60FDC2E5D58755BE3FE4A95090BA4C3A41503CEFB24C725B7
+ C65A86C51C99C43A4974EA5011901B09CF228A8DE63F47D314D906D14F6220FE
+ 4299D72926AE26C7CDE22021405129C767EEE3FCC1B0D112C4B7D9BF377D058C
+ 75173E8A83390707383D89ECD49B2494742E63C2B2F969237103018A42B5CEEE
+ EAC96EF6B918498AF057D95C73D5CEB7653097FE87352C5BF8CC39DF9CEF53F0
+ DC64C1408BE9692F702333794F428AE6A711DB8F3A6366EE387A53BF2EF48510
+ C02FE69B979A7D6ED148F88B9972CDA8C3D3BDD86B0AC125107B6F67EAB63726
+ CC59B6F75508B8F6EA073FDF5B71B5D4A0B2F7F3E4E89E74254170E7FA3AD21A
+ 0EAEA2879B1A28AAD5373186C47597FD01F43DFD339241961EA8D5C82EA196F8
+ 086F3B446D27C96490F390F430CF5907660C7EDD7B5AF4A3456CB9F9B0ADD010
+ E3BF53FFD97425CF881C1415FB02ED8EC3774AA40C8687CDD976AB3F3B412C76
+ 88DF07D18CA19B56DFFFC9C41E1C51BC93BBA012819268F066865C8E52453478
+ CDE92C62768B53A006F2AA82DE089D67F052CC2BA15231AD50A51171C7870974
+ 8A4E4910EC70E3F1F244DCEBA0449587FE9F945FA055C6D5FB2AE5E5244C7BDC
+ 0843B7B3AD2C55E98C9B0721FB7597CAAE335232D119EDDDD42DC64A8AE473AA
+ 325781498A59C6E445856C7EDBEEA2BB62AC019A5746F9C3D34CFE4D350E5EC3
+ 1C43664D9BBED9D76A6A57DAE4AD963D5554C0B924A0416EA1AB368DA5FDFDAD
+ 64DC00846BF45E55E77955B166A7D2D173AB2837538E3F37F1E689D1CF831B39
+ 1486044B673652F8712257C312D244CFFB5AA1115BD3B4E4AE092B9F8F7042EE
+ 112E13B614A3A28C2C6A7F51326BCC06059E3D8A8896A3CD0713B53E039B356F
+ FB38212C86FEB1B145D80CA9DB1B6CD516DA2164FC7D8332BD63117074689AF2
+ B912A5748FB7E4D73B21BAC1BE0DB4E1BEA67223869F9AE2DC259C853CA5426E
+ BAC081E4DB6E8ABCB84E8973CA114F521EB3C1D5780C6447768C8D5B792B9E3E
+ 7DBB93DC140DDB6F83EF347ADC89EA0EB5A0D57E175A71C5556E597E89805056
+ D30DF726D38ACDB2BC6E06AF31E6F0A2A5C05A8933E5BA8FF7FC2C0FBF68986B
+ A5754C2E77EC87A59F080DA547BD0DD8AB5C5CE6330F731DDF5AC87F9E333153
+ 652D4E7D2209006FC68ED820CCF516BEB9330B836F46886566A6FAFE13D303DE
+ 4A259B6CEE9748827F2ECC9F919E003BF196050DBB6CE2B94CB4D90A7C72EDC3
+ DA4E0632DCF2556325E6E3DF806407898952D197D6B5A347877A644F72A9BDCF
+ CB21414D294DA922D6954E1154D9D35930D59384F20935A1BF68BE9AB9F81EBC
+ 4BB8202BE5A9B1033906D04C5CD719F266E19D890B126370A96B991399C1C83A
+ 56019D9263405E1AD580CD69C2D690C7623BAEFF52B58F12C792AC8D984F2164
+ 810E7578B8EE8F106D62B67849002E572E57CE4A833BC8071C1882B9B16E8AD8
+ 4A2E01425C2BEDF771EC873802021FECD0A2B060B9351EE0A90ADE1F604AABFF
+ 5081950588F9F4CE2F5B3A0BA0271089780746C322CFC3A200A0A592EB69693B
+ 294DFAFF804AF657D31566FAAD42B3664830B33A8EB6875A39AA3C7E2BA1B584
+ AA57CFBC689F3E2F6FDC8CE0639F6D62E154D71FFF42F31A6DB757EC1AA8CF5E
+ E9595F3AEBF2E70568F1B7302EBD7184EF1E2E22A892925E83EDA721A2A69A3A
+ DC94D83558F2B608EB708825116B8994B001F9A2F64B30EFEA518D90A99E1D5F
+ 2416206F3699544F49D54A2A7E5FC952199DFBBDC3ED3847609C7CBEEE6EF7B9
+ DC905D343EBB37433B6DDB2206382F58FD1C191258000337B47ECB49669584D9
+ 485FC8DD09630244D9EEA94F144EB04820AFA27204003F09602CAED53979FAC3
+ C8BFC4436A4E25171D8C98D0DF628CA790E60C40EEB9F4BC7AA99D3536A90D1B
+ B9BC619F915068ABB0D16F746BFD81333854CFDD27D45B5C3C46E5EF9B3BB429
+ A82EACEAFE064E1B9619BC9FD3FE4C5835A6CA1E9CABD53AB70840309708FEE1
+ 7E67F90F723F89349E5CB2E8C5D1A554628FC093067031221B00F5B929CAFF1C
+ CF7B0D9462139575F4FC9BBD8730F9ED46BA3E7ED90BEF448A4CA3CACF826114
+ C477633354EC4E4468769E1529AC6326F0C038E761841CACE5C605119B09396E
+ DE09C0D4C6BED20EFC037E504C91F34B2894F0683ACFA419636435F52BAA0D82
+ A899348E2C48A9FD9A4BE604FCF50996240A620EF13C63784892B3037FF75EDA
+ C8CC1505D0E212EE41D869824F10DACD8A4F51B3F381D599829229F5CFD89A9F
+ C384313F404EF577B2CAC2976C1DAB640250928EFA5069481F04DFEF946CE74B
+ 71291633849F73A517C74BC99A2A917C0E6C984B8266E2721346EFF5C0CCE804
+ B4E9104725CBF6D8E3301694233FDA06BBC7D8952CC333EB845F70452CAA9D63
+ F5907A05DB61AFFD9FEE9F3762896311A86047A03FA3A488F966B841B4E8B715
+ A899DE001B5C31B5180903EA5623B85FA4392D2EC56E16902066CB771D66153B
+ 47C8215AE56E2615C0C432AC6B6C2F761EE8572D7FC53E5C0145EADDDF3F78D2
+ A5616992C67CFF190B0BDE1F697487C3934951B22F8DF2B45045BB1331C917AC
+ 4B1A76816B86EAF180A10A046F8A97AA966388B8766914F2C2392613DDE8E262
+ 7DE8BA612038390FB64E65F3DB2657E3F68FFF1C37BB28F581EB7A574D9538EA
+ 2342C3FF3433F03A0507859C58EB089970B5539180D291E9F978DB158EE4ADA4
+ 1B3EF68C8B881321D4112AA048FA2B162D7911D7B28DD6C50FEF80D5AB740DF7
+ EE757A73AC98615E517085DE0F69E4A40BFEA1A7B5A8C28D72FDEDCEACD21591
+ 0B8419ED6F7BCB9FD6EB5C00CB351E4B437708988A3288A370750D90A86B3113
+ A8A09E4F74CEDF48F956C094CE5E860F1DFCB05B9C8B74B9BC4DA4E4189C5C00
+ F24F20FCA0EBBBB37B0912F72E581A66685C9EBB7DD2C5E2C09E42B4D8F30E72
+ FCAF31C64F0D189506F8EF093DDF6AEF64DBE187ED72296913E7D3AA9DF90429
+ A35D5DD2BA16B012302382E8B660C300CFFB9D8576C56677DC8F9075861C7FD6
+ 654D6D77F37ABC1E2536AA7AE6E8898DD5FE9171913C9D0F1752CE059CD588DE
+ 69AC912C213D470D047D8929FFE8F25B2ABD7FAD061C322E6B8D1A6E5EA86CC8
+ D72122E7D7377AB248E31054D5E5BA5F74452628522EA7587E447915A2370910
+ A5AFB919734AB0244C47822ADDBDF68CDB4C8DF044110AE7C3911D23E7A2F601
+ 85CBA1C6DED6D8FC0269F7ACAA4F52F1E6DF469FAC6AD69F51A52D8E1CB058D0
+ 539C1CE0E5D9A3547A962680022A2A748612ECD7A269D29847C04DFA2AC0045E
+ 342A0442621C1E7E7CA0D8D0816FA87AEB353088958FFCB3975EAAFD0BAB592B
+ 15D6730A03C2F3D20F0FC535D47904621EF708D619051C27B968DB287E601A0B
+ 0AE1AB4E8C8121727AE9A82610C4F5C361DACE4E4244B03524D08C9C09D6BE4D
+ 0EDA5C606027BEA677BAA3C50F26509330BAA946610447351C6A3F24FC854006
+ 77455645D5B70333CB44D79D326D47AB24F2DEEBDF4DCDF8BB46054C045E8D72
+ B65911BEC3390544611E7B769FC32276484EBE6705753E0CDF7593AC96064B80
+ 40C09B0549DF57DA5C5BB29E4DD3ADA5A6D6C1B86CC5F522A9E19581504E515D
+ B13B84FC82F469585D69B0D0D95C28DC50B992C441C5D014FED62DB7E4004153
+ 8BCD90C83980410409C290DB88DFC3B79C0899748AC33E7349E2B0E8C0FA84B6
+ 79B3F53E5EF82C3D0B74400E4FD5C07DDF4CC70145FAA532BA2339B4803BF586
+ 86590FD91146989B9B2D4C5C1D5EA44EE04699FA55DFFC6A915A4B4045787A3F
+ 4D8A7536DC6DF5C55BA461FD7C3FFD071E61FC8B051ADC83725109F29468EFE6
+ E5F17EDF557D923938A81E6D4265B3FAD7738A378F34DF361F2319D6D15488C3
+ 86B30376DAC6206B86276AD88DAAF8B5C1D4332866FF2C3A6C69A871427A4B3D
+ 2E0154C1340C1B7ED0D16D2E36D3495BA4C0542D9130971BAA988E9A54939131
+ 009D6FA0BAC308804DC61507219D19857ABEE64407E0F2842DC94DA6897F5465
+ 655A208F8F9F851B441AA107163A9F281BAE1D17566512B7F68F407E329DB887
+ 1A67CE0FA1B5180708C4D093619EB5C28CEE09EA025B018D97FABD4E433E524E
+ AD6684FF86637D756FC188541E74E7FCD3ACAB68A63010999B16477880FC8292
+ 29FA9E5917708FF4CEFD36FB874F2DD9C11A9EE392F8B811785C5A5D80903E48
+ C591B5A9B4646B0B7D1FAA8FD38E3AE0D0F9A3477BAAFC02C8C46EEA1282811E
+ 4D4BA037B0CE28D2CEC3E726603AE9FE0F4639271EEEA9151E29BA6D4A9EA0C0
+ AAB44FD653C78B32B371AFBF35928C4E24D4843791573705DDE2E72E369B5A9F
+ C13D3782AF038471340521500514DD1CE917654FA216587879F8D6B39A9A842B
+ E2391CE9F60E384BBA6F6C2B81972BCB087250CF77C0BEFED70AB21B507C7851
+ F9D293586F8682E1535CC4221637B81CAA4C411FF33EFF17F0EC1965047B9384
+ A992791ABA3C39184159DA1E01813F96DCD6142C8CC2ED4A38812D6C99D89A6E
+ FE8F29F3575ECBD0A6A9BFCF9A73EECA210F6F67BF6E268DBB5F7C7DB1ADC731
+ 3460BB937106114D16E07AE4DD6DD70ED65D04FB2C32DA3E14B4FE309A59DBA5
+ 712DF7174603E88DDC35F72CE9AA8D64A0C2DED67424A810F599E6E3C6D7A3B6
+ 7A6BDB0617103214A6735783C3A12DD2A295B5F23F9990CC28A16BCB7D661BEF
+ 360FA1F53FEB2A0F6381865455E320B2942A1B5701F420AD1FC95CC8521922A4
+ 5679C3F78A120F4DBE90CC18E062A7C34CA272D85C23EFEEE3817FB4D995D4A1
+ 3788640F4C5FA971AF5E99AF3AC7B7A6B83E525F27D4FC5DD494C1367FF27AF3
+ 1365894D78F9424BA04847EC64CF7BB6604B6EE8392DE79E475E53DE1DB1BAB1
+ 0F959679E6EE3B28917DBA62CE563511D4D57B0EEAF3BFE31BB79AF726963F45
+ 4F438501D6F7EA2840C7C34B2FD72339622F9AFBEB1991007E72A281D64D108D
+ 49ACB642C6AF85F078F9EDCE4F2734F09FDDE1DC72DBB11C7A16EDF7D965EC69
+ C920611ECD1353AE6C972D5ECF2F4B22FD6D7F889C2F65C2218880D9D4D02C26
+ 2F28E22F4B1321D6F43E43539B597194766D1ACAA2817367EAD3B93164D65E0B
+ B0424DB395AEBE58CED32D075E5C0698A69C1F1524FFC4C7AA96828953665E50
+ 9436AF7369216AADB5C1EBD17AF7C3B866C0155E2ED93925CE2E5676EAF72259
+ 10645DFFA5AE6C8CE62EE5C68AFABF5AA8DAF2B5D81193718DD58C215E171831
+ B3BDADACDE9A6E3910DB58E52F2063E80317906EDB49D2BB52B790511AF89381
+ E729165B2A79452D832C166FB88F638557F36DA1D408DB3806E93843F452C2B2
+ 64281A352C1F73B1C8B0240117010DEB0B68281FB292BBA3DB688D97F5D839AC
+ DA21EEA9BA22747E96CDE6976C1E780E0DB1601752C35A09020BF3D6F94A4C70
+ 9CBEDCE49B4C165682F8A261902FF98BBE5D7DA4C8A0A24481551B9B12165113
+ 048B5E3915403FF736D37AD5E2590136F1C47C2E0A88A355016EA3590A0B193D
+ 2DE01CA58B21B1099E293080BB2F29204B1D13394A6C698A2E2CCB555D2EE25A
+ 0142BDE2B2F0CE8B38181506FE1921DFD5D6161B46E86C694A7C2F54C8C6BB68
+ F230DB3E81F4BAA2CFF88EC1D69999588BD2D8515CD56C7866885C0AFBFFAF65
+ 84E898B2D715B83C7F0DB41F2C978AE030A875FBF76E1C5F07B0B0838582C232
+ 3F4A7E4E5CFCCE28CC35F56375E557E78B3B7EF0F2249EE516AFB5CDDD33F8DC
+ 2CA8BD3FDCD7303CAF63D92E863BF643B68CB1740CD143560C223D442AA7CD64
+ 783312A7C5187BC4666DB0F7F7A530CA46D1487AEEFF3B8A2A9E4A2532A10D3C
+ 3FB1F334B402E524C0F9A34D4DAC5A6C4CA96116E7D1329E478AF42182817243
+ 7FC05BDA8D6DA678DFFF60D60236A28F73FAE9FC43E0EFF071B3B1218C045D58
+ 95C4E9ECB114FAB861E8D1CBD0ADC40A087BF51F6A21770B1F4D4D05E17A6913
+ 17FF5292F404D742FD862A454DBB312C8A1BEA54CCAC0A8E766D4B41071EEF5E
+ 6A1F174B8154BADF3131DDB7AF48EDA733DC6E876F2F9235D8051B0CA0487D71
+ 6F4CB0E632DE097CB155DA7545E344E025408570AC2E2882F93270BDF6940B2D
+ 7B5EAE0CAD84531C89B2DA6229B7ECABD58DAC204F80A8976FD754740495A9EE
+ 6DE3B63C307C52C12A38AD532818F588D1B6208658EF821BD28C7AA2B585D8E9
+ 1864C796EC37CD1A229BF9AEE748033A1F8E0CF9B835BCF1C0BF56B4148EDCD3
+ 9D46424A7AA5DE89BAA1B264DFE405AC584F22588BF3908B182181A7048B6F5E
+ 43A50D838834E29F76CCD01782E724F4A994C92F5D2E7F4E50C524F0DA6E0643
+ E12D3F6654BD7C5A5ABA03DF7AF85F2D92E0F96B91F83E0778799974389D9028
+ BF45CA3C2AFD14151BC1435B3FBD687CB1E3D743D5572AB6F2CCFC50E074239A
+ 1ECB4845438BA768FA9611EF44F66CA272BDEA1FB2B1E99D28ED350FFD6655BD
+ 1B462D1B9B20119BA5EE55510506E41002ABE340572CB9B0B71B0D711DF915B8
+ E90E432B0051C2D60FAA4BCE6F2890E026AE990F7EC2083C547EB97B8607087A
+ CD6480308FF70FDA73D3F57376BA671CF6937AD2EFF0FFDA7EF07E4D8E659E76
+ DD3FF4B9BD00038EDCC9FD78EA5050ECC23FC2EA2A16BE1A95033B3E8FF454B8
+ C2961509E98D9D282294F570BEFFCFD3DC49A7C70C0ED8255D4B427FB0B19E7E
+ C85FF722DEE40D2C2F1081BD42E1B8BC22EBA355E83536343980D5164E44FDA7
+ 13C72CB396EA0D55B7CF34BCF36AC84467F4966A74E05E610D14E6A9A4B7C0C7
+ B0866D5240375E6121BDEFBEE38CF520E384010B08E5FB2B5BA7275D332C5B66
+ 663AE2D0987A5207276C0C4D9CF8F4DCE38F3E4933099028CA1D5219D9D68CD3
+ B5968148668428BB521680F976CD6A6E8E85B168E349DFABBA7FBEF678AAC9E1
+ 353DFD961C8503E5C42651A4012A5F544A30BE9DAF930CBBB6CE5D167AB4E31D
+ C83AEF616B75F15BD04D1F2E20E4BA4AA62D6A98132C31E27B341FF08D41045B
+ D630197C04A7C0D34029FDF038FF0E7CBF36726121FCB20F3C39581C397ADF21
+ AFC37BE81FB59697189EC4A28F2CE0BDDCBF88F421B6C1E80DB881C54134CB64
+ C4EF9510EE7A1D9BEF442F08C87C620E8E8949DD5A7E917A6D56D891A8212743
+ 261F4A486D61D10D29F8518A8100234C9316CAE60FF6281AD6B0B75539E8F99F
+ 3790FFF23C0CCE3857299CDC3354C76C3C8CF478B73E22AC27486939CFD3DF51
+ AADF301ADE783EC3EC63172ECDF2CB17ABC8CB700E1A593AF701E612832A267F
+ 39707EC631176B5D99A5AFE6F095224BBF6FC9A22C482B7F002D881EC0A81ABF
+ 569CE4CCBC05E591F315751882C10B5A00B91393D4AC5AFD73637FCD1D1012C3
+ 798456CDCF6DE6A4E079BA9ECC4AABC024E021C3C8403E6783811B40C6A7FCD7
+ F640EB3D8DA3DDCE3CEBCB2F64D42ACE2258CC40693F90AA4C821C3BE5F2FC5D
+ 2894B5E82B6713F66AD24FF05D5A4CB9BC32A9A307C15007CF43511A67192F2E
+ FD4A84B70D5526D1A891898BF716448A0E478BAD82F7A8B983C6691D5E2393C6
+ 7FC11A8D80129216762900F8A58258413DE7EA585F2D5E5C5807D257BFAA4FAD
+ D2D5B42F175C530349D91FF1CEB72098DE710829C30FDFD59446D10D91E898D0
+ 56A8FADBAF4092BA50B67FC690B83BAA1146EFD43FA794784B5C0F07BE247248
+ 6AE4CA0977D7A0F3E738F6C0DDCC7123B955333F17D98251638CB2FB683033F0
+ 21DDC98A6B78C4A2A0837A0DA422DCBCE343E9E44FF2456CBAFC4D781BF91770
+ DACE89070FDC030483ED92F6843B10486EF3F605340A5568D25DFE5BFA9C504D
+ B23B52B2FB6EDAFE967DA33A7C75D5E767F70A92C55480B3434E03C491B29CAD
+ A5093927F0DEAEAE0BA8EEAEB620EF6082D7787D93092A90492EC5AF5BC72688
+ 59E6DAD7EE49B4A20CA455D9C7C3D90E98FBE123EB210FAA07807C75DBAAE527
+ 2ACCC4C6455D606B6AF1D35A0354BBDB56C7FFC4481B971430374874F4271CC4
+ FCD6B3EFC66262FFAD50C410516342484C52DAFAC32BF568B1782C66D494F043
+ E0C11AD55110056F1AEE0EAD6B9A4E7616D49065DF7EB3109DB6BF2A2F79F63F
+ A61F1F7A962A4C11BA4978263FD8F990C5D67176C1431166A493625C5520805A
+ 39184BF8E6D183F5EBD0A0D61A154DA0466D1B6BAF10289685587385ED2377CF
+ 5AB7D4ED9745CA0528574ECA332411EE55848478A91F40ACC98EC4A5D12F8022
+ 8373D005F0E5CE0AA8B76DFDEDC298E5EAA911A0A5929689F7BF4DC1CF50D2B4
+ 2B74DEA0851C97D88A4265FB85E221C584160FE05EB30D4234E46186DFE48C47
+ BCC620AF2CB18BAC3C4ECF22D92C0D57646027DA78A5652D463245332745E1F1
+ 062F920240AD3E621B770D5DB03A77D631C2F61C95EDDF21C7A5A8374C64D14D
+ 22B583B8704CABA22602B02318A08F805D10C88A8C3A3927DB03AF35F0D1325C
+ 1BA4A2B4F8FCAC8EDA18DCC223DF2115C82BA438E03753A5D8C7F1F222708801
+ C22F4AE6863272B9CFE76559F55A095A941E1ED4B2840E7A8B945654CB9B8CD5
+ 70D49818ACF42AEED34599478D01117D37112D982138DBD6DAA82D0F30F216C3
+ F9985DA4FE530363173FC6EEA6C20DA70A8C96A8FB8199DFBBA3A159515EF7C1
+ ECB2C3F393D8C2E421C6266B2D6294E1BB173C9D2B9341C3704F16DDB7EF9D0D
+ 9306842B83EA532485CF472997E35EA67A05F98B6161890C345D87B107B599A2
+ 23B1E97D78FB774E9941A6E90535530E167E68B71E42175E851A3D5D27178E97
+ 3896033C5EC5B813E0F6D2B3E9EC7C9B66E59754C52E035A0A26FB26F64CE14E
+ 5601397837B4B22452F1F80D6A09B7750B358AC522B27BEE8A942C6AC7DA934B
+ 2D4B32584276217C2D465DE38D8E068CA63CE969DEBD09D15B6DF26E99A8C34C
+ 39126C95E9CCFFBD49D3EBE148A26B6FC134238DA7C5137F182213977C64C551
+ 3D8560778BBB9C4BDE75BD147B1BC251F46FA9B43C95E7B683DA3FF980168310
+ 42B4EB3F85E14D385DAA133419CE93A4E8E3EC52AC2B34C7CD3925E3366871ED
+ 1FD186EE486EAFF17C998539472C94377E2C3F2E58CD3CFAEFD09837276162D2
+ 526B1602B8118442D38C6E0E85BCCC3E95D989B9DC9B81AB84E82353F4D1D9CD
+ 9165C2413E89ECD0EAE163D5C390E02EBCEA24D632EA242C801328A1F6F83F59
+ 0AA01CE607E74D92B8CB13D20981D4556CF327F8B9C4E11F44B3B1940F9BDA44
+ 0D84AC0B2E8D722E14A1FFCA570545A2D1
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMBX12
+ %!PS-AdobeFont-1.1: CMBX12 1.0
+ %%CreationDate: 1991 Aug 20 16:34:54
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMBX12) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Bold) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMBX12 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 46 /period put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 53 /five put
+ dup 54 /six put
+ dup 55 /seven put
+ dup 56 /eight put
+ dup 65 /A put
+ dup 66 /B put
+ dup 67 /C put
+ dup 68 /D put
+ dup 70 /F put
+ dup 71 /G put
+ dup 73 /I put
+ dup 76 /L put
+ dup 77 /M put
+ dup 78 /N put
+ dup 80 /P put
+ dup 82 /R put
+ dup 83 /S put
+ dup 84 /T put
+ dup 86 /V put
+ dup 87 /W put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 119 /w put
+ dup 121 /y put
+ readonly def
+ /FontBBox{-53 -251 1139 750}readonly def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
+ B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
+ AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26
+ 7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF
+ 20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390
+ B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D
+ 68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809
+ D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E
+ 26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D
+ F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26
+ 77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299
+ BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E
+ C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8
+ 30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5
+ 148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C
+ E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D
+ E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23
+ 337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598
+ 0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6
+ 472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E
+ A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26
+ 3266FEEFE1F2ED62F1442F13D5FAEAC4AEA2B95999F34125FBAED210923F255A
+ 571F8CEA1839FB26754DFAD6CB948BE9C2442424B97D25B9050F9026F3516307
+ 0A6117C7D37009920D23A5C8EB97DFE358C500556481975D7F266D95C8269AE9
+ 4F8E294B2D697BEDB878D23F7E9A1D1A9463B5AA629573028F3CBCE3B14BF273
+ 7F0DD6DD888230765F196377FF434D9F0FC6EC6B949F24FA011D7059C27435FA
+ C744DB25CE85527BB176D01BDF99BB6E150187E6580B61EC042A9197EE8742BB
+ 87F744AB7FD2E3D5A3D7242E8D0CD986CFEB188D318527EFF6AC0CFC6F13F064
+ BE06374B4A3E05C7370A01D256855A4499AD00E56153E8067CF513DE26DE95F8
+ 24B706D34A8BAB2AF41044C38C077C74AF089024BC6AD530CC01C6E25DE88481
+ 5173B063D38ED3A5B6E97B5064DC6100C540F37998F14D560AF20F29FB5A767D
+ 874CD4BA6623FE04F0E49EFE6E1B5BC951F4D65AF90B53052D1809FCD6CAAB51
+ 4DD6B904F2450FB711A04C42F24622B8682FD49606D7ACC7DF86C7318082E73F
+ 1895E7B567B45DDAB1F6C139A0A1C97A07BF7388C6A7FC9D5520D755EC135511
+ 2390C25E6EFC10812D2D7EDD8335A1AE9F72054C8CCB704E81B205CE4E1BDAF9
+ AE30BE659C7F56D9FBCAE216D40F9CE1346B1A35EEA223C566DF4B04FA7EBA58
+ 3B0D0C5C904CED2370E1B619D9B1AF954767A78796E6F10765E00293F57D9506
+ AE72BCE6F9EB27CF7574EDC1752B8DEFC3AFDCE81A9BDFD109F28864E208BEA9
+ 19089FB1D72D7D777E8A7E025407FC2A98B25E0C0B0B2FC212A15EB62970A792
+ 58D38F76A557FAB25BBB650339DDFE1DBCA2F3D59B2B2986C04703F0DE451BA8
+ BFD77B197C40FC2BE9605BF42EE290F93B240A12E3A7484F8609934994249A1D
+ 4837942D1278070BD7881EE89512250E4B3400041DADD8E3AE6521EC7050B00D
+ 7E482208A5578C51098C4CA9D261CD2892D7728A67FF329A6C76F2273D8C0EC2
+ 77E2FC789465931DCF146F2568F485E58AB6C6338B80F980C1A8D69D74F7D1DC
+ 0A7BAC7CDFF7353F3C53109A7AC049DF8ECEBBB07A12D3B8FC7FBD03BCBB133C
+ DC56B59BAB8ACD895D68B6387C57BD3926360B0F866BEBC4AAE955CC42564626
+ 40668C488CB20BAE29C9EC17AA163F2CA628D7363A31B49EC19C4B55DB406EEA
+ CE726171FAD1B589D7456AFAFE04345AA3F1F82A42C9887B727495E3F1AFCC13
+ 0918EBB762928245CFE3266DD36AC92BEF15D586CC203DAE2E17F589415D57DD
+ F12C2C2E343082E0D6F69DBC03056A338BA96C8B3849DB2B985AE410A385F8F2
+ 026A06392B1255A5F79C9F25DB006919CA1BB62183ECAEB2ABB3AC36C2B0B8DF
+ 005113D4153F33E5C95B09081D5D6FFDDA7C0D73474D0D96B82A88742E46E409
+ 57468D46CE70F416A7E93381D9CFE8DF0F96EF7B7D761DE2DAE757952D54B106
+ 7EEFC96FC2DFD35C470F7511F21CBC5F329D1D8093F892943293D9954892F190
+ 7304032D8F8ADF49EFFFB1B50147E012803E7B520CBEC669E53F311C2A7B720F
+ 89856C1E88EDD82DEF34C19CD4B2F08505C6A944197F7F4F6D6051EC14E7A8F7
+ 5C65340C5C98A4F9DA54F3BA669973833FF1CF1718C2AE57A881E111267606E7
+ 8952E6BB0712938318D829B8A1E808DE15EEF3C429496E7DD0637FF338DFFC26
+ 8FCCD5BF720928A048B9AE83C71B916AB6B6CCE6CA197D0D0BB24BCD7A5D1319
+ B34E8502176657B2BA376CDDD8951673E89C7260B341D54DBE90CD1DE8F24FE4
+ 43F96BD5A5B6B6C1B0F522B020E61EFD11E0B301F188888FEF8DC13A242DFEFC
+ 2B49CFB04D0AA049DC195DD62C024971AFE3233F07CF403BCCE4D87A86D59A00
+ DBC04335D93D15958CDD5713A8392DA8BE3D918872C75A30EC7873CBA9443C3D
+ 5E79C9FD02C4B98A41F8B7F1D09B71327706AFF32F737902D9E426937D1A3484
+ 75A643B2DD780B34C45578550E12ED15120BB1F461C637F55A7C07B0F9972EEB
+ 2FEC68ACE9B2F480321C4066CC4CA7CD43E5EFD3D357F692CF90F55481849D32
+ 6971EECD5F9387567AA0037580A12A9FEA24F48098FF3A322DAF34D997096044
+ CEB88D2E969625AEAD58CBE4EC1044BC1760AFEC1E7E3DE89CE5F0C9C3918B3E
+ 64976FE64555356407F4606FDB40C2F59D282F265EB13FAD7345F3E82DB4136C
+ 70AFD60AE365766319EA97B701A153F3303F66911A1B72A6E86CF3E686A58494
+ A4C904B6D9CA9C3590B61415DFAA1A5BCB0278970440D664A29A4D54DCC68552
+ A44A07C925B343EB69E1F88555779CDE32E5D2AE61006D8F250810C932D8F3AA
+ DF66B529DBD316206806B36EB7E47B379AB809266CCD80A776FB5495BEF6E5FD
+ DFE93F9C4B38FFD64171F51E11916B358988A31AE1F8E53CF04F93A18FA32555
+ 23218A110AD685B7B09A15E2FA350DC6A013314EEB2D0020B2AE24CB6C981850
+ 4F670E6BA34278E0A6E6E78E85592096CBD783F112FAD0502924D15B4817BF71
+ 56ACC52A93A8782606DDD46BFF18318CB9B6C91F489891C572703EF6C275B822
+ 9F96D7409687A229091A8ED3F7C386F0C0CC310F2BD54FFA26701F4186757FE5
+ DA83DC33CA4E910906CB09CA417134EDC9AD17C3BFA297033AA5EBEF68511237
+ 5F2D6755861E563217501E9BEC404BB7106D7049ED53BC001C118D1F882FBF1B
+ ECD28472BFD18B8F3F764C832BF4383D67F176C49EDC92EC39E2BB1FF108CC03
+ C4CD7CDAEE7A2EFD383FE14F782C7925CC9B9DF9C36C788F68E7AC19D8D17E49
+ E8AFAC4B38B4A688E528F0B88F8B8EEA032F94CB235E14753F20B84BBF4177FE
+ 37361844B75AFF49975C1A3305AEBD252011B9A15B94256774DDD60247B57240
+ 814B8BF73396CC11BA5A3882F6DBCD1E0C05BA587C91C6B349E5F6EBAB713B8D
+ CEC39FF93A8C24A7D2CE1606D2327736F289BD57C61C68F3B0EA7BD6144FC909
+ 97DB4946FFF83AB58ABE6C65102E73F5F438FF552838EDA7F4D8EF55544B3B86
+ B937E1E20EE0046C7B14DAC299CC7901988CEEF6F5EE551CBD927B33759631B3
+ CA5F5BC7F74602D210A3945B98FF24DE80C4DB6A0131162EF887E82064326566
+ 53C3E08AFD0A4329389E4D8E61F9941BF08096369ACD47AF8BAE45FD314EB0B4
+ 59406924D3536F298BBC88F58A5BCAC8F0C2EE7A8C6285E975A599DA5CE0B4DB
+ F0BC75FD16D4573C4B49C9B4719B94A53FF2D6625EFCE9DB421FAE3C35CA037E
+ EA095F5424E72C33747B30A01DD3C88C9BB1214E73D24889555E02574F099B27
+ 6C7B813E0FCCF2DB2EE1AA9B1D65B60DA241C75D9202DB82E54A9A885D2EAFDF
+ 91C4D72FCA99CE2FC07996AFE5CFA5109FB12FBCBE33FE4BB36EA2575F9059B2
+ 18A8FB1C8E0641F465BBD813C8F199C578BB85832BF0E83C2DD1FBE0DD3598F6
+ EB39B5908C65F5987BC091CD8B2578D4D727B2E7CD96202B159C1D79E6CF509F
+ 6AAA594E246C36453179A3116E168B37B3F59D7D45DF2634C3177A1CF7303785
+ 54EA13481B1C36CC4FB27F9DA91107E4AB011371C554A89D8A455A704555FF70
+ EAFC0B701756E9FC5BE78E067A7AD19B2F541BEA7D711C6649CABAC08F25ADB2
+ 801AF43CCB1CC01058354BE2AAF84BCC247890D62C1581B91AA9FC02463BE0D0
+ 66804D873505DE89017F60FD6F21CBAE762062CEB3D9AD08C37E7ECC2FB2B03C
+ F78E792908504C4CB32E5F962909BF783481D86C73AEBCA75E4BCD171B40E669
+ 1CD2C640585BC411B45D4EC80F6E4A3508E5E0CA2E3FF817F2044AB74BC7CF92
+ 1CB79998CE7B605E1F6F181F7480390A1CB7B32298DFBEA807D289ADA26A7CA2
+ E62AE9DF2FF5B0197452D2461CCC172278F9AD6D457B317FE83692060D422FD8
+ 96DE2FC0CE0A1139F2C854405E6FFEF2EF18EED1C3C58EFC8A0CC964E830056A
+ 1E77BCCF1A157882996BBB2658BEE155FC820E97FC2E253EBCD61A786A3F1C93
+ 1750A48790254126CBB82CC7090E53BB121574FBFD59B14158A065D8BDDFDAAE
+ BD0B4CE951BD57F8F4E643519A28152F9443011C0BF0F12E6A7569C419B6D485
+ 8AEF78D0DDC347418659AF8181E252CA8122B523648D1137C38999A14FBD216F
+ 3D2BB3434E46748968BD9FDC50BFF23D8BA8A4D0F784955605139F3EC4A98B4D
+ C633786D1B7D4791CF2FB923D8C37415DCBB1A3A1311D7B657A3DAA8E4349CD9
+ CEA2B9004E9B4336FDD62FE856816996FA5A01E53A68A03E4E652AD7BBA6DF65
+ 8B5F5CCC0237BF585269A65D519429A72C421FF4B1DF6C73D69275FDA202A81B
+ 780CC82CDE55858974C95DEDEBE6B5C906B878AC205806A5CFE7DB9592A091B2
+ E54A642817585EB40468CEE04E2E5F2393FBCBBA07002BE5236C26BEED5A0770
+ 7651103AAB9397D0E2745019506590D483199BAF6E988FF383C2534219B67C44
+ E48B84DDDE789D0037EC8DFCA470FAF5C61AC2390F292F32E6D3DA4BE54F244D
+ 015024A2E4C243B7116AE3867FBA2D8C08AAEA7A0489AC0C029BE32A376026C0
+ 2352780F7D54D31B94B816511C125DF666F4C81762041E2FADF3EAC8A9DDE4CF
+ BF39E35FB61FAF41A9FC0AF47FCC864CEC7A1419BF2A15309A30903BB2B1D5C9
+ 5C404D28F1B481A9010B50792618C394331851A3357EAEA717F5BE145845EA08
+ 85F24DFE683634E11A4AC97A2AB11C65E042793CC960BF6E7D65B9C8CD8C13D5
+ 65A38A34B803DEF21B42BCD32450DD49B2BDBD5E2C5963A6ADAAFE988D748A9C
+ 84B3DF094AA4791E144EC4C0BEAD0ABA9FC96C75327CBF30BADB7643148AAA9F
+ C8A7D5B575D8CBFB53239F9A07E84EBE172BDE92C59A93AE6A9450167CAB22CA
+ C55BA87553655362D4C168E7E1ED382685554EFA9027BF550E02BC1C4AE9702D
+ 35B7DB7BB20CDCFA1722B5A33DA69F94923CE7FDFEAE6641DBFFA87684BEE307
+ D78A4673072BB316CBED9C56CB83904DD091F39B6B0BD191917B2CB49197A236
+ 0C6D7B297EC39D56BF02EF7221673B1FD9EA88EC8B7568628F18AA30D28585B6
+ B218A93605EEBE2C6FD5F0BF5C57D33D75D6BA86E600BBD8340924043DE9E5BB
+ 07EEB08B4E39601EB4BAFAAFBBA106BA038EC4C784F0132DE39D2416626AB8FE
+ E307BA09C7F1A67BCECB38BDEDF90ADC25CD574399C340128B079B3FE183710E
+ 4249E228A5831EB3671E87B0B86C1B8438849B892B1EE8B4CA21B1E73D9A9D5E
+ 9FD57656923D30370E1969EC5C305F1A5554B9F3D07880CC858E37808E856348
+ FD0C7D8B1FD9662AEE12EC44E7D256ED603F2D397AC6D7D856A19D09E5CC1AA0
+ 3EDD3197AD482ABA6A65BA20BBE5E1914C3EBE33C6DD870724666857FFF0BC4B
+ D11F44A4C6C9C2D78D21F5031C234485A3D3D6A167496607DE49A37DFB5A2806
+ 310F0B1A2B5533B0E13AC57F477300612D97A1AAA652AA16B693693F511554B2
+ B509A50BABF95EECC857419C24E03BF95B491A47D51A085DD5096CC4F57527B6
+ C05D0EC35477A8F9ED4816958BBE4B10FACA7E0DE5E5D6543856AAD28013368F
+ C8BFA2B9C2B8BD1E2A2E0699CDE04B60163AA46BCA08FA2E44DFF9C1F752E165
+ 255E12473E3CBC8B8532EF83BE3DE2C4192A3950471F6B78D997FDA5D66C0732
+ 2648329DB9EFD54EB2A9143EB3B3DBBA8873B89CF7274E67336EB10F611547E2
+ 1BC6464DDDD278D7FB18AD9E6C8A159C0B9BEC458CDA2E523DC327BF764CC14F
+ 9DB84AF730742B9760669848C67C9634A1B5EED8E3A3E9F69C7765D0F3A4D1EA
+ 5E2A7D8584DA87635B2485BE7361FDDA67EE9ED3A1432D398A2FC9785107E14C
+ 16DC9371EEE5225D6A410CD5707999E3F2F9B7B1E22C53674C9F5FD2C2792DFC
+ 064F119E1EA4383EC4742CDF49A970F12E147002B1DAFB04BE6FB923F8287032
+ 3B111431D5D29A9DF9A1F021FC6FE892C453477723012394B648461D4216EDEC
+ 38086A038F951B54FCA8FA4ABB1068A5FB0F8B94367F5EB71A2F76B0B6066C3D
+ E582A8A29B429BBDD9DEFA2536BBF8305B97508D8297380D077B31CCCF18727E
+ 1AB38C6C29C249293BA8651D6DE15E0794A23204CC576C5DC363A6184B131E9B
+ 025D9580CA9117D6E22E6D3EE95E9740F96E78207A2C4C244A17ACC510267B54
+ CCDFAFD46FD3EF9665BC56A1E5DD7F1CB19554117C180EEAD7AC7A24B8652B7F
+ C50229157243D50F9A10820F87CF04F38E659DC4E73921867E624B4D6FAAF41C
+ E6518FC3E5E25AAC530273762B7A220A5CF18CCF34DA0CC5236009F38B7A5707
+ C7EE9046ABDD6CB5F8CFC710F805DEA8EAB0816909EA39F6F85762F8F33EFC14
+ A104D4451195269271503E9F4CFD31F1331CCA6FD72D20A835ABF553361BB75E
+ 50C550917A046E0C53BC2F68CE639FAD7F1B84E469CBAA0FDED113C76AFB7838
+ 74171F9ECB310D029D8C2BBF9DEF06A353E9982B41991AA7091436625C063556
+ 1DF45E9B80305ABD7E6332F2565B7E08D08EA136B36B9A487959E56D326FEAA0
+ 74303298D8F316C7A0E8C91CE4C27E60098D700D3D92EB44F6881743F392FD4C
+ 848E2EE6AEED5358CA69138A5005C48DAC58B81D621AA8441E8411A4766DEA0C
+ 15784091BE987D5A390648361420AB140531CC494BAE6EAC8554B2DD7767608D
+ EFD8429AE9578AF3BA94325EA0AAFE657E5432A077C702C311C42526F6852E22
+ D267EAE3091C2C00F45C4F72A57DBFD013E66E12B56C2B4ED84E42A4F18935C3
+ 7F0C5023B10002FBB3A255D91B686355D25F1E3D9CBA98665CD2DA403E5A24A1
+ 8042BB412544D04B0A0AEE7FB491D07B70A72971EB46082DA4A5BC320057723E
+ 105EDFED06DB5A9B830179083AB2167FE69B52FDF6CF84FB18D285A48537BCA2
+ F4B65B34ADEACB0094B36B5148B9E85F106C8599F743B00F45218F92352C1B9A
+ F46A711B4E09AAFE948B40DA1F3AFDD85D0675A37052659C337DB794F2F85EB2
+ 67977C0F85BA11EE160ADFF9E9A41B4ED74E0CA08BBA3D172DB4A21B17897BD7
+ 4B2DE5C280EAEEAF4DA19DBA38DFF4C4A500F445881FB4203CD7033BD092BC95
+ 381103BC285F0D0DB11EB54C980C1722107F973A5F56232CC81AC6F87FBB6D34
+ 9F4426F55A7F161EC93278693B8172AD05BBEFF3F70DC6FB3FBCA9DB4991196F
+ D40BF6180A02CEA089A25770074C10ED3003733136ECF2E2DDD39122B425BDD4
+ C60AEEA6920225598DA7A55FED67A00967EC9139C9876B42DB6505449B303F60
+ EF9F415A59247063B1A681DDFBA48E8C15EF3931B9E37A2A395F676D02B7CA92
+ 1B4401D59FD58A54376A9E7FC2B075EEED03038B5AC7D886B98072302E041728
+ 1A684659B8927A7FDAC0CC4801F5BF17052E7BFF36A84B69CA3E37D6650B7ADC
+ 64AE6F2AB661AE2BB94C25789EC0B9CFF6785C6ACD2BCCC794951AE72AB4162A
+ C9ED285A0090EC3ABAB1D9C37AE8031BBF4CAF259B2FBC365833F318EBDFF052
+ D908189D8F85AF4F44F19A6A8E4D676190E8634CE5C974575CE7AE12F5220FAF
+ 0EA1587B9CFF9CFD5D888A6C383B74B85C93CE6DC9E4F32EE02CFF1DC775BC0D
+ 44B584691580BF0392757C6F8E4ABB96A3E6BECB83E114A23ADEC6D7B577D929
+ 455E3A542EAF607E99CF4E731C20C9AB11D2D9F5354281CD4A1B46ADD4276207
+ 465B6A0C86C08A65A4EC9459D739F6CC17C05CED381AA877B9D8B8F0EC14FBEE
+ 01FC4EDDAD6467E5FFE4977BE7928E36F5CCC0B0B0735912E0CF28F7DFAAD374
+ AC88729F414B98A5EEC78764792506029139A23332777255A8871601688C3985
+ 9C72C2CCF7917BC80E417BF2BDC9378F527E9252A04CDA8215C1771F8BE11045
+ 88864914D7BE3D8659D30F115EB4B0B1EFF33BA172ECB7C42DA6AFFF2C3219A9
+ 04BC2F733910D42EE64A627395D23FF35AA0B50E1D50116CC65E27529446AD5F
+ E2DB57E93252F0CB8399E41188F97A7C0A45F3AB5C2122292A968487ECCD93D6
+ 353ED05012FD72A77DA20F7C26480ECFBC909391DC6547D152B2B724B65A5697
+ D80096CAA254CF347363110350AB8EC55BB2838B8D9C22A51F5FAEED065BD7A9
+ 5E746C72E60AE86083273370F43662DF1E84680FFE0A8271B040A2E9DA40253B
+ FC0272EA8E1AC7EB0E1D5461E233B0237D01A488B277A4158F169D4D2A476A94
+ B40033C2F92C7086C03209BC7855C0039C276414022C283A5D1D7E94C08A679B
+ 6F7A2D56E9627B7399EDB99A85F31F1D99C30EE3E11A6161DC2E507B44083B7B
+ F3544BCA72D3931095F9E1D9805AACC4EFCF01B71F213FD52110CBB9BC5C9642
+ 9FCDCB6A8A15E2D23B6B8DFC29A98A21304B37D12177830C55CE8916B1A3F79D
+ BAA8822F754A096F324C7EBD37A2DB0A6B7F0246F4C71F573822E668D8F159AE
+ 9DC78DCA9E267BF6BF6144B56ECFBCBF76B3019D968D39D326712CC30F40A7EE
+ 071102338C6F13EA782AC6C2232BDB3FBDD568F7E5AC09724CDF1C6C1542399C
+ 53CA1523234195DAC3CAF86FA7808EC32A33B45FF5970295AE62498A625801A0
+ B388C6A369B1C63ED1BB9C8C42EEC128F7E7B90EA992E98C00227C51921142A0
+ 7DC7778F66C6F9902FC4796B822C8608ED0F2C3804FF1383615A720A64F4D675
+ 4F66E70B1A1D03D807DF2DCDDD82EB79F866CA9D8DBEB150AC4B00287AEADF91
+ 9CD91007F5EF236C864999DFF5C590A52EF3E6A731D5F91EE65EBE0C175A8B3A
+ 81435815CB2104885EDF5D61615CD7F7988409ABC4EAEBC3D3BA6DF4988F4D4B
+ 60612E29560DB4CDF5386FF79045445DA7B048ADC9056C8F9F85FC78006C8CDF
+ B62ABC9FA839F3819FE4671FD6E7C983988F69432C3AA663CCB4A3099BAC64D8
+ AC46799EBAEA90D005D2453E484888B3CB356C3873AE4C6AFE73D3E620503742
+ 3044116E4D38951DB45927B572ADB6311E5DBA3282BDC156436E890F7AEB0A91
+ 6A1D3519DF7DB8A6464A4613C9D5B2EE23B425A835F99D4A1C6FFCDA596354CA
+ 717A02FDB8E54A6B92AB1604AD137292BA6F04F363BA8557800A1A7D535A4C84
+ 934FF4A6A323409693ED362E3A3615A5CEE80AE04E135AA7ADF66A8715C7BA5D
+ C6538E5FDE966EAFA9E1CE6157F302C577E14419DCA92DB02C2976D469EA15E0
+ AED1E4528404D76E3A5544F9AA04656A89E71343CE8F2D39B90C7AC61E3E9512
+ 5F2721C3DDE262678A322B9581C15CB1251681039EE182349A293BFEF841DE35
+ BC11AD46696F3C3FA0938C29DEEE5773BCCF947451A48FE6340447A63621161D
+ 19C15363809A20F7CBAEE0BF0690F3F41358A59DCF8E3C858184F73C03638C4A
+ E564749D4B1DE5369388D35DA8F0C03FC7CD7D2BBF5E682BB351DF0F261825F4
+ 9CC6AFF4A58F9CD894E2C740657F7C1703237EDAD4654B7B210656A2F82AD030
+ 25006DAEE28FD2840285716D1756AA5472EF1A37A94366C137DF621A0338EC1A
+ 5E3A5ADD5698C6FD5256693092C6BC3555DB5B77FB1809ED485C3BA3A48E818D
+ 6914DBECA9015326710814C1337F91FAE28817D582CFA8F8B780048BD564987C
+ 325EDB7E78FDF393C15C2DC3D7D6D0E89B707BAC927BFD9F5460879E1281C00E
+ 9D34914E9F37FCE3467D254670943B81C2F17AB9229223237F01BA1813C4478B
+ 544C07045E3CDEF63CC7F801A5D66C3E3F06F33F20EE403E8922ECAE1C017F79
+ 6F3B2EC0804BBF4666186C1700488986CD517D78545683FD12D7F29635AE4B5C
+ 9A2F7B6FF3DD44720483DB73115C0D16B9D3457AB36D5A918165FCB6F60BDBCB
+ 4DCDFEDD1D12EC01057D28D1280D57CE53FE9B0CFA511D43EBADEACA6B77483F
+ 7A4F113B4B063CD964AB10822B4B4D9CA9E93E6B30B07A4E875E47526C7145D4
+ BBA663B4B4322218714CAE1524B31E6FF6B46749B979C7E2449BE7A13C3EEDC8
+ 89F1B8D7342040BE9CB20776D22FE2E2FA87F9C6F2D71584FF9933C4348E1B71
+ DA9918C14CC1D32FF88A35800981F83AB522919C130D20F13314C7C739AEA9A8
+ B4357C1D93AD3831F9C59679FDB704BF0206807D6E0C1B108B8A3DBA57E32215
+ 19F65F574E732BF346E910199918446E88BB77DDE720C300F68AC39352235A9D
+ 937C638A40E014108DBE8652F25ED6D02BF45BBC8D087AE82B688B47174DD099
+ 1722607B10311EBB4524D2FE142BE180356D007D282FC31EA61A07691C73220C
+ AC1D6C260A554BC1A1AFB22583F1BC572C769E6F55528AD1F78AAC29F1BEB78B
+ 2691DC306C60ECBE440900D709EC33CF4FDD2D80F572EFA7C4FD3BBF3022BAC0
+ 5B4B8F29D84E6E0089D0E5690245B99C88C0B7F62944354AEC19994BD44DAFC4
+ CC977CAF5B314E5798AF6449B49DC26617D5B7CB0DCB35272A6C1345763B329E
+ F558CC021CAB2572E01CDB57D472D2606E3357F6AE
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR12
+ %!PS-AdobeFont-1.1: CMR12 1.0
+ %%CreationDate: 1991 Aug 20 16:38:05
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR12) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR12 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 11 /ff put
+ dup 12 /fi put
+ dup 13 /fl put
+ dup 14 /ffi put
+ dup 19 /acute put
+ dup 20 /caron put
+ dup 33 /exclam put
+ dup 34 /quotedblright put
+ dup 35 /numbersign put
+ dup 37 /percent put
+ dup 38 /ampersand put
+ dup 39 /quoteright put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 43 /plus put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 47 /slash put
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 53 /five put
+ dup 54 /six put
+ dup 55 /seven put
+ dup 56 /eight put
+ dup 57 /nine put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 63 /question put
+ dup 65 /A put
+ dup 66 /B put
+ dup 67 /C put
+ dup 68 /D put
+ dup 69 /E put
+ dup 70 /F put
+ dup 71 /G put
+ dup 72 /H put
+ dup 73 /I put
+ dup 74 /J put
+ dup 75 /K put
+ dup 76 /L put
+ dup 77 /M put
+ dup 78 /N put
+ dup 79 /O put
+ dup 80 /P put
+ dup 81 /Q put
+ dup 82 /R put
+ dup 83 /S put
+ dup 84 /T put
+ dup 85 /U put
+ dup 86 /V put
+ dup 87 /W put
+ dup 91 /bracketleft put
+ dup 92 /quotedblleft put
+ dup 93 /bracketright put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 106 /j put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 113 /q put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 119 /w put
+ dup 120 /x put
+ dup 121 /y put
+ dup 122 /z put
+ dup 123 /endash put
+ dup 124 /emdash put
+ readonly def
+ /FontBBox{-34 -251 988 750}readonly def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
+ 68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
+ 3645B82392D5CAE11A7CB49D7E2E82DCD485CBA04C77322EB2E6A79D73DC194E
+ 59C120A2DABB9BF72E2CF256DD6EB54EECBA588101ABD933B57CE8A3A0D16B28
+ 51D7494F73096DF53BDC66BBF896B587DF9643317D5F610CD9088F9849126F23
+ DDE030F7B277DD99055C8B119CAE9C99158AC4E150CDFC2C66ED92EBB4CC092A
+ AA078CE16247A1335AD332DAA950D20395A7384C33FF72EAA31A5B89766E635F
+ 45C4C068AD7EE867398F0381B07CB94D29FF097D59FF9961D195A948E3D87C31
+ 821E9295A56D21875B41988F7A16A1587050C3C71B4E4355BB37F255D6B237CE
+ 96F25467F70FA19E0F85785FF49068949CCC79F2F8AE57D5F79BB9C5CF5EED5D
+ 9857B9967D9B96CDCF73D5D65FF75AFABB66734018BAE264597220C89FD17379
+ 26764A9302D078B4EB0E29178C878FD61007EEA2DDB119AE88C57ECFEF4B71E4
+ 140A34951DDC3568A84CC92371A789021A103A1A347050FDA6ECF7903F67D213
+ 1D0C7C474A9053866E9C88E65E6932BA87A73686EAB0019389F84D159809C498
+ 1E7A30ED942EB211B00DBFF5BCC720F4E276C3339B31B6EABBB078430E6A09BB
+ 377D3061A20B1EB98796B8607EECBC699445EAA866C38E03ED7D4F3EDBCA1926
+ 2AF6A41F67AFCFBF3630C943FA111E4CCD988A7363F7C2B75EAF5830B049460E
+ 0D2B337988F150B9182E989E7750C51BA83DF37685483F86D1F47478883F3F6A
+ 4B7F768DA5AA89E8F163029ADD4A9209DE8A4F285766C06EA859639B92CCCDCA
+ F59B1C2BB8D588CA754D1257BFF76B53984DF4937093AAEF79009D32A29A4C16
+ FB610C7D6713482C48D7F9E8410C0F00AD6E67021056B6035534E79F05D14EF2
+ 4E8D84D2752D8F045357E228D6C524C1BA8A9275928F05E0266E33244B83F87F
+ 439373EE3592D1F67CFB92F600E4EF17479E8BE2789AE58847313D47C043CD4D
+ CA208AE5F065FD65B0F98089371BA69CF9E71E11B4978EAAC3E76B662C07C499
+ 1A3612FEF1F3EF655753301B26EC3C9EAC80E059AACD02BB342298919CA1811F
+ 5936EB5DD49E3C13FEF7643CB20284C4427E9DB26142DA769FD783D749F897BF
+ 89CB39A297CC4FF9030FD615C632548C9DA775D662AB07CBB7DE18D1BDD79520
+ 4F6351444D32BA3864E67BBBA2C9B272E4609C5B5E9CA20A27006DF7A3C2A568
+ D34DD46A982A7FA68B008E1302005C4CF5E4586A414EC416FC0B3571AACA2190
+ B5E34ACD63A3D14E3956A65F17DD2A2CC864BE4C151A462A150C70C32F259458
+ B695C0D93E2EAEB224974D830A3CDD32D7807C49B59F6DCB22F7E4E7589CDFA1
+ 685029E400D89821C50950D7DDEB973E9B00CCB038378C190EEBB2A3D723BACE
+ C763CD9AC935848A2DC88AD210365DFD0CF7447D84B2304B60C34473A04BE623
+ BD46729012874FA15AAF93CE093144E1AD8170BF5A34721B37001E42224CCD28
+ 2F6C55FF98CD66D67F98A0B338A4D4E43D7739D2E00D767969498C436F8FC1DA
+ E5CE9607D8B9CA4C38890606BE1519587541CB68AD45D85AC943E10A1D039153
+ 798C7A4180276FC18D32EBEEFBB4E9BFA70FDF48C4B31D5139C4628FA8B53FC4
+ C54A6008DE70A21759926FABD0DB0878065F87BE287D716DD9B6E6AA7FA298C4
+ 876643033458EF57ABEB17F2F98D59DBC43DC5EEF80E335EFF44EA3900618C9E
+ 9D7D5FB573F01D36831FBC6B8240A3C1BAAB434D586C9D59A497F38AA7F8B892
+ 84E42754484BBB332FF00EE683F2C4E6F866F8E128739E44B82C1E765CB54495
+ C5F03B51A386FDDFDE72D98613DF4062F3E8F77FE610F4DA4BEE0AE3DACF2A85
+ 32F48EEFD5222D39208850F85FAD9AC27E3E924A817522665DEBCA359458BF10
+ 30356122D5F85179180E810336DEDFD8EF2C10A9D3D44030E5811814121F01A2
+ 5FE474EB6DEB645F499A77430B4B3EE2DB0CC8D0E0DECD34E1E678BDEFB596CF
+ 51E055D7417E556254093F795556A9C38A7D4628B8CA9C30CA0B197A744D3BDC
+ 58880A525B9920C7CBF88B350ED515CDD61593444AAE929C7CB12D3B101779BF
+ 563434B7E98ADB7F51C1EEEA902A4097C1ED31958B3B671BC19D2CC34AF9C461
+ 1E31A282F1D38A0B4B36307527BE00B014A59E4CC693C828948D0557BEBA3804
+ B2384CECA42F3270C969124DF3F1EF2D2A4CBCE4198D08BE0118EA41AA285BCD
+ ACE6D324E4049C2F0DF101270F0CD2BD90B94C150BC48FE227A5EBC5A1D58440
+ 12DCA12FCD3DD9E624BAD8623A6611899FE57277BE78792840B45ABC4F83A6FD
+ 98FEA04A5F366DADD81C7C40243B35FF4E737561BA98CD4D401AD431A7ADFE47
+ 943E7D21B45603B02D08EF75165CD98694A8AC8695AE9D748DEB13BC59A2B90E
+ 51957FFF19363D66BD5B32F22CAB720C2E2AA456745D8E72C2E93CE30AF4309A
+ 49CC99DEE59AC15C512271F552768CDCAE82AB40BC13985BB65623769268B890
+ 42414FC30B2DC0578CC4F7DA38CCF5329828FFA6BE1B8372F734FCB199C1D7F1
+ 55E5DD86EFA72C77DDB878F06D76D56D075541A7EE3BA82E080797997941B9BF
+ 598228A0CD7566E80F35F30E87197A40863BAE4F6FA882DFF6F37C19A6DCCEE4
+ 56D6D715E7730901234985838BABA097500450940976B7B997FF26440A7F1147
+ 769C0FAC7D15EED3FD6DAE978E9B35462E843EBB9A93C30DF1BE8CA49197DA73
+ FE5F8E2843894142AD5192336CFB56013B43749B029CC8B36D81E22559AF60C9
+ B98053918B97149B9D1DB4B602830A4601794E7D47B40219399D55AAC92BABFE
+ 46974FA831AEFE0B959CEE5C923438E183DF0C53D5FF1AFAE229F971D44EB4D1
+ 7CE42E76D68A08B4E23D06291D9BB022AA825D57EFBE0A210C3377BEA3924FC9
+ 304AF9EB8BF56F0997C06FBBF78654FABD021E7415C41D36FB50A9EBD7B0D9D0
+ 5177AFD06A3BEE00071F267E91386A3124FDC05450EB038DAF6CF569B86F99C8
+ FDC06A0054DA09CA4C7D5C028CC8D6B3A4FFC8898DF555367C1ECD3DED6559D6
+ 929C059285D44AF96E1DCFF651534099894662082B418B3EA72F1BB619C0E85F
+ 8D8995764BAAD8AECF4153A0AC5C0A47FA92A7AAECA7EB9DEC1BC57599E48B1C
+ 8CBE4F756D8D52115D7F95EE9260030935222F7CAB801855293DCB2567A6DD24
+ 680BA9055740FA323AC8A5B6C2A981C940366E072CB1A83D0BB93BE7BF99A277
+ FDAC3C652E4830F9EB19F6DE5620DFDD8B2D4A0C7D45B13E55945B230EA19C75
+ 3A058D520459913D1BEFD3F48E4EF2AED14D5532A9295A075C174B2B6E599C4F
+ 1749B4B5F9448A26A39A36A1F6E4AAE2B431D88386CF5FD5620627813287ADD0
+ 713B48B0B30A03B021BEF91C1D853DB2FC7C9D1F66481260B198308C06E7308D
+ D1D850BE8EE80E2B7BEE0A95AE7C331BA622AF14340EB58E9040F85DD7994555
+ D082A7A7F2733301D961B41404B89CA836407E60D95B061E5B59B215FE9FCAA9
+ 81C060ABC4E555A08D3BDFBD872D682741B933DD506149CB72C344BAB39D4834
+ 315AA929E173FF7CB1E3B491366FCBC15BBAC8F42E1631F04B7C8FC6CE2EDE71
+ D835B94433F390FCB674195F36B3AC6E12058421E838322EFA98D3BBD133F387
+ EF902F40E0FCDAF2F0AA4CF8543D7380FC50E29A8C89DD0EE2593AC8609CF48C
+ 5C8B6289AD4BA437C8FFCC17879B8EEC98410D984D3F934960E31F8E893BD8BC
+ 9003F929C4D075671B54C0A8F1640E94ADCB40783B0B1DC00CAC66B219E75339
+ ED8C34BD2E22EC392CFF0E1066248AFA19E9078BA327D9F704D70FA81D745A32
+ 9D2357C5C21B9DDB3BF4ABD38FB53C6C329B806FB05112A2299516A6EFA1BF00
+ BF0A6EC64A84F1A5D988AA1C53EC250321AAF3CCF1C1DE8129CD81CE83EE8DCA
+ 53E51ECA95D780A7FFA2DEFC47194C452417ADE1FA0643AAE631677730E29576
+ 0ABB66E50DC3AD1B26CE77CAE9B6175EB4399CB7E1B1D55711E8FB42AE546F0C
+ DAF5FF169828E5536AC2053BD297DD354789D7BEC4E8133687697BBB4A45E8F2
+ 163CF79FE41AC2B2608A6EA327F0556787D1AFACB5189EF2BF7C904E5B8B2BE5
+ 898EB8A0049CF13235C4CB28425D77CEB56FC52F396994A5F45AF5B0515AC3E6
+ 0ED2A6901AF81765C965B0D5550E8BE0DD2B7A0A343E26EEEECC9941CA489A95
+ 3DD318205C16FE432CCD5611E48F9EE6FD1353B7F32B5200A2224F1074073D8C
+ 09726729AFCAA15BA5C5640DDEE152AAB8790C80150DE4E3F37F144690AC1DD4
+ EB0D0AC1097D340D5A03C526F3E7984286DB69A7A547787CA919FC8AA60EB055
+ 0E08B9C800173BBAF3D6B0D3597BD1BCB69F71A5BE2F44EA379D77304AAE1098
+ 7B3EF6AD98DB13B361621F6F10D061BFC906E291506BB1F709D9A01CE2E76A85
+ F10700C50615065FBF09DA78D20F1871A61E2E7EA8895CE72634BAD190EE0A01
+ D5BA80218ADD5AB286AEF7E8109F187AF5E279DAEFA90FAE56BD2022E2FBAAF5
+ 0A8883CE25E4F7913849CBE6627194B57A75AA4C5B6F3F90B009550E9F1A4A5B
+ C6B4664D90AD12BDF4D8DBB1F42FDE9E30DA278FE6A5B34189E5E526EF6D2FF3
+ EFF5C8C5578856EA8F626964841CFFF32B5340CB8ADF298A887D7438BB1A5F79
+ 7AE8CD847442D3E5E18D1E51A001C9641828757493737D74803CC81F3E11AB1F
+ 99FA9358E70A29FD0BAA350923E67053F975685CE01228153F2F031106F6CEDB
+ F64C08EC35C683D276EBBDA86E25E57BF0F714D298B2C357E75841CC6C1A8778
+ 54BECC8C4E30D7F378B8895D73799F2C4ADF46F2324B6CD1E9DC57986C8FBEC6
+ F016AFA5AC4A4C6D98A163F273DB0DEF48741524BE2ED22EDB5D26EA138CB53D
+ 4ECE466B30385E95FC597BF5CBEE538548A1D6D3DC32A31317AEBBB843D9040B
+ D6102FD87A4FF902E3BD306177EB0EAA885BA39031A623143622551284C979F3
+ 6C81021F167FE80A05A266E189D76E00F4665B076768A77904E3CEAA3112EC10
+ 4D6AD3148D2CA70083B61410A75C88043CE4B399D3C1697C8A8C66BA9537F6E1
+ 29446269B3E81EA2D5D8FCA4687678D1B30B561482E24870865001E96CD2F8BD
+ 3716D706B19EA64F8D5069F51D59E7E1551FC3EBAF4D77FE94E1FD50369CC01F
+ 58B5293ABBA9337D7A49159168AA08F4D85A207475B9522DB58612E7C5883348
+ 151F0768FC015A54AEBE8D52B5DAC79285B40AC6CD222CA845E4AF76B11A4B9D
+ FEE732C3E48F190F5C85E0C05DA0E4E760D39AA904662A4C01BDD098A98381D3
+ 5A0E5B5F63ADA34BF9AD9D54F2F1959F41185C4819AD605C87F8C39D8D434B53
+ 63FF5F0F3AF08FFBFBF25B814D180DB9750729F7C4962472299AD4FF6A6F3491
+ 2820571058B7D453BBDC057566A9BA1A03F078F969578AAC9709D3CAF61FD5EB
+ 5AC81EE6D84DD677A25880F13F51A4EDDE56E06CB515C90D0E5E580C20B4C81E
+ 254E408CE8CB6FDFF95F09D7494D823B81420FDA7CA7CAD1784543AD07766BF9
+ AB6DDA41C05E46D3DDD5C7F319C96DE7D5A88FC4A12AA88525C287749B0974E0
+ 22D179EE6CCBBF57BD468297269F3122AA825D57F5D630ED4E114319E224E9A1
+ DAF93BA2C44C02B46556369A5A1D8FEF84193969DEE0C1F4EC85849ADD6B9FE1
+ 8C0AE258EB7670AE5593DC1079D5901ADA97B36F014371B6F9C7CE05C4208360
+ 0F3D9C4D090FC044F4E9CC65D13D851486CBCCD31D96523B570FDA0651978294
+ 25C56D50B49AB0B6913F0FFCCFAC9DDDE1FC1423BDD4AE13FF0DD3FE319F0D23
+ B26C6B685B4A575E57C5C479FC6B97FABF12D8B10F4F3CBDDEF0D20A1520919C
+ 0B69F5BF6D14579C856C72F4FB38CF95755219926F4507878E0DD4AB31D8662F
+ 7B0FD33F7373D5AF08A58669F754991EFAFC59D9E47DD68FFB93330FB23B159B
+ 924A250A3C3C1EB54DCABB2F044C8E8142AA18ADBC078C2FD893310CA88D1263
+ 1E926A29861FC950CF4FEA5007C23BA57754440CC75C5F4B58CDB35A51B81A7D
+ 3B005945ED20019AF96618BF35A10A86EFB038100728E38271FB9370DA27B1E7
+ 7EF3285816C5CBA3D432960EFD3DBDF5FAB9218042728AC42021C2CA0694658B
+ 93B661E6173EDC7DF376D121CFDAD8BFD09A8FB0F7D942111BF1330C4CBFDE42
+ 455F1133ED4DBF4EC1E8632585ED7A9A99C25095212E88DFC15271CE6E5CAFD4
+ C2D095AA1B0CB6EB9E2BEBA687F2F5BE59E849687932ECBF6F38196E90538FD7
+ 56F32F7D97A96C06D967177913AA3792365BD539ED2DBFAB31008FB9E7E32647
+ 97C1E6A2D84EBDEF5BE0C8B70B39EF05F5600BCA3A037791C2414DDDE4EDB32E
+ 30C710A9C86065DEBDC463E7BEAF5988619B88994EDE3495E750CF60182D618A
+ 410B4A5869E48E62FD84759EB89E1EDCEA49C3D0FEB504DEE0AF8E3B0BA466EC
+ 67F3EB38F433EE0D0FB84D28470E9DC540AA88E5D6144188988AEE3247D729EE
+ 0BF4543E3CA51D2142A92C09D04EE9A5279DF351D1D83CF0D48690332A173986
+ 4A44302F4E7F220A153F1DC73A1AADACB821655335515270C2655F47053A4B88
+ ED5FA5BDDDC3592AD4FA7A7F6478BBD8678E3302E9BF0DD2183D2518D2075CC3
+ EA4FB302005CE23EAE2B4E6899A96CABECB40CC97AEA90AB90E3FC7A82C913E7
+ 2EE33E3356CFC785F3854E7EEB3A10592F70DBA44887F07524E3F5FCA239F776
+ 081ECA64DFBC72A83F47970FD39577D864A925A7688EE517460008E264AE7FDC
+ BDC111596FB19EABFC79282C3A23B9609CB0F7C27920C8F63260DAE8A18AE4A6
+ CC228428A295B4022EEF7D4AB711E19A8A43ABD4A4EC9955C174BEC4C02419A8
+ C734DD06BE6795D6BD45A62D64115FCC4DC46EE5A6311BCAABCFC5BA43BD81EC
+ EE6784C1501AA97C51957E5D50AE4AAB7A37FDF7C041115C75B219CB6D96D7F6
+ CBBCC8E9931357F0EC3CC9847C4DDDF96E86EF38E81CFD80C28D78FCAE155717
+ DB398B9372C13EA41CA47E1CD57361F0A3BCFFE8B252059EEB98D42FFA7A7F64
+ 78AD0EAC41C4F493595747F1FC0AE72F6D0E335F08895FFED8BC078B005AF518
+ CC723762CEAABC199E214951073CA82922C68B7BB9DCC67467BFF7E5027E21BF
+ D8BCECC2FF0FDE00B69F10AA6F0AC9047F02772084DDEF276A4899423DC732BA
+ 3DE24D1DC6BA7E6E45DE8FE29DEA13C9D98106A56530EFFA3A5175F90F45FEDD
+ 1F88FAFB3F0C516A378C0EAC4D434D3489F74C00AEC5CCDCF46590AA9786AC54
+ D87524BDEE0D9E2010567FAB985C477B46E3530D0B199C9B15DE505D66B1D3D7
+ A32996982F85DA7E9F93DBFBDA5063A2E59AACAA1261DA956F7B6F04C16B84A9
+ C5B88D30203B99657C38888BAE2CA2DA7BDF41C85E493E75042031F8E29650D3
+ 861B55053E17193DD0F5DEF7711BC178978D75D326CDB77BA09115AB5E9467BC
+ 3AA8C8B23F76625755E1E6F7D522C5667EA01BDABB605351E9998258DDA142FA
+ DE3974FC26C4E2845C4CB99B0248F1D010C686D978CD17947AC7C721653855DE
+ D2A56DE260458B76063BDDB321D2DACAC86774BF00B4405743D34CFDD1E82559
+ 5C6F318A7670CE18AB6BA1CBF9FED85E64BED526BFEDE8194762E6E6025FDE1A
+ 44A12DB62FED7BCF27FE423F5DEC4F4B403F6FA55C90607C1BD5A21841F50BFC
+ B1BC3494C1309A97E78BC9BF84EC68138905B9842E01DE9472FDAD464EBB87C5
+ B2EC16ABDF0197EDA37514104B6BDCE20DBFAF34B9E2F39A3FF2C604D803A029
+ E35451C8188D99F7F0E9D79509B7355A05023685198520ED49624274B0C47A04
+ 5C7AA946CBCD3A7DFA085A1E430BA17480FC55AEEAD59C8CA67961C0E64E5F88
+ C9486212A5BF933E0254AF6E72406FC07C56F5A95A95DE4F86320FA9415DC20C
+ 5DAA59B8108FFFD759B2DB5760B442C522D3CBB03D9EB5B2BF96F09B18725B3D
+ 7D955F74CAFF79B484D0AF024A41B37882526B8FAB8AE3017E5E213956D41B6F
+ EA9D33653E899E39B91116B2D8B5C720CAE04E714EE25313CC7FD28E063D9658
+ D1F16E4743F494E01229826CDE518E563C5FD566A76E829E3765A83E761972BF
+ F49D5F27DA63C64E8969B1603D53D6ECF22021C842665A44543CC5D10BCAB416
+ C499AFAA97063749365E0AD5E5325778427067CA0B3693891CA36913FB78997A
+ 89C7E30EEC37187E2042CC97EEF2163667F2DF7148BBE4B20C0E128E06B68917
+ CCF8B7367C91237C7E1598C9B40F02E709A117DEDC8891415071DB11E8D2B223
+ 649C65F33D947DB0DD9FAACE546C749F332FFF8D62AEF2E95FE9FE16876DBD3B
+ 0F369792C733AE136D1D0D6D6B0FBE8CCA3E9A63B07655D7887455A067B79BAE
+ 42DBE07297B1FF3E9972A7C107AADA393BA7D8FE546A207AAD8AFD08D2F78166
+ 845A4852F14100CCA9D693E2D338797A8CFD71C427AFA6CB56E808A2CBFF82D1
+ 1C96E0CD59E730DBDA85DB7B89BED023698AB4FF3B3A8487089BC86C890F23D4
+ 0FBDDD5869EB17923CBD5134ABB78E3BC4B5228BB1378342EF548171A05249CC
+ 0E65DCE19F5AA16C8406F4833316A899A767E81288C98841A3C1839ADC40C53B
+ DC6A376EB45954B08BB76BEBF832957E8001F0B17440AF40A09E159D20F10230
+ 21EB217DC565042350D5251A224C4B633ED31653FA5ED9C10612D884C770CACA
+ 29ED75B82119C579DF99F8CFD117BF8F5FE39E9D4E592C63663C9A854F729FDE
+ A48094CDD9E0FE65E0528D97E691E585BD01B3145CDF71AD1F342ADC9C2F49C8
+ C8A3C50084840847C2362D97270D618368B4134DD46CE818F85FF92EC2108F3B
+ 783E9B854931E91D9EC92999D081F7749652C7939F9D7E0CE8616F120D70AF04
+ E4C8FA47A18DF3EE82E665E0CEFE51CA9AC2A37BDDF89F8A910442DA4F19654C
+ AE1A774695A4827F491ADBB47925438C7660438A41AACC39044E6BB565B6D793
+ BEC2B5B08781CE6F29164C7A4638EDF9700D345C5A02B626643CA18FA508F315
+ 79D3F35EFF8CD6805395B40FDD2D4A851E78A3407B560716B54380612CA3052B
+ FAF3F736992DBE4EC84FD8D15D6FC96884E9473EEF7ED232DAD6593B6AE819C8
+ B65E46FDB8EF933F05331D7EEC5CA1311CB61FAC5C88D4061F89D5DF129D8A29
+ 29BCC5489D70BDF5FE8ED17990AD517D01662D8BFA24D405DAB40C25FD93563A
+ 15436F51940368CC39A262A326DFD644FE4FBE2F708C43AF314647E680B0CC65
+ 41CE075DB74AF81948EDDDC62FEF7FA9A5E3567B8DD80EFFD58ED1ED84B2DB0A
+ 5B211389560620714F291A39B33DF22930FBD696BE31B74C0FF90725266BE805
+ E157EDCFFF61622835B789D8DB0D5E2084913E4CD37B126E61374649B011DE49
+ 9FD1B970D5D127429335141915770A0EF9662885145E22031E924D2F3B6AD56E
+ 098C9322DE903C03FA41F77FE32715C2FB22FDE50A726F543A85D27CB87B8436
+ 3C42C82D7D033B000981C13B34F79FCCB82D4786FC6D006787351F54BC3519C4
+ 59BC8CDAC7F3B6E737A555B56F823A8FE6EE8281F73808B6A0C0927753760557
+ 434101E9213CFF406847ABF5193396CE49AD779AA2AF1CEF4CA60B41975211BF
+ 33DCFCECB592F48C662A3824DF2AAC05BB3A8A6B4B12E8D836F83B32E098C122
+ 80D02F84F31359C77FCB851CA68400437E3D7847031CC02CA4510E58CAC275DF
+ 9B6E49B3763627BD9D84B8DA1E58ACD45E278F3F01B29B8C978EA8E8E8C568D8
+ E1508B53093C57A58AA9622E93519F79DE7DB3262C145AB79BE5823B7A0D05A5
+ A3A24EEBF7EF2734D119AD8E78717E05EECFF3E4293BC98D00B664D5EBB6404A
+ 2F25D37C2C8F81A72BAE406D7A982C8B57D66A9093BA90760A228E6D0C633B8A
+ 1403EF494A6B3ED5457D657FE5EED6966E5D82381E03AACCE67E3AE741AFD81B
+ CFA69D6E9F7A8A9394BAB598833BF436158F6EBD74CD52D03F1C5EC043DAA3C0
+ 92750E6AD8331F2E0B91E447990D39BCFEAE8B10F02560DD7F117C8BC15D1ACB
+ 1EB791690C0F9A46F0F6984ABD85DCCC04540236E1E22195961EF1263DA8C995
+ 54A7B8598B5106956A195622202AF0739B62E46D7B26480C6822B93280C05F54
+ DE812A94727507BDE42F0A10B7BB1182012441BB2A5F03C00820B4FC229C9EC5
+ FEE09AF26B4B470C5E86360372F7CA6A3D84689E30E77EE25CA43DA900A87398
+ FD6D7AA4CE77CF2C0A6554CBFF6749B10B17D5F72EA70F4F3DD5517C2C599698
+ 09D2715E346C35EBC0A206AFE419FEC1575AB38DEC892DCB0F07110C03A551C1
+ D67599D58142AE7B3D7CFD7BC1BB764D33BC547CFABC288A0480AF003C95DD30
+ 9B80D65FFE945845AAC546D7048316484BA0F1654F32C8CCD32D39DB6C8FE440
+ DE4E761CFCC7CE9981548B5245653116FA730A2491EDA1A73E26C6BB2096ECF5
+ EFCA66838BB21ECE5383EDC1DB65F73E7B6F96F335E3BC481E4F3DC215FD7DAC
+ DE913B06AC06977D612E89FA620DDD7FE5B43304AE242041E41105BF821DE026
+ 9AB475839019BDB330CC66BB745014DF2861322529FBF5429FCAE36F98BC5E34
+ FEDD95371FC74DDDA1DAD47D5AF5BE042D46A3E303E3FD20A21E9CB54D5005D8
+ 6460F07C6E0B8DA33A52960A15E8D06AE1098AFF4A818890215E043F1AB2F663
+ 1B4739F858DB267934E883A70D8CDB6940F97DAE92D4FA05666F3BCD8A474707
+ 6A0D2356E151D84CC2868A9710AF061CF452D4B85F8110D76172510E3156B7F8
+ 9AFCE6B304C7B3FF042068ECD442CA3C29EE13B1A5F25AA46F8FE777E910CA9D
+ 6A559467E9B92C824AFE83690B5334EA8805C8BB28654019AAC0133A92A87018
+ 1B7F13C7EF20DBBAB426498D4A1ECDF9F222C2DC3F204B27BCCAED3A64634B83
+ B1FFA639460D86F1932624A45050E5940029ED3C6D436B6659360421742E325B
+ 8687F15C5488DF19C52BF38BD5850B4D08EAD81EB6F7B44D7316CB2986E2B86A
+ 1EEA81C848088CC76AD8891D31CC20D93DE8BD3840F209EF4811A203875992DA
+ E72437CC14579369DCD471D0A1959D2E23607E1F4F8A91F4EDFE09111B777BAA
+ F5E1EA0B58FDB041199226CF6A18C2C71230C06B0418FE1C8AE044F5592988B0
+ 3B3A366751F326DC103755AFED9B2434E5DD0F5F6E92C758F0325BC3B06EF602
+ 3D837CB592553F1F3CA12720093FE3F0AB964016458760A5D35AD01E33957C1E
+ 01FD2E0FFC0AE147C30B9D5EF09A04984BB9380B44C518F10EEA97A4AEAD0367
+ 380BE0AEE062F46C4BA1500F7081526003195F261E6505397512041A58CC2A46
+ 4DFAB3745987176ED243988D40683BF9ED820DB4A7E5BF8EC766B815AB25CF63
+ F4ABA1A08A21AFDD9764276032BB97CF1B4677D54A42231DCE4BAA7EA6AF8AFB
+ 13C3640F756BB81F8C02E48BA086DD0E6E466F15C026F46B896C4C3EEE7A00A7
+ FE7EAEA5269A0E19016036CAC31DAC13A48CD7F96BB74F784DD94827C55874F6
+ 8BF87B647C7724C00B89149450ED0FB652C410C2039E78FD43B7ACD3B7C37DBA
+ 9F40468DE520F45973084D9DC7014F0445749E4ACF8C40300D5DC1733ED713CB
+ 78DB24D82E3DCAA46611330847219C2ADD285D3A67EF99CD1BD0A293BC0D75C7
+ E66093528B068E97E7783A69F5BCA8121D37C11F9B72B4C2F6C4FF0F08481F25
+ 9D50A1120F8F3ACF2B0FF72758E308CE2DA8FF47EB2C4127712AB7C8908B41B7
+ F929D05375AB990C2CD5395764E7D4A5548BBAEB811F4F824D7764623C2F29B7
+ F80A05802CB90F4FFCD094F121813A489236B17A48001E9EA9C14EC005A7C85C
+ BDABD10A543ECBBBEC1294F6B8E5075261E48EA14E5868825D34CC256AD864B6
+ C80FA54A7BC3BC3ABF1F8600599AC9A35B1C598754EA5E42CAA034B2E58FCCF9
+ 266A54BC856687FECE4E0AAC4A3C6B6778BD04987A0D9F507C2562BCCF110AB5
+ 72BB9A4BF0000D00F4700EAE3BEF8BE33DC1B5848A44D3A791F42B218F2A6710
+ 1A885F07691245FDA8475DC7EEFD323796BBD4A349C29B318E9BDEA5D8E04B40
+ DE1605C6441D46E4720909E0F5EB6401025417C7400E9DB8E9969FE235EC0395
+ 98390B2EBB72CFDC021C34467FA8CDACE644F0A8A796B9F12357494890171578
+ 8968E951D39DFA9541C22A6FA86F2B77AFF2FAAB15ACE791770E9966CA7F5AAC
+ B9E6EC7584987A077D5F78A6767EF98FC5EFD584C5938CA5FE2E267A82B2D964
+ 07E946783736747296D24D95B2415BBF6C22D0099B6F3AB0A87AD78857A65CA9
+ 17475BD6E0A9DA63777CFBBAC384E16A1B8B7935C25C0555656D508C629E0347
+ 0143CECBD1FF8D8CC35308CB363C46A76FAA0CF08668543482DFC3A4BC1939BA
+ 6E9C94ED55BBBBDFDDB55CA3A7E8B4582B1F34017F5A7F13A48803852D1CDCF1
+ BFDCB3DD604E2468D57C0E44BFF7F62995277EA49ABAADBF6C28C571AFE33402
+ 8BE87361C5EE40C871B4FBD811ECBD46D63275C8608A3CE46A84FC9B2B2B5851
+ 04E7E98C37DD88EA93CA4C092FEEA716FE97E147F86F0C30640968B5CC915AFF
+ 155FACA6437A5A35BB8963F15DDC6323E009236ACFC6A5D4DCE87380EBA3E766
+ 343936B4E8FECC60EF6461AFAD189EB418AA6129429D9F6BFB87487110374C66
+ 1883F136F5216CEE6C61ED9865AB29BF510E1E498F9ECB96A42E2F6C3C92348F
+ E76AC1FD082ADCE93FF4438973E570E76E93007677654514EFB4231173002805
+ E6421B56BA1C558116F6743FFCE591BC29E10FD449D15F7BD80F1E893A7C4187
+ 8BC1FE630B80D213B5E543E3DB537423FB5D00DDE3D56752D648735B2008F77A
+ A18F0055A9693FF1C26F9246AD3E32BB86BBF87D6F0FA5C19A06551358B62764
+ B8F9824934159D0FE95258FE68808AFAC1E1C78127ABA43E33C23FEADDE2161F
+ A263800648F4C2C962F58C033E42F941B7EAB4E6C14A03FD396C350BFF868403
+ A59CD705B4765D19C68454C3D643D98A5762407378438DC9DACE675D9B30516F
+ 1D9F9053D07371A3A7EDD0334B9C350941BF5CC6EC08C376551FDBAE63DA1CAE
+ 07933BFC7AB683529BA922F285B7D18B660E49DF07B644B94BEA635328AAB044
+ A71376FB681F108A441B906A023D7327A80BEB18F92495C9C1ECC1483F7D84AA
+ C296A5B3A0A28432CD530545FA36B9DA45CDD95DFAB0D819B9B7039C3B281BDB
+ BAC92D56A3589A390A9A6752D9912F163219FB4251F51ED37F0600F4F1785C99
+ 0F02360A38E96C1A9D4DE38B48E356FB52A9C14538259B0A4913ACA0326110D7
+ C9FD212F1C1B9C2F0E45A7679CB250682473D61FA86598DB7B972B6614E4C199
+ D11D5F10D7761D5B53EC577318C2DCB15060D51DA20232108FB2DD0DB10B404A
+ 43300EDDB3BAFBD9D2EBA28FAC872B97B10234EA2EB97CD74FA77586B721CB02
+ E9D104C08867B2FE0B9607E4BA38564463C19807C8DD6AAC8B4AD7C47FE68966
+ 2C85F77AA2F27D27814D7401D71899DABCA4A343EDB8307841D46C9A1054BF6C
+ 8503EBC00848C856907CC506FE889A978340744A5004BF0045917F2AAB092945
+ DB3B2FFA71BA250C2C40E0C84FDEC83FDEC833732C91CA1E6482E955A4EADD62
+ 9E6E2FE03F9FDFCE0D012983DD52F2CF59D04766421FA71C1CF7EFB6C9CDD354
+ 2D622B239C48CEE16C8AD3BFE2F8CF92F1449F321B150F4A0CFF712303A9CBE1
+ BC27519CDB84A8C58CB5FF2C4AB020C03B19033933F9B901769F977E5B8E6566
+ A68308A5FB0EC1D31ABD80846A8D10D80D2E32F682AD109EF0B9950EA889F421
+ 9A93231EA0825D78A51F80DF957C8308E6CCD24DF4F1E29B8D3CB61AF8359C26
+ 95EACE6493C1FE525B22D9479366EF3E9A8733D5B0E6D9B6C9E84DA684972988
+ DDFE8EF0B41825FF165A993ACB02276A921B0AB92772C38BE99429B3B55DEAA4
+ 7C77FA482EC1BBC02AC2FE595C6D79CDDC24394D137D61159AA02A044551B069
+ B01AE2BA0661E8697BB337801D7D898ABC41925E55187DB8A3B6137BBA1250AF
+ 68889E739B1424EEFD68F93E6D3D78C72CF987161B21E6E2C9013D56B30FC9B6
+ 1B64AA5B28DAB85D339399F9AEEBFDB315C94E8F53CB41ED5805705C2B1F4B49
+ 402BCCB0FC158038CD5AAFAA2132F74D48E98DA2CD91ED5DC1B21442DC24F823
+ C37DF2C02135C01117D2DA7B802ACB949A26659764D7E12371DF8309A7100EF4
+ FA22E607EDA69C5DE2EC15771EC4359EF5193532064D20311DDCD72493958001
+ AD6F3AC5983E7DCB56432F46EDDED81306D357E87A801F80062B13A2436D70AE
+ 190C1F0E9A91AD5380946F5C630FBD438B1B5812F126BEA3D27FEBAF0666E97C
+ CA3E6CE7955FF46A9E1B775B47692E375F99C121845704EB0374B6844A094890
+ 62E55B4345DF3ED13F00C9FFA9B723AFDDC729560EEFF1CA8D17273CD3FB7992
+ 9B67312D3AC12BD79ADD4E06C18F8A4008C81683248D7221FA94F0F1C57FB6F0
+ 5E91EA3120D0EBEE097C41C493042C380097EBF751725D27CE9E78D05BB72D52
+ 3938A3F84801B4DA455AE219EE99E007E8636E2619CDD1F3F5AE58CB0BC9E3D8
+ C07691E72739550F42DFAF826D1E6B956F02B5B7F178637CD80F8AE714AE04F4
+ 9561E92A9E4B385A7237BCB804EC0C4535F2A407D8E071C2BEEB1D5CD414423D
+ 7001EB575147374F577E37230A74F1D5532D52D8567B1B707785D59DEB104289
+ A1E2AF4244CF3F1AFC0078F60BC6F9585C05092AC64BB557664CBE8A9BA34D45
+ FDBEC9D250E1F3BECE691A4785B9FB0B8F231494709752A466433D671A529DB5
+ A444C4A4ECCC5753537B77803FBF49FAE61B667C85B2FD69ABEB9CD8FB517FAE
+ A82A2BE837016BA50C575887EC68AA2603D0B482E3413878AF2300CA393CA635
+ 9B38A0115416400BE0D74276B8F37587B6AD88355180A891A1B5BEC45908B7CE
+ 80046C96A0322396DFAC559021C6135C4B5F19F8D0FFF0A0A05BF5A31810370A
+ 7A27502BABB381B39775D44010AA4BAC610EDB7F6EF37F2A6EE206A04F4B58CD
+ 14133217B5FC72E1A51CC76EDDB1E53AA11BE2BFDCB43F5B9F0B846B9C20B006
+ 9A5FABAEB15E2A455D6678D0EF527609C9FDEDCEE943DCAB1D8CACDF998A5F04
+ 7C195116A6AF06A594F5EA2C0D344D55397ED52CA594184A047CF35BADCF2041
+ 676E70012AD1F142BD9A514403EC554645B7DCE79DA164A484BFBAA04DE6E0D9
+ C68E495F9B4E5800BC441A82535A35259D083DFBFAC285BA487783664112BC10
+ 973B6B4D37554DB788141DB2D3AA325CE6FB667A4872A5948F971834C0C61AF1
+ B8BBDEC9971C0EECB5733261AF2DE070CD20F9DCDB4D851232AC7EA60996BCF1
+ 7972CA67B4577E815E1E97C586B019D29D3E4BB48ED7B7E6AC9827CA0CDBA01C
+ 55AC6CAD01431B606F53CC7AE7979ECD20C1074BDE91F473AB5EDDA6F0D64557
+ 87CDBB73F869BB0E544318FFAC9C4D0F1E6A83048625FA8B02A486AB42A9B83D
+ F23544F75DA3681F4EC77C57618B557BCD991EE79ADD557A837F05BA8435C1DA
+ 6F31B253FA80BFA2135C64630AABB0384F2D684774EFE1EF31473367AC6602C4
+ F597FD0059814378EE5D118E1332B496773D2EF16781D921FBBE597D7C507075
+ 6B61B142D5C7FD6E101CA062EE63C61554862233952709D0889B8EF23EBE89FD
+ ED5A8752E86804674BE5957F905AB913EFA354060EE949ECE9F3365DDBB65EEB
+ EAB70E97A9AE28CC4F19AB9C76DD0A8EE44912D49CD543C868544AAD5F8D121F
+ BE7EB0D54B8DD130D94A14F24DAD841B6075F8A87DABDF8AD334B10586AB83F0
+ 5822B862E7714DAC1A6D939A456DFFC2BB5FCB54EC37E542DB5A6850E9BE89D2
+ 152162EE773411C21CF2B496B426CB5AEE76ABB12C2966A5C30629D5DEEDA6DC
+ 586378481551ABF497669B061AD1519C4416F61D9DD985FF50ADB8C9C0DF8221
+ 47A24380D8B48CBCE377AF3C188A3F99123CD019B8B4FF3C6BC7368CD16E6E14
+ 3F15CEC50F7A56F49F7BF46E8988926736AA4C0E53B7B1495DBAA493C7AAB729
+ 03EC033C9FFDF8CACB4B7338312B67546F2AE8F79A6C80BD728ADAF2D1297C32
+ 77C44CFF158E22B1163D44601B50E7D644926C3C34E91FCBD2457033AAA23817
+ D61394D397FE7663054727483DF12A34092CB606BF0AA77399F10FF5DD317BB3
+ 471B09A8F2AEBDC803F169F5C9F154BD7F464129F0B5FB00F2E33318E769EC58
+ A9CC02CC57BC43C2D33A7B92A38F27AC16CFAED5A288F769B5D2B6E8A611F1D7
+ 0079A1058423973B2F787BEB55F044F494AB16342DB0AE76C68B5151360D6177
+ 038EC62E11E28CB2CAF776A0217F1DAAED2AD630E38E6F8CD04E5DD421FF55C8
+ 58000457AAD6D576DD977D334BB82A41AD1BB01122C8ED167913AE56D59E641B
+ 30A04B6558BBEE054450D569CFA392BE137A652AA4E1EA586A9CBF7BE6509A8F
+ 6BE29C7EC604D2218AF03D376823192322E8926B672DFEE893307E5786D0B060
+ 216078ABA55D8A88E0959C843508731ECA219C4FE6CB9B39E5B07DA08F4BDCF0
+ 1A4BD0174AA06F1838803F63041C8EA9C452D4E401A93F66AE706067DB9DC2ED
+ 82E9890721C1502A44CB77AA16B5ED702F7CEB116949BA14839CDFCD67615281
+ DAA1B9BB259A3F454D7BB7BA6561A19DF0EE462C0815122B3CEB6B06FEE421CF
+ F9F843A72A0D9F053EC4B4F6BBEC61B627649D2BE4FD83218D686B3F234348B4
+ 8D4C6739728698C676F0109E0C043AED95429B980859E5783E012B46711820EA
+ 6303555A73C0DE45C1F0B435CB12E69360274C1A8EEB3193BE46D5F17FCD785A
+ 9A2AF6121ED80DDEBFCF006E0DC3CA578886766DBF1AC22B8FC02ADD76172DCB
+ 2E2B4D3DA6F5CD3C2C012E276D2DEC311996479CA1A0F29A39111CF7B0E40A58
+ F7F276C23FC59CC61599C85CE932429ED99DF5C01D4A79CC05D6247FF93A316C
+ 9086B58AC6B1420EC7A10C059077D2B30CA63129B0DE762A85EBDDCB3226018F
+ 678F58188332542ADE690905D49170FAA6F3F6EC9B170103BC3E9679D5909289
+ 1F528C8BE533C6C1F7618F640FB5F036FA111E40ED2893AA4CFB22DA15E8681A
+ AD914F354A7908D8C5CD9D11BB8C2396CCDE11E5D415505CD80DCE13976A6C5F
+ A5192C259D87087FE076136E7FD8185D6D77265961303E5F3B3E324ED9F8DFF2
+ 39BA31EFB5995A506B04EE545A88CD1E2DE9D1B65F64AE22F8C5C0B68A08E277
+ EEE0F16F6875B276D80D27A4A877A1316C6E07926276D9750C482F9AB4E41226
+ 7631802D402C367879CCF7290D3C0CE02A074C1E2074FC1DF130FC2BCB4BA3D9
+ C6FF084396E4293A6A455F0EE919DD74C14271FE4B5D8CE6CBF83CC6F0872C46
+ F5288387D11E76B3CADBB21D9BA8046FA46328741879182142B992CCBFC7D715
+ 432E88BD2935EEAAB134A75D771CA0F8988EDC0F821549F753529E0FD6FC84E1
+ 95C51A4EE57FD2F33F2649247F6FFEE62EEE8611C5FFF8DBA2F19F44B5675B55
+ CDF1EB710E5960134932124EC9A74C17B9F78006F34EEDDF4B2CAA56C59C9706
+ 13324F55578E791870D777B62B6BCB203D415CE679FDFF81047159CC09E29B61
+ 71F4792E986D97542E35BCBE1A4E8AF04286BB685DFCB4302B75213F8C945149
+ C386AED7E150A62CB97B5B5E2B234793CA68C8796C4E83F55FA300FF11427942
+ E8C7A5DB5D1BE44F58E746E38F95CC783EBAF9E06C638C619E16551D33E77F51
+ 1E582CBA4F34DEE196EC8ACB3249B4525CC0C94A840AB339925EAFD705ECDC03
+ E2F11D8309527BB8CF44E40521EE0E80079ABFDA124C988445095EF9A479DAAB
+ BDC3DB3DF506DF12355B47A644B5EA21CBD0F66AB79AB6CDB87F1F7D142B8CE6
+ 8FCBA9D56E933651A21F464A10AAA3D33040E14BA44E35902451543A2DE0E4CF
+ 2F94E14B66C29FF395003A800208975C8B12D9CD408B6BE39F94A1B6FD739A51
+ BAAB5F01A001FB24B09E21CAE1CD342AF32C15AC474E84DAF571B8C5B3BA277A
+ 7A59AE7E798B36C42CDE0435F57FC6BF9FE327D7AEDE3C8F78F5DB14EE20D8A8
+ 1425FA9F1D417D88E915B326704C6F2640E9538D4645746D386E702AB479503B
+ C26615110F4851FCF0C56314A82D97DBB1ECF8F6DAF4FAB693449B0649819FD7
+ 2749DE0D08CBB3B75BCFD258064CBAB5F48B2F6404C36EBF8F6BD90CAE8D75C1
+ FEB3F259B50F3D52DCF33867155668872DE3E09FA4D2559C85474CAA8A4AB5CF
+ BB3DFD0DFE36677E0C7A496CEE2440DD3346C480C3818D0FFDA6B8A227A2CD30
+ 48B82C2D2BABCCBF115A229812074F1811CDEC7D68FDA32C454AC2800F38F861
+ 5A76E3B1DD4D05AA8DE64C7F276FCF0D990DE2AF4D66A40AD6BD0BE8B69891B7
+ 7B8497438389D3CEAC1EF4476778CB9D18087538AA03D59DE78BE7E7D7FCA204
+ DEDCF75FAB49ECEDF2B7F8F67B18F73D7E219AF9DF3B4DEF0BD3D455369E2BAA
+ 02F262671BBE5BC9B6A193AB26EE51043F61D73FE0C972DE9112F009820BE067
+ ECF446E96A229FF474D73AE198F3E53C015EF361697500F3480C56E8C371CA36
+ 00CE20B15FA4E540ECDA47018B817628E5586CD8A25FC74AE80498B5A4D20EDA
+ C38C78B2C62BB872C0C0A04FCDDD493F3CC5C4D6769544ACBA0CCE16E78B8E0A
+ 2C2024EED4A98148BDEE797A5120E7BEEFB5CF2C36F92CB124B3D164DD0C0603
+ E0FE7260B46F8706AD23786FF3D52B02071C93B484C0BAD42F9CCD70AF92A36A
+ CF589F82303C1AAD6D45E08C2EF9117537BE3CCAC6EEEF623352D931B833337E
+ 8E66F9239B24B51625E89C5BF0266B8C56C22A9452751EF3817C989557D21B1D
+ 35FC34E208EED1113165DED480A3149C7E905EF56B6861EF1864779818BCCB64
+ E1376758C15F202B67EC2CFA0410136711C9D7B0DBEB352A2BE5F7EFECBC25C5
+ D2089DDB215B49DD73CEBD616959EFBA201F0FFE319CA8EA4631DEF2C774F133
+ E8EA2D8C5A92145D382AE633F3BC4DC480141D273F2992172EE3787C625791CA
+ DAC6380266589A79CBC1663220DAC3D3C2B2F7F56CDF5894DE243832D7DAF228
+ 0AB6F1A11A867DCEB98AA191A07B18331374DAD9CFC44A8C257BD61ADDCCCAFE
+ 75AB380D00793F2F45476762A3000F7E7E2C4F2590E23CC791178A9C1DB0B1DD
+ DD9E60B7A1E5C7D4FD68707E8F508A69D3DB19BFCE1C05CA88C601EDC62AACD7
+ FD32E75669F6A83338F852E85F2CD6C7E8D42D3F1BD4CE1E706599E0035C7A65
+ 61A5D2E3248A4670099A9FB399D3F595F96F1AEC78D2EAD95502F920C74B5DD4
+ 64EB4645B4D269EFE40201064F461BF018C3A322E26172B66D8D4670C77BA741
+ 56F5C6EF7A28DE74F7F1C3A9F4EAA43A105CD9395A33110C1142CB6ACF5DE8D9
+ DD8203D0ADEA0F839CE51261AC326E3404149D4B5AB9DAB81B186A866F40E19B
+ 61B2B8C8EF88557638F09653A91854152E5D79D3BF42CF421A4950674D60DFDF
+ 073042D4D7B5B8A334659FFFC107199415C4A967B51145F8AA8A75DD003FFF01
+ 17E175C69D6E15DBD1A91291134DADC1E359C4783DB70C510E223993C5128B5D
+ AF5EB90D01D383ECEC8ECC58B36BC770054FFC6227C1205B8749121E6D523524
+ 7E599D4BC77B64064F8CDDDFAF7A4E7FD542AFBDE2476B758D465DC0E33071D9
+ 879CF8E886A4A7C7F5155DCBD4094A2A3C77072CEE2F9AAD3C134B16C08AFFDF
+ E3BDC6423956ACDD00BB9A5E2A368F1D38515462DBFC6E1AFB66E8B14701738D
+ BE402B53EE158082940951A430B5C2B66CA56B59793F28BBB778E1F8125E7ECC
+ CB22A580E2D4CABF884388DDBF136901272952AFF3822CA43312F097922E1DE3
+ B678789F880E3B72ADAB92C724EC3E3C35E893B8DB006D53CBB0FFC0D6DE1A9E
+ 8E88BA93B087CF382CE52BDF0BC80EBA704481E5C00E38007689D658210674B6
+ F8B3937958C9C0F2309095F7C618D532C5E4A6CEAE3F12C9308C63516F15C656
+ 6413EA12ADEDBBF9632F5517C58628DBCF2A07D600CCEC42A194B276866C8A62
+ 84284829D5F9E8B3FBC3CC2034D21F7DA3E989F366717BB1306B288F0D1A2B55
+ 29F915976E635433F8FA8A6FFED3A155AD592DA9B0E3169992D6A8D2227A4713
+ EAB2A34366ABA2381EB8EB55A0EE52D17AE9C15612ECA3F522CD2DA66D970DC6
+ 9ECCB4507395306894F6388BBE4B435A2969D4DB3EE56E38C0A820CDCA9C7258
+ 1F692709C2BE0CAE40B9D647B7BBA8D76BA3AFF94870798BBA7F47CB4993CEC2
+ 6D89A55A1084DC14CBD7CABE9B562B31050857FA1D1FDDD5E97BA8ED51A883BF
+ 2B50F5456DDA8C6C6A3343C87F2FB09127220AF5F2DF635BEA0EAE94203B97D3
+ 6A7A846795785C61A76927EB055110105616991AF777B421C7A6105522326134
+ 64C7671E8959A741E0F9821A4C99BB3EB3DE4A981A4F8237AF699CE353A03063
+ 20D37A7B23E8B21759AB8C32F09C1AFCF3C339EAA3D1899CB667CA91883F2AFC
+ 60E7BDEF542B7211EE9041F99B7628E87D8980
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR10
+ %!PS-AdobeFont-1.1: CMR10 1.00B
+ %%CreationDate: 1992 Feb 19 19:54:52
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.00B) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR10) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR10 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 12 /fi put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 65 /A put
+ dup 67 /C put
+ dup 76 /L put
+ dup 84 /T put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 119 /w put
+ dup 121 /y put
+ readonly def
+ /FontBBox{-251 -250 1009 969}readonly def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+ 87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+ D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
+ 92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
+ 295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
+ 409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
+ 4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
+ 2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
+ 0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
+ B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
+ 24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
+ 43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
+ D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
+ 5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
+ 96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
+ 7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65
+ 0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830
+ B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D
+ AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007
+ 97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8
+ FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5
+ 20759B6A4C4466E2D80EF7C7866BAD06E2A1040FAF2DE1FD6AFD5FD97EAAB614
+ 956897A7BC784E9865B00EE8B49B918E886049F1F4939403EADAB83A4D8C332E
+ 2221AF8F6F4A4954501CB6A6268AC96F7091245F034BD65542DF47BC7BBAD667
+ 1EE6AF9187E298CB7AABA58E3FB5B4C7E86616C1A830A4A937C265CC28A83EED
+ 8F3C971D6DF5A50A615B713F5332E0CF05C754FD76916FECE4DB2807334C34E1
+ E2418FFF1B4429A564AB857F1E23337C75E729645AED52B51C319F277F0FD789
+ C8D5F56EE75D274F2162F53AA09B150479161D8B2F5FDCEA0020FDC7A51E4AB0
+ 041A3247EB7E667B2842D65A5E184D7383D4B7034808F6E4E32CEF72DFAD9C60
+ 730CDB6C87A6D571108A5969895654C00A5F30A5F801DB459733371B4B292AD4
+ 367DDC8671EC48E447C84A11C0CD332175E5278EA0678603F85C0F3013AEB1B2
+ AADDB2337DB914580A9547B6CDB7F4CCD34EAF4555F34F8023B15D44707987E8
+ E672F486552480FFE3D56EF1EC01FC6D89CDDD2FD96D9E404038CB57A8018789
+ 80B52AFEE8453D49DBB6803FD753A9E426992ED6BC8BEFEEAD4C4AF3438178B0
+ 28CA1BC3EEFB3E577C48B5548AF39280B578C57F15D490AD2A1F44086CC607A3
+ C6D949B40B3A0B8C69D1FE3312433EB870B0224ADEB890A1F91618595AB6D1F8
+ 3CE05BFCE07CD6D6217E179578AAA193C571717B4FA7C39135FA6AF8A37E66A2
+ 23AD7465B8FE68AC6A224CD1B57589498FDC2377DF9A80563021AC68FA849DB2
+ C5CB25D2651BC6E69F910C1D7EEC7D07BA988D1F42E5DB285D218CE09359E378
+ 1298FB5E27FFB9A1BEE3797F9864877AEE1DFE25B380D2DFC3330A4ABBB38166
+ 5AB77EA188861BE3D5CF2E122D404E43E4E25E8938E4BAF2BF8E26A9102AD330
+ 1E68CCFADBC48C07DF7899C4AFC426774F1A0BAD6AFDF2E9F54D2F40874801B4
+ 4BB8811A921F540589EA7ABF3A210C4F42D3F97C6EE56522D30CF69D79DA9E03
+ B02F842F1C33C5AD9CD2FEC1D39CBB99D46FC06CCBF858A7F49F5081F1FE0DC6
+ 176584227E9165DA6B799DD6A3FC970C6FF1A28D3EA96ACC8994A395EA7F1A0F
+ BA8E217CDBFAD61CC2A8C80A9ED14A027B59CB9A0F4115D7DABAD25BA46B4A78
+ 6F7366B3F761DE28689BD1B5D3C5F6E15F37C80E22544DB907BB47E6B700F7BA
+ B45AAB772AD411097FAFBA60B4D58E706E4FF1BF4950ACC82C9F823E55277F27
+ 9CC71C8C4BF533A0890789109D42C5F7386DC72DF4A4C75B722142050FBD77FC
+ 29CC7333B96B5F4727160E8EC16CD5F3329678A6FBB32F32A5F475F9A9FE2CF9
+ E66734A16FDB148BC3CAF746006CD8754EA7DE2800ECCDED9D7AB50E603A6D34
+ 8312CF2381A83701459703EDC1997945B71BAAF6F7CB7B9F375FC6986592922D
+ 95E19ACD91A868E588503E8F2E1089A52FCFE2D6B31C71D543AFAA541A98E666
+ 2E477B00A4A14AC54F71EA2AC32310E0C262BAD2ADAD0679BC48AB1E20C16AFC
+ BD7DD5A0A0F4D5B3A0FC5D725990B7A81B9401066D1153018A625409760F278B
+ B4577C5930CB6AF43923F6BB7883EED264DD5DD39165BA81DD7DC2956E31E39A
+ FE0645143A805C6E8CB768D28E20A31D10280289CF1DCE711E4E3F3D9B386D20
+ C12145D42C7CD0E993DE8C2160DACCBAFBE5BF2EE5D9D9502BE60F9B1F51530C
+ 1A82FF429FB58DB740F2216747664D5FEC2EBE7225B9B07E5208D2A4E79E68CD
+ B8DAB60CD03C9C15A6C4C0BE4FAA01BDC06AC69C82503B14C2D5A0F4E04D9F28
+ 75ACDE0302C25159847CB9F8ADFC0BDB56A06AC6943F8AFEB07673BA05689F45
+ 968F8C1554BFCD88AA852522BE6A2A171CD69CC15E89304A97B6E2875890DAF0
+ F2178F0F8C7CE776C59FE5B9E8A8E2E64089F346B2BEDE69F0C0A7E15FC4F4CB
+ 17B4FA9947BF627EDE250A4F6B9D8EC7818092708FA80555A88EB0FD1AFD89BD
+ A675F08BDD3F8F006D490C3F5CABB1442F7B527DEBC199E52C94E501021A9563
+ 8CD1113DC1465ED58ED3C66A78D419E1772C5AED50498429A57094A74492D089
+ D897F03C64BFA269642A348FDB3C0160F065CE9493FE979C1B27AB5014B96234
+ 822C84B723561F243537BA4CF06420053F7C855B61BEA0F6F6230991BEF54D78
+ A7DF8363A3F62E9D49C209A43AAA2AFF2E73F2C32E0A097B335DCDA71D2F9F85
+ 29203FA8B81AB927A9349F63A6C45E0B73D743CA86DF515962F21EC208F954AE
+ CAC23982C247C10314D07C7D7235DA5F9570BF640233E9B2BCB534EC6CEDAA6A
+ 5E0B636194F6C7733CC72CDEBA558476410AA6BCC4015F6F76A6D9D012432ABD
+ B922EA46170A17A575ED9EDD178B9B3A6D5C95B415DCFB27965E7941C2A34FD8
+ CB181D426B4268D715706861879A3B09111AC8A6193A1BF305FFC1901D36D001
+ 7020942DE8162AF81EAF5CC16EF86B9EBCD9CDEF39A8A802A93E22170B8D9E01
+ ADBB97A6F0F0D9043E6577424FCB4F36DD0D6F1371C2D8D902ABF52BDBA0F800
+ 058B077351402B2C80FCD1D997F21A3BB6F90CA1B0F658EC34165D628FA5A2A5
+ 38E590DF8AAB1860B46831377501A06AE1F2AD48F09A5303918F05A9FB387153
+ 7FB55D56AE4B14D930675741B072679D6E4DEF8193C75111312F602E3C8687E4
+ F639D8076F6D22B23D97A7E6E231B9B6921BDA3FAE4C4A510C1F95C9C303307E
+ 6DD5D2485BE8E85D23B6AF0C0E948A9A3803A7D2F385F5C6E9D73F6DFA46F21F
+ 5E1A9357F46C39F17CBA6325D9B4E614693A2D6AEE3B21AC6FFD85FE51124FB8
+ B0A13A95B18DD49497D899F46CD0CB4AE8094E78EEB3C932B3B81488F5BC2983
+ 8DC1A4E6B4D1FDB26018AA4682EA4A6F330DF7720C9C81EB96EE7FFA4BA5B990
+ BFE8DB107BDA2D2614405AC6B86E801176FECAF2F10E56119A4FAF11AF7BC210
+ 4EED3E898B6B272005772590090CC129385C59B2C43F12BD09C47C4F0FFFF7C0
+ 53F64F131E8009BBEE67BE3DC2A6161D255A80F0A4FF8E00A43E6FD654F1FCBA
+ 3059932243BE4EE0199B397569EC419C127B16BE6A48FF5037FE83F5934AD0C6
+ 5E3CCE6C5AAE64DC3889929573C2EF99E08C04011E95E3D6CF214335D8A4E70B
+ B1E63C4B2B928597675F41419CE2C94BD8D7BA3A7E3FAE3710308F6583A1AD32
+ 49FA3269D105421D3AA7C55AC5B2F85A218F620C537EFE334CBE0BF7C6C73A19
+ 9E6C2EBD77303FD504BDBCC48E9D781C04CB602A0E8ADD0510C9B86856E55FF4
+ BAF5355EFF583168A24BCAB83E5A0D64D5A190BCB15D41C3BE17B699E044E834
+ 99D3759ABCC7A892E168BCBA4B3FAB3C9A5FD73BC232D856390E32B9F1752575
+ C74DCA2C2897F12F0F4656A84F0432C804FA67A432FD928D8A58376B3811E194
+ 4121561D82AB8D8E972A4FFC864B5D1F8B898B1DBDA081E98056F19CA3D6E2D8
+ 225C975887D736D7FFBCD65CDA789AC1FBFD8B22B2E6950DAF8BE38C8E55DBD5
+ EE9A67B3464AB53F305ADDE4AB8F6704659AA70CEC6B3B88DAC393C4D978232F
+ 9E013CFCE1ADF4A1330256B6EA6EAA01DD23318F706323DB25F426B95D77216D
+ 74CF17E039F2A692EFAB8A0917D4B13F9F668FA7C4BD6149A5163FB4296994F8
+ D491122436D5D57F067DD6EEA6B5535EDCBC4273CB0AFB0DA38C9D9F2AF1CEF3
+ CBCB2DCE6A12E646F76FDE18F6387CA59422DF7DEFE0F9280562AF06989BCBF4
+ 10B69988DB4F5DB5BE9B971952FA42B3078CA48AF2D5AFE9CAB55A97911FFFA8
+ 9A4FD1919A6CE6FF1141D86DAAF4DFBBC627B33FE2DFCC8541E31A38C4609CFA
+ EACF1272B625DD08D7599FADC7083307C56C407E85EF843F9EDBD62323919464
+ F648F96D855834984BAF25326D59BEED50C27BB6D04FD9E6ACE107EDF3F09152
+ 6947E15CF71789EDCF7B03AA905B84BCD5892E18AFDEBBCE3E75699B138D7847
+ 1E95BA6130960B10A4B5CBCCDFAB71843D12D5B909254959A23A42789F27FCE0
+ 1894D6D44D16631A0F317C146D1C4D337B7735408DB42A6E35E65FB035E2971B
+ 3ED4804BA7CCFEB4167BB468F16EB3772295CA8EF9D1681D7950CE55FFE8E1F2
+ 0C6EF4838D119497D25D3A54640C99D5451F2DB31ACF34FE5A5E2AFF75199671
+ 8BC45D932D8A747B50425706FC6C76D00FAA1149607343157B511E2F463B83B3
+ 25638C26C169A991F31462A274C263D7E608F21308737759F2271DD1BFCCCA9A
+ 34FA4E40A75B08D239E5AA13E3C67F57DC22351300AB1E6F5BA15D3C89752AFA
+ AB4A89E335D39752122477C4FB56988E8F792F2D8A3622DDCC01F592D1142CE8
+ 2021CCA09465F0F41299CF3B8D258A0E1488953B18B3DF731A2D06B0165B6843
+ 71C6C8B65908CE53B4106298652EE0D378B620FCABE70BC5E048C6118656EDB3
+ 260C6455850FC332DD1301E8455B42828FFEB9F1FECAADAEB0E1020338A8DA30
+ 8604FE055AF8EB6F923BFFDDEF5A2ADFDC26FC3876F6A96AA623B54EF7CA74A2
+ EBE338D0157242A02DE8C4F853969F824EDEE32D7A7FFAB23CD89567CDE1E484
+ B6F93AFDD1D46E44DD09851E6E7737F2B4AEBC000D7B33510FED6EDE1D324DBC
+ EE614150B77BE0956D6F3999946F7CE64505E4462146B85BB530E7BBAD82F1E2
+ C8B0427C2BDB62640E2FA47B26E880390EDDE834B614F92C0153CFAE2EC1D21F
+ 5CFAFA0F4F725F2DFCAAD5BD2A73727E977E54E3690C654BDABCBCC8DE116429
+ 4B4B477AAA08E4D5845101B0F7D0BEA7B465B6062EE8A8ADDB93B62480887431
+ B546BF3AB12389E543CAFF47695FF1BE241F832E45FFD2349E8D39B75F7EF95E
+ AFF7F3694325EA57F8938241856002704ED09DC3B0E983E72F514BD96DE5A09E
+ 1316ACE95A495AC3C893128B8D01707940C1560C23F7C3599AD859C6058D59DB
+ D17CAB26D9EEE8824CB90DA6456382CF48CEB3C7939E69BA1F121F76E8E47522
+ 391F936D1A9569D1F4097B1546BC1CAD7CB1D6E60F7D78662CBBFAEAAEFC285A
+ 4CD9262E659DA0AF53D476B80F802EB99CE982C85A0FBC5CF4B216D9BC542D0F
+ 25C25841CA586989B3016CD088677F115C6029247D95EC74ECA05F2E27F321EB
+ D65756A381DC8B0442F957EC4C801F3455B63E819D337538D1E51EBD9F2EBEBE
+ A3796729B6595F8F29EE446D054A6220805E2DA79C45C2956E5E873309D6A77C
+ 355152731F5BD4F433DF82F932B4EA30C6FC0BBCE7DF13688A52C766F6C6470E
+ E97350C11419F16EEA07EBBAB6F310B5B420C48E9DA728341C8BD22282B4FA79
+ 85565EEFF206CB5241CD079E14AA4DE1F34ABB8119BAD0D243CE40199917CCB2
+ 3F7B724D63D049CBD37FD584A51EF7E53A3297E5F9A8DBA58CFB6746E258BCDE
+ 736FC713DCCD72DA48C10C8AD3AE303A4E6E9A29015859716797D91966EFB182
+ 956646EF105813B5C2D4EB2B043487C74FD81A959F64044D600F9B3D929E6CB4
+ 88D253E29BC3F5C36479BD7BD13902FA803471C7FFADF55DF0553C8805B0096B
+ D35AA468585EE5D21988145E0BA84882C0A84E3DB3AECB7EFF802842B63DD28F
+ 783B7197C2D70C037482B93BB4177696CAD35EAC803FF86C752D773655CB83FA
+ 99549EAFDC36827AD73A1031C46A8046BAB228D0F867BC33ADA72A3B76CD0B72
+ D94C5E0C16A84E503823920009C055C3D2889C2145300587C51277D55F545D76
+ 5DA03A17AC572E0954914B483350FF531BD77502787E1FE3473D6222C37E1446
+ 941C3181C6DE6E7CA2892E977098760A0C3CCCB70C6E7D6C99231778CFCEC8B6
+ 8FDB6D70786209C78BF9B44FA7E3E297A797515D8B7EF5A15DE317C98D652836
+ 3CF417CCE42F6F7F6C50C352FAA2838246B8DDCB296722EE047A1687B9287ECB
+ 1F1639C79243476DEF2CF2D3316EAE043DC458FA958C4036F5B8C6D155135DBE
+ 35EB8F3AAB63F6A045305B79451E0640610A274B4732CA5CD77F64F8D9378445
+ 5D4E0B4B7129D05D6D84027DFCB5E173BEEC3AFFF7557A743E2B1D53CDA9B830
+ F67022AEAEB60BAD78DB4393BE5436BBEC0214E19E38935EE95E17D25950B80D
+ AFFEEE14FFDA2377802B0ADAB8680190E91C48BFC367CC8B7C279B1579E58978
+ BEA7B519637C5E1538AA41327EF6B16E2D788A6E3763D21EE46CAE455E2AACC1
+ CA6459610AEA736646CAFF7C9DF484ACAD28D0C07BF74725261E7DF7A43AB4E5
+ BEAE90BB3393DBE5A0F66D0D72A1EF4189B280157AD6BD25163E40C65B4D9DE0
+ C69480842AD55F6E4C81713DFEF7BD54A8824680B549AE971F5849A62CF496F4
+ 27AD0003427BA68FBD3B1249ACC47EDCE42941ED2F7284F0CA723F079F055FF0
+ 5496474F09BF91A50D606691A155D122EDD41A612386D09171B36092EAA5AA98
+ 994C826BF335F59C6186DB7EED2DC45070B1686EAE2236C7CB62F533C8948CE7
+ 296043810FED86D93462FBDEBDB7C94AEA44DBA52225BBD1B7CBDC1B377C2424
+ 8754F837D9A1861C0981A27A7D1BB664DC495AD95C3FE9384715C65A49358A8B
+ 6963D8A6D148B3C9DB61C2D00535E2DD735A698CC269AACEE5C0CDA8D5705401
+ 782279FB88673726599C3ABEE28B947F1CF558B99AE80BB580F330C7203C4EC5
+ 6DF3E7630C012B8565E5A56E038261C8BA7BE5109EF6EB7351F14139E97344C2
+ B1D256F51DBBD6F104D404175A372B055250D6B16F8B1E33B8ACEC05F55E9540
+ 24FF7A890F05EB86D38B144DB86C27B56B46172EFE0A0DAB6BA64CFA90D46EC2
+ A403A2BB455ECD1AE6BE832C88CDA1CC51A1F38FB0366F0B843F4F67D7758F3F
+ 1D020BB9FB3AB71A5AF4DA742B94BE57B6BCA1406EEFA087C872470B249E9E7D
+ 517CDC51A82ECB9A3748B661931B3D65E2BC8A378B3B74C9E80FF70CE0ADDB42
+ 3B17AA1F1890763C3DEAEEE9C83B2DBA545E01968BA00B8B388C435796A37132
+ C484CC148D216800F67C1970D6C14F12EBFE842D32B148D39E06FC176C4FD21A
+ E44F2AEEA1F6E06C0A9D8C06C1DFA627A24BD35BA7B68BBEDDB25B0014EEA33B
+ 045A0B85BEF4325432DBF0AB714834A8EB1B4F94C33B7C9DA73F7ED9605B6164
+ 77762DDE94338BA9F5CFE99168CD0EA2D836522E6769F73A104D9622CB3F18AB
+ 545BC876653811F4613B6B528B7BAD7F232A5320FEB2D9185D4DBBA47DE847FD
+ 3A0F19BAF289104348F90F6A82794737C45E9438E21D1CC620324A21C400C42B
+ 677404BE528F68846E4C89675CBB76F6FD20FF0A593931473FD021BA78089F3B
+ CEB657595322E89E066242458E9C3CE6E6DC54F632FB4B8719C429AB6B76409B
+ 93EDF64B58BA7D83BE1D21367D861DDC41DBCA7E5E7A8AFCCE26C1659FD58C96
+ C493C613440492426A3AF5597CFDD817541D03D4A6D88BACB632D39AC3AA19EF
+ AECE2D29D81A0393F2A97A6992797805DE65A19E2B65AD7F72E7A9A5F88F117F
+ 437D1B9BDF95625E1E76C8B7EC7B94DD53DFB66FA51549EB6685477E5BD081B5
+ 49AB3BECAD5CB3D4DD4B56340E23735067DE383289C1720290680D1F77598B6B
+ 378FFA5ABBB5A87A4D22085564F8616913BB7E07521B67C9FC268FE3228CA49C
+ F26B92C4F433B78DD44C8CB4F0423EF5BC481C44AA8FA15280875E3B2B7A0052
+ 1E36E5C84BD6B09752FE7FB8F94D66FF16A76B04FC65754B3C9710CA5FF23F7B
+ CCF33A76DF9690E8C90417E8FD99C39D773F4EC5B5442D8D43D97373E6982672
+ FAA56E997D74F328EEBBA0A29BC7DC28FEE02C48A180D60716F979F354B42928
+ AB03E1AD54A63461EA2200685F6AFA28A005530A4C1FFFA94DCDE5C3C83FFFAA
+ 3EEAB024CD5F14BF27C61AD944B5947C22A3CD862D6C1FCA4C98E37BE07B1E3A
+ E47113020469B2B481F063099D74403CE20423739D8586D619696023F507F607
+ E6B3667A9796831D20B2F18ACABD25E724B8CC440673F79A457837B1EA4484DF
+ 092BEBCD74E473D955394F3FCD0C8D18E12863D1555B4D84596AB9C5ADDDF927
+ 65FB3500FA7D375DA07F4333ABE05B69CB603C4CA84B81102ABA52D45D1BDB04
+ A638BCE4E0D6BD2FA2E857742BE0F412595B3DC66CFD14E49481666A3286688F
+ 1ADD11AEA63DFD245BB52003B978C29518895804ADBF546E8AC43957EA50838A
+ EFF79ADF78EA9199A8DEE8713DE4B28AF51842FBF6C2048D1239D68FAE3351ED
+ E3BDA8E9FF4AA952F7A9820BE3ABC3300D7037
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMBX10
+ %!PS-AdobeFont-1.1: CMBX10 1.00B
+ %%CreationDate: 1992 Feb 19 19:54:06
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.00B) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMBX10) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Bold) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMBX10 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 65 /A put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ readonly def
+ /FontBBox{-301 -250 1164 946}readonly def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
+ 7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
+ 77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
+ 2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
+ FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
+ DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
+ 7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
+ 9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
+ CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
+ 6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
+ E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
+ 8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
+ 3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
+ EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
+ 0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
+ 4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209608D3976637A
+ DB9C73EB3A28623DF758C25574D740385B2C3D10086AEB904A33DD76DA2CC4BF
+ 7E37F9117E9D81D3EFDA12D5BDF0067450C5A8A53959C055C5D6087F1FE6FB5D
+ 8306F16FAD71AB986320F1229440C63ACB5FA24E41CFEB12C2BEA2C25E59A3F9
+ 6CA5B7A04B57F2471D36F5B41E6363DCEFF2DFFE9131F044125884739392333E
+ 15418156EEE8DE92EF4C176742032FE8889839755D8D821CD7F8FAAF8A22C283
+ 19F79216C6D454A864898EE9F830DB5F3372B8F47C464DF19C69ACB3BC0566E2
+ F25E7FF148B2CDA2B90CB5884440F464CD57295728A4415963CC1BC0635BBEF4
+ E812CA5E0E788035873D05616F7B0F6A30D36BB285E7955CFD860345F16D952A
+ BF2F7D2702DB352D0874442B2074859EB49313BC27E1067D627362649D82A5C3
+ A57DC5041B1A13FD2FA89D875019E23C31650A25CBEEC6B93C575C363FAE2164
+ 76ACBDCDFEFC8B7BD24AF41D55196DF6FB2F28DF88349947B448513C7E832EB9
+ F35B28EF86C231336351C1F89AA9AB1F8C02D0DC35746E97C2B29B7A44CF7418
+ 89DAE02563F58C453F45C231219FC9727D5D477B256530D4492AE7E4E3CBA90F
+ 50E8BAF9435EBFDF819DA9EE1F6F67A0D65D35E3D0EF63274B611B25756461D2
+ BFEEF8BFD513B0380993B8D52A6546D69773D67A15C059E6A89CAA2772162509
+ 3B054860006DEA20685F5E2937C95B50D07C6316ABC08495EF319B36F8E48FD0
+ DA482F82D2D981C70ADA2E467608364EC664D151BCE2FDF571BA63FC926CCD72
+ 052D4F83933A9585C0E033CE579227FB5BE2D58E048044B5BB6869ADFC2E03C7
+ AC062D709CC07D8E4377D75506A96CEC17A90E1FBEF6E3778DE10A910F346C4E
+ D33D753F6EC32D638BBDACC51CF22379D24C2A0780333AB3CB5A612C14381B3F
+ B7E42E841B123CBBBA6C33C080F9C6D370A91F29A4CA724B9809042BE9B2EDEA
+ 366C4D17F80C7923C9DFEB1C184DA0C0396BB3AE8446D1FDD7C76397076DDEAF
+ 4FB188394902EAC1B9126016723FBAAD27AD91C44C28F1D579989D8C3B5D6AD1
+ 1647504F2F6C38F1786DB3C9DE2BD6CA02D74451FDF6161DCD51706D62B383E1
+ A1E9F0D97F9579FFDC844710C4D9EEBC5F048B0811B8F3BF2BBA45C9A57E7B27
+ 48BD0F25113B884DA2D1596E14FCC7FE2B528806F4D61BB6A6D34E85AFF5193F
+ 7B396AE95ECAD67587C51633CB0F12327BB56E36C5E7EFF9437D80C2B337A480
+ 3EAD6F51E3475A8638B233545B633EABEA2EA89D7CD3A073FD32A1C5DFEE4ED7
+ 402DCC2E2CC4AC399619B272A5456E735F1044685EF0EC8BA6C242D5A029204C
+ 6E32D78226FC39E9222F7AD77F162827808F98CEB740B798BAAA7BB865A33D74
+ 7F9BA33CFF09800B9AA6510B69D56879E622C0DA900ACDC80ABF49DA8FF037C1
+ 10E4895F9E7F4B8246CBD2FD28AC913D3B0147C581341EA56830AF49D0B7687E
+ 80D121A40423228D29D5F22A9F22913FBA87B15F41432F959BEED884DB1C93B6
+ 7DE4552BBFFE84C9E2360683DCB43C0E681F0945108743BB6575CB7309C24A67
+ 2425339DD052C60EC1078B0A616A27ABEE7E2497AF4828C7BDB575A58B6030FC
+ 0E85DE84DC7582B90A52A3B92603D9E4B7783927AA86E4852AD73A6778EEDCC3
+ 247CBB6E1BBB86C623C32AE9423CFE9CF0B18120586C175EBC48D9316EA60EB1
+ A5E3FEC32F161EDCF932F4AF7AA246C3BFE8FF0D713C6DEB68D4C6E4CC875527
+ 05C9DD26AA09E678D71CAE88708E18524FE4BBFF93985D4914C4130240161786
+ 3EA170867A7B84C2AF727C6395F693149205B4B08CF2FFECAF913AADF8E8FEEE
+ 009D99E3CDD6E87EDD3650E37BED4BAB4FC0E7D6492BCBCC5B7BE50E721FCAE9
+ AD4184AC780A88FDE9227023DBC0D60D47A1307331CDE967B5384758D67D68AC
+ DFE77637CED76810EEBDBFF5BE7B3E72DDDE5EDAFC0C112D9DC105949B9AF343
+ F60AC374F17A4C35B1BAC99AF1E897F4E0931B574B69348D42329BA8486541D9
+ 8977C18C5919612C1194CC0DBAD03A2514456D0A9B60E0850B082B1E3EAD85F5
+ F7F7A0E88EE7C3A54718759E4791CD9E8E0F659CF2223314F0D423151ADA8AB0
+ A37AC3679F0B449A6B891111F80B5F656F1B639BA1733E612F2BC61EB2FC561D
+ 7F570755DA4BC31BDB57069853A329F96DB79B0BC62EC34CDDDE440F89F72B5A
+ 01084E5E358380A85E0DD49CE5EB0D2D854B7A5808CDFD7D0D6EE65BFAA92397
+ 537A2A18D8D9062206FA378BACF63A2AB05E06803F242F7F0D44B7D9ED0E8B7D
+ 0E38326A92527306BFE035911B407F4E52A3C036BB4BE3F3ADB9381AA6A9148B
+ BE42436D9C6BB6367C54B5B8723F6D6A313FB1C020C34A3DA5200227E2EEDEDF
+ 50E0EA92CD11E476448AEAFAE287D1AB2FCB2288515A49A7AA6C177E404E094F
+ 4FBADD50A28D9EC02BA53198A90DFA1B0A32540587368812EE69E5CE2A3DE4DA
+ 7EE49D0124C490096FFECBE1C84E657C31CAF3F935AA5568833661EDCF12D007
+ 8EA634F61DF6FCDD443EA994B595F6D273BEEE694BAF1B63BE00D2815DF3B09A
+ 51650B9103C36B83967C7D53A1B272CD0221BC568868B41827EC6104520C4EAC
+ 5C52FA8D40709369FB0B16C6671F636F0B7F0136E077665F380A81FB02EFAED1
+ 69BCDCA9B8B18883475AC4CE73455A5892E90D0FA359B778A55BD835DCEE1082
+ 880E07028E61A7217C1CF8349AAD2B2BCF68C59E74DFA32AAA40824BC9478FB6
+ B30E20BEE58CA400C9E8F89E875D6B2B358A6C916BE058F33D363537E1243FF3
+ 11F1BDB339D9413911FABEFDDA7CA25C7B769360B335953B1186EE2430243F1B
+ 511B6B1F4016A98F4E56E58F7F0F6B945C59AE0FFA3706A4BC08B9905BB78E70
+ 0DDA17F6BC111D17A1883E5F47846B37075745C761F5CB638C7871B2ACD35FDB
+ 004738456B5FEF221F047117E1102EDA7714040C1A1C489F09D31F312438414A
+ 87BB04D6149166DA0C8718D00C3D7C9B8BBF0CB99DDB32C4B1F7F62F2D9D97EA
+ A248CF577B9A47EE40028B51D637AD
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR17
+ %!PS-AdobeFont-1.1: CMR17 1.0
+ %%CreationDate: 1991 Aug 20 16:38:24
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR17) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR17 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 58 /colon put
+ dup 67 /C put
+ dup 80 /P put
+ dup 83 /S put
+ dup 97 /a put
+ dup 99 /c put
+ dup 101 /e put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 107 /k put
+ dup 109 /m put
+ dup 111 /o put
+ dup 114 /r put
+ dup 116 /t put
+ readonly def
+ /FontBBox{-33 -250 945 749}readonly def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F075EA0A10A15B0ED05D5039DA41B32B16E95
+ A3CE9725A429B35BAD796912FC328E3A28F96FCADA20A598E247755E7E7FF801
+ BDB00E9B9B086BDBE6EDCF841A3EAFC6F5284FED3C634085BA4EE0FC6A026E96
+ 96D55575481B007BF93CA452EE3F71D83FAAB3D9DEDD2A8F96C5840EAE5BE5DC
+ 9322E81DFF5E250DEB386E12A49FC9FBF9B4C25C3283F3CEA74B8278A1B09DA7
+ E9AE4FBAAF23EDF5A3E07D39385D521547C3AAAB8EB70549756EBA8EF445AF4A
+ 497CA924ACCC3DD5456F8E2C7E36946A5BF14E2E959895F7C94F49137256BE46
+ 4A238684D52792234869EAE1A6D8ADF4E138B79472D2A90A6CA99E2394CC20CD
+ 3841733046175B20CEBE372327BF13428EED6A3E2FDF84C2DBA4B0AD584EE9DF
+ B51828D3B8F385846158C29C9AC3496CB9692DD10219697B2ED4D425C3957FD8
+ C4600D76E045C561216EF05D38177243C314877A69A1C22E3BEC611A2EE5A216
+ 9B7C264CF6D1839DBBD78A40610F2C0D7C2FE09FFA9822FF55035AD52546970F
+ 83EED2D30EABB1F303091EBC11A5379B12BB3F405E371519A53EA9D66174ED25
+ A2E55463EC71A97BE4C04B39E68112956117C8252DB6FB14AB64534B4BCD568B
+ 246DB833982B38CDE7268BBF74B6B0C18091E1B1F87D32D66F4DD023D1F10D2A
+ 7736A960F72AC01F733A11023832CD68FB6288A5977743F781214D8FA9C0C3F7
+ 80001321D4397771F728FD9EE57CFE7D9192B887EC883EB1505068261DC40089
+ 7B7D2820F06515CD74513521F6397FEAB3AD3572D9A8269430E407E357422461
+ 1785FC2782047F4C0339D79B16862D939F3A37F78E4E2174E4FBF132539CB760
+ 207999FF86F6A3EBE48EB0A1CA635450FDEEF79EB16D853F3BF4B41B05588453
+ D4417AEA07EB3348CA1A966A79C33123B0F93E7D01E200BFCED9C60B86F7D131
+ D6350A63AF4505C4A60F0FA4F4B8BD56047A3269F1E8A3CF1F675BE52929E17C
+ E33E66DE59E5ABAA4B85D3B2F1040F95CE7C290EDE34C96130ED331FE9C276A5
+ 30342712664E23C2957E172EA090368B31C782760015B314AADAEEC9DFB8A1C1
+ 38BF7F6D44AEA35D9CD1FF642C01F7E36A8E85E119D3B44D7078AF65FB1C9417
+ 97FA59214C1B346493EC85AC39A8ABDA36D48EBF0E920C283D261DFE5E1BBFFB
+ B2A7B1A8D2C722BAAF41F9B03F0A69F157E261DE67BA6F1C4A8DB980E43E2CBE
+ 598BA5DEFCBEBF5836D823FC66BC83BDCED6D1F69615F55CD3930E2E2BD49BCA
+ 63E4F83F4F448C13AAF18B01AB6F0817A56307AB1D4912AE9B327457A0EBADDA
+ CA9B2AFC8917FBD7B1FCB1BA4572BC44FDB52819F721DFC90835801DB7442B60
+ DB89245CD0859D798980CE37724FCE60F4696001405CF63963B4E76E65F3D1BD
+ 00D175E7C8669864185E8906B76E9A3EFE5CF097325CF5D264F4381172964F14
+ 558DD5053FA13183276D51D9D01BDDF0880B6CD696486972984FE13693A3EE12
+ 562B523713E95C5A9D9B4716825F3D5C8A61297E96D11BAC1FB1D1BAACA485CF
+ 3ECA8BA2D261A7D156D262349F2AB39554C19BA60A118F5E5D98EBB58F4E76C1
+ 3ABA32A58C25CE3DFD46990C8E1CC36D4B0FD11D9E9E927DE9A02986C1BA0020
+ F5215A5C7A7308085DC9735F76E4F09CC8DD0AA0552A76C575E4A145F672F564
+ F8C05D189FC03B4509532FB68CACF0ABB6AC6CEFA910C4E10B77806F14A7A417
+ 49960F50544CA0886F2E56EE9A04D3C9C2C1A6C945E6319E51C9C7C664B901DA
+ 273BF9E9A1951B966F46B9B4577673786FF3D3D283F49698FDBB84A88BB68A71
+ 13E9B78BFF2729F7588F7F0DB608B76F0295EC3FF8D2EF5CCFF0C07B01DEB053
+ D414A9B8C735FA860C13547A7B349106145EBA5FC0BDFABFA0E0466CA475A3B7
+ 0BAACD44D7C33EE374905D9CABD070410A01EF50203243ABA5789AA7FD3F05D4
+ C2015F7C19EAED2B392D7280BF66F8628BE5342914B2C1C189120218207F495E
+ 53AD7386900F68065741BD18577B82F392E3C83D53F946A984CD17A183332C97
+ 37686DF148050857B775B2F0C8F3D0D3A95895E3AF422C918C5A3FB203AC2DF5
+ CEC07644C0A70F877D132E274E4D8B964D3FAAAA653CEFCECA95D92F2A811227
+ 8C8CC38E09A54B064946CABB2E97D30D8CDE91570DBA6FAC49D4B4623A27F170
+ 987A29FE287B805589183279D3768860054C7E4B1AC9AE2E0C3F211275B57922
+ D954F391CF4BDCA91A8021AD21D1D2FB341C5EC6405B4B098F3CE57A506DE9AD
+ AA925745A318DDCD5EA6966E355C34434F9E8D9F6D0DFC1640294E13BE8AC5D5
+ 7FDA13EDA62AD70E898328D80EB3CEF977B9D71B43B68B07C62DF965E90E81D7
+ DF74D7D652609C08070DC555681BC1E581F18E4FC9C23A5737BA2F0D8E18DE56
+ 1870B21F67B6F07DD0525AD2A82FDAE846462C97727D135DB7FEBCBABBA3806E
+ 9DCE6320867C270D69686C5B99DFE40B99FC4E34B6D4DEAC3B85A9A58779AF60
+ F576C92CABC9CD4C9B9CDAB45D6EC847DB77B7EB705E2CB76F294972E83ED24F
+ E6B20A35BC70BC363737992C6691F82A226620D10AA6955E80D9E08E41BB7488
+ 4836A16BBEC99CC830491D9CD15B32F64E9C8D96D06A5BC40CE943EE6AE92898
+ 7139014BA31765686BE9B71117667F89F2ECEF228FED45F7BEB7C086EA1906E7
+ AEBA8D8B04677043F4FCE166118A0FB000340051EE91AF3D11D62E26EEC35333
+ CDD62C6694160F316D58DC89697B6705157F1E88828BDEF29DF25E555AB0D906
+ C941D1473D1EA64C95EF1CAEEAD494398329763F75A67B89A0C9304AFA25F070
+ FBD52F1B2FF2BA76CF33F8214955FAC03204DE75C7FACAE42A6C2EDD9FF270B5
+ 254629A1FE3773C82A01F4ED59C2E98367480E3F576D50EFFD540513DC9AB623
+ 7F8B7CA6F0B37FF6E8DC04CCED2E9D791D6BE10920A82198877D3D8570A6FAE1
+ 577A7079160EB9982A4FD308766DF5E54BBA5E8C2CBFE0C7450D8374B7051B88
+ 3B3D6A7E09FFD920EAABE8A7DDBCEA288055057464CFEB57BCCD6E32B2C7E10B
+ 43105364B25E74637BE25173B674BBC0A5B667D153898833A97A92FD602A0FC6
+ D213A995B7EDE1DB439C1193E185A7EFCF3D9736A8A5EA859DC5C2B61804EE22
+ 54F097B73E8655633CAEDF547A618F8A79224A8615FD2DDD4EBE0F56C838944C
+ DB1E8D6055B826069B10152AB6F1C347EF475A5A7F619810B8D05E8ED1F1CFDD
+ B1B9C2ABE6321D9A85354B6E8AAF553830CFC835B5E590C6EBB42DA6F80F4269
+ 79D66614517B99AB55B8B6BED7FFEE4BE00EFC71BFB545745A929A70739E0E82
+ 78C5E15DF6DD79457E13202E2A911FC533C90C9E5B6C413CC60B9FEFC77BF45D
+ 6C531E2549CBA84D62F804B9789AC8D58F8CDFD1DDB6189749BA98DF2BF98E5B
+ 15AFD57A790227757B40038112117734A9EAF8E53C578ECBD549A4C0E1B879DD
+ CAE241CCFA974590A226407AE7D8E454B82B471D9AA643351B304BDCB6A0CF44
+ 8EBC7FF337DA8BFF54AC346633A13F8D5033CF35C38973BF3858E120BE515190
+ C12844834D4CE13515DE76888E4C50236FD1CB3DC96576714FFA8CB8277E77EB
+ E1A4BA397B7505D4804BBA88446CC32714B1DB113E4A4076DBFDA6D3098F425F
+ 5FC438C47ABA521FF14749220CC7B711DD0CE8B0A10CAEBD4BBD3306B396F645
+ A6BDE21E35D8A7CE0011B8E6F652461F7AC3BE2C51BC453FCFE400550D5EC206
+ 64E0426B15DB76D98E5F8F5D0BB1CE3BDAC5706D6347056145ED995997D5A6F3
+ 8AAD096B65097C4A7F747A6E7A9F63AC53BB0A46A730E539026270C7F4763720
+ 94D3C7D451CEE38F9D85CD36A9E0C89AB31464106235663E1A642BC4DDA68712
+ 5F65115B60E6F37FF437CF5F096D85EEFC31C7EEB5A452D4CBF46CE4F0E07E3E
+ EC63508DF76C165A2736B51C7AE2C4D38872F767E1F06D089053817B06867F1E
+ C827929D37B8BBD517F0F3831224184D25AF5C841E56D2B8B20CF1C603BA14A4
+ BAD17C093217AD77C893AEC5F6FB51568BD640A0C8375AB042EA638F3AD94BB5
+ B9FEB2BCEBEFBDFF51B21C6903951BD9E9A1E540F6B3D626FC9D2A4EF8E96236
+ A5A190D5277335DABB393F11211C01750390F7103E80F5F0A317A5507AEEE20E
+ A57A42CA387919A77EB72552E8FFBC161128940D979FD30EA2E7DC46F42C55DF
+ A710F768DD87055A399AF3832725552E25327BBDE54A63026F571CEF9CD856C2
+ 6F06AA22C3B53A7CBFEC9656F0301729E45582C9BC3AB37D8F173E1F4842BAEB
+ 7343A6EAA5597773209E3549991EA22CE2029890E0DE2F5127A01F183483652E
+ B65D9643309093E9AB75B25466148F5CCB5B94B9CCDAB0AAE89D36FEF845B6BE
+ 31666C1392E9F68AB8FD255EEA40892EB61F06A14E48455C3B940DB951B19411
+ 62C4B3CD33B7776891DB1E05B532070F8C80DF057AD9C42308E188A1D2F0F9D8
+ F5EA5A0625337DAF66F7CBCE69CBE5DA51A0F2E323D54FEEFB1A1AFAEC84CCB8
+ 12634EE12962E0C47D2BCEE0787773D2145A6FDC10
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ TeXDict begin 40258431 52099146 1000 600 600 (thesis.dvi)
+ @start /Fa 133[40 47 3[52 32 40 41 1[50 50 55 80 25 45
+ 1[30 50 45 30 45 50 45 45 50 9[97 2[70 55 71 1[66 75
+ 72 87 61 2[38 1[75 1[66 74 70 1[72 10[50 1[50 50 50 1[50
+ 50 30 35 3[40 40 30 75 38[{}48 99.6264 /CMTI12 rf /Fb
+ 134[52 4[52 3[52 10[52 101[{}4 99.6264 /CMITT10 rf /Fc
+ 145[43 110[{}1 66.4176 /CMMI8 rf /Fd 152[50 50 69[100
+ 16[50 15[{}4 99.6264 /CMSY10 rf /Fe 205[35 35 5[55 43[{}3
+ 66.4176 /CMR8 rf /Ff 134[48 55 9[58 4[33 6[41 51 36[76
+ 27 27 27[58 30[{}10 99.6264 /CMMI12 rf /Fg 130[51 51
+ 51 1[51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 1[51
+ 51 51 51 51 51 51 51 51 1[51 1[51 51 51 2[51 4[51 12[51
+ 7[51 51 51 51 51 1[51 1[51 51 51 51 51 51 51 51 51 51
+ 51 51 51 51 51 51 51 51 1[51 51 51 33[{}61 99.6264 /CMTT12
+ rf /Fh 134[71 1[97 2[52 53 55 1[75 67 75 112 37 71 1[37
+ 75 67 1[61 75 60 75 65 10[102 2[75 100 1[92 2[128 81
+ 2[50 1[106 85 2[97 96 102 12[67 67 67 67 2[37 46[{}36
+ 119.552 /CMBX12 rf /Fi 131[98 49 43 51 51 70 51 54 38
+ 38 38 51 54 49 54 81 27 51 30 27 54 49 30 43 54 43 54
+ 49 3[27 49 27 3[100 73 73 70 54 72 76 66 76 73 89 61
+ 76 50 35 73 77 64 66 75 70 69 73 1[46 3[27 27 49 49 49
+ 49 49 49 49 49 49 49 49 27 33 27 76 1[38 38 27 76 81
+ 1[81 49 27 12[49 49 4[81 54 54 57 11[{}86 99.6264 /CMR12
+ rf /Fj 134[59 2[59 62 44 44 46 1[62 56 62 1[31 59 1[31
+ 62 2[51 62 50 1[54 9[116 2[78 1[84 3[88 4[42 2[70 1[86
+ 81 10[56 56 56 56 56 56 56 56 49[{}33 99.6264 /CMBX12
+ rf /Fk 134[85 2[85 90 63 64 66 2[81 90 1[45 85 1[45 90
+ 1[49 74 90 72 1[78 9[167 2[112 1[120 3[126 4[60 2[101
+ 2[117 12[81 81 81 81 81 81 49[{}30 143.462 /CMBX12 rf
+ /Fl 134[48 1[66 48 51 35 36 36 1[51 45 51 76 25 48 1[25
+ 51 45 28 40 51 40 51 45 12[66 7[57 8[66 1[68 18[25 30
+ 25 31[51 12[{}30 90.9091 /CMR10 rf /Fm 139[41 41 43 14[46
+ 58 51 31[79 65[{}7 90.9091 /CMBX10 rf /Fn 134[62 1[85
+ 1[65 1[46 3[59 65 1[33 62 1[33 65 2[52 1[52 1[59 18[88
+ 1[73 1[60 18[59 59 3[59 1[59 3[33 44[{}21 119.552 /CMR12
+ rf /Fo 139[61 1[61 2[79 1[133 1[83 1[43 88 79 1[70 1[70
+ 1[79 13[88 2[108 12[115 8[43 58[{}15 172.188 /CMR17 rf
+ end
+ %%EndProlog
+ %%BeginSetup
+ %%Feature: *Resolution 600dpi
+ TeXDict begin
+ %%BeginPaperSize: Letter
+ letter
+ %%EndPaperSize
+  end
+ %%EndSetup
+ %%Page: 1 1
+ TeXDict begin 1 0 bop 720 951 a Fo(Chec)l(k)l(er:)69
+ b(a)52 b(Static)g(Program)g(Chec)l(k)l(er)1486 1246 y
+ Fn(Nic)m(holas)37 b(Lewyc)m(ky)1620 1479 y(June)i(7,)f(2006)1743
+ 1846 y Fm(Abstract)704 2014 y Fl(Automated)48 b(soft)m(w)m(are)h
+ (analysis)f(is)g(the)g(pro)s(cess)f(of)g(testing)i(program)568
+ 2127 y(source)37 b(co)s(de)h(against)g(a)g(set)g(of)f(conditions.)62
+ b(These)37 b(ma)m(y)h(b)s(e)f(as)g(simple)g(as)568 2240
+ y(v)m(erifying)i(the)g(co)s(ding)g(standards,)h(or)f(as)g(complicated)h
+ (as)f(new)f(languages)568 2353 y(whic)m(h)30 b(are)h(formally)f(v)m
+ (eri\014able)i(b)m(y)e(a)h(theorem)f(solv)m(er.)704 2466
+ y(Chec)m(k)m(er)j(is)g(able)g(to)g(\014nd)e(t)m(w)m(o)j(small)f
+ (classes)g(of)g(errors,)g(one)f(is)h(memory)568 2579
+ y(faults,)e(the)g(other,)h(non-deterministic)f(b)s(eha)m(viour.)42
+ b(Lac)m(king)32 b(in)m(terpro)s(cedu-)568 2692 y(ral)e(analysis,)h(c)m
+ (hec)m(k)m(er)i(can)e(not)f(b)s(e)g(applied)g(to)h(real-w)m(orld)g
+ (soft)m(w)m(are.)324 3025 y Fk(Con)l(ten)l(ts)324 3244
+ y Fj(1)90 b(In)m(tro)s(duction)2419 b(2)470 3364 y Fi(1.1)99
+ b(Static)33 b(Single)h(Assignmen)m(t)54 b(.)c(.)g(.)g(.)g(.)g(.)f(.)h
+ (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)138
+ b(2)470 3485 y(1.2)99 b(Basic)34 b(Blo)s(c)m(ks)41 b(.)50
+ b(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g
+ (.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)138 b(3)470 3605
+ y(1.3)99 b(Con)m(trol)33 b(Flo)m(w)g(Graph)95 b(.)50
+ b(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+ (.)f(.)h(.)g(.)g(.)138 b(3)470 3725 y(1.4)99 b(LL)-11
+ b(VM)34 b(In)m(termediate)g(Represen)m(tation)59 b(.)50
+ b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)138
+ b(4)324 3943 y Fj(2)90 b(Related)38 b(W)-9 b(ork)2353
+ b(7)324 4161 y(3)90 b(The)38 b(Chec)m(k)m(er)2413 b(8)470
+ 4282 y Fi(3.1)99 b(V)-8 b(alidit)m(y)89 b(.)50 b(.)g(.)g(.)f(.)h(.)g(.)
+ g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+ (.)g(.)f(.)h(.)g(.)g(.)138 b(8)470 4402 y(3.2)99 b(Addressabilit)m(y)47
+ b(.)i(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g
+ (.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)138 b(9)324 4620
+ y Fj(4)90 b(T)-9 b(ec)m(hnical)38 b(No)m(v)m(elt)m(y)2106
+ b(11)470 4740 y Fi(4.1)99 b(P)m(oin)m(ter)34 b(Analysis)d(.)50
+ b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g
+ (.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)89 b(12)324 4958 y Fj(5)h(F)-9
+ b(uture)38 b(W)-9 b(ork)2348 b(15)1918 5251 y Fi(1)p
+ eop end
+ %%Page: 2 2
+ TeXDict begin 2 1 bop 324 548 a Fj(6)90 b(Conclusion)2445
+ b(16)324 881 y Fk(1)161 b(In)l(tro)t(duction)324 1100
+ y Fi(The)44 b(\014rst)g(stop)g(for)g(c)m(hec)m(king)h(a)f(program)f
+ (for)g(errors)h(is)g(the)g(compiler.)78 b(Mo)s(dern)324
+ 1220 y(compiler)45 b(design)h(fo)s(cusses)g(on)e(e\016cien)m(t)j
+ (algorithms)d(for)g(fast)h(compilation,)j(with)324 1341
+ y(compiler)33 b(w)m(arnings)h(coming)f(as)g(a)f(con)m(v)m(enience.)470
+ 1461 y(I)d(examine)g(the)g(p)s(ossibilit)m(y)h(of)e(using)h(mo)s(dern)g
+ (compiler)g(tec)m(hniques)i(to)d(pro)s(duce)324 1581
+ y(a)h(program)h(c)m(hec)m(k)m(er.)45 b(This)31 b(is)g(built)f(on)g(top)
+ f(of)h(Chris)h(Lattner's)f(excellen)m(t)j(compiler)324
+ 1702 y(framew)m(ork,)46 b(LL)-11 b(VM)42 b(\(Lo)m(w)h(Lev)m(el)h
+ (Virtual)e(Mac)m(hine\))i(whic)m(h)g(pro)m(vides)g(a)e(C)h(fron)m(t)324
+ 1822 y(end,)g(an)d(SSA)g(\(Static)h(Single)g(Assignmen)m(t\))h(based)f
+ (in)m(termediate)h(represen)m(tation)324 1942 y(and)32
+ b(man)m(y)i(di\013eren)m(t)g(analysis)g(and)e(optimization)h(passes.)
+ 324 2231 y Fh(1.1)135 b(Static)46 b(Single)f(Assignmen)l(t)324
+ 2416 y Fi(In)22 b(source)h(co)s(de)f(form,)i(a)e(program)f(declares)j
+ (v)-5 b(ariables)22 b(and)g(ma)m(y)h(assign)g(and)f(reassign)324
+ 2536 y(v)-5 b(alues)37 b(to)e(them)i(throughout)f(the)g(execution.)55
+ b(In)37 b(static)f(single)h(assignmen)m(t)h(form,)324
+ 2657 y(there)h(is)g(one)g(unc)m(hanging)g(de\014nition)h(p)s(er)e(v)-5
+ b(ariable.)62 b(The)39 b(con)m(v)m(ersion)i(is)e(done)g(b)m(y)324
+ 2777 y(de\014ning)29 b(a)g(new)g(v)-5 b(ariable)29 b(at)g(eac)m(h)g
+ (assignmen)m(t.)44 b(This)30 b(transforms)f Fg(x)52 b(=)f(1;)h(y)g(=)f
+ (x;)324 2898 y(x)g(=)h(2;)33 b Fi(in)m(to)g Ff(x)917
+ 2913 y Fe(1)984 2898 y Fd( )28 b Fi(1;)17 b Ff(y)1253
+ 2913 y Fe(1)1319 2898 y Fd( )27 b Ff(x)1501 2913 y Fe(1)1541
+ 2898 y Fi(;)17 b Ff(x)1640 2913 y Fe(2)1707 2898 y Fd( )27
+ b Fi(2.)470 3018 y(A)h(v)-5 b(ariable)27 b(ma)m(y)i(b)s(e)e(de\014ned)i
+ (as)f(b)s(eing)g(equal)g(to)f(m)m(ultiple)i(v)-5 b(alues)29
+ b(b)m(y)f(emplo)m(ying)324 3138 y(the)k Ff(\036)f Fi(function.)43
+ b(Setting)32 b(a)f(v)-5 b(alue)32 b(to)f Ff(\036)p Fi(\()p
+ Ff(x)1934 3153 y Fe(1)1974 3138 y Ff(;)17 b(:::;)g(x)2198
+ 3153 y Fc(n)2245 3138 y Fi(\))31 b(means)i(that)e(the)h(v)-5
+ b(alue)32 b(is)g(equal)324 3259 y(to)g(one)h(of)f(the)h(v)-5
+ b(alues)33 b(in)g(the)g(set.)44 b(Consider)34 b(this)g(simple)g
+ (example:)426 3487 y Fg(int)52 b(x,)g(y;)426 3607 y(if)g(\(condition\))
+ 529 3728 y(x)f(=)h(a;)426 3848 y(else)529 3969 y(x)f(=)h(b;)426
+ 4089 y(y)g(=)f(x;)470 4317 y Fi(In)44 b(eac)m(h)g(branc)m(h,)j(w)m(e)d
+ (ha)m(v)m(e)h(a)e(di\013eren)m(t)h(de\014nition)g(of)f(the)h(v)-5
+ b(ariable,)46 b Ff(x)3279 4332 y Fe(1)3365 4317 y Fd( )f
+ Ff(a)324 4438 y Fi(and)37 b Ff(x)573 4453 y Fe(2)649
+ 4438 y Fd( )f Ff(b)p Fi(.)58 b Ff(y)41 b Fi(is)d(de\014ned)h(with)f
+ (the)g Ff(\036)f Fi(function.)58 b(In)38 b(our)f(example)i(ab)s(o)m(v)m
+ (e,)h Ff(y)f Fd( )324 4558 y Ff(\036)p Fi(\()p Ff(x)475
+ 4573 y Fe(1)514 4558 y Ff(;)17 b(x)613 4573 y Fe(2)653
+ 4558 y Fi(\).)470 4678 y(Similarly)-8 b(,)30 b(lo)s(ops)f(are)f
+ (written)i(with)f Ff(\036)p Fi(-no)s(des)f(at)g(the)h(top.)42
+ b(A)29 b(lo)s(op)f(with)h(iterator)324 4799 y Ff(i)k
+ Fi(from)f(0)g(is)h(written)h Ff(i)1174 4814 y Fe(1)1241
+ 4799 y Fd( )27 b Ff(\036)p Fi(\(0)p Ff(;)17 b(i)1590
+ 4814 y Fe(1)1651 4799 y Fi(+)22 b(1\).)44 b(An)32 b(example:)1918
+ 5251 y(2)p eop end
+ %%Page: 3 3
+ TeXDict begin 3 2 bop 426 548 a Fg(int)52 b(y)g(=)f(0;)426
+ 668 y(for)h(\(int)h(i)e(=)h(0;)g(i)f(<)h(n;)f(i++\))529
+ 789 y(y)g(+=)h(i;)470 1017 y Fi(b)s(ecomes:)426 1187
+ y Ff(y)474 1202 y Fe(1)541 1187 y Fd( )27 b Fi(0;)426
+ 1308 y Fg(for)52 b(\()p Ff(i)715 1323 y Fe(1)783 1308
+ y Fd( )27 b Ff(\036)p Fi(\(0)p Ff(;)17 b(i)1132 1323
+ y Fe(2)1171 1308 y Fi(\))p Fg(;)52 b Ff(i)1345 1323 y
+ Fe(1)1412 1308 y Ff(<)28 b(n)p Fg(;)51 b Ff(i)1709 1323
+ y Fe(2)1777 1308 y Fd( )27 b Ff(i)1937 1323 y Fe(1)1999
+ 1308 y Fi(+)22 b(1)p Fg(\))529 1428 y Ff(y)577 1443 y
+ Fe(2)644 1428 y Fd( )27 b Ff(\036)p Fi(\()p Ff(y)915
+ 1443 y Fe(1)953 1428 y Ff(;)17 b(y)1045 1443 y Fe(2)1106
+ 1428 y Fi(+)22 b Ff(i)1237 1443 y Fe(1)1277 1428 y Fi(\))470
+ 1669 y(LL)-11 b(VM)32 b(uses)g(static)g(single)g(assignmen)m(t)h(form)e
+ (for)g(its)g(in)m(termediate)i(represen)m(ta-)324 1789
+ y(tion.)48 b(In)35 b(LL)-11 b(VM's)35 b(implemen)m(tation)h(of)e
+ Ff(\036)p Fi(-no)s(des,)g(eac)m(h)h(v)-5 b(alue)35 b(in)f(the)h(set)g
+ (is)f(asso)s(ci-)324 1910 y(ated)f(with)g(the)g(basic)g(blo)s(c)m(k)h
+ (con)m(taining)f(the)g(de\014nition)g(of)f(the)h(v)-5
+ b(ariable.)324 2198 y Fh(1.2)135 b(Basic)45 b(Blo)t(c)l(ks)324
+ 2383 y Fi(A)24 b(basic)h(blo)s(c)m(k)f(is)h(a)f(series)h(of)f
+ (instructions)h(that)f(execute)i(in)e(order)g(with)h(other)f(p)s(oin)m
+ (ts)324 2503 y(of)30 b(en)m(try)h(or)f(exit.)43 b(In)31
+ b(this)g(sense)h(it)e(is)h(atomic;)g(execution)h(will)f(alw)m(a)m(ys)h
+ (b)s(egin)e(at)g(the)324 2624 y(b)s(eginning)37 b(of)g(a)f(basic)i(blo)
+ s(c)m(k)g(and)f(con)m(tin)m(ue)i(to)d(the)i(last)f(instruction.)58
+ b(Sometimes)324 2744 y(this)30 b(rule)f(is)h(w)m(eak)m(ened)i(to)d
+ (allo)m(w)h(for)f(error)g(handling)g(\(suc)m(h)i(as)f(division)g(b)m(y)
+ g(zero\))g(or)324 2865 y(exceptions.)470 2985 y(One)i(w)m(a)m(y)h(to)f
+ (build)g(basic)h(blo)s(c)m(ks)g(is)f(to)f(tak)m(e)i(the)f(co)s(de)g
+ (and)g(cut)g(it)g(wherev)m(er)i(an)324 3105 y(instruction)29
+ b(jumps,)g(or)f(wherev)m(er)i(a)e(jump)g(ma)m(y)g(land.)42
+ b(These)30 b(form)e(the)g(b)s(oundaries)324 3226 y(of)39
+ b(y)m(our)h(basic)h(blo)s(c)m(ks.)66 b(Note)40 b(that)f(this)h(tec)m
+ (hnique)i(do)s(esn't)f(alw)m(a)m(ys)g(pro)s(duce)f(the)324
+ 3346 y(largest)33 b(p)s(ossible)h(basic)f(blo)s(c)m(ks)h(\(and)e(th)m
+ (us)i(the)f(few)m(est)h(n)m(um)m(b)s(er\).)470 3467 y(In)44
+ b(LL)-11 b(VM,)45 b(a)f(basic)h(blo)s(c)m(k)g(m)m(ust)g(b)s(egin)f
+ (with)h(the)f Ff(\036)p Fi(-no)s(des)g(and)g(end)h(with)g(a)324
+ 3587 y(terminator)33 b(instruction.)45 b(These)34 b(include)h(branc)m
+ (h)e(instructions,)i(calls)e(of)g(functions)324 3707
+ y(that)i(ma)m(y)h(thro)m(w)f(an)g(exception,)j(or)c(a)h(function)h
+ (return.)51 b(F)-8 b(unction)36 b(calls)f(that)g(can)324
+ 3828 y(not)d(thro)m(w)h(exceptions)i(are)e(not)f(terminator)h
+ (instructions.)324 4117 y Fh(1.3)135 b(Con)l(trol)46
+ b(Flo)l(w)g(Graph)324 4301 y Fi(Basic)27 b(blo)s(c)m(ks)h(form)e(the)h
+ (no)s(des)g(of)f(a)g(directed)i(graph)f(called)g(the)g(con)m(trol)g
+ (\015o)m(w)g(graph.)324 4422 y(The)48 b(edges)g(connect)h(one)e(basic)h
+ (blo)s(c)m(k)g(to)f(the)h(blo)s(c)m(ks)h(it)e(could)h(jump)f(in)m(to.)
+ 88 b(In)324 4542 y(this)39 b(form,)i(a)d(cycle)j(represen)m(ts)g(a)e
+ (lo)s(op,)h(a)f(detac)m(hed)h(subgraph)g(or)f(basic)g(blo)s(c)m(k)h(is)
+ 324 4662 y(unreac)m(hable)i(co)s(de,)i(and)d(a)g(cycle)i(with)e(no)g
+ (edges)h(leading)g(out)f(of)f(it)h(m)m(ust)h(b)s(e)g(an)324
+ 4783 y(in\014nite)33 b(lo)s(op.)470 4903 y(The)h(program)1918
+ 5251 y(3)p eop end
+ %%Page: 4 4
+ TeXDict begin 4 3 bop 426 548 a Fg(if)52 b(\(t)g(\045)f(2)h(==)g(0\))
+ 529 668 y(print\(t,)h(")f(is)g(even"\);)426 789 y(else)529
+ 909 y(print\(t,)h(")f(is)g(odd"\);)426 1150 y(for)g(\(int)h(i)e(=)h(0;)
+ g(i)f(<)h(t;)f(++i\))529 1270 y(if)h(\(i)f(*)h(i)g(==)f(t\))h({)631
+ 1391 y(print\(t,)i(")d(is)h(",)g(i,)g(")f(squared"\);)631
+ 1511 y(break;)529 1631 y(})426 1872 y(return;)470 2064
+ y Fi(could)33 b(b)s(e)g(translated)g(in)m(to:)470 4413
+ y @beginspecial 36 @llx 36 @lly 409 @urx 496 @ury 2160
+ @rwi @setspecial
+ %%BeginDocument: example2.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 2.8 (Sun Apr  9 22:27:31 UTC 2006)
+ %%For: (nicholas) Nicholas
+ %%Title: example2
+ %%Pages: (atend)
+ %%BoundingBox: 36 36 409 496
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ EncodingVector 45 /hyphen put
+ 
+ % Set up ISO Latin 1 character encoding
+ /starnetISO {
+         dup dup findfont dup length dict begin
+         { 1 index /FID ne { def }{ pop pop } ifelse
+         } forall
+         /Encoding EncodingVector def
+         currentdict end definefont
+ } def
+ /Times-Roman starnetISO def
+ /Times-Italic starnetISO def
+ /Times-Bold starnetISO def
+ /Times-BoldItalic starnetISO def
+ /Helvetica starnetISO def
+ /Helvetica-Oblique starnetISO def
+ /Helvetica-Bold starnetISO def
+ /Helvetica-BoldOblique starnetISO def
+ /Courier starnetISO def
+ /Courier-Oblique starnetISO def
+ /Courier-Bold starnetISO def
+ /Courier-BoldOblique starnetISO def
+ cleartomark
+ } bind def
+ 
+ %%BeginResource: procset graphviz 0 0
+ /coord-font-family /Times-Roman def
+ /default-font-family /Times-Roman def
+ /coordfont coord-font-family findfont 8 scalefont def
+ 
+ /InvScaleFactor 1.0 def
+ /set_scale {
+ 	dup 1 exch div /InvScaleFactor exch def
+ 	dup scale
+ } bind def
+ 
+ % styles
+ /solid { [] 0 setdash } bind def
+ /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+ /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+ /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+ /bold { 2 setlinewidth } bind def
+ /filled { } bind def
+ /unfilled { } bind def
+ /rounded { } bind def
+ /diagonals { } bind def
+ 
+ % hooks for setting color 
+ /nodecolor { sethsbcolor } bind def
+ /edgecolor { sethsbcolor } bind def
+ /graphcolor { sethsbcolor } bind def
+ /nopcolor {pop pop pop} bind def
+ 
+ /beginpage {	% i j npages
+ 	/npages exch def
+ 	/j exch def
+ 	/i exch def
+ 	/str 10 string def
+ 	npages 1 gt {
+ 		gsave
+ 			coordfont setfont
+ 			0 0 moveto
+ 			(\() show i str cvs show (,) show j str cvs show (\)) show
+ 		grestore
+ 	} if
+ } bind def
+ 
+ /set_font {
+ 	findfont exch
+ 	scalefont setfont
+ } def
+ 
+ % draw aligned label in bounding box aligned to current point
+ /alignedtext {			% width adj text
+ 	/text exch def
+ 	/adj exch def
+ 	/width exch def
+ 	gsave
+ 		width 0 gt {
+ 			text stringwidth pop adj mul 0 rmoveto
+ 		} if
+ 		[] 0 setdash
+ 		text show
+ 	grestore
+ } def
+ 
+ /boxprim {				% xcorner ycorner xsize ysize
+ 		4 2 roll
+ 		moveto
+ 		2 copy
+ 		exch 0 rlineto
+ 		0 exch rlineto
+ 		pop neg 0 rlineto
+ 		closepath
+ } bind def
+ 
+ /ellipse_path {
+ 	/ry exch def
+ 	/rx exch def
+ 	/y exch def
+ 	/x exch def
+ 	matrix currentmatrix
+ 	newpath
+ 	x y translate
+ 	rx ry scale
+ 	0 0 1 0 360 arc
+ 	setmatrix
+ } bind def
+ 
+ /endpage { showpage } bind def
+ /showpage { } def
+ 
+ /layercolorseq
+ 	[	% layer color sequence - darkest to lightest
+ 		[0 0 0]
+ 		[.2 .8 .8]
+ 		[.4 .8 .8]
+ 		[.6 .8 .8]
+ 		[.8 .8 .8]
+ 	]
+ def
+ 
+ /layerlen layercolorseq length def
+ 
+ /setlayer {/maxlayer exch def /curlayer exch def
+ 	layercolorseq curlayer 1 sub layerlen mod get
+ 	aload pop sethsbcolor
+ 	/nodecolor {nopcolor} def
+ 	/edgecolor {nopcolor} def
+ 	/graphcolor {nopcolor} def
+ } bind def
+ 
+ /onlayer { curlayer ne {invis} if } def
+ 
+ /onlayers {
+ 	/myupper exch def
+ 	/mylower exch def
+ 	curlayer mylower lt
+ 	curlayer myupper gt
+ 	or
+ 	{invis} if
+ } def
+ 
+ /curlayer 0 def
+ 
+ %%EndResource
+ %%EndProlog
+ %%BeginSetup
+ 14 default-font-family set_font
+ 1 setmiterlimit
+ % /arrowlength 10 def
+ % /arrowwidth 5 def
+ 
+ % make sure pdfmark is harmless for PS-interpreters other than Distiller
+ /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+ % make '<<' and '>>' safe on PS Level 1 devices
+ /languagelevel where {pop languagelevel}{1} ifelse
+ 2 lt {
+     userdict (<<) cvn ([) cvn load put
+     userdict (>>) cvn ([) cvn load put
+ } if
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%PageBoundingBox: 36 36 409 496
+ %%PageOrientation: Portrait
+ gsave
+ 36 36 373 460 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 1.0000 set_scale
+ 4 4 translate 0 rotate
+ 0.000 0.000 1.000 graphcolor
+ 0.000 0.000 1.000 graphcolor
+ newpath -6 -6 moveto
+ -6 458 lineto
+ 371 458 lineto
+ 371 -6 lineto
+ closepath
+ fill
+ 0.000 0.000 1.000 graphcolor
+ newpath -6 -6 moveto
+ -6 458 lineto
+ 371 458 lineto
+ 371 -6 lineto
+ closepath
+ stroke
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ % Node0x85fdea8
+ gsave 10 dict begin
+ newpath 189 404 moveto
+ 288 404 lineto
+ 288 452 lineto
+ 189 452 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 197 435 moveto
+ (if \(t % 2 == 0\))
+ [3.84 4.56 3.6 4.56 3.84 3.6 11.76 3.6 6.96 3.6 7.92 7.92 3.6 6.96 4.56]
+ xshow
+ end grestore
+ newpath 189 428 moveto
+ 288 428 lineto
+ stroke
+ gsave 10 dict begin
+ 214 411 moveto 9.0 -0.5 (T) alignedtext
+ end grestore
+ newpath 239 404 moveto
+ 239 428 lineto
+ stroke
+ gsave 10 dict begin
+ 263 411 moveto 8.0 -0.5 (F) alignedtext
+ end grestore
+ end grestore
+ % Node0x85fe1a8
+ gsave 10 dict begin
+ newpath 109 332 moveto
+ 231 332 lineto
+ 231 368 lineto
+ 109 368 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 117 345 moveto
+ (print\(t, " is even"\);)
+ [6.96 5.04 3.84 6.96 3.84 4.56 3.84 3.6 3.6 5.76 3.6 3.84 5.52 3.6 5.76 6.48 6.24 6.96 5.76 4.56 3.84]
+ xshow
+ end grestore
+ end grestore
+ % Node0x85fdea8->Node0x85fe1a8
+ newpath 205 404 moveto
+ 200 396 193 386 187 377 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 190 375 moveto
+ 182 368 lineto
+ 184 378 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 190 375 moveto
+ 182 368 lineto
+ 184 378 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85fe268
+ gsave 10 dict begin
+ newpath 249 332 moveto
+ 366 332 lineto
+ 366 368 lineto
+ 249 368 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 256 345 moveto
+ (print\(t, " is odd"\);)
+ [6.96 5.04 3.84 6.96 3.84 4.56 3.84 3.6 3.6 5.76 3.6 3.84 5.52 3.6 6.96 6.96 6.96 5.76 4.56 3.84]
+ xshow
+ end grestore
+ end grestore
+ % Node0x85fdea8->Node0x85fe268
+ newpath 272 404 moveto
+ 277 396 284 386 290 377 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 293 378 moveto
+ 295 368 lineto
+ 287 375 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 293 378 moveto
+ 295 368 lineto
+ 287 375 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85fe710
+ gsave 10 dict begin
+ newpath 182 232 moveto
+ 295 232 lineto
+ 295 296 lineto
+ 182 296 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 190 279 moveto
+ (int i = phi\(0, inc\))
+ [3.84 6.96 3.84 3.6 3.84 3.6 7.92 3.6 6.96 6.96 3.84 4.56 6.96 3.6 3.6 3.84 6.96 6.24 4.56]
+ xshow
+ 190 263 moveto
+ (if \(i < t\))
+ [3.84 4.56 3.6 4.56 3.84 3.6 7.92 3.6 3.84 4.56]
+ xshow
+ end grestore
+ newpath 182 256 moveto
+ 295 256 lineto
+ stroke
+ gsave 10 dict begin
+ 210 239 moveto 9.0 -0.5 (T) alignedtext
+ end grestore
+ newpath 239 232 moveto
+ 239 256 lineto
+ stroke
+ gsave 10 dict begin
+ 267 239 moveto 8.0 -0.5 (F) alignedtext
+ end grestore
+ end grestore
+ % Node0x85fe1a8->Node0x85fe710
+ newpath 184 332 moveto
+ 190 324 198 314 207 304 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 210 306 moveto
+ 213 296 lineto
+ 204 302 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 210 306 moveto
+ 213 296 lineto
+ 204 302 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85fe268->Node0x85fe710
+ newpath 292 332 moveto
+ 286 324 278 314 269 304 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 272 302 moveto
+ 263 296 lineto
+ 266 306 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 272 302 moveto
+ 263 296 lineto
+ 266 306 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85fecd0
+ gsave 10 dict begin
+ newpath 124 148 moveto
+ 211 148 lineto
+ 211 196 lineto
+ 124 196 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 132 179 moveto
+ (if \(i * i == t\))
+ [3.84 4.56 3.6 4.56 3.84 3.6 6.96 3.6 3.84 3.6 7.92 7.92 3.6 3.84 4.56]
+ xshow
+ end grestore
+ newpath 124 172 moveto
+ 211 172 lineto
+ stroke
+ gsave 10 dict begin
+ 146 155 moveto 9.0 -0.5 (T) alignedtext
+ end grestore
+ newpath 168 148 moveto
+ 168 172 lineto
+ stroke
+ gsave 10 dict begin
+ 189 155 moveto 8.0 -0.5 (F) alignedtext
+ end grestore
+ end grestore
+ % Node0x85fe710->Node0x85fecd0
+ newpath 203 232 moveto
+ 198 224 192 214 186 205 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 189 203 moveto
+ 181 196 lineto
+ 183 206 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 189 203 moveto
+ 181 196 lineto
+ 183 206 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85fe7d0
+ gsave 10 dict begin
+ newpath 266 154 moveto
+ 320 154 lineto
+ 320 190 lineto
+ 266 190 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 274 167 moveto
+ (return;)
+ [4.8 6 3.84 6.96 5.04 6.96 3.84]
+ xshow
+ end grestore
+ end grestore
+ % Node0x85fe710->Node0x85fe7d0
+ newpath 272 232 moveto
+ 275 223 279 211 283 200 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 287 201 moveto
+ 287 190 lineto
+ 280 198 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 287 201 moveto
+ 287 190 lineto
+ 280 198 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85feb98
+ gsave 10 dict begin
+ newpath 0 72 moveto
+ 173 72 lineto
+ 173 112 lineto
+ 0 112 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 8 95 moveto
+ (print\(t, " is ", i, " squared"\);)
+ [6.96 5.04 3.84 6.96 3.84 4.56 3.84 3.6 3.6 5.76 3.6 3.84 5.52 3.6 5.76 3.6 3.6 3.84 3.6 3.6 5.76 3.6 5.52 6.72 6.96 6.24 4.8 6.24 6.96 5.76 4.56 3.84]
+ xshow
+ 8 79 moveto
+ (break;)
+ [6.96 4.8 6.24 6.24 6.96 3.84]
+ xshow
+ end grestore
+ end grestore
+ % Node0x85fecd0->Node0x85feb98
+ newpath 134 148 moveto
+ 127 140 118 130 110 120 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 112 117 moveto
+ 103 112 lineto
+ 107 122 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 112 117 moveto
+ 103 112 lineto
+ 107 122 lineto
+ closepath
+ stroke
+ end grestore
+ % NodeX
+ gsave 10 dict begin
+ newpath 151 0 moveto
+ 249 0 lineto
+ 249 36 lineto
+ 151 36 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 159 13 moveto
+ (int inc = i + 1;)
+ [3.84 6.96 3.84 3.6 3.84 6.96 6.24 3.6 7.92 3.6 3.84 3.6 7.92 3.6 6.96 3.84]
+ xshow
+ end grestore
+ end grestore
+ % Node0x85fecd0->NodeX
+ newpath 190 148 moveto
+ 192 125 195 77 198 46 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 201 46 moveto
+ 199 36 lineto
+ 195 46 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 201 46 moveto
+ 199 36 lineto
+ 195 46 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85feb98->NodeX
+ newpath 117 72 moveto
+ 131 63 148 52 163 42 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 166 44 moveto
+ 172 36 lineto
+ 162 39 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 166 44 moveto
+ 172 36 lineto
+ 162 39 lineto
+ closepath
+ stroke
+ end grestore
+ % NodeX->Node0x85fe710
+ newpath 203 36 moveto
+ 209 75 223 167 231 222 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 228 223 moveto
+ 233 232 lineto
+ 234 222 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 228 223 moveto
+ 233 232 lineto
+ 234 222 lineto
+ closepath
+ stroke
+ end grestore
+ endpage
+ showpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 324 4697 a Fh(1.4)135 b(LL)-15 b(VM)44 b(In)l(termediate)j
+ (Represen)l(tation)324 4882 y Fi(LL)-11 b(VM)33 b(sp)s(orts)h(an)f
+ (instruction)h(set)g(arc)m(hitecture)g(with)g(explicit)h(basic)f(blo)s
+ (c)m(ks,)g(SSA)324 5002 y(form)28 b(and)h(34)f(instructions)i(in)e(six)
+ i(categories.)43 b(It)28 b(features)i(an)e(explicit)i(con)m(trol)f
+ (\015o)m(w)1918 5251 y(4)p eop end
+ %%Page: 5 5
+ TeXDict begin 5 4 bop 671 533 a Fj(T)m(yp)s(e)p 980 569
+ 4 121 v 257 w(Description)p 1936 569 V 262 w(T)m(yp)s(e)p
+ 2317 569 V 262 w(Description)p 611 572 2665 4 v 753 656
+ a Fi(v)m(oid)p 980 692 4 121 v 100 w(No)33 b(v)-5 b(alue)p
+ 1936 692 V 2317 692 V 611 696 2665 4 v 748 780 a(b)s(o)s(ol)p
+ 980 816 4 121 v 98 w(T)d(rue)34 b(or)e(V)-8 b(alue)p
+ 1936 816 V 2317 816 V 611 819 2665 4 v 693 904 a(ub)m(yte)p
+ 980 940 4 121 v 101 w(Unsigned)34 b(b)m(yte)p 1936 940
+ V 406 w(sb)m(yte)p 2317 940 V 102 w(Signed)f(b)m(yte)p
+ 611 943 2665 4 v 660 1027 a(ushort)p 980 1064 4 121 v
+ 100 w(Unsigned)h(16)e(bits)p 1936 1064 V 308 w(short)p
+ 2317 1064 V 100 w(Signed)h(16)f(bits)p 611 1067 2665
+ 4 v 761 1151 a(uin)m(t)p 980 1187 4 121 v 100 w(Unsigned)i(32)e(bits)p
+ 1936 1187 V 409 w(in)m(t)p 2317 1187 V 100 w(Signed)h(32)f(bits)p
+ 611 1191 2665 4 v 699 1275 a(ulong)p 980 1311 4 121 v
+ 99 w(Unsigned)i(64)e(bits)p 1936 1311 V 346 w(long)p
+ 2317 1311 V 100 w(Signed)h(64)f(bits)p 611 1314 2665
+ 4 v 742 1399 a(\015oat)p 980 1435 4 121 v 99 w(32-bit)g(\015oating)h(p)
+ s(oin)m(t)p 1936 1435 V 99 w(double)p 2317 1435 V 101
+ w(64-bit)f(\015oating)g(p)s(oin)m(t)p 611 1438 2665 4
+ v 729 1522 a(lab)s(el)p 980 1558 4 121 v 99 w(Branc)m(h)i(destination)p
+ 1936 1558 V 2317 1558 V 1142 1719 a(T)-8 b(able)33 b(1:)43
+ b(Primitiv)m(e)35 b(t)m(yp)s(es)f(in)f(LL)-11 b(VM)33
+ b(IR)324 1998 y(graph,)52 b(language-indep)s(enden)m(t)f(t)m(yp)s(e)e
+ (information)g(and)f(explicit)i(t)m(yp)s(ed)g(p)s(oin)m(ter)324
+ 2119 y(arithmetic.)41 b(It)21 b(has)i(an)e(in\014nite)i(n)m(um)m(b)s
+ (er)g(of)e(registers)i(and)f(explicit)h(memory)g(op)s(erations.[ALB)
+ 3928 2082 y Fe(+)3988 2119 y Fi(03)o(,)324 2239 y(LA04b])470
+ 2359 y(There)46 b(are)e(13)g(primitiv)m(e)j(t)m(yp)s(es)f(sho)m(wn)f
+ (in)g(T)-8 b(able)45 b(1)g(from)f(whic)m(h)i(comp)s(ound)324
+ 2480 y(t)m(yp)s(es)35 b(ma)m(y)f(b)s(e)f(deriv)m(ed.)48
+ b(These)35 b(deriv)m(ed)h(t)m(yp)s(es)e(ma)m(y)g(b)s(e)g(arra)m(ys,)g
+ (suc)m(h)h(as)f Fg([3)52 b(x)f([4)324 2600 y(x)g(int]])p
+ Fi(,)41 b(a)c(p)s(oin)m(ter)h(t)m(yp)s(e)g Fg(float*)p
+ Fi(,)j(a)c(structure)i Fd(f)p Fg(int,)52 b(float,)h([3)f(x)f(sbyte])p
+ Fd(g)324 2721 y Fi(or)38 b(a)g(function)h Fg(void)52
+ b(\(int\)*)40 b Fi(b)s(eing)f(a)f(p)s(oin)m(ter)g(to)g(a)g(function)h
+ (that)f(returns)i(v)m(oid)324 2841 y(and)32 b(tak)m(es)i(a)f(signed)g
+ (32-bit)f(in)m(teger.[Lat06])470 2961 y(The)25 b(registers)g(in)f(LL)
+ -11 b(VM)24 b(are)g(SSA)h(v)-5 b(ariables,)26 b(and)e(their)g(iden)m
+ (ti\014ers)i(are)e(pre\014xed)324 3082 y(with)39 b(\\\045".)62
+ b(V)-8 b(ariables)40 b(are)e(declared)i(b)m(y)g(the)f(statemen)m(t)h
+ (that)f(de\014nes)h(them.)63 b(All)324 3202 y(instructions)47
+ b(in)f(LL)-11 b(VM)46 b(are)f(strongly)i(t)m(yp)s(ed,)j(with)c(the)g(t)
+ m(yp)s(e)g(of)f(its)h(argumen)m(ts)324 3322 y(app)s(earing)36
+ b(b)s(efore)g(the)h(argumen)m(t.)55 b(In)36 b(the)h(ev)m(en)m(t)h(that)
+ e(the)h(t)m(w)m(o)g(argumen)m(ts)g(of)f(an)324 3443 y(binary)f(op)s
+ (eration)g(are)g(the)h(same,)g(the)g(t)m(yp)s(e)f(is)h(only)f(sp)s
+ (eci\014ed)i(once,)g(immediately)324 3563 y(after)32
+ b(the)h(op)s(co)s(de.)44 b(A)32 b(sample)i(instruction)g(is)f
+ Fg(\045result)53 b(=)e(mul)i(uint)f(\045X,)g(8)p Fi(.)470
+ 3684 y(Throughout)33 b(this)g(pap)s(er,)g(I)g(will)g(refer)g(to)f
+ (certain)h(instructions:)340 3879 y(load)49 b Fg(\045y)i(=)h(load)g
+ Fb(type)19 b Fg(*)51 b(\045x)p Fi(.)568 3999 y(Dereferences)34
+ b(the)f(p)s(oin)m(ter)g Fg(x)g Fi(and)g(loads)f(the)h(v)-5
+ b(alue)33 b(in)m(to)g(register)h Fg(y)p Fi(.)312 4200
+ y(store)50 b Fg(store)i Fb(type)70 b Fg(\045x,)52 b Fb(type)19
+ b Fg(*)51 b(\045y)p Fi(.)568 4320 y(Stores)35 b(the)g(v)-5
+ b(alue)36 b(in)f(register)g Fg(x)g Fi(in)m(to)g(the)h(memory)f
+ (referred)h(to)e(b)m(y)k Fg(y)p Fi(.)50 b(In)35 b(C,)568
+ 4440 y(this)e(w)m(ould)g(b)s(e)g Fg(*y)52 b(=)g(x;)p
+ Fi(.)-69 4641 y(getelemen)m(tptr)f Fg(\045y)g(=)h(getelementptr)j
+ Fb(type)18 b Fg(*)52 b(\045x,)g(long)g(0,)g(long)g(0)568
+ 4761 y Fi(\\getelemen)m(tptr")37 b(ma)m(y)f(b)s(e)g(used)h(as)e(an)h
+ (instruction)g(de\014ning)h(a)e(v)-5 b(ariable,)37 b(or)568
+ 4882 y(inline)e(as)f(an)g(expression)i(in)e(a)g(another)g(op)s
+ (eration.)48 b(In)34 b(either)h(case,)g(\\getele-)568
+ 5002 y(men)m(tptr")k(is)g(v)-5 b(ariadic,)41 b(meaning)e(that)g(is)g
+ (ma)m(y)h(ha)m(v)m(e)g(an)m(y)f(n)m(um)m(b)s(er)h(of)e(argu-)1918
+ 5251 y(5)p eop end
+ %%Page: 6 6
+ TeXDict begin 6 5 bop 568 548 a Fi(men)m(ts.)70 b(The)42
+ b(\014rst)g(argumen)m(t)g(is)g(alw)m(a)m(ys)g(a)f(base)h(p)s(oin)m
+ (ter,)i(follo)m(w)m(ed)e(b)m(y)g(the)568 668 y(indices)34
+ b(in)f(the)g(new)g(p)s(oin)m(ter)g(b)s(eing)g(calculated.)568
+ 826 y(This)f(is)g(an)f(esp)s(ecially)j(in)m(teresting)f(instruction)f
+ (b)s(ecause)h(it)e(allo)m(ws)h(the)g(t)m(yp)s(e-)568
+ 947 y(safe)h(subset)h(of)e(p)s(oin)m(ter)h(arithmetic.)-66
+ 1143 y(mallo)s(c,)f(allo)s(ca)49 b Fg(\045x)i(=)h(alloca)h
+ Fb(type)568 1263 y Fg(\045x)e(=)h(malloc)h Fb(type)568
+ 1384 y Fi(Both)38 b(heap)h(and)f(stac)m(k)i(allo)s(cation)d(\(mallo)s
+ (c)i(and)f(allo)s(ca)g(resp)s(ectiv)m(ely\))j(ha)m(v)m(e)568
+ 1504 y(their)31 b(o)m(wn)h(op)s(co)s(des,)f(and)g(tak)m(e)h(the)f(same)
+ h(argumen)m(ts:)44 b(one)31 b(t)m(yp)s(e,)h(optionally)568
+ 1624 y(follo)m(w)m(ed)h(b)m(y)h(a)e(coun)m(t,)h(optionally)g(follo)m(w)
+ m(ed)h(b)m(y)g(an)e(alignmen)m(t.)364 1820 y(free)50
+ b Fg(free)i Fb(type)70 b Fg(\045x)568 1941 y Fi(F)-8
+ b(rees)33 b(memory)g(allo)s(cated)g(with)g(the)g Fg(malloc)h
+ Fi(instruction.)427 2137 y(br)49 b Fg(br)i(label)i(\045loopexit)568
+ 2257 y(br)e(bool)i(\045condition)h(label)e(\045else)h(label)g(\045then)
+ 568 2377 y Fi(A)32 b(branc)m(h)i(statemen)m(t,)g(with)f(an)g(optional)f
+ (conditional.)470 2559 y(T)-8 b(ak)m(en)28 b(directly)g(from)f(LL)-11
+ b(VM's)27 b(C)g(fron)m(t)g(end,)h(a)f(small)g(complete)h(program)e(lo)s
+ (oks)324 2679 y(lik)m(e:)324 2877 y Fg(\045y)52 b(=)f(global)i(sbyte*)g
+ (\045x)564 b(;)52 b(<sbyte**>)h([#uses=1])324 2998 y(\045x)f(=)f(weak)h
+ (global)h(sbyte)g(0)820 b(;)52 b(<sbyte*>)h([#uses=1])324
+ 3118 y(\045.str_1)g(=)e(internal)j(constant)f([6)f(x)g(sbyte])g
+ (c"abcde\\00")670 b(;)51 b(<[6)h(x)g(sbyte]*>)h([#uses=0])324
+ 3359 y(implementation)157 b(;)52 b(Functions:)324 3600
+ y(void)g(\045f\(\))g({)324 3720 y(entry:)734 3840 y(\045tmp.0)h(=)e
+ (load)i(sbyte**)g(\045y)821 b(;)51 b(<sbyte*>)i([#uses=1])734
+ 3961 y(store)g(sbyte)f(100,)g(sbyte*)h(\045tmp.0)734
+ 4081 y(ret)f(void)324 4202 y(})470 4400 y Fi(The)36 b(global)e(v)-5
+ b(ariables)36 b(b)s(egin)f(a)g(program,)g(follo)m(w)m(ed)h(b)m(y)g(the)
+ f(w)m(ord)g(\\implemen-)324 4521 y(tation",)c(then)g(the)h(functions.)
+ 44 b(Note)31 b(that)g(the)g(lab)s(el)h(\\en)m(try")f(is)h(mandatory;)g
+ (there)324 4641 y(is)d(a)f(lab)s(el)h(at)f(the)h(b)s(eginning)g(of)f
+ (ev)m(ery)i(basic)f(blo)s(c)m(k.)43 b(The)30 b Fg(;)51
+ b(text)30 b Fi(indicates)g(a)e(com-)324 4761 y(men)m(t)k(running)g(to)e
+ (the)i(end)g(of)e(the)i(line.)43 b(F)-8 b(or)31 b(the)g(most)h(part,)f
+ (the)h(LL)-11 b(VM)31 b(assem)m(bly)324 4882 y(language)44
+ b(is)h(self-explanatory)-8 b(,)48 b(but)d(for)e(comprehensiv)m(e)48
+ b(details,)g(please)e(consult)324 5002 y(the)33 b(language)f
+ (reference.[Lat06)q(].)1918 5251 y(6)p eop end
+ %%Page: 7 7
+ TeXDict begin 7 6 bop 324 548 a Fk(2)161 b(Related)53
+ b(W)-13 b(ork)324 767 y Fi(The)22 b(design)h(of)e(the)i(c)m(hec)m(k)m
+ (er)h(w)m(as)f(hea)m(vily)g(in\015uenced)h(b)m(y)f(t)m(w)m(o)f(pro)5
+ b(jects,)25 b(V)-8 b(algrind[SN)q(])324 887 y(and)32
+ b(Co)m(v)m(erit)m(y)-8 b(.)470 1008 y(V)g(algrind)39
+ b(is)g(a)f(dynamic)i(memory)g(error)e(detector.)62 b(It)39
+ b(w)m(orks)h(b)m(y)f(in)m(terpreting)324 1128 y(compiled)33
+ b(x86)g(programs)f(and)h(JIT)g(compiling)g(them)g(in)m(to)g(a)f
+ (reduced)i(SP)-8 b(AR)m(C-lik)m(e)324 1249 y(assem)m(bly)g(,)42
+ b(where)d(it)f(instrumen)m(ts)i(the)f(co)s(de,)h(and)e(JITs)h(it)f(bac)
+ m(k)h(in)m(to)g(x86)f(for)f(ex-)324 1369 y(ecution.)60
+ b(In)38 b(the)g(instrumen)m(tation)h(phase,)h(mo)s(di\014es)f(the)f(co)
+ s(de)g(to)f(store)i(an)e(extra)324 1489 y(\\v)-5 b(alidit)m(y")39
+ b(b)m(yte)h(for)e(eac)m(h)h(b)m(yte)h(of)f(register)g(data)f(or)h
+ (memory)-8 b(,)41 b(and)e(an)f(extra)h(ad-)324 1610 y(dressabilit)m(y)e
+ (bit)e(for)f(eac)m(h)i(b)m(yte)g(of)e(allo)s(cated)g(memory)-8
+ b(.)51 b(The)36 b(v)-5 b(alidit)m(y)36 b(bits)f(are)g(set)324
+ 1730 y(when)f(they)h(are)e(assigned)i(with)f(a)f(\\v)-5
+ b(alid")33 b(v)-5 b(alue)34 b(\(a)f(source)i(with)f(the)g(v)-5
+ b(alidit)m(y)34 b(bits)324 1850 y(set\))28 b(and)g(cleared)h(when)g
+ (assigned)h(from)d(a)h(source)h(with)g(the)f(bits)h(cleared.)42
+ b(The)29 b(\\ad-)324 1971 y(dressabilit)m(y")j(bit)e(stores)h(whether)h
+ (a)e(giv)m(en)h(address)g(can)g(b)s(e)f(dereferenced;)j(it)d(is)h(set)
+ 324 2091 y(on)23 b(mallo)s(c)h(and)g(cleared)g(on)g(free.)41
+ b(V)-8 b(algrind)24 b(will)g(in)m(tercept)h(the)f(trap)g(to)f(Lin)m(ux)
+ i(k)m(ernel)324 2212 y(and)k(v)m(erify)i(that)e(the)g(argumen)m(ts)h
+ (are)g(all)f(v)-5 b(alid)29 b(or)g(addressable,)j(as)d(appropriate)g
+ (for)324 2332 y(the)37 b(giv)m(en)g(system)h(call.)55
+ b(It)37 b(also)f(tests)h(the)g(v)-5 b(alidit)m(y)37 b(bits)g(on)g
+ (branc)m(h)g(instructions.)324 2452 y(In)29 b(V)-8 b(algrind,)31
+ b(it)e(is)h(acceptable)g(to)f(cop)m(y)i(around)e(unde\014ned)i(data.)42
+ b(An)30 b(error)f(is)h(only)324 2573 y(thro)m(wn)39 b(when)h(the)g(b)s
+ (eha)m(viour)g(of)e(the)h(program)g(is)g(determined)i(b)m(y)f(an)f
+ (unde\014ned)324 2693 y(v)-5 b(alue.)470 2813 y(Co)m(v)m(erit)m(y's)34
+ b(c)m(hec)m(k)m(er)g(is)e(deriv)m(ed)g(and)g(rewritten)g(from)f(their)g
+ (earlier)h(w)m(ork,)g(Stan-)324 2934 y(ford)22 b(GCC[ECCH00)r(].)40
+ b(This)24 b(is)f(a)f(static)h(c)m(hec)m(k)m(er)j(built)d(in)g(to)f(a)h
+ (compiler)g(framew)m(ork,)324 3054 y(using)i(a)g(language)f(called)i
+ (\\metal")f(to)f(describ)s(e)j(in)m(v)-5 b(alid)25 b(op)s(erations,)i
+ (suc)m(h)f(as)f(double)324 3175 y(calls)33 b(to)f(a)h(lo)s(c)m(king)g
+ (function,)g(in)g(terms)g(of)g(the)g(primitiv)m(es)h(in)f(the)g(target)
+ f(program.)470 3295 y(Chec)m(k)m(er)38 b(is)d(directly)i(built)e(on)g
+ (top)g(of)f(a)h(compiler)h(framew)m(ork,)g(the)g(Lo)m(w)f(Lev)m(el)324
+ 3415 y(Virtual)23 b(Mac)m(hine[LA04a)q(].)40 b(LL)-11
+ b(VM)24 b(is)f(particularly)h(w)m(ell)g(suited)g(for)e(dev)m(eloping)j
+ (new)324 3536 y(mid-lev)m(el)38 b(language-indep)s(enden)m(t)g(in)m
+ (terpro)s(cedural)g(analysis)g(and)f(optimizations.)324
+ 3656 y(It)28 b(also)f(pro)m(vides)j(a)d(t)m(yp)s(e-safe)i(b)m(yteco)s
+ (de)g(language)e(with)i(JITter,)g(alongside)g(a)e(static)324
+ 3777 y(compiler.)44 b(This)34 b(compilation)f(strategy)g(allo)m(ws)h
+ (for)e(link)h(time)g(optimization.)470 3897 y(The)i(applicabilit)m(y)g
+ (of)e(LL)-11 b(VM)35 b(to)e(co)s(de)h(c)m(hec)m(king)i(w)m(as)f(not)e
+ (lost)h(on)g(its)g(authors.)324 4017 y(SAFEcore[DKAL05])i(is)h(a)f(pro)
+ 5 b(ject)38 b(with)f(similar)g(goals,)h(but)e(a)h(more)f(formal)g(and)
+ 324 4138 y(rigorous)25 b(design.)42 b(Their)25 b(pro)s(cedure)h(marks)g
+ (all)f(p)s(oten)m(tially)h(in)m(v)-5 b(alid)25 b(b)s(eha)m(viour)h
+ (with)324 4258 y(run-time)40 b(c)m(hec)m(ks,)k(then)c(applies)h(static)
+ f(optimization)g(to)f(eliminate)i(the)f(need)g(for)324
+ 4378 y(the)33 b(run-time)g(c)m(hec)m(ks.[DKA05)r(])1918
+ 5251 y(7)p eop end
+ %%Page: 8 8
+ TeXDict begin 8 7 bop 324 548 a Fk(3)161 b(The)53 b(Chec)l(k)l(er)324
+ 767 y Fi(The)37 b(program)f(c)m(hec)m(k)m(er)j(do)s(esn't)e(directly)g
+ (v)m(erify)h(C)f(or)e(C++)i(seman)m(tics.)56 b(Instead,)324
+ 887 y(w)m(e)36 b(rely)f(on)g(the)g(LL)-11 b(VM)36 b(GCC)f(fron)m(t)g
+ (end)g(to)g(compile)h(a)e(program)h(in)m(to)g(the)g(LL)-11
+ b(VM)324 1008 y(in)m(termediate)39 b(represen)m(tation,)i(whic)m(h)e
+ (is)f(then)h(v)m(eri\014ed.)60 b(Similarly)-8 b(,)40
+ b(not)d(all)h(prop-)324 1128 y(erties)d(of)e(a)g(program)h(are)f(v)m
+ (eri\014ed)j(b)m(y)f(the)f(c)m(hec)m(k)m(er;)j(LL)-11
+ b(VM)34 b(includes)i(an)e(extensiv)m(e)324 1249 y(mo)s(dule)k(v)m
+ (eri\014er)h(whic)m(h)h(guaran)m(tees)f(that)e(all)h(of)f(the)h(LL)-11
+ b(VM)38 b(language)g(assertions)324 1369 y(are)32 b(held)i(b)s(efore)e
+ (the)h(c)m(hec)m(k)m(er)j(op)s(erates)d(up)s(on)f(it.)470
+ 1489 y(Correct)45 b(op)s(eration)e(of)h(the)g(c)m(hec)m(k)m(er)j(also)d
+ (relies)h(on)f(the)g(strength)h(of)f(LL)-11 b(VMs)324
+ 1610 y(optimizers)37 b(ha)m(ving)g(b)s(een)g(applied)f(on)g(the)h
+ (input.)54 b(There)37 b(is)g(no)f(attempt)g(made)g(in)324
+ 1730 y(the)h(c)m(hec)m(k)m(er)i(to)d(simplify)h(expressions)j(or)35
+ b(detect)j(dead)f(co)s(de)f(paths.)55 b(The)38 b(c)m(hec)m(k)m(er)324
+ 1850 y(will)33 b(generate)g(spurious)h(errors)f(if)f(the)h(optimizers)h
+ (ha)m(v)m(e)g(not)f(b)s(een)g(run.)470 1971 y(There)f(are)g(t)m(w)m(o)f
+ (ma)5 b(jor)32 b(categories)f(of)g(errors,)h(v)-5 b(alidit)m(y)32
+ b(errors)g(referring)f(to)g(non-)324 2091 y(deterministic)k(b)s(eha)m
+ (viour,)e(and)g(addressabilit)m(y)i(errors)e(b)s(eing)g(memory)g
+ (faults.)324 2380 y Fh(3.1)135 b(V)-11 b(alidit)l(y)324
+ 2565 y Fi(The)39 b(LL)-11 b(VM)39 b(IR)g(includes)h(an)e(in)m
+ (teresting)i(constan)m(t)g(v)-5 b(alue,)40 b Fg(undef)g
+ Fi(or)e(\\unde\014ned)324 2685 y(v)-5 b(alue")42 b(whic)m(h)i(used)f
+ (whenev)m(er)h(the)f(programs)f(b)s(eha)m(viour)h(is)g(v)-5
+ b(alid)42 b(regardless)h(of)324 2805 y(the)38 b(v)-5
+ b(alue.)60 b(In)38 b(practise,)j(it)c(is)i(found)f(whenev)m(er)i(LL)-11
+ b(VM's)39 b(optimizers)h(\014nd)e(a)g(case)324 2926 y(where)c(the)f(v)
+ -5 b(alue)33 b(is)g(uninitialized,)h(but)f(not)f(when)i(it)f(is)g
+ (indeterminate.)470 3046 y(Nondeterministic)42 b(b)s(eha)m(viour)e(o)s
+ (ccurs)g(whenev)m(er)i(an)d(unde\014ned)i(v)-5 b(alue)40
+ b(a\013ects)324 3166 y(the)e(con)m(trol)h(\015o)m(w)f(of)g(the)h
+ (program.)59 b(Since)40 b(all)e(instructions)h(whic)m(h)h(a\013ect)e
+ (con)m(trol)324 3287 y(\015o)m(w)27 b(are)f(en)m(umerated)j(as)e(branc)
+ m(h)g(instructions,)i(w)m(e)f(en)m(umerate)g(all)f(branc)m(h)g
+ (instruc-)324 3407 y(tions)33 b(and)f(detect)i(branc)m(hes)g(on)f
+ Fg(undef)h Fi(argumen)m(t.)469 3634 y Fd(\017)49 b Fg(branch)k(on)e
+ (undef)i(found.)568 3754 y Fi(An)38 b(v)-5 b(ariable)38
+ b(of)f(unde\014ned)j(v)-5 b(alue)38 b(will)g(a\013ect)g(the)g(con)m
+ (trol)g(\015o)m(w)h(of)e(the)h(pro-)568 3875 y(gram,)28
+ b(leading)g(to)g(results)h(that)e(are)h(not)f(determined)j(b)m(y)f(the)
+ f(program)f(input.)568 4036 y(Example:)568 4280 y Fg(extern)53
+ b(void)f(print\(char*\);)568 4521 y(void)g(f\(\))568
+ 4641 y({)670 4761 y(int)g(x;)670 4882 y(if)g(\(x\))773
+ 5002 y(print\("foo"\);)1918 5251 y Fi(8)p eop end
+ %%Page: 9 9
+ TeXDict begin 9 8 bop 568 548 a Fg(})469 793 y Fd(\017)49
+ b Fg(switch)k(on)e(undef)i(found.)568 913 y Fi(Similarly)c(to)e(branc)m
+ (hes,)54 b(c)m(hec)m(k)m(er)d(also)d(\014nds)h(non-determinism)h(in)e
+ (switc)m(h)568 1034 y(statemen)m(ts.)568 1196 y(Example:)568
+ 1440 y Fg(extern)53 b(void)f(print\(char*\);)568 1561
+ y(static)h(const)f(int)g(x[2][3])h(=)f({{10,)g(11,)h(12},)f({13,)g(14,)
+ g(15}};)568 1802 y(void)g(f\(\))568 1922 y({)670 2042
+ y(int)g(*p)g(=)g(\(int*\)x;)670 2163 y(switch)h(\(p[6]\))670
+ 2283 y({)773 2403 y(case)f(0:)875 2524 y(print\("foo"\);)875
+ 2644 y(break;)773 2765 y(case)g(1:)875 2885 y(print\("bar"\);)875
+ 3005 y(break;)670 3126 y(})568 3246 y(})324 3535 y Fh(3.2)135
+ b(Addressabilit)l(y)324 3720 y Fi(Memory)39 b(accesses)h(concern)e
+ (either)h(reads,)h(writes,)g(or)d(calls)h(of)f(function)i(p)s(oin)m
+ (ters.)324 3840 y(Besides)32 b(c)m(hec)m(king)h(for)d
+ Fg(undef)i Fi(p)s(oin)m(ter)f(v)-5 b(alues,)32 b(c)m(hec)m(k)m(er)i
+ (\014nds)d(the)g(follo)m(wing)g(errors:)469 4068 y Fd(\017)49
+ b Fg(read/write/free)55 b(of)d(unallocated)i(memory.)568
+ 4189 y Fi(Chec)m(k)m(er)49 b(has)e(found)g(a)f(free)h(instruction)h
+ (whose)g(argumen)m(t)f(can)g(not)g(b)s(e)g(a)568 4309
+ y(p)s(oin)m(ter)35 b(to)g(allo)s(cated)g(memory)-8 b(.)52
+ b(Suc)m(h)37 b(an)e(instruction)h(is)g(alw)m(a)m(ys)g(in)g(error)f(if)
+ 568 4430 y(executed.)568 4591 y(Example:)568 4836 y Fg(#include)53
+ b(<stdlib.h>)1918 5251 y Fi(9)p eop end
+ %%Page: 10 10
+ TeXDict begin 10 9 bop 568 548 a Fg(void)52 b(f\(\))g({)670
+ 668 y(char)h(*x)e(=)h(\(char*\))h('y';)670 789 y(free\(x\);)568
+ 909 y(})469 1131 y Fd(\017)c Fg(free)j(of)g(non-heap)h(memory.)568
+ 1251 y Fi(A)46 b(free)g(instruction)h(ma)m(y)g(only)g(free)f(memory)h
+ (allo)s(cated)f(with)h(the)g(mallo)s(c)568 1372 y(instruction,)33
+ b(not)g(with)g(allo)s(ca)f(nor)h(a)f(p)s(oin)m(ter)h(to)f(a)g(v)-5
+ b(ariable.)568 1530 y(Example:)568 1752 y Fg(#include)53
+ b(<stdlib.h>)568 1993 y(void)f(f\(\))g({)670 2113 y(char)h(x;)670
+ 2233 y(char)g(*y)e(=)h(&x;)670 2354 y(free\(y\);)568
+ 2474 y(})469 2696 y Fd(\017)d Fg(write)j(to)g(constant)h(memory.)568
+ 2816 y Fi(In)45 b(C,)g(a)f(v)-5 b(ariable)45 b(declared)h
+ Fg(const)g Fi(ma)m(y)g(not)e(b)s(e)h(mo)s(di\014ed,)k(although)44
+ b(the)568 2936 y(compiler)24 b(will)h(not)e(stop)h(y)m(ou)g(if)g(y)m
+ (ou)g(tak)m(e)g(a)g(p)s(oin)m(ter)g(and)f(cast)h(a)m(w)m(a)m(y)h
+ (constness.)568 3095 y(Example:)568 3317 y Fg(void)52
+ b(f\(\))g({)670 3437 y(char)h(*x)e(=)h("String!";)670
+ 3557 y(x[0])h(=)e('s';)568 3678 y(})469 3900 y Fd(\017)e
+ Fg(write)j(to)g(function)h(pointer.)568 4020 y(read)f(from)g(function)i
+ (pointer.)568 4140 y Fi(The)47 b(p)s(oin)m(ter)g(b)s(eing)g(read)g(or)f
+ (written)i(is)f(kno)m(wn)h(to)e(b)s(e)h(the)g(address)h(of)e(a)568
+ 4261 y(function.)568 4419 y(Example:)568 4641 y Fg(char)52
+ b(f\(\))g({)670 4761 y(char)h(*F)e(=)h(f;)670 4882 y(return)h(*F;)568
+ 5002 y(})1894 5251 y Fi(10)p eop end
+ %%Page: 11 11
+ TeXDict begin 11 10 bop 469 548 a Fd(\017)49 b Fg(call)j(via)g
+ (non-function)j(pointer.)568 668 y Fi(The)34 b(input)g(co)s(de)f(tak)m
+ (es)h(a)f(p)s(oin)m(ter)h(to)f(a)g(v)-5 b(ariable)33
+ b(or)g(allo)s(cated)g(memory)h(and)568 789 y(then)j(casts)g(it)g(in)m
+ (to)f(a)h(function)g(p)s(oin)m(ter)g(and)f(tries)h(to)g(call)f(it.)55
+ b(In)37 b(some)h(rare)568 909 y(cases)j(this)f(ma)m(y)g(b)s(e)g(in)m
+ (ten)m(tional;)k(a)c(JITter)g(will)h(allo)s(cate)e(memory)i(to)e(emit)
+ 568 1029 y(target)27 b(instructions)j(for)d(execution.)44
+ b(Ho)m(w)m(ev)m(er,)31 b(it)d(is)h(unp)s(ortable)f(and)g(target-)568
+ 1150 y(sp)s(eci\014c,)40 b(and)d(the)g(b)s(eha)m(viour)h(is)g(not)f
+ (de\014ned)i(b)m(y)f(the)f(C)h(or)e(C++)i(language)568
+ 1270 y(standard.)568 1432 y(Example:)568 1677 y Fg(void)52
+ b(f\(\))g({)670 1797 y(char)h(x;)670 1918 y(char)g(*y)e(=)h(&x;)670
+ 2038 y(void)h(\(*F\)\(\))f(=)g(\(void\(*\)\(\)\))i(y;)670
+ 2159 y(F\(\);)568 2279 y(})470 2524 y Fi(None)23 b(of)f(these)h(errors)
+ g(rely)g(on)f(kno)m(wledge)i(of)e(the)h(t)m(yp)s(e)g(system,)k(so)22
+ b(the)h(errors)g(are)324 2644 y(found)i(at)f(the)h(p)s(oin)m(t)g(of)f
+ (memory)h(op)s(eration,)h(not)f(at)f(a)g(p)s(oten)m(tially)i(harmless)g
+ (casting)324 2765 y(instruction.)41 b(In)23 b(this)g(con)m(text,)j(the)
+ e(term)f(\\function")f(refers)i(to)e(the)h(functions)h(visible)324
+ 2885 y(at)32 b(link)h(time.)470 3005 y(All)39 b(of)g(the)g(examples)i
+ (compile)f(in)f(GCC)h(3.3)e(with)i(no)f(w)m(arnings,)j(ev)m(en)e(in)f
+ (full)324 3126 y(w)m(arnings)30 b(mo)s(de.)43 b(GCC)30
+ b(3.4)f(and)h(up)g(note)f(that)h(casting)g(b)s(et)m(w)m(een)h(function)
+ f(p)s(oin)m(ter)324 3246 y(t)m(yp)s(es)k(and)e(data)h(p)s(oin)m(ter)g
+ (t)m(yp)s(es)h(is)f(in)m(v)-5 b(alid.)324 3579 y Fk(4)161
+ b(T)-13 b(ec)l(hnical)52 b(No)l(v)l(elt)l(y)324 3798
+ y Fi(Chec)m(k)m(er's)26 b(most)d(in)m(teresting)h(w)m(ork)g(is)f
+ (handled)g(b)m(y)h(the)f(p)s(oin)m(ter)g(analysis)h(mec)m(hanism)324
+ 3918 y(to)35 b(follo)m(w)g(the)h(propagation)e(of)h(p)s(oin)m(ters)h
+ (through)f(the)h(program)f(\015o)m(w.)52 b(The)36 b(result)324
+ 4039 y(is)30 b(that)f(at)g(an)m(y)h(p)s(oin)m(t)g(in)g(the)g(program,)f
+ (c)m(hec)m(k)m(er)k(can)c(pro)s(duce)i(a)e(list)h(of)f(all)g(p)s
+ (ossible)324 4159 y(memory)44 b(regions)f(b)s(eing)g(aliased)g(\(a)f
+ (shorter)i(list)f(than)g(the)g(list)g(of)f(all)h(p)s(oin)m(ters\),)324
+ 4280 y(ev)m(en)34 b(in)f(a)f(t)m(yp)s(e-unsafe)i(program.)470
+ 4400 y(The)40 b(issue)h(at)e(hand)h(is)g(whic)m(h)h(p)s(oin)m(ters)f(a)
+ f(giv)m(en)i(memory)f(op)s(eration)f(ma)m(y)h(b)s(e)324
+ 4520 y(op)s(erating)31 b(on.)43 b(Although)31 b(some)i(op)s(erations)e
+ (ma)m(y)h(reduce)h(a)e(p)s(oin)m(ter|b)m(y)i(masking)324
+ 4641 y(o\013)k(all)g(of)f(the)i(top)f(bits)g(for)g(example|could)i
+ (that)e(p)s(oin)m(ter)g(v)-5 b(alue)38 b(ha)m(v)m(e)g(b)s(een)g(cal-)
+ 324 4761 y(culated)e(and)g(used)h(in)f(this)g(instruction?)53
+ b(As)37 b(written,)g(the)f(algorithm)f(errs)i(on)e(the)324
+ 4881 y(side)e(of)g(caution.)43 b(Con)m(tin)m(uing)34
+ b(our)f(example:)1894 5251 y(11)p eop end
+ %%Page: 12 12
+ TeXDict begin 12 11 bop 324 548 a Fg(char)52 b(x;)324
+ 789 y(char)g(*f\(\))324 909 y({)426 1029 y(long)h(ptr)f(=)f
+ (\(long\)&x;)426 1150 y(long)i(x)e(=)h(ptr)g(&)f(0x0000ffff;)426
+ 1270 y(long)i(y)e(=)h(ptr)g(&)f(0xffff0000;)426 1391
+ y(char)i(*p)e(=)h(\(char*\)\(x)i(+)d(y\);)426 1511 y(return)i(p;)324
+ 1631 y(})470 1839 y Fi(Chec)m(k)m(er)36 b(nev)m(er)f(actually)f(pro)m
+ (v)m(es)i(that)d(p)s(oin)m(ter)h Fg(p)f Fi(is)h(correctly)h(p)s(oin)m
+ (ting)f(to)f(our)324 1959 y(c)m(haracter)41 b Fg(x)p
+ Fi(.)67 b(Through)40 b(data-\015o)m(w,)j(c)m(hec)m(k)m(er)g(kno)m(ws)f
+ (that)e(the)g(only)h(p)s(oin)m(ter)g(con-)324 2079 y(tributing)c(to)f
+ Fg(p)g Fi(is)h Fg(&x)p Fi(.)56 b(W)-8 b(e)37 b(can)f(then)h(state)g(is)
+ g(that)f(an)m(y)i(access)g(through)e Fg(p)h Fi(either)324
+ 2200 y(refers)c(to)g Fg(&x)p Fi(,)g(or)f(else)i(refers)g(to)e
+ (indeterminate)j(memory)f(as)e(an)h(in)m(v)-5 b(alid)34
+ b(access.)45 b(A)m(t)324 2320 y(this)33 b(time,)h(c)m(hec)m(k)m(er)i
+ (is)d(unable)h(to)e(determine)j(whether)f(the)f(\014nal)g(p)s(oin)m
+ (ter)g(is)h(in)f(fact)324 2441 y(v)-5 b(alid,)33 b(and)f(so)h(mak)m(es)
+ h(the)f(conserv)-5 b(ativ)m(e)35 b(assumption)f(that)e(it)h(is.)324
+ 2727 y Fh(4.1)135 b(P)l(oin)l(ter)46 b(Analysis)324 2911
+ y Fi(Chec)m(k)m(er's)31 b(metho)s(d)d(of)g(p)s(oin)m(ter)g(analysis)h
+ (is)g(\015o)m(w-based,)h(t)m(yp)s(e-ignoran)m(t)e(and)g(whole-)324
+ 3032 y(program)g(approac)m(h)i(starting)f(with)g(the)h(p)s(oin)m(ts)f
+ (of)g(creation,)h(similar)g(to)e(Andersen's)324 3152
+ y(Analysis[And94)r(])21 b(or)h(P)m(oin)m(ts-T)-8 b(o)23
+ b(Analysis)g(using)f(Binary)h(Decision)f(Diagrams[BLQ)3531
+ 3116 y Fe(+)3590 3152 y Fi(03)o(].)324 3273 y(P)m(oin)m(ts)49
+ b(of)d(creation)i(are)g(explicit)h(allo)s(cations,)i(global)c(v)-5
+ b(ariables)48 b(and)g(functions,)324 3393 y(whic)m(h)40
+ b(ma)m(y)g(b)s(e)f(dereferenced.)65 b(Eac)m(h)40 b(of)e(these)i(allo)s
+ (cations)f(is)h(a)e(region)h(from)g(the)324 3513 y(base)33
+ b(p)s(oin)m(ter)g(up)g(to)f(a)h(size)g(whic)m(h)h(ma)m(y)g(not)e(b)s(e)
+ h(kno)m(wn)h(un)m(til)f(execution)h(time.)470 3634 y(The)29
+ b(set)h(of)d(instructions)j(op)s(erating)f(on)f(these)i(p)s(oin)m(ters)
+ f(is)g(then)g(calculated)g(as)g(a)324 3754 y(transitiv)m(e)37
+ b(closure)g(through)e(the)h(instructions.)54 b(Eac)m(h)37
+ b(instruction)g(is)f(tagged)f(with)324 3874 y(the)i(exhaustiv)m(e)j
+ (set)e(of)e(p)s(oin)m(ters)i(that)f(its)g(result)h(ma)m(y)g(b)s(e)f(an)
+ g(expression)i(of.)57 b(The)324 3995 y(algorithm)32 b(to)g(ac)m(hiev)m
+ (e)j(this)e(is)g(describ)s(ed)i(b)m(y)e(three)h(discrete)g(passes:)443
+ 4202 y(1.)49 b(Starting)31 b(at)g(eac)m(h)i(p)s(oin)m(t)e(of)g
+ (creation,)h(iterate)g(through)g(the)g(list)g(of)f(users)h(and)568
+ 4322 y(follo)m(w)24 b(through)g(its)h(users)g(transitiv)m(ely)-8
+ b(.)43 b(This)25 b(pro)s(duces)g(a)f(tree)h(where)g(the)g(leaf)568
+ 4443 y(no)s(des)i(are)h(memory)g(loads,)h(or)d(instructions)j(that)e
+ (ha)m(v)m(e)i(no)e(useful)h(result)g(suc)m(h)568 4563
+ y(as)d(branc)m(hes,)j(memory)e(stores)g(or)f(frees.)41
+ b(The)26 b(result)g(of)f(an)m(y)g(other)g(instruction)568
+ 4684 y(is)33 b(assumed)h(to)e(b)s(e)h(a)f(function)h(of)f(the)i(base)f
+ (p)s(oin)m(ter.)443 4882 y(2.)49 b(The)37 b(load-store)f(pairing)g
+ (pass)i(\014nds)f(matc)m(hing)g(store)g(instructions)h(for)e(eac)m(h)
+ 568 5002 y(load)c(instruction)h(to)f(see)i(if)e(a)g(p)s(oin)m(ter)h
+ (could)g(ha)m(v)m(e)h(b)s(een)f(stored)g(there.)44 b(If)32
+ b(so,)1894 5251 y(12)p eop end
+ %%Page: 13 13
+ TeXDict begin 13 12 bop 568 548 a Fi(the)33 b(result)g(of)g(this)g
+ (load)g(instruction)h(is)f(also)g(tagged)f(with)h(the)h(same)f(p)s(oin)
+ m(ter)568 668 y(and)f(w)m(e)i(m)m(ust)g(rep)s(eat)e(step)i(one.)568
+ 830 y(As)26 b(w)m(ell)g(as)g(stores,)i(w)m(e)f(also)e(pair)h(loads)f
+ (with)h(global)g(v)-5 b(ariables)26 b(that)f(ma)m(y)h(ha)m(v)m(e)568
+ 951 y(b)s(een)33 b(initialized)h(with)f(the)g(address)h(of)e(another)h
+ (global)f(v)-5 b(ariable.)443 1154 y(3.)49 b(Finally)-8
+ b(,)42 b(a)e(p)s(oin)m(ter)g(ma)m(y)h(b)s(e)g(laundered)g(through)f
+ (the)h(CF)m(G.)f(The)h(example)568 1274 y(program)46
+ b(on)h(the)h(follo)m(wing)f(page)g(demonstrates)i(this)f(tec)m(hnique)h
+ (using)f(a)568 1395 y(branc)m(h)26 b(instruction)i(to)d(c)m(ho)s(ose)i
+ (a)f(basic)g(blo)s(c)m(k)h(based)g(on)f(a)f(bit)i(in)f(the)g(p)s(oin)m
+ (ter.)568 1515 y(Eac)m(h)31 b(basic)g(blo)s(c)m(k)g(stores)g(0)f(or)g
+ (1)g(to)g(an)g(arra)m(y)-8 b(.)43 b(There)31 b(is)g(no)f(direct)h(data)
+ f(\015o)m(w)568 1636 y(from)35 b(the)g(p)s(oin)m(ter)h(in)m(to)g(the)f
+ (arra)m(y)-8 b(.)52 b(Rep)s(eat)35 b(this)h(32)f(times)h(to)f(leak)h(a)
+ f(32-bit)568 1756 y(p)s(oin)m(ter.)568 1918 y(In)23 b(order)g(to)g
+ (detect)h(this,)i(w)m(e)e(note)f(an)m(y)g(branc)m(h)h(statemen)m(t)h
+ (that)e(is)g(conditional)568 2038 y(on)36 b(a)h(p)s(oin)m(ter)g(v)-5
+ b(alue.)57 b(The)37 b(p)s(oin)m(ter)h(v)-5 b(alue)37
+ b(is)g(assumed)i(to)d(b)s(e)h(kno)m(wn)h(in)f(the)568
+ 2159 y(basic)h(blo)s(c)m(ks)g(link)m(ed)h(to)e(from)g(the)g(branc)m(h,)
+ j(and)d(transitiv)m(ely)i(in)f(the)f(blo)s(c)m(ks)568
+ 2279 y(that)h(it)h(leads)h(to,)g(ending)g(where)g(the)g(paths)f(of)g
+ (the)g(branc)m(h)h(con)m(v)m(erge.)64 b(W)-8 b(e)568
+ 2399 y(calculate)28 b(this)g(b)m(y)h(taking)f(the)g(set)g(of)f(basic)h
+ (blo)s(c)m(ks)h(reac)m(hable)g(starting)f(at)f(the)568
+ 2520 y(branc)m(h,)h(and)e(remo)m(ving)h(the)g(in)m(tersection)h(of)d
+ (basic)i(blo)s(c)m(ks)g(reac)m(hable)h(b)m(y)f(eac)m(h)568
+ 2640 y(of)38 b(the)h(branc)m(h's)h(conditions.)63 b(The)40
+ b(result)f(is)h(the)f(set)g(of)f(blo)s(c)m(ks)j(that)d(could)568
+ 2760 y(exp)s(ose)c(the)f(p)s(oin)m(ter)g(v)-5 b(alue.)568
+ 2922 y(Within)31 b(these)i(blo)s(c)m(ks,)f(an)m(y)g(store)f(to)g
+ (memory)h(could)g(p)s(oten)m(tially)g(b)s(e)f(leaking)568
+ 3043 y(the)e(p)s(oin)m(ter,)i(ev)m(en)g(the)f(store)g(of)f(a)g(constan)
+ m(t.)43 b(As)30 b(suc)m(h)h(all)e(stores)h(are)g(tagged.)568
+ 3163 y(More)42 b(improbable)g(is)g(that)g(the)g(result)g(of)f(all)h
+ (loads)g(m)m(ust)g(also)g(b)s(e)g(tagged.)568 3284 y(One)47
+ b(example)h(w)m(ould)g(b)s(e)f(a)g(32)f(lev)m(els)j(of)e(nested)h(if)f
+ (statemen)m(ts)i(uniquely)568 3404 y(iden)m(tifying)39
+ b(eac)m(h)g(p)s(ossible)g(v)-5 b(alue)39 b(of)e(a)h(32-bit)f(p)s(oin)m
+ (ter,)j(then)f(dereferencing)568 3524 y(that)32 b(constan)m(t)h(v)-5
+ b(alue.)568 3686 y(After)39 b(that,)i(newly)g(de\014ned)g(SSA)f(v)-5
+ b(ariables)40 b(inside)h(these)g(basic)f(blo)s(c)m(ks)h(are)568
+ 3807 y(tagged.)f(The)26 b(successor)h(blo)s(c)m(ks)f(are)f(c)m(hec)m(k)
+ m(ed)j(to)c(see)i(if)f(there)g(are)g(an)m(y)h Ff(\036)p
+ Fi(-no)s(des)568 3927 y(leading)h(bac)m(k)h(in)m(to)f(the)g(set.)42
+ b(If)27 b(so,)h(they)g(are)e(tagged)h(as)g(w)m(ell.)42
+ b(No)m(w)28 b(that)e(these)568 4047 y(new)38 b(instructions)i(ha)m(v)m
+ (e)f(b)s(een)f(added)g(to)g(the)g(closure,)i(w)m(e)f(m)m(ust)f(rep)s
+ (eat)g(the)568 4168 y(algorithm)32 b(starting)h(at)f(step)h(one.)470
+ 4396 y(Through)50 b(this)g(algorithm,)k(the)c(c)m(hec)m(k)m(er)j(solv)m
+ (es)e(for)e(the)h(set)h(of)e(all)g(p)s(ossible)324 4516
+ y(p)s(oin)m(ter)33 b(v)-5 b(alues)33 b(in)m(v)m(olv)m(ed)i(in)e(the)g
+ (execution)h(of)f(an)m(y)g(giv)m(en)g(instruction.)1894
+ 5251 y(13)p eop end
+ %%Page: 14 14
+ TeXDict begin 14 13 bop 324 4767 a @beginspecial 36 @llx
+ 36 @lly 1012 @urx 1334 @ury 3885 @rwi @setspecial
+ %%BeginDocument: example1.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 2.8 (Sun Apr  9 22:27:31 UTC 2006)
+ %%For: (nicholas) Nicholas
+ %%Title: example1
+ %%Pages: (atend)
+ %%BoundingBox: 36 36 1012 1334
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ EncodingVector 45 /hyphen put
+ 
+ % Set up ISO Latin 1 character encoding
+ /starnetISO {
+         dup dup findfont dup length dict begin
+         { 1 index /FID ne { def }{ pop pop } ifelse
+         } forall
+         /Encoding EncodingVector def
+         currentdict end definefont
+ } def
+ /Times-Roman starnetISO def
+ /Times-Italic starnetISO def
+ /Times-Bold starnetISO def
+ /Times-BoldItalic starnetISO def
+ /Helvetica starnetISO def
+ /Helvetica-Oblique starnetISO def
+ /Helvetica-Bold starnetISO def
+ /Helvetica-BoldOblique starnetISO def
+ /Courier starnetISO def
+ /Courier-Oblique starnetISO def
+ /Courier-Bold starnetISO def
+ /Courier-BoldOblique starnetISO def
+ cleartomark
+ } bind def
+ 
+ %%BeginResource: procset graphviz 0 0
+ /coord-font-family /Times-Roman def
+ /default-font-family /Times-Roman def
+ /coordfont coord-font-family findfont 8 scalefont def
+ 
+ /InvScaleFactor 1.0 def
+ /set_scale {
+ 	dup 1 exch div /InvScaleFactor exch def
+ 	dup scale
+ } bind def
+ 
+ % styles
+ /solid { [] 0 setdash } bind def
+ /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+ /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+ /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+ /bold { 2 setlinewidth } bind def
+ /filled { } bind def
+ /unfilled { } bind def
+ /rounded { } bind def
+ /diagonals { } bind def
+ 
+ % hooks for setting color 
+ /nodecolor { sethsbcolor } bind def
+ /edgecolor { sethsbcolor } bind def
+ /graphcolor { sethsbcolor } bind def
+ /nopcolor {pop pop pop} bind def
+ 
+ /beginpage {	% i j npages
+ 	/npages exch def
+ 	/j exch def
+ 	/i exch def
+ 	/str 10 string def
+ 	npages 1 gt {
+ 		gsave
+ 			coordfont setfont
+ 			0 0 moveto
+ 			(\() show i str cvs show (,) show j str cvs show (\)) show
+ 		grestore
+ 	} if
+ } bind def
+ 
+ /set_font {
+ 	findfont exch
+ 	scalefont setfont
+ } def
+ 
+ % draw aligned label in bounding box aligned to current point
+ /alignedtext {			% width adj text
+ 	/text exch def
+ 	/adj exch def
+ 	/width exch def
+ 	gsave
+ 		width 0 gt {
+ 			text stringwidth pop adj mul 0 rmoveto
+ 		} if
+ 		[] 0 setdash
+ 		text show
+ 	grestore
+ } def
+ 
+ /boxprim {				% xcorner ycorner xsize ysize
+ 		4 2 roll
+ 		moveto
+ 		2 copy
+ 		exch 0 rlineto
+ 		0 exch rlineto
+ 		pop neg 0 rlineto
+ 		closepath
+ } bind def
+ 
+ /ellipse_path {
+ 	/ry exch def
+ 	/rx exch def
+ 	/y exch def
+ 	/x exch def
+ 	matrix currentmatrix
+ 	newpath
+ 	x y translate
+ 	rx ry scale
+ 	0 0 1 0 360 arc
+ 	setmatrix
+ } bind def
+ 
+ /endpage { showpage } bind def
+ /showpage { } def
+ 
+ /layercolorseq
+ 	[	% layer color sequence - darkest to lightest
+ 		[0 0 0]
+ 		[.2 .8 .8]
+ 		[.4 .8 .8]
+ 		[.6 .8 .8]
+ 		[.8 .8 .8]
+ 	]
+ def
+ 
+ /layerlen layercolorseq length def
+ 
+ /setlayer {/maxlayer exch def /curlayer exch def
+ 	layercolorseq curlayer 1 sub layerlen mod get
+ 	aload pop sethsbcolor
+ 	/nodecolor {nopcolor} def
+ 	/edgecolor {nopcolor} def
+ 	/graphcolor {nopcolor} def
+ } bind def
+ 
+ /onlayer { curlayer ne {invis} if } def
+ 
+ /onlayers {
+ 	/myupper exch def
+ 	/mylower exch def
+ 	curlayer mylower lt
+ 	curlayer myupper gt
+ 	or
+ 	{invis} if
+ } def
+ 
+ /curlayer 0 def
+ 
+ %%EndResource
+ %%EndProlog
+ %%BeginSetup
+ 14 default-font-family set_font
+ 1 setmiterlimit
+ % /arrowlength 10 def
+ % /arrowwidth 5 def
+ 
+ % make sure pdfmark is harmless for PS-interpreters other than Distiller
+ /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+ % make '<<' and '>>' safe on PS Level 1 devices
+ /languagelevel where {pop languagelevel}{1} ifelse
+ 2 lt {
+     userdict (<<) cvn ([) cvn load put
+     userdict (>>) cvn ([) cvn load put
+ } if
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%PageBoundingBox: 36 36 1012 1334
+ %%PageOrientation: Portrait
+ gsave
+ 36 36 976 1298 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 1.0000 set_scale
+ 4 4 translate 0 rotate
+ 0.000 0.000 1.000 graphcolor
+ 0.000 0.000 1.000 graphcolor
+ newpath -6 -6 moveto
+ -6 1296 lineto
+ 974 1296 lineto
+ 974 -6 lineto
+ closepath
+ fill
+ 0.000 0.000 1.000 graphcolor
+ newpath -6 -6 moveto
+ -6 1296 lineto
+ 974 1296 lineto
+ 974 -6 lineto
+ closepath
+ stroke
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ gsave 10 dict begin
+ 417 7 moveto
+ (CFG for 'main' function)
+ [9.36 7.68 10.08 3.6 4.08 6.96 4.8 3.6 2.64 10.8 6.24 3.84 6.96 2.64 3.6 4.56 6.96 6.96 6.24 3.84 3.84 6.96 6.96]
+ xshow
+ end grestore
+ % Node0x85fc3c8
+ gsave 10 dict begin
+ newpath 450 1146 moveto
+ 649 1146 lineto
+ 649 1290 lineto
+ 450 1290 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 458 1273 moveto
+ (entry:)
+ [6.24 6.96 3.84 5.04 6.72 3.84]
+ xshow
+ 458 1257 moveto
+ ( %t = alloca int )
+ [3.6 11.76 3.84 3.6 7.92 3.6 6.24 3.84 3.84 6.96 6.24 6.24 3.6 3.84 6.96 3.84 3.6]
+ xshow
+ 458 1241 moveto
+ ( %v = alloca [32 x bool] )
+ [3.6 11.76 6.96 3.6 7.92 3.6 6.24 3.84 3.84 6.96 6.24 6.24 3.6 4.56 6.96 6.96 3.6 6.96 3.6 6.96 6.96 6.96 3.84 4.56 3.6]
+ xshow
+ 458 1225 moveto
+ ( call void %__main\( \))
+ [3.6 6.24 6.24 3.84 3.84 3.6 6.48 6.96 3.84 6.96 3.6 11.76 6.96 6.96 10.8 6.24 3.84 6.96 4.56 3.6 4.56]
+ xshow
+ 458 1209 moveto
+ ( store int 42, int* %t)
+ [3.6 5.28 3.84 6.96 4.8 6.24 3.6 3.84 6.96 3.84 3.6 6.96 6.96 3.6 3.6 3.84 6.96 3.84 6.96 3.6 11.76 3.84]
+ xshow
+ 458 1193 moveto
+ ( %tmp.6 = cast int* %t to ulong )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 3.6 7.92 3.6 6.24 6.24 5.28 3.84 3.6 3.84 6.96 3.84 6.96 3.6 11.76 3.84 3.6 3.84 6.96 3.6 6.96 3.84 6.96 6.96 6.96 3.6]
+ xshow
+ 458 1177 moveto
+ ( br label %no_exit.0)
+ [3.6 6.96 4.8 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 6.96 6.96 6.96 5.76 6.96 3.84 3.84 3.6 6.96]
+ xshow
+ end grestore
+ newpath 450 1170 moveto
+ 649 1170 lineto
+ stroke
+ gsave 10 dict begin
+ 549 1153 moveto 5.0 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ % Node0x85feac8
+ gsave 10 dict begin
+ newpath 328 948 moveto
+ 771 948 lineto
+ 771 1108 lineto
+ 328 1108 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 336 1091 moveto
+ (no_exit.0: )
+ [6.96 6.96 6.96 5.76 6.96 3.84 3.84 3.6 6.96 3.84 3.6]
+ xshow
+ 336 1075 moveto
+ ( %i.0.0.0 = phi uint [ 0, %entry ], [ %inc.08, %then.0 ], [ %inc.0, %else.0 ] )
+ [3.6 11.76 3.84 3.6 6.96 3.6 6.96 3.6 6.96 3.6 7.92 3.6 6.96 6.96 3.84 3.6 6.96 3.84 6.96 3.84 3.6 4.56 3.6 6.96 3.6 3.6 11.76 6.24 6.96 3.84 5.04 6.96 3.6 4.56 3.6 3.6 4.56 3.6 11.76 3.84 6.96 6.24 3.6 6.96 6.96 3.6 3.6 11.76 4.08 6.96 6.24 6.96 3.6 6.96 3.6 4.56 3.6 3.6 4.56 3.6 11.76 3.84 6.96 6.24 3.6 6.96 3.6 3.6 11.76 6.24 3.84 5.52 6.24 3.6 6.96 3.6 4.56 3.6]
+ xshow
+ 336 1059 moveto
+ ( %tmp.11 = cast uint %i.0.0.0 to ubyte )
+ [3.6 11.76 3.84 10.56 6.96 2.64 5.76 6.96 3.6 7.92 3.6 6.24 6.24 5.28 3.84 3.6 6.96 3.84 6.96 3.84 3.6 11.76 3.84 3.6 6.96 3.6 6.96 3.6 6.96 3.6 3.84 6.96 3.6 6.96 6.48 6.96 3.84 6.24 3.6]
+ xshow
+ 336 1043 moveto
+ ( %tmp.12 = shl int 1, ubyte %tmp.11 )
+ [3.6 11.76 3.84 10.56 6.96 2.64 6.48 6.96 3.6 7.92 3.6 5.52 6.96 3.84 3.6 3.84 6.96 3.84 3.6 6.24 3.6 3.6 6.96 6.48 6.96 3.84 6.24 3.6 11.76 3.84 10.56 6.96 2.64 5.76 6.96 3.6]
+ xshow
+ 336 1027 moveto
+ ( %tmp.13 = cast int %tmp.12 to ulong )
+ [3.6 11.76 3.84 10.56 6.96 2.64 6.48 6.96 3.6 7.92 3.6 6.24 6.24 5.28 3.84 3.6 3.84 6.96 3.84 3.6 11.76 3.84 10.56 6.96 2.64 6.48 6.96 3.6 3.84 6.96 3.6 6.96 3.84 6.96 6.96 6.96 3.6]
+ xshow
+ 336 1011 moveto
+ ( %tmp.15 = and ulong %tmp.13, %tmp.6 )
+ [3.6 11.76 3.84 10.56 6.96 2.64 6.48 6.96 3.6 7.92 3.6 6.24 6.96 6.96 3.6 6.96 3.84 6.96 6.96 6.96 3.6 11.76 3.84 10.56 6.96 2.64 6.48 6.96 3.6 3.6 11.76 3.84 10.56 6.96 3.6 6.96 3.6]
+ xshow
+ 336 995 moveto
+ ( %tmp.16 = seteq ulong %tmp.15, 0 )
+ [3.6 11.76 3.84 10.56 6.96 2.64 6 6.96 3.6 7.92 3.6 5.52 6 3.84 6.24 6.96 3.6 6.96 3.84 6.96 6.96 6.96 3.6 11.76 3.84 10.56 6.96 2.64 6.48 6.96 3.6 3.6 6.96 3.6]
+ xshow
+ 336 979 moveto
+ ( br bool %tmp.16, label %else.0, label %then.0)
+ [3.6 6.96 4.8 3.6 6.96 6.96 6.96 3.84 3.6 11.76 3.84 10.56 6.96 2.64 6 6.96 3.6 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 6.24 3.84 5.52 6.24 3.6 6.96 3.6 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 4.08 6.96 6.24 6.96 3.6 6.96]
+ xshow
+ end grestore
+ newpath 328 972 moveto
+ 771 972 lineto
+ stroke
+ gsave 10 dict begin
+ 439 955 moveto 9.0 -0.5 (T) alignedtext
+ end grestore
+ newpath 550 948 moveto
+ 550 972 lineto
+ stroke
+ gsave 10 dict begin
+ 660 955 moveto 8.0 -0.5 (F) alignedtext
+ end grestore
+ end grestore
+ % Node0x85fc3c8->Node0x85feac8
+ newpath 549 1146 moveto
+ 549 1139 549 1129 549 1118 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 553 1118 moveto
+ 549 1108 lineto
+ 546 1118 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 553 1118 moveto
+ 549 1108 lineto
+ 546 1118 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85fedb0
+ gsave 10 dict begin
+ newpath 176 766 moveto
+ 565 766 lineto
+ 565 910 lineto
+ 176 910 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 184 893 moveto
+ (else.0: )
+ [6.24 3.84 5.52 6.24 3.6 6.96 3.84 3.6]
+ xshow
+ 184 877 moveto
+ ( %tmp.21 = cast uint %i.0.0.0 to long )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.24 6.96 3.6 7.92 3.6 6.24 6.24 5.28 3.84 3.6 6.96 3.84 6.96 3.84 3.6 11.76 3.84 3.6 6.96 3.6 6.96 3.6 6.96 3.6 3.84 6.96 3.6 3.84 6.96 6.96 6.96 3.6]
+ xshow
+ 184 861 moveto
+ ( %tmp.22 = getelementptr [32 x bool]* %v, long 0, long %tmp.21 )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 7.92 3.6 6.72 6 3.84 6.24 3.84 6.24 10.8 6.24 6.96 3.84 6.96 3.84 4.8 3.6 4.56 6.96 6.96 3.6 6.96 3.6 6.96 6.96 6.96 3.84 4.56 6.96 3.6 11.76 6 3.6 3.6 3.84 6.96 6.96 6.96 3.6 6.96 3.6 3.6 3.84 6.96 6.96 6.96 3.6 11.76 3.84 10.56 6.96 3.6 6.24 6.96 3.6]
+ xshow
+ 184 845 moveto
+ ( store bool false, bool* %tmp.22)
+ [3.6 5.28 3.84 6.96 4.8 6.24 3.6 6.96 6.96 6.96 3.84 3.6 4.32 6.24 3.84 5.52 6.24 3.6 3.6 6.96 6.96 6.96 3.84 6.96 3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96]
+ xshow
+ 184 829 moveto
+ ( %inc.0 = add uint %i.0.0.0, 1 )
+ [3.6 11.76 3.84 6.96 6.24 3.6 6.96 3.6 7.92 3.6 6.24 6.96 6.96 3.6 6.96 3.84 6.96 3.84 3.6 11.76 3.84 3.6 6.96 3.6 6.96 3.6 6.96 3.6 3.6 6.96 3.6]
+ xshow
+ 184 813 moveto
+ ( %tmp.8 = setgt uint %inc.0, 31 )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 3.6 7.92 3.6 5.52 6 3.84 6.96 3.84 3.6 6.96 3.84 6.96 3.84 3.6 11.76 3.84 6.96 6.24 3.6 6.96 3.6 3.6 6 6.96 3.6]
+ xshow
+ 184 797 moveto
+ ( br bool %tmp.8, label %loopexit.0, label %no_exit.0)
+ [3.6 6.96 4.8 3.6 6.96 6.96 6.96 3.84 3.6 11.76 3.84 10.56 6.96 3.6 6.96 3.6 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 3.84 6.96 6.96 6.96 5.76 6.96 3.84 3.84 3.6 6.96 3.6 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 6.96 6.96 6.96 5.76 6.96 3.84 3.84 3.6 6.96]
+ xshow
+ end grestore
+ newpath 176 790 moveto
+ 565 790 lineto
+ stroke
+ gsave 10 dict begin
+ 273 773 moveto 9.0 -0.5 (T) alignedtext
+ end grestore
+ newpath 371 766 moveto
+ 371 790 lineto
+ stroke
+ gsave 10 dict begin
+ 468 773 moveto 8.0 -0.5 (F) alignedtext
+ end grestore
+ end grestore
+ % Node0x85feac8->Node0x85fedb0
+ newpath 432 948 moveto
+ 428 940 422 930 416 919 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 419 917 moveto
+ 411 910 lineto
+ 413 920 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 419 917 moveto
+ 411 910 lineto
+ 413 920 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85fec60
+ gsave 10 dict begin
+ newpath 582 766 moveto
+ 968 766 lineto
+ 968 910 lineto
+ 582 910 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 590 893 moveto
+ (then.0: )
+ [4.08 6.96 6.24 6.96 3.6 6.96 3.84 3.6]
+ xshow
+ 590 877 moveto
+ ( %tmp.18 = cast uint %i.0.0.0 to long )
+ [3.6 11.76 3.84 10.56 6.96 2.64 6 6.96 3.6 7.92 3.6 6.24 6.24 5.28 3.84 3.6 6.96 3.84 6.96 3.84 3.6 11.76 3.84 3.6 6.96 3.6 6.96 3.6 6.96 3.6 3.84 6.96 3.6 3.84 6.96 6.96 6.96 3.6]
+ xshow
+ 590 861 moveto
+ ( %tmp.19 = getelementptr [32 x bool]* %v, long 0, long %tmp.18 )
+ [3.6 11.76 3.84 10.56 6.96 2.64 6 6.96 3.6 7.92 3.6 6.72 6 3.84 6.24 3.84 6.24 10.8 6.24 6.96 3.84 6.96 3.84 4.8 3.6 4.56 6.96 6.96 3.6 6.96 3.6 6.96 6.96 6.96 3.84 4.56 6.96 3.6 11.76 6 3.6 3.6 3.84 6.96 6.96 6.96 3.6 6.96 3.6 3.6 3.84 6.96 6.96 6.96 3.6 11.76 3.84 10.56 6.96 2.64 6 6.96 3.6]
+ xshow
+ 590 845 moveto
+ ( store bool true, bool* %tmp.19)
+ [3.6 5.28 3.84 6.96 4.8 6.24 3.6 6.96 6.96 6.96 3.84 3.6 3.84 5.04 6.96 6.24 3.6 3.6 6.96 6.96 6.96 3.84 6.96 3.6 11.76 3.84 10.56 6.96 2.64 6 6.96]
+ xshow
+ 590 829 moveto
+ ( %inc.08 = add uint %i.0.0.0, 1 )
+ [3.6 11.76 3.84 6.96 6.24 3.6 6.96 6.96 3.6 7.92 3.6 6.24 6.96 6.96 3.6 6.96 3.84 6.96 3.84 3.6 11.76 3.84 3.6 6.96 3.6 6.96 3.6 6.96 3.6 3.6 6.96 3.6]
+ xshow
+ 590 813 moveto
+ ( %tmp.811 = setgt uint %inc.08, 31 )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6 5.76 6.96 3.6 7.92 3.6 5.52 6 3.84 6.96 3.84 3.6 6.96 3.84 6.96 3.84 3.6 11.76 3.84 6.96 6.24 3.6 6.96 6.96 3.6 3.6 6 6.96 3.6]
+ xshow
+ 590 797 moveto
+ ( br bool %tmp.811, label %loopexit.0, label %no_exit.0)
+ [3.6 6.96 4.8 3.6 6.96 6.96 6.96 3.84 3.6 11.76 3.84 10.56 6.96 3.6 6 5.76 6.24 3.6 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 3.84 6.96 6.96 6.96 5.76 6.96 3.84 3.84 3.6 6.96 3.6 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 6.96 6.96 6.96 5.76 6.96 3.84 3.84 3.6 6.96]
+ xshow
+ end grestore
+ newpath 582 790 moveto
+ 968 790 lineto
+ stroke
+ gsave 10 dict begin
+ 678 773 moveto 9.0 -0.5 (T) alignedtext
+ end grestore
+ newpath 775 766 moveto
+ 775 790 lineto
+ stroke
+ gsave 10 dict begin
+ 871 773 moveto 8.0 -0.5 (F) alignedtext
+ end grestore
+ end grestore
+ % Node0x85feac8->Node0x85fec60
+ newpath 686 948 moveto
+ 694 943 703 937 711 930 curveto
+ 715 926 719 922 722 918 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 725 920 moveto
+ 729 910 lineto
+ 720 915 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 725 920 moveto
+ 729 910 lineto
+ 720 915 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85fedb0->Node0x85feac8
+ newpath 472 790 moveto
+ 480 817 502 883 520 938 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 517 939 moveto
+ 523 948 lineto
+ 523 937 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 517 939 moveto
+ 523 948 lineto
+ 523 937 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85ff7f0
+ gsave 10 dict begin
+ newpath 459 664 moveto
+ 589 664 lineto
+ 589 728 lineto
+ 459 728 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 467 711 moveto
+ (loopexit.0: )
+ [3.84 6.96 6.96 6.96 5.76 6.96 3.84 3.84 3.6 6.96 3.84 3.6]
+ xshow
+ 467 695 moveto
+ ( br label %no_exit.1)
+ [3.6 6.96 4.8 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 6.96 6.96 6.96 5.76 6.96 3.84 3.84 2.64 6.96]
+ xshow
+ end grestore
+ newpath 459 688 moveto
+ 589 688 lineto
+ stroke
+ gsave 10 dict begin
+ 524 671 moveto 5.0 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ % Node0x85fedb0->Node0x85ff7f0
+ newpath 313 766 moveto
+ 349 754 405 736 449 721 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 450 724 moveto
+ 459 718 lineto
+ 448 718 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 450 724 moveto
+ 459 718 lineto
+ 448 718 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85fec60->Node0x85feac8
+ newpath 855 790 moveto
+ 820 817 732 886 659 942 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 657 939 moveto
+ 651 948 lineto
+ 661 945 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 657 939 moveto
+ 651 948 lineto
+ 661 945 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85fec60->Node0x85ff7f0
+ newpath 654 766 moveto
+ 637 757 615 745 593 733 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 594 730 moveto
+ 584 728 lineto
+ 591 736 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 594 730 moveto
+ 584 728 lineto
+ 591 736 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85ffc18
+ gsave 10 dict begin
+ newpath 320 482 moveto
+ 729 482 lineto
+ 729 626 lineto
+ 320 626 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 328 609 moveto
+ (no_exit.1: )
+ [6.96 6.96 6.96 5.76 6.96 3.84 3.84 2.64 6.96 3.84 3.6]
+ xshow
+ 328 593 moveto
+ ( %i.1.0.0 = phi uint [ 0, %loopexit.0 ], [ %indvar.next, %loopentry.1 ] )
+ [3.6 11.76 3.84 2.64 6.24 3.6 6.96 3.6 6.96 3.6 7.92 3.6 6.96 6.96 3.84 3.6 6.96 3.84 6.96 3.84 3.6 4.56 3.6 6.96 3.6 3.6 11.76 3.84 6.96 6.96 6.96 5.76 6.96 3.84 3.84 3.6 6.96 3.6 4.56 3.6 3.6 4.56 3.6 11.76 3.84 6.96 6.96 6.72 6.24 4.08 3.6 6.96 5.76 6.96 3.84 3.6 3.6 11.76 3.84 6.96 6.96 6.96 6.24 6.96 3.84 5.04 6 2.64 6.96 3.6 4.56 3.6]
+ xshow
+ 328 577 moveto
+ ( %ri.1.0 = phi ulong [ undef, %loopexit.0 ], [ %ri.0.0, %loopentry.1 ] )
+ [3.6 11.76 5.04 3.84 2.64 6.24 3.6 6.96 3.6 7.92 3.6 6.96 6.96 3.84 3.6 6.96 3.84 6.96 6.96 6.96 3.6 4.56 3.6 6.96 6.96 6.96 6.24 4.56 3.6 3.6 11.76 3.84 6.96 6.96 6.96 5.76 6.96 3.84 3.84 3.6 6.96 3.6 4.56 3.6 3.6 4.56 3.6 11.76 5.04 3.84 3.6 6.96 3.6 6.96 3.6 3.6 11.76 3.84 6.96 6.96 6.96 6.24 6.96 3.84 5.04 6 2.64 6.96 3.6 4.56 3.6]
+ xshow
+ 328 561 moveto
+ ( %tmp.27 = cast uint %i.1.0.0 to long )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.72 6.96 3.6 7.92 3.6 6.24 6.24 5.28 3.84 3.6 6.96 3.84 6.96 3.84 3.6 11.76 3.84 2.64 6.24 3.6 6.96 3.6 6.96 3.6 3.84 6.96 3.6 3.84 6.96 6.96 6.96 3.6]
+ xshow
+ 328 545 moveto
+ ( %tmp.28 = getelementptr [32 x bool]* %v, long 0, long %tmp.27 )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 7.92 3.6 6.72 6 3.84 6.24 3.84 6.24 10.8 6.24 6.96 3.84 6.96 3.84 4.8 3.6 4.56 6.96 6.96 3.6 6.96 3.6 6.96 6.96 6.96 3.84 4.56 6.96 3.6 11.76 6 3.6 3.6 3.84 6.96 6.96 6.96 3.6 6.96 3.6 3.6 3.84 6.96 6.96 6.96 3.6 11.76 3.84 10.56 6.96 3.6 6.72 6.96 3.6]
+ xshow
+ 328 529 moveto
+ ( %tmp.29 = load bool* %tmp.28 )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 7.92 3.6 3.84 6.96 6.24 6.96 3.6 6.96 6.96 6.96 3.84 6.96 3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6]
+ xshow
+ 328 513 moveto
+ ( br bool %tmp.29, label %then.1, label %else.1)
+ [3.6 6.96 4.8 3.6 6.96 6.96 6.96 3.84 3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 4.08 6.96 6.24 6.96 2.64 6.24 3.6 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 6.24 3.84 5.52 6.24 2.64 6.96]
+ xshow
+ end grestore
+ newpath 320 506 moveto
+ 729 506 lineto
+ stroke
+ gsave 10 dict begin
+ 422 489 moveto 9.0 -0.5 (T) alignedtext
+ end grestore
+ newpath 525 482 moveto
+ 525 506 lineto
+ stroke
+ gsave 10 dict begin
+ 627 489 moveto 8.0 -0.5 (F) alignedtext
+ end grestore
+ end grestore
+ % Node0x85ff7f0->Node0x85ffc18
+ newpath 524 664 moveto
+ 524 656 524 647 524 636 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 528 636 moveto
+ 524 626 lineto
+ 521 636 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 528 636 moveto
+ 524 626 lineto
+ 521 636 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85ffe00
+ gsave 10 dict begin
+ newpath 258 308 moveto
+ 497 308 lineto
+ 497 436 lineto
+ 258 436 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 266 419 moveto
+ (then.1: )
+ [4.08 6.96 6.24 6.96 2.64 6.96 3.84 3.6]
+ xshow
+ 266 403 moveto
+ ( %tmp.32 = cast uint %i.1.0.0 to ubyte )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 7.92 3.6 6.24 6.24 5.28 3.84 3.6 6.96 3.84 6.96 3.84 3.6 11.76 3.84 2.64 6.24 3.6 6.96 3.6 6.96 3.6 3.84 6.96 3.6 6.96 6.48 6.96 3.84 6.24 3.6]
+ xshow
+ 266 387 moveto
+ ( %tmp.33 = shl int 1, ubyte %tmp.32 )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 7.92 3.6 5.52 6.96 3.84 3.6 3.84 6.96 3.84 3.6 6.24 3.6 3.6 6.96 6.48 6.96 3.84 6.24 3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6]
+ xshow
+ 266 371 moveto
+ ( %tmp.34 = cast int %tmp.33 to ulong )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 7.92 3.6 6.24 6.24 5.28 3.84 3.6 3.84 6.96 3.84 3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 3.84 6.96 3.6 6.96 3.84 6.96 6.96 6.96 3.6]
+ xshow
+ 266 355 moveto
+ ( %tmp.36 = or ulong %tmp.34, %ri.1.0 )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 7.92 3.6 6.96 4.8 3.6 6.96 3.84 6.96 6.96 6.96 3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 3.6 11.76 5.04 3.84 2.64 6.24 3.6 6.96 3.6]
+ xshow
+ 266 339 moveto
+ ( br label %loopentry.1)
+ [3.6 6.96 4.8 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 3.84 6.96 6.96 6.96 6.24 6.96 3.84 5.04 6 2.64 6.96]
+ xshow
+ end grestore
+ newpath 258 332 moveto
+ 497 332 lineto
+ stroke
+ gsave 10 dict begin
+ 377 315 moveto 5.0 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ % Node0x85ffc18->Node0x85ffe00
+ newpath 418 482 moveto
+ 415 473 410 460 404 446 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 407 445 moveto
+ 401 436 lineto
+ 401 447 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 407 445 moveto
+ 401 436 lineto
+ 401 447 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85ffee0
+ gsave 10 dict begin
+ newpath 552 300 moveto
+ 800 300 lineto
+ 800 444 lineto
+ 552 444 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 560 427 moveto
+ (else.1: )
+ [6.24 3.84 5.52 6.24 2.64 6.96 3.84 3.6]
+ xshow
+ 560 411 moveto
+ ( %tmp.39 = cast uint %i.1.0.0 to ubyte )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 7.92 3.6 6.24 6.24 5.28 3.84 3.6 6.96 3.84 6.96 3.84 3.6 11.76 3.84 2.64 6.24 3.6 6.96 3.6 6.96 3.6 3.84 6.96 3.6 6.96 6.48 6.96 3.84 6.24 3.6]
+ xshow
+ 560 395 moveto
+ ( %tmp.40 = shl int 1, ubyte %tmp.39 )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 7.92 3.6 5.52 6.96 3.84 3.6 3.84 6.96 3.84 3.6 6.24 3.6 3.6 6.96 6.48 6.96 3.84 6.24 3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6]
+ xshow
+ 560 379 moveto
+ ( %tmp.41 = xor int %tmp.40, -1 )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6 6.96 3.6 7.92 3.6 6.24 6.96 4.8 3.6 3.84 6.96 3.84 3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 3.6 4.56 6.96 3.6]
+ xshow
+ 560 363 moveto
+ ( %tmp.42 = cast int %tmp.41 to ulong )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 7.92 3.6 6.24 6.24 5.28 3.84 3.6 3.84 6.96 3.84 3.6 11.76 3.84 10.56 6.96 3.6 6 6.96 3.6 3.84 6.96 3.6 6.96 3.84 6.96 6.96 6.96 3.6]
+ xshow
+ 560 347 moveto
+ ( %tmp.44 = and ulong %tmp.42, %ri.1.0 )
+ [3.6 11.76 3.84 10.56 6.96 3.6 7.2 6.96 3.6 7.92 3.6 6.24 6.96 6.96 3.6 6.96 3.84 6.96 6.96 6.96 3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 3.6 11.76 5.04 3.84 2.64 6.24 3.6 6.96 3.6]
+ xshow
+ 560 331 moveto
+ ( br label %loopentry.1)
+ [3.6 6.96 4.8 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 3.84 6.96 6.96 6.96 6.24 6.96 3.84 5.04 6 2.64 6.96]
+ xshow
+ end grestore
+ newpath 552 324 moveto
+ 800 324 lineto
+ stroke
+ gsave 10 dict begin
+ 676 307 moveto 5.0 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ % Node0x85ffc18->Node0x85ffee0
+ newpath 632 482 moveto
+ 635 474 639 465 643 454 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 647 455 moveto
+ 647 444 lineto
+ 640 452 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 647 455 moveto
+ 647 444 lineto
+ 640 452 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85ffd60
+ gsave 10 dict begin
+ newpath 237 150 moveto
+ 620 150 lineto
+ 620 262 lineto
+ 237 262 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 245 245 moveto
+ (loopentry.1: )
+ [3.84 6.96 6.96 6.96 6.24 6.96 3.84 5.04 6 2.64 6.96 3.84 3.6]
+ xshow
+ 245 229 moveto
+ ( %ri.0.0 = phi ulong [ %tmp.36, %then.1 ], [ %tmp.44, %else.1 ] )
+ [3.6 11.76 5.04 3.84 3.6 6.96 3.6 6.96 3.6 7.92 3.6 6.96 6.96 3.84 3.6 6.96 3.84 6.96 6.96 6.96 3.6 4.56 3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 3.6 11.76 4.08 6.96 6.24 6.96 2.64 6.96 3.6 4.56 3.6 3.6 4.56 3.6 11.76 3.84 10.56 6.96 3.6 7.2 6.96 3.6 3.6 11.76 6.24 3.84 5.52 6.24 2.64 6.96 3.6 4.56 3.6]
+ xshow
+ 245 213 moveto
+ ( %indvar.next = add uint %i.1.0.0, 1 )
+ [3.6 11.76 3.84 6.96 6.96 6.72 6.24 4.08 3.6 6.96 5.76 6.96 3.84 3.6 7.92 3.6 6.24 6.96 6.96 3.6 6.96 3.84 6.96 3.84 3.6 11.76 3.84 2.64 6.24 3.6 6.96 3.6 6.96 3.6 3.6 6.96 3.6]
+ xshow
+ 245 197 moveto
+ ( %exitcond = seteq uint %indvar.next, 32 )
+ [3.6 11.76 5.76 6.96 3.84 3.84 6.24 6.96 6.96 6.96 3.6 7.92 3.6 5.52 6 3.84 6.24 6.96 3.6 6.96 3.84 6.96 3.84 3.6 11.76 3.84 6.96 6.96 6.72 6.24 4.08 3.6 6.96 5.76 6.96 3.84 3.6 3.6 6.96 6.96 3.6]
+ xshow
+ 245 181 moveto
+ ( br bool %exitcond, label %loopexit.1, label %no_exit.1)
+ [3.6 6.96 4.8 3.6 6.96 6.96 6.96 3.84 3.6 11.76 5.76 6.96 3.84 3.84 6.24 6.96 6.96 6.96 3.6 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 3.84 6.96 6.96 6.96 5.76 6.96 3.84 3.84 2.64 6.24 3.6 3.6 3.84 6.24 6.96 6.24 3.84 3.6 11.76 6.96 6.96 6.96 5.76 6.96 3.84 3.84 2.64 6.96]
+ xshow
+ end grestore
+ newpath 237 174 moveto
+ 620 174 lineto
+ stroke
+ gsave 10 dict begin
+ 333 157 moveto 9.0 -0.5 (T) alignedtext
+ end grestore
+ newpath 429 150 moveto
+ 429 174 lineto
+ stroke
+ gsave 10 dict begin
+ 524 157 moveto 8.0 -0.5 (F) alignedtext
+ end grestore
+ end grestore
+ % Node0x85ffd60->Node0x85ffc18
+ newpath 524 174 moveto
+ 524 218 524 374 524 472 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 521 472 moveto
+ 524 482 lineto
+ 528 472 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 521 472 moveto
+ 524 482 lineto
+ 528 472 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x86002b0
+ gsave 10 dict begin
+ newpath 0 24 moveto
+ 667 24 lineto
+ 667 112 lineto
+ 0 112 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 8 95 moveto
+ (loopexit.1: )
+ [3.84 6.96 6.96 6.96 5.76 6.96 3.84 3.84 2.64 6.96 3.84 3.6]
+ xshow
+ 8 79 moveto
+ ( %tmp.47 = cast ulong %ri.0.0 to int* )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.48 6.96 3.6 7.92 3.6 6.24 6.24 5.28 3.84 3.6 6.96 3.84 6.96 6.96 6.96 3.6 11.76 5.04 3.84 3.6 6.96 3.6 6.96 3.6 3.84 6.96 3.6 3.84 6.96 3.84 6.96 3.6]
+ xshow
+ 8 63 moveto
+ ( %tmp.51 = load int* %tmp.47 )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6 6.96 3.6 7.92 3.6 3.84 6.96 6.24 6.96 3.6 3.84 6.96 3.84 6.96 3.6 11.76 3.84 10.56 6.96 3.6 6.48 6.96 3.6]
+ xshow
+ 8 47 moveto
+ ( %tmp.48 = call int \(sbyte*, ...\)* %printf\( sbyte* getelementptr \([4 x sbyte]* %.str_5, long 0, long 0\), int %tmp.51 \) )
+ [3.6 11.76 3.84 10.56 6.96 3.6 6.96 6.96 3.6 7.92 3.6 6.24 6.24 3.84 3.84 3.6 3.84 6.96 3.84 3.6 4.56 5.52 6.48 6.96 3.84 6.24 6.96 3.6 3.6 3.6 3.6 3.6 4.56 6.96 3.6 11.76 6.96 5.04 3.84 6.96 3.84 4.56 4.56 3.6 5.52 6.48 6.96 3.84 6.24 6.96 3.6 6.72 6 3.84 6.24 3.84 6.24 10.8 6.24 6.96 3.84 6.96 3.84 4.8 3.6 4.56 4.56 6.96 3.6 6.96 3.6 5.52 6.48 6.96 3.84 6.24 4.56 6.96 3.6 11.76 3.6 5.28 3.84 4.8 6.96 6.96 3.6 3.6 3.84 6.96 6.96 6.96 3.6 6.96 3.6 3.6 3.84 6.96 6.96 6.96 3.6 6.96 4.56 3.6 3.6 3.84 6.96 3.84 3.6 11.76 3.84 10.56 6.96 3.6 6 6.96 3.6 4.56 3.6]
+ xshow
+ 8 31 moveto
+ ( ret int 0)
+ [3.6 4.8 6 3.84 3.6 3.84 6.96 3.84 3.6 6.96]
+ xshow
+ end grestore
+ end grestore
+ % Node0x85ffd60->Node0x86002b0
+ newpath 333 150 moveto
+ 333 142 333 133 333 122 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 337 122 moveto
+ 333 112 lineto
+ 330 122 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 337 122 moveto
+ 333 112 lineto
+ 330 122 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85ffe00->Node0x85ffd60
+ newpath 383 308 moveto
+ 387 299 393 286 399 272 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 403 273 moveto
+ 403 262 lineto
+ 396 270 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 403 273 moveto
+ 403 262 lineto
+ 396 270 lineto
+ closepath
+ stroke
+ end grestore
+ % Node0x85ffee0->Node0x85ffd60
+ newpath 646 300 moveto
+ 625 291 597 279 567 266 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 1 setlinewidth
+ 0.000 0.000 0.000 edgecolor
+ newpath 569 263 moveto
+ 558 262 lineto
+ 566 269 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ newpath 569 263 moveto
+ 558 262 lineto
+ 566 269 lineto
+ closepath
+ stroke
+ end grestore
+ endpage
+ showpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 388 4970 a Fi(Figure)32 b(1:)44 b(Break)33
+ b(up)g(a)f(p)s(oin)m(ter)h(in)m(to)g(an)f(arra)m(y)h(of)f(b)s(o)s
+ (oleans)h(and)f(reassem)m(ble)k(it)1894 5251 y(14)p eop
+ end
+ %%Page: 15 15
+ TeXDict begin 15 14 bop 324 548 a Fk(5)161 b(F)-13 b(uture)52
+ b(W)-13 b(ork)324 767 y Fi(The)25 b(implemen)m(tation)i(is)e(missing)h
+ (some)g(critical)f(features)g(prev)m(en)m(ting)i(it)e(from)f(b)s(eing)
+ 324 887 y(used)g(to)e(v)m(erify)i(real)f(w)m(orld)g(soft)m(w)m(are.)41
+ b(Primarily)-8 b(,)26 b(it)c(lac)m(ks)i(in)m(terpro)s(cedural)g
+ (analysis.)324 1008 y(Note)36 b(that)h(this)g(is)g(not)f(a)h
+ (theoretical)g(limitation|an)f(inliner)i(can)e(rewrite)i(a)e(pro-)324
+ 1128 y(gram)27 b(without)i(function)f(calls|nor)g(is)h(it)e(a)h
+ (limitation)g(due)h(to)e(the)h(use)h(of)f(LL)-11 b(VM|)324
+ 1249 y(LL)g(VM)23 b(is)g(famous)g(for)f(p)s(erforming)g(extensiv)m(e)k
+ (in)m(terpro)s(cedural)e(optimizations|but)324 1369 y(merely)34
+ b(a)e(limit)h(of)f(the)h(curren)m(t)h(implemen)m(tation.)470
+ 1489 y(Chec)m(k)m(er's)i(analysis)e(passes)g(also)f(su\013er)g(from)f
+ (other,)h(smaller,)h(de\014ciencies:)443 1685 y(1.)49
+ b(The)44 b(v)-5 b(alidit)m(y)44 b(pass)g(is)g(unable)f(to)g(detect)h
+ (an)g(out)f(of)f(b)s(ounds)i(access)h(to)e(an)568 1805
+ y(arra)m(y)-8 b(,)38 b(ev)m(en)g(if)f(the)g(b)s(ounds)h(and)f(index)h
+ (are)f(b)s(oth)g(kno)m(wn)h(at)f(compile)h(time.)568
+ 1925 y(Curren)m(tly)-8 b(,)31 b(an)m(y)f(v)-5 b(alue)29
+ b(tak)m(en)h(from)f(a)g(memory)h(load)e(is)i(assumed)h(to)d(b)s(e)h(v)
+ -5 b(alid,)568 2046 y(ev)m(en)34 b(if)e(there)i(is)f(no)f(matc)m(hing)i
+ (store)f(at)f(all!)568 2206 y(The)h(prop)s(er)g(w)m(a)m(y)h(to)e(\014x)
+ i(this)f(is)g(to)g(exp)s(ose)h(the)f(p)s(oin)m(ter)g(analysis)h(to)f
+ (LL)-11 b(VMs)568 2327 y(optimizers)27 b(through)g(the)f(pro)m(vided)i
+ (AliasAnalysis)h(in)m(terface,)f(so)f(that)f(LL)-11 b(VM)568
+ 2447 y(can)33 b(\014nd)g(suc)m(h)h(cases)g(and)e(substitute)j(them)e
+ (for)f Fg(undef)p Fi(.)443 2648 y(2.)49 b(Due)38 b(to)h(its)g
+ (optimization-cen)m(tric)h(design,)i(LL)-11 b(VM)39 b(naturally)g(remo)
+ m(v)m(es)i(par-)568 2768 y(tially)33 b(unde\014ned)h(v)-5
+ b(alues.)44 b(F)-8 b(or)32 b(example:)568 3026 y Fg(int)52
+ b(f\(\))g({)670 3146 y(int)g(x;)670 3266 y(x)g(|=)g(1;)670
+ 3387 y(return)h(x;)568 3507 y(})568 3765 y Fi(is)33 b(optimized)h(in)m
+ (to:)568 4022 y Fg(int)52 b(\045f\(\))g({)568 4143 y(entry:)978
+ 4263 y(ret)g(int)g(-1)568 4383 y(})568 4641 y Fi(While)c(this)g
+ (substitution)h(is)e(alw)m(a)m(ys)i(v)-5 b(alid)48 b(for)f(an)g
+ (optimizer,)52 b(it)47 b(replaces)568 4761 y(unde\014ned)c(b)s(eha)m
+ (viour)g(with)f(de\014ned)h(b)s(eha)m(viour,)i(circum)m(v)m(en)m(ting)f
+ (c)m(hec)m(k)m(er's)568 4882 y(abilit)m(y)c(to)g(detect)g(the)g
+ (non-determinism)i(in)e(the)g(original)f(co)s(de.)65
+ b(Ho)m(w)m(ev)m(er,)568 5002 y(LL)-11 b(VM)36 b(will)g(generate)g(co)s
+ (de)g(based)g(on)g(the)f(optimized)i(v)m(ersion,)h(and)e(so,)g(the)1894
+ 5251 y(15)p eop end
+ %%Page: 16 16
+ TeXDict begin 16 15 bop 568 548 a Fi(resulting)25 b(program)f(will)h
+ (not)g(b)s(e)f(non-deterministic.)43 b(In)25 b(this)g(sense,)j(c)m(hec)
+ m(k)m(er's)568 668 y(failure)22 b(to)g(w)m(arn)h(ab)s(out)f(this)g
+ (error)h(could)f(b)s(e)h(considered)h(correct,)h(as)d(it)g(is)h(op)s
+ (er-)568 789 y(ating)k(on)g(the)g(compiler's)i(in)m(terpretation)f(of)f
+ (the)h(program,)g(not)f(the)h(language)568 909 y(standard's)43
+ b(in)m(terpretation.)74 b(Nev)m(ertheless,)48 b(LL)-11
+ b(VM)43 b(could)f(b)s(e)h(mo)s(di\014ed)g(to)568 1029
+ y(c)m(hange)33 b(its)g(treatmen)m(t)h(of)39 b Fg(undef)p
+ Fi(.)443 1233 y(3.)49 b(The)44 b(p)s(oin)m(ter)h(analysis)g(is)f
+ (region-based,)j(and)d(unable)g(to)g(di\013eren)m(tiate)h(b)s(e-)568
+ 1353 y(t)m(w)m(een)34 b(accesses)h(of)d(di\013eren)m(t)i(\014elds)g(in)
+ f(an)f(arra)m(y)h(or)f(structure.)443 1557 y(4.)49 b(The)36
+ b(p)s(oin)m(ter)g(analysis)h(could)g(b)s(e)f(made)g(less)h(conserv)-5
+ b(ativ)m(e)38 b(in)e(step)g(three)h(b)m(y)568 1677 y(eliminating)48
+ b(store)g(instructions)i(that)d(are)h(iden)m(tical)h(in)f(all)f(branc)m
+ (hes)i(and)568 1797 y(guaran)m(teed)29 b(to)g(execute.)44
+ b(This)30 b(is)f(made)h(sligh)m(tly)g(more)f(di\016cult)h(b)s(ecause)g
+ (the)568 1918 y(order)g(of)f(m)m(ultiple)j(store)e(instructions)i
+ (storing)e(to)g(the)g(same)h(region)f(needs)i(to)568
+ 2038 y(b)s(e)g(compared.)443 2242 y(5.)49 b(Region-based)g(analysis)h
+ (could)f(b)s(ecome)h(a)e(more)h(\014ne-grained)g(\014eld-based)568
+ 2362 y(analysis.)470 2565 y(Ev)m(en)41 b(the)e(b)s(est)g(analysis)i
+ (pro)s(cess)f(is)f(limited)h(b)m(y)g(its)f(in)m(terface)h(with)f(the)h
+ (user.)324 2686 y(One)f(w)m(a)m(y)h(to)e(impro)m(v)m(e)j(c)m(hec)m(k)m
+ (er)h(is)d(to)f(mak)m(e)i(it)f(in)m(teractiv)m(e,)k(allo)m(wing)c(the)g
+ (user)h(to)324 2806 y(see)49 b(what)f(the)h(aliasing)f(set)h(of)e(a)h
+ (v)-5 b(ariable)48 b(is)h(at)e(a)h(particular)g(p)s(oin)m(t.)90
+ b(A)48 b(more)324 2927 y(adv)-5 b(anced)31 b(v)m(ersion)h(of)e(the)h
+ (same)h(w)m(ould)f(emplo)m(y)h(LL)-11 b(VMs)31 b(JITter)h(to)e(allo)m
+ (w)h(a)f(mixed)324 3047 y(static/dynamic)41 b(analysis)g(where)g(the)f
+ (user)h(could)f(en)m(ter)h(v)-5 b(alues)41 b(for)e(the)h(registers)324
+ 3167 y(and)32 b(execute)j(for)d(a)g(few)h(instructions)i(to)d(test)h(a)
+ f(h)m(yp)s(othesis.)470 3288 y(Finally)-8 b(,)36 b(c)m(hec)m(k)m(er)j
+ (needs)e(to)e(b)s(e)g(able)h(to)f(prune)h(p)s(oin)m(ters)g(from)f(the)h
+ (aliasing)g(set)324 3408 y(when)d(a)g(conditional)g(is)g(encoun)m
+ (tered.)324 3741 y Fk(6)161 b(Conclusion)324 3960 y Fi(Finding)27
+ b(simple)h(common)f(errors)g(pro)m(v)m(es)h(p)s(ossible)g(with)f
+ (relativ)m(ely)i(little)e(w)m(ork.)42 b(W)-8 b(e)324
+ 4080 y(ha)m(v)m(e)30 b(found)g(that)f(c)m(hec)m(k)m(er)j(can)d(detect)h
+ (co)s(ding)g(errors)f(and)h(o\013ers)f(opp)s(ortunities)h(for)324
+ 4201 y(further)45 b(extension,)k(but)c(is)g(not)g(y)m(et)g(capable)h
+ (of)e(prop)s(erly)h(analyzing)g(real-w)m(orld)324 4321
+ y(soft)m(w)m(are.)324 4654 y Fk(References)324 4873 y
+ Fi([ALB)554 4837 y Fe(+)613 4873 y Fi(03])71 b(Vikram)37
+ b(Adv)m(e,)i(Chris)e(Lattner,)g(Mic)m(hael)h(Brukman,)h(Anand)d(Sh)m
+ (ukla,)809 4993 y(and)47 b(Brian)g(Gaek)m(e.)86 b(LL)-11
+ b(V)g(A:)48 b(A)f(Lo)m(w-lev)m(el)h(Virtual)f(Instruction)h(Set)1894
+ 5251 y(16)p eop end
+ %%Page: 17 17
+ TeXDict begin 17 16 bop 809 548 a Fi(Arc)m(hitecture.)54
+ b(In)36 b Fa(Pr)-5 b(o)g(c)g(e)g(e)g(dings)36 b(of)h(the)h(36th)f
+ (annual)g(A)n(CM/IEEE)g(in-)809 668 y(ternational)48
+ b(symp)-5 b(osium)49 b(on)f(Micr)-5 b(o)g(ar)g(chite)g(ctur)g(e)49
+ b(\(MICR)n(O-36\))p Fi(,)h(San)809 789 y(Diego,)32 b(California,)g(Dec)
+ h(2003.)809 909 y(h)m(ttp://llvm.org/pubs/2003-10-01-LL)-11
+ b(V)g(A.h)m(tml)324 1110 y([And94])152 b(Lars)23 b(Ole)h(Andersen.)30
+ b Fa(Pr)-5 b(o)g(gr)g(am)26 b(A)n(nalysis)g(and)g(Sp)-5
+ b(e)g(cialization)24 b(for)i(the)h(C)809 1230 y(Pr)-5
+ b(o)g(gr)g(amming)27 b(L)-5 b(anguage)p Fi(.)32 b(PhD)26
+ b(thesis,)j(DIKU,)d(Univ)m(ersit)m(y)j(of)c(Cop)s(en-)809
+ 1350 y(hagen,)33 b(Ma)m(y)g(1994.)809 1471 y(h)m(ttp://rep)s(ository)-8
+ b(.readsc)m(heme.org/ftp/pap)s(ers/topps/D-203.p)s(df)324
+ 1672 y([BLQ)557 1635 y Fe(+)616 1672 y Fi(03])68 b(Marc)42
+ b(Berndl,)j(Ond)-5 b(\024)-43 b(rej)41 b(Lhot\023)-49
+ b(ak,)45 b(F)-8 b(eng)41 b(Qian,)k(Laurie)d(Hendren,)j(and)809
+ 1792 y(Na)m(vindra)32 b(Umanee.)42 b(P)m(oin)m(ts-to)32
+ b(analysis)h(using)f(b)s(dds.)42 b(In)32 b Fa(Pr)-5 b(o)g(c)g(e)g(e)g
+ (dings)809 1912 y(of)42 b(the)h(A)n(CM)g(SIGPLAN)h(2003)e(Confer)-5
+ b(enc)g(e)42 b(on)g(Pr)-5 b(o)g(gr)g(amming)42 b(L)-5
+ b(an-)809 2033 y(guage)46 b(Design)f(and)h(Inplementation)p
+ Fi(,)g(pages)g(103{114.)e(A)m(CM)i(Press,)809 2153 y(2003.)324
+ 2354 y([DKA05])109 b(Dinak)-5 b(ar)35 b(Dh)m(urjati,)i(Suman)m(t)g(Ko)m
+ (wshik,)h(and)f(Vikram)f(Adv)m(e.)56 b(Enforc-)809 2474
+ y(ing)38 b(Alias)g(Analysis)h(for)f(W)-8 b(eakly)39 b(T)m(yp)s(ed)g
+ (Languages.)59 b(T)-8 b(ec)m(hnical)40 b(Re-)809 2594
+ y(p)s(ort)i(#UIUCDCS-R-2005-2657,)h(Computer)h(Science)g(Dept.,)i
+ (Univ.)809 2715 y(of)32 b(Illinois,)h(No)m(v)h(2005.)809
+ 2835 y(h)m(ttp://llvm.org/pubs/2005-11-SAFECo)s(deTR.h)m(tml)324
+ 3036 y([DKAL05])48 b(Dinak)-5 b(ar)48 b(Dh)m(urjati,)53
+ b(Suman)m(t)d(Ko)m(wshik,)55 b(Vikram)50 b(Adv)m(e,)55
+ b(and)49 b(Chris)809 3156 y(Lattner.)35 b(Memory)28 b(safet)m(y)h
+ (without)e(garbage)g(collection)i(for)e(em)m(b)s(edded)809
+ 3277 y(applications.)54 b Fa(T)-7 b(r)i(ans.)36 b(on)i(Emb)-5
+ b(e)g(dde)g(d)37 b(Computing)g(Sys.)p Fi(,)f(4\(1\):73{111,)809
+ 3397 y(2005.)809 3517 y(h)m(ttp://llvm.org/pubs/2005-02-TECS-SAFECo)s
+ (de.h)m(tml)324 3718 y([ECCH00])54 b(Da)m(wson)37 b(Engler,)h(Benjamin)
+ f(Chelf,)h(Andy)f(Chou,)h(and)f(Seth)g(Hallem.)809 3838
+ y(Chec)m(king)65 b(System)h(Rules)e(Using)h(System-Sp)s(eci\014c,)74
+ b(Programmer-)809 3959 y(W)-8 b(ritten)32 b(Compiler)h(Extensions.)44
+ b Fa(4th)34 b(Symp)-5 b(osium)33 b(on)h(Op)-5 b(er)g(ating)33
+ b(Sys-)809 4079 y(tems)h(Design)g(&)h(Implementation)p
+ Fi(,)30 b(2000.)809 4200 y(h)m(ttp://www.stanford.edu/)35
+ b(engler/mc-osdi.ps)324 4400 y([LA04a])150 b(Chris)34
+ b(Lattner)g(and)g(Vikram)g(Adv)m(e.)48 b(LL)-11 b(VM:)34
+ b(A)g(Compilation)g(F)-8 b(rame-)809 4521 y(w)m(ork)39
+ b(for)e(Lifelong)h(Program)g(Analysis)i(&)e(T)-8 b(ransformation.)60
+ b(In)39 b Fa(Pr)-5 b(o-)809 4641 y(c)g(e)g(e)g(dings)44
+ b(of)h(the)g(2004)g(International)f(Symp)-5 b(osium)45
+ b(on)g(Co)-5 b(de)45 b(Gener-)809 4761 y(ation)j(and)g(Optimization)g
+ (\(CGO'04\))p Fi(,)i(P)m(alo)e(Alto,)j(California,)h(Mar)809
+ 4882 y(2004.)809 5002 y(h)m(ttp://llvm.org/pubs/2004-01-30-CGO-LL)-11
+ b(VM.h)m(tml)1894 5251 y(17)p eop end
+ %%Page: 18 18
+ TeXDict begin 18 17 bop 324 548 a Fi([LA04b])145 b(Chris)41
+ b(Lattner)g(and)f(Vikram)h(Adv)m(e.)68 b(The)42 b(LL)-11
+ b(VM)41 b(Compiler)g(F)-8 b(rame-)809 668 y(w)m(ork)42
+ b(and)f(Infrastructure)h(T)-8 b(utorial.)69 b(In)41 b
+ Fa(LCPC'04)h(Mini)g(Workshop)809 789 y(on)f(Compiler)g(R)-5
+ b(ese)g(ar)g(ch)41 b(Infr)-5 b(astructur)g(es)p Fi(,)43
+ b(W)-8 b(est)41 b(Lafa)m(y)m(ette,)i(Indiana,)809 909
+ y(Sep)33 b(2004.)809 1029 y(h)m(ttp://llvm.org/pubs/2004-09-22-LCPCLL)
+ -11 b(VMT)j(utorial.h)m(tml)324 1233 y([Lat06])185 b(Chris)49
+ b(Lattner.)91 b(LL)-11 b(VM)49 b(Assem)m(bly)j(Language)c(Reference)i
+ (Man)m(ual,)809 1353 y(Ma)m(y)33 b(2006.)809 1474 y(h)m
+ (ttp://llvm.org/do)s(cs/LangRef.h)m(tml)324 1677 y([SN])304
+ b(Julian)45 b(Sew)m(ard)h(and)f(Nic)m(k)h(Nethercote.)80
+ b(V)-8 b(algrind,)48 b(an)d(op)s(en-source)809 1797 y(memory)33
+ b(debugger)h(for)e(x86-GNU/Lin)m(ux.)809 1918 y(h)m(ttp://www.v)-5
+ b(algrind.org/)1894 5251 y(18)p eop end
+ %%Trailer
+ 
+ userdict /end-hook known{end-hook}if
+ %%EOF






More information about the llvm-commits mailing list