[llvm-commits] CVS: llvm-www/pubs/2005-05-21-PLDI-PoolAlloc.html 2005-05-21-PLDI-PoolAlloc.pdf 2005-05-21-PLDI-PoolAlloc.ps index.html

Chris Lattner lattner at cs.uiuc.edu
Wed Apr 20 21:46:28 PDT 2005



Changes in directory llvm-www/pubs:

2005-05-21-PLDI-PoolAlloc.html added (r1.1)
2005-05-21-PLDI-PoolAlloc.pdf added (r1.1)
2005-05-21-PLDI-PoolAlloc.ps added (r1.1)
index.html updated: 1.14 -> 1.15
---
Log message:

Add the PLDI paper.


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

 2005-05-21-PLDI-PoolAlloc.html |   75 
 2005-05-21-PLDI-PoolAlloc.pdf  |    0 
 2005-05-21-PLDI-PoolAlloc.ps   |27682 +++++++++++++++++++++++++++++++++++++++++
 index.html                     |    7 
 4 files changed, 27764 insertions(+)


Index: llvm-www/pubs/2005-05-21-PLDI-PoolAlloc.html
diff -c /dev/null llvm-www/pubs/2005-05-21-PLDI-PoolAlloc.html:1.1
*** /dev/null	Wed Apr 20 23:46:21 2005
--- llvm-www/pubs/2005-05-21-PLDI-PoolAlloc.html	Wed Apr 20 23:46:11 2005
***************
*** 0 ****
--- 1,75 ----
+ <!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>Automatic Pool Allocation: Improving Performance by Controlling  
+          Data Structure Layout in the Heap</title>
+ </head>
+ <body>
+ 
+ <div class="pub_title">
+   Automatic Pool Allocation: Improving Performance by Controlling Data Structure Layout in the Heap
+ </div>
+ <div class="pub_author">
+   <a href="http://www.nondot.org/sabre/">Chris Lattner</a> and
+   <a href="http://www.cs.uiuc.edu/~vadve">Vikram Adve</a>
+ </div>
+ 
+ <h2>Abstract:</h2>
+ <blockquote>
+ This paper describes <b>Automatic Pool Allocation</b>, a transformation
+ framework that segregates distinct instances of heap-based data structures
+ into seperate memory pools and allows heuristics to be used to
+ partially control the internal layout of those data structures.
+ The primary goal of this work is performance improvement, not automatic memory
+ management, and the paper makes several new contributions.  The key
+ contribution is a new compiler algorithm for partitioning heap objects in
+ imperative programs based on a context-sensitive pointer analysis, including a
+ novel strategy for correct handling of indirect (and potentially unsafe)
+ function calls.  The transformation does not require type safe programs and
+ works for the full generality of C and C++.  Second, the paper describes
+ several optimizations that exploit data structure partitioning to further
+ improve program performance.  Third, the paper evaluates how memory
+ hierarchy behavior and overall program performance are impacted by the new
+ transformations.  Using a number of benchmarks and a few applications, we find
+ that compilation times are extremely low, and overall running times for heap
+ intensive programs speed up by 10-25% in many cases, about 2x in two
+ cases, and more than 10x in two small benchmarks.  Overall, we believe this
+ work provides a new framework for optimizing pointer intensive programs by
+ segregating and controlling the layout of heap-based data structures.
+ </blockquote>
+ 
+ <h2>Published:</h2>
+ <blockquote>
+   "Automatic Pool Allocation: Improving Performance by Controlling Data 
+   Structure Layout in the Heap"<br>
+   Chris Lattner and Vikram Adve.
+   Proc. of the 2005 ACM SIGPLAN Conference on Programming Language 
+   Design and Implementation (PLDI'05), Chicago, Illinois, Jun, 2005.
+ </blockquote>
+ 
+ <h2>Download:</h2>
+ <ul>
+   <li><a href="2005-05-21-PLDI-PoolAlloc.ps">Automatic Pool Allocation: 
+       Improving Performance by Controlling Data Structure Layout in the 
+       Heap</a> (PS)</li>
+   <li><a href="2005-05-21-PLDI-PoolAlloc.pdf">Automatic Pool Allocation: 
+       Improving Performance by Controlling Data Structure Layout in the 
+       Heap</a> (PDF)</li>
+ </ul>
+ 
+ <h2>BibTeX Entry:</h2>
+ <pre>
+   @InProceedings{PoolAlloc:PLDI05,
+     author    = {Chris Lattner and Vikram Adve},
+     title     = "{Automatic Pool Allocation: Improving Performance by Controlling Data Structure Layout in the Heap}",
+     booktitle = "{Proceedings of the 2005 ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI'05)}",
+     address   = {Chigago, Illinois},
+     month     = {June},
+     year      = {2005}
+   }
+ </pre>
+ 
+ </body>
+ </html>


Index: llvm-www/pubs/2005-05-21-PLDI-PoolAlloc.pdf


Index: llvm-www/pubs/2005-05-21-PLDI-PoolAlloc.ps
diff -c /dev/null llvm-www/pubs/2005-05-21-PLDI-PoolAlloc.ps:1.1
*** /dev/null	Wed Apr 20 23:46:28 2005
--- llvm-www/pubs/2005-05-21-PLDI-PoolAlloc.ps	Wed Apr 20 23:46:11 2005
***************
*** 0 ****
--- 1,27682 ----
+ %!PS-Adobe-2.0
+ %%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software
+ %%Title: f098-lattner.dvi
+ %%Pages: 14
+ %%PageOrder: Ascend
+ %%BoundingBox: 0 0 612 792
+ %%DocumentFonts: Times-Bold Times-Roman CMSY10 CMTT10 Times-Italic
+ %%+ Times-BoldItalic CMSY7 CMTT9 CMSY8 CMMI7 CMMI9 CMR9 CMITT10 CMSY9
+ %%+ CMMI6 CMTT8 CMMI8 CMR7 CMSY6 CMR6
+ %%EndComments
+ %DVIPSWebPage: (www.radicaleye.com)
+ %DVIPSCommandLine: dvips -P cmz -t letter -o f098-lattner.ps
+ %+ f098-lattner.dvi
+ %DVIPSParameters: dpi=600, compressed
+ %DVIPSSource:  TeX output 2005.04.20:1435
+ %%BeginProcSet: texc.pro
+ %!
+ /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/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/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]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
+ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
+ gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
+ /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
+ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
+ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
+ get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
+ ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
+ fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
+ {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
+ chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
+ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
+ forall N/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: 8r.enc
+ % File  8r.enc as of 2002-03-12 for PSNFSS 9
+ %
+ % This is the encoding vector for Type1 and TrueType fonts to be used
+ % with TeX.  This file is part of the PSNFSS bundle, version 9
+ % 
+ % Authors: S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry, W. Schmidt
+ %
+ % Idea is to have all the characters normally included in Type 1 fonts
+ % available for typesetting. This is effectively the characters in Adobe
+ % Standard Encoding + ISO Latin 1 + extra characters from Lucida + Euro.
+ % 
+ % Character code assignments were made as follows:
+ % 
+ % (1) the Windows ANSI characters are almost all in their Windows ANSI
+ % positions, because some Windows users cannot easily reencode the
+ % fonts, and it makes no difference on other systems. The only Windows
+ % ANSI characters not available are those that make no sense for
+ % typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+ % (173). quotesingle and grave are moved just because it's such an
+ % irritation not having them in TeX positions.
+ % 
+ % (2) Remaining characters are assigned arbitrarily to the lower part
+ % of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+ % 
+ % (3) Y&Y Lucida Bright includes some extra text characters; in the
+ % hopes that other PostScript fonts, perhaps created for public
+ % consumption, will include them, they are included starting at 0x12.
+ % 
+ % (4) Remaining positions left undefined are for use in (hopefully)
+ % upward-compatible revisions, if someday more characters are generally
+ % available.
+ % 
+ % (5) hyphen appears twice for compatibility with both ASCII and Windows.
+ %
+ % (6) /Euro is assigned to 128, as in Windows ANSI
+ % 
+ /TeXBase1Encoding [
+ % 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
+   /.notdef /dotaccent /fi /fl
+   /fraction /hungarumlaut /Lslash /lslash
+   /ogonek /ring /.notdef
+   /breve /minus /.notdef 
+ % These are the only two remaining unencoded characters, so may as
+ % well include them.
+   /Zcaron /zcaron 
+ % 0x10
+  /caron /dotlessi 
+ % (unusual TeX characters available in, e.g., Lucida Bright)
+  /dotlessj /ff /ffi /ffl 
+  /.notdef /.notdef /.notdef /.notdef
+  /.notdef /.notdef /.notdef /.notdef
+  % very contentious; it's so painful not having quoteleft and quoteright
+  % at 96 and 145 that we move the things normally found there down to here.
+  /grave /quotesingle 
+ % 0x20 (ASCII begins)
+  /space /exclam /quotedbl /numbersign
+  /dollar /percent /ampersand /quoteright
+  /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+ % 0x30
+  /zero /one /two /three /four /five /six /seven
+  /eight /nine /colon /semicolon /less /equal /greater /question
+ % 0x40
+  /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+ % 0x50
+  /P /Q /R /S /T /U /V /W
+  /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+ % 0x60
+  /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+ % 0x70
+  /p /q /r /s /t /u /v /w
+  /x /y /z /braceleft /bar /braceright /asciitilde
+  /.notdef % rubout; ASCII ends
+ % 0x80
+  /Euro /.notdef /quotesinglbase /florin
+  /quotedblbase /ellipsis /dagger /daggerdbl
+  /circumflex /perthousand /Scaron /guilsinglleft
+  /OE /.notdef /.notdef /.notdef
+ % 0x90
+  /.notdef /.notdef /.notdef /quotedblleft
+  /quotedblright /bullet /endash /emdash
+  /tilde /trademark /scaron /guilsinglright
+  /oe /.notdef /.notdef /Ydieresis
+ % 0xA0
+  /.notdef % nobreakspace
+  /exclamdown /cent /sterling
+  /currency /yen /brokenbar /section
+  /dieresis /copyright /ordfeminine /guillemotleft
+  /logicalnot
+  /hyphen % Y&Y (also at 45); Windows' softhyphen
+  /registered
+  /macron
+ % 0xD0
+  /degree /plusminus /twosuperior /threesuperior
+  /acute /mu /paragraph /periodcentered
+  /cedilla /onesuperior /ordmasculine /guillemotright
+  /onequarter /onehalf /threequarters /questiondown
+ % 0xC0
+  /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+  /Egrave /Eacute /Ecircumflex /Edieresis
+  /Igrave /Iacute /Icircumflex /Idieresis
+ % 0xD0
+  /Eth /Ntilde /Ograve /Oacute
+  /Ocircumflex /Otilde /Odieresis /multiply
+  /Oslash /Ugrave /Uacute /Ucircumflex
+  /Udieresis /Yacute /Thorn /germandbls
+ % 0xE0
+  /agrave /aacute /acircumflex /atilde
+  /adieresis /aring /ae /ccedilla
+  /egrave /eacute /ecircumflex /edieresis
+  /igrave /iacute /icircumflex /idieresis
+ % 0xF0
+  /eth /ntilde /ograve /oacute
+  /ocircumflex /otilde /odieresis /divide
+  /oslash /ugrave /uacute /ucircumflex
+  /udieresis /yacute /thorn /ydieresis
+ ] def
+ 
+ %%EndProcSet
+ %%BeginProcSet: texps.pro
+ %!
+ 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
+ %!
+ 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: CMR6
+ %!PS-AdobeFont-1.1: CMR6 1.0
+ %%CreationDate: 1991 Aug 20 16:39:02
+ % 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 (CMR6) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR6 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 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ readonly def
+ /FontBBox{-20 -250 1193 750}readonly def
+ /UniqueID 5000789 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
+ 68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
+ 3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
+ BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
+ CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
+ C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
+ D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
+ 23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
+ D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
+ 93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
+ 6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
+ EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
+ CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
+ D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
+ 00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
+ B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA
+ 99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904
+ A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB
+ 11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5
+ 50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB601E46A2CC
+ FC2A276E7502892F26B8E36F84B72BBB5CAB7A8B977EA71F0933ED4D23381C9B
+ 5A109609AC93B063442561EA01690617BDE9CB567BE082F1741798F7E70A03E0
+ A42B0AFF0F002B1873299901B06CEB5E826D174D9256368F3CD6CE1BF7E990E5
+ B2D2C02F150B9FB8351E964C38E19D59F3ADD001316A1D3CD06B8868A799A1B5
+ 2C9F91F46AE11294585C3E8B848F41F08E215569D5038A934D77D94CD4693E24
+ C364AF9C346E7498844C19F2188F02148E9DE193486DD925344373BC133E3D77
+ ED74D8DA0F6D7D8F717125C4B1099CBA9AEFCBBE338A659E14E081A664B0442C
+ ACA0D1F31F64AE067D74A6B39AE50F149DF744B3AFF5F9ED11EA05208D60F0A3
+ 4BDE426F89BFC5B91261814321CA18028A6800D718B4FF4B0BA55EE7131A5166
+ 74C3EC11E6F8183E8EA2D7F1B0D6E550F3165B0B2647AAE1F425B0735BBCA591
+ 01827B097A46CA12246A122D4CC1DDB7C2821CD5826E69879E876E3A2CFDF01F
+ 1743F4A2486FACF38ED4B9F796AA4ED52F03C7CAE44F4583B06EA9D978B25912
+ CDF39253C6C1375DDEB40D09008E0780D326F7E557EA88067D852BE17521B398
+ 511113D33AC17C26318A074336E11A7B84D390B89C8AD8C56BB00F17328CF77C
+ 7986A5E274BB8A496B1098D904D9AEBED2316B75F03C88572E35A0EBDA34B251
+ BDF790317DD5AD00B46C362B2932DE0AB5292616EF9DB9F3292F40155ED0E2B5
+ B8505913102EBEEA97288DFBBD23B400B153E15264EDFA6D42712D1703875F27
+ C8492D74F1F8821811A109842FF74FFE4CBB994B16F4F736A743808F775C13B3
+ 7623DCB63EEC224C8B930F2B1886F2BFDCD3FCE095C2BD94FE612B8B59456FCE
+ 
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMSY6
+ %!PS-AdobeFont-1.1: CMSY6 1.0
+ %%CreationDate: 1991 Aug 15 07:21:34
+ % 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 (CMSY6) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.035 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMSY6 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 48 /prime put
+ readonly def
+ /FontBBox{-4 -948 1329 786}readonly def
+ /UniqueID 5000816 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+ 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+ A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+ E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+ 221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFB7605D7BA557CC35D6
+ 49F6EB651B83771034BA0C39DB8D426A24543EF4529E2D939125B5157482688E
+ 9045C2242F4AFA4C489D975C029177CD6497EACD181FF151A45F521A4C4043C2
+ 1F3E76EF5B3291A941583E27DFC68B9211105827590393ABFB8AA4D1623D1761
+ 6AC0DF1D3154B0277BE821712BE7B33385E7A4105E8F3370F981B8FE9E3CF3E0
+ 007B8C9F2D934F24D591C330487DDF179CECEC5258C47E4B32538F948AB00673
+ F9D549C971B0822056B339600FC1E3A5E51844CC8A75B857F15E7276260ED115
+ C5FD550F53CE5583743B50B0F9B7C4F836DEF7499F439A6EBE9BF559D2EE0571
+ CE54AEC4721DCF5D2D062695FD884DD6C5E69AD4D7EDE06019AA63DBD7A415FE
+ A62C4BA084B29A6D5F00A85E00A9B4087867ADAB0AC160B1DCC24BCED3BE7BAE
+ 8BF608F4D4C69D22B92A00B55CE87EC85E592FCC21B503F439CD2E8E215E38F9
+ 33E27ADBDE5AC5F925D27C80188DCACA70C0E326DAB9EE31CAAFD5356518E25C
+ 7CCA1DBFA1350351C915C4748BB1655B2C47F39FFD7EC38F48D52DF76F3EC2CF
+ 139EBD840EEC65AA2A9B6B201D81D8A73B0E1CF21B1F3EE2A3820FABE3755443
+ BF4CCDEA0BC576A84EA0DEDF34FA8B4A35F9784EFC9474AD102741
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMTT8
+ %!PS-AdobeFont-1.1: CMTT8 1.0
+ %%CreationDate: 1991 Aug 20 16:46: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 (CMTT8) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch true def
+ end readonly def
+ /FontName /CMTT8 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 40 /parenleft put
+ dup 41 /parenright put
+ dup 42 /asterisk put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 47 /slash put
+ dup 58 /colon put
+ dup 65 /A put
+ dup 66 /B put
+ dup 68 /D put
+ dup 78 /N put
+ dup 80 /P put
+ dup 83 /S 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 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
+ dup 122 /z put
+ dup 126 /asciitilde put
+ readonly def
+ /FontBBox{-5 -232 545 699}readonly def
+ /UniqueID 5000830 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE
+ 3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A
+ ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477
+ C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD
+ F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D
+ 4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7
+ 61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16
+ 6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173
+ B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31
+ 6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23
+ C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B
+ BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE
+ 52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9
+ 48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5
+ 351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128
+ C4CF2F4F438A4E520CD932BAC455BF8775C27AEA6C73EED3EB2F8DB5E356AE27
+ 41B35C8AEFE73C4CD6A591AAE4F45762EBD6D3636C03F08C552BBFD0A13D11D5
+ 491F8369B4BAB8ED9D6F1DE7DB7AFD383986C4338D3AA71C9AF2B8A0955CFD86
+ 0345F16D9798B25156DDF826A7CB6A0CC4CB43078BEBD3E499DA95562A08EED9
+ 7CA27B7A0CE3FA7EBDAA87A600F1F6861C5D2C9C4FF37AE7AA1F17FFB58F2A07
+ FFFCA901687B2EEE65D1EC50E264B12E57696344C2D65023BF40E1C99AC6745D
+ A52AE739DBC3C775891F56D681AA56FC84B8819224B08647136E666A8A4CF522
+ 85FF33F9D4390091E0FE4CD68B101F2D0BE544AA5A1F36D74D6AE810BA3C77DD
+ B68044ACB44182345B2C2204740B36C77B1DF645C3C10729F3C12F9B22D2450A
+ 2CD44F4A46E28286DD8E5DE3952E89EC39F3382D7B27D0C6E8638FD8A1DDBD35
+ 060B62F203428ABF367428684B899267F9E7FC2D2B55A3D3358C12706A8A7EA0
+ 20E93341650D2E875E808E55BAE18D4FF3248F06CD620F0544D6FB79FF1E3C2A
+ 5457B3238DFB04AC7450D32BDAAB93348F156F6F25A3A362FE428F08F65B201B
+ 23138A24431F15454B83543E7F37633CF19E4D43AE782B13EBD7664C3B6832B9
+ AFDCB73E36068CDCB411C952B6C34D351C50646592005DED765E51D6F23028C1
+ EA400092FF7CBC64AD4BE7A368C84BF43D92F4A806DC11ADC1C12A425C635FD9
+ F0B6D30B95A16FF0CB15549AE563A5C9A30BBD30D01D73C6D1C76C2E0E26B583
+ DB134AEA664FD930FD5D009D09079521CB2B496DD9A07972100169CC71BE6DB1
+ E625C31F31ABB579FCB83B67FFC3C04C85BAB11C62947FDA9E0F46D24C82C141
+ 8C02D7FEB0CE889EA8CB0EE1C2F4E99D8941E899AFD8B9080231B9CE197B0F57
+ 39FBE22FE68790011E6891DD31F8CE7B6B8B8242610C0BF0D760E261AD6AA70D
+ AB862ED76B7783740C6F7F25DC7F9B0030DEF7F069B7F6DF761EDDD86423694C
+ 3A5C107B55DDDCADCED0D407178DAD3970BD08BE678C335EC7DFBFCA87788BEB
+ 417810769BECE38C2F5C11D89D9A839E934C632790E39AD48E6784F6F90AEC40
+ 86177DC945BC4D21B36F8573073A4AD0C02C2F525E8AA3E0294502D97897C255
+ 5DF99B915BB9DCAD94ECE7B8D147655E1CED46E4BC59E29847E9BCEFAE47DB7A
+ 63CAFFAF636B5AD692F514B16337A34968BF11CF919AF5DBB098564EE4CB1F73
+ B248085BE02791F2C42A75F0CCD8F4D1BDD287DCA5B032D7E1693A669EA50681
+ 9D74D5B20A489F8486EA457770D79B2E4AB86AA53439A9330BFD33D5D99942D5
+ A2E33C662416B5973E074E913A42C68C056DEC3E7911A1237C1339670F55FC93
+ E67B6CAB40473C461AB956CBBF4E3EE0AE0D7EEA932AC0F153F51FD237E116C5
+ BA14DC0395A72929C50C24EA3616369CF6D027B6B82ECE03E872A89FBA80F081
+ 21892CE0BA5E376014AAF7709F1EFABB1FE6953301723CCB845B8E295C126D4E
+ 26208709026808EBAEDE15578F3C1AE34927D0C2498D1FB1B82B2EF537218318
+ C2472B60CD62DBCDE98FECB20D0EF987281BC3F0D7C8DCC069BAF82FA1EEC83E
+ F74D643CC5E0EAE417F73AAB651F874BB850D04D64DF77C65FC9B352D0E848EC
+ 3EACE3FF39BBD21ACC02F482CE63931061791377825C3EAFBC58565D373AB0E8
+ 4B05867D65B90AA162A6A4C4A9267DAD884510DA05D0A84839894B65CD3E84EF
+ 2181E3F50219A651EDE799042C6D8B568D0BA97505E7518F224662E4C9EC4976
+ 34737F066BE1E3E248CB7D115C07B239E0A3DAE9C2E8A5B2CD8AB1C60DAFA6E3
+ B5AF97B5D3FD080E2EEFF54FFC53C4B9E1DE4744FDD691928C53DC95276B8DDD
+ 294D78C771E482E5162DA89AF8B91E83BD614683D8D40FECEDEBAFC09F693C06
+ 71ADB6880D14ADC9C23D05B6711D1AA4D711D07B5E3F38B3A2E38EA9F4E33376
+ 44547E96016F9923688077191E83C9B3EDE00A4A0325DA0E1F29242B40318D31
+ 45F40819ACCDCFFD7D7AF6E4B5CE877722954509FC0CE8AAFBBE359BF52168AA
+ ED851F7390DD860427DBF88789F63620B3DF5230EE4E85368DF76C58C63C48EC
+ E6BFAF01748D0BF6D9B11B90C8CB8A0565C67590EAD65AD2002EFB0132FF55EC
+ EEC2179378D663C6332599BB06CAAF16846C011C4437EA40C3C0163C8EC72890
+ B58103257BCDF92E91CAC3500E0E649A6E2251B1E555ABEE490FA187B79AEB35
+ FB2ABC60AA2D1D83B92B0C7209ED152AFA5A6A4C008C528FB04E90EFD30A89DD
+ 0CA04888D5269AFA327642DB8ED6DB4F2F6366018539B7DEE55CA025363CB1BA
+ 20AFAEFE40C33518CEED188AE14C779200A2BBF283E8D6B0176FAE832272C82C
+ F982210A8BE58F341897D50DD542F679870F09E48E97CA2A2B4FC6D152EF8B21
+ C6AAD39A559FE01C061EA45E661C8A9ECFB56C88675CB57D243BEFB9ED422CC2
+ 75A8D3648F4164C5A85D0FDB9AE68EBADFC6BD2CB236054E7509C5622A4E550E
+ 7EC59C29970276F26FA4F5C01E57503F9068F6D4CCAF2A7F3266057A84AC64CB
+ FA39E80FC2893373519AC775104CA426D41675E18FD98E85D33E7FE7BC8C6A22
+ FCD75FFB02159ED2153E1FEB10059337F945E6F58AE34A133D0FAE8EBA7F9662
+ 030A74E0B262B0EEB464BD8210FEA8AD4AD44CA1D12992DE2BBA1E90A2543997
+ AA4FEB99571024016737C6D45070746013300F39AC19234820122E669D95B40D
+ C0F5D4BF72C443F84D334547B94500601DED3AE73CED22E6D0674C363191905C
+ 3FD4B5802C6AA6974CD28C1DAF24616240C46BC1BFB18E73F0C62556569FC3D3
+ A5E6DADC6FB715AF5B57E579767B3C3EA49805606FC331903884CCF74217F479
+ 17775AD4875BEE8A549755B975F2C9992684A9ED7DA0515A4A87028F9A4ECAAD
+ 102A75FFB63FD0FD3D54ED92C76B29EFAAE99082543BD6AFAADEA7CB595D0838
+ 0715E1FAF832815EE5CBDDCAE8758C6556BF98CD727AA067B82E96AA6EEF63B5
+ C6270E9EAE680028A6CA54C71177471D5D8109A24E94C4FACA4FB841EB1A0FA4
+ 0166C9F40A8B77EEC2EEE7001BFEB906DD43D61413C9175F28DC00BFAF3D28E4
+ 0A354599AC21C746EE2AB02EB8AA23B8D57C4627C5226A98EA1E832B311AA43B
+ 919169878B25EEBA7FC7ECB2A9F78EC1710EDB6374ABF523813B2D4A0E76F1D8
+ 609C39F7FBC470227F373B463DD0271ECC48BCFE5A97E2E8F024A022D0C95506
+ 695FA848A4F2BB6341705EA9BB376A8141B33EFEA13DD959ABEDFCC79F463E4A
+ B0A1A6D28C79C9E18BCEA0C7A8E67B000BF764E34AE906CC60A9074099096A2B
+ 77EA1AC70A25E528E2566E0B8281E821A96541C0125E438AD63A1AB67A177A09
+ DD28EF9050BBDDCDA28F84F171FE0B31A9C9FE352A3B2C4E5E4E94F8478307E0
+ 983EDA73887D31740CB9B9F4E17E7AE846C7DDD44C22AF442BE307C8AF519BA1
+ 578DE4C83ECCB7B38D49D61712D48FE0136C96B6805340E74217CFF25690A43E
+ 2FD67260D9268939005A92FE5202E21F4D2E42024AECE9E87F92DD5241514377
+ 12B0D317077756A1DF97D71D42AFDB2E3125200E1F62FEF33337822FC1BF9650
+ F2F6126D7B33B67D29ECF03BFF286A4371CE23BA4CA27C8F698DCE94B2D6D0C2
+ 3B1E5AD22DA95EE20160979A31ABB411E247192DA05B380EA13E68580A343732
+ 4EBDAE9C57575226E6EC6AC6731825A59567919E85E8754FE9C16157CF3785F4
+ 929F9C84E717C4C9251EBB43A29818DB77513E370F2C354680162B56CDD23DDE
+ B5DBFEEB379A098C676090D96A4CE6493456703A0A8ADF7BDE1297DF65B1C4EC
+ C978075697391314D51A0CEB91B2F5BC5C9C76165EC1CA194C74A46B3DAC2C6E
+ E54A2DCE81FE9BA236AF4EE684520E061B63D8B1216AF3FCA38D76C6CE1A4732
+ FF3172A517D536DFEC5CBFE749E2D1C41729E4F3DB0FAF01A838885ED75012F0
+ C27268E9D3A2E649165606B181482F222175BA8CBFA90C5B332B5D8AEA1269CF
+ 7DFECD74CF9369706A1F5DF9AF7CF3363232DD10C4B06C7E874B1A3BF6FA7512
+ E7ECF4EDDA08916EFE3718C835504E11D6E1BB7681956C761C56A97017954C04
+ ABD76306A7F6E19BE1F5666EA3455574DF44AF9B0591747B5A713BA308E088FE
+ CF3CAB6BAC2731BBF7E87942F9C48F82108B14D8B5A6D77A105D10A76276FFDC
+ 10A1F1921D5748016E2A11E81AB286406931215CE0031E10B50698C61EDB7412
+ F8D23C4CC5767A49EC67399690370DC4052C6A23B67128BEBDFEC6EA9D815606
+ E3DEBAACEF34ADECD956903D1A988CD792582EE5FFDEC6BA86436F9317D01EE0
+ 9EE40CD80D2725330F83CC52D24204B13F6510E77A69041B3D5DD49C7AD095A6
+ D2539A0546D7157D1C5CA2234932BC3D08C38FC89DAD6C02C481F433DFD8EB1A
+ 2876046847371332356E4352F2669C480B6978FFD9035EA5AFAD71DFFAA955DE
+ CD9DB960CBC2A2F28B1C38926D3E8B05BC720102F87E9EFA7013262791B504B1
+ BC4400FE9D4826785EA7B62D43061410E6D0AEAA960C3FF963C296F8F57D9E46
+ E406B8A5275084656D3ECAA4A770140C1B96BA8B03917B3C8F4DE82EE79C16D6
+ 6C52A8474B38C9F35F56FA15AF073B6FC7FE81EE6D41C28AEA018DC00C84A167
+ 426A87E30785D2AF68C6D793240DD8A0CBDB2E3B5F26CF09499DCFC2A927CC88
+ 8A79DD79C1FA8244C71B8DB4D0D818E9AD49D22E7A9A56FD4DD9B08AA0981963
+ 2EAAA106A29DDE8B014AA69B33D4F8D75D186C06455406B0BC6E78D6D0C0E32A
+ 68BF4A53CAD73801C77DACAAC1F07380E3224B600CA344011D51C930FF3A52A9
+ 41A4D65C0523679D7C18E096EDD3D07107137A2654D0FC5AC8FEA95E66D5D6A5
+ B2A0CCC913453A21A721D70A72AA2D1868A74EFFB78F23AD81A414BC4747AE9D
+ 545C16205C888ABE8169DFB84D56130C8252815DFDA36F5CB0D6F0F1831AC4A4
+ DAF94DB312C06CF1B533CDE371D142A026747402758A21B0585B4D6652F28F59
+ 93EEAB7F66E948AC31A312C6BC270506BB1CD3C709109862A46F7D229DB9B3A8
+ 934E4ACBE76C989C7E742F660B106C59A265105AC0CE16E6B3702666E947DBDD
+ 98054890CAA71E1D26C0F730E189B6010E6C7CAED4235972627ACB4DCF459CE5
+ 4C75630252B395AB0191F33647BD0E91A7DA2C3ABF050198126774A9AF18177B
+ AECFAFACA39D147B77509F374E115E9AB312EAE141E530965156E9E6FB79E740
+ BCF09F3D74EAB08F90171E8BE1DFA89429C7E3F8BBC6014D6C355786162C62B7
+ 2055CCCD65994F52CF7215CB94DC54DE853BF63D4551E347AEA77BD65AFFD089
+ 21FDEF21FC04B9B2C829449D954AE9E40FDAA64886E6675D9286698391DB5FBA
+ 3BE9B85010BB0F10383A0CE0D00042CFEA52546B467F1A2DB0D6534CDA4EA1F9
+ 4DED8FF8E8C94DEEE2EEB2F81EDD6B3FD0676425D4213376FCFB6B43DB92546C
+ C66043D273E32AA187148F00F9E35BF0C06D3A13BAD5C6306CE1E3455E71885D
+ B02A40F080BA0737AAD4CE9472AC94A119EA936D621BA5DDACDCC2BCB24B8828
+ 95D2F741220154DB1EF52BE1021A9A4F504A6CF8CE290A3889DD4F37E9A59819
+ 1F098C7E7ABE307AEBF6AFF6E2974FFE34165CF2089D5F5A4912724359625668
+ AF0213CA3FD2FEC70B8C985585CDCD754773B9A60FB03E6527EADEB0470A6A79
+ 8B51B4B0A9DA3EFC8AA36CB7C422E7C3B2B9AD15B611B106CA49EE67288D4F04
+ A6EB5C1DD407C13C1CDE6C65A5BAFCB4FBD11FB37FB0F60D7BA2D114308AF533
+ BFA0E980DDF201DA613D1F76C04843EF98C9D99B640DC78AC43C2B059549AF7A
+ 8F0E3C1EBE8BA9C4F72F2F072854BCC37DA46D1B5BE976C4E5EFF241CB849052
+ F66994D5DB10A697FB996185347257B97C59B9BE9DC288CDC72B27B59525CCF2
+ 3EA8D8DAC4F0CB69495C5747DA9EB4EF52B0C480FA4CBD1983031B22B9F64916
+ AA5875AC71DFBED7321F226C5580C4837F0C3BE76AC3641692606B777F65C88A
+ 1322DE1E78FDF7000E5DBAA9E8BC7B092186BDDF9BA1303BB1F7DAC199A68B3E
+ 90F94209D26A72004D23AD0CC6902C51F47C46086E773927A7118E38B94999E1
+ 275D58C96A1DF54D98E6D95AF4F28F3F6FDBF7CB4B2EEB7AF1E2D9810D7ED6AE
+ 7738C0AA6A80F38E37BCB30FB0A3464B3FC39B9185F720F7D4F6B2E51E8B6E9A
+ AA5B0C147F2471168EE09C0D9BC61A62EEB017D318487E650E09688861DC9E07
+ 53BA07DC640F62DE8155CAA80BD86C260F408F628765BBBFF130213B562B9DE0
+ BF374ED7F5ADD8479AE7611763088252DA2BF0EC9B6684B16B68D67A2971F950
+ BE42E534E70693D1531F7BE9AEA1BF23CE6A6402DE6475FC7DE3282071CE6701
+ 4A48A118C9348546B281F105C5694557E5541F96B452C363D61027BA70B37B86
+ 4FDC44E72852384897D7B9DA4CA9D587F5620A23AAB4AE83E43ED39D1808C1A6
+ 9069731D4A304006356BB9C0EB9BEC6B65D263E24D14DEEC6A76840406921DE1
+ 83ACF5E32B477ADB013BDC439C4B58A8EB943971A33FF725CF4E736E7449C7E5
+ D23ADE5A829DAFBD83E48412C8EF6D90FBF1FBC322D58A2995831CCFBA91FA61
+ 4A1F7E6F7CEDBC08DCD4320965B9FFC207A69712E39A63F60374170CA5ED4304
+ 1B9945CC075362D70F2D5506D74BFB9B3586FAD3A80F9CCFB4CAAB9CE7FD23D1
+ 1598E3D66B54D885C91B5D434B7D8E301254F5F1ACFAA886234A5C4551D5815D
+ 8AA61C55D22B8B81263DACE6C4FDD87D20561C7A486C3CACD75D844F545015D1
+ 52194087401C3BFE757EDD52200D794BF11CF93475DEE2306313D56ED6BEA99D
+ 80A300F9FB0FD5A19957FB3540F8CC088A5DD46B96267E4C48447A74AAA45D8B
+ A3F56E0986897A08A3A9A2F11D9C76C6D0120F726968FD744ED688C10989DEAE
+ D123D8ADF9496878CEFB5A2203D59E5615BE1D6F1460D0495C8B279CF6F5B8BF
+ 0ABEF741CAB7182AD49A447A7D4764AA869BC4D8CEC75B17BDA54B136239DABB
+ 5584FC9E55E31E091F349D8025437D1A6154AE84C186803CA5B922A3B526D0EA
+ 3E46DDA6E85278182DB83DA02160851C40F47E94D2067A2BACBED99CD2A5EBAA
+ 5B48019893951990876CDB9E8063A83762477D5AB29BA8E100A567F614FEA74F
+ 81EADFC95DEA82F17502088525879115BE50B152419EAC649557DD8B23A94AD2
+ 5EA3D4EAA3C440CDE78E573DBEA370E0B77D13ABEC4945EC0C815E377CF5CA7E
+ 749CB587E70B435F2927E498B43DEC1A34DD7463FCF8DCEE6F572F250F7C3E51
+ ECB40C98167AF2AF9B909260478407CBC445C27E9D88DD4BF5ED3214058AD892
+ DD4DC276AE4DF803672EC0CC52271D03DEB6C0DFF8C4666B878CB42C86989108
+ E72FE7FD1FC7D8CDE90A3DDE09B610F83E702B431769D0052D26F4F0CF753C4A
+ 2668AA9535535A3521202C2FBCE5E6A49B9543193B6CF2B2E56B3330CD24E927
+ 58CFFE772C35EC7AA53929E5A2A2ACDD5018C03577E4A873A50893C5FF87D37A
+ 0DF9A49C64DE0FA0819F2BC4B63E79A91B20D4DC1887AF6520D0968D42B7A151
+ D6ABB74407874CB6804BDBACDC92A1AF20D486D1C965DF8AE27F8377CA0C89AF
+ 4A7D8BD8E5202AC36103C922DEF27603981C4AE68E34B2712B3011C361C7CA2B
+ F6F9FB01832F3A68A600DF5801EE388D3C5A3F148FE48AAAC57D2152D9D6E001
+ 16B594A6A7F41A23984BD7A33281290F483A79AF1D4184988BCD32FF76DB2355
+ 77B6EF132B9D67924702C8E5210283FD7E536599B7715F9BB9A2C0F4918919F0
+ FBC7DB3AEE993542634CEC85840596ABB69D0CADA8CBC52D25CE98B2B334DC75
+ BB206720A7AC777D7BC5A98F0817D2C76E5757EAFC2F0EC61D6A79D9696D291E
+ 264CC36C6B290B24CFC7120A5D4C8EC4EF7ECB8ECE6E64
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR7
+ %!PS-AdobeFont-1.1: CMR7 1.0
+ %%CreationDate: 1991 Aug 20 16:39:21
+ % 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 (CMR7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR7 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 40 /parenleft put
+ dup 41 /parenright put
+ dup 61 /equal put
+ readonly def
+ /FontBBox{-27 -250 1122 750}readonly def
+ /UniqueID 5000790 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D
+ E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8
+ 47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C
+ 8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4
+ 78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486
+ 1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E
+ 01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B
+ C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0
+ F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30
+ 8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF
+ A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7
+ 455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2
+ 9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105
+ EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B
+ 52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97
+ 563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F
+ 0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB
+ 7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1
+ 0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4
+ 1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4B067A46F8EE
+ 2AFACDE591ADF7304939394F3D5A260002A1F10F0600B8C5512D50FAC711C0D8
+ ECD4E595D2CC782B6924CB844A86BD2385AED3C4239B3C7CBB0AB4EE31DA161E
+ 19388D238790061A9714E6EE8A640FCDC960F91570A63AB6663DCDAAA397E609
+ 855F1131442AC9B5B975F3CA012AA2137CDEACF3787FF63C31D74B6687AE8F68
+ 3B4A82E1F302411A68134C593ED157CD08B549DCB4C0973CE148284D127B3B65
+ 3C764F6DC0F1023C089AD3DA44FA5C8D157997ED69FD87B7E2681325EF2B94CD
+ 7FB924970CD55FA93A2A579873386C17D533738BC0FF9457C54153BC1B4D9E8F
+ B9E9FB4C9A97EBF968D198EE827709D21D48D7C8C663CA7A9E8CD286B9F3B108
+ CB19F3CFD5D36C601782228D0313D1265ACD74CBA45980C90A81F3A31A207DDF
+ A051CB8AB7A31EA7F6DF3719A2822F07CA36C6065CF8BECA6A045BA1A94381F3
+ 0B6BCD7B4EA502386FE2C0AAB76E24F712C96B1307DAE46A8F460F310EF6AA8B
+ EC9567EACB1D5248EBE2F06E4EEA7C397A2E3741E7104C602D7B5D6E28D64BFA
+ C1785513590F68181E44110EEDB4B159AA5C86E4EE986BC6D9C0AF8940269EDB
+ 423A2FCDB5745597A20CEA68EA1B376EAB87D52C1A89306C4FE351D98F17A50A
+ E3AB64464E39F6CC955618565258504C8FE274D5D53E801164B98BDAEA605D61
+ 9DAC4D38652883D004C84C
+ 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 21 /lambda put
+ dup 112 /p put
+ dup 114 /r put
+ dup 116 /t put
+ readonly def
+ /FontBBox{-24 -250 1110 750}readonly def
+ /UniqueID 5087383 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
+ 85B385124B1D786840F2AEBAB2DA265F4C6B4C172877435AF18F56C72158E2B6
+ C4C48029909E992391F040E86D78AC0BFC1326BE938C72F17A0AD12E78B03B10
+ EBC8C58766CC0129B194D22F5580DFE6203854574B72CCA5E4E5FF8482635126
+ 6B194A737A4D98523DAA2161A5F0DBE29F87173EA69ACC5C02FCDE4904DC165E
+ 616EC33BC35ED456CBEE7E592CF6F14BBE4D36E144B0FE620CAE756C76CFD890
+ DAE462689CF669AAB6CDFD00F170372FF9309C87F1E0A29537D03C5873B2B099
+ BF3267AB6A989032FB71E6782A11E2C6339B631965F69A46F26EA31884519B94
+ 4EE8E1F7E231678BB8BA0DAD9593BF3E9E818C385DA897B353278E3CEF35F4F4
+ 38735DB8178A20A1D8606FE2B457D8E37A6F1D522C0BB3ECCFC92C4F46A323C7
+ CCA52444D7620BA56AF4389CD74BB02F83F46083C4F2E17D0F27869112CFC27E
+ BFCB5C401BE82C1925E8FB0B5D38039DC768B16AC15273C1502127BCB6FA7D47
+ 93C3B16667A644A65949DF9E7EF1C6820FEBC5D60C7DB754434C872C996359FB
+ 51084BF98DE26AEEDF918B3061AE33AD8C9F47EF868A909993E2A6928905281E
+ B61AFB3E23152276ADB1E0DD868E26283BAE25F469CAFD7A38CCD2085EB6B491
+ 19F3431A330419C581F5C4115E6B326B57E94D359AD37DC063D18F7427CF3A81
+ A13CA6FDDE022F8498C306ADA325A8FBF599B0EC21324241A3DF9E9EA03E562E
+ F50D0789EEDF105F0147143124A1C348BF648BC9320F3FF7DDECAC47FCE5EAD7
+ 26666AAF59B7C436088A466613EAFC54D402A1915781BD83CC7D68D692C26614
+ 6D32ADC1A1C397D894C61B7C4F4EA316D1E17D8F512045830CD0FDFA744723B7
+ EA92E45B2D6006880C2AA5654EF37BC3C610F50FD78510CA3CEC6842EBBCC9EB
+ 4FF8398353EDD7442892E2DF8DBF7D65E272E197BA15E06AA2D2F106BC398C0A
+ 3ECE1B803796635E4CC58AFF96ECBEA6C7434FE6126A21BD39FC767A2F8C4827
+ F4558A8BEC88B47902BFBB8918AE64FEBE37CBE994CA639BBE44AE52682F57D1
+ E7842A21648408A10D17A5F4BCA4B862AD150FDF9773008960850BA5728CF4AD
+ 800723CADBCE19F49B34B01B0E89CC6F3EEF8783C4573CC9F971BA2CB5D3B009
+ A19C9A08D5E3F976149569BCBF1107FB3239DB70DD60692D6BBFE36DFBC0DCC2
+ 4D9860580F8E84B46E8DF5DDB782B3225589BBCE9EF41E9606252DC2875D69C6
+ D3761DC6F751F499202561AE3AD4AE543AB55763
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMMI6
+ %!PS-AdobeFont-1.1: CMMI6 1.100
+ %%CreationDate: 1996 Jul 23 07:53:52
+ % 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 (CMMI6) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMMI6 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 115 /s put
+ dup 116 /t put
+ readonly def
+ /FontBBox{11 -250 1241 750}readonly def
+ /UniqueID 5087381 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
+ 5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
+ 4391C9DF440285B8FC159D0E98D4258FC57892DDF0342CA1080743A076089583
+ 6AD6FB2DC4C13F077F17789476E48402796E685107AF60A63FB0DE0266D55CF1
+ 8D0AD65B9342CB686E564758C96164FFA711B11C1CE8C726F3C7BB1044BBD283
+ 9AA4675747DF61E130A55E297CA5F0182A3F12F9085AF2F503481071724077A9
+ 387E27879A9649AD5F186F33500FAC8F7FA26634BDCE1221EC0ED0E359E5EA5E
+ 6166526FEB90C30D30099FBDC1BC2F9B62EFEEC48345160804AA98F8D0AA54B7
+ A480E715426651865C8E444EDB798C7E11040AF6E5A7ED1888653C6DBF5E6169
+ 70BCD9C063B63B561EF165BF3AF11F8E519F37C6FDA2827685739DE2C48B5ADE
+ EE84F067D704D4511DBFA49E166D543CFD9ECD7417055D8A827F51E087CD2927
+ BAFC7E6CFBD70B0FE969F890A11149D3D44D422C3370495DA9951AEE7253A49F
+ 3A9444C8CD9158D84117299F7F2332FEB0F94E6ED8BC7AA789A3219BC2F227D3
+ 3B5BC75FB53B55D72AF4A6A7BB613FA235B11BB37D059FD87127CEF73D5B3FBF
+ 9F91ABAD78BD9240BD9525EBA78095EA0BDB25D1A19E876F292882EAD5619D46
+ D20317A345D931F4FF4EAE6216C27044CBA525E3B917CEA25A04C120466C4B93
+ FC720E6BA832A06CCA0A3916CEF0968D49085AEBD243C41A448289A6F05CE3F5
+ 79148DC112A3CC7E8FF810B8C1A09E05F496C0F1EBA334E42E05C376C98F5F69
+ C06C71BFC0A2F3AC9951CFBB143C66FB84F9C4ED27DF70869352D61BD5E11508
+ 0797B87C709E3C151EB44E478CA576D257DF226C00BEF75B3313EE0F744D2E8B
+ 64E33BFF4915505C049AF0AEB069FD77B46CB0AAB12979BFA4C23D53B3A34123
+ AB240E170C803F42D270357292CF6CD2BA0B79943922029A4A2C0A536930EDE4
+ 2E13731BD89207969043C54B3C25B173DB74619D214DD6EFC99546AD4D6B90B8
+ C7B6C6DA603292CF7C63525ECFA668ED9CD28903DDC41C25A2CFE4EFF51CF02A
+ 1829B2A33685C4D238A3E8B2B3CE206FFB7BC5D1162FC2F6304689A380F9FAFB
+ 2C1B94F22FF2D5C1462B60053208B1E378A3B2F592AAC30129A04D647494BAD9
+ F17012C3738CE57378050030C5B1173685420DA246637856ED77BE4F558D0E43
+ 7218DE143D4CDE4D0A80E7410554CA866F2193FE2278CEF41DAD7075985CA39C
+ D6950401E51F8FCA7928C206B008FAEEA85B9ABCB232B190D6FDAF797B230029
+ DE66E541853315B6129D8E918D57971279D2504D692619CB934D01BBDF9947D4
+ 932AFC9808BF54EBFCE959273C1F4AE0FD953E6FA97EAAD3A14286879D5939FA
+ F6CE81F84C1BAE0375C60FF7CA9209D62C643F61BFBDE14D470BBE942E5A1DF3
+ 70D53E61051415C1ADA13D48742457E7923036A0341FEC1B8904F3B81A5B9523
+ E1DDB963B74CF72CA20838CA44D32E4CA841D4A5C6827C24D7210009C8B60DDB
+ 97C2E780F2D9337286EC95AAF8AB98A10DB51CDA4777FD93082423E0CB2E5F
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMSY9
+ %!PS-AdobeFont-1.1: CMSY9 1.0
+ %%CreationDate: 1991 Aug 15 07:22:27
+ % 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 (CMSY9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.035 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMSY9 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 50 /element put
+ dup 63 /perpendicular put
+ dup 102 /braceleft put
+ dup 103 /braceright put
+ readonly def
+ /FontBBox{-30 -958 1146 777}readonly def
+ /UniqueID 5000819 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+ 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+ A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+ E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+ 221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
+ 27D1663E0B62F461F6E40A5D6676D0037D33F24E2FAC2B0009AD3C8350CDF8CC
+ 65BCA87979C36D14CB552E9A985E48BE4E88ECA16DF418749AF04FDD2B0E1380
+ D281BB2476BB45FF30946B247DFD7F57305FA87E50CA338121C71CDFDF927A9C
+ 77FF14CB4A1D6D80356FB1171ED38C37702350497B44E42CE31DB2F493807DAA
+ 15B887C671199A54C4C1294BC520F5538C15556BC43C9F62342B121C6DCD6C5F
+ 491DA47FF360201EE21C08A781ED0589A6DF91B99FE118B9B29E4F068672E52F
+ 1A06C514D91C4C937D4E642503392B1CD1B984B04B674C2977A634F63B35677E
+ 9196FFC248B739825D9D0A98933DBE055BAEB4CCFD91E8F5222E9F02F955682D
+ 6E1ADE96CCAB979B2F9EEB34A678A9654B5D1C642BDD6C754F16D5AE17BF7D19
+ 75ECAD294A5139FC07BA0CC2C251B1B7C0E64BB73E0FFC470F9F273AA242EBA4
+ B2BC095D8D2E1A455DF910250D8C99DA1F10C83E4B692DA94B1F89072DEE366D
+ C924EE65FFE13617B5610730B8E2F2E23798C9F18B5994C9B5742B921A7FB96C
+ 16CF19B8ACAA972C1E77BE3804A4A6EA65DD4B9092D98C18B1887EFA97FC99D7
+ B6B3A1AA88AD7F20035B44B841695D570B821AA10BCCFBD6C8940E2E34F70EBA
+ 08A8A410295E99E59663306F693D294E6CF2D1DC6A0BE335867146863132C749
+ 95C6543E1DCBBB7C61FE27A39921A5A22BF04420181E0FC38BBA886F694EE79C
+ 4CA648CB549D9B11FBCC43742D897A806491FBB3DC23C4D0554AAF134D7A2922
+ 8B261AF5704F0E175C6EA2CA9E1B2E76880B385E3F42C0E3D9D08DBE1A1F1EC9
+ DEE4631A721124FC628F1F1947E8D0FF7AEBDD3CB1941C37AA2FE7E99C796AA0
+ 8AA24BD4C7EFD273CCF724D0CFA7518D0653C395BDE43EEE35CF2598F10DA02A
+ 0C35E5A84B420C460E726E6D7EA9536EC0AE41BFEFF828EDA3066644A7CDAD71
+ 299A95AB72EC59A516838A0AFDCCED92574AE168E07FCCDECF423AC395F55DD2
+ BDDB62690C4908CB4FBC309E784D5B16136FA80170875E612DA9FB26BE5A1773
+ 21527E01E645595D5CE121640C10859C08CC5409729E14B25392FBCF39E4DE48
+ 511FA331F678EC755E99F2A38F0B12AC367DA9D019059C2B1CC0DEF80394D28D
+ F37F4049912A3A19166A05AFCB339C05E931509C9A3C201C49BE007B2C0B4834
+ 705341C5155C22A56255C983726837BAB77C3D2E5B0AF94966894B33E708DC22
+ 7BCD16220ABE415B87669AF13A25E3009FE90661D4213A4F0D9966F49B884951
+ BAF50DAC2B36628F453B779671F8C00C7E64A3EEF8D56A722EBB08717646CFE2
+ 85BE551B897ABB709862CB5FE3A78D9CAD9D700709C1A0AAB990639D57179620
+ ABCE5C3D4AE5F93EAC123D4886231AB6377D57B6F8D3D565ED841EF9
+ 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 49 /one put
+ dup 50 /two put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 108 /l 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
+ readonly def
+ /FontBBox{11 -233 669 696}readonly def
+ /UniqueID 5000779 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
+ A5FC06C4AB595F9DF66CE5EB69568038445A9EDDE20CF92BA308A23179E6722F
+ 42D149F61C9FD1D0395249CC7074D35BB7411F76597597803B70FC60F754399B
+ 56D3E6959289CF13751956EC28B119E55611E9B749017ED1B924141EC997010B
+ E6F2BCB53588FF6C069742284261191C908B610389BE5237D2FACE820A7DC291
+ E97060B5A3EF2B704C352E8A7E020A8038CD07394D6233CF482FFFB1DA54A278
+ 412F69AEA16EA7B60903429F8D4DFEF87FD6E8ACA2B297D9303BD547A5D46B42
+ 2E1A23A616C3ABB6B063F3ED3E29FF92EE8AB86C1CE5129F11B48023DAAC033F
+ AC3CA276303C0D73E853AF675AFA1C9F4B3D23D93B6B31CE861C119FFEC14CED
+ 644E10FAFFAC080C6B81CE43DA41133A3F2E580EC16A01063B195FFF0A6A7DAB
+ 9EA3E84F3D07D7985587C0B54F31ED7CB9CA1902EB82C87566DB55B6748B78F9
+ 2346ACC865CA5C7C1D47210EECEA618065C9CB5A6B0745481A0C4C042A9EF6B1
+ 17A4E9BFFCE545C8AFE67D3AF798E7AFA0EC10248283DF7452FD67C731F9A000
+ 28B07FD633CC54A20BC439FE4117B28AB47F130892FE69AB2274E1109F13E9A7
+ 15B46D1E6DED1E0DEC68BD07B044603A882DFAFFD221B558D597C3CD816185B4
+ 865B3B36F0E3C1071BB0667111CECE211F992CBC579ED3F28B6BCE15CF5F0F81
+ 26D5719AE66A0C06FDA91CA4894111A5C6061E4E96402EF6A25A39868101A762
+ 2B5C1E30824F2D6FD7993884C4035E22D94690EEB812A3B7B6DB644AB4CF39D2
+ 463F006D6EF9F60374A2FDDEA2C513D4E45A92DD7AC3A538C60F537EA35782BA
+ 21394F1CF31DE6799E7456914778E29CFA72A54E133C94DE0038FB4FDA1DE9C5
+ 9011896C23E07D9B5683B7C13180CFA97CFAE0759B1EC29BC6818E5C20A2C00D
+ DABBA91C7C09F20F6D5854412242F5E7D8FF4C1E6B2C9C977735531EE368744C
+ 58B1D7CA15E88ADE0DD8F572D884436EC408A25C75D63BC4A01FDF96E4180F44
+ A3E066EB30E06D987177CBB70BCBEF3CEE372594AF682E80FE3F1AC4C0F48DEA
+ 669BFD962002C2D3A4BD5C0DD66D554D09FCA07ED1E814328CA5F5C4CFAEC1E6
+ CD675F4C252AD72968772B6240BFBCA9204D1D90AB7293789F32AC9D86BC58E4
+ 5A7827A11858F8086D08A51C09837EA287587A58DD2A6DFE834E03B1E315E2B4
+ C9D85D716E92543AFE95030A2B294BE490593B72AA8D0B218F44B442478CF900
+ A38D98356975F5FE61367A948735696F28E861A07295728C078D7117E54FCB81
+ E0487FD51F4E00824CA4BE6B95D2E324802376F40165B792D37B898B9023E87B
+ E195FCC64FEB0B64C2E848E8DFFA45CC1A300969E6E9109A81F4068290711DCA
+ 2F06970C7EE4B612CA5E5B91C5E5A147B246F9A7A94C9D63C582ADDB9007F196
+ 01BA530BBEB578E5404467F226C4CD7003C9B1977077FF1D4BC88E686F0699D4
+ E72ADC8FDEAF7122BB5EB95B1541B8C142159FE5B659E0B70AF970006A3804A6
+ 4575048652086F80E8B0DCA84BACCD6CA42BD97DF45E50588F08865E71CDC958
+ 719EC952D401B648A0015945D49702A37EE7B8ED4D0B298452CE581A133F6736
+ D2C751AE56A0399A8337CA784D2C1ADDAD663AD13EFAE887A4AB2274EC40D9A7
+ 6FBA9C15E612343DE69F44E4CA2116587D80F63E6E6D242BC2F6B25B445EF595
+ 9452057018C57D52B38B22CCC3B566FD4CE153E8B5AECEA9A1735B36EC50EED3
+ 597B4A0F4A00B0004D26AC5E49F3C374D92FE776BBB0FC2F36FAB81CAD3C1B0F
+ 93FA7ECC8B34A20F1DE8EB1AA629FF2B453F1953A4020F2E3D0FB078EBCAC088
+ 7A6A7AB33AF5A7875A3F0C0CBCC3E2587F4D1F14AAB292B95018C8BCC0FA0893
+ F2B1B286A22574D83B1FDDDCB53992114E139B2E43926D4B96AEA1276DF2976D
+ 8D49CA0DE7038DF2FE910B78AEB2043882E5CD1995D82793B6F42160B0FD5355
+ B7556B7F82A716F73C296A0C74B08FF5582C72212F845136B55E70ED99BC01EC
+ 689417D481228FDC3E42E138A9030EC8DA53E627E7058B540E2A06F62C994461
+ 09BAE5B719C5073EB783E7C91AAA4B5A12AB61FF249873175FE41719B0FEAB2A
+ 4A38E09EFFB2FB7069B0E8192DBD240081E3DB7308F2B0095C8E128FC9BAC6C2
+ B8A59EC4A60C75F8FE01930CAEF5470493B28D0829462E5D3F3971560882702B
+ CD34A07A2AC81825E105D401D101AF0F8E2911A16A1DF58ACB0EADBA2E87A833
+ ACAE21ABE83CFA93A204881052FA4FE2B6A2019EAC4AD1AE53003EB34755ECC2
+ D4D3ABE8A413AF06424961554A63DA305415ADD53761EC675D744BEC6DF999AA
+ 09F5607219A168F730D19A6437EEC24D67C40170E9BDF3B3839EB41E3199F177
+ EA4B13AD12040CDF049744C8EF2E7C7A2728868E1C2BCD88D57EDD285D970FC0
+ D35011ECA8861634A7C5CBD8C128813345EDAC47DC4F35C54E2AE72949E6ADCB
+ 99E447B4C551C4E2184E06368976BCC13BB62694A1AEC8DEC57D1FCF3326CE57
+ ED1DD8225C34B3921289AAD571F34E9AB729C47DC29FB3B67266C1B358E0DF64
+ DD5ADF9FD1443E3EF1127A629A2EBE17E97FB05403E5EE4478F55C39377BAD97
+ 752B66639446ADCA094FA0F1171F6C757862E9CE77B13477999E5325FFE510BD
+ 0C344DF8C75134527920495791BE9F744DED9B33693F33C50869174D9379174C
+ 4B43C2841B9390A511B55951F3EC30846BFE72EC82A4FB579B195B8E99FB113D
+ 3046973A58DE4A3EAF928A3ABBD76A4971234D76A01D043669FEEFCB02BE74FF
+ 4F3E6920962A4E47BABEEBCCA3DD37D993E13E45F586BFE58A100A8DFEEC3DD7
+ 452D3C4F2E3EFD0BD624173E25FA570C9265A74E06520052114181628A26716C
+ 6871AAB999F6AB022519FB2B6F25B324985DE99912B3BD5E2F25C23DE5487ED4
+ 6686F03242769B3057B0EBFB1B27E54474FB80D70ECFA871B237474BEA9A5B20
+ 1DFDC09ED4486C2C4290015F07493E2E1D9F6CABD9B6FED614C22134D2CD1226
+ 4AF2910E3B0FDBD15FBEDEA02F131372D16CF32CD9B737880D56C385552E0AD8
+ BF39B7A308F3C28AD060152E22D46CF03F63E46ECFF75F26B4696C7B2723EF8F
+ 4894D6C9B9FB3B9B8B6DFB265B0555DDC5458E4C9DA2638FEB249AD30BDF9FFE
+ 7DA0F641635D230840ACFC434BC7BB284F848DFBB7CEBAE149B0BB6518F2954D
+ 3ECB18299D01CC8475BA44B0B4897E3C0045FDBCEE24757F533F4B054B09DE50
+ DF49D3539E21C5B3A763B93306A61B2470F58B0A8595409581E360849977924C
+ 02E489DBA82049927C53E30AE88522D4DE501AC563F463B494AA80338FC66F07
+ 95DAD1F3F6CA5A5E313EB49A3C0A7417C301F29EE6DCC57584BB7497B505A809
+ C684D99BFFF712F0062845782ED82E83087D34E8AFEFAE4D8BCE73315B53B026
+ 5907B04412B3013C0FB249E9E84D1BAC45DD78A9E35B36359DCD3A581A0FA522
+ 0979CE88AD572AFA0AACC04BA397443808933159F106FD2735F05AADCC10CC71
+ 5D893E855D096BA4DB36642EC06CFFE737F409B7F78D5F66083E94C24C2352E7
+ 60FB0C243ED450CBDF6D09E07D6F8D5CC41D600DF9606E2CF986744D1C089F41
+ 9E3A48A7071819891C61A0637EC9CDCAB34039A1BEBF77CFF29A9BB75172B0D9
+ 83617BE9B9CB7C0D86B8DC1AC4D8718B19DE1E389CB79B48A9BBA8D28539D55B
+ 9C652B568056EE8EB7437584A3321CE7631B473D87578150F82E2510DFBB9F5B
+ 39C1AAF0F921DD4704208303977545559985
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR9
+ %!PS-AdobeFont-1.1: CMR9 1.0
+ %%CreationDate: 1991 Aug 20 16:39:59
+ % 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 (CMR9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR9 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 2 /Theta put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 43 /plus put
+ dup 49 /one put
+ dup 50 /two put
+ dup 61 /equal put
+ readonly def
+ /FontBBox{-39 -250 1036 750}readonly def
+ /UniqueID 5000792 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+ 87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+ D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
+ 92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835
+ 3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203
+ 046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E
+ C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A
+ A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2
+ A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D
+ 731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B
+ 09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1
+ 49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B
+ 5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B
+ 54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C
+ C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F
+ 11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AD14F1CBE935942AEC
+ D4004E6BEF379066FD72209DC88D2E634E79BCC2B98C766CBD92C561F2703F8A
+ 109E6C6CEC7B866F2FC7ADF646BF492E520319F3B949AB5D84AE990B33344A40
+ 3971F58DFDF8D8D67FA0B8F2A0D884F8C09A5A721319B911DBA0A35903877343
+ C37BC36C5EB32353272D1E6ED5FCA611BE319A7E1E842CB7576E7604ED0409F1
+ ADA7F448D7DD3FA92138714F33B9A4ED35CF7FC148AFBDC3C6D0528410DB380C
+ 7E654A3C7CB05CC57E1D8EC9E588CE907C041F62F59ED68B5573E8041F84C5CE
+ 8A2B98E45762C35470581B2F9BF441389A6D4C7B8C8E267FB94107FF50D5D2FF
+ 64CAA70DEBF9A8A8CCF6F2B0A0F3A6000918190B91159F932086FA79C07CF44C
+ 4F0EBC4A37A620F439A73824B2218DB3632D500F2F31EE4F45E865E4D4A6F423
+ A1CF2057AE882B04EC07896717C27221EC27A8AC5516BDDA9372C67B4C3021A6
+ 62C5151BF5EAF28C948B0149B23862DF4106546C84BFF81AB34EB382712F5648
+ 0CA218CB7580E04DE8FC4F51B2F8E8F532F8A38D19A974806A5F7A2003B5AF56
+ A7E7D3B55000CC40C5C14B33C0F1691FC0D822D842ADB1E59E4405AE89092EB5
+ A936E48DCED8A4C5090B6F81E9FCA5A107A1FBAE8FF89165B1483F96D7B54925
+ A45D609F4A43BD37E55072F608A98D9181B82AD2D946F1845A70E7BA0F2D3A69
+ 55350386785A8198FB1377A6E16047B69EDDDAF32C9F30F48E7EFFC081EC5F77
+ 2A571AB0B72547DC4EE10A08E6BE352B57E77AB45E4B9F8E758FD28B82D535C9
+ 0914AD14A771ADAA44FDD9EEC93355FA2F236D8130D6415F03BA593F4F3CBE65
+ 7E9C2A93E1E74FE7F787FAAB63257E19D13B3005C3506B86623A8F91CEC08544
+ 34ED1BAAF873DA49089232DA3D1E3B77EB4B22E2EA0C99C9AEC3E9AEE85B0624
+ E75E32A01387A41910C70EAB2AC6ACCEA2D6CA43ACDD4844C4F4B039C96DDBD2
+ 9460A5F1415D6C93AC6FA89E7ED4FDE1CD1172CF2E285FD9FEE437C9AB521967
+ 8CF59CDD7916EA1E437CFBEB657590BA5400D1C16DADDB50E3369E3860F9DA40
+ 116EFE98AAC461DA3B4352FFB997E7E277DFC4082DFF67CB3AC622138B19C452
+ 55DE912FFE4347AACEBB93230E74305A297A337C28DE41A4971183408F481F29
+ 2CAE2F8B18AECBA4A58A145B95ACCC6BEB4E2A932679C7325212B7BF3D8878E7
+ 89EBACB746A1CAFA0BC946F0AB8519A66A2EC528BC59F663338AC9DB9EA2C608
+ 456F1D06FC99D5BC443E3CBD2BE6ACB55B1660646B159EA453D8BCAD3033BCEF
+ 11752E2937F8BDF42973C1F5BD2C0C2DC25DCD09E74BA8BDD0D637987D4ACB17
+ 119B04C4455C83ACE7804A4372930051138F831E6C2BACD83FFC60D6DA1190A5
+ CC380114B4BF63A2DA603A7BDBC4C7B60E0A2C7FB50DADAC17BC5D8EE89F4194
+ B63312C221ED36C6C6A4C6264CD4F9A5BBF69D92295B45F5CE74113FBE0C9356
+ A82334CE969B1C6673BF2E45DE0A4D7B6694A06D414BDF046A77AF540B5526A8
+ C0580E449366F5ACC809B0ECEA3C65415720C2E738B0CFB5925B6722ECD42804
+ A8406978DDE223647BC35D8623A6C999705D71981384D47FB26626338B6862B5
+ BDACC9837758E872815DE3F569737B1372E4126866360A40E1966A284721A094
+ 69EBFF8AB8C382D3BB19B581746168B54D843BB3E3C8D83610193DF757DA1832
+ 0C
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMMI9
+ %!PS-AdobeFont-1.1: CMMI9 1.100
+ %%CreationDate: 1996 Jul 23 07:53: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 (CMMI9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMMI9 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 /alpha put
+ dup 28 /tau put
+ dup 59 /comma put
+ dup 62 /greater 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 97 /a put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 107 /k put
+ dup 108 /l 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
+ readonly def
+ /FontBBox{-29 -250 1075 750}readonly def
+ /UniqueID 5087384 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+ 9E394A533A081C36D6F5CA5FED4F9AC9ADE41E04F9FC52E758C9F45A92BED935
+ 86F9CFDB57732045913A6422AD4206418610C81D882EE493DE9523CC1BFE1505
+ DD1390B19BC1947A01B93BC668BE9B2A0E69A968554239B88C00AF9FBDF09CCD
+ 67D3B2094C11A04762FE8CC1E91D020A28B3C122D24BEAACF82313F4604F2FEF
+ 6E176D730A879BE45DD0D4996EF0247AEB1CA0AB08FF374D99F06D47B36F9554
+ FAD9A2D3CE451B7791C3709D8A1DDDEFBD840C1B42AB824D5A0DFF0E0F15B0B7
+ 22AEEB877FF489581DA6FA8DA64944555101EB16F7AB0B717E148B7B98D8DBFD
+ 730C52937E226545CF8DC3E07C5BA30739BAFCD0F2B44275A6D503F582C0FB4F
+ 449963D0AD2FAFDE33BA3D77BCA9D1DF878DDAFCA2E22CC4BACD542B282164C7
+ 97C2BDE318AF9D501CA21F6E662E7AAB75A5F24D2C182E598D175D44E88AB19A
+ E7CD59584F95B389183EE21B525BF52A3F23C0FE5383A5565A19361D716F508C
+ AAB78411CA5A4D27552CC1C435760D5A89D535B71C593E755C616661363308DA
+ A683F54ED0C23FB2C225A008392B0B719F66F11A946A090B7C00B662A3C69599
+ B4ECB0CC70C85C4BBBF207E0026F6C7A19F2ACFB7A60804FC98A4BFFD7BFFF2B
+ 952B42CE273B1118F73E1809D2911924A418CC45E20D9A9C026201263F4A1527
+ 48E376774D7C218132B4D3680590AB2AA2C2EA741D7E96C49F4BA3E705E2D68A
+ D288EC56011CD158D02216881B7E45314D94E45D7ECA73776BA42DACC41248A4
+ D19B97FA93D40079BACFE26853F0DF9F75201C59C77FAD42905A1B39ABECBAB2
+ C0925759BF0900E0E011E8ADFAD5859FC718F307C85933D6F9FA42D823683703
+ 8BF34F6666AE5C90B42A4BC5F2F4B170B4DD23DF5C5B2A5D955D48570DA58601
+ 91048AD249803432FFB71F40252FCF5F4C229C3EE9A2F877C590E2DE7B4C1991
+ C6834B363B491FFD0B7CCE29BB249C6DC3185E7CF461694EB33E634B65F0560B
+ E0FBBADF000DFA76624E8ABA93FD28D7AB5F4EAA1F89CF9AB637E8C1A08431E5
+ BCCEBAA8F32CD3912E4E64C880CD0845CAF00A6637C6F23E93AEE6B3261CCD54
+ 38AFF16E312EBAD3966CA527A950AEFF379D285F233A1C322441C50598546CF4
+ 6B1B23544D87B706C18910888E6A738F1AC095A03AA0FEB2EFDC1DB5D901BEEA
+ D9B3C51042157AAD1C4A6993DE16C6083A4C7E4ECDACAFA7B34606E2D16DC370
+ B814B5AEADEE208F26B5D560400FEB281262CE813F432A7718B899C8DE904677
+ 1192E769658B9031AFC8A99259F7E211C2FBAA00653A6756E16C4A82199136C2
+ 1F37E717E57519158A2331AD06F2DA4C039D37978C7D4FF6C12B29AADCDF8A79
+ 3BECEBEEA6785F9B24CC5556CCAFB08A4E11C1FD313DE70273C999FB2E86E83D
+ 2CF5D6B151B423E726F9A96C17AFF546B26DC6FE1E7DB5E3AF3FA48CCE4CDF5B
+ 0B3EEDCAF93A41A0DF40B091C0831EF8EEDDF612C487D5B060432696FD4FD42E
+ CE83EED93A981A36C6AF9ABAD7824AEBB6B468DCCFD33C707AAA3E1A8092C8E7
+ 34472E4021D61A72FFF630F46D3448BD524D3D63AAE2385ABD8D1C2BB6400971
+ 8E24379D68E0E97064FDC9B7A54912E607FB97BC0AE2605E3098D5CA8A7DFA9A
+ C1CBF8C0C23BE3852D213978623B0261DB98042A34A3D5A1A80F1E7771D15A8E
+ 8E4229A89A739CE429F8CCA8AB6D5EEC43047BD0599763F01CA630A85494D20F
+ 841D2D7D0E5B8E737500CCC9FFF95D28B0AF310C47866BC0C366824C8C412A2F
+ 2D7DE8568353782969A26621330A46CB363D2E246D26F1AF921A83BD97163F04
+ 37859A65AA054A56C908DCA0D24EC7111581C93FE6F3D8A6481CD2E2CC04E8AA
+ 2D97CBC8F8CC60CB81710056AFB62054B274AFB7234D780750FC196C4F7F7D75
+ E9813AB1FCA539575CF8BA1DA71411EDE17A86917B1481DAEEF7A94014031C96
+ 855EDB37E911F173452E375EA4D101A35E8D0A7FA8FFFB14633E53F5FEF9EF1A
+ A23187B1BE5ED1FC25A67009E685C1C5984AE22F4F782E2D37C4DF2852CC07BB
+ DF6E990532A3C527E534628539C03F3F7B27C7D7BABDD9AF0ED23F2C35238B4D
+ 155537E75A4A6C5FAB96B5A7BD1F7EBF989BDDB11430A562CC1E198ED7E549D4
+ A8F7FCFBAD63E992B663FA21BC54322548BFDF3B284F9AA1220CD07B7739F369
+ 0BF31D27B2F490C920C72FFB843F299177509CB13AEFF9C68524040EA8675F9B
+ 5EBD4EFA2ED0DC2A0150DF1C78A93E4A789ECAD76AD637E58546CAB605F37BC5
+ 3AB35047DC7B317BB5CE7BB3122D408C19ACCC1225FD14C41455E991C525C251
+ 498E4806CB67ABAF19AF80571225B5CCF10D232AE4FBF0114C8A5B6922075375
+ D2CDEBB9E8076F5CC1437B6EBEAF0DBEA480458C73B71AC60E881491677E2EBB
+ FF3ACD66F1C2DBB6CB0AE8932D8A75A38F11D034E8083B6C01945FD054A35419
+ BD3B3035438F3E7B8F3DF335C8B2411F1456461D991269532E05526F588B86C2
+ 7303D97DC311994564B190F9A03BB08F69DF2B62764590FCE0B8A29B67B8377A
+ 2BBFA26AFAFDD531FBC0B845C915EDFFC05B23D6878747F9EF7A02D6DD941A2A
+ C81F041ECD3E73E6F67D6723057E5F8529CF4D99FC69600C6CC9ABD852963701
+ 3164890E13531D4FE06D2C747A290F37DB16CFF3FFD65A1221D580D833834CD4
+ EAB9935F76A283F493A149084272C9F19825D8C163EC1AA73E8A1EA040FE227F
+ D0DF9F13EF254360C622405514FDCF56A966A65DBF6E23D3EFB6898AD9C3F3C5
+ 427F099D79B1C5D9BB6D679C7939B6A2D6F87C5D7879069AA816F8A6FB2A7E40
+ 7A8D337DA970548E3CD6B855908A90276A7D9FF3AA65A0CA4853A4075E7AA6F7
+ 1C6F95423A3B069C6D0D9F589667E61B49CC4DD759854C2C97B50327C5AE2F59
+ 6B33BAAB6874342386A56B9108221283614DE265394806217B5A5E2C3847518D
+ 55A86543A7B3BC5BDF7BF7A497995E8557ADF03DDB06D427D1374AFF1EC111E3
+ 4B8188EE1DBD9F401F90F386302EB50663EBC8B82E744AD2A7FB38AAE4BAF26F
+ 44C3BDB57E54A7A263EB094532A346AA15B46973C75F17AA9D14C73C5C43EC6D
+ 0371ED16F19446A340EED29BF800BA53F896C29A94197CA2FA2C4B00E24DE443
+ DA974B9B76C9DF1D5AA08ABF255000B4C1B1678C299BC137B632BC2288E2CA46
+ 1E1A50D525851FA32ACC6C126CE075BDB634A04D0860014EF1D862EF7503EDE6
+ 6E0035F30187D566A83D267E98A2E25BDD75EADE2C7E3E67AC3129135363A30C
+ 20F6B2671BB61E8617BA819A2C0567E280F44CDBE5668D6FC727D820176FDBD8
+ DCE8CAC6F5E2AD0D70750A4CBCD236B0AEB2E58DC25894B44D0F2215A0644DF3
+ B91CB3249D2FED051162A782BE12A08610C6F37B0B324B1AA80ADF084B66AC6B
+ A95D2ED57F5AC63DEB432FBC4CCE182D1AC66EE7D2D0B8512992CFE0ADF28F33
+ DFD23CC0A3F234C8D6D7DDD808C68380F3D645C303A972F11D4A23D2CCECE839
+ AD680FDB38E8FBF32D6BFF68604E9738DD318E94211EE8B8FC24F3F1F81F7058
+ 2E373EB7DE8202AC181CF2CDEA101721B58A5179E56C3CFC0C6FB9F31D317A27
+ EE2D2B9AB4E360EFAAF2942E7FB07C2FCA89247B02C57326D77E040E98AB7296
+ 6B15205AD362DCC03ED35EC5329FBA68557C4114AB6BD9FAF9AA80D34B770E83
+ F92B74CBA9018318C22DC92524A2D9F4FB7F8321CCE0030726BE7A3BDF0A8885
+ 5A755330B7BDA5657E5F6FBE480719B5C69B3625C95AD6710E5323C84BC3C055
+ 1ACFC5D0B6D856839A7DF1369ADD01AE6547C98E9808AB1329F232FDFC4DC57F
+ A62EB9045FBE65524899C48DC6B941A2B05FF20C170041AF5B22FD2C70432368
+ 0AE086D569FDC5EFD9BC8DBF97214DA04BA972AE4FFC60491FF167D7E98C675E
+ 5B7A4302BCBEA0AE4C0487D131AF903A4A551F35AE619722C54F986962D9C657
+ 4377C28C6BF3791D2F5D5199C5AF973F120FFDACBC58E28D32802CADEDB4F666
+ 22B8718F66BBC68C0959594F6F5221692F12F1D297E2B12F54A7A92151326C05
+ 4DDA6C6EB8B809FE56BB58CB701B9F60ECFA8220B6CDF541F3A60FC661F9694D
+ 1C2937D2D042F0C4827D882D6A92CEE4B3B4DE6554AE0A033580AC86DDBF8389
+ A810E6B6E10303A366CC803C918141AF8C2A10616B5E03A6CE4B6D69CF9DC0B7
+ 1A3EA9E990489C394DA153B1AC01EE5F63A175249E7D800E0C30138446491A72
+ E6C94D6C2EA4845A64F9850060A28ADC6A4B9592FB8E4E7A5EEE0223ACA57AD3
+ A19875DE85C7E7F9EC528C7F8A0702512FA5E8C824DB32ACE1DDEC8EFC19B4C3
+ FEB7FC09AF427F29F08A755F52D78CD6D403ADE58F12CD12BFA33C269A830885
+ 9162114CDFF7EBF94BB5EF485512B28FE865F725633616BC6D65D031C6D14788
+ 92885ADCD0676750A41CD2C2A990036FD8AAFB4F0E8E2AB0A5CC313C63977D18
+ 8B5C0D88AFE30A3AFAB5E07AE934298DD7785E18BEE4D37B6A300D63F872E901
+ 9DC77891E15D5425CB3FCE398688A92C69B28BAACEA0BD088E3635030C2A4FC5
+ 9E1E6C0EA8DA9075D30D6B0A38D0BD27F8190F1C791C70EA8A74D61075662AD9
+ 84B4A8B2DF467699E71374737903DE088F1C01D7094D63258C327A74E663D4AA
+ E8A87132DBB1D3DB5E13B1ECF84AFA67AFA7B04D7AF8B1A2911C5F2DC49900FF
+ 6DBF91BE4B3D3B083A0B88C8472B6A585D2CA9A19A2F46F74E1C477FABE02396
+ A8741D306178372E83BFCFF514FFBC4E5A46367EF470B1243C07E6B15C67023C
+ 7AA87D5DB1070EACCF8BCAD92936B8E8EDB72707F2E7866FE1F73DED29BF993C
+ B17D48DDD2BB1070CF0B22EC4C2FBB158857ED2DAFBC3C5D4E831316C9057A6C
+ 9D83BE6A480E4ABEE0483B35B38DA1CCA76AEE81FA7F467DBF3C29FE5292B105
+ AFC70782088FD64932DE2A1836905FC92C76D0962F5696161A78E085205643D8
+ 827CE5D584B2366D7C44DEF8CB3393CD9E0849FEC51846D652976543D2003682
+ 9DFEF077505D6E145EBED26A08B810F8E5A208FE3458B7D4D4F33456CEF0B147
+ 384BB391E9F93E59095AB19F4E1BA6F4F3CCC1D97B130B6C64494384D3315696
+ 00E54A4C13B5E59F963CCA644C12499092F3894CAC262E23B09556E9DC897AA3
+ 8CE412087A90D07BA51D74FEE564F6190434E44F128714E1F17E4BC6E3B017D2
+ C40CD646AC2192E8FE37B257598A387563F89AD47B2D83857C3E0C6125D3A694
+ D78FCC92697E2C95C36F21E3F848653BC23D01F1BD6589B20A736B957D1E0606
+ E3202F33E07B0B4D549664D45C53ACD8E169CB11AC14EEE530A33A1355ED369C
+ 927A51338D94C851C0813A30121B071C342A33800186D5ED42CB2F93CEC6A2EF
+ 01A589F0AAF0FD8B9BD8A810BDB1135D14AB7CF64F906BFF0B05148486320689
+ D9338FD7AE159991D8ABD15174C6C28ED85D287AA22E03138C6F6284551E678F
+ F8019483E4DAF7FA69A88D70CE2CF8C513F017E30A7F8973845368974ECD181D
+ 36778FC08FA046F95736434BD5B1A645B5AA418FC5B6179D6FEAA4BE1083AB80
+ A8ADDB974256DDC04D4324EED7DE2587395A05BE0BE8A38ACF6C548BB96C70F5
+ F777E277B45DAA653146C504098C2DED1068BE8DF4CF379D2947673D9584CF27
+ 5DEB501EE07F3167BD18BF654A07941E356743974FCFDC0D81C77F8424AE9354
+ 883B3B045AFFAF33440F71AB70C2307CE6A8F833FE5926EE6AFCECD140C5AD6D
+ FE2D0D5707624881ADD83B7A8E2BFB8139E9CC96D06A7F1E5B910E1E73ED2BAD
+ EB3EE15D134FEDE2451ADBDEA5E0B95AD4A106D2191FC39935FCA5E49B349713
+ E25004F6499A8AF77D09286E78E1FA3EB5E09AFE633FF1BBE4C26C426DF73841
+ A81C838C545925DCA211E2A99DECC84CCF1DBC63935EA70195031A04E26C4812
+ 44D165C36ED8B61C5A0C35FF8727B5296649537B39A87EC27CF2F3BA0F99C291
+ EC2CBD1138605478086AC997A543844CCAE8B4104CB823FF058BFE6DB0E6D694
+ 045E2D397191BBD8B2E8D27A2BCBC67D21B5F599C2863C5E140AD1BBFFF0842F
+ ED18205559FD7213ADD60BF3E7EAB2805C7FA51CA71200F29A99A913251E096E
+ 31139FE0D811FA65B5724145365932BD09C3E85BFB59FDCF14454EAF4AD59AF7
+ 899452CE53D0E57A709DBE0A04E9AC6BEB1580131059E7D6648DB3DDF8061F40
+ 2EE011EEFDE29DACDA625269A43B3442CADE145D78A26EBC4A08103E92117056
+ 77EC99BF3572AE3D8CE2DBAC4A9E28D92BC9A56D101DFC3E43DAB727F6209230
+ 9BE6A4D13A4CC992DFA49561BE8EEFFBE01C08A999AEDF05DFBA6321D8E376D9
+ 41BB925C46B08C2A6B2FBDDD532B9BD0D1A357CBF767E88937994C9BCB8C36E1
+ E6E90E665A5AD3C18D5BB4BD2756D261D07D87B7F6216DDEB439553716E6248D
+ 1E84BC75735B4C3B4925477E1A8F3FF8D0080637357C27CA855050B0FC223F4A
+ BFCAA2E36C152A0AAD3E2945086A31DB0992F1671611D4A72F748AF4D24EE14F
+ FCABF9C15C087C91CE55F05BDDAC125574DD7CD5161B23918E8ACB06D51F3B41
+ 67009D3D53F0D9D698C121323E5E9A8C13768AC6EE688934971A4A87069001A9
+ 25C8FF0E1573BB6DEF5A9017E05473D93399FC0B0CD79419479B481D8AB4D7AE
+ F2D89BF711C361866517223F6F6722409A03F4AD87B9A85B6E3E64FA3FA42433
+ D40565FE7FD88E4501A7EA6381736AFFEC2C8D82A58B90DCAB9BDB9E3DF1737F
+ C4788DB25DB67D936EA40B644C04B8B90EA81B64775B8A55691723DBDF511C01
+ 53F195B0A842C35865A9358D31C333854C71DA67FCD4C19950C3F7FFE43F2A83
+ A4009E80D8BADB5FC3C18644CB9E85D93621E7BE9F4DF11CF93FF411828F3B60
+ 1AF9069B36E45A222F87EFF253A5AEB4D8FEEA84C6B64366D5DB49FD6817EF17
+ 2F981792AE9BEB1BDA795FC34A07BD5C8E931E8F9413CC6CF2139AB054AFF880
+ 53D8333BBB506C36D5A08246180AD6954D02DCA43C473151C2C99C28AE288E9F
+ 523BCA347B670126ACBD0266471900BA614C94A43E38B5E7E0383EFCB18D4A35
+ C90F8339327CA443137C42AD5AB07F311040A5ED89CFA3AB31AED0C8BDD0C652
+ 4FAFBA11C71825FAA9CD09CDA9BDE875FDCE5367FACF2C06F935396F85DDBED4
+ 08DA543C49307A3C56F9C24B267B7909060E6F5546B074775920033003B91136
+ A41A368796C13E9366CA8F07C1F4E771D64F354CC544C1C04A9C58B796C5356D
+ 288A4F01778525F83CB621A5AF1BE01C4D35AE10B040D16A070351DD6B3FEC19
+ 04FAF05FB04AAC159896ECF553FE8474F9D4E2A123D5E74B08F1245298383B37
+ 955625E0E7F9E7DBBA6A57007F19B64DD79B895F576F91BFF3A1246ABE49DBC8
+ B23AAB0C05BE1F4BDD2A3D153B013243F41722EF9BBC7CFAE08E702E702C9245
+ 92D6BCEEF0232D340CF781B899A33FB4DA453AE957D70ED2CD6AACB2E63A7247
+ A7D0FCB66541B15EB0E97DBCEFEACFE3A6448FAB943FCC55DB2BF8B1AFC1C401
+ B84324B7668541789887DBEE623DA2EE77DBA673606B7D18E163C26FB478B850
+ DD2A08A31F5D606DDBE0BF0872E0D528837BD2713B1AE03717BC7DA38B62B9B6
+ F5BE5C68E80AD97B1688CF7BED8D7AAD1D77E0CDEE373FC68928BFBF1F27BE53
+ 251E7393C008EDD2ECAD77496E5F20026ADA066E768B19E68241E4E9204A85FC
+ E91B173F518BA79A35CB171FAB84BEAE87FEFC5835317747D358F78DB40A930E
+ E9265CAB86BD64AD8AD1236A6E17EF24C719693C5CD1339B869A96F40E2B74A4
+ 0B48A3516517A5CD2824A487C204C022A1C8B6B87191F8536C81AD53EF8825EE
+ C7525747B44324ED34B04DFB3200FFBAB362E840071FAF75AE80701988DEAB83
+ 4FD3E92A14276DE07396073E46EEE9CAD508F0E6859D7BDC85548D6D4B4A2CE8
+ B4F93C15AE032FBC3F1D6D5C8E35F2E0A5309EE8D59F0589C52A9B0B6063B3FF
+ D74181A30B0DC1825D3B7E1936569CD527A1CF82DDA8967E03BAF429A35F2D00
+ 5C63FC9CE0D6AF73A9C72B0A2B95F162E275BB24BEE9B17F3A3C38160517EAF2
+ 5B2A28018CA15A1B19A97AC588C830C7DE7BBC04EED1B602A37E0072721A8174
+ 6AF0D0148914E8AA6838072E9BFEB5E2C34EF14E1AA53C8CECFA5ADC85DE3FA6
+ F723DACF67E7B0B361AF1AB919BB9E42119FEC42F54A40FE6404A6E48A1AF801
+ 19A6109B46D2E1F8C69F7714A254FBF3EA3F34AEF4AE930CE55579A5BA375D2F
+ F034664E3FE6E0C1E01272AA784CEB95C9F22C5B9B63B73497F2EBDCFD7A44F9
+ 4B6F4FF13C6C5CCF756E9B23E3AF3E56F0DB432E3B227A44EC16B34888DDFF6F
+ 7439459938805F8A59DAB7B3142AFD0BC4AEB91CADE2CE61649D926FD1AA7429
+ 9015D18DF103A4AB57C07574F86145F216974A34C92968A443388FA035D0A919
+ D75C3D507FCFD03534B12CB667109A11F06B01DED6D7F600E9031A120968D50C
+ 2796DEE80D22E79F586AFA8813570D1BA6EBCFD5EF396AC0DE09443A252E049B
+ 6522BFEED3FE2D6483A0CFE180BC1C6C381E4DC2B38C0C12C6BB7FD1FA1015FB
+ 81C8446ED64E27E2D162A4567DF98978B1812E511893870DFC139BBF563F9132
+ 25DA6B613B299FEBC34957A5FFC52CC376F14DD799C48A73FB10F60EFF99F284
+ B2738D0D6C4327C4663CB82A871D6F8B705B60FBE67C2F6F7EDDB0EA1874086F
+ 3DF58C152ED42683EE42D626F8468FFF8E153EF1B56840295E52299F1273EC7E
+ 2C0AE9F6CD07BB883F0BCC58F0F5095CEE08A451A4F3ABC6DCFF17A6834FD16E
+ C0611DF41871D2B1709477583D4B30BACEC86BBD3F08C55ED8AE21AAD69D757B
+ 43E4DAE16273E8115391D32CC65BB5E7EFEBD1A01BC8334A8EFB6F69256DEFAB
+ 00A43549FAA54325C37E8FA55A7CFFE5EFB209957F0D947CE4289F13E3670250
+ 857C2415E6408573C55CD9EB25A377BCEC17E6E10036E970699AF4E637D7D7B2
+ 896FCC0161CC3BB0589D2FA6B1D74C4158EE1EEE8FF5C724C2C4E1873C63EE05
+ A55499DC15218FAC52C86991EB00806321AD44F36A466B153ABECBB8B14AC31F
+ 27F2AEF33B7EE6BA4826CD95C9F2DAB0138C8E394A5A959956C57AE7932AFD09
+ E2A80C0B8DCDA430FF1542A20121F605E96812DBE1DAC1B57C7EA99C7DB688BB
+ C95BDEC6C129F6264C88BE7436EFFF443976C07D32AC01BA3B7F4177B76AA254
+ F27EF6898A039C54B060EA402F4E976087DABA5A7E3CECE1B881504417769839
+ F11DB6E544A7DB45D543DD2815081BCF028D63C56D45DE397CEF54C9A791B9DA
+ 2B042A6C6A183D86AF177E815630D4DF47C3E0619F98AA28163423618CEF074C
+ 2354029785E251DC6739A926003D45C796985C2A06DB7E08863ADF300DFF43D3
+ 6295CB0712119C80727A1E899A5227B82E553A5E6E0C654DE1D25FA875133881
+ 29EA14C9D20020CCE2327DBF74DE1B1B645E74C187C52C5183706C9CEB2A32C9
+ 75943AEB19DF4E02680102D9BD7F8A4EFB65B368A078F0720D2550AC0087A382
+ E7F148F4B78B42E2B2139B3FF8CC4E88BFABD526618A126B94DA6A6B5A25A2F8
+ B5DA161CF14BB358E9155BE1DE5C6A8E8033E3B568EEEA00E4F147B04522C974
+ 877854E9207EE1932B7AB02429E8D2191613A7CE0B2C786803160EEFCE281701
+ 2B71544C2B9B714916F4B30C912E1B01083DA12B3F89CCF3D030265063918CF6
+ 8ACCD4922D35C54F90135A64F122705CDFF2B7363E1AEC96CFAEEF24E763B25A
+ A6297CDEDBD813D7A3ED998F86B17A0FF12495EE0E340D77F0
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMMI7
+ %!PS-AdobeFont-1.1: CMMI7 1.100
+ %%CreationDate: 1996 Jul 23 07:53:53
+ % 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 (CMMI7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMMI7 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 /period put
+ dup 59 /comma put
+ dup 62 /greater put
+ dup 67 /C put
+ dup 70 /F put
+ dup 71 /G put
+ dup 73 /I put
+ dup 77 /M put
+ dup 80 /P put
+ dup 97 /a put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 103 /g put
+ dup 105 /i put
+ dup 108 /l 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 122 /z put
+ readonly def
+ /FontBBox{0 -250 1171 750}readonly def
+ /UniqueID 5087382 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
+ C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B
+ B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868
+ DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811
+ 4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3
+ FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB
+ 76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5
+ 123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770
+ 012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6
+ A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413
+ 44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC
+ 4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050
+ 01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608
+ D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3
+ 914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05
+ 261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615
+ 24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2
+ A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663
+ 9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C
+ 889787CDC18161E592D4669CA7E1A6BEF748707FE416EAD5183976C7EB3006E1
+ 8BA8CE855AE1899A5EFA507E184C1565EE5BE977BBF29F8201F6097657FC3A7E
+ C338C77100C6F9829D7BB20E13AA3283938FFE14CC87C289FAEF1FC521491A08
+ 92A0C997ECD1388CC7DB0F13CA52E5460A738F2EAD7C81866B92EF8265E68324
+ 79F460511CA0B972983CC8D14ACE8D8F8AC5D7740D2428A80DAB2C207E3AE4BC
+ 9131186C72D017A77FE247CABFC5F38F931443CDFFF21CF6BE41794668A2F6F6
+ 8BB3F68F4427B001179598A19829B6EB791EA01C15B418347217F8545C43053C
+ 9F46A214BAE2C966E2FB804C55BB535EA5E3D9C40FE4CF1493C11CA277A49DA8
+ 698E2B56C2F69CC6302D0D46126AB5553EEACA969EEE1FB5A30878C902FB312F
+ E86E47F2D6640BCF678AE14F9DC698CC7A03D75CEA59C5AE42B7E4C2E1EE523F
+ DAC1DD9B17F8D07B3A2B8E7271D5ACA860A38A2A25AD69D1B26A16DB18444047
+ DD8F2CBECF9F96EA902DA9BBD23EBDD0106F8329F0315EDF1B98D13FC340EE91
+ ED35EA2108B5F5F39367303676912B5554620915F8EC88BEEE288CA3C2788D9B
+ 91CB8602F8FAE522873D97F28E3234F3701293385BF5CD7176D6DD081B286D51
+ 926570257A73982FECA01D69818A778925E568806D438DB1713DFA93EC968DE3
+ 8F71E95EC19476338FCD23448B6EA2E3A3BE5D414141FF69313EB35407DC82ED
+ 1AA620A8F50E5963BA9095CDF45F3812D723F9B1E9CB4687070C36E75AFCC38F
+ 8E635B02A2E4B2AA62034572A2E0946DCF71DCBA0A43E90D176E472C24228A89
+ CFCF7A2A0CA0F836F983FA85181D6FDA238E9807172902D91AEA4662D8A41F6E
+ 5A675E6706EE8886DBAB0B3F0045F90640F5F231C9F2389B07956637AA58B87C
+ 4F11C4E321ACF98DE595A63F7F8FB5095A78A820F41F019FC3407CB86809B5A6
+ D8CE22469BD6BF51071801141A5C0121C1CF086259E056774F3B7737F243B12D
+ D05717D91C88DB590A2D3DD2E59782CB677341411B3EAE52DEC78C33711D9913
+ 82790BAD61DF9F26AF72E7B4147211BAA591FF5467FB03448B7B3C6545620E9B
+ D03D1BCDB463530E60D2AD567EA41B2B8355193BC49D626126FB85D722E9FFD9
+ 726709015D9662061106D7CAAC641F37C9A739182E2089E07094C823E18E59FE
+ B95F908917E72858D272E015F728665B50E56E1C4480B6770123D26406CA5961
+ 928210434452D6B70B44E69A45E756A5D13737F55F7BAD70AD95C2ECFF71F410
+ 29D3A9C7182CFBD3FFC589FF5D83CA606F2E9B3E97FCB5A75A0D362B47886375
+ 546EDB92F3204F188925B2CB469A05C23D7B61A3A904E8F93C4CBF9B9B8867AD
+ 0729B5347BD54A159490732619DED578B99B7A9E123C19D875AF96FC1733C5FD
+ 37FFCA721C05F21C4F0499B359E94A9F94C8455208D41E544640D88714D20447
+ 0E34E33F8E217D41872E53724811D1D2D192B9F24629608A8AA70A78DEBE3498
+ 0BE71509E1C857A51CFF8562988499865CD396DF9E6D102C5E57DCFE79DBD4AE
+ 1647321511AA4213C779ABD55B27425DB778B56FABD69C5B29AE62758B0A875B
+ 3DB69EC9CBEF7B2D2B1CA1C54C97B088832220E79704BD229B4EE6B29046BBAB
+ AC7E45AC627D860AAD3DDAE2A9690C5325A401901498C3D4C07086F7CE1D35EA
+ 38CBF57C92FB86AD6B42AEA1CD3C6889925A028886C4F5A4515B67EC5BD3C0CE
+ 1B4C68CDF46BC5B34CA31F29B5F590FE557F95101745E2C40667575F86BB2A41
+ 90C4BFDBAB9147F2624E734A275DD833F6066BAC71443224649A32B2B3B25E24
+ CFEBCF08D7F1ABCB39C6E7FB813AB43ACCF3C07929F34B27899CA79CDDA856F1
+ 69D762858BE584FE437DE6EB30900D527291F6F7BAB8FF16E6106F79646CECA5
+ 32C32DA913572D9E27587930C5DB4CC8D3FC66D34FC1FC590CC421B5D0206590
+ AA2BB6ED9F94E58DAC1C84B91C2B6B58D21DF72F0EB3E98388DE9FAFEC75603D
+ A98B42E8D4CABE595512C102A96B6D92308D948F1755EC8C897520C2037130C4
+ 19097347C80A64900DFA97382807C26B20753B5E1BC8D7F2E78BA3AAB9D95862
+ F2AEAEA4F50B708DA2CE21ED62DC3B279BC80289663785A8E929047836D5E4EF
+ AB6D49617181F496E59353C372C2611B8A017F563224326024EEEFDD84E8BD4E
+ 8A78C24571FB435EC3F0BCD7AB29E718FCFEC9D9032A2C00D6A9F5B47EE135AC
+ DD832CE7A9FD31AAA1029C44B458BF534499AA7E311CAF218E977A52536A8129
+ AF9D5DA27711B6C7D5397E8F26872F3AAB5F20535A198423728002DA67E787C6
+ F3D66C697B36810B9E6FAC0D1BC3D8D9FDFBE2C190601FCDA9C2C2FC9A060848
+ 136D0FBA66A47B0C9313FF25EE91D9D8307E221875C14ECB71CE38D77925740A
+ 5865249594CEAC70B2345D1AA754D5E547D3FA4CC25374851F646A534B1301EE
+ 0C4EBC10EED1FF083BB2BC6B2B4D3BC8E453C663496D738884595C4F31A9C6C7
+ 538FFC3EE6B8E66A1EAF540F07385711DCA0B7D0D30C9A9A1427EF10B13B182C
+ BF20B09EDA27177AE54AA4E4D6A5B772BD900BD5EE95D6BACCF355A0CBA7EF8D
+ B9C8FA5214FF688069230CDCC7633DB0C26D5164FBF112CF4307939BD44D455F
+ C36D6772142CF825DE8ECCD3B4D728B84477B3E59462E132A203D5F18DBD593A
+ 329B6343DED4B3EDDB428978AE4226C192767312E0180DC6CAADD016F50641FF
+ D13AF9F592FABDB046507A1D3BC260BA7B1076EFF947ED60650E61FC5B71F949
+ 1C68DD5BFA3A153EF66A59266A238C567091D4F2F980F25905966B264828C050
+ EEE0D398A715728D05BA0FDDC6FAB2541160E32046477DBDC37D7BBDF1EEFD40
+ A741E4593E6CCD69BB5C32D71B6E465CCFE32F75FDD5C9A0CF244F1C652D26CC
+ 2EAF322E20D42F9FE0CDDD55C80D6309CF1DF3F3095481F9256770C37D2DD762
+ 56BBC038836B01422C75DEBEEB20538AFB782D5FDE478F9116A03BCE2BA8D3B6
+ 200D9046D9FE11514E565A56B44CD22A311C992A0FE87D9FE14935A0126E23F9
+ DBB986F3D1A0912AD491CE14EBA85016C78E0169924490AA481A44161821CE62
+ 52956CAA3B06E23A8127A7F33A0BB4A1FC294D8C1B4D9D7AD585C2F9AE3D6DDA
+ 9EEADB587205D761BB01FFE4A584880FD8DC6D782E268C81CB4DB173FD7FAAE8
+ AF838ABA020D752594B8E5AD68C401FBDE1F3E2967ECEB61CF585B687C9993FD
+ 4976570DB72F9F9644A6463199DDCCEB29B81B4F470CD042514DF0AA4855057A
+ B36673162133454DDA620F513F8F194A3F232E15CFF5785EC881325236CE432D
+ 6448EB99CD0CBCCE4C8086776731B69E43ED5CB7520DEAD7664E28D953BE3CDC
+ 022C07BC63302F348CC10A1BBB536314F4A2CA310909906119BCF3E26E51397D
+ 5AC63FAF1F4F144AEC634C8BD5C89A32A4D9005C24067AEE062F1D2303DA5A1B
+ 071B0A85FFD9CF6FBE6088F96B8A6623E34E0D1F3994DF42E5B346309A78A540
+ D971B0BCE621F7B6711AAB393F9D00204677BA6B83273D1F40EA1365EBE8034C
+ 78EFA24B99ED8F54CA08F6B2A258E23F6CD9C3325ACDA05FC5ADA366658D2AF9
+ AEB925A6461F043069FE8A909CFBB209E7E8265279A37EECD91267DB9F87EAE2
+ 63BFA36F411FEAAF923B42B476EED4F9B62159A55599432E8AF60CC016B7EA7E
+ F938787140A35A09C809331D6249EABA2D0E2A49775ADBFA779AEB43CAD7F665
+ 54553BE02F1D2B6362580C42164FDD6A18DBB65748EEFDB00DCE7A438325BE80
+ 00D8D1FC02EB0AE23244CC14A0587D2F64A4BB9B40BB9EF46D0B12430C1CE479
+ F25AA1B3CFDC85B71E323E4CFA0EE387DFA10A4EBDF0423D19C27B46117C06D9
+ 2784064F07765C5D0978F2CA7EDB11FD931163A5F8C0FE94AA64959702AA0517
+ BB696A814AB821033054FD326AB23CEE5553A4DAF23B32066E9B66E68F418AA2
+ B3C52CF859C2017E9FA60F77B4940B4B0D02E1DC178CC0A1852C8FB208AB762D
+ 62160065165ED1BA42E1B9381BCD412A76C2F55F236E5CA1A404541E7AC148D8
+ D3380596F8CFF500431E5E705D668D960DF65C047C1D90D4B14A70CB06288ADF
+ 9E766CDD62075201C772C5A9CE451A733C7640FCEA858E2F3865325BD94457F2
+ E273EE8FD005EB0B112CE425F0008C4C08B1871153AF9806590FD8B26DF4D9CD
+ A550292B6071D0073B7834F1BEC73B2FC1C2786259E7E9449B33DFC7FF367149
+ E4349C0A1813389E4A57B9CE7D1D29BEBEA3521B558171A771D9F92685BD48E1
+ A944D26168B306A962B57E629AC432FD25E02EC36190C5430619A4EC87491237
+ 546BFA720EC1C7EAD928BCE64EE442165E14826F674E7FA9439AE0355274A9B8
+ F0FF4F7FF9FD6C8F0DA4D8107A9B8BE54A85127E3B485BD247204D52476CCA89
+ 59C830EB6F2A7B723E90F8FFEB96228513624C79B51E6B830852C7F3F4C74A37
+ 0E6FDE1DC56F9AA91497E3F2FBF87E47CC434C53A2230F85F94C07C6D0A801BE
+ 7524D0E5DD5EFA894041D298C03E528466246D04384ED871D98ABD5CE004C44A
+ 473D758F2C03D2355577AC7015996A96F2B6E5C680FDC97225E9B7C28379F66D
+ 7ECBDB1CD91769B46956CD2AEEDE5F489915196948459001B4F30351C4D17ADB
+ 986974EBA05650DF3F61D2ECA23FDF0455227F4C379AA0488D7AD9CBE6B753F2
+ BC0E9F69D1A6573A947B4E107CAE9E8F993F0DB44B70F3BB4FD8F6116BF96D55
+ 7E18E4B56FF041FC1876DEFFBBAF06A62CCB5C2A4478F37D1BA4B19E104392A6
+ 9AF7F492FAA255146977966BFED8A450FA2C35E880D3C44E5FE017D974F6EF62
+ 08F3B75478472E89BAD5B631BDBF6D424AC54331F9735BE3AC52A80B7BCBD8EB
+ 97ECA5FDE0ACA40AD9DE1C4CFE94ECB392152B6E0EBFD3E2692ADA5F77C3E37F
+ BB486B971B7B379AE1BE0CCFF9D67AE4AB017F31BFCC3C723CFD9EFE5242818F
+ ABA27C95AB32BE81D74410FD95FCA5141B91FEB6C1425C8ACC7F343A3A98C802
+ EFD01E88D20CA14945C05021FDE26FA01DED3C9EB977A8DF3F5D4245B52F3F5D
+ EBD8D55FCCE7298138D41447F203B003B52FAAB973D69C31DB9C28F4C5A19F62
+ EA279FAF0D541938A925A8682BCB20E849BDECCD298E8F9685FC45C0A9E6ACAD
+ 801A4000A3917B6F78A2014B6CCC8FA9F6E63DDD37DA696470DF865522370E1C
+ 05FA9F11E142B58CD8BA29E6F10AC42D5627ACAAA4538B96C8D4BA56FE0DDA21
+ 8447F1C98E664B66507DEEA71B79A489691F893A1BF8B02C084C3ABE047D8B48
+ E59BE45EC48030D2F48FEC378580F0DEF1F7740535FADCCA406C644B851007A4
+ 36A78B5D8F4BDB1327D0D8FF3237D7E361C609EA5744EC1DD712D2A7FDBC93F8
+ 2047B85449739B18118953B1C88DB5F4FF14DAC2942B0A976DC5C1A1838090C1
+ 51CFB37843036AC7B261267D5880DEF95865D2964DFBE74ABCC0524EE4EF97E3
+ 2D2FBFE0EC74168EDCA0A792E0B8D4A03A21027933D826B89BEA2B70094921AE
+ 522E8F7262C0AE3751E66EA40EDD32D15800B013B62A2A5088189E2443F8C240
+ 220D72913AFF9E22946C020C9224AA64839A5F9765FBEAF262B140CCE05390A1
+ 60C94600484AB57D44B08986503E5F16A4F9A21C52DDBB44A2B6B5132779BC64
+ 62F17FFD1DA37D4A42F4B02D9E630EC2422B0B3DFCC89F8070FA58128ACCA6F9
+ 82A706128A48520DBFF8699E2EE686894F64321C060B598DD8D279F981B0931E
+ 3B4D9AE5469D1F44159C03BA2C1E853F7FBA85072E9CC82C07C1778E6C8EB3BF
+ 36CA6F6043E8DF4A5FC62A94B980C51A9DCAD00574AEC7794BC5A2C1CEE4B42E
+ 416E512F772DD5ACA373D119515102E1670E0DC18966577F780B7C1E588D2445
+ E151ACB893A407A9FEDCFE07EA15D566895E6702D07C7FED5C786C1D7A6E5076
+ 6634D5BF97D2A1446B098485788F048321728D11CF66B6557E42636BCD3DE6C4
+ 50BBFBA7C263454EEE77663446846CC7E00D2EA406E3FDA831141EB18FA6FE94
+ B6A1E923D1EE7D9873A74B082C631F33EBB9693C7E8CA8E67962453BC5ADEA94
+ 31AD61033F119F3EB2C5B726FD6B482E6D2073833EDE05B13451392107C42F7E
+ F2431DBD504DA7FA66AE11B419C64FD2CCF8E53DA2D4152751D7D41EB44FA5F9
+ A8D314824D250928A8AC27306BC57DD2225A773D953EF279D74338FB27E23778
+ EF3E242DDECDA85E0951366602202D7B18DF40130A8971F57A8CDD142F7B92AC
+ 5E3D9A27DF31B3145169DDBF2CA67C748098CE97DE653453C4955543D226F61E
+ 133F3D8EBBCD647654179543166614181D8EAFE516A11C0DEA768A1AB0A70D55
+ 21CF78F7A4E2E2DA39B58E84129292F077FEFCF134E73D2378D9277219B5BCAB
+ 8C8D830B81AF5722D85B587AA935A251A350D62FA3DAC07A5E9FA1E781E03DB9
+ 23AB0A44BD2CCE331032478064F01451623D8D6A8BF23C4DFC31E087038E0ABD
+ BBF973CBC5AE2E4D283144A821CB25C3EF84C33920172CF9AC5391AC4EFD9358
+ E6699A6A1F0ECF1783C3E352D1AF537C2BFC3779957B7526B2F1A952C6565915
+ 12A3EAF7F6FF333AE4459C55869420D7185AD41C1F24CBB056D87B1C315EF0AD
+ 9CD979A9D6E005D9963FE3F00AECE37D7D6DB39A1705F8E2164B103998610A61
+ AAA137441F01F848BCE6EF4C18797FE85C36012616C9265158621D5F
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMSY8
+ %!PS-AdobeFont-1.1: CMSY8 1.0
+ %%CreationDate: 1991 Aug 15 07:22:10
+ % 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 (CMSY8) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.035 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMSY8 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
+ readonly def
+ /FontBBox{-30 -955 1185 779}readonly def
+ /UniqueID 5000818 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+ 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+ A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+ E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+ 221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0
+ 5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F
+ 80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107
+ 1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB
+ DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20
+ 9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1
+ CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA
+ F83C7D393392BCBC227771CDCB976E93302531886DDA73EBC9178917EFD0C20B
+ 133F1E59A96CCE77DD2377C743046EEF2A8D0CD09C6191F4752EDC959FBF4442
+ D681C98FCC499BD1EC5B489A1EE151FDEC267D9919558FB025850740FC02D670
+ E76A2765AC8E4D15749D085C2C088F2A1145FD41150B3201F8FDE3977923FC92
+ E422DD1D4A2D8CF2D9B7EA537CC5D472842C36987968434EF5BE5C820EADA040
+ 82CCD992468CB8DDD05AACF9DBF476F35E96F651DF9A01291E46E85F0E18F0CF
+ 89461FE8C45C00F78A7541F460E704E05351AD72C24613C5C5B8D08AAE153F79
+ 6E8C44B4485EF8BBF1C258DB26
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMTT9
+ %!PS-AdobeFont-1.1: CMTT9 1.0
+ %%CreationDate: 1991 Aug 20 16:46: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 (CMTT9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch true def
+ end readonly def
+ /FontName /CMTT9 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 40 /parenleft put
+ dup 41 /parenright put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 47 /slash put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 58 /colon put
+ dup 65 /A put
+ dup 66 /B put
+ dup 68 /D put
+ dup 76 /L put
+ dup 78 /N put
+ dup 79 /O put
+ dup 80 /P put
+ dup 82 /R 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 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{-6 -233 542 698}readonly def
+ /UniqueID 5000831 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E
+ 2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279
+ 650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35
+ F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A
+ D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E
+ F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1
+ 4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A
+ 438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD
+ BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B
+ A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641
+ AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74
+ D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB
+ CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A
+ 082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980
+ 9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0
+ 4BA1EBFAFDBEC531EA1210365091671CE3C86A6D4BC591C37DCC02570042575A
+ 9D24252D6E01A8603753934D7EA5CAC1BE4E5AD2BA047DE8F3983B23A8A1511F
+ B08D373B69E5076CE4300137B8805EBCC0AAB89BBB312A77835795E3C069322D
+ 42C893A30AD739E2BDD299679B158F7493764F2321E3965141B5ED1C6F4765ED
+ F46D391A646B30C90002B1C461AEE79E5F094CACCA656CEA3DB921CC5205F328
+ A2C69F817061D6C60B121EEE844CA5008F23DF0B684AF2D86CDAD0B9B89B284C
+ 7F05E8724D6269D42611FFFB58B771A45764CAEAEC56A33E9583B03713D5ACC6
+ 3BD9CAD21B28A2448088F4FF4BD5F09A28CE82AC76665389BD6BD5463132CED7
+ B995ED8FA26D5E068461BC4EEF410D3D8B6CC408D288622094DC1F61F9E344BC
+ 86C07256FDF0430CD108656E822F9F3FA57465076CB009E8C810186A0B84FDED
+ 0D1B72215546B5578DB1C7CA5C38F679F6C8EF5E854C729795736FCF1865BA12
+ 669FDD80E02BB6BD7491871823F365251E6ABB2AD7B99B8D233EB96856A73A0A
+ 866DF0781EF1F2B59D02BD229F5D97B766F8DF8358E2381BABF2F0CBB634FAC7
+ 059A81189863C041369EAA066DD05499DC1DCA01FC6BFF4CB51D492F05D06C4D
+ 13832C07FFA9E03B6BD2B46F75CC321E74BF8864AD1A0F342B998D6FB7EA9A78
+ EECBD311A374DA23B7EA2827811C09E5C79B875D30DA77F144BCFC936E758117
+ D39475B69045CC77E67B9761FFACAA0215856B1E35434023D7F87752E0A213F1
+ 0F90079D797F92DC4A7482A9AE6C1AEA960F96F0B331711EE34DC7FD54A9566E
+ 90B0A75057CDF87907726D78EE0EB2ED79F47566B1563061967480153BD8851D
+ A29CE7687741A6F92FF0947809EEF7E672D74FBF1AD547A213E70F4E91B1C8F3
+ 2D99468E91F6CA4B367ADD5C27559D3B82D7BEE8A698F5A5F2EE78A0FD822BE0
+ 0415EAEA328C5940102187AE813407411C8B12485EE125EF0844C8D35879734D
+ 68E1CECD38DA4BFE8EC55657A2F73EC33136CB1AB462F6A29BEF02A911BA036F
+ B3B09BF7CEC4842BD238D58F50944DC8576BCA6A07BF909B1180F1050C447DDF
+ 3CB46A6D4BFAA804EA5CA7A4CEF7112B20F3B3EBA6E50BABFC7F119A57F9CF8B
+ 4FD5EFCFBA74945F5FE90817BE0AA30091FF0C9FF4A26310B3D189398A0280D1
+ 4698F2274E2A6BEB15778ECAF5F36A6A5C9F9FBC134DD73ECBB04C53D046D0C8
+ CF2DE4D6EC51AECF424154D1D40906118DF3B630377D659458B0878D6F3EFBD9
+ 4C6CCCC97552BCD6EA0CD5916F4E27866ED2803BCF3884FF327B9AF9BF491F41
+ 25931E4E548C2949BFA3D655084472A42BCB5EAC7502DC1B6F7EDB279729E460
+ 039317BC5960036A0711FD504679436F7C7CE36E5373C6752668B8040C3F5F99
+ 6769D6462569822EE056E477E25E9C74021E085831E1A476EA0B879C08FECBC0
+ 344131FAF26746FBF1F64259E767095684BA7C66652993339BE67713DC0993E7
+ 6822DA050FE09A63D85E5A3FA559103A1148E4CEA84A2E14FDD09175D430DB5A
+ 0858A0CCC7884C2285802B619B5E7AB09BCF75F67A2F08E05FBBF8F479E2DF44
+ AA50D84618C743D761DC36E82434D025FB1E873755589C2D1065485AC407D53B
+ E0DD64A53748FECD830C04C58D5091A9AE6B58739C225E6503900291A419829B
+ 1F8401CD76C36880EC0CE12DEC7400E080B9B477DF404A77C6466FAB69770F13
+ 60E7F0B09D8F142E695F8F9807C1F789F1E3B9918319892CF4D6C98D738E522D
+ CD11A149FD5BD7E240C6805E97D8521283139D1637AA0526460D476E3C86FD61
+ 14E8892DB97E6C25628F0252DEB70B3C78AC57489859D3D91AD24FEF65CEB630
+ BEB5C8B829A31330BE252DC3D09BD98215CF026D817DB644D97589B8B95FE70F
+ 682425D6F9AED2FF782E80AABF08A078A0C6F78F4BF8362ACDDD31BDA4D6081F
+ 1C40C190F95AADBCE34EEC195CB7DD705A5A82B3C3273A409BE7F31534B6747E
+ D7D6F892AD190C70322D6775E4D5DA3B7455A6F6901D3097E18CC973CB962393
+ F67B1D9B4FDD45B6844960A332E4295AF84F21969E35C48A501FD1CB5D30AACC
+ 701FB1A25DA14746ACD386F68CE198F31FD202968815F495C7A03DBE8785A277
+ FFAA861210AC99D599E1148752451A820F6CDA837B6353950B02369B0FBC1DB1
+ 95CE996C7A139EC8B414C21324EE73D6DCFB8BB8EC542EE9AC9EB165D4D900D1
+ 356169577FB62EF39EC86BEB496A388C9661D2403D643B23E193B7D013797EBC
+ ADD9CD272B05C85D28FC1D98568F7CFF546A82B5CF25DD1BE134E59D30DE464F
+ 0A51AB16734A9DE3969CBF021EB9A64D828005E31F1F2D72BE70E407EC320AC7
+ 16105A324F0533BB771B98B9B9D15A97A7A3852BE9E9277B38D333D7AD3D34E2
+ B1C017B3EA51A2C9C4A8F3DB5B6E125B00C385EEFB8E9B3B2D2EA6FB907F5EE9
+ B3BC773832E7D5EDA4622DF0BD6D77AAD5778CAC3910BFFC0D1B6576F620B490
+ 15F9BBA659999E1B5C18FAD443DE590DFEFD0C9BDFB32CE7232F416C4FF92982
+ 2706743B0820E3F1DE5F3C10FBF5F5D33A456BF27ED0B96B85A621CB3B30FCC9
+ 0D0DF523C58530E41B7DE6E2C9D0A7C642EC5A47AB4F53B68AD6EB15D67768F5
+ 5B6F1FDA5A2AA30A32C3492A00203E239F5E731FFA5EDE304E3A043144541250
+ 598E4E32AE2B8EDDFA01789D580A550214324C522FC314A862BF066C97112336
+ 4E10AA28AB10F9CCBF1E6B25123EE78A1137755A5AC862F104352248DB39B872
+ 9EFCDDCD4CA7EB7D23F1EBFE6AF3693E5D70DD9601B305A1F32E84BA0BC1B254
+ 296272DA0095D6C4B363046129C329FD74D4E871F6562DFC6B5EFCB38E2B0519
+ 0435FF943832ED315239EB460D88C78636DBC08C01D992059EC78E73DDDC731A
+ B3CCC6A914CCD2585AB4EAC97D77DACF613BCFD9F40E47B32B2916BCF845E911
+ D4121D0824FBABAB474A2920AE1B11DAB32C5C1A2223860DD162895AC4DC67F2
+ 28D217FF22913338F48C8F49D9693701B50F4E7643141FD3A7959DE73A153174
+ D83E743BAFBFA23258589CE21D9F66B43BC860F202EBBE3FBE9D216FB42A55DA
+ 222D2E35A01504EEB987CD51401528334EB9460E0DFB09C9C0A63DA3B17D966A
+ E2D3563E685844A23C954EA8A1803EAE96F464129F51700F0F329F95F8091FC8
+ 316EBD7A3DAF94AC0672DACC4C75187F0268F82E9C432E834643F6C44A2607C7
+ 504A7CF13108A6B58EC1029A6B37142887339486127F745865F1B23879499C6F
+ F2013F0B2A0CA444E321F55796D1C19EEAAC364EC0130B50E03D78E50E8A8C35
+ F8791317C5BD73D456BEA4A2733679FA07E8CBF90CA05FCC5AA1336576BFAFBB
+ 6F8F148EAAEB9656FA3D729164813F78C15FA5682421DBC1093FE35AAF6372D4
+ 5E1D82D3B89B1A4502EA42FDD284825EB9D311B31CD86C15CA0B0BE239CFEECE
+ 6F96F8C7886F26C867A3196FBACC0211773AEC4F45448AA2DCF58C824491C6C2
+ A10128A0F089D05455C6869123C09A5542EF543FE2A4ECDAE28AF282D429BA66
+ C31165635E75647C2F0B81F6551744C63268F5AD078B21780C62761318283A2C
+ 596EF8BEE550DB81EF2FB1DAF99179212146540979E345267B772F952D9827DA
+ 3E6B0D968382236659D5DB509CA8047C2A17892D57036B56EC6E1E2EBF12D244
+ 39F32B92A3F9C92145C9B3DA7CEFDE71D511296EEEB575363E5351F46ECD49D6
+ 31EB388D654C451394D3C021F189C97F903918E7DF273A7DB200B4F6AE4CBEFA
+ 9EBE029B6C68F0CB134080210190BAD6DF7FA19D116C0905DAE89AD3C5899F71
+ 90302D6DA74B989428E3692CDB14B4D2878DF4D78836C10FA38611164305B02F
+ D29E435143F300C035DE5B2E350FE5AB40E1F097DE3F3948FF99694D5253BD78
+ 75CAF6FCB5ADC1BC4BF3D1DE911259A0227D651A7C58EB2667BA4CA22EA43A0B
+ 90A8CE43A3042B0543E4D6385E58C122D538113CE10A684214B259B9184D842B
+ 44ABFA6B4B0C4E4F8888AC8296175A11CB51A638380C6205B32CB384D5187BA8
+ 2C2C78DD5A9DE02638D4D497EE400C6BF624A7F963D4B9578526619B75CEF702
+ 573D97C18F0ABCCC7C3E9C8689E6C425D5DF2EF9B57A5D76F60D4B517A437626
+ B4AEDADBCD46993C0E79958DC3C6B7BB3F884BDB3E2EB8A6540B278FF209A5C6
+ 2F19EEBAEF11958E865C96069D1EAA9EB25DD851A770AB4061CD5E5D7C5F12C0
+ 7A9298605A2CEB8FCDA4D02342EBB5F4D5AAB8A36DCCF2EE7B5B439063451DEC
+ 4DBF38825B9B382DD71F96181D6210B4E0649BCDFB5768BEA18FB92022039603
+ EE5D2F4EA3D06F65BF59E93EA07C887FFDCD3FF4389932DB2E79B2B02F52901C
+ 4549040DF84CBB4D944DC8C81568FF64B6EBD9ACEEA81B72FD66D741B32E7C5A
+ FABE41465667B76C723C59141675DB4DE514554C370E040E06B8080AAFC6CF0C
+ 778A4E4F461F88CC31057EF6D3A353D2AC008D33E7C8408F1F337FECD0D02BEA
+ C74BEDBDA224E665CA1B8E45552A470794DA659D22CD9AE39B2A2AE1CA17FBFE
+ AB5839F97872145CF36A6049DB2F62144AAB0247934D644B984B516CB145DF0B
+ 4CADC24E229AA2AA50BA843F4ED99A965124AFA56CB35E123F6794A4F8DE6907
+ E4716E8BC0292FD18E4720D8E709AB28B37BA01C68976D00E7AAF293CD17E95D
+ B392FD972280F323ED620FEBDFA799F5AB94C297FB72493021111219CA5C5581
+ 4588AE8F8E5CC374BF883DC90FE65751BFDD4B32E5D77E71E6B5FFF3D9DCF37D
+ AB51C816ECCEE15752F97D332DB429505E6ABA8E188A36A5769270A09593D480
+ 9D83C4259E3F2F7E502DD9B62D6DDA4A4EF5BB4DE0C5E11C5BFA0B725FB29ED3
+ BA4FAFFAE53EDA096A6CF3F583214CB7E9DDE0E72E41AECA9195BFB67AEED6BA
+ 0EEF9B3A824BEF27630B65CE78BE26B973AAE0CAC6394C7CB0F60FE6F2B0C454
+ B8A6B1F0CAFDCF7A93BC2A1BDBB2684E8F6BDC7D7E3D4EAE552C0400CA43F40F
+ B74005DA599B78CA21AA9CEFE0BE1BA28927139B250BA3759C38E37F3DE6CC49
+ 990BA50FE4581F7A0CB137C1F4B7ADC45CF3B13878F632B4079FF5E40EDB0EE1
+ 46B1ED03B9CB509F3FB4BCEAC303B2EC40CB66D7AAD961736C449871822A2BF5
+ DEC875325A86200821ADCF16EBABC19D1DB8B7E625E046127513B4F445E065CE
+ 782AAA741D67ABD094F605411E4D4312C987E1F52FFA7901E5716B547E99AEAE
+ 0B4CEE1573596C0C72235991AB2D33D6B9253DF982F7E27F6F82E772F4E5F76D
+ 6A8ADC65C236520806B592343E1F69BB32E1ED23BF709401B4983820E25B5839
+ BD9622B67FE25E9C740F6228BD57FF42DD6C47593567EE3AB7EBA8EFEBA0DC3C
+ 357FE81E6A97E5B29BE6AE0DBE2EBB1D057640AC7CFEEC704C6A8B4E8173AE5B
+ 27C77A149EA2DFF107EACA17F44527ADEF2BCD5E9456E7BC60833CD78640E6C1
+ C5EE5EE18DE8E92DE893644E11FD99266F8536A876CD88C9F992DC290DF07F9E
+ C829944CA7C6889AA6D905C701850CE612BA0372DF957027E661AF5067F57915
+ 64C806045882C2E460E3CC893FF1927C5898B3FC0826D7B70A0BE4615462F5B0
+ 9ADF396C81EAD1ABE3E2959941CF92D67B359C0275D3F48F495926B3BBF0D71A
+ E0FDEE7A563D8F481774CD9FA9437CAE7ED439A85A0FB9E7D364A098B0DEFFFC
+ 1A56DF2E53750FBECB9E6DE1E62898D5E432839591AF116150D8A7B436A82956
+ A8103D3B4D65ED15833B486955B08EA35035EEDB7EEAB85B9C447B00B75720AF
+ 646C57ABE37F81F27B171C43514BC67C81B9189B5AEFC92966E2480F4743B6BE
+ 10F9031EE2A49BFE08B5C36AA4610A980DCC6893E442A797541978C3BCC63789
+ B89A53B760024203647252A556C89FF87003FFD96646241B18638F8EF819D59C
+ 29C1F75FDC5A439B70EA237DB168EC2F7BDEFAB1E557CE1FBB6B18A01698D9E1
+ 4F7A966580E87FA0263B0B789BC1B3F7D865EB6AA7B9F2B45C968CF221714B45
+ 3C6E6DDD981F2FFF3FD15ED38DB0B700A815CC89BFB33B203723129ED6FFC9E3
+ F16DF5A243601A8893CA78B68B8CA7210D022EFFC03E41FEDDDE1919B0B95D6C
+ C970BF1854BA3F574BC9C995484B1E91C1BF4C77953B36CC0FD6C25DF88645F4
+ 3C76C8586448F79E2B486607CAF83CE5FAA36588E5ABC2C13935F55E3DBBC8AE
+ F643CACF5AF89AE589BCFF586750DC3C552DAA902AD163F92133B512020BF7B2
+ 36121CAF86D4741E067B399314963686FD790F5EB6C7CA268578AF8941E1E546
+ C475754E4EBC7C8AD0B3290A28C691A1B7625F9978963422460BC84A9FA0F62B
+ C8E3FEE764E2C8F1213C1D22C53F53DE39F891568A77A51E986CDD14EF997E20
+ AE347B4E4522F1B06E6D25C67B4F137D9A83428BDD8F3FF14B36B19EEE16AE3D
+ 568E8ABC882C8F57021E7B5118835297E6A25CA5B2B56F92AE32F98FEECBA71F
+ FFFA5E4B3B930AC30580F1872B65801868B8EF8B8FE98071B38C83E2B8E9506D
+ C7A8A1D71E3CD691CFC8D8954908385AFB94690249B1F30F01A54DF9D033DE34
+ 808D594FDDCB3D805A3D3B40A9CBED2CDBBD3D59A7B2D06C56F5DE08E09C43E6
+ 1964C8521F9B9081EDA79A4B36D11646841EDCFC1F19EF3C4867AF977545094A
+ C71EA7D2418F516BBDCD014F5DC647DA3277BE775B1F949C9BA88EE67E6D76ED
+ 76D89B366EF83F38780EE68A1A64FD106B699BA07C1C2CBF4874A4AEAAB722BE
+ B95DF08B9EF9457665042A5942322310C715253C519F988B84EDEB65985B87DD
+ ED263CF5B82D9B1C1A3F0F4E1DF37B27A209BE6F3169EC31D34C010B2C59E1C1
+ DE0B024BDAEC6D4E43FCCEA1A6EBA9058A0CDC20B02EB73F267BCFF3CA584E49
+ 2639E33302CD08C7314350EECAC64D1645B70C637EED913684F24F3678366EEB
+ 410B09293740E4DAAB06B3A605BBCE4A7498AA0E129EC9869AEB87DD65B58969
+ 46E5BCE8C2F0EE189F8F68D3FF4E8BFA6762DD9F42FF07C4DE2011654EC80772
+ 47E4DD0AD5210959CEC3F474C2D6C7FBFA86077208E28470FA956C819F2E62D2
+ E7AE908CF71A71F7C179F76055CE472503A02F14FDAFF521996773A4F60D83C7
+ 249B33784F2775845599768A9E0151175696EC7187A3D4D1603BF0FB8CF45B27
+ 570157E8BE66F2E95E784F28EEEC82E035DA1E1B4933436266806371D59F6CE9
+ E4ADF08448DA760D1D1C76236EFC358BB7B3F7D35CC55ECAC832D0F6126C512C
+ 1C3E77C0C413B38DD15C06AFD726F8FCA4D7BB7B7C72616CE32551B2534902C4
+ ACFB39E492E459736DA99C19B3B62F1A1C94714888DB8444299B81FDCACA448F
+ 55D87EB3212C990672E7B10F6EB00089646050858D387AD6D249B58D8D1F38A9
+ 71A4AC58D0BDDE0A534B766E5641DD39D05DBC4954811C101ED4F68A3A3C85C5
+ 0305288945D35F2B59262182B2F61D53DF5A0B2F13D7A8562694671D403694E6
+ 3C0B0DA8FFFA0D3076ADFF5189B89379BCA4CF0C5F77A05A0BD35395BA03382D
+ D05F3A7A89FA261BC60D53D9B69EC579F06B28FE4A0A7FF5ED1AB10A57307D90
+ 3BBB72DED07DA020AC9DC5FAFE9188706E0E4C3C06091729A9C94203B666E742
+ B58CBECA98589F14FEDF40FE82F6D681416A1CA24535A18EBFFF2368DBE45BFB
+ 1D1EF5A7C91C801E8E0DF49A95DCB32A736C2509BD4457C0989AB6AA697841C4
+ FB958A696D721BB543776AA214032299C79DAD2E9E4BDDE848AFAAFD3E1C0426
+ 6036F0293CB520FFCBB5C5CC78C6E35B81EED74498C49F894A2E65F30750A2B1
+ D6445C89551FDBAA240637C5AA852D04F06A152A58D8BD2493E8C2F08732512F
+ 55A557686880C6E726CEBED49CD522898938E05966A49F3F8923CCF0EFA43625
+ C08561E6016FE15D333DDEF739B4852FA7FC379AA3FDBAD244D8A13B89EDDC04
+ 62A1AA11CB82B46BC6A8473DEC97990A82E7180AF06C42C73C876E465785B218
+ 6EAEBC2A991D186FB10C4947D7F58D0F5235515798CFCCB84DDC8309043D5FB8
+ 1E8F7C419281FCD40E50658C7D6098DF30F36AB8E80B4DD40146108234A2E572
+ E4057742DA1A05D726275481097EF0909AD72E869FDB5DC51389933D386CCF30
+ 5B6478F69C25FFCBAC0B301AD5394F935B90471F9B6E13DE0EE09787BAAF76A6
+ D8A0E6E34246229E36F1BECBF96CE84D6ADBD6D25277B77C58B5A2C0D777B53D
+ AF4DE496FE65AC94FBC6CECC099909FDDB5BB52CAA6A432D5FC7940DB5B001A8
+ ACBD4DC33C71702A1B250A092BF539CC2784D337638EEC35E49115F173ACC8AF
+ 9B359D7367F24462969131F14FFE717D899CA653274C8325CAA3D9572B97988C
+ 0EA6E9B15E15457F89A3660150D635D65F48CFEB0999C09A539B050B88EC85A5
+ AC3554561C38C3C3
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMSY7
+ %!PS-AdobeFont-1.1: CMSY7 1.0
+ %%CreationDate: 1991 Aug 15 07:21:52
+ % 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 (CMSY7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.035 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMSY7 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 0 /minus put
+ dup 3 /asteriskmath put
+ dup 13 /circlecopyrt put
+ dup 50 /element put
+ dup 56 /universal put
+ dup 91 /union put
+ dup 102 /braceleft put
+ dup 103 /braceright put
+ readonly def
+ /FontBBox{-15 -951 1252 782}readonly def
+ /UniqueID 5000817 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+ 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+ A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+ E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+ 221A37D9A807DD01161779DDE7D251491EBF65A98C9FE2B1CF8D725A70281949
+ 8F4AFFE638BBA6B12386C7F32BA350D62EA218D5B24EE612C2C20F43CD3BFD0D
+ F02B185B692D7B27BEC7290EEFDCF92F95DDEB507068DE0B0B0351E3ECB8E443
+ E611BE0A41A1F8C89C3BC16B352C3443AB6F665EAC5E0CC4229DECFC58E15765
+ 424C919C273E7FA240BE7B2E951AB789D127625BBCB7033E005050EB2E12B1C8
+ E5F3AD1F44A71957AD2CC53D917BFD09235601155886EE36D0C3DD6E7AA2EF9C
+ C402C77FF1549E609A711FC3C211E64E8F263D60A57E9F2B47E3480B978AAF63
+ 868AEA25DA3D5413467B76D2F02F8097D2841598387C588CB084A0351E1B0134
+ ACDAF9FF07D2ADCD8915FB8792BD7F250469A256B05DED7089E2D994E72C1877
+ 5619AC07A1EF0EC47C91002DFEF22111173232C13CBDC15B370BEF2F39E24CAA
+ 8BDE80F48411B56D37603BBA5A934F8F24EE7B7D2310D38F128E141775ED4CD8
+ D4E13F205D5F5E173E6755D013884306F3AE2D2A85A3A1F2161FAD28954AB8E9
+ 2B830051DA7BEBAE46C04D2FEDF469B94B3AAD91F66D22A983FCFDEDF23EE52C
+ FDD3450DA0A26EEA38087A0B4EBCD3BD49D9E3001E7054184D063F80A3E86115
+ A80FDAB9B533FBBA55E33B9DDF7846045765A0B0F448620D4E14A86338BE1721
+ A6A730BE29A3619F62E42CCFD42944240C866F8A085D8C6716E1C0D5DC45BD1A
+ 5D9DC1AB368C9B65E1C6133EC3393388EB9EC8A5815F6C41A4383FFE3722902D
+ 14A88711DFBD33B06682B8073F144C89E4E7B373A449BD30619BCA6F6D9A51BD
+ C106071733ECFFF35AE7C133F14EB7B1C68D4C5A59EC5C9A81360D37BC5A0874
+ 6A28D8869691F0864CC0F0412086F127FEE1ACEDDD3C35583485E8CE4B507469
+ 04D7B50DD78606B8AE205F8F279722ED8FACDC8BF9A0BFD5389CCDE305A813CF
+ 90C6F14A4BD3D6D1D349C0017A8AD85BE922BAC4EF113E7152BA61CDE506DD1C
+ AC27A1CF9D6039A5F3501E5F97B33976981B07F61504A469D79DF7C06D8F7FC4
+ 6181A0361FC15248BA6D753F9B3882372FDA63BD4676A2B2E08C0FFD5E87CF7C
+ D2A5896C81F5A0306399CE5BC68B86B15E259348C34ADE7257DFEC32FE7DB08B
+ 2A92E6C69C96707EDCC370A3B533319B0AE93FB61C3B0CC18AB0F29D71EF2425
+ 90699F2708259C4FDC31756FEA57A6604B6959FD0DAEC9E60F422168DC3040AF
+ EF2AE6C2301DD679B65051BA2545AFFA6E9928929F00D5C67637BDDBA7D2F408
+ CE606F058ED9A8F92436155D0A2BD88B73E8B0FCD8B4AF5B381A5A7E149E0B39
+ DDACACB557631088A6A5963C30421255C0FF0CB2321B5BE8E69CC0828765D562
+ D223EE8438E95413E42E54E00FA55D1227462598763CC36698E4812E7C0079FA
+ 7BF184B1AEABCF00E1D8D38C201781A02BFC7DF8E962E2C1F80433C1F05EFAD5
+ 8752B2F44BB42BDCCB814EB9F389C98C056D71309B1C3366634D87BA4B93231B
+ 5B8F7D508DEA5B1A34C108DB1AFF405A63701A3C6EC11415DC4E19D3A8E0F021
+ 0F83B70E70601017B0D7CA16534712A2C8E276BB1F702090A64252F457A40282
+ 3E42D3092031699FBFA44F5658EE2DA3B4D2E27E6D5AB04E7F42A7EF101CD2AF
+ D281E0AC27824A63E820DFCBD87CBEE1EF71E5EA2A2046EA42ACAB2644F88DDE
+ BFA25805516B353997F41D032E8BFDB558174037DE963ED2F416A3A59EFBAEC1
+ 4D9EBE0B18C19268ECFEE6FF63CB84AA89F2F3FABC1121217B47FD11749DE5F1
+ 9B33EABE557FE30536C3B0ECE4A16431F918C6F7D106C8C6779A68B6CAC491F4
+ 7405376F3B5F932890BF9F748E2EAC3C0DECBE31F7D7276E35433B8DFC844BF8
+ C5D0007421420E88A4EF6CEB8C2AED74EFE145F4A3F92CF24C06693DCBC0E1D5
+ 2B9D42A696BF9ECE83AD2A0D25CED369B983362CAB58A2248FBC18B4246086DF
+ BDDD0E6ABA0BCD503BEEF3CABEA2A98FF5877C5C6D36F60B7F90309AFF7E20CA
+ 267879C669FFF4D6A44C96C76C4C464C6959C7D79E5F3E0CDD5B4098E8EDB153
+ C11AE571294D9C62351F284F07EB29A17FA78415F79ABB6B9EFF7FBBB04B0BF4
+ D5CBA9C69C73C72C405BE24B5760FC9144D361581C54852E8A76ABE80883B0CF
+ 744018004BDF42D76BD6D49257A596C1639F0DCB9093E1C13F2521DB4CE65D2F
+ 61D5DA098ACBEEC94306EDAAE845686BC970D701FF2391
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMTT10
+ %!PS-AdobeFont-1.1: CMTT10 1.00B
+ %%CreationDate: 1992 Apr 26 10:42:42
+ % 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 (CMTT10) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch true def
+ end readonly def
+ /FontName /CMTT10 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 44 /comma put
+ dup 46 /period put
+ dup 64 /at put
+ dup 97 /a put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 105 /i put
+ dup 108 /l put
+ dup 110 /n put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ readonly def
+ /FontBBox{-4 -235 731 800}readonly def
+ /UniqueID 5000832 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19
+ 38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF
+ D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204
+ EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727
+ A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593
+ F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714
+ 4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA
+ 6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E
+ A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B
+ E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F
+ 1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438
+ 452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF
+ 8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369
+ 5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA
+ DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9
+ BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19
+ 741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79
+ E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712
+ E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7
+ D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE
+ C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DC
+ FF798F2ABFC4F3539392985C4CB324B0007229586D1E0321559F67C057FD7902
+ 194490A4C133DA790FF3BF23A13C2B1B69EEB75950F9106F2BA1E3CA65C90FF5
+ 931DADF03DA48AFB8561FC2E710087251BFC42B80B297A3DB0DA138A7622A931
+ DA293B0C740987ACE9F2A8EC2DB98F85783C01623FD3612C7E4A84FD93446770
+ C3DD7431F955A5F3734F6931BD790F0A45B8D17CB74BDAA4BFF6DAB5380CBF61
+ 72F37CB67A909E2842E0AC5D9D07D01A4BABBDE2AC70FE5753460D7E1A708B7D
+ 0EFB2B5FF55F9E4571C466AF1F91E545585845B09D855C3A01F713C1BF081EB2
+ 7E2A0E598708737D475BEDAF60BC100FD0A0628C6001A203348CF6A3AFEE6DEA
+ A2EB57E35599FAD0B8A52BE1B77757E92EA2F51BF07A285E26A452F417D2751B
+ 3D53F9D671EEB920B5F0325D4D4C2634C07508492279701623E5224F9DA08DA5
+ E0A6923FF60DE967B391DD9F3CC8B68DD5F343C14C3C7AA45C67039F2911FA29
+ BDC5810467A0E012C4F4B1611022B6232C53452C30EFE319B58E8220749D58D4
+ 23E5B4D382439AF172F4D03ED7B859085AB38822032F5EDA5A08A8F7E9998208
+ 4F1533B65ACE0E766EED2188CF2F912571426AF298074E92E5D9DCF5412AF0AA
+ 1937E10EDF9E6BF312CDF423D6EDA89FE51494A639DD781F1C8B62B732C93AD6
+ D5252314087220EBF583461AD5881D6FD4BA9CC06FFCB9DC873A264885762549
+ 30567A877DB3D29CA786377A8D2E73024FAA97BBDB1F4DB0D639EB8BCB2E757C
+ 220805051F5347489BF122B77C4854AEEC8B222A981BF48C9EAF3E4C702668CC
+ 99F204B32F2286671B7522B1CC65B19EEC44807E06E9531E02F37840F31A480F
+ 7680008F4836AB1E3E5D5C3D0249EDDC71B64B7877964CFC32F10B10E0F50A95
+ 798A72B7CBBAC1BBD6268E9507242021F6DF8C3DEEC2908415038D115ECF6833
+ 09FF7FD12D58E87DD3148FDBDC7DA1B3879981CD6A3EDE784159ED8B8C26B211
+ B4DF1884B35E3CED68A9A5E41B1F8DEA106FA840B015F3EEE106CAA0950AB130
+ 7F16B81FD14D6003FFD693AA83FF75B3A13C29C4AD904DDD9171626791C50270
+ F4081B6629BB3A12846EE8B74A6FFC6E8ACDF448D84E3DD62604199C55468EDE
+ DB540BB1457A9125B793FECB80F53E341F4886B9C1A52A41DBAD22C6CE57ABD7
+ 86DECE30F76FE0CAFC5272AE1D32376EDEE4C8178743F26DF73EB59CAEFAB6D9
+ 9DFE52CDE9C047225821D52176C09D53FADEE327792392E15FB30B25E299EB0F
+ 63E56DC41E29E31B3FD8B1017EC012D52F7BD2FA2BB43CE3701895AA4039AE3B
+ DFB00D38D74EF3A68B561A7E11C390C0CA04B71B61227A3E720A3D3922DDA814
+ 6132AEC8124DA37DFF9937CA256AEA278D9508229740535E23D110DA059AE54F
+ 1A6847FD673B837BD9A38B67E4D1D5788855DB1D73BE08249EBA1F66DD2375E8
+ 9CB1E84B4A5D7AE0EC7176FD57FE0C3C495B34EAE9520D5082F48D47AB6656C8
+ BAB971AE7E122BD0D74AC18858FB1E7FE1211DAA817D19E5E41CA687102705E0
+ 3CC4759639568448EE163639E12AE1BC917FC7D4E0A942302BFE9213F95B8855
+ DF21A55C4CA8D22BDAADA5011FA022A1514A492B3E5DCE21C419A4792CFA771F
+ A5D2A240EBB7D5AA90C822C330BA46B55959583B7E53035F98244AE07A12CF84
+ 54E9F261AF5C4E399EF9975F85FFC726355FBCFA992875C6D5876ED2736BCD08
+ D45C0729C5D74A5157CCF86763DEDAACB327B8BCC7365D7C2EB6F186FA095936
+ 4B696384C90AE1316121CB17132442EB6A95A163CFB8CB4CBD8CB7CF62539500
+ 6A88B7F9BF2F61D0F5DEB6E8ECA84A219954AAB85E5A1E6552404F3C0B1317E5
+ FFA6A3FEE0D4A8A3B914AA5FB0DF28CA0CF265BE1351BC6217B5296759E12C1D
+ 70C3E99A36DA3DDAA95C0F8DBE256758091ACE5E9432C90121266A90F8BA6AA4
+ 61DEB340E25E7452221DC8532D2CC447B56DCB539C8B0F9B423E98CE46BDED34
+ 8D8C38247B048BC31B0E662B96444CE4462DC50E37330F7CC694D8D466C1EBC1
+ 31D614ED14CD7DBE1CDB3702AAC7FA40E939F7D462D1696B8A21263F25CD22A0
+ 57CCCFFF9F3FAEDF1214C5D6E8DC743CD3E7E945DC134AB231B178F9F0840983
+ 077AC59047563AD417314F8FC6FCEE3B5436DF712AE1590DFDEA3DDCC1114BFE
+ 358B56F62F5527251657E586CCBC0DA8050E2CB6D3D62B70017175CB6BDDA6E1
+ 541FE5734A883F1760BE7AAC6D52EA21F81A35F14606EA46E3415224322263BA
+ A7F593739B858D141EFE8CC4D8B6BC6C48B85E41325ABDE9910CEB390726A08D
+ D285E20CD0D840C0DBE64218220F8DCFEADEEFDA9935FF50BDDF4300500A5593
+ D7902B9D6A8A4BCB3C46C1828894FA9E0BA7549CA3B17439DCDDA33CEE2DCF72
+ 0DF59B7F77F050B11D34A6FF42D6ED74B2C8D6337BC8D5D8BAB5BCD2FBC52E85
+ B11A278357D80477CDE19D6566124F023CDFEC5C6439EE3763E1AD467513F45A
+ 381886BF33F29E4F7DD4292F9532EF8E7839A5627ED19978B584C28AF7E38FB0
+ 4E8721E477CFF187FF7D17F5194CCA1ED7B9D9C8D4C9F51B147B3056B6768699
+ 7DCFA6936E2BA7300BB894635611DC3715BC40F5ECA26388DAA0D8D5F1A268C7
+ 13AAC9DFADC2625891C90ED9947D4178FFD91D2E59B8420715EBCFE128401BF8
+ A24B0AF9F53C5F79C263DB2DB0C5CA97D5E3E67D1835525D88B6032E711F0DB2
+ 68FB7AF22E45D7179CCFAF7BB09D24D2A5DD0F1A3EB33358AB489D5BD3D9964E
+ B2A315BBCA9A91E6B5C95ABE85914931C2871241E02FC6C17C7F9FD9B72B81C7
+ DEACC54F57D83D9270F8E8F24C73E11D488BA2AAB4C518391B8B4D5DAC895412
+ 3EA970CA0E7FC5DDCAF85D4855A74ED16DB0542C70BD9DA30599AB0A54BF0106
+ 12FED698E5BB4E25F49F97A86230DCF1A40315F11936D25415BC49ED6928C612
+ 07D109D16ABD3238D3A9560381BB7D3DECC622140F10BC8CF3C8740DE3DA982B
+ EE7057D0D014037C02A8466FE7F51CCB0BF2EC476130CE549CB577AE8D572FDC
+ 43C42F39944A51B5B126985F0A378FFB55580BFDC2FEF29AC2AA88C436F9B636
+ C3E4158519F867698E6F944F7BCDF0CB13AD8EE6DAC7556834F192EF62AAB073
+ 7CD912293730E5866C8E694B5B31C76B19D870A81E513B00EA0DEA7891B09DFB
+ 32FBF96F8328AC36FC886263AA6B5B221A98529903F1681CA4BC333407D4DAB4
+ CE12073B0AC9B149B57FAFD7354F5B04A18BA3DB39B2996CDD66C9E65E2CF870
+ 969288E96013338F980DEE822D691649C08EAFED531D24877077E27435286C2D
+ 9E4FF88F11CAADC00CCB12FC919C9BF8D17289DFCD353F1826681495A525CA53
+ C5B7CF7E1AE6D3B8AA0B35282EFD7E0A172EDC3C738EBA29D26D6523EE03CFEB
+ 528CBF5318E5ECB172961E98A880543C136E8988CAAF9FC61F428D7231D2AF54
+ 13FF143914DDC9AC01993FA4A8354E58BF41590D8B9349E5DFD94A3CC8E68BA7
+ A8A2B33DC5B0FA680C1230064AC8C66CFD9B9B3919EC891006292A8815CD87CC
+ EE7DFC0E84941B488771CF382BD2DED4367A092BC54FE338A9761AA468D21AED
+ DC5D46CEA62E8E73A6D1D917A3B0E4852F45E4199DFB6EE9501099C06DEB2067
+ C20E5E6DD9FFBD1AA03B7CE2965F2BAEAE464331975FE4C9B59B90541D372129
+ C91C675EDDC4169882B9513541AEB889CF72DB277BF599AC79E0ABC704285B83
+ 991FBD6ABA91A11C40E5BFFAEBD3BEC6EA2E25C7653B25EF10D73C01CFCE0AAB
+ 65340CEBF0936071FFF479B05FFAA8467AAE646AB5A0B8BAD06AA186CDB1C791
+ 19B577DCE6101EC4F9B706BFF7E5155E
+ 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 102 /braceleft put
+ dup 103 /braceright put
+ readonly def
+ /FontBBox{-29 -960 1116 775}readonly def
+ /UniqueID 5000820 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+ 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+ A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+ E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+ 221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
+ 27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
+ 5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
+ 0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
+ DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
+ 71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
+ 4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
+ 515DB70A8D4F6146FE068DC1E5DE8BC57036431151EC603C8BCFE359BBD953AD
+ 5F3D998C69E42AA96AA212AD55B676FA2B4F6B519575404233C09AF99014AB95
+ 767523D9E1F8806E766AC0DD6D81028C3AA9C7536D88D3C2DB6D9949F844935E
+ 420963F40430452DEAAC1F500BFB1C2473C54B9987BE449F042633C7038D5AEB
+ 7E1E11C50911EBCF0979F8192E056A2B2EE9785EB73B1AB874116AD5AA74F32C
+ BF57FC28FFED335DFD9261AC7A624EAA93BEBC2C0F8B3F898DDA1490D59C6C4B
+ A651746C8EAD41BDAA1AF4056AFE98D2D3AE3CCEB9C67FE3A63385470EA42968
+ 34268684A674675AB9EDBB5BFCA81224B22D4ECF40D1F31A39481AC68A87F252
+ F4E7C1C340A26E0D514BACCAA51898758A7E7B63D2E7F34E91554151433F0FD2
+ 4901D3DE9A5FB9306552DC57EAB729AA07780927E1ECCB5D1F59A09A1E3FFF2D
+ 922B6C9B58CB20D687A72B9C22D4EC926771541EDA3B75559510DB21BA4461EA
+ 960B8E5AF4D31D08E8F235D677A9F6EFDB01926967743942C23955678E438F51
+ E5E22E2FA2AA7894755053C32B39277B82C00B3D9BE9957CF3ED626852FFFC31
+ 6E5F0F7489198136A3284B31CC94299EED05B8FA66B8D33F7C47367790D23CD5
+ 303B0C8E58B0E51BEA9325282F19A3D361A3BEA6BB0CCD09BE735D810E7E0A79
+ D1A9C580CFC8CF9FF685D63ECDCCC024C235448BA632F00C3C5BC0E86F44B90A
+ 293817CC93035E5E18548A7E157C2887309BF84C167D8DBED024BB
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ TeXDict begin 40258431 52099146 1000 600 600 (f098-lattner.dvi)
+ @start /Fa 133[26 29 1[44 1[33 18 26 26 1[33 33 33 48
+ 18 29 1[18 33 33 18 29 33 29 33 33 8[41 55 41 48 37 33
+ 41 1[41 48 44 55 37 2[22 48 48 41 41 48 44 1[41 7[33
+ 4[33 1[33 1[33 18 17 22 5[22 52 38[{ TeXBase1Encoding ReEncodeFont }51
+ 66.4176 /Times-Italic rf /Fb 204[30 30 30 49[{}3 49.8132
+ /CMR6 rf /Fc 207[18 48[{}1 49.8132 /CMSY6 rf /Fd 136[31
+ 1[31 31 31 31 1[31 31 31 1[31 6[31 31 31 1[31 97[{}13
+ 58.1154 /CMTT8 rf /Fe 194[51 19[26 26 40[{}3 58.1154
+ /CMR7 rf /Ff 139[25 1[32 1[36 90[41 21[{}4 66.4176 /CMMI8
+ rf /Fg 129[35 3[35 35 1[35 35 35 35 35 35 1[35 35 35
+ 35 35 2[35 35 35 35 35 35 35 35 35 13[35 2[35 1[35 9[35
+ 1[35 35 6[35 10[35 35 35 35 1[35 35 35 40[{}37 66.4176
+ /CMTT8 rf /Fh 139[24 29 115[{}2 49.8132 /CMMI6 rf /Fi
+ 152[38 38 38[60 12[51 50[{}4 74.7198 /CMSY9 rf /Fj 87[22
+ 17[33 27[29 33 33 48 33 33 18 26 22 33 33 33 33 52 18
+ 33 18 18 33 33 22 29 33 29 33 29 3[22 1[22 41 48 48 63
+ 48 48 41 37 44 48 37 48 48 59 41 48 26 22 48 48 37 41
+ 48 44 44 48 1[29 1[37 2[18 33 33 33 33 33 33 33 33 33
+ 33 18 17 22 17 2[22 22 22 52 34[37 37 2[{
+  TeXBase1Encoding ReEncodeFont }79 66.4176 /Times-Roman
+ rf /Fk 134[39 3[39 39 39 39 1[39 39 39 1[39 5[39 39 39
+ 39 48[39 39 49[{}15 74.7198 /CMITT10 rf /Fl 194[60 10[38
+ 38 5[60 1[30 30 37[60 2[{}7 74.7198 /CMR9 rf /Fm 138[44
+ 28 36 35 1[39 37 46 1[23 40 4[37 36 40 33 1[41 14[58
+ 1[49 1[61 74 52 2[34 1[60 49 1[63 55 58 58 2[60 2[21
+ 30[34 16[49 11[{}30 74.7198 /CMMI9 rf /Fn 107[37 37 24[33
+ 37 37 54 37 42 25 29 33 1[42 37 42 62 21 1[25 21 42 37
+ 25 33 42 33 42 37 9[75 1[54 50 42 54 1[46 58 54 71 50
+ 2[29 58 58 46 50 54 54 50 54 6[25 37 37 37 37 37 37 37
+ 37 37 37 21 19 25 42[42 2[{ TeXBase1Encoding ReEncodeFont }60
+ 74.7198 /Times-Bold rf /Fo 133[23 26 2[26 29 16 23 23
+ 29 29 29 29 42 16 2[16 29 29 16 26 29 26 1[29 12[32 3[36
+ 42 39 1[32 2[19 3[36 42 39 36 36 6[19 7[29 2[16 15 1[15
+ 2[19 19 40[{ TeXBase1Encoding ReEncodeFont }39 58.1154
+ /Times-Italic rf /Fp 133[32 4[39 25 31 31 1[34 33 41
+ 1[21 2[23 1[32 1[31 35 30 1[36 16[42 2[63 3[29 1[52 42
+ 2[48 4[52 2[20 20 58[{}24 58.1154 /CMMI7 rf /Fq 133[26
+ 2[42 29 32 19 23 26 1[32 29 32 48 16 2[16 32 1[19 26
+ 32 26 32 29 24[45 72[{ TeXBase1Encoding ReEncodeFont }21
+ 58.1154 /Times-Bold rf /Fr 240[35 15[{}1 66.4176 /CMSY8
+ rf /Fs 134[39 1[39 39 39 39 39 39 1[39 39 39 39 39 2[39
+ 39 39 39 39 39 39 39 39 14[39 1[39 39 39 1[39 7[39 1[39
+ 39 6[39 6[39 39 39 1[39 39 39 39 2[39 39 1[39 38[{}40
+ 74.7198 /CMTT9 rf /Ft 204[25 25 25 49[{ TeXBase1Encoding ReEncodeFont }
+ 3 49.8132 /Times-Roman rf /Fu 152[34 34 10[45 34[38 5[45
+ 36[66 9[34 2[52{}8 58.1154 /CMSY7 rf /Fv 175[32 3[36
+ 2[19 4[42 14[29 4[29 3[15 4[19 39[{
+  .167 SlantFont TeXBase1Encoding ReEncodeFont }8 58.1154
+ /Times-Roman rf /Fw 105[29 1[26 26 24[26 29 29 42 29
+ 29 16 23 19 29 29 29 29 45 16 29 16 16 29 29 19 26 29
+ 26 29 26 19 7[42 2[42 36 32 39 1[32 42 42 52 36 42 23
+ 19 42 42 32 36 42 39 39 42 1[26 1[33 1[16 16 29 29 29
+ 29 29 29 29 29 29 29 16 15 19 15 1[29 19 19 19 45 48
+ 29 33[32 2[{ TeXBase1Encoding ReEncodeFont }77 58.1154
+ /Times-Roman rf /Fx 134[33 1[50 1[42 21 29 29 1[37 37
+ 42 58 21 1[21 21 1[37 1[33 37 33 37 37 12[46 42 7[50
+ 3[54 2[54 50 67[{ TeXBase1Encoding ReEncodeFont }25 74.7198
+ /Times-BoldItalic rf /Fy 133[29 33 33 50 33 37 21 29
+ 29 37 37 37 37 54 21 1[21 21 37 37 21 33 37 33 37 37
+ 25 10[54 42 37 2[46 2[62 1[50 6[54 50 46 46 18[19 25
+ 19 2[25 25 25 36[37 2[{ TeXBase1Encoding ReEncodeFont }43
+ 74.7198 /Times-Italic rf /Fz 104[75 37 1[33 33 24[33
+ 37 37 54 37 37 21 29 25 37 37 37 37 58 21 37 21 21 37
+ 37 25 33 37 33 37 33 3[25 1[25 3[71 54 54 46 42 50 1[42
+ 54 54 66 46 54 29 25 54 54 42 46 54 50 50 54 5[21 21
+ 37 37 37 37 37 37 37 37 37 37 21 19 25 19 42 37 25 25
+ 25 58 62 3[25 29[42 42 2[{ TeXBase1Encoding ReEncodeFont }80
+ 74.7198 /Times-Roman rf /FA 133[41 1[46 66 1[51 30 36
+ 41 1[51 46 51 76 25 51 1[25 51 46 30 41 51 41 51 46 9[91
+ 2[61 1[66 1[56 71 66 4[36 71 71 56 61 1[66 61 66 6[30
+ 46 46 46 46 46 46 46 46 46 46 1[23 30 6[76 35[51 2[{
+  TeXBase1Encoding ReEncodeFont }51 91.3242 /Times-Bold
+ rf /FB 137[48 48 48 48 48 3[48 1[48 2[48 3[48 48 48 1[48
+ 32[48 17[48 1[48 44[{}15 90.9091 /CMTT10 rf /FC 152[45
+ 45 102[{}2 90.9091 /CMSY10 rf /FD 134[46 2[46 1[25 36
+ 30 1[46 46 46 71 25 46 1[25 46 46 30 41 46 1[46 41 10[66
+ 66 8[56 2[30 5[61 1[66 19[30 45[{ TeXBase1Encoding ReEncodeFont }26
+ 91.3242 /Times-Roman rf /FE 134[75 2[75 83 50 1[66 1[83
+ 75 83 124 42 2[42 83 75 50 66 1[66 83 75 13[83 2[91 3[100
+ 2[58 116 3[108 108 1[108 6[50 58[{ TeXBase1Encoding ReEncodeFont }27
+ 149.44 /Times-Bold rf end
+ %%EndProlog
+ %%BeginSetup
+ %%Feature: *Resolution 600dpi
+ TeXDict begin
+ %%BeginPaperSize: Letter
+ letter
+ %%EndPaperSize
+  end
+ %%EndSetup
+ %%Page: 1 1
+ TeXDict begin 1 0 bop 195 161 a FE(A)-7 b(utomatic)36
+ b(P)m(ool)h(Allocation:)e(Impr)m(o)o(ving)i(P)m(erf)l(ormance)i(by)444
+ 327 y(Contr)m(olling)d(Data)g(Structur)m(e)j(Lay)l(out)d(in)h(the)h
+ (Heap)1281 626 y FD(Chris)22 b(Lattner)346 b(V)-5 b(ikram)22
+ b(Adv)o(e)1145 734 y(Uni)n(v)o(ersity)g(of)h(Illinois)g(at)g
+ (Urbana-Champaign)1300 842 y FC(f)p FB(lattner,vadve)p
+ FC(g)p FB(@cs.uiuc.edu)-150 1448 y FA(Abstract)-150 1564
+ y Fz(This)h(paper)i(describes)f Fy(A)o(utomatic)g(P)-6
+ b(ool)24 b(Allocation)p Fz(,)h(a)g(transformation)-150
+ 1647 y(frame)n(w)o(ork)34 b(that)f(se)o(gre)o(gates)g(distinct)g
+ (instances)h(of)f(heap-based)i(data)-150 1730 y(structures)24
+ b(into)g(seperate)h(memory)g(pools)f(and)h(allo)n(ws)f(heuristics)g(to)
+ g(be)-150 1813 y(used)19 b(to)e(partially)h(control)g(the)g(internal)g
+ (layout)h(of)f(those)g(data)g(structures.)-150 1896 y(The)28
+ b(primary)g(goal)h(of)f(this)g(w)o(ork)g(is)g(performance)h(impro)o(v)o
+ (ement,)g(not)-150 1979 y(automatic)21 b(memory)g(management,)h(and)f
+ (the)g(paper)g(mak)o(es)g(se)n(v)o(eral)g(ne)n(w)-150
+ 2062 y(contrib)o(utions.)30 b(The)f(k)o(e)o(y)h(contrib)o(ution)g(is)f
+ (a)g(ne)n(w)h(compiler)g(algorithm)-150 2145 y(for)g(partitioning)h
+ (heap)g(objects)f(in)g(imperati)n(v)o(e)h(programs)g(based)g(on)f(a)
+ -150 2228 y(conte)o(xt-sensiti)n(v)o(e)i(pointer)g(analysis,)g
+ (including)g(a)f(no)o(v)o(el)h(strate)o(gy)f(for)-150
+ 2311 y(correct)20 b(handling)h(of)f(indirect)f(\(and)i(potentially)f
+ (unsafe\))g(function)h(calls.)-150 2394 y(The)e(transformation)h(does)g
+ (not)g(require)f(type)h(safe)f(programs)i(and)f(w)o(orks)-150
+ 2477 y(for)k(the)h(full)e(generality)i(of)g(C)f(and)g(C++.)g(Second,)h
+ (the)f(paper)i(describes)-150 2560 y(se)n(v)o(eral)20
+ b(optimizations)g(that)g(e)o(xploit)g(data)g(structure)f(partitioning)h
+ (to)g(fur)o(-)-150 2643 y(ther)d(impro)o(v)o(e)h(program)h
+ (performance.)f(Third,)f(the)g(paper)h(e)n(v)n(aluates)h(ho)n(w)-150
+ 2726 y(memory)25 b(hierarchy)f(beha)o(vior)h(and)g(o)o(v)o(erall)f
+ (program)h(performance)g(are)-150 2809 y(impacted)i(by)g(the)g(ne)n(w)g
+ (transformations.)g(Using)g(a)f(number)i(of)e(bench-)-150
+ 2893 y(marks)g(and)g(a)g(fe)n(w)f(applications,)h(we)g(\002nd)f(that)h
+ (compilation)g(times)f(are)-150 2976 y(e)o(xtremely)j(lo)n(w)-5
+ b(,)27 b(and)h(o)o(v)o(erall)f(running)i(times)e(for)g(heap)h(intensi)n
+ (v)o(e)g(pro-)-150 3059 y(grams)23 b(speed)g(up)g(by)g(10-25\045)h(in)f
+ (man)o(y)g(cases,)g(about)g(2x)g(in)g(tw)o(o)f(cases,)-150
+ 3142 y(and)j(more)f(than)g(10x)h(in)f(tw)o(o)g(small)g(benchmarks.)h
+ (Ov)o(erall,)f(we)g(belie)n(v)o(e)-150 3225 y(this)e(w)o(ork)h(pro)o
+ (vides)g(a)f(ne)n(w)h(frame)n(w)o(ork)g(for)f(optimizing)h(pointer)f
+ (inten-)-150 3308 y(si)n(v)o(e)k(programs)i(by)e(se)o(gre)o(gating)h
+ (and)g(controlling)g(the)f(layout)h(of)g(heap-)-150 3391
+ y(based)20 b(data)f(structures.)-150 3524 y Fx(Categories)e(and)f
+ (Subject)f(Descriptors)75 b Fz(D.3.4)16 b([)p Fy(Pr)m(ocessor)o(s)p
+ Fz(]:)g(Compil-)-150 3607 y(ers,)i(Optimization,)h(Memory)h(management)
+ -150 3740 y Fx(General)f(T)-7 b(erms)75 b Fz(Algorithms,)18
+ b(Performance)-150 3873 y Fx(K)n(eyw)o(ords)76 b Fz(Recursi)n(v)o(e)41
+ b(data)h(structure,)f(data)g(layout,)g(cache,)h(static)-150
+ 3956 y(analysis,)19 b(pool)h(allocation)-150 4148 y FA(1.)91
+ b(Intr)n(oduction)-150 4264 y Fz(One)29 b(of)g(the)g(most)g(important)g
+ (tasks)g(for)g(modern)h(compilers)f(and)h(run-)-150 4347
+ y(time)f(systems)g(is)g(the)g(management)i(of)e(memory)h(usage)g(in)f
+ (programs,)-150 4430 y(including)22 b(safety)f(checking,)h
+ (optimization,)e(and)i(storage)f(management.)-150 4513
+ y(Unfortunately)-5 b(,)25 b(compilers)h(ha)o(v)o(e)f(pro)o(v)o(ed)g
+ (much)h(more)f(ef)n(fecti)n(v)o(e)g(at)f(an-)-150 4944
+ y Fw(Permission)19 b(to)h(mak)o(e)f(digital)h(or)f(hard)h(copies)e(of)i
+ (all)f(or)g(part)h(of)f(this)g(w)o(ork)h(for)g(personal)f(or)-150
+ 5010 y(classroom)d(use)f(is)h(granted)h(without)f(fee)g(pro)o(vided)h
+ (that)g(copies)e(are)h(not)h(made)f(or)g(distrib)o(uted)-150
+ 5077 y(for)e(pro\002t)g(or)g(commercial)g(adv)o(antage)e(and)h(that)h
+ (copies)f(bear)g(this)g(notice)h(and)f(the)g(full)h(citation)-150
+ 5143 y(on)i(the)g(\002rst)g(page.)f(T)-5 b(o)16 b(cop)o(y)h(otherwise,)
+ e(to)h(republish,)g(to)g(post)g(on)g(serv)o(ers)g(or)g(to)g(redistrib)o
+ (ute)-150 5210 y(to)f(lists,)e(requires)i(prior)h(speci\002c)e
+ (permission)g(and/or)h(a)g(fee.)-150 5293 y Fv(PLDI'05,)59
+ b Fw(June)14 b(12\22615,)h(2005,)f(Chicago,)g(Illinois,)g(USA.)-150
+ 5359 y(Cop)o(yright)120 5357 y(c)100 5359 y Fu(\015)g
+ Fw(2005)h(A)n(CM)f(1-59593-080-9/05/0006.)9 b(.)g(.)g($5.00.)2042
+ 1448 y Fz(alyzing)28 b(and)h(controlling)f(memory)h(access)f(patterns)g
+ (for)g(dense)h(arrays)2042 1531 y(than)g(for)g(pointer)o(-based)g(data)
+ g(structures.)g(A)f(k)o(e)o(y)i(dif)n(ference)f(between)2042
+ 1614 y(the)e(tw)o(o)h(is)f(that)g(compilers)h(ha)o(v)o(e)f(precise)h
+ (kno)n(wledge)h(of)e(the)h(runtime)2042 1697 y(layout)20
+ b(of)f(arrays)g(in)g(memory)-5 b(,)20 b(whereas)g(the)o(y)f(ha)o(v)o(e)
+ h(much)g(less)f(informa-)2042 1780 y(tion)24 b(about)i(comple)o(x)g
+ (data)e(structures)h(allocated)h(on)f(the)f(heap.)i(In)e(such)2042
+ 1863 y(\(pointer)o(-based\))g(data)h(structures,)e(both)i(the)f(relati)
+ n(v)o(e)g(layout)g(of)g Fy(distinct)2042 1946 y(data)k(structur)m(es)g
+ Fz(in)f(memory)h(\(which)f(af)n(fects)g(w)o(orking)h(set)f(sizes\))g
+ (and)2042 2029 y(the)e(relati)n(v)o(e)g(layout)g(of)g(nodes)h
+ Fy(within)e(a)h(single)h(data)f(structur)m(e)h Fz(\(which)2042
+ 2112 y(af)n(fects)e(memory)g(tra)o(v)o(ersal)g(patterns\))g(are)f(dif)n
+ (\002cult)h(to)f(predict.)h(One)g(di-)2042 2195 y(rect)f(consequence)j
+ (is)d(that)h(irre)o(gular)f(memory)i(tra)o(v)o(ersal)e(patterns)h
+ (often)2042 2278 y(ha)o(v)o(e)d(w)o(orse)g(performance,)h(both)f
+ (because)h(of)f(poor)g(spatial)g(locality)f(and)2042
+ 2361 y(because)k(techniques)g(lik)o(e)g(hardw)o(are)g(stride)f
+ (prefetching)h(are)f(not)g(ef)n(fec-)2042 2444 y(ti)n(v)o(e.)28
+ b(A)g(potentially)g(more)h(f)o(ar)o(-reaching)g(consequence)i(of)d(the)
+ g(lack)h(of)2042 2527 y(layout)17 b(information)h(is)e(that)h(man)o(y)g
+ (compiler)h(techniques)g(\(e.g.,)e(softw)o(are)2042 2610
+ y(prefetching,)28 b(data)g(layout)g(transformations,)g(and)g(safety)g
+ (analysis\))g(are)2042 2693 y(either)19 b(less)f(ef)n(fecti)n(v)o(e)i
+ (or)e(not)i(applicable)f(to)g(comple)o(x)h(data)f(structures.)2141
+ 2776 y(Despite)f(the)g(potential)g(importance)g(of)g(data)g(structure)g
+ (layouts,)g(com-)2042 2859 y(piler)h(transformations)g(for)g(pointer)o
+ (-intensi)n(v)o(e)h(programs)g(are)f(performed)2042 2942
+ y(primarily)24 b(using)g(pointer)h(and)g(dependence)h(analysis,)e(and)h
+ Fy(not)f(by)h(con-)2042 3025 y(tr)m(olling)j(and)h(using)g(information)
+ g(about)g(the)g(layout)g(of)f(pointer)o(-based)2042 3108
+ y(data)19 b(structur)m(es)p Fz(.)2141 3191 y(Se)n(v)o(eral)32
+ b(compiler)f(techniques)i(attempt)e(to)g(modify)h(the)f(layout)h(of)
+ 2042 3274 y(pointer)o(-based)21 b(data)g(structures)g(by)g(gi)n(ving)g
+ (hints)g(or)f(memory)h(layout)g(di-)2042 3357 y(recti)n(v)o(es)d(to)h
+ (a)f(runtime)h(library)f([12)q(],)g(memory)h(allocator)g([9],)f(or)g
+ (garbage)2042 3440 y(collector)23 b([28)q(,)f(29)q(].)g(None)h(of)g
+ (these)h(techniques)g(attempt)f Fy(to)g(e)o(xtr)o(act)f(in-)2042
+ 3523 y(formation)15 b(about)i(or)e(to)g(contr)m(ol)g
+ Fz(the)h(relati)n(v)o(e)f(layouts)g(of)h(objects)f(within)g(a)2042
+ 3606 y(data)j(structure)h(or)f(of)g(distinct)h(data)f(structures,)g
+ (nor)h(can)g(the)o(y)f(be)h(directly)2042 3690 y(e)o(xtended)h(to)e(do)
+ h(so.)f(Reliable)g(data)h(layout)g(information)g(and)g(control)g(are)
+ 2042 3773 y(necessary)f(for)f(data)h(layout)g(properties)f(to)h(be)f
+ (used)h(as)f(a)g(basis)h(for)f(further)2042 3856 y(compiler)i
+ (transformations.)2141 3939 y(An)38 b(alternati)n(v)o(e)g(approach)i
+ (for)e(se)o(gre)o(gating)g(heap)h(objects)f(under)2042
+ 4022 y(compiler)33 b(control)h(is)f(the)g(w)o(ork)h(on)g(automatic)f
+ (re)o(gion)h(inference)g(for)2042 4105 y(ML)24 b([45,)g(44)q(,)f(24)q
+ (])h(and)g(more)h(recently)f(for)g(Ja)o(v)n(a)g([14)q(,)g(10].)g(These)
+ g(tech-)2042 4188 y(niques)f(partition)f(objects)h(into)f(heap)h(re)o
+ (gions)g(based)g(on)g(lifetimes,)e(with)2042 4271 y(the)16
+ b(primary)g(goal)h(of)f(pro)o(viding)h(automatic)f(memory)h(management)
+ g(with)2042 4354 y(little)j(or)i(no)g(garbage)g(collection)g(for)g
+ (type-safe)g(languages.)h(In)e(contrast,)2042 4437 y(our)i(primary)g
+ (goal)g(in)f(this)g(w)o(ork)i(is)e(to)g(impro)o(v)o(e)h(program)h
+ (performance)2042 4520 y(by)19 b(se)o(gre)o(gating)g(heap)g(data)g
+ (structures)g(and)g(by)g(enabling)h(further)f(layout-)2042
+ 4603 y(based)i(optimizations)g(on)f(these)h(data)f(structures)g(\(in)g
+ (f)o(act,)g(we)g(do)h(not)f(try)2042 4686 y(to)c(reclaim)g(memory)h
+ (automatically)-5 b(,)16 b(e)o(xcept)h(in)f(limited)f(cases\).)h
+ (Because)2042 4769 y(of)k(their)f(dif)n(ferent)h(goals,)g(these)h
+ (techniques)g(do)f(not)g(e)o(xplore)h(ho)n(w)f(to)g(e)o(x-)2042
+ 4852 y(ploit)f(data)g(structure)h(partitioning)f(to)g(optimize)h
+ (memory)g(hierarchy)g(per)o(-)2042 4935 y(formance)26
+ b(and)h(do)f(not)g(support)h(non-type-safe)g(languages)g(lik)o(e)f(C)f
+ (and)2042 5018 y(C++,)17 b(which)h(are)g(important)g(for)f(man)o(y)h
+ (performance-sensiti)n(v)o(e)i(applica-)2042 5101 y(tions.)25
+ b(These)h(pre)n(vious)h(approaches)h(are)d(compared)i(with)f(our)g(w)o
+ (ork)g(in)2042 5184 y(more)19 b(detail)g(in)g(Section)f(10.)2141
+ 5267 y(This)24 b(paper)g(describes)g Fy(A)o(utomatic)f(P)-6
+ b(ool)24 b(Allocation)p Fz(,)f(a)h(transforma-)2042 5350
+ y(tion)i(frame)n(w)o(ork)i(for)f(arbitrary)f(imperati)n(v)o(e)h
+ (programs)h(that)e Fy(se)m(gr)m(e)m(gates)p eop end
+ %%Page: 2 2
+ TeXDict begin 2 1 bop -150 66 a Fy(distinct)20 b(instances)i(of)e
+ (pointer)o(-based)i(data)f(structur)m(es)h(in)e(the)h(heap)g(into)-150
+ 149 y(seper)o(ate)j(memory)h(pools)p Fz(,)f(and)g(allo)n(ws)f(dif)n
+ (ferent)h(heuristics)g(to)g(be)g(used)-150 232 y(to)d(partially)g
+ (control)h(the)g(internal)f(layout)h(of)f(those)h(data)g(structures.)f
+ (F)o(or)-150 315 y(e)o(xample,)d(each)h(distinct)f(instance)g(of)g(a)g
+ (list,)f(tree,)g(or)h(graph)h(identi\002ed)f(by)-150
+ 399 y(the)i(compiler)h(w)o(ould)g(be)f(allocated)h(to)f(a)g(separate)h
+ (pool.)f(The)g(paper)h(also)-150 482 y(describes)g(se)n(v)o(eral)g
+ (simple)f(optimizations)h(that)g(e)o(xploit)f(the)h(partitioning)-150
+ 565 y(of)j(data)h(structures)f(on)h(the)g(heap)g(to)f(further)g(impro)o
+ (v)o(e)h(program)h(perfor)o(-)-150 648 y(mance.)f(These)f
+ (optimizations)h(are)f(possible)h(because)h(Automatic)e(Pool)-150
+ 731 y(Allocation)19 b(is)f(a)h(rigorous)g(transformation)h(performed)f
+ (by)h(the)e(compiler)l(.)-150 814 y(In)30 b(other)g(w)o(ork,)g(we)g(ha)
+ o(v)o(e)g(used)h(Automatic)f(Pool)f(Allocation)h(and)h(its)-150
+ 897 y(underlying)e(pointer)f(analysis)h(to)e(de)n(v)o(elop)i(other)f
+ (ne)n(w)-5 b(,)28 b(compiler)g(tech-)-150 980 y(niques)k(operating)f
+ (at)g(the)g(\223macroscopic\224)h(le)n(v)o(el,)f(i.e.,)e(at)i(the)f(le)
+ n(v)o(el)h(of)-150 1063 y(entire)d(data)g(structures)g(\(rather)f(than)
+ i(indi)n(vidual)f(pointers)h(or)e(objects\).)-150 1146
+ y(These)d(include)h(techniques)h(for)e(pointer)g(compression)i([35)q(])
+ d(and)i(mem-)-150 1229 y(ory)j(safety)h(without)f(garbage)h(collection)
+ g([19].)f(These)g(techniques)h(are)-150 1312 y(v)o(ery)23
+ b(brie\003y)g(summarized)h(in)f(Section)g(7.)g(The)g(goal)g(of)g(this)g
+ (paper)h(is)e(to)-150 1395 y(describe)h(and)f(e)n(v)n(aluate)h(the)g
+ (pool)f(allocation)h(transformation)f(itself)g(and)-150
+ 1478 y(simple)d(optimizations)g(directly)g(based)h(on)g(it.)-50
+ 1561 y(More)26 b(speci\002cally)-5 b(,)26 b(Automatic)g(Pool)g
+ (Allocation)g(tak)o(es)g(a)g(conte)o(xt-)-150 1644 y(sensiti)n(v)o(e,)j
+ (\002eld-sensiti)n(v)o(e)f(points-to)h(graph)h(representation)f(and)h
+ (parti-)-150 1727 y(tions)g(the)g(heap)g(so)g(that)g(objects)g
+ (represented)h(by)f(the)g(same)g(points-to)-150 1813
+ y(graph)24 b(node)h(are)f(allocated)g(in)f(a)h(common)h(pool)1175
+ 1781 y Ft(1)1204 1813 y Fz(.)e(By)h(using)g(a)g(conte)o(xt-)-150
+ 1896 y(sensiti)n(v)o(e)29 b(analysis)g(with)f(\223heap)i(cloning,)-5
+ b(\224)29 b(distinct)f(data)h(structure)g(in-)-150 1979
+ y(stances)17 b(that)g(are)g(created)g(and)h(processed)g(by)g(the)f
+ (same)g(functions)h(can)f(be)-150 2062 y(se)o(gre)o(gated)23
+ b(into)f(dif)n(ferent)h(pools.)f(The)g(lifetime)g(of)g(each)h(pool)g
+ (is)f(deter)o(-)-150 2145 y(mined)g(by)f(bounding)j(the)d(lifetime)f
+ (of)h(pointers)h(to)f(objects)h(in)f(that)g(pool.)-150
+ 2228 y(The)27 b(end)h(result)f(of)g(pool)g(allocation)h(is)e(a)h
+ (partitioning)h(of)f(the)g(runtime)-150 2311 y(heap)32
+ b(into)g(pools,)f(a)h(transformed)g(program)g(that)g(allocates)f(and)h
+ (frees)-150 2394 y(memory)20 b(from)g(pools,)g(and)h(a)e(mapping)i
+ (from)f(each)g(static)f(pointer)i(to)e(the)-150 2477
+ y(pool)e(it)f(points)g(into.)h(Based)f(on)h(this)f(information,)h
+ (subsequent)h(optimiza-)-150 2560 y(tions)h(and)h(analyses)f(may)h(be)f
+ (applied)h(to)e(the)h(program.)-50 2643 y(The)34 b(Automatic)i(Pool)e
+ (Allocation)h(algorithm)g(supports)h(arbitrary)-150 2726
+ y(C)e(and)h(C++)g(programs,)g(including)h(programs)f(with)g(function)g
+ (point-)-150 2809 y(ers)18 b(and/or)g(virtual)f(functions,)i
+ (recursion,)f(v)n(arar)o(gs)g(functions,)g(non-type-)-150
+ 2892 y(safe)i(memory)g(accesses)h(\(e.g.,)e(via)g(pointer)h(casts)g
+ (and)g(unions\),)h(setjmp/-)-150 2975 y(longjmp,)e(and)g(e)o
+ (xceptions.)g(One)g(of)f(the)h(k)o(e)o(y)g(strengths)g(of)f(the)h
+ (algorithm)-150 3058 y(is)24 b(a)h(simple)g(strate)o(gy)f(for)h
+ (correctly)g(handling)h(indirect)f(calls,)f(which)h(is)-150
+ 3141 y(dif)n(\002cult)j(because)h(dif)n(ferent)g(functions)g(called)f
+ (via)h(a)f(function)h(pointer)-150 3224 y(may)i(ha)o(v)o(e)f(dif)n
+ (ferent)g(allocation)h(and)f(deallocation)i(beha)o(vior)e(and)h(be-)
+ -150 3307 y(cause)d(\(in)f(C)f(or)h(C++\))g(may)h(e)n(v)o(en)g(ha)o(v)o
+ (e)f(dif)n(ferent)g(signatures.)h(The)f(al-)-150 3390
+ y(gorithm)d(solv)o(es)g(these)f(comple)o(x)i(issues)f(via)f(a)g(relati)
+ n(v)o(ely)h(simple)f(graph)-150 3473 y(transformation)i(phase,)f(while)
+ g(k)o(eeping)h(the)f(code)h(transformation)f(pro-)-150
+ 3556 y(cess)18 b(essentially)f(unchanged.)j(The)d(transformation)h(w)o
+ (orks)g(correctly)f(for)-150 3639 y(incomplete)29 b(programs,)h(by)f
+ (only)g(pool)g(allocating)g(memory)g(that)g(does)-150
+ 3722 y(not)19 b(escape)h(the)f(scope)h(of)f(analysis.)-50
+ 3805 y(Automatic)25 b(Pool)g(Allocation)g(can)h(directly)f(impro)o(v)o
+ (e)h(program)g(per)o(-)-150 3888 y(formance)e(in)g(se)n(v)o(eral)f(w)o
+ (ays.)h(First,)e(since)i(programs)g(typically)g(tra)o(v)o(erse)-150
+ 3971 y(and)19 b(process)g(only)h(one)f(or)f(a)h(fe)n(w)f(data)h
+ (structures)f(at)h(a)f(time,)g(se)o(gre)o(gating)-150
+ 4054 y(logical)29 b(data)g(structures)h(reduces)f(the)g(memory)h(w)o
+ (orking)g(sets)f(of)g(pro-)-150 4138 y(grams,)i(potentially)g(impro)o
+ (ving)h(both)f(cache)g(and)h(TLB)d(performance.)-150
+ 4221 y(Second,)16 b(in)f(certain)g(cases,)g(the)h(allocation)f(order)h
+ (within)f(each)h(data)f(struc-)-150 4304 y(ture)24 b(pool)i(will)d
+ (match)i(the)f(subsequent)j(tra)o(v)o(ersal)d(order)h(\(e.g.,)e(if)h(a)
+ h(tree)-150 4387 y(is)18 b(created)h(and)h(then)f(processed)h(in)e
+ (preorder\),)h(impro)o(ving)h(spatial)e(local-)-150 4470
+ y(ity)-5 b(.)21 b(Intuiti)n(v)o(ely)-5 b(,)22 b(both)g(bene\002ts)g
+ (arise)g(because)h(the)e(layout)i(of)e(indi)n(vidual)-150
+ 4553 y(data)30 b(structures)g(is)f(unaf)n(fected)i(by)f(interv)o(ening)
+ h(allocations)f(for)g(other)-150 4636 y(data)24 b(structures,)g(and)g
+ (less)g(lik)o(ely)g(to)f(be)h(scattered)g(around)h(in)f(the)g(heap.)
+ -150 4719 y(Third,)16 b(in)h(some)g(cases,)g(the)f(tra)o(v)o(ersal)g
+ (order)h(may)g(e)n(v)o(en)h(become)g(a)e(simple)-150
+ 4802 y(linear)g(stride,)f(allo)n(wing)i(more)f(ef)n(fecti)n(v)o(e)h
+ (hardw)o(are)g(prefetching)g(than)f(be-)-150 4885 y(fore.)i(Note)h
+ (that)f(Automatic)h(Pool)f(Allocation)h(can)g(also)f(potentially)h
+ (hurt)-150 4968 y(performance)30 b(in)e(tw)o(o)h(w)o(ays:)g(by)g
+ (separating)h(data)e(that)h(are)f(frequently)-150 5051
+ y(accessed)h(together)f(and)h(by)f(allocating)g(nearly-empty)h(pages)g
+ (to)f(small)p -150 5289 997 3 v -150 5340 a Ft(1)-113
+ 5363 y Fw(Less)d(aggressi)o(v)o(e)f(pointer)j(analyses)d(can)i(also)f
+ (be)h(used)f(b)o(ut)h(may)g(not)g(distinguish)g(data)-150
+ 5430 y(structure)15 b(instances)e(or)i(may)g(gi)o(v)o(e)f(less)g
+ (precise)g(information)i(about)f(their)g(internal)g(structure.)2042
+ 66 y Fz(pools)26 b(\(some)g(of)g(the)f(techniques)i(described)g(later)e
+ (are)h(intended)g(to)g(ad-)2042 149 y(dress)19 b(these)g(issues\).)2141
+ 232 y(This)c(paper)h(describes)g(se)n(v)o(eral)g(optimizations)f(based)
+ i(on)e(pool)h(alloca-)2042 315 y(tion)h(that)g(further)h(impro)o(v)o(e)
+ g(program)g(performance.)g(First,)e(we)h(sho)n(w)h(that)2042
+ 399 y(in)27 b(certain)h(cases,)g(indi)n(vidual)h Fs(free)f
+ Fz(operations)h(on)f(objects)g(in)g(a)f(pool)2042 482
+ y(can)h(be)h(eliminated)f(and)h(the)f(entire)g(memory)h(for)f(the)g
+ (pool)h(reclaimed)2042 565 y(when)21 b(the)g(pool)g(is)f(destro)o(yed)i
+ (\(without)f(increasing)g(memory)h(consump-)2042 648
+ y(tion\).)29 b(Second,)g(we)g(describe)h(se)n(v)o(eral)g(customized)g
+ (memory)g(manage-)2042 731 y(ment)25 b(choices)h(that)f(can)h(be)f
+ (used)h(at)f(run)h(time)e(for)h(pools)h(with)f(speci\002c)2042
+ 814 y(characteristics.)c(The)h(k)o(e)o(y)h(to)f(some)g(of)g(these)g
+ (optimizations)g(is)g(that)f(dif-)2042 897 y(ferent)h(logical)h(data)g
+ (structures)f(tend)h(to)g(be)f(used)i(in)e(dif)n(ferent)h(b)o(ut)f
+ (well-)2042 980 y(de\002ned)e(w)o(ays)g(that)f(can)h(be)g(e)o
+ (xploited,)g(whereas)g(simply)g(se)o(gre)o(gating)g(by)2042
+ 1063 y(type,)26 b(lifetime,)f(or)i(runtime)f(pro\002le)g(information)h
+ (w)o(ould)g(not)g(typically)2042 1146 y(be)19 b(suf)n(\002cient)g(to)g
+ (apply)g(all)g(these)g(optimizations.)2141 1229 y(W)-6
+ b(e)17 b(e)n(v)n(aluate)i(the)f(performance)h(impact)e(of)h(Automatic)g
+ (Pool)f(Alloca-)2042 1312 y(tion)g(and)i(the)e(subsequent)j
+ (optimizations,)e(using)g(heap-intensi)n(v)o(e)h(bench-)2042
+ 1395 y(marks)h(from)g(the)g(SPEC,)d(PtrDist)i([2],)g(Olden)h([39)q(])f
+ (and)i(FreeBench)f([40])2042 1478 y(benchmark)j(suites,)f(and)h(a)e(fe)
+ n(w)h(standalone)h(applications.)g(W)-6 b(e)21 b(\002nd)h(that)2042
+ 1561 y(man)o(y)d(of)g(these)g(programs)g(speed)h(up)f(by)g(10-25\045,)g
+ (tw)o(o)g(by)g(about)g(2x)g(and)2042 1644 y(tw)o(o)e(small)g
+ (benchmarks)i(by)f(more)f(than)h(10x.)f(Other)g(programs)h(are)g(unaf-)
+ 2042 1727 y(fected,)h(and)h(importantly)-5 b(,)20 b(none)g(are)g(hurt)f
+ (signi\002cantly)h(by)g(the)g(transfor)o(-)2042 1810
+ y(mation.)j(W)-6 b(e)22 b(also)h(sho)n(w)g(that)g(the)g(total)f
+ (compile)i(time)e(for)h(the)g(transfor)o(-)2042 1893
+ y(mation)h(\(including)h(the)f(conte)o(xt-sensiti)n(v)o(e)h(pointer)f
+ (analysis)h(that)f(com-)2042 1976 y(putes)g(its)f(input)h(points-to)g
+ (graphs\))g(is)g(v)o(ery)g(small,)f(requiring)h(1.25)g(sec-)2042
+ 2059 y(onds)c(or)f(less)g(for)f(programs)i(up)g(to)f(100K)h(lines)e(of)
+ h(source)h(code.)g(Finally)-5 b(,)2042 2142 y(the)25
+ b(subsequent)h(optimizations)g(contrib)o(ute)f(impro)o(v)o(ements)g
+ (\(o)o(v)o(er)g(pool)2042 2225 y(allocation)19 b(alone\))g(by)f
+ (10-40\045)i(for)e(eight)h(cases)g(and)g(0-10\045)g(for)f(the)h(oth-)
+ 2042 2308 y(ers.)27 b(W)-6 b(e)27 b(also)g(sho)n(w)i(that)e(cache)h
+ (and/or)g(TLB)f(performance)h(impro)o(v)o(es)2042 2391
+ y(signi\002cantly)33 b(in)g(all)f(case)h(with)g(signi\002cant)g
+ (speedups,)h(and)g(in)e(man)o(y)2042 2474 y(cases)27
+ b(hit)f(rates)g(are)g(impro)o(v)o(ed)i(roughly)f(similarly)f(at)g(all)g
+ (le)n(v)o(els)h(of)f(the)2042 2557 y(memory)18 b(hierarchy)f(\(L1)g
+ (and)h(L2)f(caches)h(and)g(TLB\),)d(indicating)j(that)f(the)2042
+ 2640 y(performance)26 b(impro)o(v)o(ements)f(are)g(primarily)f(due)h
+ (to)f(reduced)i(w)o(orking)2042 2723 y(sets.)2141 2806
+ y(Ov)o(erall,)19 b(this)f(paper)i(mak)o(es)g(the)f(follo)n(wing)g
+ (contrib)o(utions:)2085 2924 y Fr(\017)2150 2931 y Fz(W)-6
+ b(e)33 b(propose)j(a)e(no)o(v)o(el)h(approach)g(to)f(impro)o(ving)i
+ (performance)f(of)2150 3014 y(pointer)c(intensi)n(v)o(e)h(programs:)f
+ (se)o(gre)o(gating)h(and)g(controlling)f(heap)2150 3097
+ y(layout)24 b(of)g(pointer)o(-based)h(data)g(structure)f(instances)g
+ (and)h(using)g(fur)o(-)2150 3180 y(ther)16 b(compiler)g(optimizations)h
+ (that)f(e)o(xploit)g(this)g(layout)h(information.)2085
+ 3272 y Fr(\017)2150 3279 y Fz(W)-6 b(e)20 b(present)h(a)f(ne)n(w)h
+ (compiler)g(algorithm)g(for)f(partitioning)h(heap)h(ob-)2150
+ 3362 y(jects)15 b(in)h(C)g(and)h(C++)e(programs)i(that)f(is)g(based)h
+ (on)f(a)g(conte)o(xt-sensiti)n(v)o(e)2150 3445 y(pointer)21
+ b(analysis,)g(including)h(a)f(no)o(v)o(el)g(and)h(simple)f(strate)o(gy)
+ g(for)g(cor)o(-)2150 3528 y(rect)26 b(handling)i(of)f(indirect)g
+ (function)g(calls)g(in)f(arbitrary)h(\(including)2150
+ 3611 y(non-type-safe\))20 b(programs.)2085 3704 y Fr(\017)2150
+ 3711 y Fz(W)-6 b(e)30 b(present)i(se)n(v)o(eral)f(simple)g(b)o(ut)f(no)
+ o(v)o(el)i(optimizations)f(that)g(opti-)2150 3794 y(mize)24
+ b(the)g(performance)h(of)f(indi)n(vidual)g(data)h(structure)f(pools)g
+ (based)2150 3877 y(on)c(their)f(speci\002c)g(patterns)h(of)f(memory)h
+ (deallocation)h(or)e(type)h(infor)o(-)2150 3960 y(mation)26
+ b(for)g(pool)g(contents.)h(In)f(pre)n(vious)h(w)o(ork)f([19)q(,)f(35)q
+ (],)g(we)h(ha)o(v)o(e)2150 4043 y(demonstrated)20 b(other)f(uses)h(of)e
+ (Automatic)i(Pool)e(Allocation)h(as)g(well.)2085 4136
+ y Fr(\017)2150 4143 y Fz(W)-6 b(e)30 b(present)i(a)e(detailed)i(e)o
+ (xperimental)f(e)n(v)n(aluation)h(of)f(the)g(perfor)o(-)2150
+ 4226 y(mance)24 b(impact)f(of)g(Automatic)g(Pool)g(Allocation,)g(sho)n
+ (wing)h(that)f(the)2150 4309 y(transformation)39 b(can)h
+ (signi\002cantly)f(impro)o(v)o(e)h(memory)g(hierarchy)2150
+ 4392 y(performance)27 b(and)g(o)o(v)o(erall)f(running)h(times)e(of)h
+ (heap-intensi)n(v)o(e)i(pro-)2150 4475 y(grams,)h(and)h(that)g(the)f
+ (transformation)h(has)g(v)o(ery)g(lo)n(w)f(compilation)2150
+ 4558 y(time)18 b(in)h(practice.)2141 4682 y(Section)28
+ b(2)g(de\002nes)g(the)f(assumptions)i(we)e(mak)o(e)i(about)f(the)g
+ (points-)2042 4765 y(to)22 b(graph)i(input)e(to)h(the)f
+ (transformation.)h(Section)f(3)h(describes)g(the)g(main)2042
+ 4848 y(pool)c(allocation)g(transformation,)g(and)g(Section)g(4)f
+ (describes)i(se)n(v)o(eral)f(im-)2042 4932 y(portant)i(re\002nements.)g
+ (Sections)g(5)g(and)g(6)g(de\002ne)g(a)g(suite)g(of)g(simple)f(pool)
+ 2042 5015 y(optimizations)i(and)g(describe)h(heuristics)e(for)h(pool)g
+ (collocation)h(\(respec-)2042 5098 y(ti)n(v)o(ely\).)i(Section)h(7)h
+ (describes)f(the)h(k)o(e)o(y)f(properties)h(pro)o(vided)g(by)g(Auto-)
+ 2042 5181 y(matic)16 b(Pool)h(Allocation)g(and)h(tw)o(o)f(e)o(xample)g
+ (clients,)g(Section)f(8)h(describes)2042 5264 y(our)i(implementation,)h
+ (and)g(Section)f(9)h(contains)g(our)g(e)o(xperimental)g(e)n(v)n(al-)
+ 2042 5347 y(uation)c(of)h(the)f(transformation.)g(Finally)-5
+ b(,)16 b(Section)g(10)g(contrasts)h(this)f(w)o(ork)2042
+ 5430 y(with)i(prior)h(w)o(ork)h(in)f(the)g(\002eld)f(and)i(Section)e
+ (11)i(concludes)g(the)f(paper)l(.)p eop end
+ %%Page: 3 3
+ TeXDict begin 3 2 bop -141 96 a Fq(s)9 b(t)g(r)g(u)g(c)g(t)59
+ b Fw(l)14 b(i)f(s)h(t)49 b Fu(f)g Fw(l)14 b(i)g(s)f(t)42
+ b Fu(\003)13 b Fw(N)5 b(e)g(x)g(t)19 b(;)50 b Fq(i)9
+ b(n)g(t)39 b Fu(\003)13 b Fw(D)6 b(a)g(t)g(a)17 b(;)38
+ b Fu(g)12 b Fw(;)-136 163 y(l)i(i)f(s)h(t)21 b Fu(\003)37
+ b Fw(c)9 b(r)g(e)g(a)g(t)g(e)g(n)g(o)g(d)g(e)15 b(\()i
+ Fq(i)9 b(n)g(t)39 b Fu(\003)13 b Fw(D)6 b(a)g(t)g(a)15
+ b(\))33 b Fu(f)-67 229 y Fw(l)14 b(i)g(s)f(t)43 b Fu(\003)6
+ b Fw(N)o(e)o(w)33 b(=)43 b(m)7 b(a)g(l)g(l)g(o)g(c)17
+ b(\()h Fq(s)10 b(i)g(z)g(e)g(o)g(f)18 b Fw(\()k(l)14
+ b(i)g(s)f(t)26 b(\))13 b(\))g(;)-81 296 y(N)o(e)o(w)-11
+ b Fu(\000)-17 b Fp(>)m Fw(D)6 b(a)g(t)g(a)41 b(=)h(D)6
+ b(a)g(t)g(a)15 b(;)-73 362 y Fq(r)7 b(e)g(t)g(u)g(r)g(n)40
+ b Fw(N)o(e)o(w)7 b(;)-150 428 y Fu(g)-143 495 y Fq(v)g(o)g(i)g(d)52
+ b Fw(s)10 b(p)h(l)h(i)f(t)g(c)g(l)h(o)f(n)g(e)19 b(\()j(l)13
+ b(i)h(s)g(t)42 b Fu(\003)7 b Fw(L)13 b(,)54 b(l)14 b(i)g(s)f(t)40
+ b Fu(\003)6 b(\003)f Fw(R1)15 b(,)55 b(l)14 b(i)g(s)f(t)39
+ b Fu(\003)6 b(\003)g Fw(R)q(2)j(\))34 b Fu(f)-69 628
+ y Fq(i)12 b(f)50 b Fw(\()12 b(L)33 b(=)10 b(=)34 b(0)10
+ b(\))35 b Fu(f)f(\003)10 b Fw(R)q(1)33 b(=)e Fu(\003)10
+ b Fw(R)q(2)39 b(=)h(0)12 b(;)47 b Fq(r)7 b(e)g(t)g(u)g(r)g(n)16
+ b Fw(;)35 b Fu(g)-69 694 y Fq(i)12 b(f)50 b Fw(\()21
+ b(s)9 b(o)g(m)g(e)p 229 694 18 4 v 37 w(p)g(r)g(e)g(d)g(i)g(c)g(a)g(t)g
+ (e)15 b(\()8 b(L)-9 b Fu(\000)-17 b Fp(>)m Fw(D)6 b(a)g(t)g(a)16
+ b(\))11 b(\))35 b Fu(f)-10 760 y(\003)q Fw(R)q(1)h(=)45
+ b(c)9 b(r)g(e)g(a)g(t)g(e)g(n)g(o)g(d)g(e)14 b(\()8 b(L)-9
+ b Fu(\000)-17 b Fp(>)m Fw(D)6 b(a)g(t)g(a)17 b(\))12
+ b(;)1 827 y(s)e(p)i(l)f(i)g(t)h(c)e(l)i(o)f(n)g(e)19
+ b(\()8 b(L)-10 b Fu(\000)-17 b Fp(>)l Fw(N)t(e)t(x)t(t)18
+ b(,)30 b(&)8 b(\()g Fu(\003)g Fw(R)q(1)m(\))-6 b Fu(\000)g
+ Fp(>)q Fw(N)t(e)t(x)t(t)24 b(,)42 b(R)q(2)11 b(\))h(;)-73
+ 893 y Fu(g)38 b Fq(e)10 b(l)g(s)f(e)39 b Fu(f)-10 960
+ y(\003)q Fw(R)q(2)d(=)45 b(c)9 b(r)g(e)g(a)g(t)g(e)g(n)g(o)g(d)g(e)14
+ b(\()8 b(L)-9 b Fu(\000)-17 b Fp(>)m Fw(D)6 b(a)g(t)g(a)17
+ b(\))12 b(;)1 1026 y(s)e(p)i(l)f(i)g(t)h(c)e(l)i(o)f(n)g(e)19
+ b(\()8 b(L)-10 b Fu(\000)-17 b Fp(>)l Fw(N)t(e)t(x)t(t)24
+ b(,)41 b(R1)9 b(,)30 b(&)8 b(\()g Fu(\003)h Fw(R)q(2)m(\))-6
+ b Fu(\000)g Fp(>)r Fw(N)5 b(e)g(x)g(t)17 b(\))12 b(;)-80
+ 1093 y Fu(g)q(g)-141 1159 y Fq(i)d(n)g(t)57 b Fw(p)12
+ b(r)f(o)h(c)f(e)h(s)f(s)g(l)h(i)f(s)g(t)20 b(\()i(l)13
+ b(i)h(s)g(t)20 b Fu(\003)29 b Fw(L)8 b(\))33 b Fu(f)-67
+ 1225 y Fw(l)14 b(i)g(s)f(t)43 b Fu(\003)5 b Fw(A)g(,)35
+ b Fu(\003)9 b Fw(B)f(,)35 b Fu(\003)13 b Fw(t)t(m)t(p)g(;)-68
+ 1358 y Fo(/)g(/)53 b(C)6 b(l)g(o)g(n)g(e)41 b(L)16 b(,)54
+ b(s)11 b(p)i(l)f(i)h(t)f(t)h(i)f(n)h(g)53 b(n)6 b(o)g(d)g(e)g(s)51
+ b(i)8 b(n)57 b(l)14 b(i)g(s)f(t)49 b(A)12 b(,)46 b(a)t(n)t(d)40
+ b(B)9 b(.)-69 1425 y Fw(s)i(p)g(l)g(i)g(t)h(c)f(l)g(o)g(n)g(e)19
+ b(\()8 b(L)f(,)29 b(&)5 b(A)s(,)29 b(&)6 b(B)k(\))h(;)-71
+ 1491 y(p)f(r)g(o)g(c)g(e)g(s)g(s)g(P)g(o)g(r)g(t)g(i)g(o)g(n)i(\()t(A)e
+ (\))k(;)90 b Fo(/)12 b(/)55 b(P)8 b(r)g(o)g(c)g(e)g(s)g(s)51
+ b(f)14 b(i)f(r)g(s)g(t)63 b(l)13 b(i)h(s)g(t)-71 1557
+ y Fw(p)c(r)g(o)g(c)g(e)g(s)g(s)g(P)g(o)g(r)g(t)g(i)g(o)g(n)i(\()6
+ b(B)11 b(\))j(;)90 b Fo(/)12 b(/)56 b(p)8 b(r)g(o)g(c)g(e)g(s)g(s)51
+ b(s)7 b(e)g(c)g(o)g(n)g(d)53 b(l)14 b(i)g(s)f(t)-68 1690
+ y(/)g(/)57 b(f)10 b(r)g(e)f(e)44 b(A)k(l)14 b(i)g(s)f(t)-73
+ 1757 y Fq(w)7 b(h)g(i)g(l)g(e)46 b Fw(\()8 b(A)g(\))38
+ b Fu(f)j Fw(t)t(m)t(p)e(=)33 b(A)-13 b Fu(\000)c Fp(>)l
+ Fw(N)5 b(e)g(x)g(t)19 b(;)51 b(f)10 b(r)g(e)g(e)17 b(\()5
+ b(A)10 b(\))k(;)38 b(A)33 b(=)39 b(t)t(m)t(p)13 b(;)35
+ b Fu(g)-68 1823 y Fo(/)13 b(/)57 b(f)10 b(r)g(e)f(e)44
+ b(B)k(l)14 b(i)g(s)f(t)-73 1890 y Fq(w)7 b(h)g(i)g(l)g(e)46
+ b Fw(\()10 b(B)f(\))38 b Fu(f)j Fw(t)t(m)t(p)e(=)34 b(B)-11
+ b Fu(\000)-17 b Fp(>)l Fw(N)5 b(e)g(x)g(t)19 b(;)51 b(f)10
+ b(r)g(e)g(e)17 b(\()7 b(B)k(\))j(;)40 b(B)34 b(=)39 b(t)t(m)t(p)13
+ b(;)35 b Fu(g)-150 2022 y(g)297 2139 y Fw(\(a\))15 b(Input)h(C)e
+ (program)h(manipulating)h(link)o(ed)f(lists)1865 96 y
+ Fq(s)9 b(t)g(r)g(u)g(c)g(t)59 b Fw(l)14 b(i)f(s)h(t)49
+ b Fu(f)g Fw(l)14 b(i)g(s)f(t)42 b Fu(\003)13 b Fw(N)5
+ b(e)g(x)g(t)19 b(;)50 b Fq(i)9 b(n)g(t)39 b Fu(\003)13
+ b Fw(D)6 b(a)g(t)g(a)17 b(;)38 b Fu(g)12 b Fw(;)1870
+ 163 y(l)i(i)f(s)h(t)21 b Fu(\003)37 b Fw(c)9 b(r)g(e)g(a)g(t)g(e)g(n)g
+ (o)g(d)g(e)15 b(\()f(P)7 b(o)g(o)g(l)35 b Fu(\003)6 b
+ Fw(P)o(D)11 b(,)51 b Fq(i)9 b(n)g(t)39 b Fu(\003)13 b
+ Fw(D)6 b(a)g(t)g(a)15 b(\))33 b Fu(f)1939 229 y Fw(l)14
+ b(i)g(s)f(t)43 b Fu(\003)6 b Fw(N)o(e)o(w)34 b(=)45 b(p)10
+ b(o)g(o)f(l)h(a)g(l)g(l)g(o)f(c)18 b(\()7 b(P)o(D)k(,)51
+ b Fq(s)10 b(i)g(z)g(e)g(o)g(f)18 b Fw(\()k(l)14 b(i)g(s)f(t)26
+ b(\))13 b(\))g(;)1925 296 y(N)o(e)o(w)-11 b Fu(\000)-17
+ b Fp(>)m Fw(D)6 b(a)g(t)g(a)42 b(=)f(D)6 b(a)g(t)g(a)15
+ b(;)1933 362 y Fq(r)7 b(e)g(t)g(u)g(r)g(n)40 b Fw(N)o(e)o(w)7
+ b(;)1856 428 y Fu(g)1863 495 y Fq(v)g(o)g(i)g(d)52 b
+ Fw(s)10 b(p)i(l)f(i)g(t)g(c)g(l)h(o)f(n)g(e)19 b(\()c(P)7
+ b(o)g(o)g(l)34 b Fu(\003)7 b Fw(PD1)15 b(,)48 b(P)7 b(o)g(o)g(l)35
+ b Fu(\003)7 b Fw(PD2)12 b(,)2428 561 y(l)h(i)h(s)g(t)42
+ b Fu(\003)7 b Fw(L)13 b(,)54 b(l)14 b(i)g(s)f(t)40 b
+ Fu(\003)6 b(\003)f Fw(R1)15 b(,)55 b(l)14 b(i)g(s)f(t)39
+ b Fu(\003)6 b(\003)g Fw(R)q(2)j(\))34 b Fu(f)1937 628
+ y Fq(i)12 b(f)50 b Fw(\()12 b(L)33 b(=)10 b(=)34 b(0)10
+ b(\))35 b Fu(f)f(\003)10 b Fw(R)q(1)33 b(=)e Fu(\003)10
+ b Fw(R)q(2)39 b(=)h(0)12 b(;)47 b Fq(r)7 b(e)g(t)g(u)g(r)g(n)16
+ b Fw(;)35 b Fu(g)1937 694 y Fq(i)12 b(f)50 b Fw(\()21
+ b(s)9 b(o)g(m)g(e)p 2235 694 V 37 w(p)g(r)g(e)g(d)g(i)g(c)g(a)g(t)g(e)
+ 15 b(\()8 b(L)-9 b Fu(\000)-17 b Fp(>)m Fw(D)6 b(a)g(t)g(a)16
+ b(\))11 b(\))35 b Fu(f)1996 760 y(\003)q Fw(R)q(1)h(=)45
+ b(c)9 b(r)g(e)g(a)g(t)g(e)g(n)g(o)g(d)g(e)14 b(\()9 b(PD1)14
+ b(,)41 b(L)-9 b Fu(\000)-17 b Fp(>)m Fw(D)6 b(a)g(t)g(a)17
+ b(\))12 b(;)2007 827 y(s)e(p)i(l)f(i)g(t)h(c)f(l)g(o)g(n)g(e)19
+ b(\()8 b(PD1)15 b(,)42 b(PD2)15 b(,)41 b(L)-10 b Fu(\000)-17
+ b Fp(>)l Fw(N)t(e)t(x)t(t)18 b(,)29 b(&)8 b(\()g Fu(\003)h
+ Fw(R)q(1)m(\))-6 b Fu(\000)g Fp(>)q Fw(N)t(e)t(x)t(t)24
+ b(,)41 b(R)q(2)12 b(\))g(;)1933 893 y Fu(g)38 b Fq(e)10
+ b(l)g(s)f(e)39 b Fu(f)1996 960 y(\003)q Fw(R)q(2)d(=)45
+ b(c)9 b(r)g(e)g(a)g(t)g(e)g(n)g(o)g(d)g(e)14 b(\()9 b(PD2)14
+ b(,)41 b(L)-9 b Fu(\000)-17 b Fp(>)m Fw(D)6 b(a)g(t)g(a)17
+ b(\))12 b(;)2007 1026 y(s)e(p)i(l)f(i)g(t)h(c)f(l)g(o)g(n)g(e)19
+ b(\()8 b(PD1)15 b(,)42 b(PD2)15 b(,)41 b(L)-10 b Fu(\000)-17
+ b Fp(>)l Fw(N)t(e)t(x)t(t)23 b(,)42 b(R1)9 b(,)30 b(&)8
+ b(\()g Fu(\003)g Fw(R)q(2)m(\))-6 b Fu(\000)g Fp(>)r
+ Fw(N)5 b(e)g(x)g(t)18 b(\))12 b(;)1926 1093 y Fu(g)q(g)1865
+ 1159 y Fq(i)d(n)g(t)57 b Fw(p)12 b(r)f(o)h(c)f(e)h(s)f(s)g(l)h(i)f(s)g
+ (t)20 b(\()i(l)13 b(i)h(s)g(t)20 b Fu(\003)29 b Fw(L)8
+ b(\))33 b Fu(f)1939 1225 y Fw(l)14 b(i)g(s)f(t)43 b Fu(\003)5
+ b Fw(A)g(,)35 b Fu(\003)9 b Fw(B)f(,)35 b Fu(\003)13
+ b Fw(t)t(m)t(p)k(;)82 b(P)7 b(o)g(o)g(l)41 b(PD1)15 b(,)41
+ b(PD2)11 b(;)1935 1292 y(p)f(o)g(o)g(l)g(c)f(r)h(e)g(a)f(t)h(e)h(\()r
+ (&)r(PD1)k(,)52 b Fq(s)9 b(i)i(z)e(e)h(o)g(f)19 b Fw(\()i(l)14
+ b(i)g(s)f(t)26 b(\))f(,)38 b(8)12 b(\))g(;)1935 1358
+ y(p)e(o)g(o)g(l)g(c)f(r)h(e)g(a)f(t)h(e)h(\()r(&)r(PD2)k(,)52
+ b Fq(s)9 b(i)i(z)e(e)h(o)g(f)19 b Fw(\()i(l)14 b(i)g(s)f(t)26
+ b(\))f(,)38 b(8)12 b(\))g(;)1937 1425 y(s)f(p)g(l)g(i)h(t)f(c)g(l)g(o)g
+ (n)h(e)g(\()r(&)r(PD1)d(,)30 b(&)8 b(PD2)15 b(,)41 b(L)6
+ b(,)29 b(&)6 b(A)s(,)29 b(&)6 b(B)j(\))j(;)1935 1491
+ y(p)e(r)g(o)g(c)g(e)g(s)g(s)g(P)g(o)g(r)g(t)g(i)g(o)g(n)i(\()t(A)e(\))k
+ (;)90 b Fo(/)12 b(/)55 b(P)8 b(r)g(o)g(c)g(e)g(s)g(s)51
+ b(f)14 b(i)f(r)g(s)g(t)63 b(l)13 b(i)h(s)g(t)1935 1557
+ y Fw(p)c(r)g(o)g(c)g(e)g(s)g(s)g(P)g(o)g(r)g(t)g(i)g(o)g(n)i(\()6
+ b(B)11 b(\))j(;)90 b Fo(/)12 b(/)56 b(p)8 b(r)g(o)g(c)g(e)g(s)g(s)51
+ b(s)7 b(e)g(c)g(o)g(n)g(d)54 b(l)13 b(i)h(s)f(t)1938
+ 1690 y(/)g(/)57 b(f)10 b(r)g(e)f(e)44 b(A)k(l)14 b(i)g(s)f(t)26
+ b(:)50 b(t)11 b(h)g(i)g(s)53 b(l)7 b(o)g(o)g(p)54 b(i)10
+ b(s)55 b(e)10 b(v)g(e)f(n)h(t)h(u)f(a)g(l)g(l)g(y)54
+ b(e)9 b(l)g(i)g(m)g(i)g(n)g(a)g(t)g(e)g(d)1933 1757 y
+ Fq(w)e(h)g(i)g(l)g(e)46 b Fw(\()8 b(A)g(\))38 b Fu(f)j
+ Fw(t)t(m)t(p)e(=)33 b(A)-13 b Fu(\000)c Fp(>)l Fw(N)5
+ b(e)g(x)g(t)20 b(;)50 b(p)9 b(o)g(o)g(l)g(f)g(r)g(e)g(e)15
+ b(\()r(&)r(PD1)g(,)38 b(A)10 b(\))k(;)38 b(A)33 b(=)39
+ b(t)t(m)t(p)13 b(;)34 b Fu(g)1938 1823 y Fo(/)13 b(/)57
+ b(f)10 b(r)g(e)f(e)44 b(B)k(l)14 b(i)g(s)f(t)60 b(t)11
+ b(h)g(i)h(s)52 b(l)7 b(o)g(o)g(p)54 b(i)10 b(s)55 b(e)10
+ b(v)g(e)f(n)i(t)f(u)g(a)g(l)g(l)g(y)54 b(e)9 b(l)g(i)g(m)g(i)g(n)g(a)g
+ (t)g(e)g(d)1933 1890 y Fq(w)e(h)g(i)g(l)g(e)46 b Fw(\()10
+ b(B)f(\))38 b Fu(f)j Fw(t)t(m)t(p)e(=)34 b(B)-11 b Fu(\000)-17
+ b Fp(>)l Fw(N)5 b(e)g(x)g(t)20 b(;)50 b(p)9 b(o)g(o)g(l)g(f)g(r)g(e)g
+ (e)15 b(\()r(&)r(PD2)g(,)39 b(B)12 b(\))i(;)40 b(B)34
+ b(=)39 b(t)t(m)t(p)13 b(;)34 b Fu(g)1935 1956 y Fw(p)9
+ b(o)g(o)g(l)g(d)g(e)g(s)g(t)g(r)g(o)g(y)j(\()r(&)r(PD1)j(\))f(;)51
+ b(p)9 b(o)g(o)g(l)g(d)g(e)g(s)g(t)g(r)g(o)g(y)k(\()r(&)r(PD2)i(\))f(;)
+ 89 b Fo(/)13 b(/)56 b(d)9 b(e)g(s)g(t)g(r)g(o)g(y)52
+ b(p)8 b(o)g(o)g(l)g(s)1856 2022 y Fu(g)2254 2139 y Fw(\(b\))15
+ b(C)g(code)f(after)h(the)f(basic)g(pool)h(allocation)g(transformation)p
+ -150 2229 4185 3 v 891 2313 a Fn(Figur)o(e)j(1.)h(Example)g
+ (illustrating)e(the)h(P)o(ool)h(Allocation)f(T)-6 b(ransf)n(ormation)
+ -114 2392 y Fy(`pr)m(ocesslist')19 b(copies)g(a)g(list)f(into)h(two)g
+ (disjoint)g(lists)f(\(based)i(on)f(some)g(pr)m(edicate\),)h(pr)m
+ (ocesses)g(eac)o(h,)f(then)h(fr)m(ees)f(them.)f(After)g(basic)i(pool)f
+ (allocation,)h(the)-63 2475 y(ne)o(w)f(lists)g(ar)m(e)g(put)g(in)g
+ (separ)o(ate)h(pools)f(\()p Fm(P)11 b(D)r Fl(1)20 b Fy(and)f
+ Fm(P)11 b(D)r Fl(2)p Fy(\))19 b(whic)o(h)h(ar)m(e)f(eac)o(h)h
+ (contiguous)g(in)f(memory)l(.)g(After)f(subsequent)j(optimization,)e
+ (the)g(calls)g(to)433 2558 y Fk(poolfree)h Fy(and)g(the)f(loops)g
+ (containing)i(them)e(ar)m(e)g(r)m(emo)o(ved)i(because)f
+ Fk(pooldestroy)h Fy(fr)m(ees)e(all)g(pool)g(memory)l(.)225
+ 3419 y @beginspecial 35 @llx 35 @lly 214 @urx 237 @ury
+ 864 @rhi @setspecial
+ %%BeginDocument: figs/bu.createnode.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (lattner) Chris Lattner
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 214 237
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % 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
+ /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 214 237
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 179 202 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Node0x885f148
+ gsave 10 dict begin
+ newpath 103 8 moveto
+ 134 8 lineto
+ stroke
+ newpath 134 8 moveto
+ 139 8 146 13 146 19 curveto
+ stroke
+ newpath 146 19 moveto
+ 146 32 lineto
+ stroke
+ newpath 146 32 moveto
+ 146 38 140 44 134 44 curveto
+ stroke
+ newpath 134 44 moveto
+ 103 44 lineto
+ stroke
+ newpath 103 44 moveto
+ 98 44 92 38 92 32 curveto
+ stroke
+ newpath 92 32 moveto
+ 92 19 lineto
+ stroke
+ newpath 92 19 moveto
+ 92 13 97 8 103 8 curveto
+ stroke
+ gsave 10 dict begin
+ 119 21 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x885f180
+ gsave 10 dict begin
+ newpath 49 80 moveto
+ 92 80 lineto
+ stroke
+ newpath 92 80 moveto
+ 98 80 105 85 105 91 curveto
+ stroke
+ newpath 105 91 moveto
+ 105 107 lineto
+ stroke
+ newpath 105 107 moveto
+ 105 113 98 120 92 120 curveto
+ stroke
+ newpath 92 120 moveto
+ 49 120 lineto
+ stroke
+ newpath 49 120 moveto
+ 43 120 37 114 37 108 curveto
+ stroke
+ newpath 37 108 moveto
+ 37 92 lineto
+ stroke
+ newpath 37 92 moveto
+ 37 86 43 80 49 80 curveto
+ stroke
+ gsave 10 dict begin
+ 71 105 moveto 54 -0.5 (list: HM) alignedtext
+ end grestore
+ newpath 37 100 moveto
+ 105 100 lineto
+ stroke
+ gsave 10 dict begin
+ 54 85 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ newpath 71 80 moveto
+ 71 100 lineto
+ stroke
+ gsave 10 dict begin
+ 88 85 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x885f180 -> Node0x885f148
+ newpath 88 90 moveto
+ 88 90 98 70 106 53 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 108 54 moveto
+ 110 44 lineto
+ 104 52 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x88501d0
+ gsave 10 dict begin
+ 150 100 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 150 95 moveto 32 -0.5 (Data) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x88501d0 -> Node0x885f148
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 141 78 moveto
+ 138 71 134 62 130 53 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 143 76 moveto
+ 139 79 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 132 52 moveto
+ 126 44 lineto
+ 128 54 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	NodeNew
+ gsave 10 dict begin
+ 27 174 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 27 169 moveto 33 -0.5 (New) alignedtext
+ end grestore
+ end grestore
+ 
+ %	NodeNew -> Node0x885f180
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 39 153 moveto
+ 43 146 49 137 54 129 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 41 154 moveto
+ 37 151 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 56 130 moveto
+ 59 120 lineto
+ 52 128 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x8850048
+ gsave 10 dict begin
+ 115 174 43 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 115 169 moveto 65 -0.5 (returning) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x8850048 -> Node0x885f180
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 102 152 moveto
+ 97 145 92 137 87 128 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 104 150 moveto
+ 100 153 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 90 128 moveto
+ 83 120 lineto
+ 85 130 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 160 3502 a Fj(\(a\))28 b(DS)17 b(Graph)g(for)g(createnode)
+ 1403 3419 y @beginspecial 35 @llx 35 @lly 345 @urx 241
+ @ury 864 @rhi @setspecial
+ %%BeginDocument: figs/bu.splitclone.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (lattner) Chris Lattner
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 345 241
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % 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
+ /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 345 241
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 310 206 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Node0x885d9c8
+ gsave 10 dict begin
+ newpath 229 84 moveto
+ 260 84 lineto
+ stroke
+ newpath 260 84 moveto
+ 265 84 272 89 272 95 curveto
+ stroke
+ newpath 272 95 moveto
+ 272 111 lineto
+ stroke
+ newpath 272 111 moveto
+ 272 117 266 124 260 124 curveto
+ stroke
+ newpath 260 124 moveto
+ 229 124 lineto
+ stroke
+ newpath 229 124 moveto
+ 224 124 218 118 218 112 curveto
+ stroke
+ newpath 218 112 moveto
+ 218 96 lineto
+ stroke
+ newpath 218 96 moveto
+ 218 90 223 84 229 84 curveto
+ stroke
+ gsave 10 dict begin
+ 245 109 moveto 38 -0.5 (list: R) alignedtext
+ end grestore
+ newpath 218 104 moveto
+ 272 104 lineto
+ stroke
+ gsave 10 dict begin
+ 231 89 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ newpath 245 84 moveto
+ 245 104 lineto
+ stroke
+ gsave 10 dict begin
+ 258 89 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x885d9c8 -> Node0x885d9c8
+ newpath 244 84 moveto
+ 256 74 277 62 290 75 curveto
+ 308 93 308 114 290 133 curveto
+ 283 139 276 137 268 131 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 270 129 moveto
+ 261 124 lineto
+ 266 133 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x885efb8
+ gsave 10 dict begin
+ newpath 149 8 moveto
+ 180 8 lineto
+ stroke
+ newpath 180 8 moveto
+ 185 8 192 13 192 19 curveto
+ stroke
+ newpath 192 19 moveto
+ 192 35 lineto
+ stroke
+ newpath 192 35 moveto
+ 192 41 186 48 180 48 curveto
+ stroke
+ newpath 180 48 moveto
+ 149 48 lineto
+ stroke
+ newpath 149 48 moveto
+ 144 48 138 42 138 36 curveto
+ stroke
+ newpath 138 36 moveto
+ 138 20 lineto
+ stroke
+ newpath 138 20 moveto
+ 138 14 143 8 149 8 curveto
+ stroke
+ gsave 10 dict begin
+ 165 33 moveto 37 -0.5 (int: R) alignedtext
+ end grestore
+ newpath 138 28 moveto
+ 192 28 lineto
+ stroke
+ gsave 10 dict begin
+ 165 13 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x885d9c8 -> Node0x885efb8
+ newpath 258 94 moveto
+ 258 94 228 73 201 54 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 202 51 moveto
+ 192 48 lineto
+ 199 56 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x88616d8
+ gsave 10 dict begin
+ newpath 22 84 moveto
+ 65 84 lineto
+ stroke
+ newpath 65 84 moveto
+ 71 84 78 89 78 95 curveto
+ stroke
+ newpath 78 95 moveto
+ 78 111 lineto
+ stroke
+ newpath 78 111 moveto
+ 78 117 71 124 65 124 curveto
+ stroke
+ newpath 65 124 moveto
+ 22 124 lineto
+ stroke
+ newpath 22 124 moveto
+ 16 124 10 118 10 112 curveto
+ stroke
+ newpath 10 112 moveto
+ 10 96 lineto
+ stroke
+ newpath 10 96 moveto
+ 10 90 16 84 22 84 curveto
+ stroke
+ gsave 10 dict begin
+ 44 109 moveto 54 -0.5 (list: HM) alignedtext
+ end grestore
+ newpath 10 104 moveto
+ 78 104 lineto
+ stroke
+ gsave 10 dict begin
+ 27 89 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ newpath 44 84 moveto
+ 44 104 lineto
+ stroke
+ gsave 10 dict begin
+ 61 89 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x88616d8 -> Node0x885efb8
+ newpath 61 94 moveto
+ 61 94 114 62 133 51 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 131 55 moveto
+ 138 48 lineto
+ 128 51 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x88616d8 -> Node0x88616d8
+ newpath 40 84 moveto
+ 56 73 81 60 96 75 curveto
+ 114 93 114 114 96 133 curveto
+ 89 140 79 137 70 130 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 71 128 moveto
+ 62 124 lineto
+ 69 132 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x8861630
+ gsave 10 dict begin
+ newpath 126 84 moveto
+ 169 84 lineto
+ stroke
+ newpath 169 84 moveto
+ 175 84 182 89 182 95 curveto
+ stroke
+ newpath 182 95 moveto
+ 182 111 lineto
+ stroke
+ newpath 182 111 moveto
+ 182 117 175 124 169 124 curveto
+ stroke
+ newpath 169 124 moveto
+ 126 124 lineto
+ stroke
+ newpath 126 124 moveto
+ 120 124 114 118 114 112 curveto
+ stroke
+ newpath 114 112 moveto
+ 114 96 lineto
+ stroke
+ newpath 114 96 moveto
+ 114 90 120 84 126 84 curveto
+ stroke
+ gsave 10 dict begin
+ 148 109 moveto 54 -0.5 (list: HM) alignedtext
+ end grestore
+ newpath 114 104 moveto
+ 182 104 lineto
+ stroke
+ gsave 10 dict begin
+ 131 89 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ newpath 148 84 moveto
+ 148 104 lineto
+ stroke
+ gsave 10 dict begin
+ 165 89 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x8861630 -> Node0x885efb8
+ newpath 165 94 moveto
+ 165 94 165 76 165 59 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 168 58 moveto
+ 165 48 lineto
+ 163 58 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x8861630 -> Node0x8861630
+ newpath 144 84 moveto
+ 159 73 185 60 200 75 curveto
+ 218 93 218 114 200 133 curveto
+ 192 140 183 137 174 130 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 175 128 moveto
+ 166 124 lineto
+ 173 132 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x88504c0
+ gsave 10 dict begin
+ 245 178 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 245 173 moveto 10 -0.5 (L) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x88504c0 -> Node0x885d9c8
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 245 155 moveto
+ 245 148 245 141 245 133 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 248 155 moveto
+ 243 155 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 248 134 moveto
+ 245 124 lineto
+ 243 134 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x8850508
+ gsave 10 dict begin
+ 131 178 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 131 173 moveto 17 -0.5 (R1) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x8850508 -> Node0x8861630
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 131 155 moveto
+ 131 142 131 125 131 113 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 134 155 moveto
+ 129 155 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 134 114 moveto
+ 131 104 lineto
+ 129 114 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x8850550
+ gsave 10 dict begin
+ 27 178 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 27 173 moveto 20 -0.5 (R2) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x8850550 -> Node0x88616d8
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 27 155 moveto
+ 27 142 27 125 27 113 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 30 155 moveto
+ 25 155 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 30 114 moveto
+ 27 104 lineto
+ 25 114 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 1575 3502 a(\(b\))27 b(DS)17 b(Graph)h(for)f(splitclone)
+ 2781 3419 y @beginspecial 35 @llx 35 @lly 359 @urx 241
+ @ury 864 @rhi @setspecial
+ %%BeginDocument: figs/bu.processlist.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (lattner) Chris Lattner
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 359 241
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % 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
+ /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 359 241
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 324 206 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Node0x885da00
+ gsave 10 dict begin
+ newpath 160 8 moveto
+ 191 8 lineto
+ stroke
+ newpath 191 8 moveto
+ 196 8 203 13 203 19 curveto
+ stroke
+ newpath 203 19 moveto
+ 203 35 lineto
+ stroke
+ newpath 203 35 moveto
+ 203 41 197 48 191 48 curveto
+ stroke
+ newpath 191 48 moveto
+ 160 48 lineto
+ stroke
+ newpath 160 48 moveto
+ 155 48 149 42 149 36 curveto
+ stroke
+ newpath 149 36 moveto
+ 149 20 lineto
+ stroke
+ newpath 149 20 moveto
+ 149 14 154 8 160 8 curveto
+ stroke
+ gsave 10 dict begin
+ 176 33 moveto 37 -0.5 (int: R) alignedtext
+ end grestore
+ newpath 149 28 moveto
+ 203 28 lineto
+ stroke
+ gsave 10 dict begin
+ 176 13 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x885edb0
+ gsave 10 dict begin
+ newpath 11 84 moveto
+ 67 84 lineto
+ stroke
+ newpath 67 84 moveto
+ 74 84 80 89 80 95 curveto
+ stroke
+ newpath 80 95 moveto
+ 80 111 lineto
+ stroke
+ newpath 80 111 moveto
+ 80 117 74 124 68 124 curveto
+ stroke
+ newpath 68 124 moveto
+ 12 124 lineto
+ stroke
+ newpath 12 124 moveto
+ 5 124 0 118 0 112 curveto
+ stroke
+ newpath 0 112 moveto
+ 0 96 lineto
+ stroke
+ newpath 0 96 moveto
+ 0 90 5 84 11 84 curveto
+ stroke
+ gsave 10 dict begin
+ 40 109 moveto 66 -0.5 (list: HMR) alignedtext
+ end grestore
+ newpath 0 104 moveto
+ 80 104 lineto
+ stroke
+ gsave 10 dict begin
+ 20 89 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ newpath 40 84 moveto
+ 40 104 lineto
+ stroke
+ gsave 10 dict begin
+ 60 89 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x885edb0 -> Node0x885da00
+ newpath 60 94 moveto
+ 60 94 123 62 144 51 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 142 55 moveto
+ 149 48 lineto
+ 139 51 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x885edb0 -> Node0x885edb0
+ newpath 34 84 moveto
+ 51 72 81 57 98 75 curveto
+ 117 93 117 114 98 133 curveto
+ 89 142 78 138 67 130 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 68 128 moveto
+ 59 124 lineto
+ 66 132 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x885ed78
+ gsave 10 dict begin
+ newpath 127 84 moveto
+ 183 84 lineto
+ stroke
+ newpath 183 84 moveto
+ 190 84 196 89 196 95 curveto
+ stroke
+ newpath 196 95 moveto
+ 196 111 lineto
+ stroke
+ newpath 196 111 moveto
+ 196 117 190 124 184 124 curveto
+ stroke
+ newpath 184 124 moveto
+ 128 124 lineto
+ stroke
+ newpath 128 124 moveto
+ 121 124 116 118 116 112 curveto
+ stroke
+ newpath 116 112 moveto
+ 116 96 lineto
+ stroke
+ newpath 116 96 moveto
+ 116 90 121 84 127 84 curveto
+ stroke
+ gsave 10 dict begin
+ 156 109 moveto 66 -0.5 (list: HMR) alignedtext
+ end grestore
+ newpath 116 104 moveto
+ 196 104 lineto
+ stroke
+ gsave 10 dict begin
+ 136 89 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ newpath 156 84 moveto
+ 156 104 lineto
+ stroke
+ gsave 10 dict begin
+ 176 89 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x885ed78 -> Node0x885da00
+ newpath 176 94 moveto
+ 176 94 176 76 176 59 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 179 58 moveto
+ 176 48 lineto
+ 174 58 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x885ed78 -> Node0x885ed78
+ newpath 149 84 moveto
+ 167 72 196 57 214 75 curveto
+ 232 93 232 114 214 133 curveto
+ 205 142 193 138 183 130 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 184 128 moveto
+ 175 124 lineto
+ 182 132 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x885ed40
+ gsave 10 dict begin
+ newpath 243 84 moveto
+ 274 84 lineto
+ stroke
+ newpath 274 84 moveto
+ 279 84 286 89 286 95 curveto
+ stroke
+ newpath 286 95 moveto
+ 286 111 lineto
+ stroke
+ newpath 286 111 moveto
+ 286 117 280 124 274 124 curveto
+ stroke
+ newpath 274 124 moveto
+ 243 124 lineto
+ stroke
+ newpath 243 124 moveto
+ 238 124 232 118 232 112 curveto
+ stroke
+ newpath 232 112 moveto
+ 232 96 lineto
+ stroke
+ newpath 232 96 moveto
+ 232 90 237 84 243 84 curveto
+ stroke
+ gsave 10 dict begin
+ 259 109 moveto 38 -0.5 (list: R) alignedtext
+ end grestore
+ newpath 232 104 moveto
+ 286 104 lineto
+ stroke
+ gsave 10 dict begin
+ 245 89 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ newpath 259 84 moveto
+ 259 104 lineto
+ stroke
+ gsave 10 dict begin
+ 272 89 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x885ed40 -> Node0x885da00
+ newpath 272 94 moveto
+ 272 94 240 73 211 54 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 212 52 moveto
+ 203 48 lineto
+ 210 56 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x885ed40 -> Node0x885ed40
+ newpath 258 84 moveto
+ 270 74 291 62 304 75 curveto
+ 322 93 322 114 304 133 curveto
+ 297 139 290 137 282 131 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 284 129 moveto
+ 275 124 lineto
+ 280 133 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x8850ae8
+ gsave 10 dict begin
+ 259 178 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 259 173 moveto 10 -0.5 (L) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x8850ae8 -> Node0x885ed40
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 259 155 moveto
+ 259 148 259 141 259 133 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 262 155 moveto
+ 257 155 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 262 134 moveto
+ 259 124 lineto
+ 257 134 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x88545f8
+ gsave 10 dict begin
+ 40 178 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 40 173 moveto 13 -0.5 (A) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x88545f8 -> Node0x885edb0
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 40 155 moveto
+ 40 148 40 141 40 133 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 43 155 moveto
+ 38 155 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 43 134 moveto
+ 40 124 lineto
+ 38 134 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x8854638
+ gsave 10 dict begin
+ 156 178 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 156 173 moveto 11 -0.5 (B) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x8854638 -> Node0x885ed78
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 156 155 moveto
+ 156 148 156 141 156 133 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 159 155 moveto
+ 154 155 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 159 134 moveto
+ 156 124 lineto
+ 154 134 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 2967 3502 a(\(c\))28 b(DS)17 b(Graph)g(for)g(processlist)p
+ -150 3594 V 1148 3679 a Fn(Figur)o(e)h(2.)h Fz(B)o(U)g(DSGraphs)g(for)g
+ (functions)g(in)g(Figure)g(1)g(\(a\))-150 3845 y FA(2.)91
+ b(Backgr)n(ound:)21 b(P)n(oints-T)-8 b(o)22 b(Graph)f(&)i(Example)-150
+ 3961 y Fz(In)h(this)g(section,)h(we)f(brie\003y)g(introduce)h(the)f
+ (running)i(e)o(xample)f(used)g(by)-150 4044 y(this)19
+ b(paper)i(and)f(specify)g(the)g(points-to)g(graph)h(representation)f
+ (and)h(prop-)-150 4127 y(erties)15 b(that)h(are)f(used)i(by)f(our)g
+ (description)g(of)g(Automatic)g(Pool)f(Allocation)-150
+ 4210 y(and)26 b(its)f(optimizations.)g(Figure)g(1\(a\))h(sho)n(ws)g
+ (the)f(running)h(e)o(xample)g(we)-150 4293 y(use)h(to)f(illustrate)g
+ (the)g(pool)i(allocation)e(transformation.)h(This)f(program)-150
+ 4376 y(fragment)c(tra)o(v)o(erses)g(an)g(input)g(list)f(\()p
+ Fm(L)p Fz(\),)h(creating)g(tw)o(o)g(ne)n(w)g(lists)g(\()p
+ Fm(A)f Fz(and)-150 4459 y Fm(B)t Fz(\))i(based)i(on)g(the)f(input)g
+ (list,)f(processes)i(the)f(ne)n(w)g(lists)f(separately)-5
+ b(,)25 b(and)-150 4542 y(\002nally)19 b(deallocates)g(them.)-50
+ 4625 y(Automatic)i(Pool)g(Allocation)h(is)f(dri)n(v)o(en)h(by)g(a)f
+ (points-to)h(graph)g(com-)-150 4708 y(puted)f(by)h(some)f(pointer)g
+ (analysis)g(that)g(uses)g(an)g(e)o(xplicit)f(representation)-150
+ 4791 y(of)26 b(memory)g([27)q(].)e(In)i(our)g(implementation,)g(we)g
+ (use)g(an)f(algorithm)h(we)-150 4874 y(call)17 b(Data)f(Structure)h
+ (Analysis)g(\(DSA\))f([32])h(to)g(compute)h(these)f(points-to)-150
+ 4957 y(graphs.)22 b(DSA)f(is)f Fy(conte)o(xt-sensitive)i
+ Fz(\(both)g(in)f(its)g(analysis)h(and)g(in)f(that)g(it)-150
+ 5040 y(distinguishes)26 b(heap)g(and)g(stack)f(objects)h(by)f(entire)g
+ (ac)o(yclic)h(call)e(paths\),)-150 5123 y Fy(uni\002cation-based)p
+ Fz(,)30 b(and)f Fy(\002eld-sensitive)p Fz(,)f(and)h(we)f(belie)n(v)o(e)
+ g(these)h(prop-)-150 5206 y(erties)e(are)g(important)g(for)g(pool)h
+ (allocation)g(for)f(the)g(reasons)h(e)o(xplained)-150
+ 5289 y(belo)n(w)-5 b(.)25 b(W)-6 b(e)24 b(ha)o(v)o(e)i(sho)n(wn)f(that)
+ g(DSA)f(is)h(both)g(e)o(xtremely)g(f)o(ast)g(and)g(scal-)-150
+ 5372 y(able)18 b(\(it)f(can)h(analyze)h(programs)g(of)f(220K)g(lines)g
+ (of)g(code)g(lik)o(e)g(176.gcc)h(in)2042 3845 y(under)k(2)f(seconds)h
+ ([32)q(]\),)e(and)h(requires)h(a)f(small)f(fraction)i(of)f(the)g
+ (compi-)2042 3928 y(lation)d(time)f(tak)o(en)i(by)f(\223)p
+ Fs(gcc)40 b(-O3)p Fz(.)-5 b(\224)2141 4011 y Fn(Context-sensiti)o(v)o
+ (e)39 b Fz(naming)f(of)h(heap)f(objects)h(by)f(\(ac)o(yclic\))g(call)
+ 2042 4094 y(paths)18 b(is)g(required)h(to)f(distinguish)h(data)f
+ (structure)g(instances)h(that)f(may)h(be)2042 4177 y(created,)g
+ (processed,)i(or)e(destro)o(yed)i(by)f(calling)g(common)h(functions.)f
+ (F)o(or)2042 4260 y(e)o(xample,)c(this)f(property)i(enables)g(DSA)e(to)
+ g(determine)i(that)e(lists)g Fm(A)g Fz(and)h Fm(B)2042
+ 4343 y Fz(are)21 b(disjoint)g(in)h(Figure)f(1\(a\))g(e)n(v)o(en)h
+ (though)h(their)e(nodes)h(are)g(allocated)f(at)2042 4426
+ y(a)h(common)i(allocation)f(site,)f(enabling)i(pool)f(allocation)g(to)g
+ (assign)g(them)2042 4509 y(to)i(distinct)g(pools.)h(W)m(ith)e(less)i
+ (or)f(no)h(conte)o(xt-sensiti)n(vity)g(\(e.g.,)e(if)h(heap)2042
+ 4592 y(objects)18 b(were)f(distinguished)i(only)f(by)g(allocation)g
+ (site\),)f(such)h(data)g(struc-)2042 4675 y(tures)h(w)o(ould)g(not)h
+ (be)f(se)o(gre)o(gated)g(into)g(distinct)g(pools.)2141
+ 4758 y(A)i Fn(uni\002cation-based)e Fz(pointer)j(analysis)g([43])f(mer)
+ o(ges)h(the)f(potential)2042 4841 y(tar)o(gets)i(of)g(a)g(pointer)h
+ (into)f(a)g(single)g(set)g(of)g(objects)h(,)f(yielding)h(a)f(points-)
+ 2042 4924 y(to)h(graph)i(where)e(e)n(v)o(ery)i(pointer)e(v)n(ariable)i
+ (or)e(pointer)h(\002eld)f(points)h(to)f(at)2042 5007
+ y(most)g(one)h(node.)g(W)-6 b(e)24 b(use)h(a)g(uni\002cation-based)g
+ (approach)h(for)f(tw)o(o)f(rea-)2042 5090 y(sons.)d(First,)f(as)h(we)h
+ (ar)o(gued)g(in)f([32],)g(it)f(is)h(crucial)h(to)f(making)h(DSA)e(both)
+ 2042 5173 y(e)o(xtremely)h(f)o(ast)g(and)g(scalable)g(despite)g
+ (distinguishing)h(memory)g(objects)2042 5256 y(by)e(call)g(paths.)g
+ (Second,)h(it)e(greatly)i(simpli\002es)e(Automatic)h(Pool)g(Alloca-)
+ 2042 5339 y(tion)k(because)i(it)d(ensures)i(that)g(e)n(v)o(ery)g
+ (pointer)f(points)h(to)f(a)h(unique)g(node)2042 5422
+ y(and)18 b(hence)h(a)e(unique)i(pool.)f(Pool)f(allocation)h(without)g
+ (uni\002cation)g(w)o(ould)p eop end
+ %%Page: 4 4
+ TeXDict begin 4 3 bop -150 66 a Fz(require)20 b(a)f(mechanism)h
+ (\(e.g.,)f(\223f)o(at)g(pointers\224\))h(to)f(track)g(the)h(pool)f
+ (pointed)-150 149 y(to)27 b(by)g(each)g(pointer)g(v)n(alue)g(at)g(run)g
+ (time,)f(which)h(is)f(signi\002cantly)h(more)-150 232
+ y(comple)o(x)19 b(and)g(can)f(hurt)g(both)h(performance)g(and)g
+ (compatibility)g(with)e(e)o(x-)-150 315 y(ternal)29 b(libraries.)f
+ (Furthermore,)h(there)h(is)e(some)i(e)n(vidence)g(that)f(adding)-150
+ 399 y(conte)o(xt-sensiti)n(vity)19 b(substantially)g(reduces)h(the)e
+ (precision)h(adv)n(antage)h(of)-150 482 y(subset-based)g(o)o(v)o(er)g
+ (uni\002cation-based)g(algorithms)f([36)q(,)f(16)q(,)g(32)q(].)-50
+ 565 y(A)30 b Fn(\002eld-sensiti)o(v)o(e)g Fz(pointer)h(analysis)h
+ (distinguishes)g(the)f(tar)o(gets)f(of)-150 648 y(distinct)e(pointer)h
+ (\002elds)f(within)g(a)g(record.)h(This)e(is)h(important)h(in)f(prac-)
+ -150 731 y(tice)20 b(for)h(pool)g(allocation)g(with)f(a)g
+ (uni\002cation-based)i(algorithm)f(because)-150 814 y(mer)o(ging)e(the)
+ f(tar)o(gets)g(of)g(unrelated)i(pointer)e(\002elds)g(in)g(a)h(node)g(w)
+ o(ould)g(lose)-150 897 y(most)k(of)g(the)h(internal)f(structural)g
+ (information)h(for)f(multi-le)n(v)o(el)f(pointer)o(-)-150
+ 980 y(based)29 b(data)g(structures.)f(DSA)g(is)g(\002eld-sensiti)n(v)o
+ (e)g(for)h(memory)g(objects)-150 1063 y(that)23 b(are)g(accessed)i(in)e
+ (a)g(type-consistent)h(w)o(ay)-5 b(,)24 b(a)f(property)h(which)g(it)f
+ (in-)-150 1146 y(fers)c(during)g(the)g(analysis.)-50
+ 1229 y(While)39 b(we)g(used)i(DSA)d(in)i(our)g(w)o(ork,)g(we)f(kno)n(w)
+ i(se)n(v)o(eral)f(other)-150 1312 y(conte)o(xt-sensiti)n(v)o(e)21
+ b(analyses)f([20)q(,)f(37)q(,)g(10)q(,)g(38])h(which)g(pro)o(vide)g
+ (all)g(of)f(the)-150 1395 y(properties)24 b(required)h(by)g(the)f
+ (transformation)g(or)g(could)h(be)f(e)o(xtended)h(to)-150
+ 1478 y(do)20 b(so.)g(W)-6 b(e)19 b(describe)i(the)f(properties)g(of)g
+ (the)g(points-to)h(graphs)f(and)h(other)-150 1561 y(information)16
+ b(required)h(by)f(the)g(Automatic)g(Pool)f(Allocation)h(transforma-)
+ -150 1644 y(tion)j(belo)n(w)-5 b(.)-150 1814 y Fn(2.1)75
+ b(P)o(oints-to)18 b(Graph)g(Assumptions)-150 1930 y Fz(This)d(section)g
+ (describes)h(the)g(properties)g(of)f(the)g(points-to)h(graphs)g(used)g
+ (by)-150 2013 y(Automatic)k(Pool)g(Allocation,)g(which)g(we)g(term)f
+ (Data)h(Structure)f(\(or)h(DS\))-150 2096 y(Graphs.)j(A)f(DS)g(graph)h
+ (is)f(a)g(compile-time)h(description)g(of)g(the)f(memory)-150
+ 2180 y(objects)h(created)f(by)h(a)f(function)i(or)e(program)h(and)g
+ (their)f(points-to)h(prop-)-150 2263 y(erties.)f(W)-6
+ b(e)22 b(assume)i(that)e(a)h(DS)f(graph)h(is)g(computed)h(for)e(each)i
+ (function,)-150 2346 y(representing)j(the)e(memory)h(objects)g
+ (reachable)h(from)e(v)n(ariables)h(in)f(that)-150 2429
+ y(function)19 b(or)g(from)g(global)g(v)n(ariables.)g(F)o(or)f
+ (reference,)h(Figure)f(2)h(sho)n(w)g(the)-150 2512 y(graphs)h(computed)
+ g(by)g(DSA)e(for)h(the)g(functions)g(in)g(the)g(e)o(xample.)-50
+ 2595 y(F)o(ormally)-5 b(,)32 b(a)h Fn(DS)g(Graph)g Fz(is)f(a)i
+ (directed)f(multi-graph,)h(where)f(the)-150 2678 y(nodes)20
+ b(and)g(edges)f(are)g(de\002ned)h(as)f(follo)n(ws:)-50
+ 2761 y Fn(DS)j(Node:)h Fz(A)f(DS)g(node)i(is)f(a)g(5-tuple)g
+ Fi(f)p Fm(\034)t(;)14 b(F)r(;)f(M)t(;)g(A;)g(G)p Fi(g)p
+ Fz(.)23 b Fm(\034)31 b Fz(is)23 b(some)-150 2844 y
+ (\(program-de\002ned\))h(scalar)m(,)d(array)-5 b(,)22
+ b(record)h(or)f(function)h(type,)f(or)g Fi(?)f Fz(rep-)-150
+ 2927 y(resenting)f(an)f(unkno)n(wn)i(type.)e(In)g(the)g
+ (transformation,)h Fi(?)e Fz(is)h(treated)g(lik)o(e)-150
+ 3010 y(an)h(unkno)n(wn-size)i(array)d(of)h(bytes)g(\(the)g
+ Fm(A)f Fz(\003ag,)g(described)h(belo)n(w)-5 b(,)20 b(is)g(set)-150
+ 3093 y(to)g(true)f(when)h Fm(\034)31 b Fl(=)23 b Fi(?)p
+ Fz(\).)c Fm(F)30 b Fz(is)19 b(an)h(array)g(of)f(\002elds,)g(one)i(for)e
+ (each)i(possible)-150 3176 y(\002eld)j(of)g(the)g(type)h
+ Fm(\034)9 b Fz(.)23 b(Scalar)h(types)g(and)h Fi(?)f Fz(ha)o(v)o(e)h(a)f
+ (single)g(\002eld,)g(record)-150 3259 y(types)i(ha)o(v)o(e)g(a)f
+ (\002eld)h(for)f(each)h(element)g(of)g(the)g(record,)f(array)h(types)g
+ (are)-150 3342 y(treated)h(as)g(their)f(element)h(type)g(\(i.e.)f
+ (array)h(inde)o(xing)h(is)e(ignored\),)i(and)-150 3425
+ y(functions)e(do)f(not)g(ha)o(v)o(e)g(\002elds.)f Fm(M)33
+ b Fz(is)24 b(a)h(set)f(of)h(memory)h(classes,)e(writ-)-150
+ 3508 y(ten)18 b(as)g(a)g(subset)g(of)g Fi(f)p Fn(H)p
+ Fm(;)13 b Fn(S)p Fm(;)g Fn(G)p Fm(;)g Fn(U)p Fi(g)p Fz(,)18
+ b(indicating)g(Heap,)g(Stack,)g(Global)g(and)-150 3591
+ y(Unkno)n(wn)28 b(memory)f(objects)g(respecti)n(v)o(ely)g(\(multiple)f
+ (\003ags)g(can)h(be)g(set)-150 3674 y(on)21 b(one)g(node)h(due)f(to)f
+ (the)h(use)g(of)g(uni\002cation\).)f(A)g(node)i(with)e
+ Fn(U)k Fi(2)h Fm(M)k Fz(is)-150 3757 y(assigned)22 b(type)g
+ Fi(?)p Fz(.)f(Finally)-5 b(,)21 b(if)f Fn(G)27 b Fi(2)f
+ Fm(M)8 b Fz(,)21 b(then)h Fm(G)f Fz(is)g(a)g(non-empty)i(set)e(of)-150
+ 3840 y(global)d(v)n(ariables)g(and)g(functions)h(included)f(in)g(the)f
+ (objects)h(for)f(this)h(node;)-150 3923 y(otherwise,)25
+ b Fm(G)h Fz(is)f(empty)-5 b(.)25 b Fm(A)g Fz(is)g(a)h(boolean)g(that)f
+ (is)g(true)h(if)f(the)g(node)i(in-)-150 4006 y(cludes)c(an)g(array)g
+ (object.)g(Finally)-5 b(,)22 b(though)h(this)g(paper)g(does)g(not)g
+ (use)g(the)-150 4089 y(information,)d(DSA)g(also)g(infers)g(Mod)h(and)g
+ (Ref)e(information,)i(which)f(are)-150 4172 y(sho)n(wn)g(as)f(\223)p
+ Fn(M)p Fz(\224)f(and)i(\223)p Fn(R)p Fz(\224)f(in)g(the)g(\002gures.)
+ -50 4255 y Fn(DS)30 b(Edge:)g Fz(A)g(DS)g(edge)i(is)e(a)h(4-tuple)g
+ Fi(f)p Fm(s;)13 b(f)1206 4263 y Fh(s)1240 4255 y Fm(;)g(t;)g(f)1373
+ 4263 y Fh(t)1401 4255 y Fi(g)p Fz(.)30 b Fm(s)h Fz(and)g
+ Fm(t)f Fz(are)-150 4338 y(DS)36 b(nodes,)h(while)f Fm(f)450
+ 4346 y Fh(s)520 4338 y Fz(and)h Fm(f)701 4346 y Fh(t)766
+ 4338 y Fz(are)g(\002elds)f(of)g Fm(s)g Fz(and)i Fm(t)e
+ Fz(respecti)n(v)o(ely)-5 b(.)-150 4421 y(Thus,)21 b(the)f(graph)i(pro)o
+ (vides)g(a)f(\002eld-sensiti)n(v)o(e)f(representation)i(of)f(points-)
+ -150 4504 y(to)26 b(information.)g(A)g(\002eld)g(of)g(a)g(node)h(may)f
+ (lack)g(an)h(outgoing)g(DS)e(edge)-150 4587 y(only)32
+ b(if)e(the)h(\002eld)g(is)g(kno)n(wn)h(not)f(to)g(contain)h(a)f
+ (pointer)g(type,)g(e.g.,)g(if)-150 4670 y(the)h(node)h(represents)f(a)g
+ (function)g(\(the)g(function)h(itself)e(doesn')o(t)h(point)-150
+ 4753 y(to)e(an)o(ything)i(else\),)e(is)g(a)h(\003oating)f(point)h(or)g
+ (small)f(inte)o(ger)h(type,)f(or)h(if)-150 4836 y Fm(M)j
+ Fl(=)25 b Fi(f)p Fn(U)p Fi(g)p Fz(.)c(In)g(this)g(paper)m(,)g(we)g(use)
+ g(the)g(notation)h(\223N\()p Fm(ptr)r Fz(\)\224)e(to)h(indicate)-150
+ 4919 y(the)e(node)h(which)f(the)g(scalar)g(pointer)g
+ Fm(ptr)h Fz(points)g(to.)-50 5002 y(Figure)h(2\(b\))g(sho)n(ws)h(the)f
+ (DS)g(graph)h(computed)h(by)e(our)h(compiler)f(for)-150
+ 5085 y(function)g Fs(splitclone)h Fz(of)e(the)f(e)o(xample.)i(Note)f
+ (that)g(each)g(node)h(of)f(type)-150 5172 y Fs(list)g
+ Fz(has)g(tw)o(o)f(\002elds)437 5140 y Ft(2)466 5172 y
+ Fz(.)g(The)g(c)o(ycles)h(indicate)g(recursi)n(v)o(e)g(data)f
+ (structures.)p -150 5289 997 3 v -150 5340 a Ft(2)-113
+ 5363 y Fw(The)14 b(diagrams)h(in)g(this)f(paper)h(sho)o(w)f(pointers)h
+ (to)g(nodes)f(in)h(cases)e(where)i(the)f(pointer)i(tar)o(gets)-150
+ 5430 y(the)f(\002rst)f(\002eld)h(of)g(the)g(node,)f(due)g(to)h
+ (limitations)g(of)g(the)g(graph)g(layout)f(tool)h(we)g(use.)2042
+ 46 y Fg(void)36 b(poolcreate\(Pool*)k(PD,)c(uint)h(Size,)f(uint)h
+ (Align\))2192 121 y Fj(Initialize)20 b(a)e(pool)f(descriptor)l(.)2042
+ 196 y Fg(void)36 b(pooldestroy\(Pool*)k(PD\))2192 270
+ y Fj(Release)19 b(pool)f(memory)f(and)g(destro)o(y)i(pool)e(descriptor)
+ l(.)2042 345 y Fg(void*)36 b(poolalloc\(Pool*)k(PD,)c(uint)h
+ (numBytes\))2192 420 y Fj(Allocate)19 b(an)f(object)h(of)e
+ Fg(numBytes)h Fj(bytes.)2042 494 y Fg(void)36 b(poolfree)i(\(Pool*)f
+ (PD,)f(void*)h(ptr\))2192 569 y Fj(Mark)17 b(the)h(object)h(pointed)g
+ (to)e(by)g Ff(ptr)i Fj(as)d(free.)2042 644 y Fg(void*)36
+ b(poolrealloc\(Pool*)41 b(PD,)36 b(void*)g(ptr,)h(uint)f(numBytes\))
+ 2192 719 y Fj(Resize)18 b(an)g(object)h(to)e Fg(numBytes)i
+ Fj(bytes.)2042 868 y Fg(void)36 b(poolinit)p 2502 868
+ 22 4 v 28 w(bp\(Pool)h(*PD,)g(uint)f(Align\))2192 943
+ y Fj(Initialize)20 b(a)e(b)o(ump-pointer)g(pool)g(descriptor)l(.)2042
+ 1017 y Fg(void)36 b(*poolalloc)p 2572 1017 V 28 w(bp\(Pool)i(*PD,)e
+ (uint)h(NumBytes\))2192 1092 y Fj(Allocate)19 b(memory)e(from)g(a)g(b)o
+ (ump-pointer)i(pool.)2042 1167 y Fg(void)36 b(pooldestroy)p
+ 2607 1167 V 29 w(bp\(Pool)h(*PD\))2192 1242 y Fj(Release)19
+ b(a)e(b)o(ump-pointer)i(pool.)p 2042 1292 1993 3 v 2173
+ 1377 a Fn(Figur)o(e)f(3.)g Fz(Interf)o(ace)i(to)f(the)g(Pool)f
+ (Allocator)h(Runtime)g(Library)2042 1554 y Fm(R)q Fl(1)24
+ b Fz(and)h Fm(R)q Fl(2)f Fz(point)h(to)f(distinct)h(nodes,)g
+ (indicating)g(that)f(the)h(tw)o(o)f(link)o(ed)2042 1637
+ y(lists)18 b(are)h(completely)h(disjoint.)2141 1720 y(There)k(are)f(tw)
+ o(o)g(other)g(assumptions)i(about)f(DS)e(graphs)i(used)g(in)f(this)2042
+ 1803 y(w)o(ork.)29 b(First,)f(we)g(assume)i(that)f(the)g(DS)f(Graph)i
+ (for)f(each)g(function)h(in-)2042 1886 y(cludes)20 b(information)h
+ (about)f(that)g(function)g(and)h(all)e(of)h(the)g(functions)g(that)2042
+ 1969 y(it)i(calls)h(\(b)o(ut)f(no)i(information)f(about)h(its)e
+ (callers\).)g(Section)h(3.3)g(e)o(xplains)2042 2052 y(why)28
+ b(this)f(assumption)i(is)e(safe.)h(F)o(or)f(e)o(xample,)h(a)g(node)g
+ (with)g Fn(H)38 b Fi(2)g Fm(M)2042 2135 y Fz(indicates)22
+ b(heap)h(objects)f(allocated)g(or)g(freed)g(in)g(the)g(current)g
+ (function)h(or)2042 2218 y(its)16 b(callees,)g(b)o(ut)h(not)g(its)f
+ (callers.)g(Se)n(v)o(eral)g(conte)o(xt-sensiti)n(v)o(e)i(analyses,)f
+ (in-)2042 2301 y(cluding)24 b(DSA)e(and)i(others)f([37)q(,)g(38],)g
+ (compute)h(separate)g(\223Bottom-Up\224)2042 2384 y(\(B)o(U\))17
+ b(and)h(\223T)-6 b(op-T)g(o)n(wn\224)19 b(\(TD\))e(graphs:)h(the)g
+ (Bottom-Up)g(graphs)g(capture)2042 2467 y(e)o(xactly)28
+ b(the)g(information)g(required.)h(F)o(or)e(e)o(xample,)h(the)g(graph)h
+ (in)f(Fig-)2042 2550 y(ure)16 b(2\(b\))h(incorporates)g(the)f
+ (points-to,)h(mod/ref,)f(and)h(\003ag)f(ef)n(fects)g(of)g(both)2042
+ 2633 y(calls)22 b(to)g(\223createnode\224:)i(it)d(includes)i(tw)o(o)g
+ (copies)f(\(one)h(for)f(each)h(call\))f(of)2042 2716
+ y(the)f(H)g(\003ag)h(and)g(the)f(edge)h(from)g(the)f(list)g(node)h(to)f
+ (the)h(inte)o(ger)f(data)h(node)2042 2799 y(present)d(in)g(Figure)g
+ (2\(a\).)2141 2882 y(Second,)g(there)g(are)f(a)h(fe)n(w)f(primiti)n(v)o
+ (e)g(operations)h(on)g(DS)f(graphs)h(used)2042 2965 y(in)h(the)g
+ (transformation,)g(including)h(mer)o(ging)g(tw)o(o)f(graphs)h(and)f
+ (matching)2042 3048 y(nodes)25 b(between)g(graphs)g(for)f(a)h(callee)f
+ (and)h(a)f(caller)l(.)g(These)g(are)g(de\002ned)2042
+ 3131 y(and)19 b(e)o(xplained)h(where)g(the)o(y)f(are)g(used)g(in)g(the)
+ g(ne)o(xt)g(Section.)2042 3313 y FA(3.)91 b(The)22 b(Cor)n(e)g(T)-7
+ b(ransf)n(ormation)2042 3429 y Fz(The)19 b(pool)h(allocation)g
+ (transformation)g(operates)h(on)f(a)f(program)h(contain-)2042
+ 3512 y(ing)f(calls)f(to)g Fs(malloc)i Fz(and)f Fs(free)p
+ Fz(,)g(and)h(transforms)f(the)f(program)i(to)e(use)h(a)2042
+ 3595 y(pool)g(library)-5 b(,)18 b(described)h(belo)n(w)-5
+ b(.)18 b(The)g(algorithm)h(uses)f(a)h(points-to)f(graph)2042
+ 3679 y(and)j(call)g(graph,)g(both)h(of)f(which)g(are)g(computed)h(by)f
+ (DSA)f(in)h(our)g(imple-)2042 3762 y(mentation.)28 b(The)f
+ (transformation)i(is)e(a)h(frame)n(w)o(ork)h(which)f(has)g(se)n(v)o
+ (eral)2042 3845 y(optional)15 b(re\002nements.)g(In)f(this)g(section,)h
+ (we)f(present)h(a)g(\223basic\224)g(v)o(ersion)g(of)2042
+ 3928 y(the)21 b(transformation)h(in)g(which)g(all)f(heap)h(objects)g
+ (are)f(allocated)h(in)f(pools)2042 4011 y(\(i.e.,)c(none)j(are)f
+ (allocated)h(directly)f(via)g Fs(malloc)p Fz(\))h(and)f(e)n(v)o(ery)h
+ (node)g(in)f(the)2042 4094 y(points-to)i(graph)h(generates)h(a)e
+ (separate)g(static)g(pool)h(\(e)o(xplained)g(belo)n(w\).)2042
+ 4177 y(In)d(the)g(ne)o(xt)g(section,)g(we)g(discuss)g(re\002nements)h
+ (to)e(this)h(basic)g(approach.)2042 4317 y Fn(3.1)75
+ b(P)o(ool)18 b(Allocator)i(Runtime)d(Library)2042 4433
+ y Fz(Figure)j(3)g(sho)n(ws)g(the)h(interf)o(ace)f(to)g(the)g(runtime)g
+ (library)-5 b(.)20 b(Pools)g(are)g(iden-)2042 4516 y(ti\002ed)c(by)h(a)
+ g(pool)h(descriptor)f(of)g(type)h Fs(Pool)p Fz(.)f(The)g(functions)h
+ Fs(poolalloc)p Fz(,)2042 4599 y Fs(poolfree)p Fz(,)46
+ b(and)f Fs(poolrealloc)i Fz(allocate,)d(deallocate,)h(and)g(resize)2042
+ 4682 y(memory)33 b(in)f(a)g(pool.)g(The)g Fs(poolcreate)i
+ Fz(function)f(initializes)e(a)h(pool)2042 4765 y(descriptor)21
+ b(for)f(an)h(empty)g(pool,)g(with)f(an)h(optional)g(size)f(hint)h
+ (\(pro)o(viding)2042 4848 y(a)28 b(f)o(ast)h(path)g(for)g(a)f(commonly)
+ i(allocated)f(size\))g(and)g(an)g(alignment)g(re-)2042
+ 4932 y(quired)23 b(for)f(the)h(pool)g(\(this)f(def)o(aults)g(to)h(8,)f
+ (as)g(in)h(man)o(y)g(standard)g(malloc)2042 5015 y(libraries\).)k
+ Fs(pooldestroy)j Fz(releases)f(all)e(pool)i(memory)g(to)f(the)g(system)
+ 2042 5098 y(heap.)23 b(The)f(last)h(three)f(functions)i(\(with)e(suf)n
+ (\002x)g(\223)p 3369 5098 24 4 v 29 w Fs(bp)p Fz(\224\))h(are)f(v)n
+ (ariants)h(that)2042 5181 y(use)15 b(a)f(f)o(ast)h(\223b)o(ump)g
+ (pointer\224)g(allocation)g(method,)h(described)f(in)g(Section)f(5.)
+ 2141 5264 y(The)21 b(library)f(internally)h(obtains)g(memory)h(from)e
+ (the)h(system)g(heap)g(in)2042 5347 y(blocks)g(of)f(one)i(or)e(more)h
+ (pages)g(at)f(a)h(time)f(using)h Fs(malloc)g Fz(\(doubling)h(the)2042
+ 5430 y(size)30 b(each)h(time\).)f(W)-6 b(e)30 b(implemented)h(multiple)
+ g(allocation)g(algorithms)p eop end
+ %%Page: 5 5
+ TeXDict begin 5 4 bop -150 66 a Fz(b)o(ut)20 b(the)g(v)o(ersion)h(used)
+ f(here)h(is)e(a)h(general)h(free-list-based)f(allocator)h(with)-150
+ 149 y(coalescing)g(of)e(adjacent)i(free)e(objects.)h(It)f(maintains)h
+ (a)f(four)o(-byte)h(header)-150 232 y(per)26 b(object)f(to)h(record)g
+ (object)g(size.)f(The)g(def)o(ault)h(alignment)g(of)g(objects)-150
+ 315 y(\(e.g.,)d(4-)g(or)h(8-byte\))g(can)g(be)g(chosen)h(on)f(a)g(per)o
+ (-pool)g(basis,)f(for)g(reasons)-150 399 y(described)d(in)f(Section)g
+ (5.)g(The)g(pool)h(library)f(is)g(general)h(in)f(the)g(sense)g(that)
+ -150 482 y(it)f(does)i(not)f(require)g(all)g(allocations)g(from)g(a)g
+ (pool)g(to)g(be)g(the)g(same)h(size.)-150 639 y Fn(3.2)75
+ b(Ov)o(er)o(view)20 b(Using)f(an)f(Example)-150 756 y
+ Fz(The)26 b(basic)h(pool)g(allocation)f(transformation)h(is)f
+ (illustrated)g(for)g(the)g(e)o(x-)-150 839 y(ample)18
+ b(program)g(in)g(Figure)f(1\(b\),)h(which)g(sho)n(ws)g(the)g(results)f
+ (of)h(our)g(basic)-150 922 y(transformation)24 b(in)g(C)f(syntax.)h
+ (The)f(incoming)i(list)d Fm(L)i Fz(and)g(the)f(tw)o(o)h(ne)n(w)-150
+ 1005 y(lists)16 b(ha)o(v)o(e)h(each)g(been)g(allocated)g(to)g(distinct)
+ f(pools)h(\(the)g(pool)g(for)f Fm(L)h Fz(is)f(not)-150
+ 1088 y(passed)k(in)e(and)h(so)g(not)g(sho)n(wn;)g(the)g(ne)n(w)g(lists)
+ f(use)g(pools)i(PD1)e(and)h(PD2\).)-150 1171 y(The)k(list)f(nodes)i
+ (for)f Fm(A)g Fz(and)h Fm(B)i Fz(will)d(be)g(se)o(gre)o(gated)h(in)f
+ (the)g(heap,)g(unlik)o(e)-150 1254 y(the)28 b(original)f(program)i
+ (where)f(the)o(y)f(will)g(be)h(laid)f(out)h(in)f(some)i(unpre-)-150
+ 1337 y(dictable)d(f)o(ashion)g(\(and)g(possibly)g(interlea)o(v)o(ed\))g
+ (in)f(memory)-5 b(.)26 b(The)g(items)-150 1420 y(in)21
+ b(each)h(pool)g(are)f(e)o(xplicitly)g(deallocated)h(and)g(the)g(pools)g
+ (are)f(destro)o(yed)-150 1503 y(within)e Fs(processList)i
+ Fz(when)e(the)g(data)h(the)o(y)f(contain)g(is)g(no)g(longer)h(li)n(v)o
+ (e.)-50 1586 y(W)-6 b(e)19 b(can)i(use)f(this)g(e)o(xample)g(to)g(e)o
+ (xplain)h(the)f(basic)g(steps)g(of)g(the)g(trans-)-150
+ 1669 y(formation.)d(The)f(DS)g(graphs)h(are)g(sho)n(wn)g(in)g(Figure)f
+ (2.)g(First,)f(we)i(use)g(each)-150 1752 y(function')l(s)30
+ b(DS)f(graph)h(to)f(determine)h(which)g Fn(H)f Fz(nodes)h(are)g
+ (accessible)-150 1835 y(outside)25 b(their)g(respecti)n(v)o(e)h
+ (functions,)f(i.e.,)f(\223escape\224)i(to)e(the)h(caller)l(.)f(The)-150
+ 1918 y Fn(H)17 b Fz(nodes)h(in)g Fs(createnode)h Fz(and)f
+ Fs(splitclone)h Fz(do)f(escape,)g(because)g(the)o(y)-150
+ 2001 y(are)26 b(reachable)g(from)g(a)f(returned)h(pointer)g(and)h(a)e
+ (formal)h(ar)o(gument,)g(re-)-150 2084 y(specti)n(v)o(ely)-5
+ b(.)25 b(The)g(tw)o(o)f(in)g Fs(processlist)j Fz(\()p
+ Fs(A)e Fz(and)g Fs(B)p Fz(\))f(do)h(not.)g(The)f(latter)-150
+ 2167 y(are)19 b(candidates)h(for)f(ne)n(w)g(pools)h(in)e
+ Fs(processlist)p Fz(.)-50 2250 y(The)h(transformation)i(phase)f
+ (inserts)g(code)h(to)e(create)h(and)g(destro)o(y)h(the)-150
+ 2333 y(pool)32 b(descriptors)g(for)g Fs(A)f Fz(\()p Fs(PD1)p
+ Fz(\))h(and)h Fs(B)e Fz(\()p Fs(PD2)p Fz(\))h(in)f Fs(processlist)j
+ Fz(\(see)-150 2416 y(Figure)25 b(1\(b\)\).)g(It)g(adds)h(pool)g
+ (descriptor)g(ar)o(guments)h(for)e(e)n(v)o(ery)h Fn(H)f
+ Fz(node)-150 2499 y(that)i(escapes)h(its)e(function,)h(i.e.,)f(for)h
+ (nodes)h(pointed)g(to)f(by)g Fs(R1)g Fz(and)h Fs(R2)-150
+ 2582 y Fz(in)e Fs(splitclone)h Fz(and)f(the)g(node)h(pointed)f(to)g(by)
+ g Fs(New)g Fz(in)g Fs(createNode)p Fz(.)-150 2665 y(It)c(re)n(writes)f
+ (the)h(calls)g(to)g Fs(malloc)h Fz(and)g Fs(free)g Fz(with)f(calls)f
+ (to)h Fs(poolalloc)-150 2748 y Fz(and)e Fs(poolfree)p
+ Fz(,)h(passing)g(appropriate)g(pool)f(descriptors)g(as)g(ar)o(guments.)
+ -150 2831 y(Finally)-5 b(,)30 b(it)h(re)n(writes)f(other)i(calls)e(to)h
+ (\(e.g.,)g(the)g(calls)f(to)h Fs(splitclone)-150 2914
+ y Fz(and)c Fs(createnode)p Fz(\))i(to)d(pass)h(an)o(y)h(necessary)f
+ (pool)h(descriptor)f(pointers)-150 2997 y(as)19 b(ar)o(guments.)g(At)g
+ (this)f(point,)h(the)g(basic)g(transformation)h(is)f(complete.)-50
+ 3080 y(Further)40 b(re\002nements)g(of)g(the)h(transformation)f(mo)o(v)
+ o(e)h(the)f Fs(pool-)-150 3163 y(destroy)17 b Fz(for)e
+ Fs(PD1)g Fz(as)g(early)h(as)f(possible)h(within)f(the)g(function)h
+ Fs(process-)-150 3246 y(list)p Fz(,)30 b(and)h(then)f(eliminate)g(the)g
+ (calls)g(to)g(free)g(items)f(in)h(the)g(tw)o(o)g(lists)-150
+ 3329 y(\(since)22 b(these)h(items)f(will)f(be)i(released)f(by)h
+ (pooldestro)o(y)h(before)f(an)o(y)g(ne)n(w)-150 3412
+ y(allocations)18 b(from)f(an)o(y)h(pool\))g(and)g(hence)h(the)e(loop)h
+ (enclosing)h(those)f(calls)-150 3495 y(to)g(free.)f(The)h(\002nal)f
+ (resulting)h(code)h(\(Figure)e(8\))h(puts)g(each)h(link)o(ed)f(list)f
+ (into)-150 3578 y(a)k(separate)h(pool)h(on)f(the)f(heap,)h(made)g(the)g
+ (list)f(objects)g(of)h(each)g(list)f(con-)-150 3661 y(tiguous)29
+ b(in)f(memory)-5 b(,)29 b(and)f(reclaims)g(all)g(the)g(memory)h(for)f
+ (each)g(list)g(at)-150 3744 y(once)23 b(instead)h(of)e(freeing)h(items)
+ f(indi)n(vidually)-5 b(.)24 b(In)f(the)f(e)o(xample,)h(the)g(list)-150
+ 3827 y(nodes)d(are)f(placed)h(in)e(dynamic)i(allocation)g(order)f
+ (within)g(their)f(pool.)-150 3985 y Fn(3.3)75 b(Analysis:)19
+ b(Finding)d(P)o(ool)j(Descriptors)g(f)n(or)g(each)g(H)g(Node)-150
+ 4101 y Fz(The)g(analysis)g(phase)g(identi\002es)g(which)g(pool)g
+ (descriptors)g(must)g(be)g(a)o(v)n(ail-)-150 4184 y(able)k(in)g(each)h
+ (function,)f(determines)h(where)f(the)o(y)h(must)f(be)g(created)h(and)
+ -150 4267 y(destro)o(yed,)k(and)f(assigns)h(pool)f(descriptors)g(to)g
+ (DS)f(nodes.)h(W)-6 b(e)26 b(use)h(the)-150 4350 y(term)d
+ Fy(static)g(pool)h Fz(to)f(refer)g(to)g(a)g(single)g
+ Fs(poolcreate)j Fz(statement)d(in)g(the)-150 4433 y(generated)e(code.)g
+ (By)f(de\002nition,)g Fn(H)26 b Fi(2)g Fm(M)j Fz(for)21
+ b(a)h(node)g(if)e(the)i(objects)f(of)-150 4516 y(that)h(node)i(are)e
+ (returned)h(by)g Fs(malloc)g Fz(or)g(passed)g(into)f
+ Fs(free)h Fz(by)g(the)g(cur)o(-)-150 4599 y(rent)j(function)h(or)f(an)o
+ (y)h(of)f(its)g(callees,)g(since)g(we)h(assume)g(a)f(Bottom-up)-150
+ 4682 y(DS)20 b(graph)h(\(see)f(Section)g(2.1\).)g(These)h(identify)f(e)
+ o(xactly)h(those)g(nodes)g(for)-150 4765 y(which)e(a)g(pool)h
+ (descriptor)f(must)g(be)g Fy(available)h Fz(in)f(the)g(current)g
+ (function.)-50 4848 y(Automatic)24 b(Pool)g(Allocation)g(computes)h(a)f
+ (map)g(\(pdmap\))h(identify-)-150 4932 y(ing)f(the)g(pool)h(descriptor)
+ g(corresponding)h(to)e(each)g(DS)g(node)h(with)e Fn(H)31
+ b Fi(2)-150 5015 y Fm(M)8 b Fz(.)26 b(W)-6 b(e)25 b(initially)h
+ (restrict)f(pdmap)i(to)f(be)g(a)g(one-to-one)i(mapping)f(from)-150
+ 5098 y(DS)19 b(nodes)i(to)e(pool)h(descriptor)h(v)n(ariables;)f
+ (Section)f(6)h(e)o(xtends)h(pdmap)f(to)-150 5181 y(allo)n(w)25
+ b(a)g(man)o(y-to-one)i(mapping.)f(W)-6 b(e)24 b(must)i(handle)g(tw)o(o)
+ f(cases:)g(1\))g(the)-150 5264 y(pool)c(escapes)f(the)g(current)h
+ (function)f(and)h(2\))f(the)g(pool)g(lifetime)f(is)h(bound)-150
+ 5347 y(by)d(the)h(function.)f(In)g(the)g(\002rst)f(case,)h(we)g(add)h
+ (a)f(pool)g(descriptor)h(ar)o(gument)-150 5430 y(to)d(the)h(function,)f
+ (in)g(the)h(second,)g(we)f(create)h(a)f(descriptor)h(on)f(the)h(stack)f
+ (for)2042 66 y(the)j(function)h(and)g(call)f Fs(poolcreate)p
+ Fz(/)p Fs(pooldestroy)p Fz(.)k(These)c(tw)o(o)h(cases)2042
+ 149 y(are)g(dif)n(ferentiated)g(by)g(the)g(\223escapes\224)i(property)e
+ (for)g(the)g(DS)f(node.)2141 232 y(The)j(\223escapes\224)i(property)f
+ (is)e(determined)i(by)g(a)f(simple)g(escape)h(anal-)2042
+ 315 y(ysis)33 b(on)g(the)g(bottom-up)h(DS)e(graphs,)h(implemented)h(as)
+ e(a)h(depth-\002rst)2042 399 y(tra)o(v)o(ersal.)17 b(In)g(particular)m
+ (,)h(a)g(node)g(escapes)h(if)n(f)e(1\))h(a)g(pointer)g(to)g(the)g(node)
+ g(is)2042 482 y(returned)j(by)h(the)f(function)g(\(e.g.)f
+ Fs(createnode)p Fz(\))j(2\))e(the)g(node)h(is)e(pointed)2042
+ 565 y(to)i(by)g(a)g(formal)g(ar)o(gument)h(\(e.g.)e(the)h(R1)g(node)h
+ (in)f Fs(splitclone)p Fz(\))i(3\))e(the)2042 648 y(node)d(is)e(pointed)
+ h(to)g(by)g(global)h(v)n(ariable)f(and)g(the)g(current)g(function)h(is)
+ e(not)2042 731 y(main,)i(or)f(4\))h(\(inducti)n(v)o(ely\))h(an)f
+ (escaping)h(node)g(points)g(to)f(the)g(node.)2141 814
+ y(A)k(subtle)f(point)h(is)f(that)h(an)o(y)g(node)g(that)g(does)g(not)f
+ (escape)i(a)e(function)2042 897 y(will)j(be)i(unaf)n(fected)h(by)f
+ (callers)g(of)g(the)f(function,)i(since)f(the)f(objects)h(at)2042
+ 980 y(such)g(a)g(node)h(are)f(not)g(reachable)h(\(in)f(f)o(act,)f(may)i
+ (not)f(e)o(xist\))g(before)g(the)2042 1063 y(current)h(function)g(is)f
+ (called)g(or)h(after)f(it)f(returns.)i Fy(This)f(e)o(xplains)g(why)h
+ (it)2042 1146 y(is)h(safe)h(to)g(use)g(a)g(B)o(U)g(gr)o(aph)h(for)f
+ (pool)g(allocation)p Fz(:)h(Ev)o(en)f(though)h(the)2042
+ 1229 y(B)o(U)22 b(graph)h(does)g(not)f(re\003ect)g(an)o(y)g(aliases)g
+ (induced)i(by)f(callers,)e(the)h(non-)2042 1312 y(escaping)g(nodes)f
+ (are)g(correctly)f(identi\002able)h(and)g(all)f(information)h(about)
+ 2042 1395 y(them)c(is)g(complete,)h(including)h(their)e(type)h
+ Fm(\034)9 b Fz(,)16 b(incoming)j(points-to)e(edges,)2042
+ 1478 y(and)23 b(\003ags.)g(In)g(f)o(act,)f(in)h(DSA,)f(the)h(escapes)h
+ (property)f(is)g(e)o(xplicitly)g(com-)2042 1561 y(puted)g(and)g(all)f
+ (non-escaping)j(nodes)f(are)e(mark)o(ed)i(using)f(a)f(\223)p
+ Fn(C)p Fz(\224omplete)2042 1644 y(\003ag)h([32)q(].)g(It)g(can)h(be)g
+ (computed)h(easily)f(using)g(the)g(abo)o(v)o(e)h(de\002nition)f(by)2042
+ 1727 y(an)o(y)19 b(conte)o(xt-sensiti)n(v)o(e)h(algorithm)f(that)g(has)
+ g(similar)g(points-to)g(graphs.)2042 1863 y Fn(3.3.1)75
+ b(The)18 b(Basic)h(T)-6 b(ransf)n(ormation)2042 1979
+ y Fz(Figure)28 b(4)h(sho)n(ws)g(the)f(pseudocode)j(for)e(a)f(basic)h(v)
+ o(ersion)g(of)f(the)h(Auto-)2042 2062 y(matic)20 b(Pool)g(Allocation)g
+ (transformation,)h(which)g(does)f(not)h(handle)g(indi-)2042
+ 2145 y(rect)f(function)g(calls.)g(The)g(algorithm)g(mak)o(es)h(tw)o(o)f
+ (passes)g(o)o(v)o(er)h(the)f(func-)2042 2228 y(tions)j(in)f(the)h
+ (program)h(in)e(arbitrary)h(order)l(.)g(The)f(\002rst)g(\(lines)h
+ (1\22611\))g(adds)2042 2311 y(ar)o(guments)k(to)e(functions,)i(creates)
+ f(local)g(pool)h(descriptors,)f(and)h(b)o(uilds)2042
+ 2394 y(the)c(pdmap.)i(The)e(second)i(\(lines)e(12\22620\))i(re)n
+ (writes)e(the)h(bodies)g(of)g(func-)2042 2477 y(tions)19
+ b(using)g(pdmap.)2292 2569 y Fq(basicpoolallocate)p Fw(\(program)e
+ Fp(P)9 b Fw(\))2248 2636 y(1)73 b Fu(8)p Fp(F)27 b Fu(2)15
+ b Fw(functions\()p Fp(P)9 b Fw(\))2248 2702 y(2)131 b(dsgraph)15
+ b Fp(G)j Fe(=)p Fw(DSGraphF)o(orFunction\()p Fp(F)9 b
+ Fw(\))2248 2769 y(3)131 b Fu(8)p Fp(n)19 b Fu(2)14 b
+ Fw(nodes\()p Fp(G)p Fw(\))320 b(//)15 b(Find)g(pooldesc)f(for)i(heap)e
+ (nodes)2248 2835 y(4)189 b(if)15 b(\()p Fq(H)g Fu(2)k
+ Fp(n:M)6 b Fw(\))2248 2901 y(5)247 b(if)15 b(\(escapes\()p
+ Fp(n)p Fw(\)\))241 b(//)15 b(If)g(node)g(escapes)e(fn)2248
+ 2968 y(6)305 b(Pool*)16 b Fp(a)e Fw(=)g(AddPoolDescAr)o(gument\()p
+ Fp(F)9 b Fw(,)15 b Fp(n)p Fw(\))2248 3034 y(7)305 b(pdmap\()p
+ Fp(n)p Fw(\))16 b(=)e Fp(a)193 b Fw(//)15 b(Remember)g(pooldesc)2248
+ 3101 y(8)305 b(ar)o(gnodes\()p Fp(F)9 b Fw(\))15 b(=)g(ar)o(gnodes\()p
+ Fp(F)9 b Fw(\))15 b Fu([)f(f)p Fp(n)p Fu(g)2248 3167
+ y Fw(9)247 b(else)496 b(//)15 b(Node)f(is)h(local)f(to)h(fn)2234
+ 3234 y(10)290 b(Pool*)16 b Fp(pd)e Fw(=)g(AddInitAndDestro)o
+ (yLocalPool\()p Fp(F)9 b Fw(,)16 b Fp(n)p Fw(\))2234
+ 3300 y(11)290 b(pdmap\()p Fp(n)p Fw(\))16 b(=)e Fp(pd)2234
+ 3393 y Fw(12)58 b Fu(8)p Fp(F)27 b Fu(2)15 b Fw(functions\()p
+ Fp(P)9 b Fw(\))2234 3459 y(13)116 b Fu(8)p Fp(I)23 b
+ Fu(2)c Fp(instr)r(uctions)p Fe(\()p Fp(F)9 b Fe(\))71
+ b Fw(//)15 b(Re)o(write)f(function)2234 3525 y(14)174
+ b(if)15 b(\()p Fp(I)20 b Fw(isa)14 b(`)p Fp(ptr)j Fw(=)d(malloc\()p
+ Fp(siz)r(e)p Fw(\)'\))2234 3592 y(15)232 b(replace)15
+ b Fp(I)k Fw(with)c('poolalloc\(pdmap\(N\()p Fp(ptr)r
+ Fw(\)\),)h Fp(siz)r(e)p Fw(\)')2234 3658 y(16)174 b(else)14
+ b(if)h(\()p Fp(I)20 b Fw(isa)14 b(`free\()p Fp(ptr)r
+ Fw(\)'\))2234 3725 y(17)232 b(replace)15 b Fp(I)k Fw(with)c
+ (`poolfree\(pdmap\(N\()p Fp(ptr)r Fw(\)\),)i Fp(ptr)r
+ Fw(\)')2234 3791 y(18)174 b(else)14 b(if)h(\()p Fp(I)20
+ b Fw(isa)14 b(`call)h Fp(C)t(allee)p Fw(\()p Fp(ar)r(g)r(s)p
+ Fw(\)'\))2234 3857 y(19)232 b Fu(8)p Fp(n)19 b Fu(2)14
+ b Fw(ar)o(gnodes\()p Fp(C)t(allee)p Fw(\))2234 3924 y(20)290
+ b(addCallAr)o(gument\(pdmap\(NodeInCaller\()p Fp(F)r(;)13
+ b(I)5 b(;)11 b(n)p Fw(\)\)\))p 2042 4021 1993 3 v 2405
+ 4106 a Fn(Figur)o(e)18 b(4.)g Fz(Pseudo)i(code)g(for)f(basic)g
+ (algorithm)2141 4210 y(F)o(or)24 b(each)g(node)h(that)f(needs)h(a)f
+ (pool)g(in)g(the)g(function,)h(the)f(algorithm)2042 4293
+ y(either)k(adds)i(a)e(pool)i(descriptor)f(ar)o(gument)g(\(if)f(the)h
+ (DS)f(node)h(escapes\))2042 4376 y(or)c(it)f(allocates)h(a)g(pool)h
+ (descriptor)f(on)h(the)f(stack.)g(Non-escaping)h(pools)2042
+ 4459 y(are)17 b(initialized)g(\(using)g Fs(poolcreate)p
+ Fz(\))i(on)f(entry)f(to)g(the)g(function)h(and)g(de-)2042
+ 4542 y(stro)o(yed)23 b(\()p Fs(pooldestroy)p Fz(\))i(at)d(e)n(v)o(ery)h
+ (e)o(xit)g(of)f(the)h(function)g(\(these)g(place-)2042
+ 4625 y(ment)i(choices)g(are)g(impro)o(v)o(ed)g(in)g(Section)f(4.2\).)g
+ (Because)i(the)e(DS)g(node)2042 4708 y(does)g(not)f(escape)h(the)f
+ (function,)g(we)g(are)g(guaranteed)i(that)e(an)o(y)g(memory)2042
+ 4791 y(allocated)g(from)f(that)h(pool)g(can)g(ne)n(v)o(er)g(be)g
+ (accessed)h(outside)f(of)g(the)g(cur)o(-)2042 4874 y(rent)c(function,)h
+ (i.e.,)f(it)f(is)i(safe)f(to)h(destro)o(y)g(the)g(pool,)g(e)n(v)o(en)g
+ (if)f(some)h(mem-)2042 4957 y(ory)d(w)o(as)f(not)h(deallocated)g(by)g
+ (the)f(original)h(program.)g(Note)f(that)h(this)f(may)2042
+ 5040 y(actually)j(eliminate)g(some)g(memory)h(leaks)f(in)g(the)g
+ (program!)2141 5123 y(In)g(the)g(second)h(pass)f(\(lines)g(12\22620\),)
+ h(the)e(algorithm)h(replaces)h(calls)e(to)2042 5209 y
+ Fs(malloc\(\))25 b Fz(and)f Fs(free\(\))2744 5178 y Ft(3)2797
+ 5209 y Fz(with)f(calls)g(to)h Fs(poolalloc)h Fz(and)f
+ Fs(poolfree)p Fz(.)p 2042 5289 997 3 v 2042 5340 a Ft(3)2079
+ 5363 y Fw(Note)e(that)h(\223malloc)f(wrappers\224)g(\(lik)o(e)h
+ Fd(calloc)p Fw(,)e Fd(operator)30 b(new)p Fw(,)21 b Fd(strdup)p
+ Fw(,)g(etc\))i(do)f(not)2042 5430 y(need)j(special)f(support)i(from)g
+ (the)g(pool)f(allocator)m(.)g(Their)g(bodies)g(are)g(simply)h(link)o
+ (ed)g(into)p eop end
+ %%Page: 6 6
+ TeXDict begin 6 5 bop -150 66 a Fz(W)-6 b(e)26 b(pass)h(the)f
+ (appropriate)h(pool)g(descriptor)g(pointer)g(using)g(the)f(pdmap)-150
+ 149 y(information)f(sa)o(v)o(ed)f(by)g(the)g(\002rst)f(pass.)h(Since)g
+ (the)g(DS)f(node)i(must)f(ha)o(v)o(e)-150 232 y(an)16
+ b Fn(H)f Fz(\003ag,)g(a)h(pool)g(descriptor)g(is)f(guaranteed)i(to)f
+ (be)f(a)o(v)n(ailable)h(in)g(the)f(map.)-50 315 y(Calls)29
+ b(to)h(functions)h(other)f(than)g Fs(malloc)h Fz(or)f
+ Fs(free)h Fz(must)f(pass)g(ad-)-150 399 y(ditional)25
+ b(pool)h(descriptor)g(ar)o(guments)g(for)g(memory)g(that)f(escapes)h
+ (from)-150 482 y(them.)32 b(Because)g(the)g(B)o(U)f(Graph)i(of)e(the)h
+ (callee)g(re\003ects)f(all)g(accessed)-150 565 y(memory)20
+ b(objects)f(of)g(all)g(transiti)n(v)o(e)f(callees,)h(an)o(y)h(heap)f
+ (objects)h(allocated)-150 648 y(by)c(a)f(callee)h(will)e(be)i
+ (represented)g(by)g(an)g Fn(H)f Fz(node)i(in)e(the)g(caller)g(graph)i
+ (\(this)-150 731 y(is)23 b(true)h(e)n(v)o(en)g(for)g(recursi)n(v)o(e)g
+ (functions)h(lik)o(e)e Fs(splitclone)p Fz(\).)i(This)f(prop-)-150
+ 814 y(erty)16 b(guarantees)h(that)f(a)g(caller)g(will)f(ha)o(v)o(e)h
+ (all)g(of)g(the)g(pool)h(descriptors)f(that)-150 897
+ y(an)o(y)j(callee)g(will)f(e)n(v)o(er)i(need.)-50 980
+ y(A)34 b(k)o(e)o(y)i(primiti)n(v)o(e)e(computable)i(from)f(DS)f(graphs)
+ h(is)g(a)f(mapping,)-150 1063 y Fm(N)8 b(odeI)e(nC)f(al)q(l)q(er)r
+ Fl(\()p Fm(F)r(;)13 b(C)q(;)g(n)p Fl(\))p Fz(.)25 b(F)o(or)g(a)g(call)g
+ (instruction,)h Fm(C)5 b Fz(,)25 b(in)g(a)g(function)-150
+ 1146 y Fm(F)11 b Fz(,)25 b(if)h Fm(n)g Fz(is)g(a)g(DS)g(node)h(in)f(an)
+ o(y)h(possible)f(callee)h(at)f(that)g(call)f(site,)h(then)-150
+ 1229 y Fm(n)-104 1197 y Fc(0)-60 1229 y Fl(=)21 b Fm(N)8
+ b(odeI)e(nC)f(al)q(l)q(er)r Fl(\()p Fm(F)r(;)13 b(C)q(;)g(n)p
+ Fl(\))18 b Fz(identi\002es)g(the)g(node)h(in)f(the)g(DS)f(graph)-150
+ 1312 y(of)h Fm(F)28 b Fz(corresponding)20 b(to)e(node)h
+ Fm(n)f Fz(due)g(to)g(side-ef)n(fects)g(of)g(the)f(call)h
+ Fm(C)23 b Fz(\(i.e.,)-150 1395 y Fm(n)-104 1363 y Fc(0)-60
+ 1395 y Fz(includes)f(the)g(memory)h(objects)f(of)f(node)i
+ Fm(n)f Fz(visible)f(in)h Fm(F)32 b Fz(due)22 b(to)g(this)-150
+ 1478 y(call\).)29 b(The)h(mapping)h(is)f(computed)i(in)d(a)h(single)h
+ (linear)o(-time)e(tra)o(v)o(ersal)-150 1561 y(o)o(v)o(er)c(matching)g
+ (paths)g(in)f(the)g(caller)h(and)g(callee)f(graphs,)h(starting)f(from)
+ -150 1644 y(matching)17 b(pairs)f(of)f(actual)h(and)h(formal)f(nodes,)g
+ (matching)h(pairs)f(of)g(global)-150 1727 y(v)n(ariable)32
+ b(nodes,)g(and)g(the)g(return)f(v)n(alue)i(nodes)f(in)f(the)h(tw)o(o)f
+ (graphs)i(if)-150 1810 y(an)o(y)-5 b(.)30 b(If)g Fm(n)g
+ Fz(escapes)h(from)f(the)g(callee,)f(then)i(the)f(matching)g(node)h
+ Fm(n)1740 1778 y Fc(0)1793 1810 y Fz(is)-150 1893 y(guaranteed)23
+ b(to)f(e)o(xist)f(in)g(the)h(caller')l(s)f(B)o(U)h(graph)g(\(due)g(to)g
+ (the)f(bottom-up)-150 1976 y(inlining)27 b(process)h(used)g(to)f
+ (construct)h(the)f(B)o(U)g(graphs\),)h(and)f(is)g(unique)-150
+ 2059 y(because)20 b(the)f(DS)f(graphs)i(are)f(uni\002cation-based)h
+ ([32)q(].)-50 2142 y(Identifying)i(which)g(pool)g(of)g(the)g(caller)f
+ (\()p Fm(F)11 b Fz(\))21 b(to)g(pass)i(for)e(callee)h(pool)-150
+ 2225 y(ar)o(guments)32 b(at)f(call)g(instruction)h Fm(I)37
+ b Fz(is)31 b(no)n(w)h(straightforw)o(ard:)f(for)h(each)-150
+ 2308 y(callee)22 b(node)h Fm(n)f Fz(that)g(needs)h(an)f(ar)o(gument)g
+ (pool)h(descriptor)m(,)f(we)g(pass)g(the)-150 2391 y(pool)16
+ b(descriptor)f(for)g(the)g(node)h Fm(N)8 b(odeI)e(nC)f(al)q(l)q(er)r
+ Fl(\()p Fm(F)r(;)12 b(I)6 b(;)13 b(n)p Fl(\))i Fz(in)g(the)g(caller')l
+ (s)-150 2474 y(DS)26 b(graph.)i(W)-6 b(e)27 b(record)h(the)f(set)g(of)g
+ (nodes)h(\(\223ar)o(gnodes\224\))h(that)e(must)g(be)-150
+ 2557 y(passed)20 b(into)f(each)g(function,)h(in)f(the)g(\002rst)f
+ (pass.)-50 2640 y(V)-8 b(ariable-ar)o(gument)22 b(functions)h(do)f(not)
+ h(need)g(an)o(y)f(special)g(treatment)-150 2723 y(in)33
+ b(the)f(transformation)i(because)g(of)e(their)h(representation)g(in)g
+ (the)f(B)o(U)-150 2806 y(graphs)d(computed)g(by)f(DSA.)e(In)i
+ (particular)m(,)f(the)h(DS)e(graph)j(nodes)f(for)-150
+ 2889 y(all)19 b(pointer)o(-compatible)h(ar)o(guments)g(passed)h(via)e
+ (the)h(\223)p Fs(...)p Fz(\224)g(mechanism)-150 2972
+ y(\(i.e.,)g(recei)n(v)o(ed)i(via)g Fs(va)p 473 2972 24
+ 4 v 28 w(arg)p Fz(\))g(are)f(mer)o(ged)h(so)g(that)f(the)o(y)h(are)f
+ (represented)-150 3055 y(by)d(a)g(single)g(DS)e(node)j(in)f(the)f
+ (caller)h(and)g(callee.)f(If)g(the)h(DS)f(node)h(pointed)-150
+ 3138 y(to)25 b(by)h(this)f(ar)o(gument)g(node)i(has)e
+ Fn(H)33 b Fi(2)h Fm(M)8 b Fz(,)25 b(a)g(single)g(pool)h(ar)o(gument)g
+ (is)-150 3221 y(added)c(to)e(the)h(function.)g(At)f(e)n(v)o(ery)h(call)
+ g(site)f(of)g(this)h(function,)g(the)f(nodes)-150 3304
+ y(for)e(the)g(actual)g(ar)o(gument)h(\(corresponding)h(to)e(the)h(mer)o
+ (ged)f(formals\))g(will)-150 3387 y(also)28 b(ha)o(v)o(e)h(been)g(mer)o
+ (ged,)f(and)h(the)g(pool)g(corresponding)h(to)e(this)g(node)-150
+ 3470 y(will)j(be)h(found)h(by)f Fm(N)8 b(odeI)e(nC)f(al)q(l)q(er)r
+ Fl(\()p Fm(F)r(;)12 b(I)6 b(;)13 b(n)p Fl(\))32 b Fz(and)g(passed)h(in)
+ e(as)h(the)-150 3553 y(pool)19 b(ar)o(gument.)g(Note)g(that)f(e)o
+ (xplicit)g(ar)o(guments)i(before)f(the)f Fs(...)h Fz(are)g(not)-150
+ 3636 y(mer)o(ged)g(and)h(can)f(ha)o(v)o(e)h(distinct)e(pools.)-150
+ 3808 y Fn(3.3.2)75 b(P)o(assing)19 b(Descriptors)g(f)n(or)g(Indir)o
+ (ect)f(Function)f(Calls)-150 3924 y Fz(Indirect)29 b(function)h(calls)f
+ (mak)o(e)i(it)d(much)i(more)g(comple)o(x)g(to)f(pass)h(cor)o(-)-150
+ 4007 y(rect)18 b(pool)h(descriptor)g(ar)o(guments)f(to)h(each)f
+ (function.)h(There)f(are)g(multiple)-150 4090 y(dif)n(\002culties.)25
+ b(First,)f(dif)n(ferent)i(functions)g(called)g(via)g(a)f(function)i
+ (pointer)-150 4173 y(at)e(the)g(same)h(call)e(site)h(may)h(require)f
+ (dif)n(ferent)g(sets)g(of)h(pools.)f(Figure)g(5)-150
+ 4256 y(sho)n(ws)h(a)f(simple)g(e)o(xample)g(where)h Fs(func1)g
+ Fz(needs)f(no)h(pools)g(b)o(ut)e Fs(func2)-150 4339 y
+ Fz(needs)h(one)f(pool,)h(and)f(both)h(are)f(called)g(at)g(the)g(same)g
+ (site.)f(Second,)i(dif-)-150 4422 y(ferent)e(indirect)g(call)g(sites)g
+ (can)g(ha)o(v)o(e)h(dif)n(ferent)f(b)o(ut)g(o)o(v)o(erlapping)h(sets)f
+ (of)-150 4506 y(callees,)h(e.g.,)f Fi(f)p Fm(F)333 4514
+ y Fb(1)368 4506 y Fm(;)13 b(F)451 4514 y Fb(2)486 4506
+ y Fi(g)24 b Fz(and)h Fi(f)p Fm(F)767 4514 y Fb(2)802
+ 4506 y Fm(;)13 b(F)885 4514 y Fb(3)919 4506 y Fi(g)25
+ b Fz(at)e(tw)o(o)h(dif)n(ferent)g(call)g(sites.)f(In)-150
+ 4589 y(order)18 b(to)f(a)o(v)o(oid)g(cloning)i Fm(F)571
+ 4597 y Fb(2)622 4589 y Fz(into)f(tw)o(o)f(v)o(ersions,)h(we)f(must)h
+ (pass)g(the)f(same)-150 4672 y(pool)23 b(ar)o(guments)g(to)f(all)g
+ (three)g(functions)h Fm(F)1034 4680 y Fb(1)1069 4672
+ y Fm(;)13 b(F)1152 4680 y Fb(2)1208 4672 y Fz(and)23
+ b Fm(F)1387 4680 y Fb(3)1422 4672 y Fz(.)e(This)h(raises)g(a)-150
+ 4755 y(third)j(major)g(problem:)h(because)g(the)f(call)g(graph)h(says)g
+ (that)f Fm(F)1555 4763 y Fb(3)1614 4755 y Fz(is)g(not)g(a)-150
+ 4838 y(callee)c(at)g(the)g(\002rst)f(call-site,)h(its)f(DS)h(graph)h(w)
+ o(as)f(ne)n(v)o(er)h(inlined)f(into)g(that)-150 4921
+ y(of)d(the)g(caller)f(at)g(that)h(call-site.)f(This)g(means)h(that)g
+ (the)g(matching)g(of)g(nodes)-150 5004 y(between)d(caller)g(and)g
+ (callee)g(graphs,)g(which)g(is)f(essential)h(for)f(passing)i(pool)-150
+ 5087 y(descriptors,)23 b(may)h(be)f(unde\002ned:)h Fm(N)8
+ b(odeI)e(nC)f(al)q(l)q(er)r Fl(\()p Fm(F)r(;)13 b(C)q(;)g(n)p
+ Fl(\))23 b Fz(may)g(not)-150 5170 y(e)o(xist)h(for)g(all)g(escaping)h
+ Fm(n)p Fz(.)f(Programs)g(that)g(violate)h(the)f(type)h(signatures)p
+ -150 5289 997 3 v -150 5363 a Fw(the)19 b(program)h(and)e(treated)h(as)
+ f(if)i(the)o(y)f(were)f(a)h(user)g(function,)g(getting)g(ne)o(w)f(pool)
+ h(descriptor)-150 5430 y(ar)o(guments)c(to)f(indicate)h(which)f(pool)h
+ (to)g(allocate)f(from.)2051 96 y Fq(i)9 b(n)g(t)17 b
+ Fu(\003)36 b Fw(f)7 b(u)g(n)g(c)g(1)15 b(\()j Fq(i)9
+ b(n)g(t)17 b Fu(\003)37 b Fw(i)8 b(n)18 b(\))34 b Fu(f)g(\003)18
+ b Fw(i)8 b(n)48 b(=)39 b(1)13 b(;)47 b Fq(r)7 b(e)g(t)g(u)g(r)g(n)49
+ b Fw(i)8 b(n)19 b(;)34 b Fu(g)2051 163 y Fq(i)9 b(n)g(t)17
+ b Fu(\003)36 b Fw(f)7 b(u)g(n)g(c)g(2)15 b(\()j Fq(i)9
+ b(n)g(t)17 b Fu(\003)37 b Fw(i)8 b(n)20 b(\))38 b Fu(f)47
+ b Fw(f)10 b(r)g(e)g(e)17 b(\()f(i)8 b(n)20 b(\))12 b(;)2817
+ 229 y(i)c(n)46 b(=)38 b(\()21 b Fq(i)9 b(n)g(t)20 b Fu(\003)9
+ b Fw(\))41 b(m)7 b(a)g(l)g(l)g(o)g(c)16 b(\()i Fq(s)10
+ b(i)g(z)g(e)g(o)g(f)18 b Fw(\()g Fq(i)9 b(n)g(t)23 b
+ Fw(\))12 b(\))h(;)2809 296 y Fu(\003)c Fw(i)f(n)48 b(=)39
+ b(2)13 b(;)47 b Fq(r)7 b(e)g(t)g(u)g(r)g(n)49 b Fw(i)8
+ b(n)19 b(;)34 b Fu(g)2051 362 y Fq(i)9 b(n)g(t)57 b Fw(c)11
+ b(a)g(l)h(l)f(e)h(r)19 b(\()f Fq(i)9 b(n)g(t)41 b Fw(X)6
+ b(\))33 b Fu(f)2121 428 y Fq(i)9 b(n)g(t)18 b Fu(\003)29
+ b Fw(\()8 b Fu(\003)15 b Fw(f)7 b(p)18 b(\))10 b(\()20
+ b Fq(i)9 b(n)g(t)21 b Fu(\003)11 b Fw(\))36 b(=)g(\()7
+ b(X)36 b Fp(>)31 b Fw(1)8 b(\))g(?)39 b(f)7 b(u)g(n)g(c)g(1)51
+ b(:)h(f)7 b(u)g(n)g(c)g(2)17 b(;)2121 495 y Fq(i)9 b(n)g(t)39
+ b Fu(\003)10 b Fw(p)41 b(=)c(\()21 b Fq(i)9 b(n)g(t)20
+ b Fu(\003)9 b Fw(\))41 b(m)7 b(a)g(l)g(l)g(o)g(c)16 b(\()j
+ Fq(s)9 b(i)h(z)g(e)g(o)g(f)18 b Fw(\()g Fq(i)9 b(n)g(t)23
+ b Fw(\))12 b(\))h(;)2121 561 y Fq(i)c(n)g(t)39 b Fu(\003)10
+ b Fw(q)39 b(=)j(f)7 b(p)16 b(\()11 b(p)j(\))e(;)2118
+ 628 y Fq(r)7 b(e)g(t)g(u)g(r)g(n)35 b Fu(\003)10 b Fw(q)j(;)2042
+ 694 y Fu(g)2297 827 y Fz(\(a\))19 b(Input)g(C)g(program)h(with)e(an)h
+ (indirect)g(function)h(call)2051 1001 y Fq(i)9 b(n)g(t)17
+ b Fu(\003)36 b Fw(f)7 b(u)g(n)g(c)g(1)15 b(\()g(P)7 b(o)g(o)g(l)13
+ b Fu(\003)29 b Fw(P)16 b(,)50 b Fq(i)9 b(n)g(t)18 b Fu(\003)37
+ b Fw(i)8 b(n)18 b(\))34 b Fu(f)g(\003)18 b Fw(i)8 b(n)48
+ b(=)39 b(1)13 b(;)46 b Fq(r)7 b(e)g(t)g(u)g(r)g(n)50
+ b Fw(i)8 b(n)18 b(;)35 b Fu(g)2051 1068 y Fq(i)9 b(n)g(t)17
+ b Fu(\003)36 b Fw(f)7 b(u)g(n)g(c)g(2)15 b(\()g(P)7 b(o)g(o)g(l)13
+ b Fu(\003)29 b Fw(P)16 b(,)50 b Fq(i)9 b(n)g(t)18 b Fu(\003)37
+ b Fw(i)8 b(n)20 b(\))37 b Fu(f)47 b Fw(p)9 b(o)g(o)g(l)g(f)g(r)g(e)g(e)
+ 21 b(\()9 b(P)16 b(,)49 b(i)8 b(n)20 b(\))12 b(;)2538
+ 1134 y(i)c(n)47 b(=)37 b(\()21 b Fq(i)9 b(n)g(t)20 b
+ Fu(\003)9 b Fw(\))43 b(p)10 b(o)g(o)g(l)f(a)h(l)g(l)g(o)g(c)17
+ b(\()9 b(P)16 b(,)51 b Fq(s)9 b(i)i(z)f(e)f(o)h(f)19
+ b Fw(\()e Fq(i)9 b(n)g(t)23 b Fw(\))13 b(\))f(;)2530
+ 1200 y Fu(\003)d Fw(i)f(n)48 b(=)39 b(2)13 b(;)47 b Fq(r)7
+ b(e)g(t)g(u)g(r)g(n)49 b Fw(i)8 b(n)19 b(;)34 b Fu(g)2051
+ 1333 y Fq(i)9 b(n)g(t)57 b Fw(c)11 b(a)g(l)h(l)f(e)h(r)19
+ b(\()f Fq(i)9 b(n)g(t)41 b Fw(X)6 b(\))33 b Fu(f)2118
+ 1400 y Fw(P)7 b(o)g(o)g(l)41 b(PD1)14 b(;)86 b(p)10 b(o)f(o)h(l)g(c)f
+ (r)h(e)g(a)f(t)h(e)i(\()r(&)r(PD1)18 b(,)48 b(.)17 b(.)f(.)h(\))g(;)
+ 2121 1466 y Fq(i)9 b(n)g(t)18 b Fu(\003)29 b Fw(\()8
+ b Fu(\003)15 b Fw(f)7 b(p)18 b(\))10 b(\()20 b Fq(i)9
+ b(n)g(t)21 b Fu(\003)11 b Fw(\))36 b(=)g(\()7 b(X)36
+ b Fp(>)31 b Fw(1)8 b(\))g(?)39 b(f)7 b(u)g(n)g(c)g(1)51
+ b(:)h(f)7 b(u)g(n)g(c)g(2)17 b(;)2121 1533 y Fq(i)9 b(n)g(t)39
+ b Fu(\003)10 b Fw(p)41 b(=)c(\()21 b Fq(i)9 b(n)g(t)20
+ b Fu(\003)9 b Fw(\))43 b(p)10 b(o)g(o)g(l)g(a)f(l)h(l)g(o)g(c)17
+ b(\()8 b(PD1)15 b(,)52 b Fq(s)9 b(i)h(z)g(e)g(o)g(f)18
+ b Fw(\()g Fq(i)9 b(n)g(t)23 b Fw(\))12 b(\))h(;)2121
+ 1599 y Fq(i)c(n)g(t)39 b Fu(\003)10 b Fw(q)39 b(=)j(f)7
+ b(p)16 b(\()8 b(PD1)15 b(,)44 b(p)15 b(\))c(;)2121 1665
+ y(p)e(o)g(o)g(l)g(d)g(e)g(s)g(t)g(r)g(o)g(y)j(\()r(&)r(PD1)j(\))f(;)49
+ b Fq(r)7 b(e)g(t)g(u)g(r)g(n)35 b Fu(\003)10 b Fw(q)i(;)2042
+ 1732 y Fu(g)2570 1923 y Fz(\(b\))19 b(C)f(code)i(after)f(pool)g
+ (allocation)2058 2504 y @beginspecial 35 @llx 35 @lly
+ 267 @urx 165 @ury 648 @rhi @setspecial
+ %%BeginDocument: figs/td.func2.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (vadve) Vikram Adve
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 267 165
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % 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
+ /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 267 165
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 232 130 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Node0x9f1e6c8
+ gsave 10 dict begin
+ newpath 77 8 moveto
+ 121 8 lineto
+ stroke
+ newpath 121 8 moveto
+ 126 8 133 13 133 19 curveto
+ stroke
+ newpath 133 19 moveto
+ 133 35 lineto
+ stroke
+ newpath 133 35 moveto
+ 133 41 127 48 121 48 curveto
+ stroke
+ newpath 121 48 moveto
+ 77 48 lineto
+ stroke
+ newpath 77 48 moveto
+ 72 48 66 42 66 36 curveto
+ stroke
+ newpath 66 36 moveto
+ 66 20 lineto
+ stroke
+ newpath 66 20 moveto
+ 66 14 71 8 77 8 curveto
+ stroke
+ gsave 10 dict begin
+ 99 33 moveto 53 -0.5 (int: HM) alignedtext
+ end grestore
+ newpath 66 28 moveto
+ 133 28 lineto
+ stroke
+ gsave 10 dict begin
+ 99 13 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x9f17c38
+ gsave 10 dict begin
+ 27 102 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 27 97 moveto 18 -0.5 ( in) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x9f17c38 -> Node0x9f1e6c8
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 45 84 moveto
+ 53 75 64 65 73 55 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 47 85 moveto
+ 44 82 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 74 57 moveto
+ 79 48 lineto
+ 71 54 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x9f19d38
+ gsave 10 dict begin
+ 99 102 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 99 97 moveto 32 -0.5 ( tmp) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x9f19d38 -> Node0x9f1e6c8
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 99 79 moveto
+ 99 72 99 65 99 57 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 102 79 moveto
+ 97 79 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 102 58 moveto
+ 99 48 lineto
+ 97 58 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x9f17ab8
+ gsave 10 dict begin
+ 187 102 43 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 187 97 moveto 65 -0.5 (returning) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x9f17ab8 -> Node0x9f1e6c8
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 164 83 moveto
+ 153 75 141 64 130 54 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 165 81 moveto
+ 162 84 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 132 53 moveto
+ 123 48 lineto
+ 129 56 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 2134 2587 a(\(c\))g(Mer)o(ged)h(EB)o(U)e(Graph)h(for)2271
+ 2670 y Fs(func1)h Fz(and)g Fs(func2)3092 2538 y @beginspecial
+ 35 @llx 35 @lly 291 @urx 177 @ury 648 @rhi @setspecial
+ %%BeginDocument: figs/td.main.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (vadve) Vikram Adve
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 291 177
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % 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
+ /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 291 177
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 256 142 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Node0x9f17cf8
+ gsave 10 dict begin
+ newpath 11 8 moveto
+ 97 8 lineto
+ stroke
+ newpath 97 8 moveto
+ 103 8 110 14 110 20 curveto
+ stroke
+ newpath 110 20 moveto
+ 110 47 lineto
+ stroke
+ newpath 110 47 moveto
+ 110 53 104 60 98 60 curveto
+ stroke
+ newpath 98 60 moveto
+ 12 60 lineto
+ stroke
+ newpath 12 60 moveto
+ 6 60 0 53 0 47 curveto
+ stroke
+ newpath 0 47 moveto
+ 0 20 lineto
+ stroke
+ newpath 0 20 moveto
+ 0 14 5 8 11 8 curveto
+ stroke
+ gsave 10 dict begin
+ 55 45 moveto 96 -0.5 (int* \(int*\): GU) alignedtext
+ 55 29 moveto 56 -0.5 ( %func1) alignedtext
+ 55 13 moveto 60 -0.5 ( %func2) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x9f18ba8
+ gsave 10 dict begin
+ newpath 154 14 moveto
+ 210 14 lineto
+ stroke
+ newpath 210 14 moveto
+ 217 14 223 19 223 25 curveto
+ stroke
+ newpath 223 25 moveto
+ 223 41 lineto
+ stroke
+ newpath 223 41 moveto
+ 223 47 217 54 211 54 curveto
+ stroke
+ newpath 211 54 moveto
+ 155 54 lineto
+ stroke
+ newpath 155 54 moveto
+ 148 54 143 48 143 42 curveto
+ stroke
+ newpath 143 42 moveto
+ 143 26 lineto
+ stroke
+ newpath 143 26 moveto
+ 143 20 148 14 154 14 curveto
+ stroke
+ gsave 10 dict begin
+ 183 39 moveto 66 -0.5 (int: HMR) alignedtext
+ end grestore
+ newpath 143 34 moveto
+ 223 34 lineto
+ stroke
+ gsave 10 dict begin
+ 183 19 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x9f18b70
+ gsave 10 dict begin
+ 155 114 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 155 109 moveto 8 -0.5 (q) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x9f18b70 -> Node0x9f18ba8
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 162 92 moveto
+ 165 84 169 73 173 63 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 165 92 moveto
+ 160 91 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 175 64 moveto
+ 176 54 lineto
+ 170 63 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x9f188a0
+ gsave 10 dict begin
+ 55 114 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 55 109 moveto 16 -0.5 (fp) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x9f188a0 -> Node0x9f17cf8
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 55 91 moveto
+ 55 84 55 77 55 70 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 58 91 moveto
+ 53 91 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 58 70 moveto
+ 55 60 lineto
+ 53 70 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x9f182e0
+ gsave 10 dict begin
+ 227 114 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 227 109 moveto 13 -0.5 ( p) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x9f182e0 -> Node0x9f18ba8
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 216 93 moveto
+ 211 84 205 73 199 63 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 218 91 moveto
+ 214 94 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 201 62 moveto
+ 194 54 lineto
+ 197 64 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 3159 2621 a Fz(\(d\):)e(EB)o(U)g(Graph)i(for)f
+ Fs(caller)p 2042 2765 1993 3 v 2383 2850 a Fn(Figur)o(e)f(5.)h(Example)
+ g(with)e(function)h(pointers)2068 2933 y Fy(Though)28
+ b Fk(func1)f Fy(and)g Fk(func2)h Fy(ar)m(e)f(called)g(at)f(the)h(same)f
+ (call)h(site)o(,)f(only)2042 3016 y(one)g(needs)g(a)f(pool)h
+ (descriptor)-8 b(.)26 b(The)f(algorithm)h(puts)g(them)f(in)g(a)h
+ (single)2042 3099 y(equivalence)e(class,)f(mer)m(g)o(es)h(their)e(DS)h
+ (gr)o(aphs,)h(adds)f(a)g(pool)h(ar)m(gument)2042 3182
+ y(to)19 b(both)g(functions.)2042 3354 y Fz(of)i(functions)i(at)e(call)g
+ (sites)g(\(not)h(uncommon)h(in)f(C)f(code\))h(e)o(xacerbate)h(all)2042
+ 3437 y(three)i(problems)g(because)h(an)o(y)f(attempt)g(to)f(match)h
+ (pool)h(ar)o(guments)f(e)o(x-)2042 3520 y(plicitly)c(for)g(dif)n
+ (ferent)g(callees)h(must)f(account)h(for)f(mismatches)h(between)2042
+ 3603 y(the)d(actual)g(and)g(formals)g(for)g(each)h(possible)f(callee.)
+ 2141 3686 y(Our)24 b(solution)g(is)f(composed)i(of)e(tw)o(o)h(k)o(e)o
+ (y)g(principles,)f(described)i(be-)2042 3769 y(lo)n(w)-5
+ b(,)20 b(and)h(sho)n(wn)g(in)f(pseudocode)j(in)e(Figure)f(6.)g(The)g
+ (\002rst)g(principle)g(is)g(to)2042 3852 y(partition)c(into)h(equi)n(v)
+ n(alence)h(classes)f(so)f(that)g(all)g(potentially)h(callees)g(at)f(an)
+ 2042 3935 y(indirect)h(call)g(site)g(are)g(in)g(the)g(same)g(class.)g
+ (W)-6 b(e)17 b(then)h(treat)e Fy(all)h Fz(functions)h(in)2042
+ 4018 y(the)f(same)h(equi)n(v)n(alence)i(class)d(as)h(potential)f
+ (callees)h(for)f(that)h(call)f(site.)g(F)o(or)2042 4101
+ y(e)o(xample,)23 b Fs(func1)h Fz(and)g Fs(func2)g Fz(in)f(the)g(e)o
+ (xample)h(\002gure)f(are)h(put)f(into)g(the)2042 4184
+ y(same)f(class,)f(and)h(so)f(are)h Fm(F)2780 4192 y Fb(1)2814
+ 4184 y Fm(;)13 b(F)2897 4192 y Fb(2)2953 4184 y Fz(and)22
+ b Fm(F)3131 4192 y Fb(3)3187 4184 y Fz(in)g(the)f(e)o(xample)h(abo)o(v)
+ o(e.)g(Lines)2042 4267 y(1-2)e(uses)g(the)g(call)f(graph)h(to)g
+ (partition)g(all)f(the)g(functions)i(of)e(the)h(program)2042
+ 4350 y(into)f(disjoint)g(equi)n(v)n(alence)h(classes)g(in)e(this)h
+ (manner)l(.)2141 4433 y(The)d(second)h(principle)e(is)h(to)f(simplify)g
+ (matching)i(nodes)f(between)g(dif-)2042 4516 y(ferent)21
+ b(callees)h(at)f(a)g(call)g(site)g(with)g(the)h(nodes)h(of)e(the)h
+ (caller)f(by)h(mer)o(ging)2042 4599 y(the)e(graphs)g(of)g(all)f
+ (functions)i(in)e(an)h(equi)n(v)n(alence)i(class,)d(and)h(then)g
+ (updat-)2042 4682 y(ing)c(the)g(caller)g(graphs)h(to)f(be)g(consistent)
+ h(with)f(the)g(mer)o(ged)g(callee)g(graphs.)2042 4765
+ y(Mer)o(ging)21 b(the)g(graphs)h(ensures)f(that)g(an)g(identical)g(set)
+ f(of)h(pool)h(descriptor)2042 4848 y(formal)17 b(ar)o(guments)i(will)d
+ (be)i(inferred)g(for)f(all)g(functions)i(in)e(the)h(class.)f(Up-)2042
+ 4932 y(dating)22 b(the)g(caller)f(graphs)i(to)f(be)g(consistent)g(with)
+ g(the)g(callee)f(graphs)i(\(as)2042 5015 y(e)o(xplained)i(belo)n(w\))g
+ (ensures)g(that)f(the)h(third)f(problem)h(abo)o(v)o(e)h(\227)e
+ (\002nding)2042 5098 y(matching)c(nodes)g(between)f(callee)g(and)h
+ (caller)e(\227)h(is)f(al)o(w)o(ays)i(possible.)2141 5181
+ y(In)j(the)h(e)o(xample,)f(the)g(algorithm)h(mer)o(ges)f(the)g(DS)f
+ (graphs)i(of)f Fs(func1)2042 5264 y Fz(and)e Fs(func2)h
+ Fz(into)f(the)g(common)h(graph)g(sho)n(wn)g(in)f(Figure)f(5\(c\),)h
+ (and)h(uses)2042 5347 y(this)j(common)i(graph)g(to)f(transform)g(both)g
+ (functions.)g(This)g(results)f(in)h(a)2042 5430 y(matching)18
+ b(set)f(of)h(pool)g(ar)o(guments)g(for)g(both)g(functions,)g(e)n(v)o
+ (en)g(though)h(the)p eop end
+ %%Page: 7 7
+ TeXDict begin 7 6 bop -150 66 a Fz(pool)22 b(will)f(be)h(unused)h(in)e
+ Fs(func1)p Fz(.)h(This)g(common)g(graph)h(is)e(mer)o(ged)h(into)-150
+ 149 y(the)i(caller)m(,)g(resulting)g(in)g(the)g(graph)h(sho)n(wn)g(in)f
+ (Figure)g(5\(d\).)g(Using)h(this)-150 232 y(graph,)19
+ b(one)h(descriptor)g(is)e(passed)i(to)f(both)g(functions)h(at)f(the)g
+ (call)f(site.)-50 315 y(The)23 b(implementation)h(of)f(these)h(graph)g
+ (mer)o(ging)g(and)g(inlining)f(steps)-150 399 y(\(lines)16
+ b(3-8)h(of)g(Figure)f(6\))h(use)g(tw)o(o)f(primiti)n(v)o(e)h(DSA)f
+ (operations)h(\226)g(mer)o(ging)-150 482 y(tw)o(o)k(graphs)h(and)g
+ (performing)g(a)f(bottom-up)h(inlining)g(pass)f(on)h(strongly-)-150
+ 565 y(connected)36 b(components)g(\(SCCs\))d(of)h(the)g(call)f(graph.)i
+ (T)-6 b(o)34 b(mer)o(ge)g(the)-150 648 y(graphs)17 b(of)f(tw)o(o)g
+ (functions)h(in)f(an)g(equi)n(v)n(alence)i(class)e(\(lines)g(3-4\),)g
+ (we)g(cop)o(y)-150 731 y(one)h(graph)g(into)f(the)g(other)m(,)h(then)f
+ (unify)h(corresponding)h(formal)f(ar)o(gument)-150 814
+ y(nodes)23 b(\(ignoring)f(an)o(y)g(e)o(xtra)g(nodes)g(in)g(one)g(of)g
+ (the)f(graphs)i(if)e(the)g(formal)-150 897 y(ar)o(gument)29
+ b(lists)e(do)h(not)g(match\),)g(global)h(nodes,)g(and)f(the)g(return)h
+ (v)n(alue)-150 980 y(node)23 b(of)f(each)g(graph.)g(Unifying)h(nodes)f
+ (causes)h(recursi)n(v)o(e)f(mer)o(ging)h(and)-150 1063
+ y(can)15 b(potentially)g(cause)g(loss)g(of)f(some)h(type)g(information)
+ g(if)f(mer)o(ged)h(nodes)-150 1146 y(ha)o(v)o(e)k(incompatible)h
+ (types.)-50 1229 y(Finally)-5 b(,)17 b(we)g(perform)h(a)g(bottom-up)g
+ (\223inlining\224)h(pass)f(on)g(the)g(strongly)-150 1312
+ y(connected)27 b(components)h(\(SCCs\))c(of)i(the)f(call)h(graph,)g
+ (inlining)g(mer)o(ged)-150 1395 y(graphs)20 b(of)e(the)h(callees)g
+ (into)g(their)f(callers.)h(This)f(simply)h(requires)g(repeat-)-150
+ 1478 y(ing)d(the)g(bottom-up)h(inlining)g(pass)f(of)g(the)g(DSA)g
+ (algorithm)g(\(starting)g(with)-150 1561 y(the)i(mer)o(ged)h(equi)n(v)n
+ (alence-class)h(graphs)f(of)f(each)h(function\).)g(This)e(step)i(is)
+ -150 1644 y(described)h(in)f(detail)g(in)f([32)q(].)-50
+ 1727 y(W)-6 b(e)16 b(call)h(the)g(resulting)h(DS)e(graphs)i(the)f(EB)o
+ (U)g(\(\223equi)n(v)n(alence)i(bottom-)-150 1810 y(up\224\))g(graphs.)f
+ (The)g(EB)o(U)g(graph)h(is)e(more)i(conserv)n(ati)n(v)o(e)g(than)g(the)
+ f(original)-150 1893 y(DS)25 b(graph)i(because)h(functions)f(kno)n(wn)g
+ (not)f(to)g(be)h(called)f(at)g(a)g(call-site)-150 1976
+ y(may)g(be)f(mer)o(ged)h(into)f(the)h(caller)f(along)h(with)f(those)h
+ (that)f(are)g(\(because)-150 2059 y(the)o(y)k(are)f(in)h(the)f(same)h
+ (equi)n(v)n(alence)h(class\).)e(Such)h(cases)g(do)g(not)f(arise)-150
+ 2142 y(often)36 b(in)g(practice,)f(and)i(the)e(mer)o(ging)h(of)g(equi)n
+ (v)n(alence)i(class)d(graphs)-150 2225 y(greatly)25 b(simpli\002es)f
+ (the)h(o)o(v)o(erall)g(transformation)h(algorithm)f(by)g(solving)-150
+ 2308 y(the)18 b(abo)o(v)o(e)g(three)g(problems)h(with)e(a)h(uniform)g
+ (strate)o(gy)g(based)h(on)f(e)o(xisting)-150 2391 y(DS)g(graph)i
+ (primiti)n(v)o(es.)30 2517 y Fq(completepoolallocate)p
+ Fw(\(program)e Fp(P)9 b Fw(\))-28 2584 y(1)87 b Fu(8)p
+ Fp(cs)19 b Fu(2)14 b Fw(callsites\()p Fp(P)9 b Fw(\))517
+ b(//)15 b Fo(Build)f(equivalence)g(classes)-28 2650 y
+ Fw(2)145 b(unify)16 b(equi)o(vclasses\(callees\()p Fp(cs)p
+ Fw(\)\))-28 2716 y(3)87 b Fu(8)p Fp(ec)19 b Fu(2)14 b
+ Fw(equi)o(vclasses\(functions\()p Fp(P)9 b Fw(\)\))160
+ b(//)15 b Fo(Build)f(gr)o(aph)h(for)f(eac)o(h)g(class)-28
+ 2783 y Fw(4)145 b(ECGraph\(ec\))15 b(=)f(mer)o
+ (geGraphs\(DSGraphs\(members\(ec\)\)\))-28 2849 y(5)87
+ b Fu(8)p Fp(scc)18 b Fu(2)d Fw(tarjanscc\002nder\(callgraph\()p
+ Fp(P)9 b Fw(\)\))-28 2916 y(6)145 b(ECGraph\(scc\))14
+ b(=)h(mer)o(geGraphs\(ECGraphs\(functions\(scc\)\)\))-28
+ 2982 y(7)145 b Fu(8)p Fp(cs)19 b Fu(2)14 b Fw(callsites\()p
+ Fp(scc)p Fw(\))419 b(//)15 b Fo(Inline)g(callees)f(into)h(caller)-28
+ 3049 y Fw(8)203 b(ECGraph\(scc\))14 b(=)h(mer)o(geGraph\()p
+ Fp(cs)p Fw(,)g(ECGraph\(callees\()p Fp(cs)p Fw(\)\)\))-28
+ 3115 y(9)87 b Fq(basicpoolallocate)p Fw(\()p Fp(P)9 b
+ Fw(\))p -150 3196 1993 3 v 92 3280 a Fn(Figur)o(e)18
+ b(6.)g Fz(Pseudo)i(code)g(for)e(complete)i(pool)g(allocator)-50
+ 3419 y(Gi)n(v)o(en)g(the)h(EB)o(U)e(graphs)i(for)f(a)h(program,)f(the)h
+ (pool)g(allocator)f(is)g(no)n(w)-150 3502 y(guaranteed)e(to)e(ha)o(v)o
+ (e)h(all)f(of)g(the)g(pool)h(descriptors)g(required)h(at)e(an)g
+ (indirect)-150 3585 y(call)22 b(site)f(for)h(an)o(y)h(of)f(the)g
+ (potential)g(callees)g(of)g(the)h(call)e(site,)h(allo)n(wing)g(it)-150
+ 3668 y(to)16 b(apply)h(the)g Fs(basicpoolallocate)j Fz(algorithm)c
+ (safely)-5 b(.)17 b(Note)f(that)g(lines)-150 3751 y(17-19)28
+ b(simply)f(ha)o(v)o(e)g(to)g(use)g(the)g(common)h(graph)g(for)e(all)h
+ (callees)f(e)n(v)o(en)-150 3834 y(though)20 b(there)f(may)h(no)n(w)f
+ (be)g(multiple)g(callers)g(for)g(the)g(call)f(at)h(line)g(17.)-50
+ 3917 y(A)i(detailed)i(discussion)g(of)f(the)g(comple)o(xity)h(of)f(the)
+ g(Automatic)g(Pool)-150 4000 y(Allocation)f(algorithm)g(is)f(outside)i
+ (the)f(scope)g(of)g(this)g(w)o(ork)g(b)o(ut)f(is)h(a)o(v)n(ail-)-150
+ 4083 y(able)d(in)f([32].)g(Brie\003y)-5 b(,)17 b(all)g(parts)g(of)g
+ (the)h(algorithm)f(with)g(the)h(e)o(xception)g(of)-150
+ 4166 y(lines)f(5-8)h(of)g(Figure)f(6)g(are)h(linear)f(in)g(the)h(total)
+ f(size)g(of)h(all)f(DS)f(graphs)j(and)-150 4249 y(the)27
+ b(number)g(of)g(instructions)f(in)h(the)f(program,)h(and)h
+ Fl(\002\()p Fm(n\013)p Fl(\()p Fm(n)p Fl(\)\))e Fz(in)g(the)-150
+ 4332 y(number)20 b(of)g(call)f(graph)h(edges.)g(The)f(comple)o(xity)h
+ (of)f(lines)h(5\2268,)f(the)h(EB)o(U)-150 4415 y(phase,)c(is)f(similar)
+ f(to)i(the)f(B)o(U)g(phase)h(of)g(DSA,)e(i.e.,)g Fl(\002\()p
+ Fm(n\013)p Fl(\()p Fm(n)p Fl(\))s(+)s Fm(k)r(\013)p Fl(\()p
+ Fm(k)r Fl(\))p Fm(c)p Fl(\))p Fz(,)-150 4498 y(if)k Fm(n)p
+ Fz(,)h Fm(k)i Fz(and)e Fm(c)g Fz(denote)h(the)f(total)f(number)i(of)f
+ (instructions,)g(the)f(maximum)-150 4581 y(size)h(of)f(a)h(DS)f(graph)h
+ (for)g(a)f(single)h(procedure,)h(and)f(the)g(number)h(of)e(edges)-150
+ 4664 y(in)h(the)f(call)h(graph.)g(In)g(practice,)f Fm(k)j
+ Fz(is)d(v)o(ery)h(small,)f(typically)h(on)g(the)g(order)-150
+ 4747 y(of)g(a)g(hundred)h(nodes)g(or)f(less,)g(e)n(v)o(en)g(for)g(lar)o
+ (ge)g(programs)h([32].)-150 4948 y FA(4.)91 b(Algorithm)22
+ b(Re\002nements)f(and)h(Implementation)-150 5064 y Fn(4.1)75
+ b(Ar)o(gument)19 b(P)o(assing)g(f)n(or)g(Global)g(P)o(ools)-150
+ 5181 y Fz(A)e(DS)f(node)i(reachable)g(from)f(a)g(global)h(v)n(ariable)g
+ (requires)f(a)g(pool)h(created)-150 5264 y(in)g Fs(main)i
+ Fz(because)g(the)e(heap)i(objects)f(at)f(that)g(node)i(may)f(be)g(li)n
+ (v)o(e)f(through-)-150 5347 y(out)k(the)g(lifetime)f(of)h(the)g
+ (program.)h(This)f(introduces)h(a)e(major)i(source)f(of)-150
+ 5430 y(runtime)f(o)o(v)o(erhead)h(because)f(such)h(a)e(pool)h(w)o(ould)
+ h(ha)o(v)o(e)e(to)h(passed)g(do)n(wn)2121 55 y Fq(i)9
+ b(n)g(t)57 b Fw(p)11 b(r)h(o)g(c)f(e)g(s)g(s)g(l)h(i)g(s)f(t)19
+ b(\()j(l)14 b(i)g(s)f(t)21 b Fu(\003)28 b Fw(L)9 b(\))33
+ b Fu(f)2195 121 y Fw(l)14 b(i)g(s)f(t)42 b Fu(\003)5
+ b Fw(A)h(,)35 b Fu(\003)9 b Fw(B)e(,)35 b Fu(\003)14
+ b Fw(t)t(m)t(p)e(;)2188 188 y(P)7 b(o)g(o)g(l)41 b(PD1)15
+ b(,)41 b(PD2)15 b(;)88 b Fo(/)12 b(/)61 b(i)13 b(n)h(i)f(t)g(i)h(a)f(l)
+ g(i)h(z)e(e)56 b(p)8 b(o)g(o)g(l)g(s)2191 254 y Fw(p)i(o)f(o)h(l)g(c)g
+ (r)g(e)f(a)h(t)f(e)j(\()r(&)r(PD1)19 b(,)48 b(.)17 b(.)g(.)g(\))h(;)59
+ b(p)10 b(o)f(o)h(l)g(c)g(r)g(e)f(a)h(t)f(e)j(\()r(&)r(PD2)18
+ b(,)48 b(.)17 b(.)f(.)h(\))g(;)2192 320 y(s)11 b(p)g(l)h(i)f(t)g(c)g(l)
+ h(o)f(n)g(e)i(\()r(&)r(PD1)c(,)29 b(&)8 b(PD2)15 b(,)41
+ b(L)7 b(,)29 b(&)5 b(A)s(,)29 b(&)6 b(B)j(\))j(;)2191
+ 387 y(p)e(r)g(o)g(c)g(e)g(s)g(s)g(P)g(o)g(r)g(t)g(i)g(o)g(n)h(\()5
+ b(A)10 b(\))k(;)89 b Fo(/)13 b(/)55 b(P)8 b(r)g(o)g(c)g(e)g(s)g(s)51
+ b(f)13 b(i)h(r)f(s)g(t)62 b(l)14 b(i)g(s)f(t)2191 453
+ y Fw(p)d(r)g(o)g(c)g(e)g(s)g(s)g(P)g(o)g(r)g(t)g(i)g(o)g(n)h(\()6
+ b(B)12 b(\))i(;)89 b Fo(/)13 b(/)56 b(p)8 b(r)g(o)g(c)g(e)g(s)g(s)50
+ b(s)7 b(e)g(c)g(o)g(n)g(d)54 b(l)14 b(i)g(s)f(t)2188
+ 586 y Fq(w)7 b(h)g(i)g(l)g(e)15 b Fw(\()5 b(A)j(\))37
+ b Fu(f)k Fw(t)t(m)t(p)t(=)o(A)-13 b Fu(\000)c Fp(>)l
+ Fw(N)5 b(e)g(x)g(t)19 b(;)51 b(p)9 b(o)g(o)g(l)g(f)g(r)g(e)g(e)15
+ b(\()r(&)r(PD1)g(,)38 b(A)10 b(\))k(;)38 b(A)n(=)t(t)t(m)t(p)13
+ b(;)35 b Fu(g)2190 653 y Fw(p)9 b(o)g(o)g(l)g(d)g(e)g(s)g(t)g(r)g(o)g
+ (y)k(\()r(&)r(PD1)i(\))f(;)124 b Fo(/)13 b(/)45 b(N)n(O)n(T)n(E)11
+ b(:)49 b(t)12 b(h)f(i)g(s)49 b(m)t(o)t(v)t(e)t(d)42 b(u)t(p)2188
+ 785 y Fq(w)7 b(h)g(i)g(l)g(e)15 b Fw(\()7 b(B)i(\))37
+ b Fu(f)k Fw(t)t(m)t(p)t(=B)-11 b Fu(\000)-17 b Fp(>)l
+ Fw(N)5 b(e)g(x)g(t)19 b(;)51 b(p)9 b(o)g(o)g(l)g(f)g(r)g(e)g(e)15
+ b(\()r(&)r(PD2)g(,)39 b(B)12 b(\))i(;)40 b(B)o(=)t(t)t(m)t(p)13
+ b(;)35 b Fu(g)2190 852 y Fw(p)9 b(o)g(o)g(l)g(d)g(e)g(s)g(t)g(r)g(o)g
+ (y)k(\()r(&)r(PD2)i(\))f(;)124 b Fo(/)13 b(/)56 b(d)9
+ b(e)g(s)g(t)g(r)g(o)g(y)51 b(p)7 b(o)g(o)g(l)43 b(PD2)2112
+ 918 y Fu(g)p 2042 949 V 2237 1034 a Fn(Figur)o(e)18 b(7.)h
+ Fz(After)f(mo)o(ving)i Fs(pooldestroy\(&PD1\))i Fz(earlier)2121
+ 1236 y Fq(i)9 b(n)g(t)57 b Fw(p)11 b(r)h(o)g(c)f(e)g(s)g(s)g(l)h(i)g(s)
+ f(t)19 b(\()j(l)14 b(i)g(s)f(t)21 b Fu(\003)28 b Fw(L)9
+ b(\))33 b Fu(f)2195 1303 y Fw(l)14 b(i)g(s)f(t)42 b Fu(\003)5
+ b Fw(A)h(,)35 b Fu(\003)9 b Fw(B)e(,)35 b Fu(\003)14
+ b Fw(t)t(m)t(p)e(;)2188 1369 y(P)7 b(o)g(o)g(l)41 b(PD1)15
+ b(,)41 b(PD2)11 b(;)2191 1436 y(p)f(o)f(o)h(l)g(c)g(r)g(e)f(a)h(t)f(e)j
+ (\()r(&)r(PD1)19 b(,)48 b(.)17 b(.)g(.)g(\))h(;)59 b(p)10
+ b(o)f(o)h(l)g(c)g(r)g(e)f(a)h(t)f(e)j(\()r(&)r(PD2)18
+ b(,)48 b(.)17 b(.)f(.)h(\))g(;)2192 1502 y(s)11 b(p)g(l)h(i)f(t)g(c)g
+ (l)h(o)f(n)g(e)i(\()r(&)r(PD1)c(,)29 b(&)8 b(PD2)15 b(,)41
+ b(L)7 b(,)29 b(&)5 b(A)s(,)29 b(&)6 b(B)j(\))j(;)2191
+ 1569 y(p)e(r)g(o)g(c)g(e)g(s)g(s)g(P)g(o)g(r)g(t)g(i)g(o)g(n)h(\()5
+ b(A)10 b(\))k(;)89 b Fo(/)13 b(/)55 b(P)8 b(r)g(o)g(c)g(e)g(s)g(s)51
+ b(f)13 b(i)h(r)f(s)g(t)62 b(l)14 b(i)g(s)f(t)2191 1635
+ y Fw(p)d(r)g(o)g(c)g(e)g(s)g(s)g(P)g(o)g(r)g(t)g(i)g(o)g(n)h(\()6
+ b(B)12 b(\))i(;)89 b Fo(/)13 b(/)56 b(p)8 b(r)g(o)g(c)g(e)g(s)g(s)50
+ b(s)7 b(e)g(c)g(o)g(n)g(d)54 b(l)14 b(i)g(s)f(t)2190
+ 1701 y Fw(p)c(o)g(o)g(l)g(d)g(e)g(s)g(t)g(r)g(o)g(y)k(\()r(&)r(PD1)i
+ (\))f(;)89 b Fo(/)13 b(/)56 b(d)9 b(e)g(s)g(t)g(r)g(o)g(y)51
+ b(p)7 b(o)g(o)g(l)47 b(\()22 b(i)9 b(n)g(c)g(l)g(u)g(d)g(i)g(n)g(g)55
+ b(n)6 b(o)g(d)g(e)g(s)15 b(\))2190 1768 y Fw(p)9 b(o)g(o)g(l)g(d)g(e)g
+ (s)g(t)g(r)g(o)g(y)k(\()r(&)r(PD2)i(\))f(;)89 b Fo(/)13
+ b(/)56 b(d)9 b(e)g(s)g(t)g(r)g(o)g(y)51 b(p)7 b(o)g(o)g(l)47
+ b(\()22 b(i)9 b(n)g(c)g(l)g(u)g(d)g(i)g(n)g(g)55 b(n)6
+ b(o)g(d)g(e)g(s)15 b(\))2112 1834 y Fu(g)p 2042 1865
+ V 2150 1950 a Fn(Figur)o(e)j(8.)h Fz(After)f(eliminating)h
+ Fs(poolfree)i Fz(calls)e(and)g(dead)h(loops)2042 2164
+ y(through)h(man)o(y)g(layers)g(of)f(function)h(calls)f(to)g(be)h(a)o(v)
+ n(ailable)f(in)h(each)g(func-)2042 2247 y(tion)e(that)g(actually)h
+ (allocates)f(or)h(frees)f(data)g(in)h(the)f(pool.)h(In)f(practice,)g
+ (we)2042 2330 y(ha)o(v)o(e)j(found)i(that)e(programs)h(which)f(ha)o(v)o
+ (e)h(man)o(y)g(heap)g(nodes)g(reachable)2042 2413 y(from)29
+ b(globals)h(may)f(get)g(thousands)i(of)e(ar)o(guments)h(added)g(to)f
+ (the)g(pro-)2042 2496 y(gram.)2141 2579 y(The)24 b(solution)h(is)e
+ (simple:)h(we)f(create)h(a)g(global)g(v)n(ariable)h(to)f(hold)g(the)
+ 2042 2662 y(pool)30 b(descriptor)g(for)f(each)h(heap)g(node)g
+ (reachable)h(from)e(a)g(global)h(and)2042 2745 y(use)g(this)f(where)h
+ (needed,)g(instead)g(of)g(passing)g(the)g(pool)g(descriptor)g(in)2042
+ 2828 y(via)18 b(function)h(ar)o(guments.)f(In)g(practice,)g(this)g
+ (re\002nement)h(greatly)f(reduces)2042 2911 y(the)31
+ b(number)g(of)g(pool)g(ar)o(guments)h(that)e(must)h(be)g(passed)h(to)e
+ (functions)2042 2994 y(in)h(some)g(C)g(programs.)h(Most)f(importantly)
+ -5 b(,)31 b(it)g(ensures)g(that)g(the)g(only)2042 3077
+ y(pool)g(ar)o(guments)f(that)h(must)f(be)g(passed)h(to)g(a)f(function)h
+ (are)f(for)g(nodes)2042 3160 y(reachable)c(from)f(pointers)h(passed)g
+ (in)f(as)g(function)h(ar)o(guments,)f(making)2042 3243
+ y(the)30 b(number)i(of)e(pool)h(ar)o(guments)h(gro)n(w)e(with)h(the)f
+ (number)i(of)e(formal)2042 3326 y(pointer)19 b(ar)o(guments)h(in)f(the)
+ g(original)g(function.)2042 3487 y Fn(4.2)75 b(poolcr)o(eate/pooldestr)
+ o(oy)19 b(Placement)2042 3603 y Fz(The)f(algorithm)h(described)h(abo)o
+ (v)o(e)g(places)f Fs(poolcreate)p Fz(/)p Fs(pooldestroy)2042
+ 3686 y Fz(calls)d(at)h(the)g(entry)g(and)h(e)o(xits)f(of)g(each)g
+ (function.)h(In)f(practice,)g(the)g(lifetime)2042 3769
+ y(of)d(the)h(data)f(objects)h(in)g(a)f(pool)h(may)g(be)o(gin)g(at)f(a)h
+ (later)f(point)g(in)h(the)f(function)2042 3852 y(and)35
+ b(may)g(end)g(before)g(the)g(end)g(of)f(the)h(function.)g(Mo)o(ving)h
+ (the)e(pool)2042 3935 y(create/destro)o(y)18 b(calls)g(later)e(and)j
+ (earlier)e(within)g(the)g(function)i(reduces)f(the)2042
+ 4018 y(lifetime)27 b(of)h(objects)h(in)f(the)g(pool.)g(This)g
+ (re\002nement)g(can)h(also)f(mak)o(e)h(it)2042 4101 y(more)19
+ b(lik)o(ely)g(that)g(the)g(re\002nement)g(in)g(Section)g(4.3)g(can)g
+ (apply)-5 b(.)2141 4184 y(W)f(e)31 b(modi\002ed)h(the)f(basic)g
+ (algorithm)h(so)f(that)g(it)g(initially)f(does)i(not)2042
+ 4267 y(insert)f Fs(poolcreate)j Fz(/)e Fs(pooldestroy)i
+ Fz(calls)d(b)o(ut)h(performs)g(all)g(other)2042 4350
+ y(transformations.)23 b(F)o(or)g(each)h(pool)g(that)f(must)g(be)h
+ (created)f(in)g(a)h(function,)2042 4433 y(we)31 b(use)h(tw)o(o)g
+ (simple)g(depth-\002rst)g(tra)o(v)o(ersals)f(of)h(the)f(CFG)g(to)h
+ (identify)2042 4516 y(all)25 b(basic)g(blocks)h(where)g(the)f(pool)h
+ (descriptor)g(must)f(be)h(li)n(v)o(e,)e(based)j(on)2042
+ 4599 y(its)21 b(uses,)h(and)h(then)g(place)f Fs(poolcreate)p
+ Fz(/)p Fs(pooldestroy)27 b Fz(calls)21 b(at)h(edges)2042
+ 4682 y(entering)27 b(or)f(lea)o(ving)h(a)f(li)n(v)o(e)g(block)h(from)f
+ (or)h(to)f(a)g(non-li)n(v)o(e)h(block.)g(The)2042 4765
+ y(o)o(v)o(erall)16 b(algorithm)h(is)g(e)o(xtremely)g(simple)f(and)h
+ (linear)g(in)f(the)h(size)g(of)f(CFG.)2141 4848 y(Figure)24
+ b(7)g(illustrates)f(this)g(placement)i(for)e(the)h Fs(processlist)i
+ Fz(func-)2042 4932 y(tion)j(in)g(our)g(e)o(xample.)g(The)g(call)g(to)f
+ Fs(pooldestroy\(&PD1\))33 b Fz(has)c(been)2042 5015 y(mo)o(v)o(ed)20
+ b(earlier)g(in)f(the)h(function,)g(to)g(immediately)g(after)f(the)h
+ Fs(while)g Fz(loop)2042 5098 y(that)d(reads)g(the)g(Ne)o(xt)g(\002eld)f
+ (from)h(nodes)h(in)f(PD1)g(pool.)g(The)g Fs(poolcreate)2042
+ 5181 y Fz(calls)h(for)h(both)h(pools)f(cannot)h(be)f(mo)o(v)o(ed)h(an)o
+ (y)g(later)l(.)2141 5264 y(In)33 b(general,)g(the)f Fs(poolcreate)j
+ Fz(and)e Fs(pooldestroy)i Fz(calls)d(can)h(be)2042 5347
+ y(mo)o(v)o(ed)f(interprocedurally)h(to)e(further)h(reduce)g(the)g
+ (lifetime)e(of)i(pools,)2042 5430 y(similar)k(to)g(Aik)o(en)h(et)f(al.)
+ -5 b(')l(s)36 b(w)o(ork)h([1].)f(Ho)n(we)n(v)o(er)m(,)h(that)g(w)o
+ (ould)g(lik)o(ely)p eop end
+ %%Page: 8 8
+ TeXDict begin 8 7 bop -150 66 a Fz(require)43 b(a)g(more)h(e)o(xpensi)n
+ (v)o(e,)g(\003o)n(w-sensiti)n(v)o(e)f(interprocedural)h(algo-)-150
+ 149 y(rithm)19 b([1])f(and)i(we)f(ha)o(v)o(e)g(not)g(attempted)g(this)g
+ (so)g(f)o(ar)l(.)-150 286 y Fn(4.3)75 b Fs(poolfree)21
+ b Fn(Elimination)-150 403 y Fz(The)26 b(\002nal)f(re\002nement)h(is)f
+ (to)h(eliminate)f(unnecessary)j Fs(poolfree)f Fz(calls.)-150
+ 486 y(Man)o(y)k(short-li)n(v)o(ed)g(data)f(structures)g(ha)o(v)o(e)g(a)
+ g(\223b)o(uild-use-destro)o(y\224)i(pat-)-150 569 y(tern,)21
+ b(in)g(which)h(all)f(allocations)g(happen)i(before)f(an)o(y)g
+ (deallocations.)g(F)o(or)-150 652 y(e)o(xample,)d(consider)h(Figure)f
+ (7.)g(Between)g(the)g(call)g(to)f Fs(poolfree\(&PD1,)-150
+ 735 y(A\))25 b Fz(and)h(the)f(call)g(to)g Fs(pooldestroy\(&PD1\))p
+ Fz(,)k(there)c(are)g(no)h(allocations)-150 818 y(out)i(of)f
+ Fy(any)h Fz(pool.)g(This)f(means)h(that)f(it)g(is)g(unnecessary)i(to)f
+ (release)f(the)-150 901 y(memory)h(in)f(pool)h(PD1)f(an)o(y)h(earlier)f
+ (than)h(the)f Fs(pooldestroy\(&PD1\))p Fz(,)-150 984
+ y(when)c(all)f(the)g(memory)h(of)f(the)h(pool)g(will)e(be)i(released)f
+ (back)i(to)e(the)g(sys-)-150 1067 y(tem.)30 b(W)-6 b(e)30
+ b(eliminate)g(the)g(call)g(to)g Fs(poolfree\(&PD1,)42
+ b(A\))p Fz(,)31 b(which)f(also)-150 1150 y(allo)n(ws)38
+ b(the)h(compiler)g(to)f(eliminate)g(the)g(enclosing)i(loop)f
+ (\(similarly)-150 1233 y(for)28 b Fs(PD2)p Fz(\).)g(Ef)n(fecti)n(v)o
+ (ely)-5 b(,)27 b(we)h(ha)o(v)o(e)g(performed)h(a)f(simple)g(kind)h(of)f
+ Fy(static)-150 1316 y(garba)o(g)o(e)21 b(collection)e
+ Fz(for)g(the)g(objects)g(in)g(this)f(pool)i([31].)e(Note)h(that)g(mo)o
+ (v-)-150 1399 y(ing)i Fs(pooldestroy)j Fz(calls)d(earlier)g(in)g(the)g
+ (code)h(can)g(increase)g(the)f(oppor)o(-)-150 1482 y(tunities)e(for)g
+ (\002nding)g(candidate)h Fs(poolfree)g Fz(calls)f(to)g(eliminate.)-50
+ 1565 y(Again,)c(we)h(implemented)h(this)f(optimization)g(as)g(a)g
+ (simple,)g(backw)o(ard)-150 1648 y(data\003o)n(w)g(analysis)h(on)f(the)
+ g(CFG,)f(without)h(interprocedural)h(information.)-150
+ 1731 y(The)23 b(analysis)h(looks)h(for)e(an)o(y)h(occurrence)h(of)e
+ Fs(poolfree\(P\))j Fz(such)e(that)-150 1814 y Fy(no)f
+ Fz(path)f(from)g(the)h Fs(poolfree)g Fz(to)f(the)h Fs(pooldestroy)h
+ Fz(calls)e(for)g Fm(P)33 b Fz(con-)-150 1897 y(tains)25
+ b(an)o(y)h(allocation)f(out)g(of)g(an)o(y)h(pool)g(\(including)g
+ Fm(P)11 b Fz(\).)24 b(The)h(result)f(for)-150 1980 y
+ Fs(processlist)d Fz(is)e(sho)n(wn)h(in)e(Figure)h(8.)-150
+ 2159 y FA(5.)91 b(P)n(ool)22 b(Allocation)h(Optimizations)-150
+ 2275 y Fz(W)-6 b(e)19 b(describe)i(four)f(simple)g(optimizations)g
+ (that)g(e)o(xploit)g(the)g(partitioning)-150 2358 y(of)j(heap)i
+ (objects)f(and)g(the)f(dif)n(ferences)h(in)g(beha)o(vior)g(of)f(dif)n
+ (ferent)h(pools.)-150 2441 y(The)19 b(bene\002ts)g(of)g(all)f(four)h
+ (optimizations)h(are)f(e)n(v)n(aluated)h(in)f(Section)g(9.)-50
+ 2524 y(1\))28 b Fn(A)-7 b(v)o(oiding)27 b(pool)h(allocation)g(f)n(or)g
+ (singleton)f(objects:)h Fz(Our)g(sim-)-150 2607 y(plest)f(optimization)
+ h(a)o(v)o(oids)f(pool-allocating)h(nodes)g(that)f(appear)h(to)f(be)-150
+ 2690 y(used)18 b(for)g(a)f(single)h(object.)g(W)-6 b(e)17
+ b(identify)g(such)i(pools)f(by)g(\002nding)g Fn(H)f Fz(nodes)-150
+ 2773 y(not)24 b(pointed)i(to)e(by)g(an)o(y)h(other)g(memory)g(object)f
+ (\(including)i(itself\),)d(e.g.)-150 2856 y(the)o(y)j(are)g(only)h
+ (pointed)g(to)f(by)h(local)f(scalar)g(v)n(ariables.)g(This)g(optimiza-)
+ -150 2939 y(tion)f(a)o(v)o(oids)f(creating)h(and)h(destro)o(ying)g(a)e
+ (pool)i(descriptor)f(\(minor\))g(and)-150 3022 y(a)o(v)o(oids)i
+ (signi\002cant)h(w)o(asted)g(space)g(when)g(the)f(object)h(is)f(much)i
+ (smaller)-150 3105 y(than)23 b(the)f(smallest)g(internal)g(page)h
+ (\(potentially)g(signi\002cant)f(when)h(man)o(y)-150
+ 3188 y(such)d(pools)f(are)g(created\).)g(W)-6 b(e)19
+ b(term)f(this)h(\223Selecti)n(v)o(e)g(P)-7 b(A)f(\224.)-50
+ 3271 y(2\))41 b Fn(Eliminating)f Fs(poolfree)j Fn(operations:)e
+ Fz(The)g(re\002nement)h(de-)-150 3354 y(scribed)18 b(in)f(Section)f
+ (4.3)i(is)e(an)i(optimization)f(that)g(can)h(eliminate)f(the)g(\002nal)
+ -150 3437 y Fs(poolfree)31 b Fz(operations)g(of)f(a)g(data)g
+ (structure,)f(which)h(we)g(term)f(\223Pool-)-150 3520
+ y(FreeElim.)-5 b(\224)24 b(In)h(some)h(cases,)g(this)f(optimization)h
+ (can)g(mak)o(e)g(entire)f(data)-150 3603 y(structure)h(tra)o(v)o
+ (ersals)f(dead,)h(as)f(in)h(the)g(e)o(xample)g(abo)o(v)o(e.)g(As)g
+ (noted,)g(this)-150 3686 y(optimization)19 b(is)g(enhanced)i(by)e
+ (smart)g Fs(pooldestroy)i Fz(positioning.)-50 3769 y(Note)f(that)h(se)o
+ (gre)o(gating)h(data)f(structures)g(into)g(distinct)f(pools)i(is)e
+ (what)-150 3852 y(enables)g(this)f(optimization)h(to)f(e)o(xploit)g
+ (the)g(\223b)o(uild-use-destro)o(y\224)i(pattern)-150
+ 3935 y(sho)n(wn)28 b(by)f(\(some\))f(data)h(structures.)g(F)o(or)f(e)o
+ (xample,)h(if)f(there)g(were)h(an)o(y)-150 4018 y(allocations)e(for)f
+ (the)g(second)i(list)d(between)i Fs(pooldestroy\(&PD1\))j
+ Fz(and)-150 4101 y(the)j(second)i Fs(while)f Fz(loop,)g(the)f
+ (optimization)h(w)o(ould)g(not)g(be)g(possible)-150 4184
+ y(without)19 b(separating)h(the)f(lists)f(into)h(distinct)g(pools.)-50
+ 4267 y(3\))e Fn(\223Bump-pointer\224)g(allocation:)h
+ Fz(If)f(memory)i(is)e(ne)n(v)o(er)h(free')l(d)g(back)-150
+ 4350 y(to)j(a)g(pool,)g(there)g(is)f(no)h(need)h(for)f(the)g(pool)g
+ (library)g(to)g(maintain)g(freelists)-150 4433 y(or)16
+ b(the)h(4-byte)g(header)g(on)g(each)g(object.)g(The)f(b)o(ump)h
+ (pointer)g(optimization)-150 4516 y(detects)22 b(pools)h(whose)g
+ (memory)g(is)f(only)h(released)g(by)f(a)g(pooldestro)o(y)-5
+ b(,)24 b(as)-150 4599 y(e)o(xplained)32 b(belo)n(w)-5
+ b(.)32 b(It)e(then)i(changes)h(the)e(pool)g(operations)i(to)e(use)g
+ (the)-150 4682 y(\223)p -112 4682 24 4 v 28 w Fs(bp)p
+ Fz(\224)26 b(v)o(ersions)f(of)g(the)g(pool)g(routines)g(for)g(such)h
+ (pools.)f(This)f(allocator)-150 4765 y(has)30 b(a)g(shorter)g
+ (allocation)g(path)g(than)g(the)g(normal)g(pool)h(allocator)f(and)-150
+ 4848 y(packs)37 b(objects)g(more)g(densely)g(in)g(memory)g(and)g(cache)
+ g(\(due)g(to)f(the)-150 4932 y(missing)27 b(object)h(header\).)f(This)g
+ (optimization)g(is)g(clearly)g(enhanced)i(by)-150 5015
+ y(the)24 b(poolfree)g(elimination)g(optimization,)f(which)h(allo)n(ws)g
+ (both)g(pools)g(in)-150 5098 y(the)19 b(e)o(xample)h(to)f(be)g(changed)
+ h(into)f(b)o(ump)h(pointer)f(pools.)-50 5181 y(W)-6 b(e)25
+ b(implemented)i(this)e(as)h(a)g(simple)g(post-pass)h(o)o(v)o(er)f(the)g
+ (program.)-150 5264 y(Our)i(implementation)h(w)o(alks)f(the)g(use)h
+ (chain)f(of)g(each)h(pool)g(descriptor)-150 5347 y(looking)e(for)f(an)o
+ (y)g(use)h(that)e(is)h(not)g(a)g Fs(poolcreate)p Fz(,)h
+ Fs(pooldestroy)p Fz(,)h(or)-150 5430 y Fs(poolalloc)p
+ Fz(.)d(If)e(only)h(these)g(uses)g(occur)m(,)g(the)g(pool)g(is)f
+ (promoted)i(to)e(use)2042 66 y(a)28 b(b)o(ump)h(pointer)f(by)h
+ (replacing)g(the)f(ordinary)h(pool)g(library)g(calls)e(with)2042
+ 149 y(the)21 b(\223)p 2192 149 V 28 w Fs(bp)p Fz(\224)h(v)o(ersions.)f
+ (Note)g(that)g(our)h(implementation)g(currently)f(cannot)2042
+ 232 y(promote)33 b(an)o(y)g(pools)g(whose)g(descriptors)g(are)f(passed)
+ h(into)g(an)o(y)g(other)2042 315 y(function,)19 b(including)h(user)f
+ (functions)h(lik)o(e)f(those)h(in)e(the)h(e)o(xample.)2141
+ 399 y(4\))25 b Fn(Intelligent)d(object)i(alignment:)g
+ Fz(A)g(traditional)g Fs(malloc)h Fz(library)2042 482
+ y(must)15 b(be)f(conserv)n(ati)n(v)o(e)j(about)e(memory)h(alignment)f
+ (because)h(it)e(lacks)h(type)2042 565 y(information)24
+ b(for)f(the)g(memory)h(it)f(allocates.)g(Man)o(y)h(architectures)g
+ (\(e.g.,)2042 648 y(Sparc)19 b(V9\))h Fy(r)m(equir)m(e)g
+ Fz(that)g(certain)f(8-byte)h(v)n(alues)h(\(e.g.,)d(C)h(doubles\))i
+ (must)2042 731 y(be)j(8-byte)g(aligned,)g(while)f(others)h(\(e.g.,)f
+ (x86\))h(impose)g(signi\002cant)g(per)o(-)2042 814 y(formance)18
+ b(penalties)g(if)f(such)h(v)n(alues)g(are)g(misaligned.)g(This)f
+ (forces)g(man)o(y)2042 897 y(system)k(malloc)h(libraries)f(to)g(use)g
+ (8-byte)h(alignment)g(for)f Fy(all)g Fz(objects,)g(in-)2042
+ 980 y(creasing)e(memory)f(consumption)i(and)f(reducing)g(cache)g
+ (density)-5 b(.)19 b(F)o(or)e(e)o(x-)2042 1063 y(ample,)g(tw)o(o)h
+ (successi)n(v)o(e)g(16)g(byte)g(objects)g(will)e(be)i(placed)g(24)g
+ (bytes)g(apart)2042 1146 y(because)k(4)f(bytes)h(are)f(typically)h
+ (used)f(as)h(a)f(malloc)g(object)g(header)m(,)h(forc-)2042
+ 1229 y(ing)d(an)g(e)o(xtra)g(4)g(bytes)h(of)e(padding)j(per)e(object)g
+ (for)g(proper)h(alignment.)2141 1312 y(Because)28 b(man)o(y)g(pools)f
+ (are)g(type)h(homogeneous,)h(we)e(ha)o(v)o(e)g(reliable)2042
+ 1395 y(compile-time)h(information)g(about)g(data)g(types)g(in)f(such)h
+ (pools.)g(There-)2042 1478 y(fore,)20 b(we)g(use)g(4-byte)h(alignment)g
+ (when)g(it)f(is)f(pro)o(v)n(ably)j(safe)e(\(i.e.,)f(a)h(pool)2042
+ 1561 y(is)j(type)h(homogenous)i Fy(and)g Fz(no)e(\002eld)f(of)h(the)f
+ (object)h(will)e(be)i(improperly)2042 1644 y(aligned)c(for)f(the)g(tar)
+ o(get)g(architecture\).)g(Otherwise)g(we)g(use)g(8-byte)h(align-)2042
+ 1727 y(ment.)f(The)f(alignment)i(is)f(speci\002ed)g(when)g(the)g(pool)h
+ (is)e(created.)2042 1910 y FA(6.)91 b(Node)21 b(Collocation)i
+ (Heuristics)2042 2026 y Fz(The)34 b(pool)h(allocation)g(algorithm)g(so)
+ g(f)o(ar)f(pro)o(vides)h(a)g(frame)n(w)o(ork)g(for)2042
+ 2109 y(se)o(gre)o(gating)f(heap)g(data)g(structures)f(b)o(ut)g(ne)n(v)o
+ (er)h(collocates)g(objects)g(of)2042 2192 y(tw)o(o)25
+ b(DS)f(nodes)i(into)f(the)g(same)g(pool.)g(W)-6 b(e)24
+ b(can)i(adapt)f(the)g(algorithm)g(to)2042 2275 y(collocate)j(a)f(set)h
+ (of)f(nodes)i(by)f(changing)i(line)d(9)h(so)g(that)f
+ Fs(poolcreate)2042 2358 y Fz(and)35 b Fs(pooldestroy)i
+ Fz(are)d(inserted)h(for)g(only)g(one)g(of)g(the)f(nodes,)h(and)2042
+ 2441 y(initializing)18 b(pdmap)i(to)f(use)g(the)g(same)h(descriptor)f
+ (for)g(the)g(other)g(nodes.)2141 2524 y(Since)37 b(heap)h(objects)g
+ (are)f(laid)g(out)g(separately)h(and)g(dynamically)2042
+ 2607 y(within)25 b(each)h(pool,)f(collocating)h(objects)g(can)g(gi)n(v)
+ o(e)g(the)f(compiler)h(some)2042 2690 y(control)38 b(o)o(v)o(er)h
+ (internal)f(layout)h(of)f(data)h(structures.)f(Ev)o(en)g(more)h(so-)
+ 2042 2773 y(phisticated)27 b(control)h(might)f(be)g(possible)h(using)f
+ (additional)h(techniques)2042 2856 y(\(e.g.,)18 b([9]\))h(customized)h
+ (on)f(each)h(pool.)2141 2939 y(W)-6 b(e)25 b(propose)h(tw)o(o)e(e)o
+ (xample)i(static)e(options)h(for)g(choosing)h(which)f
+ Fn(H)2042 3022 y Fz(nodes)g(should)g(share)f(a)g(common)i(pool.)e(W)-6
+ b(e)23 b(de\002ne)i(a)f Fy(Collection)g Fz(to)g(be)2042
+ 3105 y(either)17 b(a)h(node)h(with)e Fm(A)k Fl(=)g Fm(tr)r(ue)p
+ Fz(,)c(or)h(an)o(y)g(non-tri)n(vial)g(strongly)g(connected)2042
+ 3188 y(component)30 b(\(i.e.,)d(containing)i(at)f(least)g(one)h(c)o
+ (ycle\))f(in)g(the)g(DS)g(Graph.)2042 3271 y(Gi)n(v)o(en)17
+ b(this,)f(an)o(y)h Fn(H)g Fz(node)g(reachable)h(from)f(a)g(Collection)f
+ (represents)i(a)e(set)2042 3354 y(of)j(objects)i(that)e(may)h(be)g
+ (visited)g(by)g(a)g(single)g(tra)o(v)o(ersal)f(o)o(v)o(er)h(the)g
+ (objects)2042 3437 y(of)f(the)g(Collection.)2141 3520
+ y Fn(OneP)o(oolP)o(erCollection:)39 b Fz(All)20 b(candidate)h
+ Fn(H)g Fz(nodes)g(in)f(a)h(collection)2042 3603 y(are)i(assigned)h(to)f
+ (a)g(single)g(pool.)g(An)o(y)h(other)f Fn(H)g Fz(node)h(reachable)g
+ (from)f(a)2042 3686 y(collection)17 b(\(without)g(going)h(through)g
+ (another)g(collection\))f(is)f(assigned)i(to)2042 3769
+ y(the)25 b(same)g(pool)h(as)f(the)g(collection.)g(This)g(choice)h(ef)n
+ (fecti)n(v)o(ely)f(partitions)2042 3852 y(the)h(heap)h(so)g(that)f
+ (each)h(minimal)g(\223tra)o(v)o(ersable\224)f(collection)h(of)g
+ (objects)2042 3935 y(becomes)20 b(a)e(separate)i(pool.)f(Intuiti)n(v)o
+ (ely)-5 b(,)18 b(this)h(gi)n(v)o(es)g(the)g(\002nest-grain)g(par)o(-)
+ 2042 4018 y(titioning)j(of)g(recursi)n(v)o(e)g(data)h(structures,)e
+ (which)i(are)f(often)g(hierarchical.)2042 4101 y(It)d(f)o(a)o(v)o(ors)g
+ (tra)o(v)o(ersals)g(o)o(v)o(er)g(a)h(single)f(collection)h(within)f
+ (such)i(a)e(hierarchi-)2042 4184 y(cal)g(\(i.e.,)e(multi-collection\))i
+ (data)g(structure.)2141 4267 y Fn(MaximalDS:)j Fz(A)g(maximal)g
+ (connected)i(subgraph)g(of)e(the)g(DS)f(graph)2042 4350
+ y(in)34 b(which)h(all)f(nodes)h(are)f Fn(H)h Fz(nodes)g(are)f(assigned)
+ i(to)e(a)g(single)h(pool.)2042 4433 y(This)c(partition)g(could)h(be)f
+ (useful)g(as)h(a)f(def)o(ault)g(choice)h(if)f(there)g(is)g(no)2042
+ 4516 y(information)19 b(about)h(tra)o(v)o(ersal)e(orders)i(within)e
+ (and)i(across)f(collections.)2141 4599 y(Our)30 b(implementation)g
+ (supports)g(\003e)o(xible)g(colocation)g(policies,)f(b)o(ut)2042
+ 4682 y(in)21 b(practice)h(we)g(ha)o(v)o(e)g(found)h(that)e(using)i(a)e
+ (static)g(collocation)i(heuristics)2042 4765 y(rarely)c(outperform)i
+ (\(and)f(is)f(often)g(w)o(orse)h(than\))g(assigning)h(each)f
+ Fn(H)f Fz(node)2042 4848 y(to)36 b(a)h(separate)g(pool)g(\(see)g([32])g
+ (for)f(a)h(discussion\).)g(W)-6 b(e)36 b(e)o(xpect)h(that)2042
+ 4932 y(more)29 b(sophisticated)h(static)f(analysis)h(of)f(tra)o(v)o
+ (ersal)f(patterns)i(combined)2042 5015 y(with)e(pro\002le)h(data)g
+ (will)f(be)h(needed)i(to)d(statically)h(choose)h(the)f(optimal)2042
+ 5098 y(colocation)23 b(con\002guration.)g(W)-6 b(e)21
+ b(lea)o(v)o(e)h(it)g(to)g(future)g(w)o(ork)g(to)g(de)n(v)o(elop)i(an)
+ 2042 5181 y(ef)n(fecti)n(v)o(e)17 b(approach)h(for)f(pro\002table)g
+ (collocation.)g(The)g(discussion)g(abo)o(v)o(e,)2042
+ 5264 y(sho)n(ws,)25 b(ho)n(we)n(v)o(er)h(that)e(\(a\))h(collocation)h
+ (of)e(pools)i(can)f(be)g(implemented)2042 5347 y(easily)-5
+ b(,)16 b(and)h(\(b\))g(qualitati)n(v)o(ely)-5 b(,)16
+ b(the)h(pointer)g(analysis)f(and)i(pool)f(allocation)2042
+ 5430 y(pro)o(vide)j(a)e(useful)i(basis)f(for)g(per)o(-data-structure)g
+ (choices.)p eop end
+ %%Page: 9 9
+ TeXDict begin 9 8 bop -150 66 a FA(7.)91 b(Compiler)22
+ b(A)n(pplications)g(of)h(P)n(ool)f(Allocation)-150 183
+ y Fz(W)-6 b(e)20 b(belie)n(v)o(e)h(that)g(Automatic)g(Pool)f
+ (Allocation)h(combined)h(with)e(the)h(un-)-150 266 y(derlying)i
+ (pointer)g(analysis)g(pro)o(vides)g(a)f(ne)n(w)h(frame)n(w)o(ork)g(for)
+ f(analyzing)-150 349 y(and)17 b(optimizing)f(pointer)o(-intensi)n(v)o
+ (e)h(programs,)g(operating)g(at)e(the)h(le)n(v)o(el)g(of)-150
+ 432 y(entire)22 b(data)g(structure)g(instances,)h(instead)f(of)g(indi)n
+ (vidual)h(load/store)g(op-)-150 515 y(erations)i(or)g(indi)n(vidual)g
+ (data)g(types.)g(This)f(is)h(because)h(Automatic)e(Pool)-150
+ 598 y(Allocation)d(pro)o(vides)i(four)e(fundamental)h(bene\002ts)g(to)f
+ (subsequent)i(com-)-150 681 y(piler)c(passes:)-127 829
+ y(1.)29 b Fy(Data)18 b(structur)m(e-speci\002c)h(policies)e(via)h(se)m
+ (gr)m(e)m(gation)p Fz(:)h(Allocating)e(dis-)-42 912 y(tinct)26
+ b(data)g(structures)h(from)f(dif)n(ferent)g(pools)h(allo)n(ws)f
+ (compiler)h(and)-42 995 y(run-time)22 b(techniques)h(to)f(be)g
+ (customized)h(for)f(each)g(instance.)g(These)-42 1078
+ y(techniques)32 b(can)g(use)f(both)g(static)g(pool)g(properties)h
+ (\(e.g.,)e(type)i(in-)-42 1161 y(formation)25 b(and)g(points-to)g
+ (relationships\))g(and)g(dynamic)h(properties)-42 1244
+ y(\(an)o(ything)20 b(recordable)g(in)f(per)o(-pool)g(metadata\).)-127
+ 1344 y(2.)29 b Fy(Mapping)j(of)e(pointer)o(s)h(to)f(pool)g(descriptor)o
+ (s)p Fz(:)i(The)e(transformation)-42 1427 y(pro)o(vides)19
+ b(a)f(static)f(man)o(y-to-one)j(mapping)f(of)f(heap)h(pointers)g(to)f
+ (pool)-42 1510 y(descriptors.)32 b(This)g(information)h(is)f(k)o(e)o(y)
+ h(to)f(most)h(transformations)-42 1593 y(that)25 b(e)o(xploit)g(pool)g
+ (allocation)g(because)h(it)f(enables)g(the)g(compiler)g(to)-42
+ 1676 y(transform)18 b(pointer)h(operations)g(into)e(pool-speci\002c)i
+ (code)g(sequences.)-42 1759 y(It)f(is)h(used)g(by)h(both)f(the)g(e)o
+ (xample)h(applications)g(described)g(belo)n(w)-5 b(.)-127
+ 1859 y(3.)29 b Fy(T)-6 b(ype-homo)o(g)o(eneous)40 b(pools)p
+ Fz(:)d(Man)o(y)g(pools)g(are)f(completely)h(type-)-42
+ 1942 y(homogeneous,)49 b(as)d(sho)n(wn)h(in)f(Section)h(9,)f(e)n(v)o
+ (en)h(C)f(programs.)-42 2025 y(No)o(v)o(el)22 b(compiler)h(and)g
+ (run-time)g(techniques)g(are)g(possible)g(for)f(type-)-42
+ 2108 y(homogeneous)k(pools)e(that)f(w)o(ould)i(not)e(be)h(possible)g
+ (on)g(other)g(pools)-42 2191 y(or)19 b(the)g(general)g(heap)h(\(e.g.)f
+ (the)g(alignment)g(optimization\).)-127 2290 y(4.)29
+ b Fy(Knowledg)o(e)e(of)e(the)h(run-time)g(points-to)g(gr)o(aph)p
+ Fz(:)h(One)e(w)o(ay)i(to)e(vie)n(w)-42 2373 y(pool)j(allocation)f(is)g
+ (that)g(it)f(partitions)i(the)f(heap)h(to)f(pro)o(vide)h(a)f(run-)-42
+ 2456 y(time)15 b(representation)h(of)f(the)h(points-to)f(graph.)h(The)f
+ (compiler)h(has)g(full)-42 2539 y(information)24 b(about)h(which)e
+ (pools)i(contain)f(pointers)g(to)g(other)g(pools)-42
+ 2622 y(and,)e(for)f(type-homogeneous)k(pools,)d(where)g(all)f(the)h
+ (intra-pool)g(and)-42 2705 y(inter)o(-pool)h(pointers)h(are)f(located.)
+ g(Such)h(information)f(is)g(useful)h(an)o(y)-42 2788
+ y(time)18 b(pointers)i(need)g(to)e(be)i(tra)o(v)o(ersed)f(or)f(re)n
+ (written)h(at)g(run-time.)-50 2937 y(The)28 b(optimizations)g
+ (described)h(earlier)f(sho)n(w)g(some)h(simple)f(e)o(xam-)-150
+ 3020 y(ples)17 b(of)g(ho)n(w)h(compiler)f(techniques)h(can)g(e)o
+ (xploit)f(these)g(bene\002ts.)g(In)g(other)-150 3103
+ y(w)o(ork,)27 b(we)g(de)n(v)o(eloped)i(tw)o(o)e(ne)n(w)h(compiler)f
+ (techniques)i(that)d(are)i(much)-150 3186 y(more)21 b(sophisticated)h
+ (and)f(e)o(xploit)g(man)o(y)g(or)g(all)f(of)g(the)h(abo)o(v)o(e)h
+ (properties)-150 3269 y(of)i(pool)i(allocation.)e(W)-6
+ b(e)24 b(summarize)h(these)g(v)o(ery)g(brie\003y)f(here;)h(each)g(is)
+ -150 3352 y(described)20 b(in)f(detail)g(else)n(where)g([19)q(,)f(35)q
+ (]:)-150 3476 y Fn(T)-6 b(ranspar)o(ent)38 b(P)o(ointer)f(Compr)o
+ (ession)p Fz(:)g(After)h(pool)h(allocation,)f(the)-150
+ 3559 y(static)18 b(mapping)i(of)e(pointers)h(to)g(pool)g(descriptors)g
+ (allo)n(ws)g(us)f(to)h(use)g Fy(pool)-150 3642 y(indices)g
+ Fz(\(i.e.,)f(byte)i(of)n(fsets)f(relati)n(v)o(e)g(to)f(the)h(pool)h
+ (base\))g(instead)f(of)g(point-)-150 3725 y(ers)k(to)g(identify)h
+ (objects)f(in)h(a)f(pool.)g(Since)g(most)h(indi)n(vidual)g(data)f
+ (struc-)-150 3810 y(tures)c(are)g(lik)o(ely)h(to)f(ha)o(v)o(e)g(f)o(ar)
+ h(less)f(than)g Fl(2)965 3778 y Fb(32)1050 3810 y Fz(distinct)g(nodes,)
+ h(se)o(gre)o(gating)-150 3893 y(data)26 b(structure)g(instances)g(allo)
+ n(ws)g(us)g(to)f(represent)h(these)g(inde)o(x)o(es)h(with)-150
+ 3976 y(inte)o(gers)17 b(smaller)g(than)g(the)g(pointer)h(size)f
+ (\(e.g.,)f(32)h(bits)g(on)g(a)g(64-bit)g(host\).)-150
+ 4059 y(In)f([35)q(],)f(we)h(implement)g(this)g(transformation)g(and)h
+ (sho)n(w)g(that)e(it)h(can)g(ha)o(v)o(e)-150 4142 y(a)28
+ b(signi\002cant)g(and)h(sometimes)g(dramatic)f(impact)g(on)h(both)f
+ (the)h(perfor)o(-)-150 4225 y(mance)19 b(and)g(the)g(memory)g
+ (footprint)g(of)f(pointer)o(-intensti)n(v)o(e)h(programs)h(on)-150
+ 4308 y(64-bit)d(systems.)f(This)h(transformation)g(e)o(xploits)g(the)f
+ (se)o(gre)o(gation)h(of)g(data)-150 4391 y(structures)h(into)g(pools)h
+ (\(which)f(allo)n(ws)g(small)f(indices\),)h(type)g(homogene-)-150
+ 4474 y(ity)g(\(which)g(allo)n(ws)h(compression)g(of)f(indices)h(by)g
+ (re)n(writing)f(structure)g(ac-)-150 4557 y(cesses)26
+ b(and)g(allocations\),)f(and)h(of)g(course)g(the)f(mapping)i(of)f
+ (pointers)f(to)-150 4640 y(pools)20 b(\(making)f(the)g(pool)h(base)f
+ (implicit\).)-50 4723 y(W)-6 b(e)19 b(also)h(describe)h(a)f(dynamic)h
+ (v)o(ersion)g(of)f(the)g(algorithm)h(where)f(the)-150
+ 4806 y(pool)i(runtime)f(library)g(dynamically)h(re)n(writes)e(nodes)i
+ (to)f(gro)n(ws)h(pointers)-150 4890 y(in)c(data)h(structures)g(when)g
+ (the)g Fl(2)706 4858 y Fb(32)771 4890 y Fm(nd)f Fz(node)i(is)e
+ (allocated.)h(This)f(allo)n(ws)g(us)-150 4973 y(to)29
+ b(speculati)n(v)o(ely)h(compress)g(pointers)g(to)f(32-bits)h(while)f
+ (retaining)g(the)-150 5056 y(ability)i(to)f(dynamically)i(e)o(xpand)g
+ (them)g(to)e(64-bits)h(if)g(full)f(addressing)-150 5139
+ y(generality)19 b(is)g(needed.)-150 5264 y Fn(Pr)o(ogram)27
+ b(Safety)e(W)o(ithout)f(Garbage)j(Collection)p Fz(:)e(All)g(the)h(pre)n
+ (vious)-150 5347 y(applications)j(of)g(pool)g(allocation)g(focus)h(on)f
+ (impro)o(ving)g(performance.)-150 5430 y(Another)d(major)g(application)
+ g(of)g(pool)g(allocation)g(has)g(been)h(to)f(enforce)2042
+ 66 y(program)21 b(safety)g(while)f(allo)n(wing)h(e)o(xplicit)f(memory)h
+ (deallocation)g(for)f(C)2042 149 y(progams)k(\(the)f(techniques)h(for)f
+ (a)g(type-safe)h(subset)g(of)f(C)g(are)g(described)2042
+ 232 y(in)e([19)q(])f(and)i(a)g(major)f(e)o(xtension)h(to)g(nearly)f
+ (arbitrary)h(C)f(is)f(in)i(progress\).)2042 315 y(This)17
+ b(w)o(ork)i(e)o(xploits)f(tw)o(o)g(k)o(e)o(y)g(properties:)g(pools)h
+ (in)f(type-safe)g(programs)2042 399 y(are)e(type)g(homogeneous,)i(and)e
+ (the)g(se)o(gre)o(gation)h(of)e(indi)n(vidual)i(data)f(struc-)2042
+ 482 y(tures)22 b(into)g(pools)h(ensures)f(that)g(man)o(y)h(pools)g(are)
+ f(relati)n(v)o(ely)g(short-li)n(v)o(ed.)2042 565 y(The)g
+ (type-homogeneity)i(means)f(that)e(e)n(v)o(en)i(with)f(e)o(xplicit)f
+ (deallocation,)2042 648 y(we)h(can)h(pre)n(v)o(ent)g(dangling)h
+ (pointers)f(into)f(the)h(pool)g(from)f(being)i(able)e(to)2042
+ 731 y(cause)j(unintended)i(type)e(violations.)h(The)e(short)i(pool)f
+ (lifetimes)f(ensure)2042 814 y(that)19 b(memory)g(consumption)i(does)f
+ (not)f(increase)g(signi\002cantly)-5 b(.)2042 1054 y
+ FA(8.)91 b(Implementation)2042 1171 y Fz(W)-6 b(e)24
+ b(implemented)i(Automatic)f(Pool)g(Allocation)g(as)g(a)g(link-time)f
+ (trans-)2042 1254 y(formation)c(using)h(the)f(LL)-7 b(VM)19
+ b(Compiler)h(Infrastructure)h([34].)f(Perform-)2042 1337
+ y(ing)j(cross-module,)h(interprocedural)g(techniques)g(\(lik)o(e)f
+ (automatic)g(pool)2042 1420 y(allocation\))17 b(at)f(link-time)h(has)g
+ (tw)o(o)g(adv)n(antages)i([3]:)d(it)h(preserv)o(es)g(most)g(of)2042
+ 1503 y(the)f(bene\002ts)h(of)f(separate)h(compilation)g(\(requiring)f
+ (fe)n(w)h(or)f(no)h(changes)g(to)2042 1586 y(Mak)o(e\002les)g(for)f
+ (man)o(y)g(applications\),)h(and)g(it)e(ensures)i(that)f(as)g(much)h
+ (of)f(the)2042 1669 y(program)k(is)e(a)o(v)n(ailable)h(for)g
+ (interprocedural)h(optimization)g(as)e(possible.)2141
+ 1752 y(Our)30 b(system)f(compiles)h(source)g(programs)g(into)f(the)h
+ (LL)-7 b(VM)28 b(repre-)2042 1835 y(sentation)d(\(for)f(C)g(and)h(C++,)
+ e(we)i(use)f(a)g(modi\002ed)h(v)o(ersion)g(of)f(the)h(GCC)2042
+ 1918 y(front-end\),)g(applies)g(standard)h(intraprocedural)g
+ (optimizations)g(to)e(each)2042 2001 y(module,)f(links)g(the)g(LL)-7
+ b(VM)22 b(object)h(\002les)g(into)g(a)f(single)i(LL)-7
+ b(VM)21 b(module,)2042 2084 y(and)28 b(then)g(applies)h
+ (interprocedural)g(optimizations.)f(At)f(this)g(stage,)h(we)2042
+ 2167 y(\002rst)d(compute)i(the)f(complete)h(Bottom-up)g(DS)e(graphs)i
+ (and)g(then)f(apply)2042 2250 y(the)h(Pool)f(Allocation)i(algorithm)f
+ (in)g(Figure)f(6.)h(Finally)-5 b(,)26 b(we)h(run)g(a)g(fe)n(w)2042
+ 2333 y(passes)21 b(to)g(clean)g(up)h(the)e(resulting)i(code,)f(the)g
+ (most)g(important)g(of)g(which)2042 2416 y(are)g(interprocedural)h
+ (constant)f(propagation)i(\(IPCP\),)18 b(to)j(propagate)h(null)2042
+ 2499 y(or)28 b(global)i(pool)f(descriptors)g(when)g(these)g(are)g
+ (passed)h(as)e(function)i(ar)o(-)2042 2582 y(guments,)c(and)g(dead)g
+ (ar)o(gument)g(elimination)g(\(to)f(remo)o(v)o(e)h(pool)g(pointer)2042
+ 2665 y(ar)o(guments)j(made)h(dead)f(by)h(IPCP\).)c(The)j(resulting)g
+ (code)h(is)e(compiled)2042 2748 y(to)23 b(either)g(nati)n(v)o(e)g(or)g
+ (C)g(code)h(using)g(one)g(of)f(the)g(LL)-7 b(VM)22 b(back-ends,)i(and)
+ 2042 2831 y(link)o(ed)30 b(with)e(an)o(y)i(nati)n(v)o(e)g(code)g
+ (libraries)e(\(i.e.,)g(those)i(not)f(a)o(v)n(ailable)g(in)2042
+ 2914 y(LL)-7 b(VM)18 b(form\))g(for)h(e)o(x)o(ecution.)2141
+ 2997 y(Our)i(implementation)h(of)f(Data)g(Structure)g(Analysis)g(and)h
+ (Automatic)2042 3080 y(Pool)30 b(Allocation)g(are)g(publicly)h(a)o(v)n
+ (ailable)f(from)g(the)g(LL)-7 b(VM)29 b(web)i(site)2042
+ 3163 y(\()p Fs(http://llvm.cs.uiuc.edu/)p Fz(\),)d(together)23
+ b(with)g(the)g(LL)-7 b(VM)22 b(infras-)2042 3246 y(tructure,)27
+ b(front-ends)h(for)f(C)f(and)i(C++,)f(and)h(most)f(of)g(the)g
+ (benchmarks)2042 3329 y(used)19 b(in)g(the)g(e)o(xperimental)h(e)n(v)n
+ (aluation)g(in)f(Section)g(9.)2042 3570 y FA(9.)91 b(Experimental)21
+ b(Results)2042 3686 y Fz(W)-6 b(e)15 b(e)n(v)n(aluated)i(Automatic)f
+ (Pool)f(Allocation)h(e)o(xperimentally)h(in)e(order)h(to)2042
+ 3769 y(study)j(se)n(v)o(eral)g(issues:)f(compilation)i(time,)e(o)o(v)o
+ (erall)g(performance)i(impact)2042 3852 y(of)d(pool)h(allocation,)f
+ (the)g(contrib)o(utions)h(of)g(the)f(later)g(optimizations)g(it)g(en-)
+ 2042 3935 y(ables,)i(and)g(the)g(ef)n(fect)g(on)h(the)f(performance)h
+ (of)f(the)g(memory)g(hierarchy)-5 b(.)2141 4018 y(F)o(or)34
+ b(our)g(e)o(xperiments)g(in)g(this)f(paper)m(,)h(we)g(used)h(the)e(LL)
+ -7 b(VM-to-C)2042 4101 y(back-end)32 b(and)e(compiled)h(the)g
+ (resulting)f(C)g(code)h(with)e(GCC)h(3.4.2)g(at)2042
+ 4184 y(-O3.)g(The)h(e)o(xperiments)h(were)e(run)i(on)f(an)g(AMD)g
+ (Athlon)g(MP)g(2100+)2042 4267 y(running)c(Fedora)f(Core)g(1)g(Linux.)g
+ (This)f(machine)i(has)f(e)o(xclusi)n(v)o(e)h(64KB)2042
+ 4350 y(L1)e(and)h(256KB)g(L2)f(data)h(caches.)f(The)h(C)f(library)g(on)
+ h(this)f(system)h(im-)2042 4433 y(plements)j Fs(malloc)p
+ Fz(/)p Fs(free)h Fz(using)g(a)e(modi\002ed)h(Lea)g(allocator)m(,)f
+ (which)h(is)2042 4516 y(a)c(high)g(quality)h(general)f(purpose)h
+ (allocator)l(.)f(This)g(allocator)g(is)f(used)i(in)2042
+ 4599 y(all)f(our)h(e)o(xperiments)h(belo)n(w)-5 b(,)26
+ b(either)g(directly)g(from)g(the)f(application)i(or)2042
+ 4682 y(the)g(pool)h(runtime)g(library)-5 b(.)27 b(All)f(runtimes)i
+ (reported)g(are)f(the)h(minimum)2042 4765 y(user+system)20
+ b(time)e(from)h(three)g(e)o(x)o(ecutions)h(of)f(the)g(program.)2141
+ 4848 y(F)o(or)31 b(this)f(w)o(ork,)h(we)g(are)g(most)g(interested)g(in)
+ g(heap)g(intensi)n(v)o(e)h(pro-)2042 4932 y(grams,)i(particularly)g
+ (those)h(that)e(use)i(recursi)n(v)o(e)f(data)h(structures.)f(F)o(or)
+ 2042 5015 y(this)15 b(reason,)h(we)g(include)g(numbers)h(for)e(the)h
+ (pointer)o(-intensi)n(v)o(e)g(SPECINT)2042 5098 y(2000)h(benchmarks,)g
+ (the)f(Ptrdist)f(suite)h([2],)f(the)h(Olden)h(suite)f([39],)f(and)i
+ (the)2042 5181 y(FreeBench)k(suite)f([40].)g(W)-6 b(e)20
+ b(also)g(include)h(a)f(fe)n(w)h(standalone)g(programs:)2042
+ 5264 y(Po)o(vray3.1)29 b(\(a)g(widely)g(used)g(open)h(source)g(ray)f
+ (tracer)m(,)f(a)o(v)n(ailable)h(from)2042 5347 y Fs(povray.org)p
+ Fz(\),)j(espresso,)g(fpgro)n(wth)g(\(a)f(patent-protected,)h(data)f
+ (min-)2042 5430 y(ing)18 b(algorithm)g([25]\),)f(llu-bench)i(\(a)e
+ (link)o(ed-list)h(microbenchmark\))h([46)q(],)p eop end
+ %%Page: 10 10
+ TeXDict begin 10 9 bop -150 66 a Fz(and)21 b(\223chomp\224)g(from)f
+ (the)g(McGill)f(benchmark)j(suite.)e(All)f(b)o(ut)g(SPEC,)f(fp-)-150
+ 149 y(gro)n(wth)h(and)h(po)o(vray31)h(are)e(a)o(v)n(ailable)g(from)g
+ Fs(llvm.cs.uiuc.edu)p Fz(.)-50 232 y(F)o(or)f(lack)i(of)f(space,)h(we)g
+ (elide)f(man)o(y)h(benchmarks)h(from)f(these)f(suites)-150
+ 315 y(that)25 b(were)h(unaf)n(fected)h(by)f(pool)g(allocation.)f(This)g
+ (happens)j(for)d(se)n(v)o(eral)-150 399 y(reasons.)h(Some)g(of)g(the)g
+ (benchmarks,)h(including)g(181.mcf,)g(186.crafty)-5 b(,)-150
+ 482 y(256.bzip2,)41 b(and)f(se)n(v)o(eral)h(FreeBench)f(benchmarks,)h
+ (ha)o(v)o(e)f(v)o(ery)g(fe)n(w)-150 565 y(dynamic)f(memory)f
+ (allocations.)g(A)f(fe)n(w)g(\(e.g.)g(197.parser)m(,)i(254.gap,)-150
+ 648 y(255.v)o(orte)o(x\))28 b(ha)o(v)o(e)g(custom)g(memory)h
+ (allocators,)e(which)h(pre)n(v)o(ents)g(dis-)-150 731
+ y(ambigution)d(of)f(allocated)g(memory)h(objects)f(and)g(causes)h(all)e
+ (objects)h(to)-150 814 y(be)c(placed)h(in)f(a)g(single)g(pool.)g(As)g
+ (an)g(e)o(xperiment,)g(we)g(remo)o(v)o(ed)h(the)f(cus-)-150
+ 897 y(tom)i(memory)h(allocator)g(from)f(197.parser)h(and)g(replaced)g
+ (it)e(with)h(wrap-)-150 980 y(pers)h(that)f(just)h(call)f
+ Fs(malloc)p Fz(/)p Fs(free)p Fz(;)i(this)f(is)f(called)h(197.parser)o
+ (-b)g(belo)n(w)-5 b(.)-150 1063 y(W)f(e)16 b(can)i(do)f(this)g(to)g
+ (197.parser)h(\(b)o(ut)f(not)g(the)g(others\))g(because)h(its)f(custom)
+ -150 1146 y(allocator)24 b(has)g(semantics)g(identical)g(to)g
+ Fs(malloc)p Fz(/)p Fs(free)p Fz(.)h(Finally)-5 b(,)23
+ b(almost)-150 1229 y(all)18 b(the)g(codes)h(in)f(the)g(McGill)g
+ (benchmark)i(suite)e(ha)o(v)o(e)g(run)h(times)e(that)h(are)-150
+ 1312 y(too)h(small)g(to)g(be)g(measured)h(reliably)-5
+ b(.)-150 1456 y Fn(9.1)75 b(P)o(ool)18 b(Allocation)h(Statistics)-150
+ 1572 y Fz(T)-6 b(able)17 b(1)g(sho)n(ws)h(se)n(v)o(eral)g(basic)f
+ (statistics)f(about)i(pool)g(allocation)g(for)f(each)-150
+ 1655 y(program.)24 b(The)g(StatPools)f(column)i(sho)n(ws)f(the)g
+ (number)h(of)e(static)h(pools)-150 1738 y(created)29
+ b(in)g(the)g(program)h(\(when)f(using)g(Selecti)n(v)o(e)g(P)-7
+ b(A\).)28 b(The)g(NumTH)-150 1821 y(column)g(sho)n(ws)g(the)g(static)f
+ (number)h(of)g(type)g(homogenous)i(pools,)e(and)-150
+ 1904 y(TH\045)22 b(is)h(percentage)h(of)e(static)g(pools)i(that)e(are)h
+ (type-homogenous.)i(The)-150 1987 y(DynPools)30 b(column)g(lists)f(the)
+ g(number)h(of)g(dynamic)g(pools)g(created)g(by)-150 2070
+ y(the)36 b(program.)h(T)-6 b(ot)35 b(Ar)o(gs)h(and)g(Max)h(Ar)o(gs)f
+ (are)g(the)g(total)f(number)i(of)-150 2153 y(formal)26
+ b(ar)o(guments)i(added)f(to)g(the)f(program)i(across)f(all)f
+ (functions,)h(and)-150 2236 y(the)19 b(maximum)h(number)g(for)e(a)h
+ (single)h(function.)p -150 2331 2047 4 v -152 2398 4
+ 67 v -100 2378 a Fw(Program)p 239 2398 V 249 w(LOC)p
+ 513 2398 V 529 2398 V 155 w(Stat)p 758 2398 V 100 w(Num)p
+ 974 2398 V 109 w(TH\045)p 1209 2398 V 1226 2398 V 146
+ w(Dyn)p 1455 2398 V 1471 2398 V 152 w(T)-5 b(ot)p 1683
+ 2398 V 105 w(Max)p 1894 2398 V -152 2464 V 239 2464 V
+ 513 2464 V 529 2464 V 581 2444 a(Pools)p 758 2464 V 139
+ w(TH)p 974 2464 V 1209 2464 V 1226 2464 V 350 w(Pools)p
+ 1455 2464 V 1471 2464 V 117 w(Ar)o(gs)p 1683 2464 V 99
+ w(Ar)o(gs)p 1894 2464 V -150 2468 2047 4 v -152 2534
+ 4 67 v -100 2514 a(164.gzip)p 239 2534 V 246 w(8616)p
+ 513 2534 V 529 2534 V 217 w(4)p 758 2534 V 187 w(4)p
+ 974 2534 V 100 w(100\045)p 1209 2534 V 1226 2534 V 188
+ w(44)p 1455 2534 V 1471 2534 V 199 w(1)p 1683 2534 V
+ 182 w(1)p 1894 2534 V -152 2600 V -100 2580 a(175.vpr)p
+ 239 2600 V 240 w(17728)p 513 2600 V 529 2600 V 159 w(107)p
+ 758 2600 V 158 w(91)p 974 2600 V 129 w(85\045)p 1209
+ 2600 V 1226 2600 V 188 w(44)p 1455 2600 V 1471 2600 V
+ 170 w(23)p 1683 2600 V 182 w(4)p 1894 2600 V -152 2667
+ V -100 2647 a(197.parser)o(-b)p 239 2667 V 128 w(11204)p
+ 513 2667 V 529 2667 V 188 w(49)p 758 2667 V 158 w(48)p
+ 974 2667 V 129 w(98\045)p 1209 2667 V 1226 2667 V 129
+ w(6674)p 1455 2667 V 1471 2667 V 171 w(76)p 1683 2667
+ V 153 w(16)p 1894 2667 V -152 2733 V -100 2713 a(252.eon)p
+ 239 2733 V 233 w(35819)p 513 2733 V 529 2733 V 159 w(124)p
+ 758 2733 V 129 w(123)p 974 2733 V 129 w(99\045)p 1209
+ 2733 V 1226 2733 V 188 w(66)p 1455 2733 V 1471 2733 V
+ 141 w(549)p 1683 2733 V 153 w(41)p 1894 2733 V -152 2800
+ V -100 2780 a(300.tw)o(olf)p 239 2800 V 196 w(20461)p
+ 513 2800 V 529 2800 V 188 w(94)p 758 2800 V 158 w(88)p
+ 974 2800 V 129 w(94\045)p 1209 2800 V 1226 2800 V 158
+ w(227)p 1455 2800 V 1471 2800 V 200 w(1)p 1683 2800 V
+ 182 w(1)p 1894 2800 V -150 2803 2047 4 v -152 2869 4
+ 67 v -100 2849 a(anagram)p 239 2869 V 278 w(650)p 513
+ 2869 V 529 2869 V 216 w(4)p 758 2869 V 187 w(3)p 974
+ 2869 V 129 w(75\045)p 1209 2869 V 1226 2869 V 217 w(4)p
+ 1455 2869 V 1471 2869 V 199 w(0)p 1683 2869 V 182 w(0)p
+ 1894 2869 V -152 2936 V -100 2916 a(bc)p 239 2936 V 393
+ w(7297)p 513 2936 V 529 2936 V 188 w(24)p 758 2936 V
+ 158 w(22)p 974 2936 V 129 w(32\045)p 1209 2936 V 1226
+ 2936 V 188 w(19)p 1455 2936 V 1471 2936 V 199 w(6)p 1683
+ 2936 V 182 w(2)p 1894 2936 V -152 3002 V -100 2982 a(ft)p
+ 239 3002 V 413 w(1803)p 513 3002 V 529 3002 V 217 w(3)p
+ 758 3002 V 187 w(3)p 974 3002 V 100 w(100\045)p 1209
+ 3002 V 1226 3002 V 217 w(4)p 1455 3002 V 1471 3002 V
+ 199 w(0)p 1683 3002 V 182 w(0)p 1894 3002 V -152 3069
+ V -100 3049 a(ks)p 239 3069 V 426 w(782)p 513 3069 V
+ 529 3069 V 216 w(3)p 758 3069 V 187 w(3)p 974 3069 V
+ 100 w(100\045)p 1209 3069 V 1226 3069 V 217 w(3)p 1455
+ 3069 V 1471 3069 V 199 w(0)p 1683 3069 V 182 w(0)p 1894
+ 3069 V -152 3135 V -100 3115 a(yacr2)p 239 3135 V 319
+ w(3982)p 513 3135 V 529 3135 V 188 w(20)p 758 3135 V
+ 158 w(20)p 974 3135 V 100 w(100\045)p 1209 3135 V 1226
+ 3135 V 188 w(83)p 1455 3135 V 1471 3135 V 199 w(0)p 1683
+ 3135 V 182 w(0)p 1894 3135 V -150 3138 2047 4 v -152
+ 3205 4 67 v -100 3185 a(analyzer)p 239 3205 V 281 w(923)p
+ 513 3205 V 529 3205 V 216 w(5)p 758 3205 V 187 w(5)p
+ 974 3205 V 100 w(100\045)p 1209 3205 V 1226 3205 V 217
+ w(8)p 1455 3205 V 1471 3205 V 199 w(0)p 1683 3205 V 182
+ w(0)p 1894 3205 V -152 3271 V -100 3251 a(neural)p 239
+ 3271 V 333 w(785)p 513 3271 V 529 3271 V 216 w(5)p 758
+ 3271 V 187 w(5)p 974 3271 V 100 w(100\045)p 1209 3271
+ V 1226 3271 V 188 w(93)p 1455 3271 V 1471 3271 V 199
+ w(0)p 1683 3271 V 182 w(0)p 1894 3271 V -152 3338 V -100
+ 3318 a(pcompress2)p 239 3338 V 200 w(903)p 513 3338 V
+ 529 3338 V 216 w(5)p 758 3338 V 187 w(5)p 974 3338 V
+ 100 w(100\045)p 1209 3338 V 1226 3338 V 217 w(8)p 1455
+ 3338 V 1471 3338 V 199 w(0)p 1683 3338 V 182 w(0)p 1894
+ 3338 V -150 3341 2047 4 v -152 3407 4 67 v -100 3387
+ a(llu-bench)p 239 3407 V 259 w(191)p 513 3407 V 529 3407
+ V 216 w(1)p 758 3407 V 187 w(1)p 974 3407 V 100 w(100\045)p
+ 1209 3407 V 1226 3407 V 217 w(2)p 1455 3407 V 1471 3407
+ V 199 w(0)p 1683 3407 V 182 w(0)p 1894 3407 V -152 3474
+ V -100 3454 a(chomp)p 239 3474 V 320 w(424)p 513 3474
+ V 529 3474 V 216 w(4)p 758 3474 V 187 w(4)p 974 3474
+ V 100 w(100\045)p 1209 3474 V 1226 3474 V 217 w(7)p 1455
+ 3474 V 1471 3474 V 170 w(10)p 1683 3474 V 182 w(8)p 1894
+ 3474 V -152 3540 V -100 3520 a(fpgro)o(wth)p 239 3540
+ V 267 w(634)p 513 3540 V 529 3540 V 216 w(6)p 758 3540
+ V 187 w(6)p 974 3540 V 100 w(100\045)p 1209 3540 V 1226
+ 3540 V 121 w(3.4M)p 1455 3540 V 1471 3540 V 170 w(10)p
+ 1683 3540 V 182 w(6)p 1894 3540 V -152 3607 V -100 3587
+ a(espresso)p 239 3607 V 221 w(14959)p 513 3607 V 529
+ 3607 V 159 w(160)p 758 3607 V 129 w(160)p 974 3607 V
+ 100 w(100\045)p 1209 3607 V 1226 3607 V 116 w(100K)p
+ 1455 3607 V 1471 3607 V 142 w(191)p 1683 3607 V 153 w(13)p
+ 1894 3607 V -152 3673 V -100 3653 a(po)o(vray31)p 239
+ 3673 V 172 w(108273)p 513 3673 V 529 3673 V 188 w(46)p
+ 758 3673 V 187 w(5)p 974 3673 V 129 w(11\045)p 1209 3673
+ V 1226 3673 V 188 w(14)p 1455 3673 V 1471 3673 V 141
+ w(290)p 1683 3673 V 182 w(4)p 1894 3673 V -150 3676 2047
+ 4 v -152 3743 4 67 v -100 3723 a(bh)p 239 3743 V 390
+ w(2090)p 513 3743 V 529 3743 V 217 w(1)p 758 3743 V 187
+ w(0)p 974 3743 V 158 w(0\045)p 1209 3743 V 1226 3743
+ V 217 w(1)p 1455 3743 V 1471 3743 V 199 w(0)p 1683 3743
+ V 182 w(0)p 1894 3743 V -152 3809 V -100 3789 a(bisort)p
+ 239 3809 V 346 w(350)p 513 3809 V 529 3809 V 216 w(1)p
+ 758 3809 V 187 w(1)p 974 3809 V 100 w(100\045)p 1209
+ 3809 V 1226 3809 V 217 w(1)p 1455 3809 V 1471 3809 V
+ 199 w(1)p 1683 3809 V 182 w(1)p 1894 3809 V -152 3876
+ V -100 3856 a(em3d)p 239 3876 V 349 w(682)p 513 3876
+ V 529 3876 V 187 w(12)p 758 3876 V 158 w(12)p 974 3876
+ V 100 w(100\045)p 1209 3876 V 1226 3876 V 188 w(12)p
+ 1455 3876 V 1471 3876 V 199 w(3)p 1683 3876 V 182 w(2)p
+ 1894 3876 V -152 3942 V -100 3922 a(health)p 239 3942
+ V 336 w(508)p 513 3942 V 529 3942 V 216 w(2)p 758 3942
+ V 187 w(2)p 974 3942 V 100 w(100\045)p 1209 3942 V 1226
+ 3942 V 217 w(2)p 1455 3942 V 1471 3942 V 199 w(4)p 1683
+ 3942 V 182 w(2)p 1894 3942 V -152 4008 V -100 3988 a(mst)p
+ 239 4008 V 394 w(432)p 513 4008 V 529 4008 V 216 w(4)p
+ 758 4008 V 187 w(4)p 974 4008 V 100 w(100\045)p 1209
+ 4008 V 1226 4008 V 217 w(4)p 1455 4008 V 1471 4008 V
+ 199 w(0)p 1683 4008 V 182 w(0)p 1894 4008 V -152 4075
+ V -100 4055 a(perimeter)p 239 4075 V 256 w(484)p 513
+ 4075 V 529 4075 V 216 w(1)p 758 4075 V 187 w(1)p 974
+ 4075 V 100 w(100\045)p 1209 4075 V 1226 4075 V 217 w(1)p
+ 1455 4075 V 1471 4075 V 199 w(1)p 1683 4075 V 182 w(1)p
+ 1894 4075 V -152 4141 V -100 4121 a(po)o(wer)p 239 4141
+ V 334 w(622)p 513 4141 V 529 4141 V 216 w(3)p 758 4141
+ V 187 w(3)p 974 4141 V 100 w(100\045)p 1209 4141 V 1226
+ 4141 V 217 w(3)p 1455 4141 V 1471 4141 V 199 w(9)p 1683
+ 4141 V 182 w(7)p 1894 4141 V -152 4208 V -100 4188 a(treeadd)p
+ 239 4208 V 307 w(245)p 513 4208 V 529 4208 V 216 w(6)p
+ 758 4208 V 187 w(6)p 974 4208 V 100 w(100\045)p 1209
+ 4208 V 1226 4208 V 217 w(6)p 1455 4208 V 1471 4208 V
+ 199 w(1)p 1683 4208 V 182 w(1)p 1894 4208 V -152 4274
+ V -100 4254 a(tsp)p 239 4274 V 410 w(579)p 513 4274 V
+ 529 4274 V 216 w(1)p 758 4274 V 187 w(1)p 974 4274 V
+ 100 w(100\045)p 1209 4274 V 1226 4274 V 217 w(1)p 1455
+ 4274 V 1471 4274 V 199 w(1)p 1683 4274 V 182 w(1)p 1894
+ 4274 V -150 4277 2047 4 v -150 4322 1993 3 v 239 4406
+ a Fn(T)e(able)19 b(1.)g Fz(Basic)f(Pool)h(Allocation)g(Statistics)-50
+ 4516 y(The)32 b(programs)h(v)n(ary)g(greatly)g(in)f(terms)h(of)f(the)h
+ (ratio)f(of)g(dynamic)-150 4599 y(pool)23 b(instances)g(\(Dyn)g
+ (Pools\))f(to)g(static)g(pools)h(\(Stat)e(Pools\).)h
+ Fs(fpgrowth)-150 4682 y Fz(has)28 b(a)f(particularly)h(high)g(ratio)f
+ (because)i(it)d(creates)i(a)f(ne)n(w)h(pool)g(\(for)f(a)-150
+ 4765 y(local)22 b(search)h(tree\))f(in)g(each)h(call)f(to)g(a)g
+ (recursi)n(v)o(e)h(function.)g(The)f(number)-150 4848
+ y(of)h(ar)o(guments)i(added)f(to)g(the)f(programs)i(is)e(generally)h
+ (modest.)g(252.eon)-150 4932 y(has)e(a)g(lar)o(ge)g(number)h(of)f(ar)o
+ (guments)h(added)g(because)g(the)f(standard)h(C++)-150
+ 5015 y(library)15 b(is)g(statically)g(link)o(ed)h(in,)f(pro)o(viding)h
+ (a)g(lar)o(ge)f(amount)h(of)f(cold)h(code.)-50 5098 y(The)23
+ b(Th\045)g(column)h(also)g(sho)n(ws)g(that)f(for)g(most)g(pools,)h(DSA)
+ e(is)h(able)-150 5181 y(to)k(successfully)i(pro)o(v)o(e)f(that)f
+ (memory)h(in)g(the)f(pool)h(is)f(used)h(in)g(a)f(type-)-150
+ 5264 y(consistent)c(manner)m(,)g(which)g(we)g(ha)o(v)o(e)g(found)h
+ (true)e(across)h(a)g(wide)g(range)-150 5347 y(of)i(C)g(programs.)h
+ (This)f(allo)n(ws)g(intelligent)g(alignment)h(decisions,)g(gi)n(v)o(es)
+ -150 5430 y(the)16 b(pool)g(runtime)g(information)h(about)f(e)o
+ (xpected)i(size)d(for)h(single)g(objects,)2042 66 y(and)28
+ b(enables)g(other)g(no)o(v)o(el)g(compiler)g(techniques)h(described)g
+ (brie\003y)e(in)2042 149 y(Section)19 b(7.)p 2042 235
+ 1030 4 v 2040 302 4 67 v 2092 282 a Fw(Program)p 2431
+ 302 V 2447 302 V 208 w(BP)p 2618 302 V 116 w(BP\045)p
+ 2853 302 V 2870 302 V 116 w(PFE)p 3070 302 V 2042 305
+ 1030 4 v 2040 371 4 67 v 2092 351 a(164.gzip)p 2431 371
+ V 2447 371 V 247 w(1)p 2618 371 V 129 w(25\045)p 2853
+ 371 V 2870 371 V 187 w(9)p 3070 371 V 2040 438 V 2092
+ 418 a(175.vpr)p 2431 438 V 2447 438 V 241 w(27)p 2618
+ 438 V 129 w(25\045)p 2853 438 V 2870 438 V 158 w(29)p
+ 3070 438 V 2040 504 V 2092 484 a(197.parser)o(-b)p 2431
+ 504 V 2447 504 V 158 w(3)p 2618 504 V 158 w(6\045)p 2853
+ 504 V 2870 504 V 187 w(0)p 3070 504 V 2040 571 V 2092
+ 551 a(252.eon)p 2431 571 V 2447 571 V 263 w(0)p 2618
+ 571 V 158 w(0\045)p 2853 571 V 2870 571 V 158 w(28)p
+ 3070 571 V 2040 637 V 2092 617 a(300.tw)o(olf)p 2431
+ 637 V 2447 637 V 197 w(61)p 2618 637 V 129 w(65\045)p
+ 2853 637 V 2870 637 V 187 w(1)p 3070 637 V 2042 640 1030
+ 4 v 2040 707 4 67 v 2092 687 a(anagram)p 2431 707 V 2447
+ 707 V 249 w(2)p 2618 707 V 129 w(50\045)p 2853 707 V
+ 2870 707 V 187 w(0)p 3070 707 V 2040 773 V 2092 753 a(bc)p
+ 2431 773 V 2447 773 V 394 w(3)p 2618 773 V 129 w(13\045)p
+ 2853 773 V 2870 773 V 187 w(0)p 3070 773 V 2040 840 V
+ 2092 820 a(ft)p 2431 840 V 2447 840 V 414 w(2)p 2618
+ 840 V 129 w(67\045)p 2853 840 V 2870 840 V 187 w(0)p
+ 3070 840 V 2040 906 V 2092 886 a(ks)p 2431 906 V 2447
+ 906 V 397 w(3)p 2618 906 V 99 w(100\045)p 2853 906 V
+ 2870 906 V 188 w(0)p 3070 906 V 2040 972 V 2092 952 a(yacr2)p
+ 2431 972 V 2447 972 V 320 w(7)p 2618 972 V 129 w(35\045)p
+ 2853 972 V 2870 972 V 187 w(0)p 3070 972 V 2042 976 1030
+ 4 v 2040 1042 4 67 v 2092 1022 a(analyzer)p 2431 1042
+ V 2447 1042 V 252 w(5)p 2618 1042 V 99 w(100\045)p 2853
+ 1042 V 2870 1042 V 188 w(0)p 3070 1042 V 2040 1109 V
+ 2092 1089 a(neural)p 2431 1109 V 2447 1109 V 304 w(5)p
+ 2618 1109 V 99 w(100\045)p 2853 1109 V 2870 1109 V 188
+ w(0)p 3070 1109 V 2040 1175 V 2092 1155 a(pcompress2)p
+ 2431 1175 V 2447 1175 V 171 w(0)p 2618 1175 V 158 w(0\045)p
+ 2853 1175 V 2870 1175 V 187 w(0)p 3070 1175 V 2042 1178
+ 1030 4 v 3104 235 962 4 v 3102 302 4 67 v 3154 282 a(Program)p
+ 3425 302 V 3442 302 V 140 w(BP)p 3612 302 V 116 w(BP\045)p
+ 3848 302 V 3864 302 V 117 w(PFE)p 4064 302 V 3104 305
+ 962 4 v 3102 371 4 67 v 3154 351 a(llu-bench)p 3425 371
+ V 3442 371 V 162 w(1)p 3612 371 V 100 w(100\045)p 3848
+ 371 V 3864 371 V 188 w(0)p 4064 371 V 3102 438 V 3154
+ 418 a(chomp)p 3425 438 V 3442 438 V 223 w(0)p 3612 438
+ V 158 w(0\045)p 3848 438 V 3864 438 V 188 w(0)p 4064
+ 438 V 3102 504 V 3154 484 a(fpgro)o(wth)p 3425 504 V
+ 3442 504 V 170 w(0)p 3612 504 V 158 w(0\045)p 3848 504
+ V 3864 504 V 188 w(0)p 4064 504 V 3102 571 V 3154 551
+ a(espresso)p 3425 571 V 3442 571 V 183 w(1)p 3612 571
+ V 158 w(1\045)p 3848 571 V 3864 571 V 188 w(3)p 4064
+ 571 V 3102 637 V 3154 617 a(po)o(vray31)p 3425 637 V
+ 3442 637 V 163 w(6)p 3612 637 V 129 w(13\045)p 3848 637
+ V 3864 637 V 159 w(28)p 4064 637 V 3104 640 962 4 v 3102
+ 707 4 67 v 3154 687 a(bh)p 3425 707 V 3442 707 V 323
+ w(1)p 3612 707 V 100 w(100\045)p 3848 707 V 3864 707
+ V 188 w(0)p 4064 707 V 3102 773 V 3154 753 a(bisort)p
+ 3425 773 V 3442 773 V 249 w(1)p 3612 773 V 100 w(100\045)p
+ 3848 773 V 3864 773 V 188 w(0)p 4064 773 V 3102 840 V
+ 3154 820 a(em3d)p 3425 840 V 3442 840 V 252 w(6)p 3612
+ 840 V 129 w(50\045)p 3848 840 V 3864 840 V 188 w(0)p
+ 4064 840 V 3102 906 V 3154 886 a(health)p 3425 906 V
+ 3442 906 V 239 w(2)p 3612 906 V 100 w(100\045)p 3848
+ 906 V 3864 906 V 188 w(0)p 4064 906 V 3102 972 V 3154
+ 952 a(mst)p 3425 972 V 3442 972 V 297 w(4)p 3612 972
+ V 100 w(100\045)p 3848 972 V 3864 972 V 188 w(0)p 4064
+ 972 V 3102 1039 V 3154 1019 a(perimeter)p 3425 1039 V
+ 3442 1039 V 159 w(1)p 3612 1039 V 100 w(100\045)p 3848
+ 1039 V 3864 1039 V 188 w(0)p 4064 1039 V 3102 1105 V
+ 3154 1085 a(po)o(wer)p 3425 1105 V 3442 1105 V 237 w(3)p
+ 3612 1105 V 100 w(100\045)p 3848 1105 V 3864 1105 V 188
+ w(0)p 4064 1105 V 3102 1172 V 3154 1152 a(treeadd)p 3425
+ 1172 V 3442 1172 V 210 w(2)p 3612 1172 V 129 w(33\045)p
+ 3848 1172 V 3864 1172 V 188 w(0)p 4064 1172 V 3102 1238
+ V 3154 1218 a(tsp)p 3425 1238 V 3442 1238 V 313 w(1)p
+ 3612 1238 V 100 w(100\045)p 3848 1238 V 3864 1238 V 188
+ w(0)p 4064 1238 V 3104 1241 962 4 v 2042 1286 1993 3
+ v 2417 1370 a Fn(T)-7 b(able)18 b(2.)h Fz(Statistics)e(for)i(Pool)g
+ (Optimizations)2141 1517 y(T)-6 b(able)25 b(2)f(sho)n(ws)h(the)f
+ (static)g(number)h(of)f(pools)h(that)f(can)h(use)f(a)h(b)o(ump)2042
+ 1600 y(pointer)e(after)g(poolfree)h(elimination)f(\(BP\),)f(and)h
+ (number)h(of)f Fs(poolfree)2042 1683 y Fz(calls)36 b(deleted)g(when)h
+ (PoolFree)e(Elim)g(is)h(enabled)h(\(PFE\).)d(The)i(table)2042
+ 1766 y(sho)n(ws)28 b(that)g(in)g(man)o(y)g(programs)h(\(the)f(lar)o
+ (ger)g(such)g(e)o(xamples)h(are)f(vpr)m(,)2042 1849 y(tw)o(olf,)22
+ b(yacr2,)i(and)g(po)o(vray\),)f(a)g(signi\002cant)h(fraction)f(of)g
+ (pools)h(are)f(iden-)2042 1932 y(ti\002ed)j(as)g(eligible)h(b)o
+ (ump-pointer)h(pools,)f(i.e.,)e(indi)n(vidual)i(pool)h(objects)2042
+ 2015 y(are)22 b(ne)n(v)o(er)g(freed)h(back)f(to)g(the)g(pool.)g(F)o(or)
+ g(vpr)m(,)g(tw)o(olf)f(and)i(po)o(vray)-5 b(,)23 b(this)e(is)2042
+ 2098 y(enabled)27 b(by)f(the)h(elimination)f(of)g(se)n(v)o(eral)g
+ Fs(poolfree)i Fz(operations.)e(This)2042 2181 y(elimination)c
+ (indicates)g(the)g(presence)h(of)f(the)g(b)o(uild-use-destro)o(y)i
+ (pattern)2042 2264 y(e)o(xplained)31 b(in)g(Section)f(5.)g(In)g
+ (175.vpr)m(,)i(for)e(e)o(xample,)h(pool)g(allocation)2042
+ 2347 y(eliminates)19 b(29)g(poolfree)h(calls.)2042 2495
+ y Fn(9.2)75 b(P)o(ool)18 b(Allocation)h(Compile)f(T)o(ime)2042
+ 2611 y Fz(T)-6 b(able)24 b(3)g(sho)n(ws)h(the)g(compile)g(times)f(for)g
+ (pool)h(allocation)f(on)h(programs)2042 2694 y(bigger)c(than)h(1000)g
+ (lines)f(of)g(code.)g(It)g(breaks)h(do)n(wn)g(this)e(time)h(into)g
+ (three)2042 2777 y(components:)26 b(the)f(total)f(time)h(for)g(DSA)f
+ (\(which)h(can)g(be)g(used)g(by)h(other)2042 2860 y(clients)c(as)g
+ (well\),)f(the)h(time)f(to)h(compute)h(the)g(EB)o(U)e(graphs)i
+ (described)g(in)2042 2943 y(Section)16 b(3.3.2)g(\(which)g(are)g
+ (speci\002c)g(to)g(pool)g(allocation\),)g(and)h(the)f(time)f(to)2042
+ 3026 y(perform)i(the)g(pool)g(allocation)g(transformation)g(itself.)f
+ (The)g(GCC)g(column)2042 3109 y(lists)i(the)h(time)f(to)h(compile)h
+ (the)f(program)g(with)g(GCC)f(3.4.2)h(at)g(-O3.)2141
+ 3192 y(The)37 b(total)f(compilation)i(time)e(for)h(pool)g(allocation)g
+ (is)g(e)o(xtremely)2042 3275 y(modest,)27 b(taking)g(less)f(than)i
+ (1.25)f(seconds)h(in)e(all)g(cases)i(on)f(our)g(Athlon)2042
+ 3359 y(2100+.)36 b(The)f(lar)o(gest)f(amount)i(of)f(time)f(is)h(spent)g
+ (analyzing)i(252.eon)2042 3442 y(\(which)28 b(has)h(a)f(lar)o(ge)f
+ (portion)i(of)f(the)g(standard)h(C++)f(library)h(statically)2042
+ 3525 y(link)o(ed)22 b(into)g(it\),)e(follo)n(wed)i(by)g(po)o(vray31;)i
+ (these)e(are)f(the)h(only)g(programs)2042 3608 y(that)28
+ b(took)h(more)f(than)h(1)f(second.)h(Furthermore,)f(much)h(of)f(the)h
+ (time)e(is)2042 3691 y(spent)34 b(in)f(DSA,)f(which)i(can)g(be)g(used)g
+ (for)f(a)h(v)n(ariety)g(of)f(applications)2042 3774 y(besides)24
+ b(pool)f(allocation)h([32)q(].)e(Our)h(implementation)h(of)g(the)f(EB)o
+ (U)f(and)2042 3857 y(P)-7 b(A)31 b(passes)i(ha)o(v)o(e)g(not)f(been)h
+ (optimized)g(substantially)-5 b(,)32 b(so)h(the)o(y)f(could)2042
+ 3940 y(probably)25 b(be)g(further)f(reduced.)i(Ov)o(erall,)d(these)i
+ (compilation)g(times)f(are)2042 4023 y(e)o(xtremely)19
+ b(small)g(for)g(a)f(sophisticated)i(interprocedural)g(optimization.)p
+ 2042 4123 2092 4 v 2040 4190 4 67 v 2092 4170 a Fw(Program)p
+ 2431 4190 V 249 w(LOC)p 2705 4190 V 2721 4190 V 156 w(GCC)p
+ 2981 4190 V 2997 4190 V 116 w(DSA)p 3213 4190 V 100 w(EB)o(U)p
+ 3428 4190 V 132 w(P)-5 b(A)p 3630 4190 V 3646 4190 V
+ 116 w(T)g(otal)p 3864 4190 V 99 w(GCC\045)p 4132 4190
+ V 2042 4193 2092 4 v 2040 4260 4 67 v 2092 4240 a(164.gzip)p
+ 2431 4260 V 246 w(8616)p 2705 4260 V 2721 4260 V 175
+ w(2.67)p 2981 4260 V 2997 4260 V 130 w(0.02)p 3213 4260
+ V 114 w(0.01)p 3428 4260 V 99 w(0.01)p 3630 4260 V 3646
+ 4260 V 132 w(0.03)p 3864 4260 V 146 w(1.1\045)p 4132
+ 4260 V 2040 4326 V 2092 4306 a(175.vpr)p 2431 4326 V
+ 240 w(17728)p 2705 4326 V 2721 4326 V 175 w(9.39)p 2981
+ 4326 V 2997 4326 V 130 w(0.06)p 3213 4326 V 114 w(0.03)p
+ 3428 4326 V 99 w(0.05)p 3630 4326 V 3646 4326 V 132 w(0.14)p
+ 3864 4326 V 146 w(1.5\045)p 4132 4326 V 2040 4392 V 2092
+ 4373 a(197.parser)o(-b)p 2431 4392 V 128 w(11204)p 2705
+ 4392 V 2721 4392 V 175 w(9.03)p 2981 4392 V 2997 4392
+ V 130 w(0.08)p 3213 4392 V 114 w(0.05)p 3428 4392 V 99
+ w(0.05)p 3630 4392 V 3646 4392 V 132 w(0.18)p 3864 4392
+ V 146 w(1.9\045)p 4132 4392 V 2040 4459 V 2092 4439 a(252.eon)p
+ 2431 4459 V 233 w(35819)p 2705 4459 V 2721 4459 V 117
+ w(131.13)p 2981 4459 V 2997 4459 V 130 w(0.51)p 3213
+ 4459 V 114 w(0.30)p 3428 4459 V 99 w(0.42)p 3630 4459
+ V 3646 4459 V 132 w(1.23)p 3864 4459 V 146 w(0.9\045)p
+ 4132 4459 V 2040 4525 V 2092 4505 a(300.tw)o(olf)p 2431
+ 4525 V 196 w(20459)p 2705 4525 V 2721 4525 V 146 w(17.21)p
+ 2981 4525 V 2997 4525 V 130 w(0.09)p 3213 4525 V 114
+ w(0.07)p 3428 4525 V 99 w(0.03)p 3630 4525 V 3646 4525
+ V 132 w(0.19)p 3864 4525 V 146 w(1.1\045)p 4132 4525
+ V 2042 4529 2092 4 v 2040 4595 4 67 v 2092 4575 a(bc)p
+ 2431 4595 V 393 w(7297)p 2705 4595 V 2721 4595 V 175
+ w(3.55)p 2981 4595 V 2997 4595 V 130 w(0.03)p 3213 4595
+ V 114 w(0.02)p 3428 4595 V 99 w(0.01)p 3630 4595 V 3646
+ 4595 V 132 w(0.06)p 3864 4595 V 146 w(1.7\045)p 4132
+ 4595 V 2040 4661 V 2092 4642 a(ft)p 2431 4661 V 413 w(1803)p
+ 2705 4661 V 2721 4661 V 175 w(0.68)p 2981 4661 V 2997
+ 4661 V 130 w(0.01)p 3213 4661 V 114 w(0.01)p 3428 4661
+ V 99 w(0.01)p 3630 4661 V 3646 4661 V 132 w(0.02)p 3864
+ 4661 V 146 w(2.9\045)p 4132 4661 V 2040 4728 V 2092 4708
+ a(yacr2)p 2431 4728 V 319 w(3982)p 2705 4728 V 2721 4728
+ V 175 w(1.79)p 2981 4728 V 2997 4728 V 130 w(0.02)p 3213
+ 4728 V 114 w(0.01)p 3428 4728 V 99 w(0.01)p 3630 4728
+ V 3646 4728 V 132 w(0.03)p 3864 4728 V 146 w(1.7\045)p
+ 4132 4728 V 2042 4731 2092 4 v 2040 4798 4 67 v 2092
+ 4778 a(espresso)p 2431 4798 V 221 w(14959)p 2705 4798
+ V 2721 4798 V 146 w(10.28)p 2981 4798 V 2997 4798 V 130
+ w(0.14)p 3213 4798 V 114 w(0.08)p 3428 4798 V 99 w(0.08)p
+ 3630 4798 V 3646 4798 V 132 w(0.30)p 3864 4798 V 146
+ w(2.9\045)p 4132 4798 V 2040 4864 V 2092 4844 a(po)o(vray31)p
+ 2431 4864 V 172 w(108273)p 2705 4864 V 2721 4864 V 146
+ w(39.20)p 2981 4864 V 2997 4864 V 130 w(0.58)p 3213 4864
+ V 114 w(0.33)p 3428 4864 V 99 w(0.27)p 3630 4864 V 3646
+ 4864 V 132 w(1.18)p 3864 4864 V 146 w(3.0\045)p 4132
+ 4864 V 2042 4867 2092 4 v 2040 4934 4 67 v 2092 4914
+ a(bh)p 2431 4934 V 390 w(2090)p 2705 4934 V 2721 4934
+ V 175 w(0.85)p 2981 4934 V 2997 4934 V 130 w(0.01)p 3213
+ 4934 V 114 w(0.01)p 3428 4934 V 99 w(0.01)p 3630 4934
+ V 3646 4934 V 132 w(0.01)p 3864 4934 V 146 w(1.2\045)p
+ 4132 4934 V 2042 4937 2092 4 v 2042 4981 1993 3 v 2136
+ 5066 a Fn(T)e(able)18 b(3.)h Fz(Compile)g(time)g(\(seconds\))h(for)e
+ (programs)i Fm(>)f Fz(1000)h(LOC)2141 5264 y(T)-6 b(o)16
+ b(put)g(these)g(times)g(in)f(perspecti)n(v)o(e,)i(the)f(GCC\045)f
+ (column)i(\(computed)2042 5347 y(as)28 b(\(T)-6 b(otal/GCC\)*100\),)28
+ b(sho)n(ws)h(that)f(the)h(pool)g(allocation)g(transforma-)2042
+ 5430 y(tion)c(tak)o(es)g(3\045)h(or)f(less)f(of)h(the)g(time)g(tak)o
+ (en)h(by)f(GCC)f(to)h(compile)h(these)p eop end
+ %%Page: 11 11
+ TeXDict begin 11 10 bop -150 66 a Fz(programs.)20 b(This)e(is)h
+ (signi\002cant)g(because)h(GCC)e(-O3)h(performs)h(no)f(cross-)-150
+ 149 y(module)25 b(optimizations)g(and)g(inlining)f(is)g(the)g(only)h
+ (interprocedural)g(op-)-150 232 y(timization)f(it)g(performs)g(within)g
+ (a)h(module.)f(Ov)o(erall,)g(we)g(belie)n(v)o(e)h(these)-150
+ 315 y(compilation)20 b(times)e(are)h(quite)g(acceptable)h(for)f(a)g
+ (production)h(compiler)l(.)-150 464 y Fn(9.3)75 b(Baselines)19
+ b(and)f(P)o(ool)g(Allocation)h(Ov)o(erheads)p -150 584
+ 2081 4 v -152 651 4 67 v -100 631 a Fw(Program)p 239
+ 651 V 255 651 V 248 w(GCC)p 515 651 V 119 w(NoP)-5 b(A)p
+ 774 651 V 791 651 V 146 w(One)14 b(-)p 1050 651 V 100
+ w(OnePool)p 1353 651 V 1370 651 V 126 w(Only)h(-)p 1630
+ 651 V 100 w(OnlyOH)p 1929 651 V -152 717 V 239 717 V
+ 255 717 V 515 717 V 774 717 V 791 717 V 896 697 a(Pool)p
+ 1050 717 V 143 w(Run)g(\045)p 1353 717 V 1370 717 V 192
+ w(OH)p 1630 717 V 140 w(Run)g(\045)p 1929 717 V -150
+ 721 2081 4 v -152 787 4 67 v -100 767 a(164.gzip)p 239
+ 787 V 255 787 V 234 w(25.11)p 515 787 V 128 w(28.16)p
+ 774 787 V 791 787 V 146 w(28.44)p 1050 787 V 123 w(101.0\045)p
+ 1353 787 V 1370 787 V 146 w(28.17)p 1630 787 V 120 w(100.0\045)p
+ 1929 787 V -152 853 V -100 833 a(175.vpr)p 239 853 V
+ 255 853 V 257 w(10.54)p 515 853 V 128 w(10.88)p 774 853
+ V 791 853 V 146 w(10.86)p 1050 853 V 152 w(99.8\045)p
+ 1353 853 V 1370 853 V 146 w(10.87)p 1630 853 V 149 w(99.9\045)p
+ 1929 853 V -152 920 V -100 900 a(197.parser)o(-b)p 239
+ 920 V 255 920 V 145 w(12.59)p 515 920 V 128 w(12.42)p
+ 774 920 V 791 920 V 146 w(17.86)p 1050 920 V 123 w(142.7\045)p
+ 1353 920 V 1370 920 V 146 w(13.36)p 1630 920 V 120 w(106.7\045)p
+ 1929 920 V -152 986 V -100 966 a(252.eon)p 239 986 V
+ 255 986 V 279 w(1.15)p 515 986 V 158 w(0.86)p 774 986
+ V 791 986 V 174 w(0.85)p 1050 986 V 152 w(98.8\045)p
+ 1353 986 V 1370 986 V 175 w(0.88)p 1630 986 V 120 w(102.3\045)p
+ 1929 986 V -152 1053 V -100 1033 a(300.tw)o(olf)p 239
+ 1053 V 255 1053 V 213 w(20.26)p 515 1053 V 128 w(20.10)p
+ 774 1053 V 791 1053 V 146 w(19.98)p 1050 1053 V 152 w(99.4\045)p
+ 1353 1053 V 1370 1053 V 146 w(20.50)p 1630 1053 V 120
+ w(102.0\045)p 1929 1053 V -150 1056 2081 4 v -152 1122
+ 4 67 v -100 1102 a(anagram)p 239 1122 V 255 1122 V 265
+ w(3.46)p 515 1122 V 158 w(3.02)p 774 1122 V 791 1122
+ V 174 w(3.01)p 1050 1122 V 152 w(99.7\045)p 1353 1122
+ V 1370 1122 V 175 w(3.02)p 1630 1122 V 120 w(100.0\045)p
+ 1929 1122 V -152 1189 V -100 1169 a(bc)p 239 1189 V 255
+ 1189 V 410 w(1.71)p 515 1189 V 158 w(1.55)p 774 1189
+ V 791 1189 V 174 w(1.48)p 1050 1189 V 152 w(95.5\045)p
+ 1353 1189 V 1370 1189 V 175 w(1.71)p 1630 1189 V 120
+ w(110.3\045)p 1929 1189 V -152 1255 V -100 1235 a(ft)p
+ 239 1255 V 255 1255 V 401 w(63.74)p 515 1255 V 128 w(68.73)p
+ 774 1255 V 791 1255 V 146 w(66.08)p 1050 1255 V 152 w(96.1\045)p
+ 1353 1255 V 1370 1255 V 146 w(68.94)p 1630 1255 V 120
+ w(100.3\045)p 1929 1255 V -152 1322 V -100 1302 a(ks)p
+ 239 1322 V 255 1322 V 413 w(4.56)p 515 1322 V 158 w(4.43)p
+ 774 1322 V 791 1322 V 174 w(5.30)p 1050 1322 V 123 w(119.6\045)p
+ 1353 1322 V 1370 1322 V 175 w(4.39)p 1630 1322 V 149
+ w(99.1\045)p 1929 1322 V -152 1388 V -100 1368 a(yacr2)p
+ 239 1388 V 255 1388 V 336 w(3.76)p 515 1388 V 158 w(3.86)p
+ 774 1388 V 791 1388 V 174 w(3.94)p 1050 1388 V 123 w(102.0\045)p
+ 1353 1388 V 1370 1388 V 175 w(3.89)p 1630 1388 V 120
+ w(100.8\045)p 1929 1388 V -150 1391 2081 4 v -152 1458
+ 4 67 v -100 1438 a(analyzer)p 239 1458 V 255 1458 V 210
+ w(324.54)p 515 1458 V 99 w(312.25)p 774 1458 V 791 1458
+ V 116 w(314.69)p 1050 1458 V 124 w(100.8\045)p 1353 1458
+ V 1370 1458 V 117 w(313.69)p 1630 1458 V 120 w(100.5\045)p
+ 1929 1458 V -152 1524 V -100 1504 a(neural)p 239 1524
+ V 255 1524 V 291 w(88.82)p 515 1524 V 128 w(87.34)p 774
+ 1524 V 791 1524 V 146 w(87.35)p 1050 1524 V 123 w(100.0\045)p
+ 1353 1524 V 1370 1524 V 146 w(87.60)p 1630 1524 V 120
+ w(100.3\045)p 1929 1524 V -152 1591 V -100 1571 a(pcompress2)p
+ 239 1591 V 255 1591 V 158 w(38.61)p 515 1591 V 128 w(37.77)p
+ 774 1591 V 791 1591 V 146 w(37.44)p 1050 1591 V 152 w(99.1\045)p
+ 1353 1591 V 1370 1591 V 146 w(38.04)p 1630 1591 V 120
+ w(100.7\045)p 1929 1591 V -150 1594 2081 4 v -152 1660
+ 4 67 v -100 1640 a(llu-bench)p 239 1660 V 255 1660 V
+ 188 w(106.63)p 515 1660 V 99 w(106.50)p 774 1660 V 791
+ 1660 V 116 w(108.86)p 1050 1660 V 124 w(102.2\045)p 1353
+ 1660 V 1370 1660 V 117 w(106.76)p 1630 1660 V 120 w(100.2\045)p
+ 1929 1660 V -152 1727 V -100 1707 a(chomp)p 239 1727
+ V 255 1727 V 278 w(17.26)p 515 1727 V 128 w(16.71)p 774
+ 1727 V 791 1727 V 146 w(10.63)p 1050 1727 V 152 w(63.6\045)p
+ 1353 1727 V 1370 1727 V 146 w(16.82)p 1630 1727 V 120
+ w(100.6\045)p 1929 1727 V -152 1793 V -100 1773 a(fpgro)o(wth)p
+ 239 1793 V 255 1793 V 225 w(36.27)p 515 1793 V 128 w(36.62)p
+ 774 1793 V 791 1793 V 146 w(36.49)p 1050 1793 V 152 w(99.7\045)p
+ 1353 1793 V 1370 1793 V 146 w(39.30)p 1630 1793 V 120
+ w(107.3\045)p 1929 1793 V -152 1860 V -100 1840 a(espresso)p
+ 239 1860 V 255 1860 V 267 w(1.25)p 515 1860 V 158 w(1.22)p
+ 774 1860 V 791 1860 V 174 w(1.20)p 1050 1860 V 152 w(98.3\045)p
+ 1353 1860 V 1370 1860 V 175 w(1.26)p 1630 1860 V 120
+ w(103.3\045)p 1929 1860 V -152 1926 V -100 1906 a(po)o(vray31)p
+ 239 1926 V 255 1926 V 247 w(9.41)p 515 1926 V 158 w(9.79)p
+ 774 1926 V 791 1926 V 174 w(9.69)p 1050 1926 V 152 w(98.9\045)p
+ 1353 1926 V 1370 1926 V 175 w(9.81)p 1630 1926 V 120
+ w(100.2\045)p 1929 1926 V -150 1929 2081 4 v -152 1996
+ 4 67 v -100 1976 a(bh)p 239 1996 V 255 1996 V 378 w(14.02)p
+ 515 1996 V 158 w(9.33)p 774 1996 V 791 1996 V 174 w(9.32)p
+ 1050 1996 V 152 w(99.9\045)p 1353 1996 V 1370 1996 V
+ 175 w(9.35)p 1630 1996 V 120 w(100.2\045)p 1929 1996
+ V -152 2062 V -100 2042 a(bisort)p 239 2062 V 255 2062
+ V 304 w(12.59)p 515 2062 V 128 w(13.06)p 774 2062 V 791
+ 2062 V 146 w(13.14)p 1050 2062 V 123 w(100.6\045)p 1353
+ 2062 V 1370 2062 V 146 w(13.20)p 1630 2062 V 120 w(101.1\045)p
+ 1929 2062 V -152 2129 V -100 2109 a(em3d)p 239 2129 V
+ 255 2129 V 336 w(9.55)p 515 2129 V 158 w(6.80)p 774 2129
+ V 791 2129 V 174 w(6.76)p 1050 2129 V 152 w(99.4\045)p
+ 1353 2129 V 1370 2129 V 175 w(6.80)p 1630 2129 V 120
+ w(100.0\045)p 1929 2129 V -152 2195 V -100 2175 a(health)p
+ 239 2195 V 255 2195 V 294 w(14.11)p 515 2195 V 128 w(13.99)p
+ 774 2195 V 791 2195 V 146 w(13.39)p 1050 2195 V 152 w(95.7\045)p
+ 1353 2195 V 1370 2195 V 146 w(13.98)p 1630 2195 V 149
+ w(99.9\045)p 1929 2195 V -152 2261 V -100 2242 a(mst)p
+ 239 2261 V 255 2261 V 352 w(12.79)p 515 2261 V 128 w(13.14)p
+ 774 2261 V 791 2261 V 146 w(13.23)p 1050 2261 V 123 w(100.7\045)p
+ 1353 2261 V 1370 2261 V 146 w(13.34)p 1630 2261 V 120
+ w(101.5\045)p 1929 2261 V -152 2328 V -100 2308 a(perimeter)p
+ 239 2328 V 255 2328 V 243 w(3.02)p 515 2328 V 158 w(2.92)p
+ 774 2328 V 791 2328 V 174 w(2.58)p 1050 2328 V 152 w(88.4\045)p
+ 1353 2328 V 1370 2328 V 175 w(3.00)p 1630 2328 V 120
+ w(102.7\045)p 1929 2328 V -152 2394 V -100 2374 a(po)o(wer)p
+ 239 2394 V 255 2394 V 321 w(4.61)p 515 2394 V 158 w(2.91)p
+ 774 2394 V 791 2394 V 174 w(2.93)p 1050 2394 V 123 w(100.7\045)p
+ 1353 2394 V 1370 2394 V 175 w(2.92)p 1630 2394 V 120
+ w(100.3\045)p 1929 2394 V -152 2461 V -100 2441 a(treeadd)p
+ 239 2461 V 255 2461 V 265 w(17.48)p 515 2461 V 128 w(17.41)p
+ 774 2461 V 791 2461 V 146 w(17.29)p 1050 2461 V 152 w(99.3\045)p
+ 1353 2461 V 1370 2461 V 175 w(17.6)p 1630 2461 V 120
+ w(101.1\045)p 1929 2461 V -152 2527 V -100 2507 a(tsp)p
+ 239 2527 V 255 2527 V 397 w(7.17)p 515 2527 V 158 w(7.24)p
+ 774 2527 V 791 2527 V 174 w(7.08)p 1050 2527 V 152 w(97.8\045)p
+ 1353 2527 V 1370 2527 V 175 w(7.42)p 1630 2527 V 120
+ w(102.5\045)p 1929 2527 V -150 2530 2081 4 v -150 2575
+ 1993 3 v -105 2659 a Fn(T)-7 b(able)18 b(4.)h Fz(Baseline)g(\(NoP)-7
+ b(A\),)18 b(allocator)m(,)h(and)h(o)o(v)o(erhead)g(comparisons)-50
+ 2773 y(T)-6 b(able)35 b(4)h(sho)n(ws)g(data)g(to)f(characterize)h(the)g
+ (baseline)g(we)g(use)f(for)-150 2856 y(comparison)23
+ b(and)g(isolate)f(the)g(o)o(v)o(erheads)i(added)f(to)f(a)g(program)h
+ (by)g(pool)-150 2939 y(allocation.)f(The)g(GCC)f(column)i(is)e(the)h(e)
+ o(x)o(ecution)h(time)f(of)f(the)h(program)-150 3022 y(with)27
+ b(the)h(GCC)f(3.4.2)g(compiler)h(\(at)f(-O3\).)g(The)h(NoP)-7
+ b(A)27 b(column)h(is)f(the)-150 3105 y(program)j(compiled)f(with)g(LL)
+ -7 b(VM)28 b(using)h(e)o(xactly)h(the)f(same)g(sequence)-150
+ 3188 y(of)22 b(transformation)h(and)g(cleanup)h(passes)f(as)f(we)g(do)h
+ (for)f(pool)h(allocation)-150 3271 y(\(see)35 b(Section)f(8\),)h(b)o
+ (ut)f(with)g(the)h(pool)g(allocator)g(and)h(all)e(pool-based)-150
+ 3354 y(optimizations)24 b(disabled.)f(Using)h(NoP)-7
+ b(A)23 b(as)g(a)g(baseline)h(for)f(comparison)-150 3437
+ y(belo)n(w)34 b(isolates)f(the)g(speedup)i(of)e(the)g(pool)h(allocator)
+ g(transformation)-150 3520 y(and)26 b(its)f(optimizations)h(by)g(f)o
+ (actoring)h(out)f(the)f(impact)h(of)f(other)h(LL)-7 b(VM)-150
+ 3603 y(compiler)20 b(passes.)f(Comparing)i(GCC)e(to)g(NoP)-7
+ b(A)19 b(sho)n(ws)h(that)f(the)g(LL)-7 b(VM-)-150 3686
+ y(generated)25 b(code)h(is)d(no)i(w)o(orse)g(than)g(12\045)g(slo)n(wer)
+ f(than)h(GCC)f(code)h(and)-150 3769 y(is)h(sometimes)g(much)h(better)l
+ (.)f(This)g(indicates)g(that)g(the)h(code)g(quality)f(of)-150
+ 3852 y(NoP)-7 b(A)19 b(is)f(reasonable)i(to)f(use)g(a)g(baseline)h(for)
+ f(comparisons.)-50 3935 y(Another)27 b(k)o(e)o(y)h(question)h(is)d(ho)n
+ (w)i(the)f(dif)n(ference)h(between)g(the)g(allo-)-150
+ 4018 y(cator)f(in)f(our)h(pool)g(runtime)f(library)h(\(used)g(after)f
+ (pool)h(allocation\))g(and)-150 4101 y(the)19 b(standard)g(libc)g
+ (malloc)g(library)g(\(used)g(by)g(NoP)-7 b(A\))19 b(af)n(fect)f(the)h
+ (compar)o(-)-150 4184 y(isons.)24 b(This)f(is)h(signi\002cant)g
+ (because)h(our)f(pool)h(library)e(implementation)-150
+ 4267 y(is)i(currently)h(not)g(thread-safe)g(\(though)g(it)f(is)g
+ (otherwise)h(fully)f(general\),)-150 4350 y(and)f(this)g(or)g(other)g
+ (implementation)g(details)g(could)h(sk)o(e)n(w)f(the)g(results)f(in)
+ -150 4433 y(our)j(f)o(a)o(v)o(or)l(.)f(T)-6 b(o)26 b(measure)g(this,)f
+ (we)h(transformed)g(the)g(programs)h(to)f(allo-)-150
+ 4516 y(cate)f(out)g(of)g(a)f(single)h(global)h(pool)f(\(this)g
+ (transformation)g(does)h(not)f(add)-150 4599 y(pool)f(ar)o(guments)h
+ (or)e(other)h(o)o(v)o(erhead)h(to)e(the)h(program\),)g(ef)n(fecti)n(v)o
+ (ely)g(us-)-150 4682 y(ing)j(our)f(allocator)h(to)f(replace)h(malloc)f
+ (and)h(free)f(for)h(the)f(program)h(\(the)-150 4765 y(OnePool)f
+ (column\).)g(Comparing)g(with)g(NoP)-7 b(A)25 b(sho)n(ws)h(that)f(in)h
+ (all)f(b)o(ut)g(4)-150 4848 y(cases)j(\(197.parser)o(-b,)h(ks,)f(chomp)
+ h(and)f(perimter\),)g(OnePool)g(is)g(within)-150 4932
+ y(about)h(5\045)f(of)g(NoP)-7 b(A.)28 b(The)f(lar)o(ge)h(slo)n(wdo)n
+ (wn)h(for)f(parser)o(-b)g(occurs)h(be-)-150 5015 y(cause)f(we)f(use)g
+ (a)g(singly-link)o(ed)h(free)f(list)f(and)i(the)f(order)g(of)g(frees)g
+ (pre-)-150 5098 y(v)o(ents)f(coalescing)h(adjacent)g(free)f(blocks.)h
+ Fs(chomp)f Fz(is)g(much)h(f)o(aster)f(with)-150 5181
+ y(our)j(allocator)g(because)h(our)f(allocator)g(has)g(a)g(f)o(ast)g
+ (path)g(for)g(\002x)o(ed)f(size)-150 5264 y(allocations)23
+ b(\(to)f(e)o(xploit)h(type)g(homogeneous)i(pools\))e(and)h(nearly)f
+ (all)f(al-)-150 5347 y(locations)f(in)g Fs(chomp)g Fz(are)g
+ (\(multiples)f(of\))h(this)f(\002x)o(ed)h(size.)f(As)h(sho)n(wn)g(be-)
+ -150 5430 y(lo)n(w)-5 b(,)26 b(in)h(all)f(cases)h(e)o(xcept)g
+ (perimeter)m(,)f(an)o(y)i(such)f(adv)n(antages)h(from)f(our)2042
+ 66 y(runtime)21 b(library)f(\(e)n(v)o(en)i(chomp\))f(are)g(much)g
+ (smaller)g(than)g(the)f(aggre)o(gate)2042 149 y(performance)g(impro)o
+ (v)o(ements)g(due)g(to)e(pool)i(allocation.)2141 232
+ y(Finally)-5 b(,)29 b(the)g(OnlyOH)g(column)h(aims)f(to)h(isolate)f
+ (the)g(performance)2042 315 y(o)o(v)o(erheads)d(in)f(the)g(transformed)
+ g(code,)h(namely)-5 b(,)25 b(e)o(xtra)g(pool)g(ar)o(guments)2042
+ 399 y(on)f(functions)g(and)h(initializing)e(and)h(destro)o(ying)h(pool)
+ f(descriptors.)g(It)f(is)2042 482 y(computed)i(by)f(pool-allocating)h
+ (the)e(program,)h(b)o(ut)g(modifying)g(the)g(run-)2042
+ 565 y(time)k(library)g(so)h(that)g(poolalloc/free)g(simply)g(call)f
+ (malloc/free.)g(Com-)2042 648 y(paring)20 b(to)g(NoP)-7
+ b(A)20 b(sho)n(ws)h(that)f(this)f(o)o(v)o(erhead)j(is)d(ne)o(gligible)i
+ (or)f(quite)g(lo)n(w)2042 731 y(\(less)27 b(than)g(about)h(5\045\))g
+ (in)f(nearly)g(all)g(cases,)g(b)o(ut)g(is)g(slightly)g(higher)h(in)2042
+ 814 y(197.parser)o(-b)j(\(7\045\),)f(bc\(10\045\),)h(and)g(fpgro)n(wth)
+ g(\(7\045\).)f(The)g(pool)h(allo-)2042 897 y(cator)c(must)f(o)o(v)o
+ (ercome)i(this)f(o)o(v)o(erhead)h(to)f(pro)o(vide)g(a)g(net)g
+ (performance)2042 980 y(impro)o(v)o(ement.)2042 1128
+ y Fn(9.4)75 b(P)o(ool)18 b(Allocation)h(and)f(FullP)-6
+ b(A)17 b(Aggr)o(egate)k(P)o(erf)n(ormance)2042 1244 y
+ Fz(T)-6 b(able)39 b(5)h(sho)n(ws)g(the)f(program)i(running)f(time)f
+ (and)h(speedups)i(\(rela-)2042 1327 y(ti)n(v)o(e)29 b(to)f(NoP)-7
+ b(A\))29 b(for)f(automatic)i(pool)f(allocation)h(alone)f(\(BaseP)-7
+ b(A\))28 b(and)2042 1410 y(for)37 b(pool)g(allocation)h(with)f(all)f
+ (pool-based)j(optimizations)f(\(FullP)-7 b(A\).)2042
+ 1493 y(FullP)g(A)26 b(therefore)h(represents)h(the)f(aggre)o(gate)h
+ (performance)g(impact)f(of)2042 1576 y(this)f(w)o(ork.)h(As)f(the)g
+ (table)h(sho)n(ws,)g(FullP)-7 b(A)25 b(impro)o(v)o(es)i(the)g
+ (performance)2042 1659 y(of)h(man)o(y)i(programs)f(from)g(5\045)g(to)f
+ (20\045,)i(impro)o(v)o(es)f(analyzer)g(and)h(llu-)2042
+ 1742 y(bench)22 b(by)f(roughly)i(2x,)e(and)h(ft)e(and)i(chomp)g(more)f
+ (than)h(10x.)f(In)g(no)h(case)2042 1825 y(does)32 b(FullP)-7
+ b(A)30 b(hurt)i(the)f(performance)i(of)e(other)h(programs)g(relati)n(v)
+ o(e)f(to)2042 1908 y(NoP)-7 b(A.)15 b(Not)g(surprisingly)-5
+ b(,)16 b(there)g(is)f(no)h(ob)o(vious)h(correlation)f(between)g(the)
+ 2042 1991 y(speedups)21 b(obtained)h(and)e(the)g(number)h(of)f(static)g
+ (or)g(dynamic)h(pools.)f(The)2042 2074 y(causes)f(and)h(breakdo)n(wn)h
+ (of)e(these)g(impro)o(v)o(ements)h(are)f(studied)g(belo)n(w)-5
+ b(.)p 2129 2174 1804 4 v 2127 2241 4 67 v 2179 2221 a
+ Fw(Program)p 2518 2241 V 212 w(NoP)g(A)p 2778 2241 V
+ 2794 2241 V 116 w(BaseP)g(A)p 3076 2241 V 98 w(BaseP)g(A/)p
+ 3373 2241 V 3390 2241 V 115 w(FullP)g(A)p 3652 2241 V
+ 101 w(FullP)g(A/)p 3931 2241 V 2127 2307 V 2518 2307
+ V 2778 2307 V 2794 2307 V 3076 2307 V 3185 2287 a(NoP)g(A)p
+ 3373 2307 V 3390 2307 V 3652 2307 V 418 w(NoP)g(A)p 3931
+ 2307 V 2129 2311 1804 4 v 2127 2377 4 67 v 2179 2357
+ a(164.gzip)p 2518 2377 V 218 w(28.09)p 2778 2377 V 2794
+ 2377 V 167 w(27.93)p 3076 2377 V 196 w(0.99)p 3373 2377
+ V 3390 2377 V 147 w(28.40)p 3652 2377 V 177 w(1.01)p
+ 3931 2377 V 2127 2443 V 2179 2424 a(175.vpr)p 2518 2443
+ V 241 w(10.88)p 2778 2443 V 2794 2443 V 167 w(10.85)p
+ 3076 2443 V 196 w(1.00)p 3373 2443 V 3390 2443 V 147
+ w(10.30)p 3652 2443 V 177 w(0.94)p 3931 2443 V 2127 2510
+ V 2179 2490 a(197.parser)o(-b)p 2518 2510 V 129 w(12.52)p
+ 2778 2510 V 2794 2510 V 167 w(10.14)p 3076 2510 V 196
+ w(0.81)p 3373 2510 V 3390 2510 V 176 w(9.84)p 3652 2510
+ V 177 w(0.79)p 3931 2510 V 2127 2576 V 2179 2556 a(252.eon)p
+ 2518 2576 V 263 w(0.86)p 2778 2576 V 2794 2576 V 196
+ w(0.84)p 3076 2576 V 196 w(0.98)p 3373 2576 V 3390 2576
+ V 176 w(0.84)p 3652 2576 V 177 w(0.98)p 3931 2576 V 2127
+ 2643 V 2179 2623 a(300.tw)o(olf)p 2518 2643 V 197 w(20.10)p
+ 2778 2643 V 2794 2643 V 167 w(17.59)p 3076 2643 V 196
+ w(0.88)p 3373 2643 V 3390 2643 V 147 w(17.01)p 3652 2643
+ V 177 w(0.85)p 3931 2643 V 2129 2646 1804 4 v 2127 2712
+ 4 67 v 2179 2693 a(anagram)p 2518 2712 V 249 w(3.02)p
+ 2778 2712 V 2794 2712 V 196 w(3.00)p 3076 2712 V 196
+ w(0.99)p 3373 2712 V 3390 2712 V 176 w(3.00)p 3652 2712
+ V 177 w(0.99)p 3931 2712 V 2127 2779 V 2179 2759 a(bc)p
+ 2518 2779 V 394 w(1.55)p 2778 2779 V 2794 2779 V 196
+ w(1.26)p 3076 2779 V 196 w(0.81)p 3373 2779 V 3390 2779
+ V 176 w(1.24)p 3652 2779 V 177 w(0.80)p 3931 2779 V 2127
+ 2845 V 2179 2825 a(ft)p 2518 2845 V 385 w(68.73)p 2778
+ 2845 V 2794 2845 V 196 w(5.89)p 3076 2845 V 196 w(0.09)p
+ 3373 2845 V 3390 2845 V 176 w(4.98)p 3652 2845 V 177
+ w(0.07)p 3931 2845 V 2127 2912 V 2179 2892 a(ks)p 2518
+ 2912 V 397 w(4.43)p 2778 2912 V 2794 2912 V 196 w(4.38)p
+ 3076 2912 V 196 w(0.99)p 3373 2912 V 3390 2912 V 176
+ w(4.39)p 3652 2912 V 177 w(0.99)p 3931 2912 V 2127 2978
+ V 2179 2958 a(yacr2)p 2518 2978 V 320 w(3.89)p 2778 2978
+ V 2794 2978 V 196 w(3.89)p 3076 2978 V 196 w(1.01)p 3373
+ 2978 V 3390 2978 V 176 w(3.87)p 3652 2978 V 177 w(1.00)p
+ 3931 2978 V 2129 2981 1804 4 v 2127 3048 4 67 v 2179
+ 3028 a(analyzer)p 2518 3048 V 194 w(312.25)p 2778 3048
+ V 2794 3048 V 138 w(183.64)p 3076 3048 V 196 w(0.59)p
+ 3373 3048 V 3390 3048 V 118 w(130.53)p 3652 3048 V 177
+ w(0.42)p 3931 3048 V 2127 3114 V 2179 3094 a(neural)p
+ 2518 3114 V 275 w(87.60)p 2778 3114 V 2794 3114 V 167
+ w(87.33)p 3076 3114 V 196 w(1.00)p 3373 3114 V 3390 3114
+ V 147 w(87.15)p 3652 3114 V 177 w(1.00)p 3931 3114 V
+ 2127 3181 V 2179 3161 a(pcompress2)p 2518 3181 V 142
+ w(38.04)p 2778 3181 V 2794 3181 V 167 w(37.52)p 3076
+ 3181 V 196 w(0.99)p 3373 3181 V 3390 3181 V 147 w(37.68)p
+ 3652 3181 V 177 w(1.00)p 3931 3181 V 2129 3184 1804 4
+ v 2127 3250 4 67 v 2179 3231 a(llu-bench)p 2518 3250
+ V 172 w(106.50)p 2778 3250 V 2794 3250 V 138 w(108.37)p
+ 3076 3250 V 196 w(1.02)p 3373 3250 V 3390 3250 V 147
+ w(60.96)p 3652 3250 V 177 w(0.57)p 3931 3250 V 2127 3317
+ V 2179 3297 a(chomp)p 2518 3317 V 262 w(16.71)p 2778
+ 3317 V 2794 3317 V 196 w(1.71)p 3076 3317 V 196 w(0.10)p
+ 3373 3317 V 3390 3317 V 176 w(1.46)p 3652 3317 V 177
+ w(0.09)p 3931 3317 V 2127 3383 V 2179 3363 a(fpgro)o(wth)p
+ 2518 3383 V 209 w(36.62)p 2778 3383 V 2794 3383 V 167
+ w(31.13)p 3076 3383 V 196 w(0.85)p 3373 3383 V 3390 3383
+ V 147 w(30.42)p 3652 3383 V 177 w(0.83)p 3931 3383 V
+ 2127 3450 V 2179 3430 a(espresso)p 2518 3450 V 251 w(1.22)p
+ 2778 3450 V 2794 3450 V 196 w(1.15)p 3076 3450 V 196
+ w(0.94)p 3373 3450 V 3390 3450 V 176 w(1.09)p 3652 3450
+ V 177 w(0.89)p 3931 3450 V 2127 3516 V 2179 3496 a(po)o(vray31)p
+ 2518 3516 V 231 w(9.79)p 2778 3516 V 2794 3516 V 196
+ w(9.31)p 3076 3516 V 196 w(0.95)p 3373 3516 V 3390 3516
+ V 176 w(9.12)p 3652 3516 V 177 w(0.93)p 3931 3516 V 2129
+ 3519 1804 4 v 2127 3586 4 67 v 2179 3566 a(bh)p 2518
+ 3586 V 391 w(9.33)p 2778 3586 V 2794 3586 V 196 w(9.41)p
+ 3076 3586 V 196 w(1.01)p 3373 3586 V 3390 3586 V 176
+ w(8.88)p 3652 3586 V 177 w(0.95)p 3931 3586 V 2127 3652
+ V 2179 3632 a(bisort)p 2518 3652 V 288 w(13.06)p 2778
+ 3652 V 2794 3652 V 167 w(13.02)p 3076 3652 V 196 w(1.00)p
+ 3373 3652 V 3390 3652 V 147 w(11.04)p 3652 3652 V 177
+ w(0.85)p 3931 3652 V 2127 3719 V 2179 3699 a(em3d)p 2518
+ 3719 V 320 w(6.80)p 2778 3719 V 2794 3719 V 196 w(6.82)p
+ 3076 3719 V 196 w(1.00)p 3373 3719 V 3390 3719 V 176
+ w(6.62)p 3652 3719 V 177 w(0.97)p 3931 3719 V 2127 3785
+ V 2179 3765 a(health)p 2518 3785 V 278 w(13.99)p 2778
+ 3785 V 2794 3785 V 167 w(13.35)p 3076 3785 V 196 w(0.95)p
+ 3373 3785 V 3390 3785 V 147 w(12.02)p 3652 3785 V 177
+ w(0.86)p 3931 3785 V 2127 3852 V 2179 3832 a(mst)p 2518
+ 3852 V 336 w(13.14)p 2778 3852 V 2794 3852 V 167 w(11.67)p
+ 3076 3852 V 196 w(0.89)p 3373 3852 V 3390 3852 V 147
+ w(11.39)p 3652 3852 V 177 w(0.87)p 3931 3852 V 2127 3918
+ V 2179 3898 a(perimeter)p 2518 3918 V 227 w(2.92)p 2778
+ 3918 V 2794 3918 V 196 w(2.59)p 3076 3918 V 196 w(0.89)p
+ 3373 3918 V 3390 3918 V 176 w(2.45)p 3652 3918 V 177
+ w(0.84)p 3931 3918 V 2127 3984 V 2179 3964 a(po)o(wer)p
+ 2518 3984 V 305 w(2.91)p 2778 3984 V 2794 3984 V 196
+ w(2.91)p 3076 3984 V 196 w(1.00)p 3373 3984 V 3390 3984
+ V 176 w(2.91)p 3652 3984 V 177 w(1.00)p 3931 3984 V 2127
+ 4051 V 2179 4031 a(treeadd)p 2518 4051 V 249 w(17.41)p
+ 2778 4051 V 2794 4051 V 167 w(17.19)p 3076 4051 V 196
+ w(0.99)p 3373 4051 V 3390 4051 V 147 w(16.85)p 3652 4051
+ V 177 w(0.97)p 3931 4051 V 2127 4117 V 2179 4097 a(tsp)p
+ 2518 4117 V 381 w(7.24)p 2778 4117 V 2794 4117 V 196
+ w(7.03)p 3076 4117 V 196 w(0.97)p 3373 4117 V 3390 4117
+ V 176 w(5.95)p 3652 4117 V 177 w(0.82)p 3931 4117 V 2129
+ 4121 1804 4 v 2042 4156 1993 3 v 2180 4241 a Fn(T)e(able)19
+ b(5.)g Fz(Run)g(time)f(\(seconds\))i(and)g(runtime)f(ratios)g(vs.)g
+ (NoP)-7 b(A)2042 4400 y Fn(9.5)75 b(Locality)19 b(impr)o(o)o(v)o
+ (ements)2042 4516 y Fz(Figure)c(10)h(sho)n(ws)g(the)f(measured)h(cache)
+ g(miss)f(ratio)g(of)h(FullP)-7 b(A)14 b(compared)2042
+ 4599 y(to)23 b(NoP)-7 b(A,)23 b(for)g(each)h(program)g(that)f(sped)h
+ (up)g(at)f(least)g(5\045.)h(The)f(runtime)2042 4682 y(ratios)i(for)h
+ (these)g(programs)h(are)e(sho)n(wn)i(in)f(Figure)f(9)h(to)g(help)g
+ (correlate)2042 4765 y(the)g(impro)o(v)o(ements)i(in)f(cache)g(misses)g
+ (and)g(running)h(times.)d(The)i(\002gure)2042 4848 y(includes)20
+ b(data)h(for)e(the)h(number)h(of)f(accesses)h(that)f(miss)f(the)h
+ (Athlon')l(s)g(L1)2042 4932 y(D-cache,)29 b(the)h(number)g(of)g
+ (accesses)g(that)f(miss)g(the)h(L2)f(D-cache,)g(and)2042
+ 5015 y(the)g(number)h(of)f(DTLB)f(misses)h(as)g(measured)h(by)g(the)f
+ (Athlon)g(perfor)o(-)2042 5098 y(mance)h(monitoring)h(counters.)g(The)e
+ (graph)i(sho)n(ws)g(that)e(the)h(programs)2042 5181 y(with)16
+ b(the)h(lar)o(gest)g(speedups)h(generally)g(ha)o(v)o(e)f(dramatically)g
+ (reduced)h(miss)2042 5264 y(rates)k(at)g(e)n(v)o(ery)h(le)n(v)o(el)f
+ (of)g(the)g(cache)h(hierarchy)-5 b(.)23 b(The)f(bene\002ts)g(for)g
+ Fs(twolf)2042 5347 y Fz(and)c Fs(llu-bench)i Fz(are)e(primarily)g(at)f
+ (the)h(TLB)f(and)i(those)f(of)g Fs(ft)g Fz(are)g(much)2042
+ 5430 y(greater)k(at)f(the)h(cache.)h(F)o(or)e(all)h(other)g(cases,)g
+ (the)g(reductions)h(are)f(closely)p eop end
+ %%Page: 12 12
+ TeXDict begin 12 11 bop -47 1318 a @beginspecial 0 @llx
+ 0 @lly 792 @urx 612 @ury 1656 @rhi @setspecial
+ %%BeginDocument: Tables/BaseOptRuntimeRatios.ps
+ %!PS-Adobe-3.0
+ %%Title: (\376\377)
+ %%Version: 1 2
+ %%Creator: (\376\377)
+ %%CreationDate: (D:20050420090744)
+ %%For: (\376\377)
+ %%DocumentData: Clean7Bit
+ %%LanguageLevel: 2
+ %%BoundingBox: 0 0 792 612
+ %%Pages: 1
+ %%DocumentProcessColors: (atend)
+ %%DocumentSuppliedResources: (atend)
+ %%EndComments
+ %%BeginDefaults
+ %%EndDefaults
+ %%BeginProlog
+ %%EndProlog
+ %%BeginSetup
+ %%BeginResource: l2check
+ %%Copyright: Copyright 1993 Adobe Systems Incorporated. All Rights Reserved.
+ systemdict /languagelevel known
+ { systemdict /languagelevel get 1 eq }
+ { true }
+ ifelse
+ {
+ initgraphics /Helvetica findfont 18 scalefont setfont
+ 72 600 moveto (Error: Your printer driver needs to be configured) dup show
+ 72 580 moveto (for printing to a PostScript Language Level 1 printer.) dup show
+ exch = =
+ /Helvetica-Bold findfont 16 scalefont setfont
+ 72 520 moveto (Windows and Unix) show
+ /Times-Roman findfont 16 scalefont setfont
+ 72 500 moveto (Select ªLanguage Level 1º in the PostScript options section) show
+ 72 480 moveto (of the Acrobat print dialog.) show
+ /Helvetica-Bold findfont 16 scalefont setfont
+ 72 440 moveto (Macintosh) show
+ /Times-Roman findfont 16 scalefont setfont
+ 72 420 moveto (In the Chooser, select your printer driver.) show
+ 72 400 moveto (Then select your printer and click the Setup button.) show
+ 72 380 moveto (Follow any on-screen dialogs that may appear.) show
+ showpage
+ quit
+ }
+ if
+ %%EndResource
+ userdict /pdf_svglb currentglobal put true setglobal
+ %%BeginResource: file Pscript_CFF PSVER
+ userdict/ct_CffDict 6 dict put ct_CffDict begin/F0Subr{systemdict/internaldict
+ known{1183615869 systemdict/internaldict get exec/FlxProc known{save true}{
+ false}ifelse}{userdict/internaldict known not{userdict/internaldict{count 0 eq
+ {/internaldict errordict/invalidaccess get exec}if dup type/integertype ne{
+ /internaldict errordict/invalidaccess get exec}if dup 1183615869 eq{pop 0}{
+ /internaldict errordict/invalidaccess get exec}ifelse}dup 14 get 1 25 dict put
+ bind executeonly put}if 1183615869 userdict/internaldict get exec/FlxProc
+ known{save true}{false}ifelse}ifelse[systemdict/internaldict known not{100
+ dict/begin cvx/mtx matrix/def cvx}if systemdict/currentpacking known{
+ currentpacking true setpacking}if{systemdict/internaldict known{1183615869
+ systemdict/internaldict get exec dup/$FlxDict known not{dup dup length exch
+ maxlength eq{pop userdict dup/$FlxDict known not{100 dict begin/mtx matrix def
+ dup/$FlxDict currentdict put end}if}{100 dict begin/mtx matrix def dup
+ /$FlxDict currentdict put end}ifelse}if/$FlxDict get begin}if grestore/exdef{
+ exch def}def/dmin exch abs 100 div def/epX exdef/epY exdef/c4y2 exdef/c4x2
+ exdef/c4y1 exdef/c4x1 exdef/c4y0 exdef/c4x0 exdef/c3y2 exdef/c3x2 exdef/c3y1
+ exdef/c3x1 exdef/c3y0 exdef/c3x0 exdef/c1y2 exdef/c1x2 exdef/c2x2 c4x2 def
+ /c2y2 c4y2 def/yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def/PickCoords{{
+ c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2}{c3x0 c3y0 c3x1
+ c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2}ifelse/y5 exdef/x5 exdef/y4 exdef
+ /x4 exdef/y3 exdef/x3 exdef/y2 exdef/x2 exdef/y1 exdef/x1 exdef/y0 exdef/x0
+ exdef}def mtx currentmatrix pop mtx 0 get abs 1e-05 lt mtx 3 get abs 1e-05 lt
+ or{/flipXY -1 def}{mtx 1 get abs 1e-05 lt mtx 2 get abs 1e-05 lt or{/flipXY 1
+ def}{/flipXY 0 def}ifelse}ifelse/erosion 1 def systemdict/internaldict known{
+ 1183615869 systemdict/internaldict get exec dup/erosion known{/erosion get
+ /erosion exch def}{pop}ifelse}if yflag{flipXY 0 eq c3y2 c4y2 eq or{false
+ PickCoords}{/shrink c3y2 c4y2 eq{0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs}ifelse
+ def/yshrink{c4y2 sub shrink mul c4y2 add}def/c1y0 c3y0 yshrink def/c1y1 c3y1
+ yshrink def/c2y0 c4y0 yshrink def/c2y1 c4y1 yshrink def/c1x0 c3x0 def/c1x1
+ c3x1 def/c2x0 c4x0 def/c2x1 c4x1 def/dY 0 c3y2 c1y2 sub round dtransform
+ flipXY 1 eq{exch}if pop abs def dY dmin lt PickCoords y2 c1y2 sub abs .001 gt{
+ c1x2 c1y2 transform flipXY 1 eq{exch}if/cx exch def/cy exch def/dY 0 y2 c1y2
+ sub round dtransform flipXY 1 eq{exch}if pop def dY round dup 0 ne{/dY exdef}{
+ pop dY 0 lt{-1}{1}ifelse/dY exdef}ifelse/erode PaintType 2 ne erosion .5 ge
+ and def erode{/cy cy .5 sub def}if/ey cy dY add def/ey ey ceiling ey sub ey
+ floor add def erode{/ey ey .5 add def}if ey cx flipXY 1 eq{exch}if itransform
+ exch pop y2 sub/eShift exch def/y1 y1 eShift add def/y2 y2 eShift add def/y3
+ y3 eShift add def}if}ifelse}{flipXY 0 eq c3x2 c4x2 eq or{false PickCoords}{
+ /shrink c3x2 c4x2 eq{0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs}ifelse def/xshrink
+ {c4x2 sub shrink mul c4x2 add}def/c1x0 c3x0 xshrink def/c1x1 c3x1 xshrink def
+ /c2x0 c4x0 xshrink def/c2x1 c4x1 xshrink def/c1y0 c3y0 def/c1y1 c3y1 def/c2y0
+ c4y0 def/c2y1 c4y1 def/dX c3x2 c1x2 sub round 0 dtransform flipXY -1 eq{exch}
+ if pop abs def dX dmin lt PickCoords x2 c1x2 sub abs .001 gt{c1x2 c1y2
+ transform flipXY -1 eq{exch}if/cy exch def/cx exch def/dX x2 c1x2 sub round 0
+ dtransform flipXY -1 eq{exch}if pop def dX round dup 0 ne{/dX exdef}{pop dX 0
+ lt{-1}{1}ifelse/dX exdef}ifelse/erode PaintType 2 ne erosion .5 ge and def
+ erode{/cx cx .5 sub def}if/ex cx dX add def/ex ex ceiling ex sub ex floor add
+ def erode{/ex ex .5 add def}if ex cy flipXY -1 eq{exch}if itransform pop x2
+ sub/eShift exch def/x1 x1 eShift add def/x2 x2 eShift add def/x3 x3 eShift add
+ def}if}ifelse}ifelse x2 x5 eq y2 y5 eq or{x5 y5 lineto}{x0 y0 x1 y1 x2 y2
+ curveto x3 y3 x4 y4 x5 y5 curveto}ifelse epY epX}systemdict/currentpacking
+ known{exch setpacking}if/exec cvx/end cvx]cvx executeonly exch{pop true exch
+ restore}{systemdict/internaldict known not{1183615869 userdict/internaldict
+ get exec exch/FlxProc exch put true}{1183615869 systemdict/internaldict get
+ exec dup length exch maxlength eq{false}{1183615869 systemdict/internaldict
+ get exec exch/FlxProc exch put true}ifelse}ifelse}ifelse{systemdict
+ /internaldict known{1183615869 systemdict/internaldict get exec/FlxProc get
+ exec}{1183615869 userdict/internaldict get exec/FlxProc get exec}ifelse}if}
+ executeonly def/F1Subr{gsave currentpoint newpath moveto}bind def/F2Subr{
+ currentpoint grestore gsave currentpoint newpath moveto}bind def/HSSubr{
+ systemdict/internaldict known not{pop 3}{1183615869 systemdict/internaldict
+ get exec dup/startlock known{/startlock get exec}{dup/strtlck known{/strtlck
+ get exec}{pop 3}ifelse}ifelse}ifelse}bind def end
+ %%EndResource
+ 
+ userdict /pdf_svglb get setglobal
+ /currentpacking where{pop currentpacking true setpacking}if
+ %%BeginResource: procset pdfvars
+ %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
+ %%Version: 5.0 6
+ %%Title: definition of dictionary of variables used by PDF & PDFText procsets
+ userdict /PDF 160 dict put
+ userdict /PDFVars 89 dict dup begin put
+ /docSetupDone false def
+ /InitAll 0 def
+ /TermAll 0 def
+ /DocInitAll 0 def
+ /DocTermAll 0 def
+ /_pdfEncodings 2 array def
+ /_pdf_str1 1 string def
+ /_pdf_i 0 def
+ /_pdf_na 0 def
+ /_pdf_showproc 0 def
+ /_italMtx [1 0 .212557 1 0 0] def
+ /_italMtx_WMode1 [1 -.212557 0 1 0 0] def
+ /_italMtxType0 [1 0 .1062785 1 0 0] def
+ /_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
+ /_basefont 0 def
+ /_basefonto 0 def
+ /_pdf_oldCIDInit null def
+ /_pdf_FontDirectory 30 dict def
+ /_categories 10 dict def
+ /_sa? true def
+ /_ColorSep5044? false def
+ /nulldict 0 dict def
+ /_processColors 0 def
+ /overprintstack null def
+ /_defaulttransfer currenttransfer def
+ /_defaultflatness currentflat def
+ /_defaulthalftone null def
+ /_defaultcolortransfer null def
+ /_defaultblackgeneration null def
+ /_defaultundercolorremoval null def
+ /_defaultcolortransfer null def
+ PDF begin
+ [/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
+ /applyInterpFunc/applystitchFunc/domainClip/encodeInput
+ /initgs/int/limit/rangeClip
+ /defineRes/findRes/setSA/pl
+ %% to keep CoolType entries in GlyphDirProcs safe from collisions with Win PS driver
+ /? /! /| /: /+ /GetGlyphDirectory
+ /pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
+ /pdf_shfill /pdf_sethalftone
+ ] {null def} bind forall
+ end
+ end
+ %%EndResource
+ PDFVars begin PDF begin
+ %%BeginResource: procset pdfutil
+ %%Copyright: Copyright 1993-1999 Adobe Systems Incorporated. All Rights Reserved.
+ %%Version: 4.0 2
+ %%Title: Basic utilities used by other PDF procsets
+ /bd {bind def} bind def
+ /ld {load def} bd
+ /bld {
+ dup length dict begin
+ { null def } forall
+ bind
+ end
+ def
+ } bd
+ /dd { PDFVars 3 1 roll put } bd
+ /xdd { exch dd } bd
+ /Level2?
+ systemdict /languagelevel known
+ { systemdict /languagelevel get 2 ge } { false } ifelse
+ def
+ /Level1? Level2? not def
+ /Level3?
+ systemdict /languagelevel known
+ {systemdict /languagelevel get 3 eq } { false } ifelse
+ def
+ /getifknown {
+ 2 copy known { get true } { pop pop false } ifelse
+ } bd
+ /here {
+ currentdict exch getifknown
+ } bd
+ /isdefined? { where { pop true } { false } ifelse } bd
+ %%EndResource
+ %%BeginResource: procset pdf
+ %%Version: 5.0 7
+ %%Copyright: Copyright 1998-2001 Adobe Systems Incorporated. All Rights Reserved.
+ %%Title: General operators for PDF, common to all Language Levels.
+ /cm { matrix astore concat } bd
+ /d /setdash ld
+ /f /fill ld
+ /h /closepath ld
+ /i {dup 0 eq {pop _defaultflatness} if setflat} bd
+ /j /setlinejoin ld
+ /J /setlinecap ld
+ /M /setmiterlimit ld
+ /n /newpath ld
+ /S /stroke ld
+ /w /setlinewidth ld
+ /W /clip ld
+ /initgs {
+ 0 setgray
+ [] 0 d
+ 0 j
+ 0 J
+ 10 M
+ 1 w
+ false setSA
+ /_defaulttransfer load settransfer
+ 0 i
+ /RelativeColorimetric ri
+ newpath
+ } bd
+ /int {
+ dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
+ exch pop add exch pop
+ } bd
+ /limit {
+ dup 2 index le { exch } if pop
+ dup 2 index ge { exch } if pop
+ } bd
+ /domainClip {
+ Domain aload pop 3 2 roll
+ limit
+ } [/Domain] bld
+ /applyInterpFunc {
+ 0 1 DimOut 1 sub
+ {
+ dup C0 exch get exch
+ dup C1 exch get exch
+ 3 1 roll
+ 1 index sub
+ 3 index
+ N exp mul add
+ exch
+ currentdict /Range_lo known
+ {
+ dup Range_lo exch get exch
+ Range_hi exch get
+ 3 2 roll limit
+ }
+ {
+ pop
+ }
+ ifelse
+ exch
+ } for
+ pop
+ } [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
+ /encodeInput {
+ NumParts 1 sub
+ 0 1 2 index
+ {
+ dup Bounds exch get
+ 2 index gt
+ { exit }
+ { dup
+ 3 index eq
+ { exit }
+ { pop } ifelse
+ } ifelse
+ } for
+ 3 2 roll pop
+ dup Bounds exch get exch
+ dup 1 add Bounds exch get exch
+ 2 mul
+ dup Encode exch get exch
+ 1 add Encode exch get
+ int
+ } [/NumParts /Bounds /Encode] bld
+ /rangeClip {
+ exch dup Range_lo exch get
+ exch Range_hi exch get
+ 3 2 roll
+ limit
+ } [/Range_lo /Range_hi] bld
+ /applyStitchFunc {
+ Functions exch get exec
+ currentdict /Range_lo known {
+ 0 1 DimOut 1 sub {
+ DimOut 1 add -1 roll
+ rangeClip
+ } for
+ } if
+ } [/Functions /Range_lo /DimOut] bld
+ /pdf_flushfilters
+ {
+ aload length
+ { dup status
+ 1 index currentfile ne and
+ { dup flushfile closefile }
+ { pop }
+ ifelse
+ } repeat
+ } bd
+ /pdf_readstring
+ {
+ 1 index dup length 1 sub get
+ exch readstring pop
+ exch pdf_flushfilters
+ } bind def
+ /pdf_dictOp
+ {
+ 3 2 roll
+ 10 dict copy
+ begin
+ _Filters dup length 1 sub get def
+ currentdict exch exec
+ _Filters pdf_flushfilters
+ end
+ } [/_Filters] bld
+ /pdf_image {{image} /DataSource pdf_dictOp} bd
+ /pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
+ /pdf_shfill {{sh} /DataSource pdf_dictOp} bd
+ /pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
+ /pdf_maskedImage
+ {
+ 10 dict copy begin
+ /miDict currentdict def
+ /DataDict DataDict 10 dict copy def
+ DataDict begin
+ /DataSource
+ _Filters dup length 1 sub get
+ def
+ miDict image
+ _Filters pdf_flushfilters
+ end
+ end
+ } [/miDict /DataDict /_Filters] bld
+ /RadialShade {
+ 40 dict begin
+ /background exch def
+ /ext1 exch def
+ /ext0 exch def
+ /BBox exch def
+ /r2 exch def
+ /c2y exch def
+ /c2x exch def
+ /r1 exch def
+ /c1y exch def
+ /c1x exch def
+ /rampdict exch def
+ gsave
+ BBox length 0 gt {
+ newpath
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ newpath
+ } if
+ c1x c2x eq
+ {
+ c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
+ }
+ {
+ /slope c2y c1y sub c2x c1x sub div def
+ /theta slope 1 atan def
+ c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
+ c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
+ }
+ ifelse
+ gsave
+ clippath
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ { pathbbox } stopped
+ { 0 0 0 0 } if
+ /yMax exch def
+ /xMax exch def
+ /yMin exch def
+ /xMin exch def
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }
+ {
+ rampdict begin
+ 40 dict begin
+ background length 0 gt { background sssetbackground gsave clippath fill grestore } if
+ gsave
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
+ /c1y 0 def
+ /c1x 0 def
+ /c2x 0 def
+ ext0 {
+ 0 getrampcolor
+ c2y r2 add r1 lt
+ {
+ c1x c1y r1 360 0 arcn
+ xMin yMin moveto
+ xMax yMin lineto
+ xMax yMax lineto
+ xMin yMax lineto
+ xMin yMin lineto
+ eofill
+ }
+ {
+ c2y r1 add r2 le
+ {
+ c1x c1y r1 0 360 arc
+ fill
+ }
+ {
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r1 neg def
+ /p1y c1y def
+ /p2x r1 def
+ /p2y c1y def
+ p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
+ fill
+ }
+ {
+ /AA r2 r1 sub c2y div def
+ /theta AA 1 AA dup mul sub sqrt div 1 atan def
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y p1x SS1 div neg def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y p2x SS2 div neg def
+ r1 r2 gt
+ {
+ /L1maxX p1x yMin p1y sub SS1 div add def
+ /L2maxX p2x yMin p2y sub SS2 div add def
+ }
+ {
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }
+ ifelse
+ }
+ ifelse
+ } ifelse
+ } if
+ c1x c2x sub dup mul
+ c1y c2y sub dup mul
+ add 0.5 exp
+ 0 dtransform
+ dup mul exch dup mul add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt { exch } if pop
+ /hires exch def
+ hires mul
+ /numpix exch def
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ } if
+ } if
+ /xInc c2x c1x sub numsteps div def
+ /yInc c2y c1y sub numsteps div def
+ /rInc r2 r1 sub numsteps div def
+ /cx c1x def
+ /cy c1y def
+ /radius r1 def
+ newpath
+ xInc 0 eq yInc 0 eq rInc 0 eq and and
+ {
+ 0 getrampcolor
+ cx cy radius 0 360 arc
+ stroke
+ NumSamples 1 sub getrampcolor
+ cx cy radius 72 hires div add 0 360 arc
+ 0 setlinewidth
+ stroke
+ }
+ {
+ 0
+ numsteps
+ {
+ dup
+ subsampling { round cvi } if
+ getrampcolor
+ cx cy radius 0 360 arc
+ /cx cx xInc add def
+ /cy cy yInc add def
+ /radius radius rInc add def
+ cx cy radius 360 0 arcn
+ eofill
+ rampIndxInc add
+ }
+ repeat
+ pop
+ } ifelse
+ ext1 {
+ c2y r2 add r1 lt
+ {
+ c2x c2y r2 0 360 arc
+ fill
+ }
+ {
+ c2y r1 add r2 le
+ {
+ c2x c2y r2 360 0 arcn
+ xMin yMin moveto
+ xMax yMin lineto
+ xMax yMax lineto
+ xMin yMax lineto
+ xMin yMin lineto
+ eofill
+ }
+ {
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r2 neg def
+ /p1y c2y def
+ /p2x r2 def
+ /p2y c2y def
+ p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
+ fill
+ }
+ {
+ /AA r2 r1 sub c2y div def
+ /theta AA 1 AA dup mul sub sqrt div 1 atan def
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y c2y p1x SS1 div sub def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y c2y p2x SS2 div sub def
+ r1 r2 lt
+ {
+ /L1maxX p1x yMax p1y sub SS1 div add def
+ /L2maxX p2x yMax p2y sub SS2 div add def
+ }
+ {
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }
+ ifelse
+ }
+ ifelse
+ } ifelse
+ } if
+ grestore
+ grestore
+ end
+ end
+ end
+ } ifelse
+ } bd
+ /GenStrips {
+ 40 dict begin
+ /background exch def
+ /ext1 exch def
+ /ext0 exch def
+ /BBox exch def
+ /y2 exch def
+ /x2 exch def
+ /y1 exch def
+ /x1 exch def
+ /rampdict exch def
+ gsave
+ BBox length 0 gt {
+ newpath
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ newpath
+ } if
+ x1 x2 eq
+ {
+ y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
+ }
+ {
+ /slope y2 y1 sub x2 x1 sub div def
+ /theta slope 1 atan def
+ x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
+ x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
+ }
+ ifelse
+ gsave
+ clippath
+ x1 y1 translate
+ theta rotate
+ { pathbbox } stopped
+ { 0 0 0 0 } if
+ /yMax exch def
+ /xMax exch def
+ /yMin exch def
+ /xMin exch def
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }
+ {
+ rampdict begin
+ 20 dict begin
+ background length 0 gt { background sssetbackground gsave clippath fill grestore } if
+ gsave
+ x1 y1 translate
+ theta rotate
+ /xStart 0 def
+ /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
+ /ySpan yMax yMin sub def
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ xStart 0 transform
+ xEnd 0 transform
+ 3 -1 roll
+ sub dup mul
+ 3 1 roll
+ sub dup mul
+ add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt { exch } if pop
+ mul
+ /numpix exch def
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ } if
+ } if
+ ext0 {
+ 0 getrampcolor
+ xMin xStart lt
+ { xMin yMin xMin neg ySpan rectfill } if
+ } if
+ /xInc xEnd xStart sub numsteps div def
+ /x xStart def
+ 0
+ numsteps
+ {
+ dup
+ subsampling { round cvi } if
+ getrampcolor
+ x yMin xInc ySpan rectfill
+ /x x xInc add def
+ rampIndxInc add
+ }
+ repeat
+ pop
+ ext1 {
+ xMax xEnd gt
+ { xEnd yMin xMax xEnd sub ySpan rectfill } if
+ } if
+ grestore
+ grestore
+ end
+ end
+ end
+ } ifelse
+ } bd
+ %%EndResource
+ %%BeginResource: procset pdflev2
+ %%Version: 5.0 15
+ %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
+ %%LanguageLevel: 2
+ %%Title: PDF operators, with code specific for Level 2
+ /docinitialize {
+ PDF begin
+ /_defaulthalftone currenthalftone dd
+ /_defaultblackgeneration currentblackgeneration dd
+ /_defaultundercolorremoval currentundercolorremoval dd
+ /_defaultcolortransfer [currentcolortransfer] dd
+ /_defaulttransfer currenttransfer dd
+ end
+ PDFVars /docSetupDone true put
+ } bd
+ /initialize {
+ PDFVars /docSetupDone get {
+ _defaulthalftone sethalftone
+ /_defaultblackgeneration load setblackgeneration
+ /_defaultundercolorremoval load setundercolorremoval
+ _defaultcolortransfer aload pop setcolortransfer
+ } if
+ false setoverprint
+ } bd
+ /terminate { } bd
+ /c /curveto ld
+ /cs /setcolorspace ld
+ /l /lineto ld
+ /m /moveto ld
+ /q /gsave ld
+ /Q /grestore ld
+ /sc /setcolor ld
+ /setSA/setstrokeadjust ld
+ /re {
+ 4 2 roll m
+ 1 index 0 rlineto
+ 0 exch rlineto
+ neg 0 rlineto
+ h
+ } bd
+ /concattransferfuncs {
+ [ 3 1 roll /exec load exch /exec load ] cvx
+ } bd
+ /concatandsettransfer {
+ /_defaulttransfer load concattransferfuncs settransfer
+ } bd
+ /concatandsetcolortransfer {
+ _defaultcolortransfer aload pop
+ 8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
+ 6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
+ 4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
+ concattransferfuncs
+ setcolortransfer
+ } bd
+ /defineRes/defineresource ld
+ /findRes/findresource ld
+ currentglobal
+ true systemdict /setglobal get exec
+ [/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource /Image]
+ { /Generic /Category findresource dup length dict copy /Category defineresource pop }
+ forall
+ systemdict /setglobal get exec
+ /ri
+ {
+ /findcolorrendering isdefined?
+ {
+ mark exch
+ findcolorrendering
+ counttomark 2 eq
+ { type /booleantype eq
+ { dup type /nametype eq
+ { dup /ColorRendering resourcestatus
+ { pop pop
+ dup /DefaultColorRendering ne
+ {
+ /ColorRendering findresource
+ setcolorrendering
+ } if
+ } if
+ } if
+ } if
+ } if
+ cleartomark
+ }
+ { pop
+ } ifelse
+ } bd
+ /knownColorants? {
+ pop false
+ } bd
+ /getrampcolor {
+ /indx exch def
+ 0 1 NumComp 1 sub {
+ dup
+ Samples exch get
+ dup type /stringtype eq { indx get } if
+ exch
+ Scaling exch get aload pop
+ 3 1 roll
+ mul add
+ } for
+ setcolor
+ } bd
+ /sssetbackground { aload pop setcolor } bd
+ %%EndResource
+ %%BeginResource: procset pdftext
+ %%Version: 5.0 6
+ %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
+ %%Title: Text operators for PDF
+ PDF /PDFText 78 dict dup begin put
+ /docinitialize
+ {
+ /resourcestatus where {
+ pop
+ /CIDParams /ProcSet resourcestatus {
+ pop pop
+ false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
+ } if
+ } if
+ PDF begin
+ PDFText /_pdfDefineIdentity-H known
+ { PDFText /_pdfDefineIdentity-H get exec}
+ if
+ end
+ } bd
+ /initialize {
+ PDFText begin
+ } bd
+ /terminate { end } bd
+ Level2?
+ {
+ /_safeput
+ {
+ 3 -1 roll load 3 1 roll put
+ }
+ bd
+ }
+ {
+ /_safeput
+ {
+ 2 index load dup dup length exch maxlength ge
+ { dup length 5 add dict copy
+ 3 index xdd
+ }
+ { pop }
+ ifelse
+ 3 -1 roll load 3 1 roll put
+ }
+ bd
+ }
+ ifelse
+ /pdf_has_composefont? systemdict /composefont known def
+ /CopyFont {
+ {
+ 1 index /FID ne 2 index /UniqueID ne and
+ { def } { pop pop } ifelse
+ } forall
+ } bd
+ /Type0CopyFont
+ {
+ exch
+ dup length dict
+ begin
+ CopyFont
+ [
+ exch
+ FDepVector
+ {
+ dup /FontType get 0 eq
+ {
+ 1 index Type0CopyFont
+ /_pdfType0 exch definefont
+ }
+ {
+ /_pdfBaseFont exch
+ 2 index exec
+ }
+ ifelse
+ exch
+ }
+ forall
+ pop
+ ]
+ /FDepVector exch def
+ currentdict
+ end
+ } bd
+ Level2? {currentglobal true setglobal} if
+ /cHexEncoding
+ [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
+ /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
+ /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
+ /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
+ /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
+ /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
+ /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
+ /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
+ /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
+ /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
+ /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
+ /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
+ /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
+ /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
+ Level2? {setglobal} if
+ /modEnc {
+ /_enc xdd
+ /_icode 0 dd
+ counttomark 1 sub -1 0
+ {
+ index
+ dup type /nametype eq
+ {
+ _enc _icode 3 -1 roll put
+ _icode 1 add
+ }
+ if
+ /_icode xdd
+ } for
+ cleartomark
+ _enc
+ } bd
+ /trEnc {
+ /_enc xdd
+ 255 -1 0 {
+ exch dup -1 eq
+ { pop /.notdef }
+ { Encoding exch get }
+ ifelse
+ _enc 3 1 roll put
+ } for
+ pop
+ _enc
+ } bd
+ /TE {
+ /_i xdd
+ StandardEncoding 256 array copy modEnc
+ _pdfEncodings exch _i exch put
+ } bd
+ /TZ
+ {
+ /_usePDFEncoding xdd
+ findfont
+ dup length 6 add dict
+ begin
+ {
+ 1 index /FID ne { def } { pop pop } ifelse
+ } forall
+ /pdf_origFontName FontName def
+ /FontName exch def
+ currentdict /PaintType known
+ { PaintType 2 eq {/PaintType 0 def} if }
+ if
+ _usePDFEncoding 0 ge
+ {
+ /Encoding _pdfEncodings _usePDFEncoding get def
+ pop
+ }
+ {
+ _usePDFEncoding -1 eq
+ {
+ counttomark 0 eq
+ { pop }
+ {
+ Encoding 256 array copy
+ modEnc /Encoding exch def
+ }
+ ifelse
+ }
+ {
+ 256 array
+ trEnc /Encoding exch def
+ }
+ ifelse
+ }
+ ifelse
+ pdf_EuroProcSet pdf_origFontName known
+ {
+ pdf_origFontName pdf_AddEuroGlyphProc
+ } if
+ Level2?
+ {
+ currentdict /pdf_origFontName undef
+ } if
+ FontName currentdict
+ end
+ definefont pop
+ }
+ bd
+ Level2?
+ {
+ /TZG
+ {
+ currentglobal true setglobal
+ 2 index _pdfFontStatus
+ {
+ 2 index findfont
+ false setglobal
+ 3 index findfont
+ true setglobal
+ ne
+ {
+ 2 index findfont dup rcheck
+ {
+ dup length dict begin
+ {
+ 1 index /FID ne { def } { pop pop } ifelse
+ } forall
+ currentdict end
+ }
+ if
+ 3 index exch definefont pop
+ }
+ if
+ } if
+ setglobal
+ TZ
+ } bd
+ }
+ {
+ /TZG {TZ} bd
+ } ifelse
+ Level2?
+ {
+ currentglobal false setglobal
+ userdict /pdftext_data 5 dict put
+ pdftext_data
+ begin
+ /saveStacks
+ {
+ pdftext_data
+ begin
+ /vmmode currentglobal def
+ false setglobal
+ count array astore /os exch def
+ end
+ countdictstack array dictstack pdftext_data exch /ds exch put
+ cleardictstack pdftext_data /dscount countdictstack put
+ pdftext_data /vmmode get setglobal
+ } bind def
+ /restoreStacks
+ {
+ pdftext_data /vmmode currentglobal put false setglobal
+ clear cleardictstack
+ pdftext_data /ds get dup
+ pdftext_data /dscount get 1 2 index length 1 sub
+ { get begin dup } for
+ pop pop
+ pdftext_data /os get aload pop
+ pdftext_data /vmmode get setglobal
+ } bind def
+ /testForClonePrinterBug
+ {
+ currentglobal true setglobal
+ /undefinedCategory /Generic /Category findresource
+ dup length dict copy /Category defineresource pop
+ setglobal
+ pdftext_data /saveStacks get exec
+ pdftext_data /vmmode currentglobal put false setglobal
+ /undefined /undefinedCategory { resourcestatus } stopped
+ pdftext_data exch /bugFound exch put
+ pdftext_data /vmmode get setglobal
+ pdftext_data /restoreStacks get exec
+ pdftext_data /bugFound get
+ } bind def
+ end
+ setglobal
+ /pdf_resourcestatus
+ pdftext_data /testForClonePrinterBug get exec
+ {
+ {
+ pdftext_data /saveStacks get exec
+ pdftext_data /os get dup dup length 1 sub
+ dup 1 sub dup 0 lt { pop 0 } if
+ exch 1 exch { get exch dup } for
+ pop pop
+ { resourcestatus }
+ stopped
+ {
+ clear cleardictstack pdftext_data /restoreStacks get exec
+ { pop pop } stopped pop false
+ }
+ {
+ count array astore pdftext_data exch /results exch put
+ pdftext_data /restoreStacks get exec pop pop
+ pdftext_data /results get aload pop
+ }
+ ifelse
+ }
+ }
+ { { resourcestatus } }
+ ifelse
+ bd
+ }
+ if
+ Level2?
+ {
+ /_pdfUndefineResource
+ {
+ currentglobal 3 1 roll
+ _pdf_FontDirectory 2 index 2 copy known
+ {undef}
+ {pop pop}
+ ifelse
+ 1 index (pdf) exch _pdfConcatNames 1 index
+ 1 index 1 _pdfConcatNames 1 index
+ 5 index 1 _pdfConcatNames 1 index
+ 4
+ {
+ 2 copy pdf_resourcestatus
+ {
+ pop 2 lt
+ {2 copy findresource gcheck setglobal undefineresource}
+ {pop pop}
+ ifelse
+ }
+ { pop pop}
+ ifelse
+ } repeat
+ setglobal
+ } bd
+ }
+ {
+ /_pdfUndefineResource { pop pop} bd
+ }
+ ifelse
+ Level2?
+ {
+ /_pdfFontStatus
+ {
+ currentglobal exch
+ /Font pdf_resourcestatus
+ {pop pop true}
+ {false}
+ ifelse
+ exch setglobal
+ } bd
+ }
+ {
+ /_pdfFontStatusString 50 string def
+ _pdfFontStatusString 0 (fonts/) putinterval
+ /_pdfFontStatus
+ {
+ FontDirectory 1 index known
+ { pop true }
+ {
+ _pdfFontStatusString 6 42 getinterval
+ cvs length 6 add
+ _pdfFontStatusString exch 0 exch getinterval
+ { status } stopped
+ {pop false}
+ {
+ { pop pop pop pop true}
+ { false }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ }
+ ifelse
+ Level2?
+ {
+ /_pdfCIDFontStatus
+ {
+ /CIDFont /Category pdf_resourcestatus
+ {
+ pop pop
+ /CIDFont pdf_resourcestatus
+ {pop pop true}
+ {false}
+ ifelse
+ }
+ { pop false }
+ ifelse
+ } bd
+ }
+ if
+ /_pdfString100 100 string def
+ /_pdfComposeFontName
+ {
+ dup length 1 eq
+ {
+ 0 get
+ 1 index
+ type /nametype eq
+ {
+ _pdfString100 cvs
+ length dup dup _pdfString100 exch (-) putinterval
+ _pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
+ 2 index exch cvs length
+ add 1 add _pdfString100 exch 0 exch getinterval
+ exch pop
+ true
+ }
+ {
+ pop pop
+ false
+ }
+ ifelse
+ }
+ {
+ false
+ }
+ ifelse
+ dup {exch cvn exch} if
+ } bd
+ /_pdfConcatNames
+ {
+ exch
+ _pdfString100 cvs
+ length dup dup _pdfString100 exch (-) putinterval
+ _pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
+ 3 -1 roll exch cvs length
+ add 1 add _pdfString100 exch 0 exch getinterval
+ cvn
+ } bind def
+ /_pdfTextTempString 50 string def
+ /_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
+ /_pdf_CheckCIDSystemInfo
+ {
+ 1 index _pdfTextTempString cvs
+ (Identity) anchorsearch
+ {
+ pop pop pop pop true
+ }
+ {
+ false
+ _pdfRegOrderingArray
+ {
+ 2 index exch
+ anchorsearch
+ { pop pop pop true exit}
+ { pop }
+ ifelse
+ }
+ forall
+ exch pop
+ exch /CIDFont findresource
+ /CIDSystemInfo get
+ 3 -1 roll /CMap findresource
+ /CIDSystemInfo get
+ exch
+ 3 -1 roll
+ {
+ 2 copy
+ /Supplement get
+ exch
+ dup type /dicttype eq
+ {/Supplement get}
+ {pop 0 }
+ ifelse
+ ge
+ }
+ { true }
+ ifelse
+ {
+ dup /Registry get
+ 2 index /Registry get eq
+ {
+ /Ordering get
+ exch /Ordering get
+ dup type /arraytype eq
+ {
+ 1 index type /arraytype eq
+ {
+ true
+ 1 index length 1 sub -1 0
+ {
+ dup 2 index exch get exch 3 index exch get ne
+ { pop false exit}
+ if
+ } for
+ exch pop exch pop
+ }
+ { pop pop false }
+ ifelse
+ }
+ {
+ eq
+ }
+ ifelse
+ }
+ { pop pop false }
+ ifelse
+ }
+ { pop pop false }
+ ifelse
+ }
+ ifelse
+ } bind def
+ pdf_has_composefont?
+ {
+ /_pdfComposeFont
+ {
+ 2 copy _pdfComposeFontName not
+ {
+ 2 index
+ }
+ if
+ (pdf) exch _pdfConcatNames
+ dup _pdfFontStatus
+ { dup findfont 5 2 roll pop pop pop true}
+ {
+ 4 1 roll
+ 1 index /CMap pdf_resourcestatus
+ {
+ pop pop
+ true
+ }
+ {false}
+ ifelse
+ 1 index true exch
+ {
+ _pdfCIDFontStatus not
+ {pop false exit}
+ if
+ }
+ forall
+ and
+ {
+ 1 index 1 index 0 get _pdf_CheckCIDSystemInfo
+ {
+ 3 -1 roll pop
+ 2 index 3 1 roll
+ composefont true
+ }
+ {
+ pop pop exch pop false
+ }
+ ifelse
+ }
+ {
+ _pdfComposeFontName
+ {
+ dup _pdfFontStatus
+ {
+ exch pop
+ 1 index exch
+ findfont definefont true
+ }
+ {
+ pop exch pop
+ false
+ }
+ ifelse
+ }
+ {
+ exch pop
+ false
+ }
+ ifelse
+ }
+ ifelse
+ { true }
+ {
+ dup _pdfFontStatus
+ { dup findfont true }
+ { pop false }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ }
+ {
+ /_pdfComposeFont
+ {
+ _pdfComposeFontName not
+ {
+ dup
+ }
+ if
+ dup
+ _pdfFontStatus
+ {exch pop dup findfont true}
+ {
+ 1 index
+ dup type /nametype eq
+ {pop}
+ {cvn}
+ ifelse
+ eq
+ {pop false}
+ {
+ dup _pdfFontStatus
+ {dup findfont true}
+ {pop false}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ }
+ ifelse
+ /_pdfStyleDicts 4 dict dup begin
+ /Adobe-Japan1 4 dict dup begin
+ Level2?
+ {
+ /Serif
+ /HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
+ {/HeiseiMin-W3}
+ {
+ /HeiseiMin-W3 _pdfCIDFontStatus
+ {/HeiseiMin-W3}
+ {/Ryumin-Light}
+ ifelse
+ }
+ ifelse
+ def
+ /SansSerif
+ /HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
+ {/HeiseiKakuGo-W5}
+ {
+ /HeiseiKakuGo-W5 _pdfCIDFontStatus
+ {/HeiseiKakuGo-W5}
+ {/GothicBBB-Medium}
+ ifelse
+ }
+ ifelse
+ def
+ /HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
+ {/HeiseiMaruGo-W4}
+ {
+ /HeiseiMaruGo-W4 _pdfCIDFontStatus
+ {/HeiseiMaruGo-W4}
+ {
+ /Jun101-Light-RKSJ-H _pdfFontStatus
+ { /Jun101-Light }
+ { SansSerif }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ /RoundSansSerif exch def
+ /Default Serif def
+ }
+ {
+ /Serif /Ryumin-Light def
+ /SansSerif /GothicBBB-Medium def
+ {
+ (fonts/Jun101-Light-83pv-RKSJ-H) status
+ }stopped
+ {pop}{
+ { pop pop pop pop /Jun101-Light }
+ { SansSerif }
+ ifelse
+ /RoundSansSerif exch def
+ }ifelse
+ /Default Serif def
+ }
+ ifelse
+ end
+ def
+ /Adobe-Korea1 4 dict dup begin
+ /Serif /HYSMyeongJo-Medium def
+ /SansSerif /HYGoThic-Medium def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ /Adobe-GB1 4 dict dup begin
+ /Serif /STSong-Light def
+ /SansSerif /STHeiti-Regular def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ /Adobe-CNS1 4 dict dup begin
+ /Serif /MKai-Medium def
+ /SansSerif /MHei-Medium def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ end
+ def
+ /TZzero
+ {
+ /_wmode xdd
+ /_styleArr xdd
+ /_regOrdering xdd
+ 3 copy
+ _pdfComposeFont
+ {
+ 5 2 roll pop pop pop
+ }
+ {
+ [
+ 0 1 _styleArr length 1 sub
+ {
+ _styleArr exch get
+ _pdfStyleDicts _regOrdering 2 copy known
+ {
+ get
+ exch 2 copy known not
+ { pop /Default }
+ if
+ get
+ }
+ {
+ pop pop pop /Unknown
+ }
+ ifelse
+ }
+ for
+ ]
+ exch pop
+ 2 index 3 1 roll
+ _pdfComposeFont
+ {3 -1 roll pop}
+ {
+ findfont dup /FontName get exch
+ }
+ ifelse
+ }
+ ifelse
+ dup /WMode 2 copy known
+ { get _wmode ne }
+ { pop pop _wmode 1 eq}
+ ifelse
+ {
+ exch _wmode _pdfConcatNames
+ dup _pdfFontStatus
+ { exch pop dup findfont false}
+ { exch true }
+ ifelse
+ }
+ {
+ dup /FontType get 0 ne
+ }
+ ifelse
+ {
+ dup /FontType get 3 eq _wmode 1 eq and
+ {
+ _pdfVerticalRomanT3Font dup length 10 add dict copy
+ begin
+ /_basefont exch
+ dup length 3 add dict
+ begin
+ {1 index /FID ne {def}{pop pop} ifelse }
+ forall
+ /Encoding Encoding dup length array copy
+ dup 16#27 /quotesingle put
+ dup 16#60 /grave put
+ _regOrdering /Adobe-Japan1 eq
+ {dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
+ if
+ def
+ FontName
+ currentdict
+ end
+ definefont
+ def
+ /Encoding _basefont /Encoding get def
+ /_fauxfont true def
+ }
+ {
+ dup length 3 add dict
+ begin
+ {1 index /FID ne {def}{pop pop} ifelse }
+ forall
+ FontType 0 ne
+ {
+ /Encoding Encoding dup length array copy
+ dup 16#27 /quotesingle put
+ dup 16#60 /grave put
+ _regOrdering /Adobe-Japan1 eq
+ {dup 16#5c /yen put}
+ if
+ def
+ /_fauxfont true def
+ } if
+ } ifelse
+ /WMode _wmode def
+ dup dup /FontName exch def
+ currentdict
+ end
+ definefont pop
+ }
+ {
+ pop
+ }
+ ifelse
+ /_pdf_FontDirectory 3 1 roll _safeput
+ }
+ bd
+ Level2?
+ {
+ /Tf {
+ _pdf_FontDirectory 2 index 2 copy known
+ {get exch 3 -1 roll pop}
+ {pop pop}
+ ifelse
+ selectfont
+ } bd
+ }
+ {
+ /Tf {
+ _pdf_FontDirectory 2 index 2 copy known
+ {get exch 3 -1 roll pop}
+ {pop pop}
+ ifelse
+ exch findfont exch
+ dup type /arraytype eq
+ {makefont}
+ {scalefont}
+ ifelse
+ setfont
+ } bd
+ }
+ ifelse
+ /cshow where
+ {
+ pop /pdf_cshow /cshow load dd
+ /pdf_remove2 {pop pop} dd
+ }
+ {
+ /pdf_cshow {exch forall} dd
+ /pdf_remove2 {} dd
+ } ifelse
+ /pdf_xshow
+ {
+ /_pdf_na xdd
+ /_pdf_i 0 dd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ {
+ pdf_remove2
+ _pdf_str1 exch 0 exch put
+ _pdf_str1 /_pdf_showproc load exec
+ {_pdf_na _pdf_i get} stopped
+ { pop pop }
+ {
+ _pdf_x _pdf_y moveto
+ 0
+ rmoveto
+ }
+ ifelse
+ _pdf_i 1 add /_pdf_i xdd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ }
+ exch
+ pdf_cshow
+ } bd
+ /pdf_yshow
+ {
+ /_pdf_na xdd
+ /_pdf_i 0 dd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ {
+ pdf_remove2
+ _pdf_str1 exch 0 exch put
+ _pdf_str1 /_pdf_showproc load exec
+ {_pdf_na _pdf_i get} stopped
+ { pop pop }
+ {
+ _pdf_x _pdf_y moveto
+ 0 exch
+ rmoveto
+ }
+ ifelse
+ _pdf_i 1 add /_pdf_i xdd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ }
+ exch
+ pdf_cshow
+ } bd
+ /pdf_xyshow
+ {
+ /_pdf_na xdd
+ /_pdf_i 0 dd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ {
+ pdf_remove2
+ _pdf_str1 exch 0 exch put
+ _pdf_str1 /_pdf_showproc load exec
+ {_pdf_na _pdf_i get} stopped
+ { pop pop }
+ {
+ {_pdf_na _pdf_i 1 add get} stopped
+ { pop pop pop}
+ {
+ _pdf_x _pdf_y moveto
+ rmoveto
+ }
+ ifelse
+ }
+ ifelse
+ _pdf_i 2 add /_pdf_i xdd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ }
+ exch
+ pdf_cshow
+ } bd
+ /pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
+ /pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
+ /pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
+ Level2? _ColorSep5044? not and
+ {
+ /pdfxs {{xshow} stopped {pdfl1xs} if} bd
+ /pdfys {{yshow} stopped {pdfl1ys} if} bd
+ /pdfxys {{xyshow} stopped {pdfl1xys} if} bd
+ }
+ {
+ /pdfxs /pdfl1xs load dd
+ /pdfys /pdfl1ys load dd
+ /pdfxys /pdfl1xys load dd
+ } ifelse
+ /pdf_charpath {false charpath} bd
+ /pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
+ /pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
+ /pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
+ /pdf_strokepath
+ {
+ {
+ pdf_remove2
+ _pdf_str1 exch 0 exch put
+ _pdf_str1 false charpath
+ currentpoint S moveto
+ } bind
+ exch pdf_cshow
+ } bd
+ /pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
+ /pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
+ /pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
+ Level2? {currentglobal true setglobal} if
+ /d0/setcharwidth ld
+ /nND {{/.notdef} repeat} bd
+ /T3Defs {
+ /BuildChar
+ {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+ }
+ def
+ /BuildGlyph {
+ exch begin
+ GlyphProcs exch get exec
+ end
+ } def
+ /_pdfT3Font true def
+ } bd
+ /_pdfBoldRomanWidthProc
+ {
+ stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
+ 0 0
+ } bd
+ /_pdfType0WidthProc
+ {
+ dup stringwidth 0 0 moveto
+ 2 index true charpath pathbbox
+ 0 -1
+ 7 index 2 div .88
+ setcachedevice2
+ pop
+ 0 0
+ } bd
+ /_pdfType0WMode1WidthProc
+ {
+ dup stringwidth
+ pop 2 div neg -0.88
+ 2 copy
+ moveto
+ 0 -1
+ 5 -1 roll true charpath pathbbox
+ setcachedevice
+ } bd
+ /_pdfBoldBaseFont
+ 11 dict begin
+ /FontType 3 def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /Encoding cHexEncoding def
+ /_setwidthProc /_pdfBoldRomanWidthProc load def
+ /_bcstr1 1 string def
+ /BuildChar
+ {
+ exch begin
+ _basefont setfont
+ _bcstr1 dup 0 4 -1 roll put
+ dup
+ _setwidthProc
+ 3 copy
+ moveto
+ show
+ _basefonto setfont
+ moveto
+ show
+ end
+ }bd
+ currentdict
+ end
+ def
+ pdf_has_composefont?
+ {
+ /_pdfBoldBaseCIDFont
+ 11 dict begin
+ /CIDFontType 1 def
+ /CIDFontName /_pdfBoldBaseCIDFont def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /_setwidthProc /_pdfType0WidthProc load def
+ /_bcstr2 2 string def
+ /BuildGlyph
+ {
+ exch begin
+ _basefont setfont
+ _bcstr2 1 2 index 256 mod put
+ _bcstr2 0 3 -1 roll 256 idiv put
+ _bcstr2 dup _setwidthProc
+ 3 copy
+ moveto
+ show
+ _basefonto setfont
+ moveto
+ show
+ end
+ }bd
+ currentdict
+ end
+ def
+ /_pdfDefineIdentity-H
+ {
+ /Identity-H /CMap PDFText /pdf_resourcestatus get exec
+ {
+ pop pop
+ }
+ {
+ /CIDInit/ProcSet findresource begin 12 dict begin
+ begincmap
+ /CIDSystemInfo
+ 3 dict begin
+ /Registry (Adobe) def
+ /Ordering (Identity) def
+ /Supplement 0 def
+ currentdict
+ end
+ def
+ /CMapName /Identity-H def
+ /CMapVersion 1 def
+ /CMapType 1 def
+ 1 begincodespacerange
+ <0000> <ffff>
+ endcodespacerange
+ 1 begincidrange
+ <0000> <ffff> 0
+ endcidrange
+ endcmap
+ CMapName currentdict/CMap defineresource pop
+ end
+ end
+ } ifelse
+ } def
+ } if
+ /_pdfVerticalRomanT3Font
+ 10 dict begin
+ /FontType 3 def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /_bcstr1 1 string def
+ /BuildChar
+ {
+ exch begin
+ _basefont setfont
+ _bcstr1 dup 0 4 -1 roll put
+ dup
+ _pdfType0WidthProc
+ moveto
+ show
+ end
+ }bd
+ currentdict
+ end
+ def
+ Level2? {setglobal} if
+ /MakeBoldFont
+ {
+ dup /ct_SyntheticBold known
+ {
+ dup length 3 add dict begin
+ CopyFont
+ /ct_StrokeWidth .03 0 FontMatrix idtransform pop def
+ /ct_SyntheticBold true def
+ currentdict
+ end
+ definefont
+ }
+ {
+ dup dup length 3 add dict
+ begin
+ CopyFont
+ /PaintType 2 def
+ /StrokeWidth .03 0 FontMatrix idtransform pop def
+ /dummybold currentdict
+ end
+ definefont
+ dup /FontType get dup 9 ge exch 11 le and
+ {
+ _pdfBoldBaseCIDFont
+ dup length 3 add dict copy begin
+ dup /CIDSystemInfo get /CIDSystemInfo exch def
+ /_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
+ /_basefont exch def
+ /_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
+ /_basefonto exch def
+ currentdict
+ end
+ /CIDFont defineresource
+ }
+ {
+ _pdfBoldBaseFont
+ dup length 3 add dict copy begin
+ /_basefont exch def
+ /_basefonto exch def
+ currentdict
+ end
+ definefont
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ /MakeBold {
+ 1 index
+ _pdf_FontDirectory 2 index 2 copy known
+ {get}
+ {exch pop}
+ ifelse
+ findfont
+ dup
+ /FontType get 0 eq
+ {
+ dup /WMode known {dup /WMode get 1 eq }{false} ifelse
+ version length 4 ge
+ and
+ {version 0 4 getinterval cvi 2015 ge }
+ {true}
+ ifelse
+ {/_pdfType0WidthProc}
+ {/_pdfType0WMode1WidthProc}
+ ifelse
+ _pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
+ {MakeBoldFont} Type0CopyFont definefont
+ }
+ {
+ dup /_fauxfont known not 1 index /SubstMaster known not and
+ {
+ _pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
+ MakeBoldFont
+ }
+ {
+ 2 index 2 index eq
+ { exch pop }
+ {
+ dup length dict begin
+ CopyFont
+ currentdict
+ end
+ definefont
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ pop pop
+ dup /dummybold ne
+ {/_pdf_FontDirectory exch dup _safeput }
+ { pop }
+ ifelse
+ }bd
+ /MakeItalic {
+ _pdf_FontDirectory exch 2 copy known
+ {get}
+ {exch pop}
+ ifelse
+ dup findfont
+ dup /FontInfo 2 copy known
+ {
+ get
+ /ItalicAngle 2 copy known
+ {get 0 eq }
+ { pop pop true}
+ ifelse
+ }
+ { pop pop true}
+ ifelse
+ {
+ exch pop
+ dup /FontType get 0 eq Level2? not and
+ { dup /FMapType get 6 eq }
+ { false }
+ ifelse
+ {
+ dup /WMode 2 copy known
+ {
+ get 1 eq
+ { _italMtx_WMode1Type0 }
+ { _italMtxType0 }
+ ifelse
+ }
+ { pop pop _italMtxType0 }
+ ifelse
+ }
+ {
+ dup /WMode 2 copy known
+ {
+ get 1 eq
+ { _italMtx_WMode1 }
+ { _italMtx }
+ ifelse
+ }
+ { pop pop _italMtx }
+ ifelse
+ }
+ ifelse
+ makefont
+ dup /FontType get 42 eq Level2? not or
+ {
+ dup length dict begin
+ CopyFont
+ currentdict
+ end
+ }
+ if
+ 1 index exch
+ definefont pop
+ /_pdf_FontDirectory exch dup _safeput
+ }
+ {
+ pop
+ 2 copy ne
+ {
+ /_pdf_FontDirectory 3 1 roll _safeput
+ }
+ { pop pop }
+ ifelse
+ }
+ ifelse
+ }bd
+ /MakeBoldItalic {
+ /dummybold exch
+ MakeBold
+ /dummybold
+ MakeItalic
+ }bd
+ Level2?
+ {
+ /pdf_CopyDict
+ {1 index length add dict copy}
+ def
+ }
+ {
+ /pdf_CopyDict
+ {
+ 1 index length add dict
+ 1 index wcheck
+ { copy }
+ { begin
+ {def} forall
+ currentdict
+ end
+ }
+ ifelse
+ }
+ def
+ }
+ ifelse
+ /pdf_AddEuroGlyphProc
+ {
+ currentdict /CharStrings known
+ {
+ CharStrings /Euro known not
+ {
+ dup
+ /CharStrings
+ CharStrings 1 pdf_CopyDict
+ begin
+ /Euro pdf_EuroProcSet 4 -1 roll get def
+ currentdict
+ end
+ def
+ /pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
+ /pdf_PathOps /pdf_PathOps load def
+ /Symbol eq
+ {
+ /Encoding Encoding dup length array copy
+ dup 160 /Euro put def
+ }
+ if
+ }
+ { pop
+ }
+ ifelse
+ }
+ { pop
+ }
+ ifelse
+ }
+ def
+ Level2? {currentglobal true setglobal} if
+ /pdf_PathOps 4 dict dup begin
+ /m {moveto} def
+ /l {lineto} def
+ /c {curveto} def
+ /cp {closepath} def
+ end
+ def
+ /pdf_PSBuildGlyph
+ {
+ gsave
+ 8 -1 roll pop
+ 7 1 roll
+ currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
+ dup 9 1 roll
+ {
+ currentdict /StrokeWidth 2 copy known
+ {
+ get 2 div
+ 5 1 roll
+ 4 -1 roll 4 index sub
+ 4 1 roll
+ 3 -1 roll 4 index sub
+ 3 1 roll
+ exch 4 index add exch
+ 4 index add
+ 5 -1 roll pop
+ }
+ {
+ pop pop
+ }
+ ifelse
+ }
+ if
+ setcachedevice
+ pdf_PathOps begin
+ exec
+ end
+ {
+ currentdict /StrokeWidth 2 copy known
+ { get }
+ { pop pop 0 }
+ ifelse
+ setlinewidth stroke
+ }
+ {
+ fill
+ }
+ ifelse
+ grestore
+ } def
+ /pdf_EuroProcSet 13 dict def
+ pdf_EuroProcSet
+ begin
+ /Courier-Bold
+ {
+ 600 0 6 -12 585 612
+ {
+ 385 274 m
+ 180 274 l
+ 179 283 179 293 179 303 c
+ 179 310 179 316 180 323 c
+ 398 323 l
+ 423 404 l
+ 197 404 l
+ 219 477 273 520 357 520 c
+ 409 520 466 490 487 454 c
+ 487 389 l
+ 579 389 l
+ 579 612 l
+ 487 612 l
+ 487 560 l
+ 449 595 394 612 349 612 c
+ 222 612 130 529 98 404 c
+ 31 404 l
+ 6 323 l
+ 86 323 l
+ 86 304 l
+ 86 294 86 284 87 274 c
+ 31 274 l
+ 6 193 l
+ 99 193 l
+ 129 77 211 -12 359 -12 c
+ 398 -12 509 8 585 77 c
+ 529 145 l
+ 497 123 436 80 356 80 c
+ 285 80 227 122 198 193 c
+ 360 193 l
+ cp
+ 600 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Courier-BoldOblique /Courier-Bold load def
+ /Courier
+ {
+ 600 0 17 -12 578 584
+ {
+ 17 204 m
+ 97 204 l
+ 126 81 214 -12 361 -12 c
+ 440 -12 517 17 578 62 c
+ 554 109 l
+ 501 70 434 43 366 43 c
+ 266 43 184 101 154 204 c
+ 380 204 l
+ 400 259 l
+ 144 259 l
+ 144 270 143 281 143 292 c
+ 143 299 143 307 144 314 c
+ 418 314 l
+ 438 369 l
+ 153 369 l
+ 177 464 249 529 345 529 c
+ 415 529 484 503 522 463 c
+ 522 391 l
+ 576 391 l
+ 576 584 l
+ 522 584 l
+ 522 531 l
+ 473 566 420 584 348 584 c
+ 216 584 122 490 95 369 c
+ 37 369 l
+ 17 314 l
+ 87 314 l
+ 87 297 l
+ 87 284 88 272 89 259 c
+ 37 259 l
+ cp
+ 600 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Courier-Oblique /Courier load def
+ /Helvetica
+ {
+ 556 0 24 -19 541 703
+ {
+ 541 628 m
+ 510 669 442 703 354 703 c
+ 201 703 117 607 101 444 c
+ 50 444 l
+ 25 372 l
+ 97 372 l
+ 97 301 l
+ 49 301 l
+ 24 229 l
+ 103 229 l
+ 124 67 209 -19 350 -19 c
+ 435 -19 501 25 509 32 c
+ 509 131 l
+ 492 105 417 60 343 60 c
+ 267 60 204 127 197 229 c
+ 406 229 l
+ 430 301 l
+ 191 301 l
+ 191 372 l
+ 455 372 l
+ 479 444 l
+ 194 444 l
+ 201 531 245 624 348 624 c
+ 433 624 484 583 509 534 c
+ cp
+ 556 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Helvetica-Oblique /Helvetica load def
+ /Helvetica-Bold
+ {
+ 556 0 12 -19 563 710
+ {
+ 563 621 m
+ 537 659 463 710 363 710 c
+ 216 710 125 620 101 462 c
+ 51 462 l
+ 12 367 l
+ 92 367 l
+ 92 346 l
+ 92 337 93 328 93 319 c
+ 52 319 l
+ 12 224 l
+ 102 224 l
+ 131 58 228 -19 363 -19 c
+ 417 -19 471 -12 517 18 c
+ 517 146 l
+ 481 115 426 93 363 93 c
+ 283 93 254 166 246 224 c
+ 398 224 l
+ 438 319 l
+ 236 319 l
+ 236 367 l
+ 457 367 l
+ 497 462 l
+ 244 462 l
+ 259 552 298 598 363 598 c
+ 425 598 464 570 486 547 c
+ 507 526 513 517 517 509 c
+ cp
+ 556 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Helvetica-BoldOblique /Helvetica-Bold load def
+ /Symbol
+ {
+ 750 0 20 -12 714 685
+ {
+ 714 581 m
+ 650 645 560 685 465 685 c
+ 304 685 165 580 128 432 c
+ 50 432 l
+ 20 369 l
+ 116 369 l
+ 115 356 115 347 115 337 c
+ 115 328 115 319 116 306 c
+ 50 306 l
+ 20 243 l
+ 128 243 l
+ 165 97 300 -12 465 -12 c
+ 560 -12 635 25 685 65 c
+ 685 155 l
+ 633 91 551 51 465 51 c
+ 340 51 238 131 199 243 c
+ 555 243 l
+ 585 306 l
+ 184 306 l
+ 183 317 182 326 182 336 c
+ 182 346 183 356 184 369 c
+ 614 369 l 644 432 l
+ 199 432 l
+ 233 540 340 622 465 622 c
+ 555 622 636 580 685 520 c
+ cp
+ 750 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-Bold
+ {
+ 500 0 16 -14 478 700
+ {
+ 367 308 m
+ 224 308 l
+ 224 368 l
+ 375 368 l
+ 380 414 l
+ 225 414 l
+ 230 589 257 653 315 653 c
+ 402 653 431 521 444 457 c
+ 473 457 l
+ 473 698 l
+ 444 697 l
+ 441 679 437 662 418 662 c
+ 393 662 365 700 310 700 c
+ 211 700 97 597 73 414 c
+ 21 414 l
+ 16 368 l
+ 69 368 l
+ 69 359 68 350 68 341 c
+ 68 330 68 319 69 308 c
+ 21 308 l
+ 16 262 l
+ 73 262 l
+ 91 119 161 -14 301 -14 c
+ 380 -14 443 50 478 116 c
+ 448 136 l
+ 415 84 382 40 323 40 c
+ 262 40 231 77 225 262 c
+ 362 262 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-BoldItalic
+ {
+ 500 0 9 -20 542 686
+ {
+ 542 686 m
+ 518 686 l
+ 513 673 507 660 495 660 c
+ 475 660 457 683 384 683 c
+ 285 683 170 584 122 430 c
+ 58 430 l
+ 34 369 l
+ 105 369 l
+ 101 354 92 328 90 312 c
+ 34 312 l
+ 9 251 l
+ 86 251 l
+ 85 238 84 223 84 207 c
+ 84 112 117 -14 272 -14 c
+ 326 -14 349 9 381 9 c
+ 393 9 393 -10 394 -20 c
+ 420 -20 l
+ 461 148 l
+ 429 148 l
+ 416 109 362 15 292 15 c
+ 227 15 197 55 197 128 c
+ 197 162 204 203 216 251 c
+ 378 251 l
+ 402 312 l
+ 227 312 l
+ 229 325 236 356 241 369 c
+ 425 369 l
+ 450 430 l
+ 255 430 l
+ 257 435 264 458 274 488 c
+ 298 561 337 654 394 654 c
+ 437 654 484 621 484 530 c
+ 484 516 l
+ 516 516 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-Italic
+ {
+ 500 0 23 -10 595 692
+ {
+ 399 317 m
+ 196 317 l
+ 199 340 203 363 209 386 c
+ 429 386 l
+ 444 424 l
+ 219 424 l
+ 246 514 307 648 418 648 c
+ 448 648 471 638 492 616 c
+ 529 576 524 529 527 479 c
+ 549 475 l
+ 595 687 l
+ 570 687 l
+ 562 674 558 664 542 664 c
+ 518 664 474 692 423 692 c
+ 275 692 162 551 116 424 c
+ 67 424 l
+ 53 386 l
+ 104 386 l
+ 98 363 93 340 90 317 c
+ 37 317 l
+ 23 279 l
+ 86 279 l
+ 85 266 85 253 85 240 c
+ 85 118 137 -10 277 -10 c
+ 370 -10 436 58 488 128 c
+ 466 149 l
+ 424 101 375 48 307 48 c
+ 212 48 190 160 190 234 c
+ 190 249 191 264 192 279 c
+ 384 279 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-Roman
+ {
+ 500 0 10 -12 484 692
+ {
+ 347 298 m
+ 171 298 l
+ 170 310 170 322 170 335 c
+ 170 362 l
+ 362 362 l
+ 374 403 l
+ 172 403 l
+ 184 580 244 642 308 642 c
+ 380 642 434 574 457 457 c
+ 481 462 l
+ 474 691 l
+ 449 691 l
+ 433 670 429 657 410 657 c
+ 394 657 360 692 299 692 c
+ 204 692 94 604 73 403 c
+ 22 403 l
+ 10 362 l
+ 70 362 l
+ 69 352 69 341 69 330 c
+ 69 319 69 308 70 298 c
+ 22 298 l
+ 10 257 l
+ 73 257 l
+ 97 57 216 -12 295 -12 c
+ 364 -12 427 25 484 123 c
+ 458 142 l
+ 425 101 384 37 316 37 c
+ 256 37 189 84 173 257 c
+ 335 257 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ end
+ Level2? {setglobal} if
+ currentdict readonly pop end
+ %%EndResource
+ PDFText begin
+ [userdict /pdf_svglb currentglobal put true setglobal
+ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
+ /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
+ /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
+ /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
+ /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+ /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+ /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+ /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+ /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
+ /guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
+ /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
+ /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
+ /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
+ /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
+ /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
+ /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
+ /hungarumlaut/ogonek/caron
+ 0 TE
+ [1/dotlessi/caron 39/quotesingle 96/grave 
+ 127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
+ /dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
+ /bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
+ /quotedblright/bullet/endash/emdash/tilde/trademark/scaron
+ /guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
+ /currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
+ /guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
+ /twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
+ /onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
+ /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+ /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+ /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
+ /Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
+ /aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
+ /ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
+ /ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
+ /ucircumflex/udieresis/yacute/thorn/ydieresis
+ 1 TE
+ end
+ 
+ userdict /pdf_svglb get setglobal
+ currentdict readonly pop
+ end end
+ /currentpacking where {pop setpacking}if
+ PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
+ PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
+ PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
+ PDFVars begin PDF begin
+ PDFVars/DocInitAll get exec PDFVars/InitAll get exec
+ PDFVars/TermAll get exec end end
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%BeginPageSetup
+ userdict /pgsave save put
+ PDFVars begin PDF begin PDFVars/InitAll get exec
+ userdict begin
+ userdict /pdf_svglb currentglobal put true setglobal
+ %%BeginResource: font Arial-BoldMT
+ ct_CffDict begin
+ %!FontType1
+ 16 dict begin
+ /FontInfo 15 dict dup begin
+ /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated.  All Rights Reserved.Arial is a trademark of The Monotype Corporation. registered in the US Patent and Trademark Office and elsewhere.) def
+ /version (001.001) def
+ /FullName (Arial MT Bold) def
+ /FamilyName (Arial MT) def
+ /Weight (Bold) def
+ /ItalicAngle 0 def
+ /isFixedPitch false  def
+ /UnderlinePosition -100 def
+ /UnderlineThickness 50 def
+ end def
+ /FontName /Arial-BoldMT def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 0 /.notdef put
+  def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0 ] def
+ /FontBBox { -167 -250 1006 939 } def
+ /XUID [6 44341 ] def
+ /StrokeWidth 0 def
+ currentdict end
+ currentfile eexec A0B00ED5187D9C0F1ECDF51878C3AA5CAA3FFCA5020F48
+ 69FCFE28B419AB05B54FAF364D68E82805BE1C1765A19BEC4D29A426539E9449
+ 5BE860D6EEF29ED037F1F407E7FE48577F0B69E118A7C8737034DBBD04699FA2
+ 80A7C6E922784295ED8C74A3C79BEB5BC6F95B767A170D04BD8041F7BDA3426A
+ 0B38EEBC414A4A52B6E26531115CF035146099BDF3B8A00193EF9C63D5056C56
+ 27F34FF02A444A05338ECAEBA23251AC7E7B67DA94C2F71DFB3E6EBBF2B8CD64
+ C128D630515F608E6436F23A665C100FEB078798141BB5533A2BE422590BB1C5
+ 6D0F257E7C6438DB38F18E581BEDF1D3810B75C017FCEA8F9EAF3B486651B632
+ F2D1D16279E221FE73375419D0A086839CFAAECC1618C4E60207E167DD9AEDDC
+ 37E07006BA902F4A4531AE919B9048413BE1EF9D321A92DD52A1B9B85D11116C
+ 5DEDF1C2112BD4E7BD1754F72123471DF2FA90FE00256B54B0D7DB81E1035390
+ 4317D65A1B999795B9214ADD5CB2BD50C71B0C1C65DD95F7420FF93451281A99
+ B3403CD0905E899046B1D4EEC1339434B286D808782ED4CC6D04AE1C92F14D32
+ 73DD3E4C697AF30E029C876DC06033C5A55623074B84A6E5244237ADF6B563B4
+ EE13D3EFCE21281E3F54526F5F1E4A5BC6CBD568A3D82E17B552176D7D0FC581
+ 20F2549FB6A55AE982185B67D6962DBB1ECB64F77A2FBF7D597479E05AD8B833
+ 7B2A2747961C244F8D47CE7372A440D2FA986D2EB57A64721615F6BFCCA1F0BF
+ 2EDAD01479994BB51DC4EB7C590A90EE81A1F3E477D760E7C886EF03BF55124C
+ 0A00F228D50F4F869ED28BF35C094F39087571769F759BE1EE3598DD5B58C9D8
+ F85B744EF72FE601843D977E137AFCEF4E4E212035638E3E598B0EF2AE58E876
+ 6440B3C60438D7A0EC054648CD04EB0A8E9A793E4F7FC322525C8AE24C726691
+ 2A880F47C52FFC40B3974DF4D22C8B2BFC3ED011DD9B3FD11DEEAB8E04ACA611
+ 2723B29E0D04F63BDD5B0836CA33BAD1310235EE9F1D69A5202F4CD581B8F66D
+ F5C9C045D628F0899B7E4188D2B262C1623403446E40C8CA3163884FDBA560D8
+ A5449EDF3D6C52D1CAB8CBC763E39BAA68DDD188E021AB803EE3A6EE2EED2DD3
+ 3E16D7B4A6AB33E849F894DDEC6CEFF007273F6693A44103C76BFDF0BFE9C415
+ A3E69746FB35A20E885252D78F90692D0C7101FDE9E9EBB2953CD34F4D771E35
+ A692E77C2B9045619A2BC3C2C058FA85589E32A5F4FEDFC98E4FD378AE32CB89
+ 1A232210A3DA6F1266BA3BC55D748A864207064F4161EF8BDFBD9CCCBBCC1290
+ FA3551CB543E7F74A8D7889B0A88EA23AD4B2787D084813663A144F34D0870B8
+ 6FE2842D825DA8A6B33F9F886E82D3D4F39098AD8F9452474D3375FC9EC1255D
+ 017F13417A5EC4C91E2CB3796EB6D06F8499CA959785EEB01882D86D1A4AD689
+ D802AF92E181B6276C0F267BAB4EBCDBC9CD978D93346EDCA8D28EA961C02347
+ A9D9D531C73FEB745BA8BC37B94624E1E706D82B38CF26F434C596C821F445CD
+ A2CEDC3B10C63CC9CD2D506BCBE24C3E54B6E062298F094F6F2259271A2D8761
+ FC07930CC62082493640A41C7C10BE1C659753638AB0F2FC3D2C22B355BA186B
+ 93B8EAF547557DAB8EEE8AF3B86BE3651D7B1455334062D7E20402F2AAEE9BFB
+ 6080A9AABD2611E581B25AEFEB596B08ED24ABC715FAF69863088C659A4C8E1C
+ 996B38C78BAE579AE0D181AE39B4C9C18A3B9278A1FD02EA8302C833376FC171
+ BF9EAC985AAC026D472ED294051FE7C805714A13DB53938EB2501653B0404352
+ CE6118F10D5F8A49D69BA3EE59FDF7F7B1ED07C1236A606C5B4D41321762E046
+ 8019D9C64084A4C3DD4AEA4EB00D34EA00C643072CF5E44EA325EF80A9EEFD8F
+ 2C3C7E74EDE6A9AA0C191A2599B16FB09BF5EC8C9A2B1F17F6A1D8B598E311F7
+ 4D2E047E053FC5F86E2D1FB64E78770DFC12F37985CAA063509B80A0269DB7F4
+ 8D9B1DA6D24C3D27669B115EBE4CAF75EA2586724A9C1649F5C9F8D77776C904
+ B52548DB3482119439BD2E3FBFFD4D1C602171437A57A3675658F8A346883EC2
+ 0596DB9BB3B0F76AF1EC6A7BEEC44B39B76F24E427B15881D06F1DE0A499FF69
+ 5D2C8B60A0CF57473F8607559DBCDA5D7C1544649F4F67C963EFFFE39F1D5471
+ 7F303E886C54EA23DF62A172B5E75B1EDB98FC4ABB897E5E1DDCC5305BFF4E9F
+ C9BB5EFFC6F970A9D604231519A522606B3C9AA2AB17E6474EADA0B494A5439D
+ 0BD84093110E243CFFF77B68E57E70C5662BC7264D6CF6CF1DBB65712A311E8C
+ 2FDD3082AB7117A9802F46E8E6585673021AC210E8E821B7E5B8E63A6B68D78D
+ BE14692778BA472948C3DD2312BE3656382DB847E12F945DD6559FC8472F7466
+ B28DCF25F249F0AC849871950B631A72606B8A3974FC27C9056F8BB8C88FBE36
+ 4CE0E64AB23F1D8C10A435302124A6577FC6F4D13FA5B65F4C428FB9410EB583
+ D62B2562654F1262209B130E7D779BBF67DED0874158CEE3EC414E6AF78EA5B0
+ 51CF785BD7DF00AD450565245090EC55D5F03B0181413E02C73E851263AA425A
+ 1834E1E854BD004F1FC7E9C1E171D97129BCD9568F86AD51727BE077BF6AE2F1
+ 672DE2CE46411C7D22B19078DBEFC082A73C979905E01133CD633CA92595C6B0
+ DB688BB2DD5C8917D3BBCA94A994B84223AB4414B7B9CF19BDDD78FD215508EF
+ 4C1B52575493FFC1B0C00EDB5EA0719AB94DE49B507AE15BC0244B2A47474E6B
+ E5B846D3315425257B10868588EE49AE2E2A52EBDA205612E31EE015A95F9BDA
+ 494D5648F762997DAF12A512B3C43DF42729C0D21EA513151BA5DBE93F2A15CA
+ FFE20D77D30498782CA383EF952FF7B5EB19A2F0C5971D98CACDD7D8035D527E
+ 253BA55C2ABDC8E1778D882BC84E777A3B6051FF167FECA275B062BC67BAACC1
+ 118AF58B082E8E4BC6FC7A80913A55C547D1DBBE57CB153A879D8BC02E2632F7
+ 2061F11B252EEEC0B65853BFD0E6285439EA5A8A35B6C7E21A39ECACB39D0DC5
+ 1D84FCAB4526021F9865D2EF3A1E4869F19D2966684339CB5A40D7D73C392DE6
+ 29ADDF581649B180EFC6929ADA1958BD0AC8B17C88E364D9B908953FE60348C0
+ 4015C80A4222D9CB14E4D51FEDABD792EAB645CDF7CA65674327DD1987A89F86
+ 0B57095EE175B0F8B7EBA84D867FCA3DFEAEF38FE2769CE6751D17418D0368EA
+ 3327817A4CAF67D9F2AB7DA404E69C7FB35BC7BE7C1B429F64F687D4797CD398
+ 311D643B8C7E30D5EF3EAB2A990F4385C3B0AD5C44F34FA306CBF0E52E7CF164
+ 20FBD608DF9D2208029399E85EF137725748F95868AA280C6CA2D726687EFF7E
+ 1C26AA1D8A08D87BBAA3D222CFB9102DF9990841CCCBF7D717813FC43099FAA6
+ CF3A7FFF2BE6A869BDF92D8FEE4A89D16C9BD3ABEAA6E07B13CE597F12C95732
+ BB14C9A9A4902F27870FDBD4CF70EB37DB47C130564C18CB0A87AA09F7C5E045
+ FC0D0B8B7EDD1C3F6F0D4EC46831B1B0D1CAB2C6E0EAF49B59654F5BDEBA31E7
+ 4E35397A004996A281A44C802E1305E21C7EC9CF0F3E82BE805AFD4EC2F9FABD
+ E555A9EC58657D62E65A3A6AA610D87B89474EA2C0ABEB919B534D1F7177273B
+ BD0DBEBCE083BF67EAF2140F12FA6E48D8AB8ED2A874C821F66EB27DFF953865
+ B4148AC5B3540D6E0B5D8D42850DC20486AC50907007C82CFCAE6C85E6DEBFAE
+ 3B00861F75BC5D6F28412851C658EA9CB9015A9D8AECF427FF575BEC703FC583
+ 8525D86F7DA7FDA35C03DFED51BD629C5CE1F90A79B9E404BF94FEB843D5A564
+ A100624431DC55E2B7DA8D04C84F7278C4F55AE63B44714861FA24E7B9B359EB
+ 1879A9F3000A005918ACDFC0A8AC38997EDB24CA4DCFCF3019DF0F5558D95743
+ DFDEEB434C525765431A987AEA620CD5FB939B49D9BAC76D62BFDE83DF981673
+ 674DA67BCFFB68DBAAB3889F3EEC8D7CED342A27991473410AF46F55D950111E
+ 87FDE431201DC5077C2B7480B1F5CE0ED2E60AC63C22A5578C193931532B7820
+ E997333B8B6DF8ADC96C59C63164AD4911137BA379C92FF8905B40D6E8B22569
+ 6576BD0C42E3A7934BF67D11962B5962CA91232FB61CA3EA105A7F8BB6EBF604
+ 7CED87B27D056BFCA557B3D1213C1A807C0EC9D25A863EF4BC569F6467D837A5
+ E72EAC1BD6649D6E55B992F1282406631264D040EA8FA1A76DB77D5516557C74
+ D774F2704248B41143F81A0757ED477E1E693604F761BBC6A0A47D6C5E1BA8EF
+ 59BB3C4D6FC027490138F792DFFED59B1D8ACC964F845BAE1106728DBC1776A1
+ 89C2BE31C01BABA8EFC45B6E6CAD399638EFABF0D4B45052ADE173859AE3D6E6
+ 9E85BE3DAE09458781FC9C871C856C9E3B8C581318F700E27475E93A77D00025
+ AF26B9AE72B81122A56A57C8459DF38926ED208F8FDC4443BFF2BD2E8D589873
+ A947BE6AE8D501516D0A586EF0C39D13822325AF939C39B1D17CC2286FB8FA82
+ E045C283380D9D627AAD6B4D4AB800EF9BBC3AEE1398E0571B372B14F1EA15C7
+ 9148AA2DA402A72354D6C20093CC4EF4126C27727E0D5902665801E1D050B28F
+ 862A060841D463C69F64C60B1B169354CF07B1483ACAB968AD6ADDF317F9ACE3
+ 85A274A39B3466B667689F16F50FBCCE75BB8EA6666CC69F4E460D17CEB7AE5C
+ CE3DAA9FE2110CD355E02CAE06074F99DA950DFA65B536ABA9F1B852C4A2D961
+ 1A2564220ADA708E670541D32393F1071BC876281A33E5C9673E61EADD8B1680
+ F5E69E1351D9683B58C053909B02BA394243315350875B209F56DF54F4DE83AA
+ 3E8F7CC4BA8FD8280FD516EFAAAA2881DD9514F644B6E893207BD4026FFE2252
+ AF806254492FA55CE7D09F1B66243A72462B03D54350E6A55BC6F12EDE24149A
+ 18C6A45788C3BD3858E084155E4A15EEE56F48E6B019D2EB2D400B9117946949
+ 4CD70B9703B3CC04772447AD2B968B49A8F9B07A0EB1199D78283FC914982841
+ 36965AB09BE1E5CB7C7974667543AD854827B7333FC458D680A06C491CCD9E39
+ D1E745BA3577A7CEF63A909C04CD9DE56AB57DA35B9AE97284516ADDDE7B59A5
+ B5B55B5F7E49BA648900A7D511D3E7AC47693FE4DE21EB0FA6EF3AA35B980C22
+ BE7BB24D6D31BC9E9376E7801F6946B41DC629FF341172174997D9D8111EA72C
+ AF09A38923DF201A2A2851EC341AE8DE43AD52DF3001FF15AA6BFF95F2A84DF6
+ B521241BBB9D6010D09023312B54ACE4A0FCFDA9D8D21255A249A150C9E0A7D1
+ AD894B82F9798E5CB072BCBBDFC5B79086BBC1B91E5C610DEA0F32A3F7F7317F
+ 9E4BC64042C41113D9ABF187120A734CE563426B8E7AAECAF43F5228D026E5B1
+ 28DC8B6BC21264992D92F0AAF93018880FDDFDAAF7874A06B7D6412B9AF3BF1A
+ 6E58EF8E5C4283DD70BC40D0F0007E362424D629D9E1D877CA534E040A470071
+ 7285DAE114C95D0A7ECFA95CFC79A5CA35FD190906C2CA17AF02E07FD68958BA
+ E33ACFFDC2478E099386AF4F2ADD465B25530A62E959FAD1AAB96A6C69420021
+ 63B4EF8EB833C61701FC8A5DE37EEC42A1E574333ECC4DEFF71AE771B8344CD3
+ F19A4A10A9984260622D770087E6F2FD5714E2F620079BCFCD6C1A9F5DE21D20
+ AC45FC8C37A4DE50F88BCCE8569948E82B4CF6420CFBA7FDF1D95BD59A89845E
+ AAAC3C4CADAC48AB3ED5D37A6466CB1AC31C3C7182D421EA4CD7C2FE6D934098
+ B87F457A4F498352E9BA688DB0B06857BA2ACCAEBB85CC2FD71B6103BA00AD14
+ 55FF2FD9F53FACCF869337A7F2AB7B484F247160C6753DBFE587A1EB383B7C43
+ 5860D8C3702B44711794C8559C1B8B97EB73B5FABDAD1FACDDC79BE1EA48F39C
+ 6D1799FFD4CF7971B97A8222CDF027C7FD8F7B4ED8B474713FAE4529F87000B5
+ BCF5CA520D1450ECF367865D15856F4D127D8D98AEC55D464B96288068C0EE44
+ 918E7F7909FCE4100CA06C24326380EEB0F4EEEAD49CE2C72FE93FB7ED764CE0
+ 015039ED26935497A15583F6F0463A6CEC9323AFEB6D1722078FE036D56DE441
+ 8FF5D396F9C98E41838DF1846F7D02D75A1376AD7F88C843A5D0B0233461719B
+ 2C0C271E42CD5FF6A799F516E8906F109E707BEE6D71581FC76D349ACB242D0D
+ 5CD9FD6EF5ADB121F904848F3184A3C2CC0DECE579D3438D4CD7B173FC4FDFBD
+ FD604FD61421E039908475DA6BDB61AEACDA9C225119301A5CE0F5F783F9F1EF
+ E58882E7565C93AAE411CAE92BB2AFA127D45BD7F477480148CAED36B30F14DC
+ 7A69B3B88F13047DD20EA481A13EF25AA98F66FE6F10AEA03DF80A1FA34A9D04
+ 7E1CA9E37DDC0AC18978E8BCFF43DD81D0122A707C949C7ECA3EF598438B5679
+ 915CFE2A9576E66981B91F637E666809E90895DC06CC543DE2C3380A4ED2D05A
+ 821DA469044EFC5F12C1CFD5037903675A703ACF2C1B49029A63D2A0B43D044D
+ 584FE44866A328545370001670165FAA76C57B97035432AF3536F892D93E30AE
+ 6495E4A6AE9E1C16ED2F5AB3F2BF81DB48D70DFEF38F1DA3A468208C21572491
+ FCC4D92E17DFD95F365FE8D9D2D25B9C997E72DFCD2EF4B302ED428A9645298F
+ E20BB0EA75C189FB2E3E7A8E463FAF92AD214CC9263001F27758770CDAF007C8
+ BCC9A085320B1F88AF02A88F9FD0120DF5C4104C2049304E360A22781CC2C27E
+ 9B661C7345BC1E61C451AC4285DEF04B0CFD137588BC0411F60F51F1254BC78E
+ C599E5A5B937261AE3B612B8C2FD49DAA029DB24B3DFC510D708D97EF0AD2473
+ 27BFEF55BC3D6EE029014B3F88DE0E285B9378DD28CC2A8CA33BAB3E94EEDD69
+ D95309FBC1DD6CB786D5FA277531679E33F8347876997B80F8B76594D1607F30
+ 572EF1FF3361091EDAC28619803293FC40080F32B1DF166483FE6D81C94FB8BE
+ BA913D97C251909437780F2B403E33B0DA48497552FCF7BE786BFE9D2CCD5C24
+ F54A0D3865C70C07C999E5FA0B822B916966A68310F5C692662746B2EE862BF0
+ 5AF5F5EF1B1B6F741AAA581E9E1EF2916F1407B89C8E8C33BB5F48609E881761
+ 5F5600E7013043B5DC141B951D6FAEF604849E3964C13BFE016A704791911276
+ B0CCAF564B5CC6023A3334E69A02CA7BA64328B8F81C4C3FBCD779C763AA60EF
+ 6419FD6C0E416F5CE6A32096B737754F7DE6761CE028AD97CFDE2D16596CA20D
+ 5DE765F602758E4E635AC388CDB54E7E82D9516F2F8BD5059353F1A3BF030FBC
+ BCB1F18E76E9392B9340C2422C8DA7717F4EBE7112FD5BA7DD641C99DD65D6C8
+ 27C715B9433A54873B2FBAFCDFD786699E24A7E7DE78BF4286D5B143A296DFD8
+ F8619E732B7152DCD00441D192CE08167C53A3E70745C3BDDC3F5C692A001D02
+ F2E36ECB32939D61C7ADE4FE924F1F8DB67D08BCF492D2421FEE4C6687E5AC26
+ BF8A06A5CF79C5A5A627A14189110DB91E01A4F2D3D92F187918A6967713FBDE
+ 75022B551F8B999AD41A1F0F7FCF7C2E41F263B414CE924A7E88A47420E6911A
+ 27C971F333BFB47D7306BF74B44389F54BF9E51BE849F70DA288D16F7D091CA8
+ 10DDB815056B0F8AB66D45E58B1779CB79223D32475901C122A4E7067B8E54B9
+ 5A064CCB7808086CC0C8B7ACC66CEF056F3B4231E62D8D3A7C58929C3B25C40B
+ 427ACF3DE83F50D3C23236124642AA17C9299364BE276D3F2D58459A1E58B8C8
+ 7EAB08390A461317C33B41881B46089FE5A4ADFB24B052877CD2998C631B8B7C
+ 3AE7C239DF03BF51E93A3ECA6AFA98DA43E981700240CBF7F96B0F8BF9B03FE4
+ 54D3F7DAED9AD3992EDEF92F1ABB7261312DD935B4C625118B544B2DC234EF5B
+ 084799116232B24042D53A82FB4E1387936D290A8B9B150C12BC5529C8373203
+ D4A6F1B88A2A0D7B6497099B9F63D44AB78B79420D165937DD644B688F9066B1
+ D2F5D024FA7F1E082B9C9A90CA1C9E296944FF0270E23F7BC52D9FF158A03FF9
+ 03A3D44A8919E8DB14BF1A3BD54895AF449DF8FD361443B7FAA9A11A89BEA2E6
+ E99DA8C620B7AC082CEAB7ABD1C2FCB792BC1CF8BB98393367AD4939D59465D3
+ B140413246EF6B5505E9843696B125DAB1E0D9E8DD23DB8DF4DCE3CB0B256775
+ 45CC73D17E88E7B3A6C42986CE55C0722CAEB188B5E476A95112B4FC9B6BB35F
+ 8E56D5AE441CFB03288A291B9A5A56F78A4226FBF2B466575DEBCA6B7AA6210A
+ C23A3AD2DD7714D4A5995AD41AA3B5A6BECE076034C1991C8BFFBDEC29ECAD37
+ F09086AF0811A92A60CC8E5EE2984301B5C7ECEBE3EBACE33059468311BBA691
+ F8F4BA8CEDEFC000E020ED302DA02E2B46D9527E12374C8C710095C21C82D221
+ 3059C20A1A6028D9426EA6CFEBD90DFF04FE8F942E68FFF01DE50B16234BAC4F
+ 2AFC733E1C844FC0FC37E8E92309D1EE60EEB16B13CFE61D21302021C8301BAD
+ 2D30BA2DF2BCE16453A98FF3D1D42A84CE81A5EA371EF62CCF054D086C5D672F
+ 93694B89DF5EBA809BFD56E492EEEF6DDD784EA205098828AA904773A19C2E22
+ 26D660F6810969C3A142E9313B4F8325AE00845C048F5A68A682B4DAB655AD8C
+ 03F118107FB88E5D4BA332568003FBFF144D4EFD2142ECEC29F035F6BB37F240
+ E2A323387BFB791D0F953F26B89CBA5C86D969D88C34F7C961540FE3B5D87E2E
+ 680CDE28EFB7C31ECB32817E6E7376101673B373D11BC381527158ABCAAB1235
+ 7302EA2713C2AB89B7985E8685F4EF1074CA31D19E4F7AFF01CEB5657C790EA1
+ 1595BB85EC158BBB0B52F01E2E68533B6C51DB791A41BE54E1E5002B0A8A7B16
+ 483736867BF9295D6F5B1C067CA82BA1D5765DD8F2441780C82F83B12C2B12AC
+ AC5CABC89F17BD100299E9DDA79F0172F15783FF9433095FD3AEF9921AF4B290
+ AD5EF82C25D606F8E1C57440B4786D662F61CCCFCD47129B64304543279F4ED8
+ C623724788CB12FD9E8E1F11A16DCC2133544F0E4FD1061D3D39B4D1566B3490
+ 21DFF979CB2A08A75B65E37685CEA98C02C3560F72AA308CD76C35E1E9516F3F
+ 91415E9C6D123E5DF16BAD3A9FA6082106925AEE211DF828574D627B4BBC8B20
+ 6943F2C13DF109A7D23F3F181F80C63666A25310FD3BBCC792CE84B9E8BBBA0B
+ 67335016D177930B85A4356ED5EA80E154C5B255B69DFC91F5984EF1749A0057
+ 93B1C7645BB87CA694178065B77143C701213746B83450F8F6AC91A0CA5A0B5E
+ C4D0CD25F518A674343ABCE8013135189C3F07DB93918F23D168A7704004D73A
+ 738395C255640C7AB99E0E184B4B4917F2FED7844F70082C9D202EF7544BCB1A
+ E841F633B999C3FCEF7B4FEFF1D5398C883BA8CA43CB4681DFB11CEA1C31D97C
+ 7C6184076CB38E076A5D4DC22AD1B84534A66C7E7BE7F2A0B7445FB2AC022E98
+ 34F7854C98BC80CD937778FA01AADD72A8102E63A41E837BDB9CFAC77EB63F24
+ BF2D7CECA59709A4AE2EB5D30CD2EA860DC28B288F01E2B71926DF89A7AFBA3C
+ DA19B30617CD594F1DBA57892A1D993FD9E63884D08FE488409FA3511E4E9749
+ C1F2BE3590B6589B3B9B3E1159DC8D9BA97EDAE65FF0A0435654A61CAC628F1A
+ FF8B3794A013DA5D82B8520117A7412D4143FF9037E6BBA1191DA45C4542A5D8
+ 881C313D13C377E636C814210F6D97124BC5BCDD13670191D7B43E03AF553AD7
+ CA125308AC66E3687325EE5D5C9C11E4042B3B4CB43D8F635302CCBF7407AF0E
+ 9C87BCAF146A7AF48A2CE534ACD3119D04351E59B64594FCFAB7C76417215F37
+ AFD22CCA4C0F4A98644366F86C9CF618531ED747C95AD237C516CE8FEFCE381C
+ 0E3A3D0B439C070BD0555B1415DF13DDADD6C836E1472EB1C1118FEDA9C1C583
+ E06769BC993201AB1E132E13D0FB98E9621078AD082F63CE00C12F4B18AE585E
+ 454805896CDADF5492180BCB7E38DEC944C42A4DCA5C5D5FA69277E40166269C
+ D60335391712FED3F5D772742BD1BFF1FAA95F398750E4EC9A8DB9FEAFC74726
+ 0B13D09B90D2424207903C456557BD6AEC9D89A08BF58FB60A18702D7CC2DFCE
+ 1ECFF113A68B68E7358A8F31AFAA04BA99488FCA4A8231929C710125D6DD1F3F
+ 44F504CF999EBF7D57FFFF39587FA052A5A084272A53EAB0B2F859BF91F65ACD
+ 9C748EEEB2235038F774669EB80DFC8D59B1696A99CC84FF07EBE52DD234D7FA
+ D04F431B2F97D8C446278A899E4F9C012AA31A95CF993F1980BBED045049E316
+ 7EAD37C04CF86D3F12D0936944761CC01EE16E9B3018C715AE7C6701AA7F8150
+ A86F293EF30EE68FD175E099CDA37DADAD32C0B97D173F49C5C9FD5D46187BC7
+ 64D8BE8FC92A289203CAE007960EA02C61122191A89990484F74AD3A883CB135
+ DE3A7F9093DC8AF2C8B4EF83CA995064BD13CE56995E56F645A1B9CEC7F93795
+ 31B0F846359EF21BD8D20EEBED699890697CE3802978C80A5720E58A9D72AA7A
+ 6D283B3ADC5C5CD4F682E8BF13469BE319A802B17F65E5195038C990BB8D0B9E
+ 2BAFC8A2E1A5F477F2D5B9D187FDFFEF8E75249EC8D688B8A6FB40D2D0FDFAC3
+ B937ABE9817CB4E611F8A128EB09FDD0D8584391A47F440F330D0BF08CAE2C90
+ E7ADB27D34852C8FB0BE664E0F4FCF6078B458B7EAFE7746EA801C5F374D0B67
+ A984851CDAC1CBCD55676059EC8720B6A4BBCCE5D5C5805EBBE3EC8DB03D50CF
+ 35BF3BEB41B39C75FB970687F1C0FA3F179CBAFC7816D4A1CC2458699BC42281
+ 4A2D4448D032FB9C4F0F7277B243D03C6EE3DF8AE2D3D4353B28BF319E180D2D
+ 5E181C9AFB5C9F21BF4C0B5489FE5DCF02CB3C7C6F93D7D9C65622A32457ABD0
+ 3337A7B94BB606FA84222FB2D3C17267D71D172D99E13391E279D62F35A6AD67
+ 551AC747427AF2BFADC5ADF846613B189D9A5A1EC1AC2A1C0DCBD47576404B7A
+ ABEF094CD4858585C8ED8A343553175596AA3809EF8594F5CCDA6626D9A59D07
+ 98622B580D1C2D7B0DAE199EDCED7664646C97C1D701A4EB1AD9D8E524FFC216
+ 57EEABC7598F50E42E03D2F4AC74031956C4A56FD1CD6BF84F98E3B729FB7E26
+ 29A945C4AA5544E0E27EA4AAC207F4D551517647959496ECCC70D167A3C3DFD3
+ F87BEDEA0B3C780960C4560F4B0043B5DEC279AC41633F560EA60839898120E0
+ AD9C3B9B931D38A73B2A03A5467033AD048CD88CAC1225B59F526C1E396EB67E
+ 70EF592D905FDED5C50E52D813A36794FB519F68E457615377F2491A186E42C1
+ 28C0EF3DC6435833597AD2685398776914821FF0A6643276D8697D5B0461E924
+ 6E5AE87EEC95E6D4CC5F3C6878C25F029F50CAC4532161723816BFF6A2A13F1C
+ 3E60DD883E84D2FB1C8EDD09DBFEA0BC4F95C3C1DEDF10A3FA212980263456A6
+ BC708E401600375D1349D53B1DB3F4CF342416C8BD3FC9E95A40CDF49FAE3944
+ FCF12D90B3E7173C6FE81693B533757BD3AF60124A6645ECCA5CA1528FEF57DD
+ 1144F34FE7A90C243028B7346A95E7859D81902513F3B24A4B3927EC123BC37C
+ 1ECDE61F931F73D5D32F61149FFE9AAFAE6CB9A6C08978B3DB9EA80FB756C446
+ 01D1305BF4A7EF2B2AF1E1F02D258645A88231685CB573232AB777F8F7C60D19
+ 7FEB70ED3107D841FFA1A7D4AB4858B56315825C264090059B3B906D4805F9D7
+ 5C1F74012E14A68D1542A57315E71FA6C82B2904EC913BE67435C791EEC865B3
+ 9A93A246AB8B24F8B2D324054DF4348796AD4C6E8F6ED09ED1BB8E980F3D62C0
+ AA2103BD9107A0F7685CE43C25D1DCF400C0331E4EFB65F7927052DAFE331C5A
+ 0B9789B8C81790BAD5738376CB50F469B9C0AF89EDA54B18CA9283F6C04B4711
+ 984ACE3D52A284863315905A8EA5CFEA9C70838A8E1EEC5245CC553399A962CB
+ 1140A106ADB20A701B590B2A571C09877D000E65946217EDFFE2596590C0F14D
+ 7EFE58F8E6D31EDF4493994AE08A0C56A8C95E2920F71B311D000AB4FAB2C38B
+ 96C28B19378E300DEA04F5350E25469D9753FBEF4F68EC03D1E29C7CDA8B7617
+ E58E8340872C6EC64BFC93F6EF5BC1F64E186971E35D7E3531DE0B81034F21DF
+ EB65D8DC84DD4E8660257E84ADB9ED22BA3D831060E151D4B71FFA6482F9D1FE
+ 9D68DB59DB769C6A23B220562CDC6087A980EFD706AD8064042007A49A5EACF0
+ 88CC426DDDBBBAB38D5084966C31A14BADCB29502D42D611A7B4A7D654E89840
+ 04F0B7682458D5FBE2EA3E847A0749D1218480700BFAEFD5D63801A085E94677
+ A4585D5A070ACFFFBC8CDFB4CDD368E33CB0BD8FBBC639E44AE36C7F2442940E
+ D2D79CD95454FD27AD8E0AF18F957D04A0483326E97C763B1BF794ADBAED630C
+ 97FC31BCE00FFC7643DB64AC4FC6763C11112B3D8703D739C2BEB52D9D4D2594
+ E804D9D1289584FF0AE9722D6EBC4760391E03C878B0B3652CE0BE04747E7355
+ 4B1B3F219CC3C15BFB92E92C28282080384CAEDA842293E8546E69716C215B58
+ 301803208059992D905331DFF6485FC4AE24DC6481454F6D005AED73A7CE5276
+ 6079ADDC65C086E434707179DFBB7B85293857395A0C02CE537EA4198540FCAA
+ 7FB2E3A183E9AF9730792295EFBC70FE109744895A119C37AAF80676FE6069CF
+ 079B2424D89A8C020D9BBA5C9C10EAF99B5262389E259DF8F4D6563998C21F29
+ C958365DA770E22D606C13D892A0085CEEC72DC76CCAF5B55151590340B98714
+ 9A87EF1154066BD130B8DB8B21D90A3D4BC617776EF9F36C06DB41BB1C06946C
+ 1177823C9203F3F32C4D7CE534012C291A762EAC1762ADC1F1A238B4F6F2B55F
+ 0C4A61E3E6213B8FBEA37424421416C54902B674638956F1F3100186BC780E72
+ 738B2238406BCC59160C7262721F8299E3A9A9A7A92F1E9E10671EC18A540FC1
+ 38C150C45E937A8A482A8BC627A9BAB1CC94BE02B02B32565BF1052EE18AF4BC
+ 838F671CEA9022ABBB7D97D5EAE1635F69B1CEEDFBC19D46E07F3D4B0783A3B2
+ 50AB2C39FCD91BDF1277703B827E3B6B1DE524942F0EDA63DB1D5463B6D95285
+ B793F7DA3601B8855D8344B4A104F93D66AB4D25E26D927A52F5C8B5FED789B2
+ 8D4EC7419406D09A65A25A85E97CC464CEE5B5CCAFAFDCF1CBA78D0593149458
+ ABF8794EF422C766CAD46189635453F51A12C8A81927943D27C72A53D0B9EC0B
+ 76A836F4928372523D13647414F08EEBDEA8BFD1FAAB403AC25F37BFDB0DF1CA
+ 2CE626220EA395C00A3375A6FE1CE0EA65F3AEF3D23CD328D25DD1A453D53F92
+ 08EA1A31E41AF3372E02F767AA669F17A66016DD3479C49FF2C3D001D2A8C79C
+ 98354E80E9CBF98873184F48558A93F2A720A8A4D80DB2B7C1F72D0977979E62
+ B4C9B5F28EB1FB582937D76E5CFAFD6BA7D7A4B7237F2F7B5E1B5968FF578467
+ 580A1E65E2E84824C4C388D80D34E6CCFA755C88ECEB3B9544B933F80159D284
+ 2E98E38D763F8474423E0C3DFC0E9D546A52CD0E16E3F78E3CFCA9F50CF65AB6
+ 8E6F356CC46DD901D3BCFE408C7B8E947E54D9BBDA3B4ADB5D862B1E89F24A65
+ A8229DD40B9258F11D1FC88D474C4EB444BE76E20CAD8F08DC3A826B457DA886
+ 952A92477A930050F2E3FD35A2B5E828864F14F2F5541ACE5290EA64BFF5F8C4
+ A2F5ACD0075C1A3501E88671339382905C918C5FA2BF5A645FEEDD85EA492B29
+ 74642090CB2B1B976B6DB6B357BB32CFAEA302DEEE2B5F6E3241BECA989316A6
+ 277996CC221BF6BD0F4B0CAE47751AA99094B87585F2B24240470FE19B461A43
+ AD1837AB035E12F68A989AD69E26C3FD67A07229F435852AE4FC45810691E2DE
+ 278934F5848092454E57AABC69D687614E224101E361DF86E6F9B501BCC1952E
+ 19D5CB83AE7495E9C498FA75F84417DD53472BDB8D27B8B55B87640AF058FD85
+ DD8169D418F438BA4B6753BB9BFF41985B5731AF468D4962BD089945BBF627C0
+ 0CD8AB32AF62EFA4AA37E30DD229F1A5868310AF50D6C633BFD9382F73AB0384
+ F3309EF0219A6B38C3B5347ED163EAA7F47399B91C3A09B054FB21E316893B8B
+ BEEBA09E4FD1E6B760A931B7D8E5A3B0706D5924809961F93BBA59313B8E3EAF
+ 5CA7E2855897322929B2FD58290A4CFE9DA58ADFE68776C89E06101EC1AEFAB2
+ EFC54203F04D6872EA8356EA089D60E0EE944A78DBAF3A4786F6F524096557E6
+ 570D9AEE1EE7A82622329BA04C1628ECDA430AD2C41CBC1D92D2297090DDA990
+ 5790DCF3BED588A9144C321A4D60C97BC5A758433F776AB136C0E78397D5C382
+ 635234889EF13D398FD198E41810BA66A5C73A23B40649A2A4EB36FB2E745362
+ 10C81C6B72E3B9726549BFE71B91116ECC6B62D19D07D34A06795F798D05528E
+ FD457CAF852134C35F595A54CF31021D1116D3F4BD858A5BEF951947BC336139
+ CCE57A8CD7CB1EC30A95614A388F403607241C864472220A2AA256EE682DE51A
+ CD6E49F6307FA965D65BA05D50CD9E1433BF2D8769AE1BB5273B7615D0C7AA4F
+ C47FBA8450A240C87FBCF5EE65172972FFC4A85536D57EFBF7CC8CC700D8819C
+ 124985C98F1394CF97B22EFB10027F63BE76EC6DB5F5866D004C32E9F2792FBD
+ EF44276EDEABEF0DC2F6F346719400FA2EF8151F79F7DE6517A13DC209DE81DE
+ 0FACCE6491D4866C06BE2B376735E48BDB800516D08CC6D5B454467E8EF83F8A
+ 982DCB86FFB3B9D4620A3E98356422FD328330DC64E1278AF07C798ED1319CC8
+ 4F5311BB91B0DD5E5805380339EB94D575848DF52503030827866B7DE6E85D7B
+ ED098F4CD28D711C5337D231385F710B5AC60C149BD00C491E15DCA71F157027
+ 8BBF22FBB4DA70F9616042A49F7F827D96B83B08A5A7C9CB3794B3BFD9DBA4E6
+ FD066E91CAADDF99AEEB2308189AE578B5ED8E2A10652C3CA1EA29FFE04FF452
+ 0C71E2D4DDBBC7634E0716CCE695DFF93A04B1984690005A240D1BC4B97370EB
+ 2D074EDFDC2C303CDC001910CC3B90D6F5DDFF3EF7BF6DB6A98ECBBA533B59EB
+ 83485B1988B0AAB2904AAF2F074A30F5CFE92DB1F6589D31C33E62946D44CD40
+ E56FA1732B8610930ED87CD29F2CE1B52B156AC58505580FB21B8937F922B75B
+ 9610BA37775E7EC99DB805B7B39DEBE375EC2C82544DB55698E9DED37B28D0FE
+ 0181F035EB2DF8A84C202C893ABC9E5AEE4A70D7CCEC5B51A2B0CDB7B618F812
+ 8E68346649654E2FD81B2E5B61452A4F35730AA9D71F7A241B2B3C39B2DC8018
+ 05FCBD17853B8820269D1AA3C33699FD1EC55FDC15E28688A3CFFCA5CF86F0D4
+ 31C8AD7503448FFE56B22E063E4699EC485192D492E2FF30008759B5332D79FB
+ D383BE46807C6DC44E6637EF10A4FCA02BAD7A6D62C05F756996B9F1EFC59A87
+ C976DBED30F2FB223D6664FD46A3B94FE870EBDD2938C97582FFCC7613E66264
+ 5A40580E4349F4427EA45BF59F29F1CC10B582BF9D9C2A46B9434F93BF9F562C
+ 90311D2030E00984723F82399B71D41459D6CA8083C7DB67806AAF3049DAF42F
+ 6F919691BD5B5D61D052CD3F732A47C642C1493DC917708666CE13A9DECC2283
+ 78C1151D194C99E6518989D34D7ECB7F15BA0F726E79417AAF10879CD11FF84D
+ 2F8EC1A7CBB256D3D1BCEE00A9904F015EDD51A9AB05A85ABEC6F56B4B6A9CCA
+ E0B1EA47FFC0109C2E3798ED853817A96B8B23FBF512EA557796836385DF6806
+ 4A7556BDF10D80C3622F4E6F0273A93A835924D2C73882D79286B254CE49A05B
+ D5CF8BE4D0C71A0BF83B9CA5E9289B8441914F45D1C2B455D90503E58B98BC11
+ B3C694DAFDF167E5C5AB48F61F8B714422D8AD9A693015A84B0A5BDAE39D11D7
+ 2B09ABB15358A0072E9AFF5CDFF175F897C6C751AAF9BB2D1AE97C84A3EAF913
+ C999CDEF79AB170FC724A3DCE838C280DE524663CFA4856D122C72AA1979FCD1
+ FA537FB73A0C854E3F21033FF8FBEBF6AB2F1D5BC49BE81809BEA2EBA6C1EA5D
+ FA63A6414760BC8E0ABDE07F7693281E970D3B1E32ED2D70533748C87ACC2D04
+ 67077D3E4F72338E916AE32D3CB066986A203A8CC53D461D2A418443F49A00F8
+ 14B12F59FF66E024BC3B0241E3352D865AB0451B2B1F710E744F35AB1FCE7C38
+ 66000F479FE2BA3EB1906C48ACCAB652078CC3349E16071F777C3F9A0176EBDE
+ 564AA4552CE9EC8D4ECE4399A0D45CF831FB2C9A21EB789063079A7CF36FC8D7
+ 2CA5992FF670600B29831F9EBB740E03171F946380558A07BE8F3A5B73FD8D5F
+ 2CA7B410541AB2071E3BB8855417F77C8D911AAE3932B6E2CEDBEEEED5FA58E9
+ 09CE2CCFD16F0B8F808E3E43205F56A98BBB446CD9985FBEE58EB5C60E9A6887
+ 71F7DF24E568E094082C3797D3761FB30DB8480F09612C589AD63E984B887072
+ 922A04920450FB05BB301DBC3EEFA1D43F9693E4BB5AE0D4EB8C542F804A3D76
+ 12152C6AC333393B346CBE059F1E26AE92A813D88E7FC5DC9DA061EEA3E1402F
+ 16E3C3A9C1BD0255700D96DF39D36FD2B86E423C448F17B67D9933DF8587D8A2
+ E84EBF9D4635B43F125165C83A96FD60F800681474A4CCA8004324575F28C91C
+ B9D4B780646735697B75712FBB56A4B572AF7B7C8668F32AD81BFAE45E285D04
+ A0E7CB89A92EA3FA21FB433F4F6A5CE38A12AA5E3E29C68452AA0E2A666CF0A0
+ 6874108064E46C2D3B26B005AB8B4641860AAA42981D22B052F4394A839EC42A
+ D9C542B8DEF07ED20E377B3A389FCCC0F88F8590DCD417EF3E6E92013EE1FC51
+ 13CD712AF88600764E251F47106D74F046D9C976B0BF24C5796B7FE15A310457
+ 67AA335822241DB4CA4F3BCF6940377D55D78A5B46568821203F5C06881B6411
+ 2364C3ECC5D43F6928B20C118F8A76166FCCFA749C0938D4756FACE32D977382
+ 8B3E8EDD49825788339352DB6BA0198F980BA778F69695E9497C954EBB3F6032
+ 2056B41B6D979C83DE9671CF7D773A118B7191AA7EC4BE45B4A0E5A448565028
+ 3551CC4B84D159FD626EA0BD94162999FED7CF55C1F82112F488804D9B159756
+ 05E24128E81A5EFC7E8ADC314BB6FA6D15B2715D5934FAEB688B6528AFEA3938
+ FFC21E579E88D4DB719E852E6D5D2F60254E60A9B95AE0A0CB706C6CC935CA73
+ C94D374C8F37B8EB1FD3DA1F0EA6490540C3F7BA7EA6F8C3242820A4559AF9CC
+ 3B00B5796358B4A1F9C267D06A4DE769DDA0C333152E0798228F892C166DD05C
+ 327AAFBBF3C071030C250B9C1E6A9FF4DD080F678B0D9117CCF55E2A75522933
+ BDE13B3F17F8ACA22B6E25CDF3315ACC493208102B366F121692DAD2AC0C04AA
+ 32FD313B118EB56306489DEC5E5038D030915510CDD5D1FD2EB9EC0D31886043
+ A60BFF521837BE1BC4FE40241A46D1933E9BA1274F07DA01CEEE5B6BB345E28A
+ 351D3A6456401B1AC56A7072466F2422233F31D219D9F1FA1F67B133F32C0E05
+ D127F4DFADF0926D425F54B7D8315264FBF57937E81F598215E357786499AEEE
+ 91B59231585906B0D4F1AEC4703B6F2CAD9785324ECB079EB71DAB334F3052BE
+ 4BEA9D48DD36BD08A88553610488CED07B7E4C9518895F27C10A4DD9F7CE073B
+ AAE53081DD9619D0172EA6BD42D9021A0A398957C8BC28DB1937ACF6191E3A4F
+ 0EA3988B04EE13502F87E013278A65E280FA377EC96A354C96D8647CB7877F73
+ 2D72D5205BFCD4BE8307A3105CBAA07B7EE9562C6D16B7BF856A67F03A0C9C83
+ 29821298DC35E05714D326D41B8B940B158414265A1630FE2FB6759EFF9420CB
+ 41361949283832147FDA74BB9E8CF5B8332B90CCD2C949FBC1F75645E7A225EE
+ 667E25E4D58A644C5814B392686CF151B8598C2531946D1220DDF70FD5A6C09D
+ F438B3D262B8C3C50AD3BAA4B34F3551625860E08A1E8685D2CCCD5C96CA68A6
+ 897FCE1C7B03CC0668E87502A0C02094465574D1AC54A3A473583364BDBD910E
+ 23051960DA316B686A152F4826CC05343FC851D56CFF8C9088F8A73108F98A4F
+ 17615D6D2E05C8D247AEAB582DFAE066FD7CE2AF16E783FF40EDA375B9B2E1AF
+ 77490CB3CE62F86B35D70F5BA5338EDB8663DC18BA394E71FF5ED665854A885A
+ D7E08BBB6A16BAF4266C9F650CFDD9E22786D20D97A35D82E1F26BCFBDB27F20
+ 6C40296CD7D988C66026583DA561A3F325FECB8C022D149D8EBB57486F72E263
+ A33D99A10AA876991DF949DC7B5F89466773939B9B045966AF4EF00B3F1F1BD1
+ 051367CE71103CC52E8D966662A8220F03CEF49B0F3D751213C5F92CF0F63517
+ 4F52B241E26E2F1F4B01D37A63D7C68D5DE1782CC502D747170BBF7E4C5D370D
+ 7FCF7AF0645567B7D0FFFC84CFACC566DC45955C907F9A71305566BE05E46C4C
+ 76903133F8EB4566939C93BB195459014F29552EAD08473E3CE60AF6AC886447
+ 3E31E1597EF1720F94FEDBF533E9D5F9C135C956100DB2B733363A19A41AE93B
+ B3D14322CA7B1FAE0C305CF04BC52B70B4B501656EB990A185ED31F756059D35
+ 9138E61F074C82D628BB483FF1ACBB64C66EFE9AE8426A04FBC10162C225E26E
+ AA4A2AC51205C02A0C6D9666D12C9FA8FBFF86EE5459904A22795E02CA51D0B8
+ 1ECE92F687DD5400CECFE2A3A0B1B2B88031721D69ACB8BEC9392650AB3517D5
+ 209EA8CDCDBD7C5F80017C5F5C86EB26CF4E84CA6C3FDA77608E7B54926273C7
+ F6BDE6CEB0591F1ACE82CFA5C3A178AADC49628C9D998980517FA79378BCF84E
+ D8772238FBE755409E2564186F3A604AF5FEBB1D3CBCDDB483BE2CE1D1D39070
+ 3953CCD24C921FADA6D18C410E86833E944FA9C37D0903812A82F387CD179E59
+ 1533D1F6307AFC8326CCB258480F6B2CE9BBFE52DBC9EF8D98E56F6B7D16CCFD
+ C86D451B1CF95C5321910F63ADFCF6B1C798D41FD68B82C626706A3E61D294DF
+ 3F2E99C4810B03D07FA69901FE100619265BCBAB24C11827CB0D53965BEF2E96
+ 8B5ACAA6B7F2C4B1DBC855B19330D304D61B510E6CFED840AFEAD12DCF9FFA48
+ 45BC853233EA064F18D037B5B6C7A769DCC75AD1B4727FEF00BC04EF1D83CBC9
+ ABD4D5535104746DB85D8551BAAB27039C6A579F5C573BBF5B0D8EF8C4DAF914
+ C32E8A4CBCE9EEF6C651F26B9EED9B38012F15833CD5D7A9C4AC80A5387A0674
+ 02AAA3470486465D5A4C98D8ED87B93348B327DB1C8F4CCFE11F502648F6A97E
+ 25DAD00B38F6F02EFAD1CFCAD96122CEA2EE672A5D6F2FC271E9C30E93865A09
+ 26BB4E4B2F27A31DEFD714AB73BD8A467AE39EEC063BB3A6609CF010039A98BB
+ 7DEF9791F6C3CEDA5DBD139B4FE48DE30B462F71CD86D3BF0C3008289BB3B9C7
+ CB0027450E7A8DA78ED34E9E352D4ECCE77825D308B01EDDDC16BCBE5A1D54B3
+ 3E6FD9366D985F42FB18B3AD3DD3A1DA76272307684047A2518DD7DBFE0EE5CC
+ CCC6EE8C5EDA65725858C81E00AE14FF0C7B40BBC7F72846951817092403329F
+ BC2AD5ED026A3F5A471196D6532C1A6398950B49FC210029F10B21820BF2633B
+ 78C8BB785B7F1C784D218D679EA0B024FD2903E1B684F3D80A8E5C8DFCB66910
+ 82EFC9C5CE7702713C449DE868AD9312069FFC4987E35571184D66D6AFED4F72
+ B72AFA7BC9709826C0A550088FA82C21E41D74D8799DB7153AD348B95EBC404E
+ 72AA548969A5A8C2546E181725D0996443F9F8736CEF860918829F820FE1AF94
+ B997E66D010F8E85EF5710CE00CB507315B8280484CE0A26A56C128AF91171F4
+ 468A06B28736BE87E35BFCBCB67B03615ECC263FB44152A437FBB6681C74BB77
+ 5FF7EB3B845C3293783F2043208F42B9A6FA7BB02BD8B62EABDC98B4116AAA00
+ 61179776A5F8C915D8B94D6089132CA53B1589D02A06F13F767505E3ECB339D3
+ 023F1C521C2E61FF555AF4370EC63BF856BBC7EF6D8867A212A8FC21CDB3BF1E
+ 948BEC51F961BC9E78A640745406F14E6835AC945A8B473E0E943387D3E9CBCD
+ 0C581443F986D25EF006B18FC8A80E8C24DE6DB6ACF3226DC5D3D224CF97FAF8
+ CCDF50DED7B00B61564CA66C89FEE2F77E8BE7E6C6A0BCBEC3F8C74F74424F72
+ F8790BB10455024C4D1B07D43910B380EB1131DA8C5148F0304B9905559BDA4E
+ 4AACE89411645F2B8FC1A6BFB12A34D78F579072EC1C31A5E9670CA65814BC6C
+ A625E283BCF38E2ADFEA8882C869C64B9D41419AEF012CDAE15FC6AEA3039B9F
+ B5EB82427AB0385440A5082A9FE606587E8C0C25178C2811AA832D3413139C10
+ 2F5039E36CEC3CB51534BB7A20BD1E3D620A88BF182F47F9A5E86A365738D4F9
+ A3AF07F936A9DB30910EF681B7A5F435124FA91582BB8C224F290B56ED27C8C7
+ 0661A5C0CDC06144D8BE5064E56D36F5A1282D8D8B1F4E4C3CAD852D9A5E5B63
+ 1D4C527A7BCC188F1E6ECE780EF4B85162DCE7D4C33CE8991085AFBE8CD20BF6
+ F13B09CAD046A54E9317F628B45614786A79E6DDCA6200582525ACFB20DCD64D
+ 01658E4E5BEDC258CB5678419BFE8EDBA566F041DBEECF3E5F445D542A173213
+ 3024B585EDD104DB59374431B457E79C175A641F51561B4850DDE539ADF8EEC2
+ B58454D9F9EE52EC2E21E9FE64816B2CDD5BC806475AF35C0D867EBB2831C983
+ 13753C1C9819842C79A8B3B4FD5E382FD688C6DC2B52B6D5D237ADF97E8CB728
+ 59F5382489F61F00AA9CACB30DFF0F6AEBA0397798DE6BDD4E67EFCD46FF1649
+ 2E6E7CDFC30412C02D24ACEA6707C91A8F9B663436C6EF13DC3D0B0BA51171CD
+ BFF353B9BCF63C310FD58409FE478FB9E20DCF9F62068B65286342C2C6D1F716
+ 17355B7F647DB7BB4C4301AA870E1999732C602183A12AC800E31909CB1D1FB9
+ CCEBF9052F964F8B01A62CA0B3AC74529865D1B992FBEE20215AF4EC11735486
+ FC2B8050A1122F992D7B728744B97E8FF47E2EC7128849351E9397C166E24EFD
+ 30622C417338488D7731A3EECC40568481CC7C216E1D84D7C750181FC5937484
+ 21421559A86073051690FFB0BB61DA8AA9F591BF0A33775D7463ED8FC75F3976
+ FD02513AA561BAB092C1A271E07E67FC579E85A17F666A12BECE43E59110F196
+ FB3FFFC8A498664B74D014A362BA6F949F516B73F7DF64F612EEB1C3EB56B6D3
+ 67BA0DEB523E6EED6E0BC9E744C39D65EC0E5E6BC8E3D0800A5B65CA3EA829B0
+ 8D31158B0BB5C7797430C5C49073120D85605A9E972C772DDD2B79159C42F51C
+ 56DB3D0FA0BBA7BEE2BEC7F98DBFEBA049D12AA5F2F8DF2D9E74942C354E03F7
+ 307FE6F3B323A1E19C43B1FDD8EDF02E8EFAA4E046C6BD60F7DA5526784D5DA8
+ CEFCF4D698EDC567BB86C198D594C5E7B9F6A5C4DE88EEC18A892E3856985DDD
+ BEA6BCF5C6EFA66A0795B333B5106986BA9FEE98C910E5EBD68FAB323442A84C
+ 66AD82EB62C1BD6E718D616EDE60EE03E4B4F784BBAB74357D9773B7D1FE4085
+ 45D510C65C4BB7214B6FE75677E03445FA58BB0F009E3066F64E4B6A80B4CB92
+ CFA3B1A5D3761F33288FF6A5346022467A3FD94100D52077473FE5A7A330ECB3
+ 80C39564648779CF9BB9D4F9EEDCE5009EFABAB33F67F3520CDFD085AE741C58
+ ED63B637F115ED68E4E069ABB21B3D7B3D6BF96F34AF66075E3014F884C43CC6
+ 961088A9EB4E029827964F86E6073AB1CF3FA6A039B703E4B9F5EB6A5470D4A1
+ 486E5ACEDBBE35FF75B725B6A19ABA44904D0C269721243E54A1B8D785AF79EA
+ 604D6A73721DB150B18F067505E66F89520E87788DC31256C84BFD95736273E1
+ 5DE70C0E2BD50435F260A97C207BABD51EFF9186B1D0285A87FF452FE7B3C2FE
+ EBA59AA3A4C14B806A45D15261810B9D41F28ADDB24870CEDA21B26D1501C2FE
+ 7F815F205AA44342D35CEEE23ED90755669CAA1FBF19635A36271BE894FF98AA
+ 02642461FFAEB786509BA6D49BF7580E122B4D03C9FA13BB4C14AD6E97D4320D
+ 22C592E6D4F66FA1F3DAD918A99E7D41E9751DD2EEBB04B00DB9878EBF2303A0
+ EDD0557D2AC8B6658A65BE488C0E2914FA50DE46C77D512F03973BF4D0357AF3
+ FEBEC432D50C23E8035FDA32615C80FF62BB0C87FC8ABE06FB1EC225C2F4A56F
+ 3C366BE149A984BD7443FC797E6E9CEF59B1602302C499E671C64680CC038FAC
+ 5DB0BBAA7B6BA9A7D9223E802C6682B7BB2803AEC667AC1E226E4B137FAD6EAE
+ C5B5F231E90301EA996B403E218029A449FFC9808817F978902FBFABC9814FD4
+ 4828A60052931BF22ABBE391466BC46DB059E4E1DD5FB2EC979E38730734DB2D
+ E71BC82D7130FE363563BCC60CF69ACE8BFEB00D9A80BD72D83EDB68F2E7A845
+ 60B88841CC01362723C956E16AB013419CFD378BFEE5A9E07403B120CDA0F137
+ 0E0111FC7BE6C6A4BCCED8F494F972336EC542EC00CC80FB4EC18A081338320E
+ A2EAA3A0A95499E637B6625B255C54898FA3295FC1F7E0744D158899CB7BCA21
+ 46ACCBCEF4A34E264D68D5055E73049CEFA3DBBA6C623C51D325570DA5AAA8B8
+ DEA11D428E7868221390FB9AC77E6898E1CA244B9D90640874CF18066C3AEDAE
+ EFC6526CA322FC7B1B58C587627E29591B5987D1D6637E08E056C0E1405467EE
+ 93A78756F8BB2E16F61B22F28D779F6F39C1FF89F6BC711261306BC4916D02CA
+ CECC7884A859F37AB1A5C31958D82C29D4D1DEBEF5DD5CB1E37F55FE5783A688
+ BB287A17449582A1C7A2DF55503C06D75605B865B88E9D04A4E4E56901CC19D4
+ 66BA12229F8F13114666AAC85DE4B7D509D3A086BC742EBA29A29462D825084F
+ C70FAC623FA00134C9057973653B9E53A40B632E70D0356BC5321F65E95A2805
+ 679764A76A5E18C7796AB31CEF25FF68EBA6977E4811E5E1847F5D4D2A7AE60D
+ 616CE48FDFD07087F9492BC1871EF4C57AD37030B5E3C976DF4B7FD07DD15B5A
+ D7232B3FEA667301B50FAD4025DD05D2DCB603AC475AE262F8D7033C0099FEC7
+ 2EA43CB3E1FE616CEB3AAECC41B8F6EC386290F996FA1935D76C0F249BF8BA31
+ 01AC8AEDDE71CCB86A4AAF296442B0A30D1A9AB5A3B651684C5FEB9137484BB3
+ 143173C33D18851F6CD60D8D66E970E20D391ED68421C912F4B965A173CEA0D0
+ 9728C7D118DC26841AB6FDDC21E91DB1F6818BDB44474990A85D6435357DFA63
+ 7035CD97C4CAD4BFFEBB757B5743CAE0D30DD1B65C4415115B46ED9753EC7045
+ 3AE673FE89F063D13F21A1558C0328775B820EFBE798ACB4A8B7AFD67B4AF5F8
+ 322DC1A60035FA89F9FE2C078581E07F6FEC3C9A23F580377C35BE7F7FBE0D1F
+ 9AFD67BBE221D777FC3CF7868C854E97F58003CCA61FD9C0D91B9E8D30C28D1F
+ 4E2A3A13F959A2CAB6D78EB63ADD0D34E0C428A377427CA120A277A45C71353F
+ DA4AB2B17C33B96EE99F8BC3A15CD7452BC9AC2E43EE827ACDA78979E8325CE1
+ 50CA9E410073C957F5916CDE8083B34A68DB901C3918CABABA4950E6CA718527
+ 65FC51158958014DC02EF0AAB451A7330076E41FF0637C6F97213BD7DEFF676D
+ 7D0038F07B1C69A10AC966099BA97A95EDD91C842C45809B4407F8D2310F3002
+ AF4E5AEBE35521F73D3A36713BF38606BEE08E4EA2FB107D98998FADADE1E403
+ EE993C27E8DC2084A5FB99E2723BDDBE62E0B0B321C22F89EB14F5007DEB1AD1
+ 4ADD73C56B6D8A85642C347AEB2CF271E06EAA29C601E2954B4806A4D4FD135D
+ DD1E5B95110EDC7CF9CE81F238C20CEF8054B1AC7B709A2B360CE8AE8F442A79
+ 83269789D19FA010CD061A28E7BBBADE01115B8692A314F7021DC3F490941C73
+ 8ACAE6E8898DA2467194F44FDB570F9EE0C2ABB1AC82FAE62598F0BDBB545B81
+ 76D11FFDA82D8B4246897F7930DBCA386D754ADAE65C041E5F26508C68ECC603
+ 195F72200E46468C89F3972EB268327ACA34E04CA8DD2FDF4CC9CFCDC8C34725
+ 82C08A276A7621431C52A7135B0B500E8CFF8D177D7045F4E5D0585E866D2CFA
+ F77328487A46D1EACE15E9B6B8EB7ECDB6A3669411580A142017DB8D429FE3F0
+ 1FAAFE1C3A665ADD27DF56C7BC2F02973EB0B855CA955A88B6E9E41E8EA0456C
+ 1543518EB59A4DBB333625E8F7293DE9E981E4907FC8C0399BE6B8D053D1EC53
+ 04C121C3728842D4E29441D4265117FF1316DA1ACB7F7F371C0732F49F86CA67
+ 2AF10F9C910816268673AA090474D981803ED3577CE6F00DD59917AEA37E693A
+ 49AF39DAC61193C5FA8C6FE53B8F8D60E745960A779E61A3147A5C973710734C
+ C9D7EF05E63BB230C16C7378FDB6FD29476523F19D156A432C18690D04BB4888
+ 7697C6AC165020575D7A041E505A87092D92EB376FA0EAE68DF11603E4DE3777
+ 706E72F6586D1E510E1B89D1686ADBAE1796B7E3A5EF390A37B5279A2D766ADD
+ BDCE29FAF27CF48E841735864F8AC863CCAAF39FF2D78C3154F303E506D7E781
+ 9FCA0B06C8A82C6B527068545890C4A17AAEF4CE53DB05440E2BCFC57F7D8CD2
+ 5E81588153006031DC6FD9F944D3842972AC4E82DF0FCE98D99B090FF0E83FD5
+ 0C140C1DED9392907F2FFC05CD6EA5FBCD32B7CD8C18FBF4DD9B367564323F13
+ 79DDA88814193D1F90E61B43C51B8241B8F84DCC2AF0BBD3C166F57CE9C03EA2
+ 4A3DE752B8AAEF9B469F61ACA3AC80C4B97A90BE85BA6CAAB48995C845901F16
+ F5EF251BACFD1EE033323A4AD5742A1C923A23F47FC7ADA12A43896B21E7C83B
+ 6D771557A7F55C336B401197682532C208264FF7BE2251D09726C9502B0A4E14
+ FCA1DC15BEADE1E9568DD85FE6305D3EAB59DDEF7CF15CDE4B00C5E36F049385
+ 9E57021DB84BCBE80116A18EA6D860A02DE3B66818E1EB4504DC35446C408548
+ 6ECCAEE996CA30F018468B222333ACBB7EDEB89DA739C9CC99468D832AA075F0
+ D0DCC6448A01FEC983EF79830AB46ECF607C9BFB178D564C2A824DF65406B1E7
+ F5F79B17F846EBE587179279116BED9A27DBD3980F4DE055217F1E6F1AC92EFA
+ FF3605537295239F04C244775BA25A56D25EA389757AD96418E9229CE0767F6D
+ E218DE11389A6D8823BE8F1E195691812167AFEA67444A28652F0E51C99CE2B9
+ BC7309A63E39BF56CE63E4273C88802E205A5A2935878FC1FB34A9659AA61F22
+ 1E2955E960055380FBD7EB843D4DF42336ADBB55BAD7F5F9DB4B30F7B3B8A4A8
+ 2C0825E602C4E4F0B0208ADE162B1805A4DEC2F42EEF87533E440FE9B270111F
+ 2BBAC709A24CBA7FA2F297E6CED34706DBEF304345E85E8DF0D584BDC2D95A0D
+ C3CB351E96601109F17E6C5524C12FF4037D2EEDCF7B5EBB1E67DF582B4DFD0E
+ 7D4C6F38C21499DD2C5D34AAAF76AD1F28EBC050C7C86B7BB3A8CE1811029E34
+ A52DC5341263C9BA95BAFCF0CD9E5329095CEF3993C8F8C083E13D8AFAC8464F
+ 81BCAC39A6191D62A5D3AF00F945255FD8923EFE38334F0DE898077515F6F3B3
+ 43EF14A8A71C47323A5971BAB13A89FF9DE8C08AB378D71079537F463311AF0C
+ 45A733CD3EAD522816D94E2F05486F63E065E664ED8535817391C41D121D457A
+ DE4C143FA631574AA20DE037DB800183DFD8B7CF843B43D2754B0DA90217CD0B
+ 6BD23374A51665D05B69CF09D8D07E7C4F2FF4E3C7D8F5D9B4E20437EAB24F32
+ FA71674F67CCE25CD182717B038B13079078159683A0B5913B4913760BC7D175
+ B47B0026E587A625B2302ECC00023AC4043954EF9F0BB0C5C527A9EA022C8F63
+ F3782D2A4A063EF7666D69837C013120EC46301A05C94470E54B70500C7F6929
+ 4543AA2BD22A4BDDDC99EE05AB143F5E7F206A175917EF60A3A60C8441BDE14A
+ EFF3AB838F4A8074FC022A908488ABF5E513D71F832F75A8D38241D07387CFC8
+ C1E1AF507A72AC13750038106473D7227BDF9E01312A4A9428DD6CE05E7B3879
+ FD47B2D52726B48BE3D131DBE2078A2A0341518C8150988198F525575B72B241
+ 2B57F4FFE79D255566447E8B8D104621BE20D9F2E8CE6168B9625EB787400957
+ 12A248F5AC73918ACCD8138F7521FC913393ADB5C3E86E4623946B0C707A103C
+ 094E7CDF652E98ECD85A507BCFECA27717A49550CC60E0704C5BCD75BF30B462
+ F862F34E21ABF2BEA5D204A2E7BE7013A35D4A2D6CA2618B2EBE4207E76C77E2
+ 103F7783FFDED20D70C5CC3BE00547AAEF6927738BB39E90ABA55640C2EB3358
+ 97FC0705ABDAFAF2DBCCDEDDA83B2B3A8CB427F490A225B7BE83DFC9A23DC84A
+ 8A5BA3A432636B8836298F1A12FAF6A18197C8AE74E58639CF01FBC6E988DBB8
+ DD886656CB8631953C00540EDF46D0415AEE7E318FE3850A55CABF517B5BBCA7
+ FD21BFD45CB6779FF635ECF7483F07DBDC5ADD39C7E5F83FD172F793EED60609
+ DA3F0ACB6DE0439BDAF67692E92BA2C70E47928683F4A54D1EA3663BDEDA5458
+ 2481EC036D27C019153554BA2D790172127ACF2D3C292895138EF64633BAA3F4
+ 84DF48B1B36109C94BF8A80E79F8CA896B31057AE012AB7057771CD99326DFD2
+ AE01D0231F3A0F0FEAEBC011A40EA69E9D91D373B5420C22D0BE00B5032BA3BF
+ A072FF63FCFD24CD465D499116F006C68644129D219681A48F659CDC9513193C
+ 61A797FC50730406CD5395DB96FD34A6820D2DD8AA68EB5F97CA60AAEB2A5229
+ C7876F9E3C88DF70D16887B978B64EE5B6DE2FE02800ACB74A1A03715EECCAF1
+ E91B638C3F747E3606E8F493115F90F3F05DFC45F87ADC0AF9034B762E049E21
+ 7E3BF73226C190023E439B1B2729548B36F97DA2801026CF633CEEAB36CE6D41
+ C2E993956B716B975CE4761A49430CE510B984791AE28F76C5E22CB55DBDBFCE
+ BE837EBF634A4A833E2A824DE14ED0DA50559CCC0C742FDD45C0313078D34BF6
+ 18863CA4D3A3A392359A7BBD43331D4D5B556AD543FE822E6E4D126502D32E7F
+ 85C71FD804334EA20A61AE888C6BC1D072C9DA67238EF08FD61F26ECB14EA27D
+ CC7B89C1A570241EBE078738D169435CA55E1D03BB12429F8D32891819D9FA2A
+ 07BAEC21E59DE1E5A8C7572D03553A3465304354CD8ABA2CB168674469718EF1
+ B68635C8D9991A4D91672A404FA2668FE9FFF8D4670E9EF44F10D0EA9F4604A1
+ 7352432A5CE3BD3828B61F85FC982E76124DD1402FFC0CF728FF2F6169BAC75F
+ 328321970E901E44E32ED2228CCE3D512BC97A110EB977B2F86CCF76B2B56E30
+ E255EFAE79E68C892022F4D0FA9166A358B1457679D5592CDEC46ABAC7387E51
+ F7C13485F8040BF33962E0724FC9048D667CBA46F0CB219BD49E128ACBC8CC27
+ 8F1490ABA2DC1E051680DFDEBA2C940D98826092C444E12B3AA87B2D0511E421
+ 3B24343988A003FB5531FE7C56330C3428C8318AB1EC3DC949557D14D936F7CB
+ 0C18E9A92E8D2BE0E9DE496910196A78CAA5B12345E9A712FAA46E6C2FABE0AC
+ 492E4A58197E14D954D8AF1650ABD3CE13B5011C0FB537BA42B413A9AF29BF38
+ 4FAA7699C9466AB41286A0E4E9D90057B696265ABEE8E515988151DC60D389C7
+ D5A04E1EE1D120647721473245036873B3521A9FFF59761C46FFB00B0779E19B
+ F47BEA9055F941750E86B94C7C704D9748FDF5079B1778097D3F3D9B09FC9EFD
+ 92485EF758579611240036A1A24D41A2036E765F1B979AF7C37BC4B651DA3BEC
+ 2AC7ECBA06C54E2F72011C407AA2F3B55DEB3022005F35956578A2517D561FF5
+ 66E90379C070AF246C56DE8490777229E0547961AB86FB0B25A26DC033DB5062
+ 790F522904450329E110EF3F08D12F45443F584901A876D23CB84F77E02BA93F
+ 0FCA7D3D889AD5E8494CB9C8B5E3ED861A2683A8A25B66459A8745ACB39AD727
+ 62444E065D5F84DE95103185308B4113E9EFF20D0DEF81D22D8E51B7AB9A35B5
+ 1B4E985259B992F6DB20C2D43C46A2C701388FF32E686DEDC4E75843EF9BD195
+ 23CB2BE00C07539850A4DC817A7553EFAEDA4D0274143D91C02DF30C08FC126D
+ 8C59EF815366E959E140A3756B6044CF88B57C32F6809B17E328612745C76D20
+ 4B62B9CAD6F0825D2F6E2B33DB227D43982A56EBB068E117B2CAD2829151617C
+ AF83CCB445A862EBFD7BCD1CA6B40FC1F0791E56908FCBED69D469C03F853B13
+ DD02F362507542066B9E278344433BA64E92A6E36B6C9237A6F9A400BC207BE7
+ 899046750889F8C1960803708DAD56FB2637C4F84E98C5D9345ACCD09DBD4C4B
+ 8257DC4EE366B368AE7A405F8AB57E0D0F96C87336C3DE8B986A1F08C4DCE414
+ 263C529F17028C075937E473D20309AD7DCB0B1D3A376E1C401A527024054328
+ 98D3312EBF86DAA1071EB87CE449AF778EB4178C661AD5BD76680B560185D506
+ 6B7ED11615F2E92CE534BB5D7A04CC537240B441840AFA4E74D96A9A77534E85
+ 0A5CB0B0486C7A5A4FE53DCB66D5BB1F61CE18EAE8A82B047FD7F0DCB92A598D
+ 67A90D90BB253B3E9895C4A0C92D39878E44BFADC4ACD3EFD0763FC3E519CDD6
+ 28030440B3A26920934D050EE398FCE347B52784DF304C6A049687B830D13116
+ 7B41C000C5DA03379CC8673676223DD11441BF8FD5D0DE5CF726D3C294EDA249
+ F7F15E75A415BAF6579207F29934B07845F3FED8E2CB424F2816E59934064146
+ 661C2307B2B2791D15B8B3027C71BC760946FFDDA54560F8A461501C3CDE4D6E
+ 99F35012C9237FB169194DC226E921F6CF95A3095658A6E10E95721411ADD736
+ E4D0111DBF59C9E40B2D517960670C8161DA233F08FFC404471B5E70D89F48DB
+ 79E7FB938A9B488F52E24B0E30F7179B3B19A5C1AFEDC72C8939F8FBFDDE4507
+ DE26E8BD800ADD0037B13B04AF667C7186A3C109B180B261A2C8FF178175A5EC
+ D46A16DBC6EDF48755F71375A76195C8F5F782E2AB75098922B0E7215AACF7CB
+ 49551031E3365C3E62D29AB883D4C89D0312A8070BB88ED1D15DA031438BC96E
+ 30F3AE59B7CB718F29F929D51A1E17069D9785CC570ED435E677543624838AAA
+ CEB8DB807788490C3BC35A5EB8326A733756A971C0767C9FE9A1B2DB63FE75BD
+ F21777CB3A5EBF420B2C7C93654696A4792BB339038B8F3D709C9F87A9203DE3
+ 182E883E2F85600BF242CCA06C5AC56F19B58C2D29C0214DD2F521137028B28B
+ 8FD75DEC70FE78DA48B394874DDE213BB32B32B46637807B4DDDA37B7B1BCA3E
+ DE1C1C029AD18965127114F87EA89639C2B156986116F7860F897FF0E2B3E1D2
+ 94DB00CEC0B7F30E00748436D33469A3D42F608BC2D4D22C75325A52F117BD4F
+ 88A6F2ABBF2F0CAE2C4905924B9206EA770F9EC77006C29492ED18DF0224A78D
+ 0B88F750CCB72F194E4EFBBD4349891347CFAD1CD8B011E7C341C81488B4924C
+ 75C2439C3E767BCE8EFCD1D9DCF838B6650040C1BC262D7B83D216B902B5CB54
+ 7D93A913FF4EFC3F21E6F474C0E008703672FE403D265FE9CA4BA846FB32B640
+ 85F76F1B246B15B637BDF31782A79CBBD1109712B180F0027E10867FD6DFBEF4
+ 9193D253D7B8023CD8A601EF891C78CDA2CC47C145C7955EE5BB36B82742EFFA
+ 1C994AFEA6F4F73B22549A84BAEDE9D67CCE99F3C82FCFCDBD63F022459DB23D
+ 6766325FB09D858C8C02FD41B6666DC1F79257F93A17EBC924E4961534FF2884
+ 18AE9770FFF935EC29161C5ACCA9096B0FD4F2AE2849A6B5D5F07153831A77E8
+ 4487635F85333967C6EAD2E97241167FA605BBE416F591088C42B72C3E1C65A0
+ 7232A6CA5A3B2D56C8BC6C50F6B9A7A5C7B3062A97321DC596A6ECB550098944
+ 777F43A69EF8A5DF9F326F059AC8C9BB30EB0C4CF4CCED4FECA07D3CF612544E
+ E252F73EE3456FDA4BBA6C9C26F76058B85CE37616DA29C02A7D63FB0888555D
+ 3A9531C27136C70EA4E26F8518F43AC6B83DD023A7F23CC828F2940BA5663EA2
+ 129A071E3E6652092DA29EDFED3A71D07CF54B0252A5DC6DFCD23ED0BD9102A8
+ 114832BB12A09E1F2AC9D8330D7F5465C90566B1ADBD86FE76BB7562618EEE57
+ 6769529638C3D0DC3958EFDD7444A6A8EDA25AEE39599008B781AEA4D4F61753
+ 620463BD0711E8DA1B90862A9B135C7E79B2BD583C58A9F07F5D2E7374E433F6
+ 08951B1EDBA54B77D0075D19E600368E83FA588A3E338FDFB43002EB6BDB7DA5
+ 7E4306A89E759931E9C3DD8894D9F87C134F71C39743A5EF7C2A03344C3C997A
+ 7ECE72C7E2FA0A3A2FE8FB35C6FDBA386356568DF097F36A2290DBE33F861627
+ 49BFD9229A21B9000C653E9A7F2C218AE2FAF3F322749B6E6B429E10750DA995
+ 450015D187E07444EF29F7FAE898AAFA87BCACFF6F629EECE9CB21BFFB8046E7
+ 438F19F2AD412A31589BDC9FDDC426838901D1227790D99C34FCADB71EA837DE
+ 2E7C0ABF0371672701882FEDB619B224C703DA63FD694864C21F8D396C8042AE
+ E45D1617393ABE54B6E3FBAB3A6F057C05FF6D9D1C28A58FF4C52469E31B63F9
+ ADB7EDF1905F1997BD09927D9B63D232C631F1162F0AC5E87AC2EDAC89790584
+ 7502E04BA9BBDC677B174AE0A391C8165BD72EEFE0ACBBA91E7FDCB7448D188F
+ 19B94DD258B2A4E1803EC3F36C36313A2E56709668602B1AE95804D6D0FC17E1
+ 6FABF07B0406F99A90496DB8AF1C10108B7D8496723B343FA78B1269185150E2
+ 55147C6D36CA7CB13FB82E11F4CF3728C9F9CAF11091D703EEA811A96EC77ACE
+ AE19DF31933CA2C6C7DB2259B86086D11EC3B4139020AE2B0F6F48FD6E443C30
+ 0744F452B922162D5BA8DF17DC6ADA2A3E71D08BA28A2BE510741DCA5A66E451
+ 5B9EAB0E6FCC8E64BEA12E579B57AC89FCF737AFC9434FAFFE497597B9BCE237
+ C66090F2E19D48BFB4FA0FBF0B14DB6C61228DDBA74EB7FEE7EFE42ECDCE1C90
+ 593C2932E729D8C8357E61D3632FFE2C244D14DF8AB68E67EB39D1D251506309
+ AA3789A2BD30752F696BF37EC79AB8F149CF81331D60E9773100FF4BD7860D12
+ 5FDA98483B1CC148A06A28645B809A0CEC676B6A750B775A4BF9F8F337B4D899
+ 65BF6379FF2B60E5F1A0E4EEFF1A64E048AF1B48EE00B880EF22A049950C87D3
+ 2B553330465834217885838CC588C5BFCEB6B40DCD96C53D49DABD5B8E4E33FA
+ 187FE417AB8984D8779462DDE7B937A5C0CCF79FC58564C0895BD3270C1425A3
+ 2087EF0DF2123977FEA40682B2FB23581ED07946B46F9185428A83A8C45A0DE6
+ 091510DDD99A070FCEC9B6F9AFF77E2FB7CB294A8C890DB56A8FCDF7BFFBEC40
+ D2BFCF285A8945CBFA76DBE7AE9F1538FCF9F218603E7A00052A1FD829BD2527
+ 455FD00345531CC6A1401802FEA77D3BC920C9F3EF0B1735FAE3D0CC05808992
+ 86FF7512DD5D31243A374C3218CE45580C2C0CD0F36430D1265B5A1D228E2BE2
+ 9890A63B9788348E99E4569929F3255976A8B19D75D98FBF49362667664CB554
+ 9BF9097A7A69FD1BEC5FE8B06354D8774C892BF5E4883F56DAA97E374C7218E5
+ 444DF1A854A8F0C252BF1945A049D525F0C8FB5F9107A12DD70785569FE549F7
+ C55C0D1AA1C1B2B510456EBFAE3B5BEB62A5083D31524A0AC3C7650220F7DF14
+ 487B2BDC3A8588A8B023D744232B2F159396FC36E88923F603E7811C4E3EDF3F
+ DAE09B49D3FC5728845C661A8760526A41E9BC2C16BB7F87F20B25A521C151BE
+ C22768B3CCD89E37D8139B16030466C2F3266C3FDBCDCB5987EBF3ED998B6E42
+ 7F4A9AE964D1AA8C5EC965D4113FC30FB127681B5E6F8062F70B453B60C680D6
+ CC086586A0A871A6968BBFC46A82007A4E3F54211A93DF787BAE746D7D74D9C3
+ E85617AD96470D171A560EB6A02890C7BF7922504FC8F530B2A9F93B27DB6E77
+ 1492452242199DA5D2986AFF1000C1379ECE946092B2D8FFAF40666B287F8495
+ 9A79463A7C4699B81965B5ABD65A2255515489D53ACEB6BEAB5D53B0C14A156A
+ E726A3ED630485CF3CE19FED00BC82D0C2D0615A296EEE8EB57E39A7475E660E
+ 808F451A907C6F82F415BBA6BF9715231136ADDCAD736851FD15AD84EA908729
+ 4A07A7968C342055AAE50E01F9A774430F2B6F42FBFD917C356AEDC8DDF5D080
+ CAAE489ED8C224DA39B3CA7FF1039DEE0B4F31F62811518016C8709CEB089349
+ D32DAC85AC936F6D14C3CE29D1583DDFE1CE552162D06C2772E015379DA79991
+ A52D6EB6B2B348D9E0F2EC65FBB589DAE68DCF25FBFCA22E3806461693E3E6DA
+ E60F8A8F8E1D2981CADC095FFDFC9FB0FBA8A90A7D08788A6A92068BCE6BAE8E
+ 64B2EDFDA0CC1A5033DADBC21177AD74F574F703883E1FDDA2971AFE3633D2B5
+ 202A0304154C32DBE392F145ECD2CC400EC5DC9FE7483C5312B75628366BF1BB
+ 946CCC292D1CFA2790042DA92B9AB89E7EB405330043AEB7FAA4A5DB44EED1EB
+ 9349678E89DA8EFF8A2C5260D1A62656B79899C54883D90EFD3C6207CEB6383F
+ B8BEA09C166B3605F69008BE00D33E7462C98E82F8568B574697182B273A907B
+ B1922952E3EAF6B09E3FCCAF1753168A0DA6B20D800EB744F3F15FE88B4E17F2
+ 20F545D626539FCCAC6EDEF669CD655662D652BA109E4F4860069D97C7878DDC
+ 4620C8AA5D9201EB1AA3D452F22DC65C51F3467EF6A69A9869EF17E721CFE506
+ 084102E16E4861792BA86006E9514E2CE86E394B3584721891B7C8934C1655A5
+ 91E3F0F423427DD19F19D8B1E6AEBF0354335DF49FE02E628D2B7F07AC4FEFE9
+ 8CA6B96F9EFE5A46F58F91FDCA04B8520FD80B36688686F8738BED7E2DE9F915
+ 7AAF8891D6AE0BEC7B5F340E2F83699812CEED19347F2440755B6B341E4F6581
+ 1BD09BBFDAE99933B058948BE7D813E2988674ABC6434690CD48EF0E05FEEABD
+ 31CCE1D7AC5B3E53CE22877BAD5A29668C470F05DD9DF167ADEEFD4463FF5A55
+ 3B74037CA4B3E62B130A11262DE53D5D9FBC6893B1F61E0D44AF5E1367DF8790
+ 9C98A2B595D27B5AF420E02D961D3A75A4032364289AFA122367506D2B87259E
+ C54B83F46DF0F81563160383F388A5329B7532CD78263E7E823F04ACEBA1067F
+ DED6FC120EFF49FCD853F51D460973D32BD3E439850D86C752CCCAB7811510F9
+ 22159D8E047846CAA424E1E6484FADF8CACD1195536B80F7B8821CDC623A3CA2
+ FE79604407E645EC3D796800BBA74ECBCCBD774102A498827B4964F2640DECC5
+ F36DB43B491C4083B282E07E87AF6B150E126BAB097BAB48F3F19C6FE0E09C7E
+ 5D44C148681BDB59767214ACF49DDC648CFE00985BFC3AC5DCF7ED60CC4A6E7E
+ 26F37EDC01CD9A11D38F0BA8F3D2C28FE60B85A22389C384D632A6F462089FED
+ F2DDA2EC8DC598A9FE74CB159AAACAB1694EB81629B3922A5847B2BE91C97738
+ 771F3A294199F4D645F5584DCA1CDE915193088F88B17FE379B8FCA4788DEB8B
+ 97FF98327E1835BBCA0FA10E6A8E7AC1BBDB92AA3C0E2E8B2052CB5EDDEC91FE
+ 6142261328A12F74209CBC223B3CC1DC538A47B6D051BDBE4532F2C0070E99CA
+ 4E712B833894A79F6E96D7702BE8BFC7E2020D1845737E67080FDB27A089ECCE
+ 6A2DAE556D0A2C850064EE067FF012B30662D5F2C99CC48837D83FA20BD9ADF3
+ E433619D0AFD513584B257D5566D89C109B37286FDE59490AA8034F9EAD60A94
+ 43F365B42D269F39DD79B12FAA8CF72B9AADE21C0A05A74027ADC2C31B53B2D2
+ 49DD421AEE56BB221D223AC1393B7F333A61E8438490E94E244FB0E9E4D72328
+ 656537E520EC59BA3643BE41ECD548E3B29F6F03474AC8B7643E22CD69532DF3
+ 459038C4A6C06E5F9BC261C7A78FE86CF4B35562875589379771D1237C2187D0
+ 0AB27937E84ECD9B5FCBE984706B9E66E22455F1F9604FD07B6970A184DFAB33
+ 56591B67ADC13821EA0F42CBEF82966F574CE1A5A1726B6F867F739E3698D3A6
+ 73D7B618ADE471E8BEBFF45BE4ED9D0CC70FFCED114AF8792D25B679EF5630AF
+ 2099804108554CE001FC94880A494B67134F336B53C24202A9D7204ECBC65B4E
+ 6A0C75A3CFE1F1D282BEC4D6F88E378E6058FA334091284E99381FB6B87F8B81
+ 4ECFA44AF3EAA047BA6003D50F60E36F0BE82B941E8C04BA9FA736678259F976
+ 0D01B6B91F7FAD053563CC9D4DB263644CEB8C071D2BAEC7398D0F555B877963
+ BAA008B357F4B1F300069E9679DDAB50F9614AD403D442AEFD83C5AD1DC005BA
+ 59654B6ED0B4DA041B8D49046B8F8BC59A042E80806299D01340D792E92D0315
+ 7AF4DC96AAF65E1119E28DB741CC8EAD0843FD28167BAD60860C8763F2258155
+ 05E4684B3A7AF3766F1115D1E3F89CDA946E798FFC87C0CF40C88651ED6BCE03
+ AC08651067FDCD879129D8A191A789B8D87ECC89A73B78C0F0A95C4D0A957362
+ 4628AFAC2F8BE51D1B1773D64FF7572EC5271D075A9E9B455CDD835AFCFE3605
+ EB45DF68DEC50D8109F6DF28E3D1CA6BB050BE6436B48B72C72A71513A924D4D
+ E3723BEAF87B2CA32BB94CF02CA405976BCE483959EE1390B6F5ADAD581C1BEC
+ 7F6FAA9D19148F83392CD6BCC05BA14CFD3F58774ACF4B0F4EB0BA580FE45097
+ 975F01DF0FDF617D0D0902521A92AFBBC537F6F46F53BC79959B8EDF4972F733
+ 4959FD5F94A25437F45A371AE10DD437CC6B1FB908C5E3FCF90F9CD134EE88AA
+ 9166285041A9CAA606D2BB858EB8A9A0C9D86CF6D8801F3D6226D5842BCD6D69
+ EBEED1A3D53B564E4B94B1354A53EEA8E1DA91012EF0A8DB1F31757CAEAAFF59
+ C6215D166356A0C6FADDDE01528E1001FB89AA578ED54EB0159989BD8E6EB193
+ F2170470CBE780E70843F65A777E4C4E30EC2C54F4C281C59D0CAAFE5DCC0C03
+ 4B663D3FF0A2FF68D25B94CFF009DD0F7528329D6424690CDEDD3FAADFE7EA05
+ 5C0DE6D645EDD3AF582DF3450D7E79DE1759E5914A1828BE7E5229DC36F31F0F
+ 5EE2E5E7496F1C1755A918947F4EA8A94441AE2914486B8F5FC0FE6891FB0871
+ 884C3B3C047B4EFD3559BD3D1726C7F8BCFB614D8C3C47ED68BE8E1CAB2D0E99
+ 97D354372E6A112083781AE023378030B0F207B6EDDBAC60A0F2AE1C62C1F46C
+ 9C51A083DB7F04DC1BAD29D4165B2BFFE451915836E55B64146ACFD8AC9D67CF
+ 9CB4AAB6A0CBE35A4BD03659399D3A615584A08E7C12A149E6E0A433FCC42016
+ 266F8A26755E8D7A29445A3A5E785C45F4327BD3BD34E13D0CF63C4129BDE2B4
+ 5C1D0376EAE7658A04E804DEFA2BEE2271B43BA2DCD794C4BDA0D9E833BDC925
+ 5ADD649B82955A216675D87D8FAB75A6CFB3210CF37669F2156007C514873736
+ 0F7933901E1857AC4F9C2DBD99CAE3104FB4D0BD81E072802F2BCF893DB97092
+ E6EE28C8821701122199018806CC38588EAE24F1BBE04CE258C42774B0457DA1
+ D541F46C83659B25B3C7932D8BBA40871C6DFE686665E768F9D1FAA01C97BABA
+ 04D407A6320B001496E068898FC3C33B8A557FF6E8AA40FAB528FCCF3038E576
+ C5818CB86BA7198E4CDA922DDAF319C9F8889CB4AC5A2E0507D4F3BA9E684CB4
+ D4AE82C90E3C55AF6E5211FF8A3E3279BB8F485832D8688A50BF4D42BC4D45AE
+ F14332533706155638DB94B076D1ED65D62046E2462F06CC5BFF9B7C1134201F
+ E5500D35CF6A1680B551DE45ECA52DA43CD2639F0456DCDB4E8CECE0425798F2
+ 1EB9ADF95E529F01F1BD20A14D6222564F27E76DB0E27519D6DECCC06CBB4946
+ 8319445F33EC6A3A8703370B568DD0391E9F95CC34C5EDA2240B3876FE7ADBB5
+ C761B1D33A70DB5DB0D9210B03AB4D35981DB1F5B1A7B7B5AE6BC6B96405E185
+ DB8106D1F41E971706BB9418A4EBEB712ED5CF5D77C9451533270B2A7C814547
+ 8CF7DEE7FB64DD8EDAFC579FCC9AF43512D660D0C9C27B78017142E1233351A5
+ 8D5F8F0B53CA613F834C990BB47AD38C19B55DC5AFDCDC329422B81C4D6F4AEB
+ 5A6332D12EF1F994E71E2715D043833ABB0E093D604B926E0557DDB69A477480
+ 48BD2C008B21B92CFF7277F3903A14203C750734F0D466A4D5B3FAD797904459
+ AEA8FCF9F4C924DFC61DDD935E78D1F8A3C932A4ECE9CA519E995CE991A92BFF
+ F12CC5DB11BC845B41948207071B3E89852748FFC34862C1DAC51924AAD20AC4
+ ACDA65B085045C981D81AAE17AB65D60DEEABB2F420168ECB7D0AA8764D298D9
+ 296BABA8EA2A9A27A0D87C3925946DD14211A959651EC3F658E5D372C4C37A26
+ 8B13ABD03047FBCAB7BE046E69C032C4CEA56ADFD202D1EC3FE12F33FF267A35
+ 1039E28DC6DD6F31794C476D64F401AAE28FCB000DE64C0B4F7053B6ADEB56C7
+ 17316AC3064C7CBC0EDC78D98D7D82BB630D51E3FA0D231731CAFCCE5978D354
+ A9C373494F45CDF9105707F7C6191B49607A2E64DAFFC2FE648AEB0AA0650207
+ 29D6BBD672C2664EDCA914909323C47D6A4EC45D209DACDBC38A31C3C9D25BAA
+ DE4CD108D7FBA4833956713514F0D8202A0FBA388684C760643CF9D1374D405C
+ CE1D51E3C8E8868F0ED5CFFA6F3E3A204013C659D19DD4D548EC3FFC7F6DD34D
+ 91AC9CAFF89E98D9E3CE57512727348A720C98CDD3CE66B859D526CD55337D56
+ 1ED91B3AB212CD77037AF0C3B8173282BD99F2F8EC82DBAD39E3B71ABB3F5BD8
+ F373BDEB5E3627665563255F0D8F205ED27A162C51F26D1B4576FF441D98EB9E
+ 6933CB3F741788EB06B8286CF43BD1F39660387BD735A2A410A02E2A84E61DAB
+ 1EDB0444A664EE6EBC90CCDD866B0D30EC63C3B7C4A7597CFE0A77943D8F7EB5
+ 9760C5AC3BF48FB66D893F70F6B15F70692E24D3AC2B8D22278C44D8F2D6E20A
+ 6ED89DBABCDEE5397C8F25C1C9FE96C5C71EF8B434C4F83CA8542D8C421298A7
+ 29A2C3486B71E0835CA4ECCDDF7F85AA5EFD23B2BF7F146155F97FCA5AB364D3
+ C7BEC21E7AB1CB94091837B81ECC1E980C11E487BC7DA5F28B37E18D0EFB6019
+ 4A3243962ABF364167353775AD96B3691820BB85F9ED3C5BAEA7E91B634C9675
+ 99FB33B89262BC5CAB773B34AA7ED222DB03A2374BD32393F1071BC876281A2F
+ 8666C1BA35BDF4906D5540B6E624D6772493517878A60D76332AFE7CD5E6929F
+ 223A72533A267B30BC4011BC9DF053CB0DF538213442A17312E11BB00142C06A
+ 86934756FE93F9D3073E3FC4DB904477FF391E4E319525FEA19BF00F25F56ABF
+ 21E5537B8E664F10DDA138A614F74C238E06D7C82FA33A2A4C21768C87345ABB
+ 23278DE80629A2E88E64017118E37E5BF92FB5B2458BA181E713B6290A5E2E57
+ 5EFF0C8FD9971D808FC76605BB5D6C03E5FC2E3A4734562CE86D2ABCD0AC79E3
+ 873B9CC4D05FCBBA5433B7B94BC81B6930D78053C1BA758FBC4BBD990D6A5AFC
+ EFEC37E6C92609C51EA9EBC95141EFE2189A014B0A40A93EE26108E58A44D0F4
+ BF780E1D8AC03C428C760C9E76757F3E4FA8CDF717427F887AA7CA04A33C9B4F
+ E13157136B6D19C2C0288CB53269629177B6E3C956DFDC015A744D45745EA6E2
+ 0F133400F685D829AFB5453F4809245E393EC56C5E18E5C1904778BD68F922F7
+ 3AD0211853C1B9628B347CE13364A91CFEEFF6E913EC131F8DA6A04065242176
+ A60E0A6719DC0103374639FF1551D29B3DAEDC04172D7A34B06C45DC66743AC7
+ 0D1A8E44BDBEF7DB3638438E8C9E262F784CE7686F1E64CC6E6555DCF0C92768
+ FE1890A2723289556A16A3502DD109C14E46A2FA8DCC44602AAD39F7EFE13F66
+ 64C894844F5F606A817795714EB5A1D2D6E426E51FBF7978FE261E9C79333FAF
+ D372414328317AE6AC4020505BAC19233D77222AED2F67755C59048C7D41620E
+ 250CC2D36C15830AC101C28FC37C5E89DB5513C1928A1C4F958B7F1254F00EEA
+ B380482F14C7627B33EC91EB950186154D595F30A491EC6A6C7515B72A455637
+ 4EEA74BF2D3856808DC6F53F0DD98F099D1FD7AC7392CEC0CAFB85A28F344075
+ FCA511F6C810BDDA47B1F0E3C201ADEF0A613804EA6F354CFE6A279A03CE9EA1
+ 298FC21C45C4811CBB7774F6AA5AE5794C112DC54AED87761F6DB83C79E67C7D
+ 6B8B625A6912B84579D343CDB5475DF1EE591C84A0CF4A23353482BE64F4627E
+ 7DE706449D005A254BEFFBB2DE2D2B077A6CCE6F2C65E5494EC7C3CA67FBF836
+ 335CB56E048B01A1ADC9C6CF65FCA9C06AB4416B45C16E82DA0AFF75B5B590F8
+ D5BF0FDD1DD6AAB68ECA8924ABE24F27981AAEE545EBB0B5FC59D14996FFA893
+ B53C6B2A16DFCE9E4CD9C0BA9B85917C77134AC6ADC8AE29C2C1068ACCDBDF15
+ C6152BF48A195531431E1E1D0DBD13D8E196E435C8A63C8148144E8C02B8A297
+ 211F842BBEAE049A038A1A8E4B66092F31E3B6DB3408E0382F54B6409BA8C3B9
+ 7D0470EFF1B2BDAE6E1FDF8E077DEB18C857B45E21C8BAF4543BF1F53BCA93AC
+ EFA462A363022E2EF1F196C4A8AECA836058A213ADD58358B625816FEC8324E7
+ 7D63B3AF2775A5D1CA41D9AA824EBE0E1CBD48ABD7CD129A0DE3508D12E148D4
+ 7CFE7D5E7EF8620E66DCB65400BADB0BE36425458CACC5CB90705824C9124461
+ 4B440B4301123DA5D56022B4239F57214C6587E4422682F0A72F15F93A39874A
+ 4E096067967FABCB9079F24B1DED47C70E575C7C5538B859068DBA887736C026
+ 78B84AF6BFE2E05769FC9F0A899B0D6DCC6E11861F879B0D315B249F284E925F
+ 0309ACE966A9B0A4B5D2EB6FC570CF41CA3B2B98FCE21958435C8B625012D37F
+ B44FAEEB62DBCC59C6D129F71EE8A0E988FA34961BB1863FE4EFF4A86110AE0D
+ 726C18854F35E806B9E0D8A8A2686228D0805FBEC25F6483423AE6E447808B60
+ 3C86207E94F6B311ADB5F35E1B91CED27F845B4980D558E0081D0F1CD2E768B3
+ 4D8CB623FC05D1BA7458B23D98D4292611C0E61183890AC3C87DD3BA9A62B024
+ 2E60DD5E4660652345F86ED229555357A06123F1190CC954671884F1D2B81A0A
+ 201BAC968BCD2084831A6EF4A85601EDA64DC5200035EC8DA637394F38EBD9D9
+ 6E445C4B95B6736B42A0648F11368B2C1C6B0B801586E34F8C28B5C21702F80F
+ 333EE81CE3A92F47B491A651224C05C300757EA8E26553BEC5673E9823FE2D06
+ E3C9323AB1211FF39971FED4AF62413C98158DF7611A391A7E20BBA364FA787F
+ 4A7C9F900EF946C05F5DCE4626A5399E4DA47A3D98DACB56523E3573CAEA62F2
+ 1395330431D9D5208264D8806C8F27C60DB0A4B2E239721F4E9572EB10597632
+ 764A7E78B256070E5420C4FC85ACAB93C2AF0653668E10214A7922F2943967CE
+ EF83F543E06703859FC71808885A23A63414F494F1C16A1ED27EB974E5AAE965
+ AA947E79544FCC3825CE0BB56C70EE2D04793E94A15882ED2F97FF33E689BA94
+ BCC7CD90F4B949EB01BAEAABF904649FE3C58AC834856ED8311127D6C42A4515
+ 1758E3B73D82D5E859BE7979FCB14D45C6C180223ADA127FE54B066A5A1ED6DC
+ EC00CDC83DAB49108D5D9EF92742EC14D47719B0DB5D82A63B9C462B2AFD38D9
+ A5B71DBFC72F82DDD1177AE6BFA0568735D57983F9FD9F23E33D5156ACE336E6
+ 71A7F9AB2FDD5C867A742A5C953F1B444A522233146878DF19F86C47F3AB39C5
+ A2FBD8342C5F2C3757400BB325C5219B516C63F33D023EE882B7CCE8F224DF69
+ 68A68AEA665F3A4413A8E3877F3BE11B624F71735928996DB1B93766F8BF6C1A
+ 2B4C8C740862707E5913DD6691E4D20267F222EF50F46EE108C35A4B2E0C5739
+ 89F6B8FED1C5B0565C6D0C3018EA0F0703DCEE34290642914B0DCBCE66A621A6
+ 47C3F103499099488E1F3B4623746950B613A2AB5178DFCD407854E556A41BF7
+ 04267ED8DDFC5D4A692467B1025C570715917B936560DEE5F91B53BA55EE13F4
+ 0A67F54A589F2BAD640235030017D05ED32E332DA06B599DAB69EE2DA3602856
+ 03DAA6DF35A3A4AFCFC8CC1885A3E448A4864A1A8C9E38E24E86B98E73F04981
+ 4BE6253E896B606C0CE61D65B4849C20D9459CCD9BDD17C25A340B55FE3A449C
+ CA7F0A09A6CDF4BA9FA2EAF253A4CDDA717D6974FA4C61A6ADD465FE06E53035
+ E8577AF00EEA5B2763FFE3C7014A596CD4F9EE44919F95B404291E462E154D97
+ 7D0C0C686E637EFCB3CB8E73CEA4EC6D118A3CC5668137E17DEC1D4EEE158688
+ 7AD62667829D107FA7EDBF17B7BD4925CF8D475C0E52FE8A4460A52F5EB831AA
+ 5025B23F6D6B3F57A0E2E509A356A93328E86B6C85DF8872BFEE1CFB7A9461C3
+ 9ECBE1B116001F23465D803B9B87C111C669345101AA9B824AE17EB80916326E
+ AE3B4F5C2E04AF8BB4596860A549BBF81803658AEDAA96A55EE0C8C8DC6AB9A9
+ A7609AF4394B57B510F31AE295C22521EAA9488C132903C6D3B7C1B8ABF25C64
+ 9EADCB68D02E6590EFD05FF30C6B8D8BA9E0ECC2F1AA6C7A68BE0F46C2A41A62
+ 4445E4AA736E008814E8C55B022DDD85E985CD681D8A1B69542F3B0E9009B53A
+ 902C93823BAB638B3103755A48B4588AB8A72F109C6C67B5168C0763C27059DC
+ 1F60D7863AE9AC4A544731EB64794EB29A1A5CC640F3A614101823B4645DC0DE
+ 7DB420D32D0230E0FDADF8F2FC8D0310898CAB70A620AC7B2FB1B6A326311893
+ 99031C8396B6511E21154F9C3971B78BC6B20AD8FB1417C04A309B8B5CAC7649
+ 72C267BB988E285E5325AFC05BE59E8B816B337D0CF840DED8A26CBB332C48B8
+ C02BC87ABC32C5F08F1BD1071F93E2A0EE2ADEACBCF33E689116F4CA9609B067
+ 210E5482E30C3D9F0B154428FED0E13137B6B3B9E2AD4109AF39228AAC8782B4
+ 2A84E22273171E969C7E408926E52A2B96152570D275A18D31F7C109E857EFBD
+ 64F1354AB5FCD767B50D55687E07F3026561F397FD7434DF9270862912E041F8
+ 902064FE49E46258EB99AEF254B4E3C99E2A692A23C4E468B82877666C178F4F
+ C8ED4201315EF9B66A3DD93D81A1B6BAD7ED7B001E012A64BAFC4185560B0F75
+ BEA48C7EDFB4199980BCB8073CC8F7CEAD8ADF1A68FA2294B6A884894EB02474
+ 54F7831C4DA63758F7B7DF35E9D692522C5792AA834BEF7320712DB967D144B7
+ 4897640A0B62D989C2836595D83E76583239F3A7D0F2E089C6EDF19E4DC018E1
+ D0F5D7BDD8F2DB164155AA58A87FF275494918727CE8D04D3EBB3D3061D5B0B0
+ 9AAC9B6FA98DB4608DFC9D4F4069CB5F1E4401900B135712763F8DBA4283E154
+ 64D1E3CDDEF09C6DBC102C4CA0551E6DCCB5EFD78450327B096C6A8626C85218
+ 742BF3C75800CB27E6AE63D3AC4880B246DB9583D4F2FFAFB1976AFD64391E08
+ CD6D961F095FCAD9B14E63363A67BD6ECDA0D065032D021FEB6C612A61EDD50A
+ C15388B62536511A19A82B84E87234DC46BC248E60C5E0AE96CB0B92BF28A8BE
+ 07EBF8B0C55EB70CC9D29A53407A1CDA8E5AE1BE5B023FB4D6A5635B83821573
+ AA5CD0E779F30D0F828FFC2990CC92E598340EA13910D2C0F1B2A96DEA9A0C5D
+ 0288428FC80268B86DC4FA2F0965050A709D57AF6DF9CC889FDB8864EDE545F7
+ EEA233127E2D18B01A95FAD8B277B6A2300F6C76F6C0980F116F84A7C6011087
+ C307464ADF91335255FD8A11FA0B0E661E5CB89886E95D3834E761C872BD83CA
+ 2D779B51B0E328F2C12C1298425B3FEC42BDD452A2D9ED78AEFE1042E86D61B9
+ FBF9058AAAF60CE470C405756E2FE1D952376D82387CC532C60EF2F2EEAF91EE
+ 68FF258D85F18479E20DCFE517DA3D217E36AD6999AD46AE87ACA434B691240C
+ BB20799BE21224950B39766B39D36F95B82CBC99E6AEE2AAC64BE4E65CC3208B
+ 29D6804BAC78B4D4151349DFFC0D70393ADCCDCA1BEDBC6AB7ADC0BEABFDE2E4
+ 5092F34FCE1D75EAAC2850E04786D89B98138A87BAB0F8827CFC7A560DC1994D
+ B2DDB1C9C3FE7D2D194CA9AE29279EF3B3157944BA742C5351E590331E72F809
+ CB048AAC041F4B70B8FF9B9278059F3802878B8AD03C14976B6DB6B357BB32CF
+ AEA302019CE7C268F9BE6B54203E07CE8D6C9C3B41C60B64D77B3A5F22585F2D
+ 5B950E6288BCD0F49DFC228BC8DB9C576D3D89BE55CDC890E104CFC2A7CC2838
+ 5211FC6610D52699D05FE917846535D3712A67B7B4BBBF31689E344C62F28F7F
+ 8F56A23D2B3FFD7B606EE5A327D0DC126260A426CC0C108C6A327BB3A37F1BBF
+ A6003EE764F01DBEDC3E550B3EF89EB0FEC675A3386DCEC17DC6FB97CC9E1A63
+ 79F21F77656DF7EA5BD818BF4373FDE351DED5E3B688E365331BF13D41D95FE4
+ 92B749974755CAAF7E078F81D1422A78DB14AED7C5CF69C8BC60B2C52D4999BF
+ B665FEF4D44F903DEE6D734DC9A35D0CF065F441E33BFFC2142B7BEA99ACCDB3
+ 5F0EF390CA3126B11AA308EC966AA3A3CF7C9BD029788C6E2155000734ACDAD4
+ 36834FA4A5D850594B19B3E69178C423F921DBC2FC8E63529276BAF3ACD132FD
+ 87DD28019FB96B6F59EBD4F890C170B6E45A6B46AF6F03A6CB76A49B8065F392
+ 7E36AA50D872A9E0DEF0B4920B5F70BABE350E2FD1F8803238949E157D41CADD
+ 9474A0E10A9632700F15981DB84948B470AC218A5A960B3BB7EB71C3734BF37C
+ CAF51EF45EC3AB1D444F34D21F59477750C5B5E7848499EBEA36D95242EDD92B
+ 4B70CED0BB89595B1C5A4ABE99C928E33F9FB802B7E03DE033A61A2F8D3CF63E
+ 14266ED62BD57DCF0F28C8294B95397E3501EADCFA0B6748182A79B00342A75B
+ 803C8DB8222C43412D72CB0535DDF3FD540BF19AECD7164C1644B648932E8E79
+ FFCFD3CA3428DE8C3E91CD1CFADDF780733FB3AC98F3A975A92547BE3CBFCDFF
+ B4331AFA735C59D2E6BA8E20082414B528FC2D78B34142C2CC3DEE0D41757517
+ 9CC54B2C8277C3BCA6664C3020D69FFABEA7BD80BE64A7EEE2B3FF1DDE293343
+ 2F4E67026111D2AA89E8522519C07C15712D3DB72DB8E69E6E947A512D8313B8
+ 354496C7AFCE3F74A16FA5089A98298DC4EADDCB7B8E86FF52F0D4965E74BFDC
+ 7B5804FCBB527ABEE658284281D082A06827393159F5A70CC798269917513A0E
+ 8BE1D8324D50F37824027F2E80C476D8C194BE88B79904BB51EA5571872E4DEE
+ 919460C00A40BE20280726EA86C9469BD2E7C5B905F81C791401D9D07CA04A10
+ 36621F1825DCEE7F7FD09561274DD5DF5532FBB044F9BE0E8E0F4D985BA847A5
+ D8640B5AF2267A66E98CCC2E136BEFAA7DC03B17FE1F95ABD2561824BA6CCD73
+ BBACEF0F8614C5A1F81010DDDE7DAB4E3D360485813EA0E6810C0F5C2989B875
+ FA588D931103CB7BE93A677CB9C975612861A01651C1009932A9D151069E51BC
+ 479F0D1D74F58BD2B5CC1B83D70A98E5E1F0EE53ED717A4BEF8AA247BD032F75
+ 1812FA3A644FCD833A3BFA65793300A79A7CCD08FD4EEBC2158572FCA6FC532D
+ 3A0C391002F97A8308135E051B1FCBE1B070C417DFBEB8796722A1A14E3E6D3C
+ 6139868843EEF4DA1EC382BFD2A14127A0D9847328E8C23FF57EEF32CB7F7A20
+ 06F65DF4A6B38E4EAADB43A6859E46724AFFF9AAB9E73347A1C02B8BCBE215EA
+ 93EC400B13DE4D5358E0A0CB706C6CC935CA7C8104066F9E81C55F53A1334DF3
+ 2FE19B1CDDEF52F6AB729900A6EA6B7725F4BF537DC8124BD12FCF8AAE826E8E
+ 6C35DB3EBEF0D7B0EC746445EED004ADE24D4E663020D32AD273B46F4E7BFA1C
+ 6E6A9A152366ECAA15BE911A0D92DE538165405457CE0FBDF888C082523AFB86
+ A6546D070F9BEA54FE4CEB33119183A907206113D3205B0EE82470D81BD49253
+ F363AEFA109478E653FD3950A896D2B906C5B3B4A45ADC8850CB7B0A220FABF5
+ 54C8B9E5A44349B409A57AD85E45417E74D97D2D596CD9E1F3BF24A6246332C3
+ 64321409F02C84BA1067AC7FB45344F402A29FFCAD9CEC28DCF49C56B8F4EC63
+ 8A7788F4AC2582892F289473919B575AA72FC765865A0C7DA00898AE099163DF
+ C7D8BC3AAEE07E08C4FB36D8A25728A39C849244F85A95D1359B0494EB786A04
+ 986C09D1EECDB9C3F3ACE751C1555366924DB9B5A1044D1DAE16DB41E5A66E1F
+ 6A9579136363BACE2C1EFF5F55A8FDAC9CC4475E43C363410649F0A20654D4C1
+ 915622AD5FBB48C70E09AA97E32392E33E08A5456F86D4036EB14B2FD1D3A67F
+ 52D5931FF44F8B835852D78AEB4C0F9F78A4553B44E932D104A434BE7B51EE4F
+ 643F17A66074FAE81411FBAD6A322EE8127484AB55B7DEC19B1A81F312F6BA45
+ A01C9E1B06067D2B842754B636F0869B17CBDC1A4454C063F0B4A010C8DE95ED
+ 7CE8B314C38935086AB9B52AD649E82AB0B2E61A6DFB9420259E19E02F19B959
+ 82026DC847AA61654C992540A5502BF6CF88CE08D22E80429764AE298F99E4BE
+ FE73A4BA4C4E31B883F5E804759770265B37B60B1593016F545CF833A72FC294
+ 176ADC3D3F8EB61237B800E6797189C1ED790DF495F93B2B934BA323251E39E5
+ 1AF43FE2F671207BB0028316CC85491AC6D5D37E4E3736FE6B0BB45769D9DDF9
+ E1A559622DB050AB826DE48B31714A215F002B2564E27A83B6FFE4476520A647
+ 625ECC7F00112E22AC3C10AD3EDF1C8860484EBE7EA6417E4375032950310ADE
+ 91700C0C173DA0E3D277ACAD119D46DDBF8104B80C380DB2FC811CB36873C146
+ AC5AF37F127E8951F5CCBFD2876694B17F1FD7B07D6F0224909ED53BB1A338B6
+ F80E40372E3744889CCF039923BF56808DB3DB61E8AAE9C1065E12E5E9BF2D0C
+ E8010A6553E1737A45A70240C566443CD63C61EA74A7EB5027A736C9DB46AAA9
+ 4EDDA02B91D1ECC7BCC15DF930BAEF585B591574D1A795393DB119B5FB7A842E
+ 218A755C497F26F28FA23934C6DBBC940FE7981AE79CF00DC981BDC38000E89A
+ DFD1D99E489D4DA1A4BA716228E8C5CFF3D8A6497832367C0D02D13F6B1A6301
+ F045427A65DF558F4527878B85CA63F06BAD303CD3C32F8DDC91D1B86FF35971
+ A2FAF57B9FBCBEFC2B7C712B40E827893F11B8807112A58BBBE054DBBA4C0E93
+ 8F1FD760CEF12CED1ACC1F3A0F5059F4D6730EC55486EF677EF3B836EA81C18A
+ 9FAB77CDCF5A0A031EDD4A37FCCA3D14E00279131EDD981253D080FA53882F09
+ 350E7DB7B1487FB2D4BF6BA9DCE16E11D3D931E751233EBA8C0F35E2EC39B891
+ DEC387C15518335041C66893B36C3B906ADA15CD8F88C99067285035290EB087
+ 923038071845392B07B939BF104547BE0E30C51709BD9AF240BB686DB007A030
+ 6FA3215F7C3E9DABC3EB7D4B5C789EDED99160730153E79E635BB5B8AF28D8ED
+ 093A3D6611EC565FC7781D14B3887FE201995D2F675F3F597EB50A9BB3404871
+ 10D931B6DBB34A58583247AD731DD9CAAC7142DADA64898798B7E3B784015777
+ C2BBB1BD11B6B8AB327D10181E5E9D08EEEDBAD19A76EF67B089AD3FB787C7E3
+ 6702BB51B9D6819335644121BC00CAD5932B081376A7B7CB077A463E3BACEBEF
+ ED0A3877363A7747676F1837CFE539D9A86204BB717CB363092BE3A6317F2792
+ 8283A88DC0D616DB3AD97DCECC794EF8EC0CCE6A6AC71D6CC55E861B59C5016F
+ 7C47E09E677DE1594E4B3CAC9C1695DCC265D45584118A96D059456A0E226A23
+ C40A3723BA1BCA3F2473F1B208CF063BC16FAF9BCADB81E418BB1D84A83CD7A4
+ 15752DC74DE2001383B461714E14CA006D0F759E232076A4604DD7ED9BD43C36
+ DF3480069ECCF31D5F0CADB0A852D1722FF5079B92A0455AC8B6700BA4B7B99F
+ 3A216855317502C4A79A185712FB21BF34A37FAFDF59640451600F948FBF2DA4
+ F2A28EFAB8C5D153225905E8D1D3D6B6678DEC3D1026443C43F735AB36E74661
+ 0FB4E3C51552BB730BF5CEA82ACA519747349D912BB85052D28C36B2487E7E0B
+ 287ED78CF6CFCD751D4C5624DC40690433BAA19A521105B35137A108981C5D61
+ C1D45DC3657CA1CD0FD21B64619203955539C55B6D35FD6C63B0A567463086F3
+ 6F3B2063D3251710EC920DFC4B17F4A1E8AD80DCABD55F8630FE5EBC80BFB44A
+ 8803242FADCF41C83594C027A690CEAAACF2F9C66140706EB5AA340CF6BED080
+ FAE33D5A34F2E27C1337EC9C2EE942145F41A39AB871FC6D5A9ECDA765C25064
+ 9864BF68BACE2A3C224C7BA23A2CEA26A6E0B27F9DFAF25A9396BFCED0337603
+ BEE2F121CF61512330D3C74F80D5F5DD3E66F77EFD0BE20CA59E806910CC2BD0
+ EF2E7612C1E91BD928492D9EF9FEFE59F251BAF4B8C1902AAAFC5B96D5FC6814
+ 26E221B12CF20DDBE7DC22BD919563961A1BC68939ABEA7B365916789F7E9F5D
+ E7ECD22E99212568546E1A321FBA29AC89BEC076C9DCB937DE55F317FC2E11D1
+ 5D497FA86D69073032D18FB553588B3070E543D91E82FC34857E5067F9363494
+ C175161E060C3C30FC6FD85FDFB9D3DCCD0392B10DD584528A46A7310A9D482A
+ EA44701653FEEE8A1114E82E3B96103D00D59AA44470E9B68A9B3703BE92EEA0
+ CAAC9E79BFEFEA4572D3CD62FFB896132656A75F132B52E5C7D28D376AEFD606
+ 048C372F3C7A420CF263D995FF671AE5212AE6E1082F7A130A3B090D6D41B971
+ A70E2E70F0585187CDF3738DE5029E6B785F6FA63BBC0ECA7534B94662506A68
+ A69BF0294D1F56533CBD2ABFABFC45DD30CFC65585BA9BE092D87328F398EFD4
+ BA0FE2FEF791
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ /Arial-BoldMT findfont /Encoding get
+ dup 32 /space put
+ dup 33 /exclam put
+ dup 34 /quotedbl put
+ dup 35 /numbersign put
+ dup 36 /dollar 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 55 /seven put
+ dup 56 /eight put
+ dup 57 /nine put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 60 /less put
+ dup 61 /equal put
+ dup 62 /greater put
+ dup 63 /question put
+ dup 64 /at 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 88 /X put
+ dup 89 /Y put
+ dup 90 /Z put
+ dup 91 /bracketleft put
+ dup 92 /backslash put
+ dup 93 /bracketright put
+ dup 94 /asciicircum put
+ dup 95 /underscore put
+ dup 96 /quoteleft 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 /braceleft put
+ dup 124 /bar put
+ dup 125 /braceright put
+ dup 126 /asciitilde put
+ dup 161 /exclamdown put
+ dup 162 /cent put
+ dup 163 /sterling put
+ dup 164 /fraction put
+ dup 165 /yen put
+ dup 166 /florin put
+ dup 167 /section put
+ dup 168 /currency put
+ dup 169 /quotesingle put
+ dup 170 /quotedblleft put
+ dup 171 /guillemotleft put
+ dup 172 /guilsinglleft put
+ dup 173 /guilsinglright put
+ dup 174 /fi put
+ dup 175 /fl put
+ dup 177 /endash put
+ dup 178 /dagger put
+ dup 179 /daggerdbl put
+ dup 180 /periodcentered put
+ dup 182 /paragraph put
+ dup 183 /bullet put
+ dup 184 /quotesinglbase put
+ dup 185 /quotedblbase put
+ dup 186 /quotedblright put
+ dup 187 /guillemotright put
+ dup 188 /ellipsis put
+ dup 189 /perthousand put
+ dup 191 /questiondown put
+ dup 193 /grave put
+ dup 194 /acute put
+ dup 195 /circumflex put
+ dup 196 /tilde put
+ dup 197 /macron put
+ dup 198 /breve put
+ dup 199 /dotaccent put
+ dup 200 /dieresis put
+ dup 202 /ring put
+ dup 203 /cedilla put
+ dup 205 /hungarumlaut put
+ dup 206 /ogonek put
+ dup 207 /caron put
+ dup 208 /emdash put
+ dup 225 /AE put
+ dup 227 /ordfeminine put
+ dup 232 /Lslash put
+ dup 233 /Oslash put
+ dup 234 /OE put
+ dup 235 /ordmasculine put
+ dup 241 /ae put
+ dup 245 /dotlessi put
+ dup 248 /lslash put
+ dup 249 /oslash put
+ dup 250 /oe put
+ dup 251 /germandbls put
+ dup 0 /onesuperior put
+ dup 127 /.notdef put
+ pop
+ end
+ %%EndResource
+ 
+ userdict /pdf_svglb get setglobal
+ end
+ [/N10/Arial-BoldMT 1 TZG
+ userdict begin
+ userdict /pdf_svglb currentglobal put true setglobal
+ %%BeginResource: font ArialMT
+ ct_CffDict begin
+ %!FontType1
+ 16 dict begin
+ /FontInfo 15 dict dup begin
+ /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated.  All Rights Reserved.Arial is a trademark of The Monotype Corporation, registered in the US Patent and Trademark Office and elsewhere.) def
+ /version (001.001) def
+ /FullName (Arial MT) def
+ /FamilyName (Arial MT) def
+ /Weight (Regular) def
+ /ItalicAngle 0 def
+ /isFixedPitch false  def
+ /UnderlinePosition -100 def
+ /UnderlineThickness 50 def
+ end def
+ /FontName /ArialMT def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 0 /.notdef put
+  def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0 ] def
+ /FontBBox { -222 -250 1006 922 } def
+ /XUID [6 44339 ] def
+ /StrokeWidth 0 def
+ currentdict end
+ currentfile eexec A0B00ED5187D9C0F1ECDF51878C3AA5CAA3EC70E14AF46
+ F38884AB0522111E1FD6B5E292C7A7C85F79C8CF269C29C6F79E84099DF3FE97
+ 919C760621BE9B4756D5ECC123E0FEBC7A1BC9CFDCE3B7AB1B118837C4B97C17
+ A4A2D65552C37CAAD683D3DABCC09A36FF0DBDB89E43724FD10F7C1BE056E775
+ 101008AD51C29014E0B4AFF4CDE74E1CA5A64E39C83FCEE568A997B7D0D888FB
+ 5AE51C74D8CBBBF61463B3A1C80032F9E9B615124B88BD716363A24D9B750718
+ 4290A3206B935F4107372023D4CF18300B61A6F017E700015589C6D8BC7BED9D
+ C6B3584EE181363F824D6F1E3CF3DF48A631A54AC4E8C81536C1461454CB4B63
+ CBA14A6242F261EBAA3F7955E7C1E758A77E93DB07F4A86D1667FD99BA1B965D
+ 92FFB04F46A8F81AA8F43A6205BDEBF751C54A5394DF443719D16B0AFBFAF01B
+ C9203F81FDE5B931E192C430769AD893C30126CA27135878D49BFA89AC71C990
+ D2A4E8825524271BDF10C6FB049A8B0E7475BED9B44CD4C2B8104452ACF12AA9
+ AC8AFE331F9AF9B0A708BBF3F45200395732639C0F92AB91274625421A93F511
+ 6771881AE8715C58B854B88976701B5385AFE60F40E1B56702BA711ABED94473
+ B72503CDC76C7C34E0A2298FE19357CA17DF344A592ED134D171E58899FCA9D0
+ 62653DAAEFF8D71C19F6D3958220794375F07D635FAC19B5C16DE6D9F30A648B
+ 9FD57832B6804A07E3B1C5D6B07F59AC95E2FCBE0E02CAD0960ED6C98F70D7F1
+ BF7885DD5F0B40BAD91171728FADDFD616EE8A88FC18B5C8F16804C16D7F6408
+ CA476477EA76AEA7911801F204F4E0C0313B1FF1EBC254D7323C0DC28797B201
+ 5A904335690D638EC2C45723DA891C15965F7E459C7707B5CA2F5FD3AB3E68A0
+ 313986EF4BA1E06DA9EF1C961944F5EAD42BF3F30C93B800BD3829FA6254F143
+ 6E9FAE87431D328C947B5D4518A07B8BDFCD64BE3F120FB418101229783A489E
+ 248775C96CCB00A5E65470D0FCBAF0FAE402EBD451D060534D8C0BDBEBB5FCA1
+ D2EC726465F6E37F50D455AD5A00EF50DB61B78CD04FAB58973478F3D9301CBF
+ 6EA03071660EAD7CD6BAD616C77689D560133648C8F3CC438400A2F69C672330
+ F046654B0C61443F393DC0B4F138C0051B027383B50F624D1B597BD5B6FA0F3A
+ 255EA0200400F6EA8C15B2BBA215A6DF7152EB6E1DBA4ACCD4BCE3511207E8DD
+ 13212B8B2A33C259F9AE30A45B338BACC981BE53D6AEC541E6DE02A15260EDAF
+ CAE20D543A7277E81EFB454532425CC074D08E1E3E066F4B62AFF15EF8F59202
+ EEA5CAF47E4C5F55C16C0F6BACA0E175A659043E50A65B8A4CAACB535CA5BF25
+ 824F7EBB192DEBCF59F80B8E8FA78634C7E0C86BAE5385477AE8BB9CF7BADFB3
+ 05296420051EA5FBB7780324620366F20EE93A46EC5A65047F69BE9E82953C57
+ 5C363FAB8A11C647F86C8FAA99FB3C21E2E9B9311A7F61CA453F919912FC714D
+ B64BF3D52D3FD48D2BF9FE81EDDC7B93896BCD68C3DA1CAA36D446DE08F14F24
+ 881212362D63355AC0A4A4C1DE86F48D18286C2EBC5325387915D77D6586E10F
+ 9F7332A871D5F876C17998EFD998EE49A21B141B60E33C515464787589D34945
+ FC6D3C0697E124CB796B6570FD477D0921D4B5C20DA297A3A5990F39ACAC22CD
+ 7C0A2E2F6013054D2306398087113AE376AF6BF19822B988FD14AC9F0D11A0E4
+ 5B6FA61BC823D97A1BD3B4EAD9CA98A68A8A82A95731ECD22DB5E62890A468C0
+ 33E806EA900AA2683E537994FA1CBB14711CD8934550F385593F10E49455D48B
+ C883E2923D91AFACD479F37E4502A252C407B0A3E0E91F083ED08D5B9EA01C30
+ 9B2A91B3EB2B2A9BE3BDEC6C2F1611F5FE5B6C5D6F63E1007ADC1EC081577BEF
+ 25703376B5CB3EF7AE0B682521326B0602AFC8EDD3F9D29B6681B97F2F6D02C1
+ D6B9951EEA1CD4ECE1D1B9030D1E8E498ABF13905DA3A3EE416995456B39301F
+ 1A268AED8DFC91A4941FA2E15A40865DCE35E106B036811366F5A809D7BBADF2
+ D3BE3E66576E1CD5F49F26F48231FB265825D1883F5529372B539765B684408B
+ D9827D62A85A3223BE93705ADD0EBE9B209C4198FC396CEA26F3C39EEBDFD571
+ 696FC4FF8A1046721B1F5A2459772AD1B1D73E8815DF6075C56D6CB4821496E0
+ 6177B9BCB8D9DD8141264C9351D1CB9C66F3CA360C73EBC99CF256AB34832665
+ 418ED547CF8AF9967445629E3F8812D72C9A1367AF724B29503EBD2709A849A7
+ 73B145ED245AF6F558EF3C3DD58A79841D2D8072829B4354B4FB9B92511C1DDE
+ 4419ABE724FE38922CB46D755965EAF364546A8113725EA3F655A17D23B86DBA
+ 967D6093A61D81E7D891F1FFCE8555AD2E572ABC392622947EEF2B19F37EE7BA
+ AA23C81AA8366982D80AF6F8E800DE29C5E9E9F27EA194D5DD0B05448BEB860A
+ 0F1F0A6B21B920C11019FCD3C7AB2A9131802E49A5C0D83D24282D2893A4D414
+ 25607C2775199F43509E85DEBD1940B6BB515F1CAE035F62783B8CE47BD02AFB
+ 20A5F22CC3A1FECBCCF75E71B22DDCB8DDC1E6BAA1149EFB3643C90574D5854D
+ F042CFA4C6AD811BFBF1D9B3F28CF5CA542033379C85879D32122C8A647978B5
+ 196B70CF7AD5F4986720107860406624DF6DEC7EF00F683504CAD094C1D9B02D
+ B0F85AB73DC47B4E598324D3D87348A08FE851CB80183CAFC75DA9F097F437F0
+ 4B201BE3D266A020292DB51B30FB6789E6381981D1E4F90CAF8B0F2DFC6D169B
+ 30E18BE97EF91B75E09904BE317F7D6F881EDC478742EEC2B480E9E8A7DDD194
+ 42B4ACBF73B56BF0719F73E4E0C4FC0FE55777E7DC2FB7C28E043BFA7D93D42B
+ D399400549C35FD4A97B36275903BD7F0B87BA7171186DF4E052114E06CEB9BC
+ 507FCA94AFD74BF077E0A0926A1ED0C76395A9EC95964026A4A3D1201551B0A4
+ 505DAE3B203E6597D3CABFE5F0DA7173630CCB05EBAD3994A072DFC27BA6E93C
+ 965ADCEF109D4AC3AAC43F493750D1A3AB840159EAC69422A70E17F078931605
+ A65F6D264A140DF4B0466E98FD9A620B48E9AE7AD462E8C6DAD19A6074CF929A
+ 5FC78056D249B2E2A4C64E3E378047787E25C8E3CB799831021990736A979469
+ 291E01D76778C4854DAE4785D7554DD5E5159F2C95BF76B752DA815B8E123689
+ C77DB25BF0A6F0DE18F8CD9E3E585C5F5A806ABDB3B1653BEEA0D7E0EFF2348A
+ 8AA54DB0B29E5A3FE8AE348EE04F1EAAA7A7CA16A43E7B6D4B71312A9BF29191
+ 4C2B3DC2BBE1D3B5ADC998199239FE7639C1345A4BD8A6366436580CC30C0D05
+ 84914262FC7E798A62CF2FEF968D05FD4C6863D9AFEF5AE41D12FDC272C50695
+ E9AACE78A61FB7017430186DDFE3D535471936C2FB4C7AA03CA3C7D70CA15526
+ 0F851513E08FB11A3A1AB04280E4C22F2F06434DC59CA70B7E9EA443668902F7
+ 70058CAC92A2967EE581143887BD5165638B47B6F0A31F01647C28F56263EB6B
+ 70CBF3BC9C48DFDDD9D81BD7D323D3B1086E35B86A8D111B3B5A656119239CC0
+ C106D49294DFA01E1D32745FC88F8A17E614A32164B891EB787F4D681E74A3A8
+ 4EDAC7D8D6BBE9A84FC9F7FAB3D7E7211E4C57F9CFEF7C5C3D292971D4435199
+ 2FB5C396D93A20FC01C54E903A7F0809F44FD39D74F194F06D5B2F6112181321
+ 59BC06420509DCFC2AA4C7C0E2F7A01E47C4AF9D83474EC7C326ED7D45F67550
+ 283B1DD83F682155C7579025A47218D6393B6E10F1108902553B1D9E4679927F
+ E6183F4673276A1371895857A61AED50ACD7250CD94F01E9728F26CDADAFA751
+ D4F63803ED04708EB64E3576196065311C3CEFD7C823B8D03A71F983B2F61182
+ 2D67217F51E80DEBFF0ACD0B71B7E4C5AF129DC11E18597B3930B67358181789
+ 1ED9A4BA4304DE8C02D520423CEA3FEFACCCD6C51997E2E201F6E658EDAD7BD4
+ 2E3AA2A040D205F5FFE0AACEC3CE9E35304F2FB46CFF000E19D908FC360AB518
+ A6EAE095E3A510D06488F5C3356DE58C20C5383125A8B70F64CBD689F9CDEC93
+ 57BA59AC019828F415225B57BC706072B26C15ABF21195F6E812D1BB55761502
+ 878F7DB41EAEE10B72FD42BE5847344D108DB5FA5C74F8F92AB617C50FA6EA2F
+ 4DFB003C241E522E01FF393572F2024F506C99C4601195958FB17F6C2A7F0754
+ FA9DEEA8466C67ED10B6B49826C6F417C402D485CFB262847B307A9481209A62
+ 554927F8860664038D73E298BF0A865EF16075A64633F2E2D5F7604C4E4A1535
+ 6CFCFE727A89C10F122EFD87D157177065A8676D9E668ABFAA25537BD5319418
+ F6C9C826082D3277DDAEA8DA0C332AEE80E03DAB6B1F7CEA226830BB7EBFB709
+ 832560C9174EA571FF354742FE0AEBCEDFE381899B2BA05F61C0D8ABCDFE3B8D
+ 274A6A0D49520EF4EB02C62FC5160AEA8BD284445238EDF8A057BC091B85F418
+ 5E979392F00A218EDDE76F97E2839B17E7B4013F130682AAACBE2F9218A5A93A
+ 3CFC057F5AF071F75B82206F94FA17F54E6F71BFD578EE68801F1567E97C9E8C
+ 4B1A22889D06C7FA4668981F8D70729AC4001D4636228A46BED87EDC73D5AEED
+ DA1BEA33F6093848FD2A6AD0F6FAD9A6DDC132FAA99398D22819CF29D5C2AEF2
+ 9349373FF31A56942922C297F03C923E52FCCF4FC49B3AD1D9B05FC03F77D26B
+ C266952BEE8927F257BB29BE33E2DC8D37293F348EB776F1595C2C705AFBD1D5
+ 981A9F80BA14BA7FE2AE63F9629300797CCB7BBABD8ABACCAFEFB4FA0C3F6834
+ B0605AC8992CEB28DD64840FE35F8B82C3F28DCA7F59E7BC15D3CB752DB98E70
+ 5DFC14336FBD98825E25422E29CF9A454B39749D7966DABE2A62B10E651FE4AF
+ 1BD2D7967C93CB7551E099927CB0F327B98204F5CC896C8F54DFF84E54C316C4
+ E7E80C35DE22DB201CDA5CC2DCED211BD2C0301F44CA54DE07AD73CD4605835A
+ B026D2E53F6518551C180469A83D5F7131E367452306C1D71E357DBFA8BA9329
+ FA86682E0A5A85A91BA04972CA5138ABA88959B004BB9377484493051DD68056
+ 1452C5D202A15A433188F9DF70526AD0B5305C14812CF2481D22CFAF89E357C0
+ 97541CCE109C468AE99ACEC83FC85D4184D7333A4EC3ED05AB4A4A313F8DCD85
+ BAC1BB0E4DFA9CB36DCE88099A0FAEC665138EDD86436191BEBF4F67D4492865
+ CE2E446C3CD9634A474E7B53EE756C93B3EE1EAF95BB66DD465D52D853FD2434
+ 1760250C3070601BB35E4485ABCFCA9E9D257334889DD0909C9A86399A41D623
+ 20EF0320886BFC2F9535C231851CA6F445FFB4449DBA10A78E6C77AA45C5A880
+ 3F46952BC328B80D38BC1EBF615EF7C603C8734ABF624DF726B6B6FB281D7DE7
+ 5993A64E15B7BED306D4D293D5A7DC84148D14A918AE73856C7685C238C2ADB7
+ 6A4FCBC74DE4837DBD244DBBD722D09A253FBE3757AF79D4262582FDA40E4EC3
+ 4B1DEDA6797C15AC457349203A28871D17D447280DA7E811D24033D38BC3253C
+ 1B213EC5DD2FC811A5DABFF75F282486B192093BEF15FA2E510C15DBB9681C92
+ F8CD64F1B41901559285B089B87EAD0451FFEB200DD126A264597DB8550CF94B
+ FBBB78899EC837CB7C2E381BF444B4C1E2AA2CB19836726DB0E745C0A3029521
+ 602D5EA7BD26F33B2BEE4A255F0D301A372724214741FA66503A801CB88C6BB0
+ 5C6F22BFE4E8F6FD3F37927AF7C71F9EB5F42BCFE1C26AF0A40E16B9238E65A9
+ FC4812BEF803C8D42ED81D5F9E6F130267D4516DCB084412E72E2E4EA3A4FDAD
+ AB6067B4057A35B7E507ABCBE265581A2E60D930EAB40763A9131FE72CD14C15
+ 1AFDDE4C0154D812E7222A9F587CA1BFAF7E70F05493DB925A8ED8D97D07A30E
+ 83633F45923213D47DB0D546A818873AF1DD0FEBEEFC2F4BA27C2AA140954678
+ 7A3DE247426E23CB0B5C0C2A535D1378AC6C153F7934542F3F0803AAB9FE206F
+ 67EA2A77C782C72F0214A3EBA8B4776214BBF5537EFAF0C8864B6F7847BC07E2
+ 538774ACD5727D517C77F910035857B3E6869D14F81216E35C615CB010CE1692
+ 79C7F8626498BD854DE0E5E13D50B09C16ABBD96D3A817E53CD541454BD23797
+ 8AB95BDAD2D0CF607BED989668A3404976D194DE3DBE045292061EF685560868
+ 54B4F11CCB21489E7A2DD8C120E70A7C6EAC263B1B89401981D13BE1FE2D3AEA
+ 7572935DA23FF1FCE073689EDABCE1144C31B4521811C56D0B787551AA6D87CF
+ DC7B1C6936851BBB0CE2923E8CC97C30E3DB86F0588DB1CBD9751E3806669089
+ DB0F32070C9DD2310E54313113D3D3AA330A99B4893D8FF077662960CA4AEB8D
+ 6FB4CEDF2ED2926597D155A7BEC8EA3011E735D9A7B17EBADB27C09E34E5909C
+ CCDFE5B74556577A1F31073B9BE6876F397A6B51C415565F6CF4F8477876A909
+ 7AF23CE9283F99924A00670E377FC6CC2C5A2EABC51687C0A0E3E7833E270520
+ CAAFBE18BF863B4B950F6916D6CA8E6454EA76C04931C7BC883C0070AFA0DA33
+ B3DD70DE68114E8A1C6E164D227A3F8F317B73116043A0C145025CC8A322A637
+ 583C084D10C5F154EC29D15439DD8F436A2D4C56D56D147B851BF96A3F0535F4
+ C0B865CFF88DFE0DECFC6AC9A30F51E6768BD8475E76DDA2D8FD48C5102706CC
+ 98CB773088B05F0492F2F82FB213745B88D87151AB317085D0444492421F27C3
+ C01B3C1901BF86E719ECBAC5525F9B0FA862F3A10E549B9F07D9F3B43AC51BE2
+ 9E107E737D3188A91CF57D7C739583835073A7082E94336EA42BADB20918A370
+ 2E5E6F121C11BF956C3C23F1F1F9DFED5F187DAFB3528C6936BCE11AF4793087
+ 763B4F2F4A81592EC7074D2ED1BB0724D82629CA7E054BB2C1EBA8B49486A11A
+ F8C92EF89C735AD88242C3165CF44EC64ABCFE378C1EFA1F11E979C3D09DE332
+ 1DEC2A8C1CD30E12D4A960CD33C72ABA46BE1BA9AB05F1746A1F707A746F5AC9
+ 023910335FFE88A5F9B9768A9673845D30C201A6CA3C2E65FC911EFAE8E54BCE
+ F877A8236A2835CD2789A31EA9F7F422FD785A3503AD0EFF2B58105FD86CA536
+ 938DFE5549BB115FF1170E31EFBA8E6ADA58730AE2F3313913DEE77E01D97EA7
+ 71C5FEADD8DCED4F881DCC1A702BAD8D36A0A26C1EDBC4F00F0BB21BA91A4090
+ 8BA77A7CD5BBF1D25BC0416B5DE1456EA3188DE97FE0EC0797119E9C8E81FCB7
+ B9B137E9E4DB829A47A4FDEF03D93F5F45197F46B2E7C04ABFD55C960C2F3BB8
+ 7A9EBAF2BCCA67D6D78DC86FC44F55730490DB4C00EA25CE4D4A5AC4AA45B973
+ 10D3D1B7CF84E5C3877DB63EB307E3AC2FCB62FA9CCE135A5809C7D77B20983F
+ E2471999B318EA15D8A33389A86B84EE277BED89971F32588795B64767D20621
+ BEB1C7F003F9AB28D396C2CEA1B668C570A90CB21F5E69F440046D2E255E8DD8
+ D0A30521005616262259349A174E88B8CF8468B94876DE0CDC2C2AF592FBE1FE
+ E94912C87E4D2EC34A10700BBE528FC38675766FE8DDBEE5355D2163156B50FA
+ 2B74CBD15D3950D36521F6E971510A5A6DEA8D50D0F4B3A9124BA2CFBB81164C
+ 351E911EDE208416757BD186DED69B24C81095A7CB7BF185E5B69B842CE11CF7
+ D80E92CA194E46162A5EE583A61C212475A0F9B70F5A8FED079DFEEF281609E5
+ E7A953EF08DCF8117F9872E392395012EA536B8EFBA94DD04D94C1EF7714DF01
+ 482BC1D9022406CDFDD713F8A4596AE80CB3F211DC2942FD033401D236F8D433
+ B37A27FAF8362C22A69A558BCB6F6DEFC0F853D379ABC4706971E169EA482ADD
+ 2BB3F2E91972C87BEF275FD07735815E0589FA5C02F2A51B8EBD6DC6333738CD
+ 1D5C910A279E9AEDA7496AFC29E36F678C72DE40EA33F2750A36846A2B0D2A0C
+ 961D48289B981A2EAEA7CBF3B215724FFBFC720E949717ADA630CFCC704B1307
+ C652D4ACD8E662380F9C2E11088BFE6EC6ADAD402464BB35E629B05169A78927
+ 11704A570B24357C0E267C1700BF6DC76A2BBCC6F8181F710652DF2A85BEF960
+ 241256325284F09A457DCB98A6E8D273952966804BCC023A216EDECAE681A522
+ 7314668D3B38C0FCDC11EB7CD50781790509BD9C0706810CBA7C7F4F0D0AC364
+ B6732C64FA47A65FC5DA6DC109C18F4F52E02DEC24E434D9F6BD9A53711A4042
+ 6483BA0C7C2B8A85CB30D4F1C5F0761F61CD0A99890D7DAA6C97EF326BCDC88C
+ 0A9F6C6C2D57950CB482D4C4E7E3503FAAF70850EAF284D73A4D7CA5440D625D
+ C96AB5634CFCC923CFACA343C0A3A361756D55EEA1FA1E9458DDF965C6C0721E
+ 92C5A066FE13F9F87EA9B3AC013BE4D5E85D7948F182C1C09CCD3C7945035BC0
+ AB8BD07B2F0CCBEC6EC156340F12478E47F28766A3667960BACEC484E745663E
+ 774177E99D32F9518A31C0B88281D6270BC5DF83CC23D686C25C6796FBD4E617
+ DB97D6F572BF4E91E1738AE1F7A7B0FCCC4EA07E5587B99836B6BD04949A5112
+ 9AEBAF7D89259CFF3E03DA661B3B1F82BE911DF21E45A4C3002E15737170F1E4
+ 323B0B7A025F0987FCD7F6A7C9EFCED4D09DDB60F10FEEACFBB32B898BDC4413
+ 0329D6D1260176B9E2AD358DF23C526DBDFB27F6F2FC81E3B4FF796D3D1856B7
+ 25D2A48B2F82BC1EFAFC038823852E753ADC3614BDFC4B5240FD8F47C1DCFFE7
+ DF66DEF58D9E1633E57DEE8C7F8BBC9BE0884EFAE93894B8709D88161CC43132
+ 695A72320B57344199C502DDA81A446D1320DC4B62B7F6D7D7CD43E94005DD7C
+ 88F0FA0E339869EAB6F0859627F61F5BEDA3795059388222DB4FAB385D681BE2
+ 926000A8009A42A1252104E6FF7F1490259419F89A47233D86E083A5AB852AA1
+ D3555D05F4B6B52C28479B91CDB53323517B6B40458AC4A3F567DF142B654D14
+ CAD1A682439D29908E29EBC65889A472E9B15E6468E9ADE97CC6FE90945702A4
+ 262B8E6BD70D0AB853AE8E57E302049A02139C82454024093F9724685C8B8F94
+ 34E23495444F3B8D195B1BEE6025286CD66DD297FE7C5350BB3F4AC0A23D9B6B
+ CF0D4A411C7D018291150EB9AA5351030FB716D1E0FA5ABF14A1CE6D98AE9F03
+ BDC1497FDB995F1BD7482673B12BF732709B22B1EEB113A389AF650BA6CE57D9
+ 9CC63BB5A3E8D0A06480ECF7C9A87436C239219C246E42A7B5AEAF43DA8042F5
+ AE62704E332B12A5344D50F672099E4543F5CE715227B347D3EB34F01CEB1FC7
+ C2C1E151B787739775647A7F27A6DB802AB28F2A83472D8EEF7A74BE517C61E4
+ E6BFC3FC8E1022B63623FD987629C10A4B0E8A8563F2E6CDB34249F2002CCF4A
+ 2AAD7677D6298DA001C00CC59A45CA32D7373D3146737A5DD6D9C3FB40CD16D2
+ 37A5F759FC904936856CE916AFBFC3099D8D8CB48891002B222110E169D32E61
+ 53442A14A1AD51280B918029B9699AAFCC01B0821781A23CD5A5159703A2C2EF
+ B9BA7DC8FFDEBB091A0703426B8B37C37156BEED1B67526995BB659CC9757171
+ 502C27380D4FF5D3B84D9B50DA2E7DAC00A9B4F737E2F0259D3678DD3790DD91
+ 3A59CF899F89C68F4A4846DBE7D1F5BE4D544C4796B086E3D93D199D6ECDC003
+ ADED84D3F8973364BD288B8A662395450062893C1237F6E9CB438E1F9AD54C48
+ 4DFB2C86D923E7D33B6E42CEF8A55F0A67238927D8548E8F9D27758B8D1E72ED
+ 9AEA686369CDA9CBAA3FADD8BC374A462D955E641DC537E2D581D641F19062BE
+ 34D14F7D120ACE457D58D888874E84A44E1706AFD76AEA9C956BBCDCD959837B
+ 7292ACE14D63BA658C049255AAF1191A797FB9559C473521FE3E8F7A6E5C9ABF
+ B539268C27554413C9F1B7B822020C9949732F6918EDAC9ADEDB11E049C4B239
+ 3672F95D00D6BAEF22EE08737D32820D7CDF18EE825159577F65B5ED2377A68F
+ 2FD871D4407D212187F5E244239C35DBEE6894ADAEAB8F5CEA9FFE0F2F2AF3EA
+ 9F99F097AC38F210D9EA5C66700058C33E5087E2003E77E2D3E7BE37E9E7B0CD
+ 2A9295EFEDE8A0D1154196ABA5CAA8A5D65A1C0205FF05237F58C097B78A9E7D
+ AE71257606438617BBC922D7808CC73897F6605B39EFC269E674F6766C52F061
+ E8C14DDF8E6F1FBAB411F50C4E9E1CB90541403BED5A569238A62F1B38E4FEB1
+ B9D4C82FF075F64108679F06DE974C2B98154F8E71CBC4445AF6B9D43E715C41
+ A424477DC3BE7900018EBB602045D605E9EDBCF0457F45649D869489A7B7D8EF
+ D0B5B00E0EB522FD0C67453089839D8601625F03E646CDA3E9D7B03473597555
+ 5D6989548EFAB9D2AF83E2F8C26CDE5A9DD7FEDDBA3C1865444027ACCB3AF41E
+ 20A9ADD814E6C60315716B618E75364EC70CD99FAA93278AE712C5EFC1DFBE96
+ 579144AED2BABBC932665D840B48B9FD71B263A1D86EE2A08E6DCCDB791720C7
+ A83BB28A3629DB628F623EAD1E8910FA6B905E1B9639E2EE4812B5AE9C42AB1F
+ 9596508320EA819B33CFA017F8636707C24106DBC4F3F7E56D0F726B455CF905
+ 6117383B6994F9B08AB0811FF256390717726F0EF0B97D98C514234722E87B33
+ 0957ADB0E40AB53C301F363AB2006663E8511CB09B4791D5254A8B42C01D4653
+ CE459F2C8F44410A3975126E2F12A759CD253881D9D1CF91A1A62B056D84069E
+ FDA1A4B9D76B2019880B1C2C5AE9DACDED2FCA522B507425C033C39D34E914F6
+ DC4CBACBA8069FC4917AA791DC56A9CB90080222064CDB87CD26E89B79BBD375
+ 67FF6BFE2CD60F20A808C679C130B66FA17B31E6C3F41EC28BD1C4C2A96E944A
+ 05662279988A7F41E1AFAD375138CEF9288697CC55BF125F7AF57B6843C690E3
+ 5FC7F7B2802DE0260498F7D723923EA12A5DBDE2BD757FF33E2EA8BAA974E53C
+ 890A9E1C29E85484D7176A63C038ED69663F2EDE72E54F0C03FC546D8424812B
+ E40EF5DB62C7D50827671FBBCF27F0A9AADB8D15E246ACEFE25BB49430C9C37E
+ 415BE72ED38AE50B22B5C9634ED88ABFB6438DD6B13C74BD7CB9A6DDD234BA6A
+ D281AA1A5B567CACE5738227295BFE7C18C868DB982BDB0B4D033AD60FE20C6D
+ EB9353877904F0C8B4D951DEBFD96DC897C1084418AA332A063017016766260A
+ 4F48298C2BD39257D40E8F75FD3507EA809E4805939A59E9922CB15B2EF0ADBF
+ 5BA0FFA96C67DB2220B5A59AB03F3FE3A365116746798892CA7285F0839C7FF0
+ E03C450FC11C30932C007E12A6B6902B8834A9C067B6EC5531CB137371C533F3
+ 75B17E3CC307D346944F80A8DA6F3C6C2AEA295A013EE084E7B1C42D158B7EBB
+ 6B5E30B06C379EC7F66B8CB9A50DD34A8233E1CE18471A8CF7EEC646D3E378A4
+ 453D932CF50B7E576A005772596B25B11F78B4BB89973CD55C40E19E2DA99135
+ 1CC77D7B2449FC7339466DAAFF480C5269E55A16F5A71BC41F282F466276E884
+ 9332EB5B86E2D96F11AF1E5A5AAF521EA203062BDD877415DC357896D5294897
+ E1EED1CB0EF2F3E52E6AA7AC396662F4E7DD2AE83A740C961A322EE11846040C
+ 81AFB289A4D7F422222847A164DB13BAA768AB50FD177936FCFD117BFC5EE961
+ 4EA21017301254C78CE6D18B985C463DF43044C2388D21E4EC51BD489DC170D6
+ B712359A6735B19093A25AFA743FF0D1A88591BB2D5876DE9055C646F75A1510
+ 198B21767C67A655C967093731CE31424AC8C63C4E3654BCDCB90F2A2DB9828A
+ 91A97EE0C13C1E3FFEEFDA52C4F2C326552EB93F2047CA1345F1F139BD9A9649
+ 81FE4F0BC006CDE8F3EAEB3C5E2AA537F2F9A770ECF05001D22EB192C5E83AE4
+ E6E2757B1675438372CBD0BF4BA3680CFE9387E834AE7F6741089D89858DE31E
+ 57D0AF4113157CE1B79CE5FC3880959B3179D488345DBFA33ABCDD3213BC388F
+ 3FFF9CA54083A0A47F37D5CF1EF48F9AF64AA904011A0DC5580D9E5F9D02B2CA
+ 61F9A74805FF7EEA16A5ED0A1213752AFAA894F5E750115B448EC2530ED5DE57
+ FEC6F6AE773195F5E907CE9918E0AA6602CF974CADDE726C4B4EE2A05549F168
+ 76C0EB34D633F0C51F6D21D34BA56706775BE1023A8889CA73E28812E1A8D5A9
+ FEE81C9DC165557ECCA94DF7CE945B3CD24CB0497137D3297C635AE9305D2CA6
+ B705F070A52D127A1B1862B72E8C2815CBF23EC80CADF7239596A5F2012E33F7
+ C87B95531D574F525555F4FE8EE0662FBA341DABF23EB24F8026D327E039DA44
+ 89362D91C2D138E6D768B49A4F8B79F56641DF6F16562FD6416459DE3BDAF053
+ 714745C7E9CA273D57BDC647E8D36FD750D1871CE0DAEA9454485E3AA1F981E8
+ 0791A6FEB2AA25AEEF544B7B351FDD2CF8CD64571A79BC199A288574D7132B8E
+ F24DF197828B625081CE072AF9001AE81DDDF994F369DD52E7250E8F42EA55C5
+ CD0AFD5572BE4FECCE06AFA0A48D70A929838530CAEB5F6179B37B9FF84958AC
+ D0E615668A0832A26CF95C53FAD456BCC0AB2C330024D8B85D249D2CE6FF67AE
+ 39DB4B95C1AE20BB730C9F268892B0497C8D353EEBBCDA5B695E449B7A5D164A
+ 9BE1319BD377E4097BDDF21830C18489CADE6BABF640CDE853082CBF0A3BF931
+ 143422991DFA2D7F670B83BF78730712FFDFD4CA4112CC6934284652D8C1DC0E
+ 51022CD9F1BE46CE700D458E5B1BB0917D871EB8A27256897E042C91B6FC470B
+ D41D75F955F6456D55FFF7962D601EAF6E066A7781381208F61E31853317F7EF
+ B638C3BBFABCE1C8C68944C36DB2DD375B038E0B5F10091FAA0F185884C238A7
+ F983EB48CCE8CE08DE7BA22C8D670EECB5402F3B335642B92232BCA7437E45F8
+ CFF3082A5D0DAFAF3D06A3B05DF217CC131EFB7EFCAD55185E1A26C2FE2A30CB
+ BD1B783BFA2FD5D3C003B30DF8F678BF31600E19DE6A824EDB7B0437603F23E7
+ B68003A221E125CEB715E67E6FD896E1B835D43426E69B3978AF9FE9B0B32966
+ 8C27EF77BCDC956AC40F9B3832306CE237E440D796968821AE2DC60B271F8ED2
+ 5F09BDB5DF2BFCA8654EC28FFAEF28725F2933A068D2ACBC1B217FE6D46D700C
+ 208FD63C717282D152EF5BCE49F2B1A99D436A84B502AD48B931CC9D13F23483
+ 0429A536EB8E2145B96736D9A102D65A5F3E73D048B2CE6DE41D566116785D90
+ A4FBCD0D377F6DEC7EDB4047D850FA8AE349C1342E39FB3E9E21EBB3DB3906FC
+ 0FA3411F6175CA8B6DBC99123F2F94002E1D20B98FBA8ADB9C8FAFF99FC67093
+ 867FE1F1D699EAA27A3E90E6B8EBB4A5948E6EF426CCA1E9F9CE276E73842161
+ 14E6268EC487A6CA0580BF4550C7C3DDC81700DBB4C58A8303CC76E5DBE3EDB8
+ 7F80C22C857D60FB0A723374EB7DFEA1F4A987F14757EC1870719701219D9F92
+ F01AAF8E0F5AB1E245361D235AC7122C58F66BF57D401CE9A17BB98A994178EF
+ A25126EC3DB7CFC26AC8942877FE586B566CCC61C07EBD44CECE694D36E7287F
+ A9B5B022DFFB7C1B56388FD43D2AE2D0A6630D28A4049761BCFE117FF7B55EC6
+ 47606DB758AF1FA50AA3FD5C7D1C766BD88CBDFCEF0D497D4C0DC0F6F2860547
+ 35A2D4F79C65D5B8E43B9CA952622682ABD20BFB2BDD04D89004CB1BBFAE89C9
+ D373477ED7CC7C6484137B77EC745A34364F88D9A0C53C1DDA908B50DBE2AD6C
+ E1CD8EC1A8BE3AA9FF0B2DD245D8FC50868989D93B05FF30D8825953EF79548A
+ 89578D7BC51D3F8623987885AD56C4076F35D10DC10EB7369769C5E9D8EFC993
+ 644D5863BE900DBA3886682226407E4BD2B3CBB3F0BE8A827555C7CCBE07807E
+ 81A5235F10321CC7AF816668973603E2BADC29ED0718245099C3BB0F8027D241
+ 4FEE7A27DD8BBD52FF76302AB688E6C452EDA6D6AE3921B430EE62159C960B4F
+ 7E5078010F6419F24DBEFBA09D9286594EA69D6B83A83D9C7B706C4019CDCE1A
+ E6702B4096EB885CBFC0F1D83A1643D9881AB062734810A35F780E156E7538A2
+ D8672E00F98CD218D7AD59382435851597C6FB5C681E99AA3B54D984E1E6355F
+ E7EA8B8F9D0AB617733FBEB7F4C77922A131D8FD4513BEA5B52C07EFE1D0AC44
+ 85B1ECE90F3957B1583FA02CE642CFABE419A79D5D7B40B46D68AAF77B731BFF
+ AE71F66F4A8B5180001605D4ADCA0104BC8DDDA2E75496B2FAB5CD5E26CB1194
+ FD71A73EC803DB5726D7D8CD98F17F059E0FE003FE9210078956A3F829241CDB
+ 2C66159AB563AE1D6AECF15F1AD3588510ABD7B5095C5EDEE2758DF8A074EFF1
+ 4CDC2A369F44F43773849691B4BDD94B87C6C2300276D2652BDABCD8354A9C32
+ 30CE2FDD010645F586C41D4AEB1168940AC38E485C415396F6E51174FE49BC04
+ E0F4A41DCBBE1FE050160EAA865D0A1C2C7BD9EDEFEEF6B2FCEEF92FA2E794E3
+ 5D48B0A1E8FDD58060CA6A0B49D1D99721BDA689DDA975D523EE96502E88C529
+ 1217AF7920A1F79F19E0327FBB203041B9DC04DD6324C285B87A8C76AF32FE30
+ 9B59EC61042511EBB5D21699495D1C675330678576B5BD6D5A611CAF8825E628
+ E0E77BFA9563AE8EC8388CE431D2257C88E1BD6C0A919E8427BAC54F7B9FBE88
+ 87C60A5683A64DC8B001A52FAAD02F2F557A33F9BA4C774086DFF5E0CBF45599
+ D23642AC8513F89905D96FCC32784B0F2C61E0FC4F3B32AA7AE08D65404845B8
+ 6C8FB766F111F4200F1DB20EC50C2657E96CD1E25B43AE45A4B4BF413E2D9FB8
+ D78AF6F6BA1ED3438F167E197C40AA586B7C3BD0CC3AFBAED567A8464A902E04
+ C571780783F0AFA3CBA16235A581381AFD266145DE84F23A4A3962A7FDB54A57
+ 457EA9488217E54862CEDE4F291A0F7E79CCF8D2C3D0CD8FDB280CCA1C425939
+ C837715B22DBA1E1D0BEBFC252C45B8F653794C13913722F486C26E75CADCE77
+ AF57571C04F3D0FE0A0E2A0BA88D46AA758B0EFE8B2449D97F27B37D28509503
+ B6078BD53C505E6922AA22144857B5BA47AB9A13A6DBFBB03D03FE7BD9B59371
+ CC59708A7C82FD6B0483DD845D53FC8CBDA75AD21259C7DD96C7E823325FD8EE
+ 172C6A034717A3353F7361C213C3E7C224152CC010BBE00B75CCA4EFFC122434
+ 4B267CA4FC0260FF88AF16D4473E6BD03A0089D1BDC389BB2D0A2BE9A6A79713
+ C2642E1D787F62DA9102EF9EE3C040FF746C933240AEDFCAB24CC03594491D0E
+ A7E451CD51E3A681CF7CD0F09BA2F1D7EB6CF3838D3373A7D88E04AB2E6CF446
+ 851617CFDB8BACC4AB63DC2CBB9AEBA4F75A217BBF8200A24C47BA6B9EA62E67
+ CB66CB16C449DB4EC5283C8C2DF3CD1F6974E95FC177B9A09452B3D66F285756
+ DD0ADAA460F3E89349C36FF759AB0BFFCD811F2C03E98DCA3E73891A4BB9403C
+ CFC58F6B06E082DF7B14A9B981E0715D0C51E847614B144761FFC8121C7BC226
+ ABC2F1F140D3C24B5BDB56B489E5D2C3E4B9F8FD1A8F8885D950CEDDB16C9D26
+ C0082A49CD719AF0690A0B597F5CEFF356D86D8D948C943C9AC7BA0717969B8C
+ 9E53D837884195C5455639CE51EB71184294BAAAD10D60600EF53E600ED09D84
+ 155629C4F57BED39943CB09420DDB6D6A689D147ADB3E2F839E0D35866875E31
+ 03B555A16D3EB508A6AD112496AD5A075561615C498DABC6CBE8E29C2E289D18
+ 0FD1E04BC0AAAAF54D7316C59BF8A7D0FE929A9ADE643A99C29CB8B5EEF9D0EC
+ A0EC5886D7C63B2BF802E6838F7C5CDE3BB885D1B4866B0E854B68F6B071C15E
+ 4CED37F535D56F232B68D07D9352372987A7D66EFBA92FC6C42CB37F857041D7
+ 6425DCB774523D16430B5672B535AF436599F760DBAE1CF7C33D9637DD8DF283
+ 8B355BA6C80674191DF895FA92B54774B42BA45C7B0FB08215AF42943140136A
+ D750719821316AC907D72AF38C4206A40305A53D17DAF53198CBADA262C77AC4
+ 75EA4A4DD77037D91E76764A7BA4573A610996ED3A721ACECE828EE8D0704356
+ 0290382EE000586053560E747C65B2CFF9D16A4C7BCD1DD4016B95457CD545BC
+ 8A1B3AB239202C106BA9CB13C5606D8FE667BBD97D71D424C8B108C09CA9EBF0
+ FE003E1345803D249E101F4F24C8B9296920EB1057ED5081D55CDD08B289289A
+ 21252531E494137765312365ED5FCDC994DDCE88010C31FF63A5225344E67063
+ 09166712A9AAE98BD976D6EC42BFF36BF20B6293707B48A26D60E136F0F8B0E2
+ 4B264A41D54447246554F596C04E552DE0271D0DC22A788AFE6E78623D94CD38
+ 3728C67DEF29BC237AED6CFD87D4453E06BE19E12B69AB66CB174D5EF85441C6
+ CD3133C5D8030E628EEFEE11A067E8141213E6398197B47FDAAB002328911626
+ 8D40108D56316D8A9554D8487C5C3531F8BB03135341ACA5B66FAC08DC4FD018
+ B3DD562A6D32710CA57141F28B461D810179FE2313488E17559F486EC80EFA6A
+ 955C19BD0D7F58A5D2D319D3249EE8488931EA56F2A92A727F7690F6CE5EC903
+ B296DDA6AC3757523418A2D96DA8810B4AA9DC746434DC4540927849BEBE96A1
+ C86F0492E55257058C08B13F97DE7B9EB8C3B9355ADC5D4401D1E00876D43341
+ 873F064732F136F18561EA03DB2BD71FA728D2BC7D3E070AFF24F200BCECE913
+ 0D360614A3114089CD297C85B6AAECFC29FDBDEFE4C9C67C2FC390F148E50EF3
+ E38719E2F6471758B3158402F90A239F17F26983201AAB0E0700C9C2E32F4444
+ 5DE750154DAA72EE4AA53185026BDD2A23DBB630C87DA4FC51F1C6016399C09A
+ 284282745FF0049EBD208873EEA93EBB638F8F646D10D99B759604D617F5A1CE
+ 9D8D9C8D5E1DF497157497D147C509E1B584986E93F6D85864A79D417944E1F0
+ 2A2FEFFFCC51DDD4470BEF1CE553A7E406C424187240D221704A2F45017EA94B
+ B9AB319074FA0078A046E2F10F83D9FAD2F729DC762570017FF61C4E6EE5319A
+ 2BEBF3BD9F6392DA468F5F5472FB09EE7B4B3FAC19EA648ED1D5EAB5598193A2
+ 4B0AA0E69F2015FA20CCEAFBB75047D36527DD7A58643D6FFDB0F7E98B95313C
+ 35A06C2D98535055D04B55B1D616701C5EC6E71D497D5224084CDB92AE80C7C5
+ 309C9C23CB55954B26BA124B6D8A8E95AB0FA759E3C1CF0430A06D5BB7A8F5FF
+ 62CDF1530B09E0F6B6012AD85ACB62F3AF7AE208FAD8857339D86944716B87D2
+ 97F76489B0BF3922030B51587AEC7F452B69E8C16FFEF7405BF365F421044EFF
+ F0B2BE653172DE00E2B51736839D1707CD47A5E835ED694917F88389CAEBA855
+ D35C672186FE2F349C1AF67ADB85EB9E1EDB563C33017C40DC18AAE3F15D8CF4
+ 25116B0F888443A38D9AB76DCA31FAC4660AE9CC0879B1D7C565708DA4D3DE43
+ 1B32A6F80542202D3F4A00B1C525B3153C3DFEA43E37BAA2E123CD74ED5F70C5
+ F2709D715E003405A1255AED63CCAE605F93506D9AF5C192C3E56832E9F30D67
+ A10DADEEFCAE0F9A40DC1BFCB35191B8EA36BB1479EFED817FF10A536150C721
+ 41912891CEFCBA381C423CC8C484EE819E0E87584F7D2A065AE0FDC204AB0510
+ 2FC186E4FEFC78CFA2728ABEA420547E0B382C663E61422A74CA7E883E3609E5
+ F213B85AD58EE17EC9508A2B211F710CDD6A7A30A35022055B855F6378EAB2BE
+ 240B4741693D19431233BF10C077EB3622310CCCAC9DC4C3C1A19DB8A6A5F11A
+ C67374F42EF95ACFDB76DEAFF26DF395ACEFA96E17C1F1CFD8C5F4FA5ED30278
+ 7A275B5BA38DCF85DE620C8A00DD1EBA329B05ACC3BF51AAEBBE3D997F7E099F
+ F5F1582BE3AF8371244493E55C545D600BA2BE3E3776BE1300C94F68B673B762
+ D6224EA03385475C2E1CFBF96BEE9A959ECE84CEBF2BE09C43FDB040D30C5C38
+ 936A0B4F247D7ACFBBEB24A44CFE6A32D5E19B105C8A17B8ECF3EB20E25B4BD8
+ A44AB3CA654D52188DA0DB64B14CDF7F715A1277F697A90089DD57A0DF687202
+ 80A5AA94644102AF56694C2747270A37954B6450B683BC059A0BEAFD1690C098
+ 32B58EE07E0A1B6588E7E5A98CF34278AF39019FCD9E7025B2DB213BDE9CE3E8
+ 214AA55A1AE848B320E76A1146DACDFDFEF57A2E4943C0BAAADDCE294951878E
+ 51CCAEC70FED225817BAA3D5AD8C219B13812661E5F8D0B1B3FE8D0DB3104EFC
+ 199B93F6D931E85E5AEAC9E459831170E809DBD9B308A4AC4C44DA74D425538C
+ 21A2AB0738306A1438D3CF44FFDFF5D057E6D0887C8488934F1AA9840E7EBC9D
+ 5A949629949A82AEDF6D87B45B4044093CC24B64D0D8E8C74FF1336FF2E4E238
+ 054EA9CB2ED4436FC9567458D0301312D3CE7314D641B6224057E617E902C6F1
+ CA3152BF5C4ADDFBC021198299583E9F2EF014BD6109413999EE5F371B5A744C
+ 2B8B7C4633B2A902F939090AAF77DF909B4F021D80F91A7CD8DF18AECF6BD94D
+ 23E69570DF5B5619532012326F6347F889E0E22F9E1165E9F4B2EFCEDA0BE3D9
+ AB90C57BAF1EA87E5E25B997C77B548140148B4FCB268AE927A9C448359A7AD3
+ 645E433242ABA7D34F5F948BF598417EA8A1D91F2AC9B27E79BBBA9212E279A0
+ D794797E87F600DAFFED607B86959A759F2832D0225D8058C231C6BEA2981027
+ B1524CF43D947BB469BDA67764403080F33DA089B62362C7CCA4A6F95B7533B7
+ DC553D1726A82B74F3A4DE1534202D2A7712126475C22BE8B876B30F7C968EEA
+ 3A26562C49E4B8F20A48EF0C5A478A7E5ABF4E4C982FD1BD8A9DCA5C12F2D88F
+ 5B53DAD8FC18BB75989960069BFA56C8CB83AC916446E702F82B62B43B3D57B2
+ DD0F9A47A70211B7EB07D2AB6A297CB06BD2F72C0A264281D6BF99E636AB3F49
+ E5CDC67F2962BBCB0CB70B9FF66A9D631BF42EE4A3217264F7815C141DB66F7F
+ A633AD7150B76F1E364A6D33C178B6646497448488E6ABD3ACA55C191F76DB9A
+ 268B5787BD6555BBA3DF109B52DC5FFFDA7B54F3AED7ECB29D22493C31D72139
+ 4E49D4150C7E6D7EADEC2678AA546942041C17571F1E4AE81CFEE3A593790870
+ 389DC39FCDE10917E863C46A1E40ACDBE212A3780B3BCD3495099B3026D7C42D
+ BB9C9A4E1A44B0D8C5013FA259F081A567641E07FBF3B0DC278EC5FF271AEC28
+ 2745B17A60FAA4812BBA24671E50B7144B0D686524F5959F36F29C9E475956C0
+ 0237172B0BEAE2CDCF08C153A03A99F8AD4753185F836111ECB6C500FD6AB4FB
+ EBE0599BBEFEB59D4F529CF206D5E342292348B2B8F0CD6B59F90D940E4DEA2D
+ 4CC61CE08D728653B7D56197427B09B90F06D479EFA3937EE3439388AE5C7726
+ EC72D2A51AAA09DB49C49C439C06CBD1BE16BC633A60A5D2162EBFD984A8B364
+ ED5F145966CB8DC129A980116F5379D5D4B039782E377ED397D59A20F06E9333
+ F7AEE48EB502C31C89D9D642D63CF1895BA62EE171546FAE203FDE5B53B311CA
+ 4641768A821D653C683E3097988DF7A354179FC5A47708F7EC20149461BED8A3
+ 55084D743A115C1438A212BF46535CF9CEE6F437FE0A637EF5B27401E6967C11
+ AEBEE3B044CE9D02805E3301D2FB3A0F5F00AEF082F51702AE4689BF220FBCE5
+ 4508787A74F576DDC6DC4514F446938DFD331DE5E4E519B7D6871EA5FA1AE260
+ DA402F6DB6919A6B0DA02764E5EEA390DB9806311C0597D9D3F25E2A7977EB61
+ F8AED9403571934E56614F3AED73265D1794AA3580D561CB19F154546F0AD1E3
+ C2565DDACB0149B771541551C71AD7B6C181F8101DC4376434628A2DAE345331
+ 39DE8F8DD67E6EA0077D285B91AFBACA260D1AEE256DCB6D4EC744FBB967F57D
+ 524E11C5531AF1FB78469DB344E0B5EDD6E55F030ABACD77C50B593C45001635
+ 9B8E97BCC0A856F145D71FC868C9811148E9B44B7B9DA90D88482E6823FF289E
+ 02DD0354CC2BA97A60D1DE7D56DEC4B0FF456950F516F4BDB2908485E27807EA
+ A51A3CF11BCC81D3A9575761C65EFBF054A38591DD62FAE8108C04854154E75F
+ CDF594C9B14AD2E0A97D6DB1940D6D882AAB867091FFF864138D5EE6E7F898EF
+ 64FB106F0035D9816536E699051F6347EF854BA1F10F5DEF45478A3050DD12B9
+ 0C5BFA626320DC9DAB7B56BE3636A3CAF827B793724460899757755918E2BF91
+ B1A3DDFB8E3F69A8D2FCC1D9BE3E7E11BEDB4C318D34CC6813A4D0BCA7484992
+ 723409E89B85FEB06C98F5749F850CFA269EBCE996DE990EC4523436334C89DF
+ 8BD8F5ED431B54F887F1CE678DF651AA5AFB5CBAAC2A7C888D368115319F3606
+ AC1CAF7C1A76196A56E83F4CDB34C04BEC725D5AB8753B141652CCED1710AB42
+ C25644AAEFB8F079E8D45F7B5BB9B435A80C2137EBCD27DCC53E8B59E2B258CD
+ DDEF12CF54532540D3A6E4953BC7C24321542B3248B8DEBB3F7922FC5208979F
+ 037DE5898C407E32EFC58AC958DD5635C199998D4B0742013A536EA6CF28EB73
+ 61CD12FFB4EEE4204174118BC2554DD88197A52B290970D728D4C65DD9621E58
+ 2FAB5D31627F08B6BFC18D244AFFB69B72E7AE47C9DAF05988A70E711269FD62
+ A3E883D2C3ABDAB020016FCF66522CEDB123E27620CC4E44B39B5E557C00CD15
+ 664B23F27B2CFE4605C8F89970E69876ADA8219CB67153B5A17342DF7FB90F03
+ CE20AFAF03C4E7CD775D3F8D9E9C69EB709592DEC37E92B711669EF9FABCD362
+ C3FC574D666A8E2AC8AA17B13ABEE49EE59A5170D2FB75E471D88320723B2DDC
+ 576E54A24E330E42650B8BDDD9B3838BE8080C855000ADFF6B20F27EDAEDB57A
+ FDD41C5B3C27A557C1078182ABFA4C93AFFED7843EB63711B126CBE589918AB1
+ 57E2D1395B1695F2078B03CE7529ED943F45FE33DF449DE1B65F6197A3AC95D1
+ 50B6EEDDC9F7680D64C14C2AED99628BEAB5137CBADE741FDEC04CD4EE7D24C2
+ 8237BE6B631A7F5091E17B25774BBDD344322D77A9A9278290C6203352DB7C16
+ 87DB0CB44F4C979C2AE37B3316D94152CF21970C770F946317740DCD964AE8F8
+ 645FB20C24A194A04F1DD79E31F9618C99EA7D02F19B18673A8C6656E1F3CA5B
+ 863B56D9D9849A6CDA0E5E839ED20225649EC6394D1B390CA374E32DE1E206F9
+ ACC0EEED44D8C8565A47BBB45B5AA1D268561AC83102A55301580FF33C7B6AED
+ 1B2476459E1050E77C7506B0CB70931188FD3A592D364AC8FB723F8910D20FD9
+ 8CB0512084E4F57A3014E275C93A177BE32CEB05141EB55C82AFD9BC59D7E0C1
+ BB9B0CE8CDEA149D0CC7DB9623D9C6044CB638C2A1B9D9B4D1D95C2B6810C50A
+ 09636DFEAD86E174AD2ABB50759F19EE1BB60EE1E743A31FF6A089FB0D5BAF8F
+ ACFC210065E9868685DD2D157A6A3301A090CEB6947986525CD014D245DA7E33
+ 881156B5A5F29254FB2E54727CF5FE024AA8828C7C7362FF7C62A87664D9B167
+ D334FB37D304446A136FB3FBDFE16301B0A3C5ECBD402712EF3D21343ABF89E3
+ EBC8CCD40296A99BBE47B6DDC552CA136F253CDA15369AA62F42A168FE6FFE69
+ 4E4C5A936E112AEB1072246E6341E5D950FA76F89B5D6505FEBB983476CCBBCA
+ 31C06CB803459628777BE8964EF0CA1F1D4F3B397A26640450D296A3A8E25844
+ A207DFAA2CD381F7763B70E6C63C2837EF6678278205B7AB473B7758CA2648ED
+ A92E77292A5D1FD1FEB89D8FC7D2814C7FF9441AD489F2F72D2ED53FC73DF8F2
+ 697B2C0F1A4529F8045482A7487960AFBA6FBF1F09A424A97F1EFDA9A4CDD7FE
+ B8AF1056C93DF5CD6BF669C443EBF50F286739E1B57A8828262AC7638B90D404
+ A2BB1EA11CCF090789D6654A52EF9F8AC850AFAD9F52C27B6E7CCA6ED24005D3
+ A2F618FF5C9D8D0A6820AB5EEBABFD5BCE0F5539087970EAC64117C860D4890D
+ AB7C7673F77A0170635C889C928E27BB75FCAF602E5CF5C3754DAA86633876CD
+ 52C6E7566F21D1EBAC870FF14311BB4E2B74E595D52DDE3AAE9E7B58F8C7EA82
+ CF88E1ABE8B8B31F8B5ED5001C6FCC6AB54C9C352643D1E32B61CCAF59BDEFE7
+ A0340454BEEAF3BA4DBCB350D26BF9F6CF0BE109CC95FAA3AF291D52EC2E8DB9
+ C98458FB7C58E767BF2276B9790B8DB232DE2C3D139AD6F44842952D4F0D1CEB
+ 3761A46AA126A48CE53BDDC8AF9C2AA7151FBBE5C37EEC7756FE18A8A45CD29C
+ 0E5D191174E9DE37B900D3C72F490B08EBA9663E68AFC62E8AD55BE0330563C3
+ 25431F9A036E64EB611091B10E6A7600D8849FC7CDB0135B79C9B9650EF87EDC
+ 2A0458DEB8FBCCCB0F5898C6F187847F74C58F354B3EFC16AB9D17EBF9961B51
+ B19970687C6390D530F37592ABA60FCCA00C14A24A54C0402296DAF11ACFB597
+ 55EADF450B444EF233F2E80A612091E3DC81620053F377121CC8D16DA84E3DAA
+ E7B926D6202EA64A59D0E129F349E683AEF0A7D51D59C309D25C429230B64C3D
+ 6A9347989AEEB6937A8161C4C67CC26BB136FBD0BE18B99CABC1E270F25B7B3D
+ 256C99B48D059A112CD114133AA85E61561F873C6FB8E0B09F19746D53551C47
+ D77D89AECDE9B1D814235AFB537E77A0B1D25865C068AD792C8F328020698757
+ BB294CA1FD42734AB2486EBEC5162C2710021F4223D4A3F76F98CE7F6E7E48D3
+ 969B5AD21D052385085C5641C287A77213561191479A35E8CD629CB3DAFDDCB4
+ 67DB0930A2B956C90971706DDDDCE4B1371BB0D22DD3AAC237621EC82D40F342
+ 04DC1FC16B07FBCED716B4129BF6FE2CA9C41D0F926FDDACCE5A49F5FCAB38D9
+ E9AF637C2F2D21313A450617300CE255684D27F45D1F85318A5962DFDC7A00BF
+ 299B95E1A85E7DD1932C626D29E0CDA025ED8FEF38E5CC69E6F300A623FC085E
+ 92F121EB273CEBB9D8DA65339F1A4A88D7011A31E52369884C5F55D56D2C6E24
+ D99B329A06A09507326E0D47C5A24D69388EABB40E2AFE0567C99C321775C7A1
+ 4E622A18A6E355EA9770EF6D13706B4DCAEBA182B7BDB1B1E99F2ACFE0DC47B6
+ 765C85F0E15599AFA69008BCDDDE22470C901EA09EED374E8AD79E3A98818333
+ 6B92ABA34192965CB2EC92F91D66B40933851B5AA57D28048009917DC292F95F
+ 3F68FC8BA05572652EFE8D60F1859F90EC716CB1886B5E21D7457E9CE57906F7
+ 7D648F070D3FF615C77C31BDD9A34B1FD7DA9770B05276511D6BE46F0F6AC080
+ 78FF8AC9CF75B5A22F6E7E44BF087FA8477E4D73AE5B5B2A33AF31AA8B10C624
+ 41F201754678CDABBC3B13DF00AB039B1DC26D5422D982F44BDC3A316BC0BDCD
+ 6FB356F4991D3433A830622F70B7B31DB0C1941F3F9BD06FE9850E2EB7E80DD4
+ 6B8ADA70E5A54E0608CE8B680D1BD1FC664951E486B5BC5135BA211619795A6D
+ 67EBBF00BF8949457AFEF63CBBC7956F6001731D43C25D4E532713B3E775954D
+ AAA3D02DED26B02519529792243DE59859B25E6FE4651478626F77EDFCC08846
+ 65AC5DBF140F32D3B814C44F926A5BA3B919E1DFD240AF6D694F136A795D20C7
+ 34A725B497F3A7549F9A3BF3CD39777F23D779D46A9769FD637C6A4BF3CAA4CE
+ 78F7378E3D9EF1545F4346858A3DDB5189E32CBA278F86678C1F4EE22DFE56A2
+ 240157E8C3A080B92EE6458B406366C967EF877530DD9FB0E12F7A9C0C50C7BE
+ D44107AA1D5EF1654714CEAABFD0C3C5FD7C83AAF0F83D7114C6AECCAA176D4A
+ 000E3DA7D8FB3CA39BEDA918CF942924AAD15F160B08ECC564C14CF304294591
+ 3585709F4634C9899E3D45CF469CDAD6AADF505D302F97B88FF022179339030D
+ 00AB98190CA9AC09171F77670B7CEF7B71590318EF14718F8FFBF25352A66BAF
+ A2F5834118E888ECDF192D5F0D0531C55897B435643FEC11E3946CC0E1C4D67F
+ A030DFF2B639699E37BA20DA179980B3AD58F1FAE92F42A0D88536CEEA55E63F
+ 6DA128D50636890EC3E543F5B8EA27DB0924129A792E12E3AC34FBE687603D64
+ BFAE518065694E478787A6BB2ED19962399727862E9C15262510ADC499B16BCD
+ 5FAAAEA4C207468A651B72774C83D5315464DDD24E312AA91C746B95DC012D3D
+ A4117130BAAFFEBB2035E2D4D89B4E6E0217FC140DD9973C906904D82FD6995C
+ E2E203205723BCEA3420CBCC4D3A825462365566F4C2D30ED17A13791E1BABBB
+ AA8415A75FAAC00204FA2562ADAEABC3431BED083BFAD41D751E50CC86D3B0E6
+ 8F359F40BE4C99A298FEE4CC2C861E33B6F58D438D72D17D98674840C8309752
+ B6B35DA1B9715B6E3D967A9B52FB881389BBD4CA3641DC1B6D84D093D41CF5B0
+ 226E53D7AFFA27D9355C964A9C679B7E387A3C5999B1F146B2238C5F77B92D3F
+ 6DCB4A7C4AEC7F30F521C33AADD370BB8F49F23CCD2B35D5DA181CF1BC0C353B
+ FFF250424B90BB3EA4B66E6B60C6DE4F646575F4BA3C76231DD4505488A9F54A
+ C2455E3DEFC629CE2E4143A9F219E8EDB341469F6B436519E3AE9B1F0486C172
+ E6BA02A9C422316AF07A0BE8310AA6F84D0B6E5DD75C1666C5C3897EBFD6E528
+ BA5FB1D38B886EF694AAB231938749FEAC6A5006E6CAF450BBC3C0DDA8A6E917
+ 27DE03E89A22A3FB166909C69176634AC30C90951D98AE02DBE54ED3E37EE271
+ D3D73907F0E6A7C33D45C7B311684AF3436A1D2857AEACF70D2DCFBD1D9BD55C
+ A0647EE82D60147683F41071503D852155D45AD85899B063EBF6E97A15DC826A
+ B2745B87F68900D79ACB9EBF74D9C556079C6C4A1E7F175D411A64AB1584A40D
+ B8F49B98BC58EE95CD7E3B7E2A0EA16A1DC61CCAD706E5E7E58C007D1C9281E7
+ 09F70E7DDA6F141E9DCDE51146F732B1A2C9A5B4BD1E4429A21E74F47FB4851E
+ 0D0E6D10D4823EB915E507DD7CC9E0A7CD3B9A6FEE38F3CD0A4AA85E73AFBEFF
+ 45C84F188C7FD83CEDCC8EB6BDC47A0C754D9EB386B01F5EFDBA137F25D7EE5C
+ 15E4E8A3111BEBA6BCE3B7633CE12F4E3AAA910AAD7CB068B2598069888AE586
+ 8D0183C089053E654B0A20A778C5AD6D428A67E9742DE5FBA30B2A1EA6D974CB
+ B2A5E7BFD981BE5FB045013D326299D428719D59E289A143FDC737987DFB7324
+ A8261A0FF5224CAA525D9C24746A0F000CFA0847394C6A51EA3622CAF7DDED55
+ B726D54B09C6127D0E4BA193E063882CABD22E752D3FA4BD6DF7B448A4F6B90C
+ 2A0142E2FFE229547863ACBD9247809CE4122D48923F7C41A8E4F4528676FCB1
+ 5D35657C825190B3CBC9773510F88F6E55F0A1A14AD46C8FF2921C1B87306933
+ 9E6BC800D116BF568718B2F3B4F0057B9EE15E5FCA85126B720F76A2C6230C6A
+ 411ECCE95E05D38D963D35E350D82090B628CC25BC5C2BC723461033A375A128
+ ED02A20894359BC73B3D111D121DB869FE415B6408D11E7649BFA587871B66DD
+ 6342ADEEF677E5A4B4C5248BD991DD881FBD20FFC442B00752BC6AC3191E4F35
+ FFA0B09A32080B1161DB3E8962548A957374E26581052051A7D6E09A28814435
+ 434E0E48A5D93F1CF5641860C97DACCF30A34F44740B6507A28D812E64EF4088
+ AF34DB5F95947C0BC5C6210B2839479E2F1B921CF963682344A0405731730EC1
+ 0B44DDD919292D2221530278B536893FD16051196A45277175A003BD120A70B5
+ C5BE289575C072264832809D271E55F3754784E51AACC2F6364E3367FCDF9187
+ 7A68A2CDEE368231B72C289C040462D69CDA4E26FC32D24630D08B0AD0BDE2B6
+ C02D3C0BFF00471B681A5CFB301394A72BEECF5647BDB0C8006C0FF1DAF40FB0
+ 55DEBA8C6CBCD7A0DD27BA39180E6DD12271679DC571E5E8CCC33C363CD0DFB8
+ 02521B34139C3514FE4122E3C26248DF880DA01EF8BD421A5E30ECE022E120DB
+ D74E16FA80FA2F1997EB804F17D543B38A314F85FFC4F9566CCA1D2332F4DC49
+ 348D44B82EF497E7F27DEB3B5FC9F66B6614BA3F970138383362D0E59983093B
+ 072805078D6A3C167C79DB82834916C24CA46CC47A5E5D480AA9A44C445E9716
+ 1ECFC6DAE237BF66A3A7217721508905CD33650E08B1C7C511A28ADFF14D38EF
+ 1311EE90312DC74D55D221BE1CCEDB298A43309AD3DD9007BB08A6EB69B13BC2
+ 2611DF4B054E83D3E0AA2AA8BE73F1728D8E0E3AFD6D0411E81DA3BB148C5EAB
+ 16F0733CA1FBA8FBA84C8A3C483667FB62C879961E7E695D607DD76434B2383A
+ 43941B02B0F4FD4B615B5D949FB141129E0B67806F49FA9BB43005CE9F5B5D3A
+ 9E0E95DA897A8B20333922D789A3FF150E7824DFAE2078F67615447E4266D1D1
+ A52D568388A1CE96847B0F77813221E049FEF913E17A4B0E37F5F362235894D3
+ C0C19B7777D7442C39304368631A2881C4CF03C60CE54076B0CBF3C7B91C7392
+ B4B61DBA8D6392885CB7F000DB2EBEDF1BB93117D6B9B1D432CBCE3F63F36C09
+ 55FE99040B0EE6C003B844A7E6BC58F0011E17F799120EAC87424BC8869C8198
+ 67B5FCF19EF4131B66E56BD2FFAAB92DFF34A9951AB9CC63CAF8B9027D338AC8
+ F5D5371C7AE27675E5B8D790A1901CCA7628B4484C64AECE23316B8E17650F93
+ 13906C730C824EA1A95DB9D2BAAB9FB207799873DD4F17364BBABEBA08837F45
+ 2F99F0C15FE395125C816EA40FFCA8662B362663C3C2F8591F2F7B61843291BE
+ 2B6856ADEBE40C00FB3D847B95500CF08DED40133AD625A48D00C31DFA11424E
+ 2063FB2842642FC0C30B07065AE8C02A3857D63E831A46DA8954D6295D41E208
+ 41C5FD103267AF0A3B2A5D550F7B8992B36D2ED2F1C29653309144E025C9C22C
+ B8BBF7DF78EC58568CAA880597DF881A1D9EF50B458C6B35E9E470993F40619E
+ 5C3FBB32DA0A8E33D976B576F67C4BFF6792598160186C192565C3E4C71D850B
+ 6B35356E4A3D2277391617ED635DC10D7761593DD9B45D1A29E57FDBC96F183B
+ 1F6C802AD1F992E1BE9DEF23B0C7C7202034579F1E2108EF941F6884FEB9625D
+ 3EC5BA5CE14E5420B819F7694664A8224ACC2F1BA3D88F5FD588611ACD9F98B0
+ 764583CDD35668D0AFB1EE4C6AB90205A8CA16EF528CA3D6822DC04F9ED1D883
+ 3423BD0F2088E2F141010B159D927AC595DC41088CEAEE3836DCFCF6A7B20832
+ 362B431B359144E2DCC8180FD0D63104F6253B12FAFAC902C557924593948BCE
+ E760488B506489594EC9F6DED77AB531404B26558F2B80247144C7EBA41DA089
+ 8127A314F85B99FDDBA311961FC5CC66FEAA064A0F91567CCFF71AB4D17EF851
+ E6199D9BA9D9C54C90EBA0E2F2187F9A1234517574D5554E2B59F9F152738B5E
+ 7C899B184B63E9DEED9EE169BD5E21F82EEF762DAE78DD25908852F2831E5C90
+ 89F1BCA499D39037282EE83224DCB43D785E13E93BB7D68A43A283499AB86A41
+ CEAD535DC60CC200F60A3DA117E86D53E314F427E3B499B412BD81561A596B54
+ 9E272BDA5BC9E1FAD7E0AA741EDE4A6204065A48108E7C1B4B5AB31B78A35448
+ 7F59056B2ADDAD1470DD94149E583A728F11DCCC3B9CC26210DEA187BEFEF53F
+ 132022CF94D62B1A32E414E766B61FD3018D23F9EC43F7779A5E868E014AD274
+ 6280E3C09E0D6338EA772C907CC7E0864026A567B391C9C384D571239C4B07E8
+ 5D69623F5B334A48C01F59939EA95DE46CB1D7C5CCA3164C9625176700C62D06
+ 8CF75083AA5C34DBF7D99A7BB76A49BA7F86F27655228E7F7FBFBC1353A1F265
+ F816FC421DF7CB3A828F8809686786C7E3125E04FE2A5C0DA940ED496B4FE43E
+ 534EE8845003E23A6C044CFCD646DB1A6A26810B40891D4376728EB773E4BFB2
+ B27F4B7E68EC751380F2D10BBD3F8216D5A8880C5BC37BB7816380DE0EA0A4FA
+ C5FD212372BAD4DC928D27DC3201E38D4B7965C26824301F3817FAE62E548FB5
+ EDA51B86F5D1EEF70D981564AED8B02A1521E610799710D8A9C6DC84EEDA2D06
+ AAE228A8D991969CD62341FD968C9B29CD888515726A7E1E3070F311E1C15A09
+ 3B73544441807DE088F9B12160CF63BC24C43B24A1C28AB1262F767345708806
+ E22846F903D7196B93182B4F3A76F46682DA369401E9D4B1B0F940046EF3359A
+ 485B01A022682CD97A2397AD51292FDE26919614C39925C96E15CCC79C203706
+ 92D47F40782C9CB919FA96875AD6A21A84290F56CBEB34BB54138F39D82CE443
+ CB1F3AE8822477027A9A0DD0056855C47AB850511FC77C749B2EB2440479A61D
+ 0319E049117D61442CA4C648B0184401ABBEEDB9F12A14EEED6A30B2C576BF81
+ 09384737582A5C6A562EDA458DC8B343A4C24E892727D7713B1AA09167F1D204
+ F197E5F7A687E76F87170EE4E3C766DD8C5BB1D7D9901F244D8B47EFE44DF138
+ 57D7708FA0F7F6FC0E81C61AC38F64EAF873CE3EC5F8F201796BFC2E6D93482E
+ 53E6D0DD61F7C27CA8729AD7B244AA6D4CF17C56BBDD7D7B5CE90E7C76B743B6
+ 0D1B536E0CC7870785E538BE35D7627943C528B88D7CA573BD429166A74F75F0
+ D36FE3E794E66BC5937FE0F8F185ABFED1CC3BF979954C3D7789E15025C1095E
+ 0AACB4DCFAEE557C374D0B6C9140C7E98DC564AF0F2B7F943585B5C0B52E69E5
+ 5DB4693A042BB28FAF27CDA13C2FC486D31688355A3134C1D8E629E17507A632
+ FD0FA7A99B50D350033AFD2E9157B0C7EF9CB0445A1151E3E1234D3F699140D8
+ A0D7598A38C890A41155A025691A8274E663FFAFCEECA733121C4FBAB02F1AD0
+ C90EF6FCBB8F8A774A14F9BA2F98F8551401ACEE6E5AF73EBC96BB02F864F65F
+ 54FB1F26101846258EB0216E9527FA4BF3D701441A9B04E1AAEFE136C83DB0DD
+ DB6A5250ADFAC29B7AA11E5D24CD3BCAF585AA44185C3095EB3EA0498D257B27
+ 70EF25C2E8BB3358C8D47A80272500E641CD4823C25058FB247FEF11607B7B5F
+ D0DBDB9612D449EE067318C2B4E74BA771A554995B04AF4EF856ED6EE7C50E32
+ C7FC84E0D5E20C999726ADFA481887CF51A73E7C83C60AD5721C4318DC10D41C
+ A6FE0BC8E1FA9FFE42D9316F21653BFF2362A0B70F1299A37C4AD982411475FA
+ CE92CF8C652B4D33B6C462B0F545FDC6D70052F58A1F3716560E2A736FD09404
+ 1C04E6081CD1AF63CEB3FE4B3D9CD04F9E9D2E2027279627CD332B988039AB29
+ A54E708EFF9292C150CB845B3B22B24B99BE687024EFFAEACE4A28ADABE8987D
+ CC95D3198DB6929B2D768CD001E14DFEC6D755BD7F74DA20852512949C555552
+ 3987A708D1D9DA4831CFABAF7A3E9AD970E384B44E3A8260F8F4B08796A21905
+ 36233FE34113AB20F9387C62EACC2A04E54BE09D4FB773B47EA0C73E5140802F
+ B2EF016AD675023267DA33D5CE7FF5B9C4E00D4BCEECF69065ACD63B27738A9F
+ 0BA5CB135F1222DB6E63D8030DEF64D14B5BF599DBD72239EC0CC305B950847D
+ DC58C9028E2D37C075130437EF7934A738CA706E9C2342EF3FA6EFD66F336349
+ A83F354A2F8F24C22D19EA2FE8AC3BF08AD93DA7FEEACF303B2D780F9E424594
+ 32A19507AEB0919DDFB6B396D57F817AAFD51FC3D387AFAFA9792FFF344CDE2A
+ BC2266176A8731E5F3CB9E466A2A41FE81556D2A4D503D0F61889C7F7CF1D4B2
+ 2C634D58F81DF62FB770FD5F3F44B221BE19CD25EBB7F420D93DC60D247CF541
+ 6D9E0924B7F28A5CE70A98678864710C8B9678710A90A9B9EF50F33602967BC1
+ 02776DE5489C8699331DAEAC4FD2BA11F9BC2B957660E8FF82BCBCBCCBA153D7
+ E438A514CFFEE8DB3BDF8AE63178D01ABA9D029FA29347CFE3CF2ADB5B2B06D5
+ BD30AD6F0D328B9886340812AD5EAC4488A2A1F8AEFB739E73094D207E69CE22
+ 1AD38B99C639FE5A464BF2245CBD29E96D164A0A07AABE123015453506AE553F
+ 3E2F3F6392587A1853693A9EF713AE8D784345C5E3F8B73EC3B7AD3252CB6A0A
+ F52CF8C59DA49CCE0D5A8164B8FC027EFB874E43ED02122C27782178103315C9
+ 507C90FDF4AE8C0F58520D024CB864E4BD8F7B423E5BCA4DFD1F044C1BEB2986
+ FA468B96E3402A10A0B3185830CE5AD2F56BF8EE198FE076C3361EC35FCDB400
+ 779A5EBD3320ECBBBD3789CC921CAFB85E15C2D5CAA8752D1F152A14EF281218
+ 5F779D342C37C8F0E287A2F18366CE027D670621D2A6FA60E87F5A5805CC90A6
+ 141DADE1959FE08949E5CD55ABF790560765D56E4C85FA893ABBECF20F8AF13F
+ F334C74579CF89E9F4CBD9A47BE9DE7E050E7CF63F3FAC8DF8D6804AC7FB515F
+ 03B9C4431A4A7D376804FDC763EBD81C62B2354B3FDB5ACA9DFEBE09B3D7666B
+ 3633EF66D7E4E903C273D1D6AE0D02EDF11FBC70CACC06372BDA0BA70798CD65
+ F5D50100D05176B4AAE693531937769B040170733BB0351D33F6518C29286A70
+ 27F1C1FDEA5E1CCEA3DFB91384C6A0CB4F1C956565BDD1D984E179589B8DAFC1
+ 1564BE8B02209348FFE16C60B433DF6515AE1A43DA9109030F5DEC13A5362129
+ 5E24161C102AE64542367C8A1F40625BB9076E5D53913F6B43DE52D8E825C12A
+ 00E07AEEF9727BC4BF8F6A2DEB858938C9068EAF891FBB15B30F70B86E314E59
+ 998A41FBCA38E0125597C3124012E1BDBFE4281EA75A99168C6C33B1C5DA393B
+ CC68FD6B68C3373E318B2D49D11737085E6498906C1EF952C11674A2D9DAF363
+ D93BA9A3FC52B14E223089347D8A548FB380184EBF47EB96AEE509D46D8CC849
+ BE63A79A652ECE1AC4CB2E6B3961E000D790661FC90B45F72FC7DA0D99AB91CD
+ 041D0F0AD4DE42DC383C4BFE5DED1A6C9ED44023637C172C89A6B213CEC6B44B
+ 84F6DA0A7BB4B46F4F1B6791156B0BA74B31A2A4F8706B37D717A729E46AA435
+ EFC3ED8ED23113F2C8B71AF202EE4D8A79C19B254680659B6D2930AF8CAA2B9D
+ A46F961FB6B1C8D91977D98961141A8A2061A2C2E225863601926B717C751BDE
+ 2D5CBDB5688C3D379E80E43A7C3319C60854A3DAE518E2957634345F84907661
+ 9DE9912B8B3FEB72F47869BA2F4740DBD7CD54BCE2F8DF0AC235CAB1B4F904C6
+ CF50DA353149254CE0E88B6A4B81F536AC838E6E4A22642CB5921737EC6E7C49
+ A04D5F0F4E1B1B8E33400E0C4CE90A4332B6671ACFBBCF5BF06441EDB67B37ED
+ 890B2ADDCFB3F898D6AEB59A1D2754932E0696756DC94B488068448270E76D87
+ 2742A7FDED0FAD8C9DBC2220AC7B37F7D0B7D53757B4FDBE9E9FB18351630973
+ B357242453A2D1F671B2CDCD69926711E5EA8924D802D3757B13E058E4E51623
+ 560C3B19986A02264C848BB3FD80BF0FCA88B525A3A709D53DC26F88EA09C688
+ BD0063E4286D80FF19C2FAF67D422751E2AE723E77FE7824223BBB0431CA3135
+ 967D3F1F322E70162CF1800F5FF8CE54B60529F2F4283E227DCD55096D853F4C
+ 07583F23E797E28544C862B3895EB433C3A1CC4B7CF86AE11B86D03C4ACAF459
+ E54ADFCB9FD6F73384009FDA17109CDF8188FE5E308A13B66FCCF15A1EF0128D
+ C31F3F412938D43F470F30F3F0537CEFD282369424BA1B8242FE3A60A88FC5BD
+ 737F1305CF784B66B326F518536E8F86E951375E0B5397198F24429AD2674645
+ EADAF13D700B753FAE75133A602C9700D198ACEE2679FF849F47321C399E9CD2
+ 05C0B6252849C4D827E8F74904CE186F6D79F4D3C048CCDEF05EC122707BD905
+ 79D9045FD16935F8553865C8296EBC794CFC32060313C5A539D96F5D3CD1F3C9
+ CB3DE8EF376A9E5D64C3449D44C495E81FC91B7D3C9C470C83D7F108CB4B603F
+ DB2D9FD4E29078A171F4717C1A94F51F1C2B786F417BCEDEEA957461CC174896
+ 91A5B043256998716381E843EC7E6F82839D98E2C7BF936FC6E0205B59648420
+ 6BAE1F221CF366BA96B88799F5D12E06077FD6180854386A4889605070747B71
+ DDA3B8BCAAA26E3B1D0F2576E5199767EEA10F510DBAB888D38F36D424BC6382
+ 738FA6B5B2DA9AFBAA19C100FBB01B415AEDC1A951F41755DFC7E9F4EB67D9B6
+ 8142C7C3077F638A76EB503A2AD2F69961072635F567CD8EC9749463E003DBEF
+ 7E0724E5414B9521048C860078F5946248A8BAF885473C0E8CC022E74C35BA51
+ 7DB29DABBD58F6C71360D68AEF5A62F19667E6A02FFA1766E9B4FF376DC557A2
+ 400F154DAF277DFAE65A0F571EE62C7C227662B284901A609D7A6F9768CB7411
+ B9468046CD4DFCA84E112B233589FDAE508809DA855B84F738881A1ED5A97C91
+ 57BD7C94D6F4D313D7B9E5229140B74EB2E40159F1C91676EE3B8A47308223E2
+ B320701AFE105941A47E0345FEE521183EAE75DF6D1A4E809E72D2F2394827B7
+ 79AF5FCEB13E58D443162F16B7CCD64218198B0C1CBD72467CC4146D4A91D898
+ 7F177F7658DCA6DA46E47026B211202B1BAD60F79E8017305FD769D3DD054935
+ 88FA73098293D8733334028000872F8367E4D89745FFF758426D621DEF2AB2D8
+ 1330D98C1B35DF980B5C64CA341DCD96462FC0412C385676411A1EBC4B3CB613
+ 2DC8BF7FB1223FB71435F31D91792744BFA5529389680E3DA9EDCA27A430890D
+ 195A97D1DB3B2FB5020419213B74746E8BB7441E7FF7FE5C81BB4B5FF2D87667
+ CFE9CFEEE090F26C8B3892280689835BA5598FE9178A6ADC05038261335CDFBE
+ 56F02ABC96D95C02B0E4DCB56A8108B19FF26D92664234FCD7794B2F2AA2F32C
+ 4771500133C6EF95B5DD7ED7DB48CC98F433025260D5F7B4A46209244FC79217
+ 9B31B106BEA4F95C867380ABCE1D9A1AFCBB2FC0C977F38B52BBEDA251C8B46E
+ CDDED593419E564218DA2F65188A89E857CA9F71BF4A47FFF8DA6E427F083B86
+ 8DC22A41E187500CA741BD2CFEA46FA11E5065FC62D6EDEC9EECE1E376BD9CC0
+ 0EC9D96961C5558029B650B5F304681E99E12712ADB5E3586106B28C19B46D55
+ 4D5A4870D50DCD9611F7237F425511837762E0192AC419E2B33F60CDF2ECB420
+ 3E1D1856E02F5DBFA6AC0F610B3EFBD83EC23F2A2E658F4EC5CD68CB5B68CFF6
+ 091174BB71EF410023F06A4621C0128C6979204D65A63BFE21E7DC38DF13D20B
+ A41AE125F850FF69F2B1F5B4125548A87F02D341592665DE119FF20D402B621C
+ 9446639AE1B31F7FF9B1B3BFEA1332CAB2038EBDA834E10F56AE8CE84C71BE8A
+ 6E48F9EEBD079A0A765CA637529D26806A73D46BB466EFD574E50999F65E8F8A
+ C0A08D28F3F6D77F155BBF26CBC24E478BF7979D1012B705559089699AD70858
+ FC2E0F4AF05ED631AC5B068BD2AC2700DF59EEBA9CCD7EF49F6B3BAFF31547F9
+ BC9558E18FA0D87856F2F17158776F1C5889AAE7E6089DFA6B2B71A6C823B00C
+ 19F028C521D86D6E8A933176C363DAE90F1260566B45A8D4AF75689AFC2CB234
+ 89725F84E2F91CD9BB50755BD07B80B0975CB1F29E590A99922877E90F328E7C
+ BAD59A3FF7F5E07D9CE3C12C5E4AD9CD8E0ECE5648651E5488EE0C6F32DBF457
+ C484668CFA377C2E7DD5C5BE31CF12B771C740869517EC7F156EE966F8ADA714
+ A46DAFEF7FA3A7AF49F259A5CF200243D25DB34A15DD00C7E06BAF9DBD4EE17F
+ 5BD830C7DBCBF7A890E9406C943D4E086160B6B859F487B763E0BCBFFB5155A9
+ D90F25E552A84B4BA7FA10568663A9D80353EBF87877ED9A79A2E3B815E348E2
+ B27BE1DA6702092B134CB7026A595E1C2A75087846B3B8A1B3ABA608E4F375F6
+ FCA9C952DA86F0421DC54C9AE27B0A2D3CDB217018F47927F74C4773F8F88D34
+ 69ECA096530B072BDD6B136BAF2D254B1291310287F591377D429FD65E7318A5
+ 7B440D0A161ED03634AE380A04BDA62CB8F03492B1BDBFA1CD172FBA954302FF
+ 226ACE7D5B7DDD8908B296033F201B8221173ACD176DE7F6F009390660509120
+ 8920562BEEC05B592669A2178CC9D20A69CF22D26797AA5565861719BE16136E
+ 815E5EC7AE1C473F1A03CBB170454955A3F74AACAD127AC14B0FB307262B42FA
+ CD4AE7CA6F60BA3C4B3CF8B4710F4EC979B471865B8596B00BCF20490905E403
+ AC81E09855AA4E79C870D3D33A7FEC2F8879B42B3282656B9B40BD15622B9792
+ 964571A671BF71F369D9ADF7BF0213F01DCFC6A53565B915F55A374F85E77224
+ 66449FE859396D519C50132C92D5219BA7DC7785B6604970897650B4793FBBD0
+ 4EDE56D2347F43B0AAFE335095E8816CBF379A27C70FB01DD516941098A66FB9
+ 278805AE5A24F9A1FE69B5C8BBB1822BB3C47C842F1CA1C89913BCE23EAB8647
+ 15CD6660CD3223FE616B64964791E703522FFB85DFF39A92A641330239049C68
+ 53D2650B8E0B1BC9D7332B7E5EF571724558F329110142B04D699834EC68D519
+ DEB22CE4733C50005045B520B038C6C6FA4102FA4B5F1B4CF0FF777C0D1613E4
+ C648CEB54034B42E041BBA3A68BF0A5337E1C8B1C105CF0E347ACC8514BF65A1
+ 3976A303A713E2E502C5C62224FC4BDEE6BBEB425185B6557CBEE81526A8E707
+ 7626D1663B7F1DB8EFF63157D29B650B2E1584D86792F1F1CD0F331CD226BBD9
+ F3303FACC384B5C40B909268402DEB37C5A9860F6B939FA15C4B5EAC786A7DEC
+ D58E647ECEFF2EABECAEA0F05D249F89C30903ED5E686C2E84F345242C2EDF23
+ 9253CFEB7DC01A43F0C0B46640E81533884633D211B74FB3A5D0592F8EB94819
+ 43C6A5E660FFD8AD40E0B1E6B50EF4AFF828E338DF3AB9C327D2E516C86C178D
+ 6BEEEEDCCF8B32905CADCAA1EE12375DDC6EF30733EB90A5EE66A83B28F2C00D
+ 4ABB2981DA254177A50E362CC3FAC83037F9BAE515666CACF14A01B9B57B595B
+ D5A8EAE08C0A42DD48D42910E30C35867A819566E6F048D3B909EBABA159D267
+ FFF4C55CC12B5A5D876FF7B0B032012E593FD5265A467CB2DA7C5586CF1BFD78
+ E9A4B066C058243FE56C5AB4379AA453E72541DAEE5973CF463EEB87B6B50295
+ 54CBCC1101058CAA7F5525350370C064B92BEEDF23A08CEBF155F1D2E8B46C0A
+ F245F44EF179505F57FB4CEF271C5826F00F322F59A4684B3D8AFFED411B0957
+ AD7CFEBC8153328C043E8D53B8E40D92E51A437008CBD238089FE575A44ACC24
+ AC8F5B1F6B25B92BEB6762D7CB80C0B0AED644147507DBE05349DE04DE3AA7A5
+ 40C551BBF099B46FA74D0B0FE8872D994788ECF772CC65385BE59758C95AA150
+ A1FE1BE38C8675D272A6334932365D629F675DCF3EEB6F1886547367B8A5A39B
+ 8906971D7FF412F2C53448783031BD9CC109CE450DE67E29BDC39302C18B0E7B
+ 1EF42B69BBD957D94AD70BFE77330A257111BBD261607B5B5778D45CF3663441
+ 1FE4EA373F542C2BCADA91FBBADD68E69FD9AB7E999482307476A7430D319565
+ 41A371F660BFFF00AFC9B46981A948384B2A83B1871711F6E82F732540B897D5
+ 51C8D6A9647EF43CB31E6BAFC00A25429E5BBAEDF70879B764A7645A106A7142
+ 22ECC5F6EF95748862285F407F1CE08C8A086A09A58C080049F2318D2B392F13
+ 454C7E10B0D0E15D75B3A977F8ACF1554208D28B63ABC887A65D69EF5B1EE4CB
+ A4F06D3B8279AE97AA36BF9B16263675ABF8C378F9E7DF4CBEDCC03E705C34DA
+ 374DB462EA99CCCC9D1FD2CCC7078D06BE46CEBCB659B9FD88CA44CEFA9A77CF
+ B11BAEC9C081D337553912F8D58A50F4A45C3C7503195A5AA10E22F78AD21CD8
+ 602827A464F9805FD00C2AA4199E7E9B33923A0AC6ED203E5E58CF826E33CB4E
+ CA9337D39F6EE56BBBDD2F4BC3EB27ADCC217D6EC79F6841DEF9AE82810337A0
+ F52E0193BB62128121EDC27DA1DAA9CC24572692E56F64C23617F67A8441F3EE
+ D47D5C1CA56590DC0531B75B5EDE8CF4413E60CFB868BA9F0D27FDF7787BCDB8
+ F13F0C5C9F9F749A1CCD413D7ACA8700FBA6ACC9AE5D0C4EC73FE3FFF8A62C64
+ B9BA399984BAFFB3C4287F45BA311C921020FF90AD6EF89D5272E2EA96CDC444
+ 7248B7FAB06436DB95463368791ACC30B8897341B8DB33618368AFF5A5A73D1B
+ 772D43F037194882F5328B468B25C3728797471E3261D2EEBA1EBD69EBD86D6B
+ CE26DBDDBEF15AFF62827C64452F841926EEC3524B640826374A80E410719EF8
+ 97A039E25439C17B31AF2370C8D498260AC5505FFF2060521113F6A3E29DAC4C
+ CF283021F4DD6917378D7358A5D03DDBD95AF4DE7CF10DBA767AC100D51C0B8A
+ 2FD58767610FA2ADC366D39E2C204450681DBC3FFAC765CD5588CC0A1CC9479E
+ 6822B2D1CD785D700E2F4684A2167B584E257DF53E681D0D25E0ABBD5E281A29
+ C24A997172D00143D55E112F4974DC430E967731B2B9D940C3619FED976F4214
+ 7AF362DCF85774746000B34A462A998DA8200B5A3852D2B6C1EB336F12026693
+ 4A664EA7AFBAC4DE16A88D4AE27AB15893C4DE003721452B6F77D36CEF86BC90
+ 3EEB4FD4B30CD23BDE3BB218351FD3BF0B5A89866F7EC4A40EED6793D0C62EA3
+ CEEA3507F5C04D38411BE356472BEC194B8493F5018C5A255BC4FF97317D4E8B
+ C425306093B3B3C325B317137C2336212106787C8BC9E6AF6E465E35E6B8DF41
+ 28C1BC138E89009519603C7C2FD1BD5C6C5FE490E298568FCC60A331CD299B61
+ EAAADCE321B4BE8A14574CEFBAC8A8900E4F39FA1D0CF0408CE67C77F08261B9
+ EFCCEF71173A64AEF366A42C300AC9B4214DF25995BC5EDBA90FCAA3F0756932
+ 19796F29D81D571954558F9A0D64850826BF40263E2C5D0DB44C0F9F078E4073
+ 2AC87EC87AD89178901A0D34B33A19E053EC098B3150DCBF9DDF287816FE9CC4
+ 8ECF86BEFC30F3E22C618286EAC6C36EBA595B51D1EA66053A1B6D2A2F01FD96
+ 408A486483646D4DF996F0B519CC273E59D7AF7473BAE49026BC912216A17D76
+ 9A34940B2BEE1DFB2ACDD40BA3170BC4D02B88485ED47D964AAB67930A8066FC
+ 2575364ECF3C0B01DB2FAE3237BBABE481753CEF96CD37141413878C33961F4E
+ 8CF6278915F5410767A2957E5D3169E3D75DDB7125727A8C0F57AB119C69DD40
+ 7E52684743BBD00C4DB517F5079F5B24F2AD4778BB7D4E681E841FFD534A1E98
+ B1D138CD9CE880F0871768011D22322292FC060D30380A23783E6F31C078B09D
+ F57685CDCF1E0E113D23152EDFFC322594F9DFBAC141541C2A83B5695F176E7B
+ DAEFFD367FF69595919D74A7DE97990FE8263112D3390D4C146125C078F89398
+ EDF6B6304858C5DDECC065FFBE03E3BE4C7D1B03494CACC5FF40BA7BE4B8C288
+ 62F17FFD212FADAB91D552F999F1F63D0062E3A8F722F33A442E3AFE5AF5B942
+ 4B40F79A069307D5BBC68A29D1065A7C025F92C10BC6FA93029D86C618BD6D42
+ F9F02FDF6E0650B024D9E82EABF5E8566B306AA75F58898137096A3F201912E4
+ AA53440D726F3A8483363104E1C1831EEBE72C1C65335DCDBA00CB0ACF624BB7
+ C16772AC7114ED7D5BCCA84ADFE28597D6612D1D16C99992F5BCC82EAF285B47
+ 16F8A6DEC91A50E80373406446229975939E5278FB870BC4D5B981A3D4D1DE60
+ 597854E1B6A78E66AD7392AA152894DBE57325C1BD90BFB08CDB0881A9BC5662
+ 80EED3C4E1845F8905960AD6718E81552EDD94383577773F25E1F6CCAF12FAB4
+ 15CDB8B94052C9F430875D63957CB4F102F8DA43BD56D6BA96CB67488F6435A2
+ FFFF9D0F6314376B075D7923F749FE1FA02E89D1697A12A1C9C10F947B0F0A71
+ 3C0C98A23DA9E4749FD25C4179194051191DD03F4A9D677271EEA5DEDC8FC7DA
+ CC3BCE2DD71A6453917C3BF0EA36DF5D9D8870541EDC17912BE51EC86D31FFBB
+ 7ECDAD7E3BB0EB2D93F6DBD8CEF95836CD1C4AB38BD6E6090B96DA85B9F517C0
+ 21D44C501727FB90D70D9DFCFE034D0A4643730FA162633656302385BF79B31A
+ 0EA0801512008BCBC8736CF01AE382149BE74449711CC0F181AD08DC07298B41
+ 7AB2DA7CE18533E4A9503F193A659ED9BAB67C7F150BA04635251BE1A626B6B5
+ D4241E6CFD2EE1224C3E818582D082C6F73A8157B3C2F2B037C8325FD875400A
+ EDE69B3882A9458524F0B5A9C10F47398A9B98540BE2DDF736DE58395D51A1F1
+ 9343383CC77B82573BC56730A221C48CC17C4553B05BD631077257C5C3CC5E03
+ DE41E12DCF9856BD5922E697B80C854890808D91CB4A403183D04AFB1D91FADD
+ 7F745309D01C58C078EF5A22589500A1F82A580A71028A9D3D9CBCC13381D6C5
+ A6684FA7ADE79D339C824230D15EE191FE74EC6907CD3AB70D0B7AC68072FD69
+ E7566A8F5F325B61C84D3058D245B61740D8B17DF73B380C1936F71691BF8CE3
+ EC0384B626334C850A2041F6C9FDE1E9999975E5D41779829B817DC683CBA598
+ 48E78EF9594CEA1C1D0673EF83239157636AB5A76F173200A3FF0746E30C7C46
+ A77C4F2F542B1D9B152D11B338636828504DADEE2A6FA6903EB56DD5A77D1499
+ 1A48DD4745659C90FC75D065D0E4B6080769095F16017A4FE5553DCC74D80DA4
+ A7C352A5E6E5B66493AB0325BA4D562CA35481003D01EF6FF6C417764188B010
+ 3156A2BCB475DE8C79542BE2863E5408D298983350B9932177C5389B76B66FB1
+ 6A449C9285CA4B819FB99914F1D163F7B50912843A39F81AF60E0973C40F43B8
+ FFA331CAB4D9C493C98234C330F9CE5A2F5D4BD021C10BB197115999FDA23A61
+ 97F973843B40210C08AF43559070D09B9B6F0BED0AF1A7AD1D26E74402B92A8B
+ 6A0E92240DFD38C37E190B5B670BC8AF08727BFAFF2DA93F3072C36A005A914C
+ 739673EE6BF33FEF3EC4B0A294816011BEE7039C6FC82E9306D3711B9F0FD7B9
+ FDA88801B916D069B5875BCF853D09C91BE63723928CD8A12EF4898910F61090
+ 8F1719D323716C8A625FA25BF896C315AEBABA554303F46B9525DE7790AF0998
+ 12841D7F967360B55C523F12C732B0B3181AC6B5768568E0FD53292DECA6B499
+ 27ADBA848AC163C0BEE7558184C29F01AC14ED54BCA98E8A673DDFFE8145607D
+ 2B0C9F33ABF381AB8D6F47A76D7550E0F6CA6D49747CCDC3A7E45982404A0C78
+ 0FFCB2257CCB71ACFA024A0008BFBF3B884EE41D1F9B39EDC4A4026683CA2067
+ F1F599DE3C002218F48D38FDA394A841C2AF3B4AA6399828AAACDCB7E833B7E5
+ CC602662F204F5BDA78935BDE4AFA6400338966B3A9D02D1233B7125078892D6
+ 113C908FEBFE8E7FBD1A9D37834C114C26C38D01A2BB380E17FF8D65CEBC8695
+ E2BEA9E08F1EC6C3256B35183701A8B565C646247FD3DC31C041D863D6015A01
+ BD66E1A0B7783B9514DC75C9D25FCE7073ED6D796B80D23F602409611BB1FB0D
+ 325CB94C1CBC2FF49D3067B20B58E38AA67F75987A62354AAE04E53E9EAED79A
+ 076FFC79214E25E6A3BE79DB94E31246AB373669044F4A04D25A5EE1C0C3F2F4
+ A99883EE2694AD494AD95A76665E2CA9C32F81D9A18F0271BE545ACEE2856592
+ CB3FBD47844DAE2CD992D7E8F9823008B7D5A1D54A699B1E21084A935EB91870
+ BEF490B176801EE3FF1B0CF5EF529511B4C9ACBEDCF9B0D2E1492C6E8A417A66
+ BA5B70A8A5EC603248F2573133CDA97160FC6F37854963D21ABE77F3538E08E6
+ 149C98380884452A2C831D9751B28F7D9A2B66625AFB9C270CB24F4F4D9EF98A
+ 350A563AB6870DEDA6DF5A1FB55F12E5E1F345AAA2FDD5DB8A65D77C6EA56D26
+ 6EEA82880A782DEEF3C6CD889DE76CD879676D31DCF8DAD04F5DD199B7DF8D32
+ 9262FC346B6D74C7636DC7662F91FDEA7F9B12ACF67F2701492EE4048DF22184
+ 0FA882B8BD3D3D4B42491B726D59797B7D8D2E406DFF53ACAD7C8E1E805C6F58
+ 236FCE5D392A2E009402261C33326641C56974DA66F9CD6C4803F825C703AD88
+ D1F134336D69068771706FFE35F0C30D32755E97697D425E0DFD81DEB9A60D07
+ AF515939FFFCD96F1B1F0A1A09F5FF89410B4BFDA312F53197D6AD44E4E81D7F
+ 253566BEFD684A19FDCFBFBDD87BF3D8EC15AAA11DC98D807BBF91FE6A63F2D8
+ CB32AA593B2A271960D10ED3858F3EE929BFB6963DF2BDD4F57890771F262861
+ 4B32758FBB163E5745D793C3321C1A18DF914BFF37B57DBFB3C4301CBE812032
+ 65870B75F41931614A729F52BE2E3FAB7CF442120B58D6E7BAFA1A39D30C4EF3
+ A2453EB3D5A9BC08607C59438787ED9822A370343521898886F54D73CA54CE81
+ 5A3C0DE2B5E0F1C9F9ADCDDD1B42242562680DCD6A688B0AE334C66F17661542
+ F03DDCCCD64E9586EDB8AA3D653144138E4E4D9A90739700A231909E51EF9F58
+ 45D87D0CAEF5C1CDD98608C2DFAAAF732F10BC36EABF4BCBCD635830948BE8CB
+ 357772A871E4172E4946DCCDD04C044FDB868C5EC1EE6E96817D94E8F0B5B017
+ 2959E569FFCB5D164B10A9EB7B94522C3BDF2957C721847BFCF7DA77A1CD242E
+ 2345B46759D42B18002E5BD6E6CDF8F7B7DF14D8B4B7ED0F2EC44BC58EDF435E
+ E930D065A7F6D2C7013E0411394C2A77F3C4D091E0339E08ECCD38F3CC4291AC
+ 4F17E959F0E49DA2B52ED46CE35E8E396D1D9C8C2B0615195AD4AF2BE5696C82
+ 72632F6EF88083D6A269377EB077098188C96F738770ABA5A5EDB5B563DCC9A9
+ C0C7A5C725803F9192EBC35A96F1AAECFF25F64BA4A565E2DD064A0E1BACC9CE
+ 60EB7281F7EB173851246B8617072BD1E66E134F519E0F1E404F27219AF71AF0
+ ED27A4C9F71D6AAE1458FD394286A57F9E44C3C44184FD71094493EB93FBCC37
+ D95640004D5B5F2E6B0C88CC9624241D3FE3041266F349295A346779B4677C80
+ F377DAFA6C9A92FCEEDD04F71E370B287CC3D330CB1988F69EBF880426772809
+ CE104D285B626CFC15643DEBB8844EB1E10F9B87FF6F66DB46CCEAC261C23807
+ 38FA8DA37FF154A90F1E3CF889A2CA6C66B8B2FFF2FCF0B6DD2C718543E9B76E
+ B8954A9D17AB6659A0D3150277FADE660699413D89DCC5D8F2F45A6D592A302F
+ 655DABD5F88BE437428D96A53D67D19671BA6660D628FE989A0E26451D769940
+ A88C13DECF306EA5B2FB448B43648277817A55D4C2E81C5868365F6C612C7A53
+ B5C741C39C2EC58BC9D1BCAD7BD99268AFDAE014C811DA2473556FB50B6B0518
+ 3C27AE62898209EA05A0F07020574E660BB339A9CA7B8A2AC68CC5ABA31EFBF6
+ 4EBBA04B291CEF7971193DE1E935E1CAA8DD81D23EB5E9AD1348B204AE7C316D
+ 99421EE9F904A31FF491DA3465FFA4D4AC545FDE78738FBCF3607B146B8840E8
+ 418E2A1A5F749AE01FFF32B695F61A20DF8169EB83F54F5120E29C6FEB50DDCC
+ 9D53D37295B798958388A0E2135CE6E06B21D3ACD1047287A00128298F931B91
+ 0103AEC5DFDF838F898E84574D0E05EE8D08C95877CB86912425E6E3BE817408
+ 580760D95F86227254D63388754302819A9F900A28F9F2D6A861ED36283E075D
+ 2DD606B284070E537C384FBBCE26B6BAC082C8D97C23104D5646EFAF7D7E25AE
+ 678B777D6BA675F78C9AA10D3CAD8FBDEE445A988CB2D8C2A267FF3175E4CD3E
+ E553449793A4737CBF8E25EB2B6DA7735BD11D050344E1F71295802B0D716799
+ 410F391BBA38B5285EB85A92E3A2F4F7DE940D95D720227CEB46E00D635A8197
+ DFE053D0B93C4DBF47B501DDF9950F2D3EFCD3CD6AF835CA4B81D6AF9BDBCFD1
+ 64598AAD45E5AE436F95A7BA8C8CBED550FAECD75CF3EE8D0A654489ABC5B9CB
+ BC8595CE2E23A396FC467798DC61DB826316AF739259BDBD49C1A4DD14B8289F
+ DA880CD88C18B1285ABF35763224E40B87A5EAF714538ACB5873F28B1E715BDB
+ 21303ED5B40BA3D057F2D215D1A1B40626F8244C92932F78E6BDD789C06E2E44
+ F2C8665B8306203D16A638A0AB7FEBA955CB1BBD1817C76F87477A881183ACCC
+ BC90304090510F17197F2B3110A5FD76D828603CB217926044498866562DFD5B
+ 4C887EB20FA90C0B9F4B33B74CAB76593296C9E1FA9830BFBA909E48854B42F8
+ A06BBA84431900E0AD3D1947EBD145824936EB94453B1C074BFEE73069407147
+ 5A159802DA0A366827ED9BC75683FFF40B5D75AF58D70E2EA5FE3864C219AFDA
+ BAD5C60A3B2AEA907F9ACF47BE50348E94F36F706CCB5A61C1EE7EA7C5A2C6FE
+ 5DC656AEE91174442DB79D3C3764FD21CC82A9B8F9BC9772D4E3F9B5573277D6
+ 980012C8BA4C63EA2861A37A23D41A924BF08EA6C2682CE5A4F1B82D493139EB
+ 4E03125C84232EE11C7829DA6C886D77006F1FDCF479F8C6ED2B9B04735D5CB0
+ 4A96153250DE03A29760A2FB7784CE214908B4773581F4EC4BF09FFD65F29E59
+ 60760474C59BA9474CBC2F7C1AC8A849562F4DCA4105EBE29F23304489F97B67
+ 733C58C2E8924EED9DE7E68F8CA61E7A0145B75C3ED249507531A7427E142705
+ BF45C934DDF3F85B7A0F3E5DB96A02B265938028B46543A45A67EE3278190C53
+ E046D763A6F86FEF962D6C30101D2D06FBEB5B426DF0FDE54CADBA492228014D
+ 3916AD26205092E5F5B3AC4F70F2ADB9107A3D9BAC651AF51A40D8B74BE3A93F
+ 72D6C0AEA8315FF45AD0D3A86FFFE5A8E6DDB2393A393FE015A2702EAA92D630
+ 115E7358EBFEE3FA1B9D9218C115FBBF76C0520031A794B831C363A9C912254F
+ D86D028A8EF1ACEBC567FB31AE26CFC0DC9A55CBD975B4799DB899CBCA006BE7
+ 6A671CA04983F4BB67EB1C5D14A82B3711087F6FBA10258CD318E03D35A49D97
+ BBAF88C86D7EC90853163514AB02C6112125370A4880F94B7ADE4B1027CC65CD
+ 667D6AD254E2593C2F00099F423527BB180380CD41D007F5C3CD4ACBCE59D3ED
+ C97437CEFE0E4E310DD9A5E34ED1986C92AE9B7CE083384B37FC03B4B1FBDED2
+ E14F139351ECD1C0742A2B8555349D79CEBCEAA2A1B56A1B1FD6A3B82DB47949
+ 9AD783107FE4CED56DE3CDF46217DDEEFD7D2A39D9C8485F00922AE866F9B364
+ 2F815E58D125727CB26CBF0043AA7071AC45F9329C9B8F00F0CF45701C60B6D0
+ 9689A65643DF97365BF3EB747773A1ADFD02FC9721737AC2F00C4FF22F546E2C
+ C354B199E55CD3D7846A8D1759C35D0803BF876D845C454CAB711B39C1CF3E3B
+ 790D713FAB9439A13AE0B119812E4FD978A6498947C432A05F4A49556523461C
+ B217424DBE8D1C2EE7CB4C1755A96BF71F9A668E41285DE8EA87537D3751C397
+ 116B40D7866B2CBC0C8DA3E9E8EDB10F42F77C73B98F7D68283CE323CCB36CF6
+ 59B44153C994FA483F8369658A62754A56C2E1B66E76998E7C32201B6403B186
+ 1850EE877F56D175FA7395400EFF76FA8FEC7E50854F493316E8311BEFE34CA2
+ 3ECCDDFED7F9D0C3E387474EC1DFF9928C18368646026F0BEC11732A6EEBEC67
+ 6E50F14C3FEC9205BF01988437F0E32EC84F3C2C5CC68C85AFC1D5E6A4CF5790
+ 373E480401903055D2865D3069EBFBB75037FD74A0E5DC17720BBC2B900A3EC5
+ D5AA21251FE3918E3D2B8FAC02272B8861B3D65C1CD287B8C483BE7BA65AE9C2
+ F9F4A09F806614B70365472385674E516663BD6E7E7220ED7CBC2E5AD79B72B5
+ A99255D300636C24B8AB799F903C0E06F49DC00A78B8E540547F96F1D7CB328E
+ 4A8B533E5159C142A3F0ABDE3369D42A465C82EF5E01CF18D166A4E86FABD95A
+ A245B4D43C647310CAC5042FED03267EBF81ADB40E9E2D4F41194DAD6DC1E37A
+ 6BC7C00A28506B5FA9611CD8A167268A991172B97B40A898EAD22077DC44B945
+ FDB8AD4F87E8023FBAD44DE025F05877D81A61EB0272137BEB7ED4952283268D
+ 6489BA70BA0825F5F13366B33768E3194A06B7D53DDFF3113B36CF0DC6A71F56
+ B6726762B236F988DA3D8F40FC97906995EA46A306FAA174C7157EE7F21009CF
+ FE78D783A698108536D1CAFAD4155B30D6C7F655597E17522EAA40CEB0BCF267
+ 4202ACBB86D59E2A92166B8FB47B2A6DCC3223F6AE4DFF8AA68CB7DA4ABF65DC
+ 5DC977AD81D7085FE052E661795F556BA4959F54CBF2864AB96241DA06BDD40C
+ 6C7147AEC6DBCA99516166DB3EB2644A62708779C23AF12B2C628901BB3170FA
+ 4E79800154787DBFA92E8E599485A009170C2C4AD5F065F71004A59445635BDA
+ E8FF885324CAFA11909FDB3CB4E2C44C0CB4AE26B63EEDDC518178597F244081
+ D5B2DEE2300A51C8B8B510D667AF90DF80BDA9CD1278EBF007D2536D96E45148
+ E0D8380D9176219180E3473A3EB2FE68BFBB52A70EC937E9D3FBCCD84F27D837
+ 73C9F5A94EDCDCA87F541EE9A13267955E80A6558AE7D4D39B29F1EF549EE1B0
+ 51980E27B28BA43972D37771863F4A9FCB14DD4AE6F367EE3E474042E4702358
+ 6AD9F0E046A12397D7800BC0D31E710CCF9F7D97ADF0E2E018C6CE59EC8C8EF1
+ FA2E1CADD83860E0D80F1BD06F203F898DEABA47E4BCB7A7E7DC31A61ECDAD1D
+ 06E66BC130DE4A2A23CC99B7D1C43448DFAB8F906D3855D61B2A46E6C1621ADC
+ ADFC817771707C7B762DBE73CC7E3972A89284C4F8E804A6B901D856CCB80769
+ F5ABF020D5CDB10EEEB5490623C0435A16AAE8894136BA3E31F126EE78E0C8BC
+ A5FD518355C1736615E0E15FE5C8BD98A91FBB3ECCAB61A739212C4D2B878BFB
+ 111138C1575CAC87F14D3EC5163A92E1E3AAB9262A1747BFA2761F0F810EB355
+ 3FCC4C2CD357835632AE4E5B27891C562C3F7D4D0B692E33F73FA871E4899E42
+ AB9D40FF36D019BE222C8DD68E0944ACD642E5B0E2636BF11269E9A95909361C
+ B4943296B2B2DB1592D4F6DEFBC4B1B71D9A1A3E9BDA8A71A461569E6F6655ED
+ 0B3BF5D489E4550C5C9B517A42E26266B0738E3A9B56798097EFDDC02F138781
+ B904452FA2A1C4D2BFE8D7F2EF0F9DA1F78FA1F3C95C044F820CE50D64DFB592
+ 9BA23B80BF61195688D8DAE00793322AF789AA18B77A4BFE2121FAE31318054F
+ 252B4D43E2D95F9EE8651547E0517A000EA7CDDC01F90699C9E9B6811C73BA46
+ 88EAE94907FCB5D8CFDB026D2788C3C2C1F125A1AE199BFEE87A816C754403CC
+ 66F5ABA1339438F228F5046F41FBBD4D68A82058602528A2AAB45CDDEA82BE69
+ 4D0E0081D9CBABA174F6A871CDC42A9630F2DEFF0824EE2D4E1A33BD09825093
+ DDE75F9A27FCD28FCB28FC02A678AED604AB23DEA5925D73127F2BC2943FCE6F
+ F32AAD928D7BCD88FFD961E8DA50C41014A4975934D96E203DFC0D3445C2C89B
+ 0C0E27A8ED7C754ACD7C7FC142CDC08A8A2F4E774340A8CFB55910D7F35F1FA5
+ D1A02889B69ED9481698D9C2E9179A7D45BF678BE1F9EECB8D9366564ED5DC99
+ C82E056B082F1350BA389857EBCC9499FC84EA8F69A2744D334392918D715CA6
+ F92437AF9B0C8BBE1D105CE2696DF6DD87C81DA9E9957D84FC0E8985F6BC81C3
+ C6726AE0E28F693F56FFD370A71F826FFEEC21EC7275604F7F9B2A8AA067523E
+ 21DAF1C5E45E06661A6A111907123C0F8AC823693BBA60017DD743D0C061E91D
+ 0093E91DCB5BA63024AE519423AE086EF048BF44B43A6108A988B4C1E343CDDE
+ 4864EBC6423FEFB48E9FE18930647622B664D59F80B04A9621C05B5ED6574694
+ 668F6F255963FCADE0CDBCF3DA24A00BC42C634BECE069A90BF73EBE07F03F6F
+ 76FBCEF1A001DE598B50D9D0C85C793F5BC70ABF479FFAF51D3C766A02A1CD7D
+ 9850F107D585B698B5850F8DD6CD5F3D8AA7E6CAE31716CC5FE64E759C6B8743
+ BBD93E8F5674CC999D1E21B5988B055EFC864C7E1E6A71D20B4284DAC8CDD087
+ ADF9AB3FC77C6CEDED60FF8F36CF3F706F8BBCD834F74FC543DEA66AA7D486A6
+ B7A127E399E22E429C7F927DB82D5D64F336D9933952884E7BD3C3E7A8C5B511
+ 936C07CCEC7808CB64FFFCFCB899FEFC84EEFAAE1F52F5E49F1C151C57A4FA13
+ 3775573BD150C3C0DA86A9AFCEAE297888455E86FBC254BF3A67C9AC7D682204
+ 7613EFC8FA15DB8362F79377F9FC395FDD302CF2E2D60D921C7E191E4E78B714
+ 65084A88467C3C2CB790AD3380018E095EEB27B1A9186D69785650A51993CB25
+ 
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ /ArialMT findfont /Encoding get
+ dup 32 /space put
+ dup 33 /exclam put
+ dup 34 /quotedbl put
+ dup 35 /numbersign put
+ dup 36 /dollar 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 55 /seven put
+ dup 56 /eight put
+ dup 57 /nine put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 60 /less put
+ dup 61 /equal put
+ dup 62 /greater put
+ dup 63 /question put
+ dup 64 /at 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 88 /X put
+ dup 89 /Y put
+ dup 90 /Z put
+ dup 91 /bracketleft put
+ dup 92 /backslash put
+ dup 93 /bracketright put
+ dup 94 /asciicircum put
+ dup 95 /underscore put
+ dup 96 /quoteleft 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 /braceleft put
+ dup 124 /bar put
+ dup 125 /braceright put
+ dup 126 /asciitilde put
+ dup 161 /exclamdown put
+ dup 162 /cent put
+ dup 163 /sterling put
+ dup 164 /fraction put
+ dup 165 /yen put
+ dup 166 /florin put
+ dup 167 /section put
+ dup 168 /currency put
+ dup 169 /quotesingle put
+ dup 170 /quotedblleft put
+ dup 171 /guillemotleft put
+ dup 172 /guilsinglleft put
+ dup 173 /guilsinglright put
+ dup 174 /fi put
+ dup 175 /fl put
+ dup 177 /endash put
+ dup 178 /dagger put
+ dup 179 /daggerdbl put
+ dup 180 /periodcentered put
+ dup 182 /paragraph put
+ dup 183 /bullet put
+ dup 184 /quotesinglbase put
+ dup 185 /quotedblbase put
+ dup 186 /quotedblright put
+ dup 187 /guillemotright put
+ dup 188 /ellipsis put
+ dup 189 /perthousand put
+ dup 191 /questiondown put
+ dup 193 /grave put
+ dup 194 /acute put
+ dup 195 /circumflex put
+ dup 196 /tilde put
+ dup 197 /macron put
+ dup 198 /breve put
+ dup 199 /dotaccent put
+ dup 200 /dieresis put
+ dup 202 /ring put
+ dup 203 /cedilla put
+ dup 205 /hungarumlaut put
+ dup 206 /ogonek put
+ dup 207 /caron put
+ dup 208 /emdash put
+ dup 225 /AE put
+ dup 227 /ordfeminine put
+ dup 232 /Lslash put
+ dup 233 /Oslash put
+ dup 234 /OE put
+ dup 235 /ordmasculine put
+ dup 241 /ae put
+ dup 245 /dotlessi put
+ dup 248 /lslash put
+ dup 249 /oslash put
+ dup 250 /oe put
+ dup 251 /germandbls put
+ dup 0 /onesuperior put
+ dup 127 /.notdef put
+ pop
+ end
+ %%EndResource
+ 
+ userdict /pdf_svglb get setglobal
+ end
+ [/N8/ArialMT 1 TZG
+ %%EndPageSetup
+ 0 0 792 612 re
+ W
+ n
+ n
+ 5.03999 4.79999 779.28 603.12 re
+ [/DeviceRGB] cs 1 1 1 sc
+ 
+ f
+ 0.23999 w
+ 1 J
+ 2 j
+ 1 M
+ n
+ 92.88 591.84 m
+ 784.32 591.84 l
+ 784.32 138 l
+ 92.88 138 l
+ 92.88 591.84 l
+ h
+ 0 0 0 sc
+ S
+ q
+ n
+ 92.88 179.04 691.44 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 92.88 179.28 m
+ 784.32 179.28 l
+ S
+ Q
+ q
+ n
+ 92.88 220.32 691.44 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 92.88 220.56 m
+ 784.32 220.56 l
+ S
+ Q
+ q
+ n
+ 92.88 261.6 691.44 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 92.88 261.84 m
+ 784.32 261.84 l
+ S
+ Q
+ q
+ n
+ 92.88 302.88 691.44 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 92.88 303.12 m
+ 784.32 303.12 l
+ S
+ Q
+ q
+ n
+ 92.88 344.16 691.44 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 92.88 344.4 m
+ 784.32 344.4 l
+ S
+ Q
+ q
+ n
+ 92.88 385.2 691.44 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 92.88 385.44 m
+ 784.32 385.44 l
+ S
+ Q
+ q
+ n
+ 92.88 426.48 691.44 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 92.88 426.72 m
+ 784.32 426.72 l
+ S
+ Q
+ q
+ n
+ 92.88 467.76 691.44 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 92.88 468 m
+ 784.32 468 l
+ S
+ Q
+ q
+ n
+ 92.88 509.04 691.44 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 92.88 509.28 m
+ 784.32 509.28 l
+ S
+ Q
+ q
+ n
+ 92.88 550.32 691.44 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 92.88 550.56 m
+ 784.32 550.56 l
+ S
+ Q
+ q
+ n
+ 92.88 592.8 m
+ 92.88 137.04 l
+ 784.32 137.04 l
+ 784.32 592.8 l
+ 334.56 592.8 l
+ 334.56 562.08 l
+ 158.64 562.08 l
+ 158.64 592.8 l
+ h
+ eoclip
+ n
+ 1 j
+ 10 M
+ n
+ 92.88 591.84 m
+ 784.32 591.84 l
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 0.959991 612 m
+ 0.959991 0.959991 l
+ 788.4 0.959991 l
+ 788.4 612 l
+ 158.64 604.32 m
+ 158.64 562.08 l
+ 334.56 562.08 l
+ 334.56 604.32 l
+ h
+ eoclip
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 92.88 138 691.44 453.84 re
+ 0.501999 0.501999 0.501999 sc
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 94.8 138 26.88 418.56 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 102 138 12.24 411.36 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 138 138 26.88 341.28 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 145.2 138 12.24 334.08 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 181.2 138 26.88 391.44 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 188.4 138 12.24 384.24 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 224.4 138 26.88 342.48 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 231.6 138 12.24 335.28 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 267.6 138 26.88 42.48 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 274.8 138 12.24 35.28 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 310.8 138 26.88 249.84 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 318 138 12.24 242.64 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 354 138 26.88 426.96 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 361.2 138 12.24 419.76 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 397.2 138 26.88 49.44 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 404.4 138 12.24 42.24 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 440.64 138 26.88 357.84 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 447.84 138 12.24 350.64 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 483.84 138 26.88 396 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 491.04 138 12.24 388.8 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 527.04 138 26.88 399.6 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 534.24 138 12.24 392.4 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 570.24 138 26.88 418.56 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 577.44 138 12.24 411.36 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 613.44 138 26.88 400.8 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 620.64 138 12.24 393.6 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 656.64 138 26.88 373.68 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 663.84 138 12.24 366.48 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 699.84 138 26.88 373.2 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 707.04 138 12.24 366 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 743.04 138 26.88 407.76 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 750.24 138 12.24 400.56 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 107.28 138 26.64 397.68 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 114.48 138 12 390.48 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 150.48 138 26.64 331.44 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 157.68 138 12 324.24 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 193.68 138 26.64 356.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 200.88 138 12 349.2 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 236.88 138 26.64 337.2 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 244.08 138 12 330 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 280.08 138 26.64 37.2 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 287.28 138 12 30 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 323.28 138 26.64 179.76 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 330.48 138 12 172.56 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 366.48 138 26.64 243.36 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 373.68 138 12 236.16 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 409.68 138 26.88 43.2 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 416.88 138 12.24 36 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 453.12 138 26.64 349.92 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 460.32 138 12 342.72 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 496.32 138 26.64 375.84 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 503.52 138 12 368.64 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 539.52 138 26.64 391.44 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 546.72 138 12 384.24 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 582.72 138 26.64 355.92 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 589.92 138 12 348.72 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 625.92 138 26.64 361.68 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 633.12 138 12 354.48 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 669.12 138 26.64 364.8 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 676.32 138 12 357.6 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 712.32 138 26.64 353.28 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 719.52 138 12 346.08 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 755.52 138 26.64 346.32 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 762.72 138 12 339.12 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ 1 j
+ 10 M
+ n
+ 92.88 591.84 m
+ 92.88 138 l
+ S
+ n
+ 86.88 138 m
+ 92.88 138 l
+ S
+ n
+ 86.88 179.28 m
+ 92.88 179.28 l
+ S
+ n
+ 86.88 220.56 m
+ 92.88 220.56 l
+ S
+ n
+ 86.88 261.84 m
+ 92.88 261.84 l
+ S
+ n
+ 86.88 303.12 m
+ 92.88 303.12 l
+ S
+ n
+ 86.88 344.4 m
+ 92.88 344.4 l
+ S
+ n
+ 86.88 385.44 m
+ 92.88 385.44 l
+ S
+ n
+ 86.88 426.72 m
+ 92.88 426.72 l
+ S
+ n
+ 86.88 468 m
+ 92.88 468 l
+ S
+ n
+ 86.88 509.28 m
+ 92.88 509.28 l
+ S
+ n
+ 86.88 550.56 m
+ 92.88 550.56 l
+ S
+ n
+ 86.88 591.84 m
+ 92.88 591.84 l
+ S
+ n
+ 92.88 138 m
+ 784.32 138 l
+ S
+ n
+ 92.88 132 m
+ 92.88 138 l
+ S
+ n
+ 136.08 132 m
+ 136.08 138 l
+ S
+ n
+ 179.28 132 m
+ 179.28 138 l
+ S
+ n
+ 222.48 132 m
+ 222.48 138 l
+ S
+ n
+ 265.68 132 m
+ 265.68 138 l
+ S
+ n
+ 308.88 132 m
+ 308.88 138 l
+ S
+ n
+ 352.08 132 m
+ 352.08 138 l
+ S
+ n
+ 395.28 132 m
+ 395.28 138 l
+ S
+ n
+ 438.72 132 m
+ 438.72 138 l
+ S
+ n
+ 481.92 132 m
+ 481.92 138 l
+ S
+ n
+ 525.12 132 m
+ 525.12 138 l
+ S
+ n
+ 568.32 132 m
+ 568.32 138 l
+ S
+ n
+ 611.52 132 m
+ 611.52 138 l
+ S
+ n
+ 654.72 132 m
+ 654.72 138 l
+ S
+ n
+ 697.92 132 m
+ 697.92 138 l
+ S
+ n
+ 741.12 132 m
+ 741.12 138 l
+ S
+ n
+ 784.32 132 m
+ 784.32 138 l
+ S
+ 67.2 131.52 m
+ /N8 19.44 Tf
+ (0) show
+ 50.88 172.8 m
+ (0.1)
+ [10.9214 5.51711 10.9214 ] pdfxs
+ 50.88 214.08 m
+ (0.2)
+ [10.9214 5.51711 10.9214 ] pdfxs
+ 50.88 255.36 m
+ (0.3)
+ [10.9214 5.51711 10.9214 ] pdfxs
+ 50.88 296.64 m
+ (0.4)
+ [10.9214 5.51711 10.9214 ] pdfxs
+ 50.88 337.92 m
+ (0.5)
+ [10.9214 5.51711 10.9214 ] pdfxs
+ 50.88 378.96 m
+ (0.6)
+ [10.9214 5.51711 10.9214 ] pdfxs
+ 50.88 420.24 m
+ (0.7)
+ [10.9214 5.51711 10.9214 ] pdfxs
+ 50.88 461.52 m
+ (0.8)
+ [10.9214 5.51711 10.9214 ] pdfxs
+ 50.88 502.8 m
+ (0.9)
+ [10.9214 5.51711 10.9214 ] pdfxs
+ 67.2 544.08 m
+ (1) show
+ 50.88 585.36 m
+ (1.1)
+ [10.9214 5.51711 10.9214 ] pdfxs
+ 106.56 122.88 m
+ /N8 [0 -19.44 19.44 0 0 0] Tf
+ (175.vpr)
+ [-10.8383 -10.8383 -10.8383 -5.43401 -9.74969 -10.8383 -6.50306 ] pdfys
+ 149.76 122.64 m
+ (197.parser-b)
+ [-10.8248 -10.8248 -10.8248 -5.4205 -10.8248 -10.8248 -6.48956 -9.73618 -10.8248 -6.48956 -6.48956 
+ -10.8248 ] pdfys
+ 192.96 122.88 m
+ (300.twolf)
+ [-10.8576 -10.8576 -10.8576 -5.45331 -5.45331 -14.0847 -10.8576 -4.36468 -5.45331 ] pdfys
+ 236.16 123.12 m
+ (bc)
+ [-10.7443 -9.65571 ] pdfys
+ 279.36 123.12 m
+ (ft)
+ [-5.52001 -5.52001 ] pdfys
+ 322.56 122.88 m
+ (analyzer)
+ [-10.8356 -10.8356 -10.8356 -4.34267 -9.74699 -9.74699 -10.8356 -6.50036 ] pdfys
+ 365.76 122.88 m
+ (llu-bench)
+ [-4.35258 -4.35258 -10.8455 -6.51027 -10.8455 -10.8455 -10.8455 -9.75689 -10.8455 ] pdfys
+ 408.96 122.88 m
+ (chomp)
+ [-9.81208 -10.9007 -10.9007 -16.2855 -10.9007 ] pdfys
+ 452.4 122.88 m
+ (fpgrowth)
+ [-5.47521 -10.8795 -10.8795 -6.54426 -10.8795 -14.1066 -5.47521 -10.8795 ] pdfys
+ 495.6 122.88 m
+ (espresso)
+ [-10.8801 -9.79148 -10.8801 -6.54486 -10.8801 -9.79148 -9.79148 -10.8801 ] pdfys
+ 538.8 122.88 m
+ (povray31)
+ [-10.834 -10.834 -9.74538 -6.49876 -10.834 -9.74538 -10.834 -10.834 ] pdfys
+ 582 122.88 m
+ (bisort)
+ [-10.8468 -4.35387 -9.75819 -10.8468 -6.51156 -5.44251 ] pdfys
+ 625.2 122.88 m
+ (health)
+ [-10.8228 -10.8228 -10.8228 -4.32987 -5.4185 -10.8228 ] pdfys
+ 668.4 122.88 m
+ (mst)
+ [-16.3141 -9.84069 -5.52501 ] pdfys
+ 711.6 122.64 m
+ (perimeter)
+ [-10.8336 -10.8336 -6.49836 -4.34067 -16.2184 -10.8336 -5.42931 -10.8336 -6.49836 ] pdfys
+ 754.8 122.88 m
+ (tsp)
+ [-5.48001 -9.79569 -10.8843 ] pdfys
+ 36.72 219.12 m
+ /N10 [0 19.44 -19.44 0 0 0] Tf
+ (Runtime ratio \(smaller is faster\))
+ [14.0833 11.9253 11.9253 6.52096 5.45191 17.3299 10.8562 5.52001 7.60989 10.8562 6.52096 
+ 5.45191 11.9253 5.52001 6.52096 10.8562 17.3299 10.8562 5.45191 5.45191 10.8562 7.60989 
+ 5.52001 5.45191 10.8562 5.52001 6.52096 10.8562 10.8562 6.52096 10.8562 7.60989 6.52096 
+ ] pdfys
+ n
+ 158.88 562.08 175.44 42 re
+ 1 1 1 sc
+ f
+ n
+ 158.64 562.08 175.68 42.24 re
+ 0 0 0 sc
+ S
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 158.88 580.8 21.12 23.28 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ n
+ 163.2 588.24 9.35999 9.35999 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ 176.4 587.76 m
+ /N8 15.6 Tf
+ (Base Pool Allocator)
+ [10.3764 8.64471 7.77111 8.64471 4.32 10.3764 8.64471 8.64471 3.43431 4.32 10.3764 
+ 3.43431 3.43431 8.64471 7.77111 8.64471 4.30791 8.64471 5.1658 ] pdfxs
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 158.88 562.32 21.12 21.36 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ n
+ 163.2 567.12 9.35999 9.35999 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ 176.4 566.64 m
+ (PA + All Optimizations)
+ [10.3473 10.3473 4.32 9.05239 4.32 10.3473 3.4052 3.4052 4.32 12.0788 8.61559 
+ 4.2788 3.4052 12.9367 3.4052 7.742 8.61559 4.2788 3.4052 8.61559 8.61559 7.742 
+ ] pdfxs
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Trailer
+ %%DocumentProcessColors: Cyan Magenta Yellow Black
+ %%DocumentSuppliedResources:
+ %%+ font Arial-BoldMT
+ %%+ font ArialMT
+ %%+ procset (Adobe Acrobat - PDF operators) 1.2 0
+ %%+ procset (Adobe Acrobat - type operators) 1.2 0
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial -150 1354 1993 3 v 84 1438 a Fn(Figur)o(e)18
+ b(9.)g Fj(Aggre)o(gate)h(e)o(x)o(ecution)h(time)e(ratios)g(\(1.0)f(=)g
+ (NoP)-6 b(A\))-47 2980 y @beginspecial 0 @llx 0 @lly
+ 792 @urx 612 @ury 1656 @rhi @setspecial
+ %%BeginDocument: Tables/CacheEffects.ps
+ %!PS-Adobe-3.0
+ %%Title: (\376\377)
+ %%Version: 1 2
+ %%Creator: (\376\377)
+ %%CreationDate: (D:20050420101903)
+ %%For: (\376\377)
+ %%DocumentData: Clean7Bit
+ %%LanguageLevel: 2
+ %%BoundingBox: 0 0 792 612
+ %%Pages: 1
+ %%DocumentProcessColors: (atend)
+ %%DocumentSuppliedResources: (atend)
+ %%EndComments
+ %%BeginDefaults
+ %%EndDefaults
+ %%BeginProlog
+ %%EndProlog
+ %%BeginSetup
+ %%BeginResource: l2check
+ %%Copyright: Copyright 1993 Adobe Systems Incorporated. All Rights Reserved.
+ systemdict /languagelevel known
+ { systemdict /languagelevel get 1 eq }
+ { true }
+ ifelse
+ {
+ initgraphics /Helvetica findfont 18 scalefont setfont
+ 72 600 moveto (Error: Your printer driver needs to be configured) dup show
+ 72 580 moveto (for printing to a PostScript Language Level 1 printer.) dup show
+ exch = =
+ /Helvetica-Bold findfont 16 scalefont setfont
+ 72 520 moveto (Windows and Unix) show
+ /Times-Roman findfont 16 scalefont setfont
+ 72 500 moveto (Select ªLanguage Level 1º in the PostScript options section) show
+ 72 480 moveto (of the Acrobat print dialog.) show
+ /Helvetica-Bold findfont 16 scalefont setfont
+ 72 440 moveto (Macintosh) show
+ /Times-Roman findfont 16 scalefont setfont
+ 72 420 moveto (In the Chooser, select your printer driver.) show
+ 72 400 moveto (Then select your printer and click the Setup button.) show
+ 72 380 moveto (Follow any on-screen dialogs that may appear.) show
+ showpage
+ quit
+ }
+ if
+ %%EndResource
+ userdict /pdf_svglb currentglobal put true setglobal
+ %%BeginResource: file Pscript_CFF PSVER
+ userdict/ct_CffDict 6 dict put ct_CffDict begin/F0Subr{systemdict/internaldict
+ known{1183615869 systemdict/internaldict get exec/FlxProc known{save true}{
+ false}ifelse}{userdict/internaldict known not{userdict/internaldict{count 0 eq
+ {/internaldict errordict/invalidaccess get exec}if dup type/integertype ne{
+ /internaldict errordict/invalidaccess get exec}if dup 1183615869 eq{pop 0}{
+ /internaldict errordict/invalidaccess get exec}ifelse}dup 14 get 1 25 dict put
+ bind executeonly put}if 1183615869 userdict/internaldict get exec/FlxProc
+ known{save true}{false}ifelse}ifelse[systemdict/internaldict known not{100
+ dict/begin cvx/mtx matrix/def cvx}if systemdict/currentpacking known{
+ currentpacking true setpacking}if{systemdict/internaldict known{1183615869
+ systemdict/internaldict get exec dup/$FlxDict known not{dup dup length exch
+ maxlength eq{pop userdict dup/$FlxDict known not{100 dict begin/mtx matrix def
+ dup/$FlxDict currentdict put end}if}{100 dict begin/mtx matrix def dup
+ /$FlxDict currentdict put end}ifelse}if/$FlxDict get begin}if grestore/exdef{
+ exch def}def/dmin exch abs 100 div def/epX exdef/epY exdef/c4y2 exdef/c4x2
+ exdef/c4y1 exdef/c4x1 exdef/c4y0 exdef/c4x0 exdef/c3y2 exdef/c3x2 exdef/c3y1
+ exdef/c3x1 exdef/c3y0 exdef/c3x0 exdef/c1y2 exdef/c1x2 exdef/c2x2 c4x2 def
+ /c2y2 c4y2 def/yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def/PickCoords{{
+ c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2}{c3x0 c3y0 c3x1
+ c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2}ifelse/y5 exdef/x5 exdef/y4 exdef
+ /x4 exdef/y3 exdef/x3 exdef/y2 exdef/x2 exdef/y1 exdef/x1 exdef/y0 exdef/x0
+ exdef}def mtx currentmatrix pop mtx 0 get abs 1e-05 lt mtx 3 get abs 1e-05 lt
+ or{/flipXY -1 def}{mtx 1 get abs 1e-05 lt mtx 2 get abs 1e-05 lt or{/flipXY 1
+ def}{/flipXY 0 def}ifelse}ifelse/erosion 1 def systemdict/internaldict known{
+ 1183615869 systemdict/internaldict get exec dup/erosion known{/erosion get
+ /erosion exch def}{pop}ifelse}if yflag{flipXY 0 eq c3y2 c4y2 eq or{false
+ PickCoords}{/shrink c3y2 c4y2 eq{0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs}ifelse
+ def/yshrink{c4y2 sub shrink mul c4y2 add}def/c1y0 c3y0 yshrink def/c1y1 c3y1
+ yshrink def/c2y0 c4y0 yshrink def/c2y1 c4y1 yshrink def/c1x0 c3x0 def/c1x1
+ c3x1 def/c2x0 c4x0 def/c2x1 c4x1 def/dY 0 c3y2 c1y2 sub round dtransform
+ flipXY 1 eq{exch}if pop abs def dY dmin lt PickCoords y2 c1y2 sub abs .001 gt{
+ c1x2 c1y2 transform flipXY 1 eq{exch}if/cx exch def/cy exch def/dY 0 y2 c1y2
+ sub round dtransform flipXY 1 eq{exch}if pop def dY round dup 0 ne{/dY exdef}{
+ pop dY 0 lt{-1}{1}ifelse/dY exdef}ifelse/erode PaintType 2 ne erosion .5 ge
+ and def erode{/cy cy .5 sub def}if/ey cy dY add def/ey ey ceiling ey sub ey
+ floor add def erode{/ey ey .5 add def}if ey cx flipXY 1 eq{exch}if itransform
+ exch pop y2 sub/eShift exch def/y1 y1 eShift add def/y2 y2 eShift add def/y3
+ y3 eShift add def}if}ifelse}{flipXY 0 eq c3x2 c4x2 eq or{false PickCoords}{
+ /shrink c3x2 c4x2 eq{0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs}ifelse def/xshrink
+ {c4x2 sub shrink mul c4x2 add}def/c1x0 c3x0 xshrink def/c1x1 c3x1 xshrink def
+ /c2x0 c4x0 xshrink def/c2x1 c4x1 xshrink def/c1y0 c3y0 def/c1y1 c3y1 def/c2y0
+ c4y0 def/c2y1 c4y1 def/dX c3x2 c1x2 sub round 0 dtransform flipXY -1 eq{exch}
+ if pop abs def dX dmin lt PickCoords x2 c1x2 sub abs .001 gt{c1x2 c1y2
+ transform flipXY -1 eq{exch}if/cy exch def/cx exch def/dX x2 c1x2 sub round 0
+ dtransform flipXY -1 eq{exch}if pop def dX round dup 0 ne{/dX exdef}{pop dX 0
+ lt{-1}{1}ifelse/dX exdef}ifelse/erode PaintType 2 ne erosion .5 ge and def
+ erode{/cx cx .5 sub def}if/ex cx dX add def/ex ex ceiling ex sub ex floor add
+ def erode{/ex ex .5 add def}if ex cy flipXY -1 eq{exch}if itransform pop x2
+ sub/eShift exch def/x1 x1 eShift add def/x2 x2 eShift add def/x3 x3 eShift add
+ def}if}ifelse}ifelse x2 x5 eq y2 y5 eq or{x5 y5 lineto}{x0 y0 x1 y1 x2 y2
+ curveto x3 y3 x4 y4 x5 y5 curveto}ifelse epY epX}systemdict/currentpacking
+ known{exch setpacking}if/exec cvx/end cvx]cvx executeonly exch{pop true exch
+ restore}{systemdict/internaldict known not{1183615869 userdict/internaldict
+ get exec exch/FlxProc exch put true}{1183615869 systemdict/internaldict get
+ exec dup length exch maxlength eq{false}{1183615869 systemdict/internaldict
+ get exec exch/FlxProc exch put true}ifelse}ifelse}ifelse{systemdict
+ /internaldict known{1183615869 systemdict/internaldict get exec/FlxProc get
+ exec}{1183615869 userdict/internaldict get exec/FlxProc get exec}ifelse}if}
+ executeonly def/F1Subr{gsave currentpoint newpath moveto}bind def/F2Subr{
+ currentpoint grestore gsave currentpoint newpath moveto}bind def/HSSubr{
+ systemdict/internaldict known not{pop 3}{1183615869 systemdict/internaldict
+ get exec dup/startlock known{/startlock get exec}{dup/strtlck known{/strtlck
+ get exec}{pop 3}ifelse}ifelse}ifelse}bind def end
+ %%EndResource
+ 
+ userdict /pdf_svglb get setglobal
+ /currentpacking where{pop currentpacking true setpacking}if
+ %%BeginResource: procset pdfvars
+ %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
+ %%Version: 5.0 6
+ %%Title: definition of dictionary of variables used by PDF & PDFText procsets
+ userdict /PDF 160 dict put
+ userdict /PDFVars 89 dict dup begin put
+ /docSetupDone false def
+ /InitAll 0 def
+ /TermAll 0 def
+ /DocInitAll 0 def
+ /DocTermAll 0 def
+ /_pdfEncodings 2 array def
+ /_pdf_str1 1 string def
+ /_pdf_i 0 def
+ /_pdf_na 0 def
+ /_pdf_showproc 0 def
+ /_italMtx [1 0 .212557 1 0 0] def
+ /_italMtx_WMode1 [1 -.212557 0 1 0 0] def
+ /_italMtxType0 [1 0 .1062785 1 0 0] def
+ /_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
+ /_basefont 0 def
+ /_basefonto 0 def
+ /_pdf_oldCIDInit null def
+ /_pdf_FontDirectory 30 dict def
+ /_categories 10 dict def
+ /_sa? true def
+ /_ColorSep5044? false def
+ /nulldict 0 dict def
+ /_processColors 0 def
+ /overprintstack null def
+ /_defaulttransfer currenttransfer def
+ /_defaultflatness currentflat def
+ /_defaulthalftone null def
+ /_defaultcolortransfer null def
+ /_defaultblackgeneration null def
+ /_defaultundercolorremoval null def
+ /_defaultcolortransfer null def
+ PDF begin
+ [/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
+ /applyInterpFunc/applystitchFunc/domainClip/encodeInput
+ /initgs/int/limit/rangeClip
+ /defineRes/findRes/setSA/pl
+ %% to keep CoolType entries in GlyphDirProcs safe from collisions with Win PS driver
+ /? /! /| /: /+ /GetGlyphDirectory
+ /pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
+ /pdf_shfill /pdf_sethalftone
+ ] {null def} bind forall
+ end
+ end
+ %%EndResource
+ PDFVars begin PDF begin
+ %%BeginResource: procset pdfutil
+ %%Copyright: Copyright 1993-1999 Adobe Systems Incorporated. All Rights Reserved.
+ %%Version: 4.0 2
+ %%Title: Basic utilities used by other PDF procsets
+ /bd {bind def} bind def
+ /ld {load def} bd
+ /bld {
+ dup length dict begin
+ { null def } forall
+ bind
+ end
+ def
+ } bd
+ /dd { PDFVars 3 1 roll put } bd
+ /xdd { exch dd } bd
+ /Level2?
+ systemdict /languagelevel known
+ { systemdict /languagelevel get 2 ge } { false } ifelse
+ def
+ /Level1? Level2? not def
+ /Level3?
+ systemdict /languagelevel known
+ {systemdict /languagelevel get 3 eq } { false } ifelse
+ def
+ /getifknown {
+ 2 copy known { get true } { pop pop false } ifelse
+ } bd
+ /here {
+ currentdict exch getifknown
+ } bd
+ /isdefined? { where { pop true } { false } ifelse } bd
+ %%EndResource
+ %%BeginResource: procset pdf
+ %%Version: 5.0 7
+ %%Copyright: Copyright 1998-2001 Adobe Systems Incorporated. All Rights Reserved.
+ %%Title: General operators for PDF, common to all Language Levels.
+ /cm { matrix astore concat } bd
+ /d /setdash ld
+ /f /fill ld
+ /h /closepath ld
+ /i {dup 0 eq {pop _defaultflatness} if setflat} bd
+ /j /setlinejoin ld
+ /J /setlinecap ld
+ /M /setmiterlimit ld
+ /n /newpath ld
+ /S /stroke ld
+ /w /setlinewidth ld
+ /W /clip ld
+ /initgs {
+ 0 setgray
+ [] 0 d
+ 0 j
+ 0 J
+ 10 M
+ 1 w
+ false setSA
+ /_defaulttransfer load settransfer
+ 0 i
+ /RelativeColorimetric ri
+ newpath
+ } bd
+ /int {
+ dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
+ exch pop add exch pop
+ } bd
+ /limit {
+ dup 2 index le { exch } if pop
+ dup 2 index ge { exch } if pop
+ } bd
+ /domainClip {
+ Domain aload pop 3 2 roll
+ limit
+ } [/Domain] bld
+ /applyInterpFunc {
+ 0 1 DimOut 1 sub
+ {
+ dup C0 exch get exch
+ dup C1 exch get exch
+ 3 1 roll
+ 1 index sub
+ 3 index
+ N exp mul add
+ exch
+ currentdict /Range_lo known
+ {
+ dup Range_lo exch get exch
+ Range_hi exch get
+ 3 2 roll limit
+ }
+ {
+ pop
+ }
+ ifelse
+ exch
+ } for
+ pop
+ } [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
+ /encodeInput {
+ NumParts 1 sub
+ 0 1 2 index
+ {
+ dup Bounds exch get
+ 2 index gt
+ { exit }
+ { dup
+ 3 index eq
+ { exit }
+ { pop } ifelse
+ } ifelse
+ } for
+ 3 2 roll pop
+ dup Bounds exch get exch
+ dup 1 add Bounds exch get exch
+ 2 mul
+ dup Encode exch get exch
+ 1 add Encode exch get
+ int
+ } [/NumParts /Bounds /Encode] bld
+ /rangeClip {
+ exch dup Range_lo exch get
+ exch Range_hi exch get
+ 3 2 roll
+ limit
+ } [/Range_lo /Range_hi] bld
+ /applyStitchFunc {
+ Functions exch get exec
+ currentdict /Range_lo known {
+ 0 1 DimOut 1 sub {
+ DimOut 1 add -1 roll
+ rangeClip
+ } for
+ } if
+ } [/Functions /Range_lo /DimOut] bld
+ /pdf_flushfilters
+ {
+ aload length
+ { dup status
+ 1 index currentfile ne and
+ { dup flushfile closefile }
+ { pop }
+ ifelse
+ } repeat
+ } bd
+ /pdf_readstring
+ {
+ 1 index dup length 1 sub get
+ exch readstring pop
+ exch pdf_flushfilters
+ } bind def
+ /pdf_dictOp
+ {
+ 3 2 roll
+ 10 dict copy
+ begin
+ _Filters dup length 1 sub get def
+ currentdict exch exec
+ _Filters pdf_flushfilters
+ end
+ } [/_Filters] bld
+ /pdf_image {{image} /DataSource pdf_dictOp} bd
+ /pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
+ /pdf_shfill {{sh} /DataSource pdf_dictOp} bd
+ /pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
+ /pdf_maskedImage
+ {
+ 10 dict copy begin
+ /miDict currentdict def
+ /DataDict DataDict 10 dict copy def
+ DataDict begin
+ /DataSource
+ _Filters dup length 1 sub get
+ def
+ miDict image
+ _Filters pdf_flushfilters
+ end
+ end
+ } [/miDict /DataDict /_Filters] bld
+ /RadialShade {
+ 40 dict begin
+ /background exch def
+ /ext1 exch def
+ /ext0 exch def
+ /BBox exch def
+ /r2 exch def
+ /c2y exch def
+ /c2x exch def
+ /r1 exch def
+ /c1y exch def
+ /c1x exch def
+ /rampdict exch def
+ gsave
+ BBox length 0 gt {
+ newpath
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ newpath
+ } if
+ c1x c2x eq
+ {
+ c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
+ }
+ {
+ /slope c2y c1y sub c2x c1x sub div def
+ /theta slope 1 atan def
+ c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
+ c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
+ }
+ ifelse
+ gsave
+ clippath
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ { pathbbox } stopped
+ { 0 0 0 0 } if
+ /yMax exch def
+ /xMax exch def
+ /yMin exch def
+ /xMin exch def
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }
+ {
+ rampdict begin
+ 40 dict begin
+ background length 0 gt { background sssetbackground gsave clippath fill grestore } if
+ gsave
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
+ /c1y 0 def
+ /c1x 0 def
+ /c2x 0 def
+ ext0 {
+ 0 getrampcolor
+ c2y r2 add r1 lt
+ {
+ c1x c1y r1 360 0 arcn
+ xMin yMin moveto
+ xMax yMin lineto
+ xMax yMax lineto
+ xMin yMax lineto
+ xMin yMin lineto
+ eofill
+ }
+ {
+ c2y r1 add r2 le
+ {
+ c1x c1y r1 0 360 arc
+ fill
+ }
+ {
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r1 neg def
+ /p1y c1y def
+ /p2x r1 def
+ /p2y c1y def
+ p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
+ fill
+ }
+ {
+ /AA r2 r1 sub c2y div def
+ /theta AA 1 AA dup mul sub sqrt div 1 atan def
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y p1x SS1 div neg def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y p2x SS2 div neg def
+ r1 r2 gt
+ {
+ /L1maxX p1x yMin p1y sub SS1 div add def
+ /L2maxX p2x yMin p2y sub SS2 div add def
+ }
+ {
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }
+ ifelse
+ }
+ ifelse
+ } ifelse
+ } if
+ c1x c2x sub dup mul
+ c1y c2y sub dup mul
+ add 0.5 exp
+ 0 dtransform
+ dup mul exch dup mul add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt { exch } if pop
+ /hires exch def
+ hires mul
+ /numpix exch def
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ } if
+ } if
+ /xInc c2x c1x sub numsteps div def
+ /yInc c2y c1y sub numsteps div def
+ /rInc r2 r1 sub numsteps div def
+ /cx c1x def
+ /cy c1y def
+ /radius r1 def
+ newpath
+ xInc 0 eq yInc 0 eq rInc 0 eq and and
+ {
+ 0 getrampcolor
+ cx cy radius 0 360 arc
+ stroke
+ NumSamples 1 sub getrampcolor
+ cx cy radius 72 hires div add 0 360 arc
+ 0 setlinewidth
+ stroke
+ }
+ {
+ 0
+ numsteps
+ {
+ dup
+ subsampling { round cvi } if
+ getrampcolor
+ cx cy radius 0 360 arc
+ /cx cx xInc add def
+ /cy cy yInc add def
+ /radius radius rInc add def
+ cx cy radius 360 0 arcn
+ eofill
+ rampIndxInc add
+ }
+ repeat
+ pop
+ } ifelse
+ ext1 {
+ c2y r2 add r1 lt
+ {
+ c2x c2y r2 0 360 arc
+ fill
+ }
+ {
+ c2y r1 add r2 le
+ {
+ c2x c2y r2 360 0 arcn
+ xMin yMin moveto
+ xMax yMin lineto
+ xMax yMax lineto
+ xMin yMax lineto
+ xMin yMin lineto
+ eofill
+ }
+ {
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r2 neg def
+ /p1y c2y def
+ /p2x r2 def
+ /p2y c2y def
+ p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
+ fill
+ }
+ {
+ /AA r2 r1 sub c2y div def
+ /theta AA 1 AA dup mul sub sqrt div 1 atan def
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y c2y p1x SS1 div sub def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y c2y p2x SS2 div sub def
+ r1 r2 lt
+ {
+ /L1maxX p1x yMax p1y sub SS1 div add def
+ /L2maxX p2x yMax p2y sub SS2 div add def
+ }
+ {
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }
+ ifelse
+ }
+ ifelse
+ } ifelse
+ } if
+ grestore
+ grestore
+ end
+ end
+ end
+ } ifelse
+ } bd
+ /GenStrips {
+ 40 dict begin
+ /background exch def
+ /ext1 exch def
+ /ext0 exch def
+ /BBox exch def
+ /y2 exch def
+ /x2 exch def
+ /y1 exch def
+ /x1 exch def
+ /rampdict exch def
+ gsave
+ BBox length 0 gt {
+ newpath
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ newpath
+ } if
+ x1 x2 eq
+ {
+ y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
+ }
+ {
+ /slope y2 y1 sub x2 x1 sub div def
+ /theta slope 1 atan def
+ x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
+ x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
+ }
+ ifelse
+ gsave
+ clippath
+ x1 y1 translate
+ theta rotate
+ { pathbbox } stopped
+ { 0 0 0 0 } if
+ /yMax exch def
+ /xMax exch def
+ /yMin exch def
+ /xMin exch def
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }
+ {
+ rampdict begin
+ 20 dict begin
+ background length 0 gt { background sssetbackground gsave clippath fill grestore } if
+ gsave
+ x1 y1 translate
+ theta rotate
+ /xStart 0 def
+ /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
+ /ySpan yMax yMin sub def
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ xStart 0 transform
+ xEnd 0 transform
+ 3 -1 roll
+ sub dup mul
+ 3 1 roll
+ sub dup mul
+ add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt { exch } if pop
+ mul
+ /numpix exch def
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ } if
+ } if
+ ext0 {
+ 0 getrampcolor
+ xMin xStart lt
+ { xMin yMin xMin neg ySpan rectfill } if
+ } if
+ /xInc xEnd xStart sub numsteps div def
+ /x xStart def
+ 0
+ numsteps
+ {
+ dup
+ subsampling { round cvi } if
+ getrampcolor
+ x yMin xInc ySpan rectfill
+ /x x xInc add def
+ rampIndxInc add
+ }
+ repeat
+ pop
+ ext1 {
+ xMax xEnd gt
+ { xEnd yMin xMax xEnd sub ySpan rectfill } if
+ } if
+ grestore
+ grestore
+ end
+ end
+ end
+ } ifelse
+ } bd
+ %%EndResource
+ %%BeginResource: procset pdflev2
+ %%Version: 5.0 15
+ %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
+ %%LanguageLevel: 2
+ %%Title: PDF operators, with code specific for Level 2
+ /docinitialize {
+ PDF begin
+ /_defaulthalftone currenthalftone dd
+ /_defaultblackgeneration currentblackgeneration dd
+ /_defaultundercolorremoval currentundercolorremoval dd
+ /_defaultcolortransfer [currentcolortransfer] dd
+ /_defaulttransfer currenttransfer dd
+ end
+ PDFVars /docSetupDone true put
+ } bd
+ /initialize {
+ PDFVars /docSetupDone get {
+ _defaulthalftone sethalftone
+ /_defaultblackgeneration load setblackgeneration
+ /_defaultundercolorremoval load setundercolorremoval
+ _defaultcolortransfer aload pop setcolortransfer
+ } if
+ false setoverprint
+ } bd
+ /terminate { } bd
+ /c /curveto ld
+ /cs /setcolorspace ld
+ /l /lineto ld
+ /m /moveto ld
+ /q /gsave ld
+ /Q /grestore ld
+ /sc /setcolor ld
+ /setSA/setstrokeadjust ld
+ /re {
+ 4 2 roll m
+ 1 index 0 rlineto
+ 0 exch rlineto
+ neg 0 rlineto
+ h
+ } bd
+ /concattransferfuncs {
+ [ 3 1 roll /exec load exch /exec load ] cvx
+ } bd
+ /concatandsettransfer {
+ /_defaulttransfer load concattransferfuncs settransfer
+ } bd
+ /concatandsetcolortransfer {
+ _defaultcolortransfer aload pop
+ 8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
+ 6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
+ 4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
+ concattransferfuncs
+ setcolortransfer
+ } bd
+ /defineRes/defineresource ld
+ /findRes/findresource ld
+ currentglobal
+ true systemdict /setglobal get exec
+ [/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource /Image]
+ { /Generic /Category findresource dup length dict copy /Category defineresource pop }
+ forall
+ systemdict /setglobal get exec
+ /ri
+ {
+ /findcolorrendering isdefined?
+ {
+ mark exch
+ findcolorrendering
+ counttomark 2 eq
+ { type /booleantype eq
+ { dup type /nametype eq
+ { dup /ColorRendering resourcestatus
+ { pop pop
+ dup /DefaultColorRendering ne
+ {
+ /ColorRendering findresource
+ setcolorrendering
+ } if
+ } if
+ } if
+ } if
+ } if
+ cleartomark
+ }
+ { pop
+ } ifelse
+ } bd
+ /knownColorants? {
+ pop false
+ } bd
+ /getrampcolor {
+ /indx exch def
+ 0 1 NumComp 1 sub {
+ dup
+ Samples exch get
+ dup type /stringtype eq { indx get } if
+ exch
+ Scaling exch get aload pop
+ 3 1 roll
+ mul add
+ } for
+ setcolor
+ } bd
+ /sssetbackground { aload pop setcolor } bd
+ %%EndResource
+ %%BeginResource: procset pdftext
+ %%Version: 5.0 6
+ %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
+ %%Title: Text operators for PDF
+ PDF /PDFText 78 dict dup begin put
+ /docinitialize
+ {
+ /resourcestatus where {
+ pop
+ /CIDParams /ProcSet resourcestatus {
+ pop pop
+ false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
+ } if
+ } if
+ PDF begin
+ PDFText /_pdfDefineIdentity-H known
+ { PDFText /_pdfDefineIdentity-H get exec}
+ if
+ end
+ } bd
+ /initialize {
+ PDFText begin
+ } bd
+ /terminate { end } bd
+ Level2?
+ {
+ /_safeput
+ {
+ 3 -1 roll load 3 1 roll put
+ }
+ bd
+ }
+ {
+ /_safeput
+ {
+ 2 index load dup dup length exch maxlength ge
+ { dup length 5 add dict copy
+ 3 index xdd
+ }
+ { pop }
+ ifelse
+ 3 -1 roll load 3 1 roll put
+ }
+ bd
+ }
+ ifelse
+ /pdf_has_composefont? systemdict /composefont known def
+ /CopyFont {
+ {
+ 1 index /FID ne 2 index /UniqueID ne and
+ { def } { pop pop } ifelse
+ } forall
+ } bd
+ /Type0CopyFont
+ {
+ exch
+ dup length dict
+ begin
+ CopyFont
+ [
+ exch
+ FDepVector
+ {
+ dup /FontType get 0 eq
+ {
+ 1 index Type0CopyFont
+ /_pdfType0 exch definefont
+ }
+ {
+ /_pdfBaseFont exch
+ 2 index exec
+ }
+ ifelse
+ exch
+ }
+ forall
+ pop
+ ]
+ /FDepVector exch def
+ currentdict
+ end
+ } bd
+ Level2? {currentglobal true setglobal} if
+ /cHexEncoding
+ [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
+ /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
+ /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
+ /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
+ /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
+ /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
+ /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
+ /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
+ /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
+ /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
+ /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
+ /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
+ /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
+ /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
+ Level2? {setglobal} if
+ /modEnc {
+ /_enc xdd
+ /_icode 0 dd
+ counttomark 1 sub -1 0
+ {
+ index
+ dup type /nametype eq
+ {
+ _enc _icode 3 -1 roll put
+ _icode 1 add
+ }
+ if
+ /_icode xdd
+ } for
+ cleartomark
+ _enc
+ } bd
+ /trEnc {
+ /_enc xdd
+ 255 -1 0 {
+ exch dup -1 eq
+ { pop /.notdef }
+ { Encoding exch get }
+ ifelse
+ _enc 3 1 roll put
+ } for
+ pop
+ _enc
+ } bd
+ /TE {
+ /_i xdd
+ StandardEncoding 256 array copy modEnc
+ _pdfEncodings exch _i exch put
+ } bd
+ /TZ
+ {
+ /_usePDFEncoding xdd
+ findfont
+ dup length 6 add dict
+ begin
+ {
+ 1 index /FID ne { def } { pop pop } ifelse
+ } forall
+ /pdf_origFontName FontName def
+ /FontName exch def
+ currentdict /PaintType known
+ { PaintType 2 eq {/PaintType 0 def} if }
+ if
+ _usePDFEncoding 0 ge
+ {
+ /Encoding _pdfEncodings _usePDFEncoding get def
+ pop
+ }
+ {
+ _usePDFEncoding -1 eq
+ {
+ counttomark 0 eq
+ { pop }
+ {
+ Encoding 256 array copy
+ modEnc /Encoding exch def
+ }
+ ifelse
+ }
+ {
+ 256 array
+ trEnc /Encoding exch def
+ }
+ ifelse
+ }
+ ifelse
+ pdf_EuroProcSet pdf_origFontName known
+ {
+ pdf_origFontName pdf_AddEuroGlyphProc
+ } if
+ Level2?
+ {
+ currentdict /pdf_origFontName undef
+ } if
+ FontName currentdict
+ end
+ definefont pop
+ }
+ bd
+ Level2?
+ {
+ /TZG
+ {
+ currentglobal true setglobal
+ 2 index _pdfFontStatus
+ {
+ 2 index findfont
+ false setglobal
+ 3 index findfont
+ true setglobal
+ ne
+ {
+ 2 index findfont dup rcheck
+ {
+ dup length dict begin
+ {
+ 1 index /FID ne { def } { pop pop } ifelse
+ } forall
+ currentdict end
+ }
+ if
+ 3 index exch definefont pop
+ }
+ if
+ } if
+ setglobal
+ TZ
+ } bd
+ }
+ {
+ /TZG {TZ} bd
+ } ifelse
+ Level2?
+ {
+ currentglobal false setglobal
+ userdict /pdftext_data 5 dict put
+ pdftext_data
+ begin
+ /saveStacks
+ {
+ pdftext_data
+ begin
+ /vmmode currentglobal def
+ false setglobal
+ count array astore /os exch def
+ end
+ countdictstack array dictstack pdftext_data exch /ds exch put
+ cleardictstack pdftext_data /dscount countdictstack put
+ pdftext_data /vmmode get setglobal
+ } bind def
+ /restoreStacks
+ {
+ pdftext_data /vmmode currentglobal put false setglobal
+ clear cleardictstack
+ pdftext_data /ds get dup
+ pdftext_data /dscount get 1 2 index length 1 sub
+ { get begin dup } for
+ pop pop
+ pdftext_data /os get aload pop
+ pdftext_data /vmmode get setglobal
+ } bind def
+ /testForClonePrinterBug
+ {
+ currentglobal true setglobal
+ /undefinedCategory /Generic /Category findresource
+ dup length dict copy /Category defineresource pop
+ setglobal
+ pdftext_data /saveStacks get exec
+ pdftext_data /vmmode currentglobal put false setglobal
+ /undefined /undefinedCategory { resourcestatus } stopped
+ pdftext_data exch /bugFound exch put
+ pdftext_data /vmmode get setglobal
+ pdftext_data /restoreStacks get exec
+ pdftext_data /bugFound get
+ } bind def
+ end
+ setglobal
+ /pdf_resourcestatus
+ pdftext_data /testForClonePrinterBug get exec
+ {
+ {
+ pdftext_data /saveStacks get exec
+ pdftext_data /os get dup dup length 1 sub
+ dup 1 sub dup 0 lt { pop 0 } if
+ exch 1 exch { get exch dup } for
+ pop pop
+ { resourcestatus }
+ stopped
+ {
+ clear cleardictstack pdftext_data /restoreStacks get exec
+ { pop pop } stopped pop false
+ }
+ {
+ count array astore pdftext_data exch /results exch put
+ pdftext_data /restoreStacks get exec pop pop
+ pdftext_data /results get aload pop
+ }
+ ifelse
+ }
+ }
+ { { resourcestatus } }
+ ifelse
+ bd
+ }
+ if
+ Level2?
+ {
+ /_pdfUndefineResource
+ {
+ currentglobal 3 1 roll
+ _pdf_FontDirectory 2 index 2 copy known
+ {undef}
+ {pop pop}
+ ifelse
+ 1 index (pdf) exch _pdfConcatNames 1 index
+ 1 index 1 _pdfConcatNames 1 index
+ 5 index 1 _pdfConcatNames 1 index
+ 4
+ {
+ 2 copy pdf_resourcestatus
+ {
+ pop 2 lt
+ {2 copy findresource gcheck setglobal undefineresource}
+ {pop pop}
+ ifelse
+ }
+ { pop pop}
+ ifelse
+ } repeat
+ setglobal
+ } bd
+ }
+ {
+ /_pdfUndefineResource { pop pop} bd
+ }
+ ifelse
+ Level2?
+ {
+ /_pdfFontStatus
+ {
+ currentglobal exch
+ /Font pdf_resourcestatus
+ {pop pop true}
+ {false}
+ ifelse
+ exch setglobal
+ } bd
+ }
+ {
+ /_pdfFontStatusString 50 string def
+ _pdfFontStatusString 0 (fonts/) putinterval
+ /_pdfFontStatus
+ {
+ FontDirectory 1 index known
+ { pop true }
+ {
+ _pdfFontStatusString 6 42 getinterval
+ cvs length 6 add
+ _pdfFontStatusString exch 0 exch getinterval
+ { status } stopped
+ {pop false}
+ {
+ { pop pop pop pop true}
+ { false }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ }
+ ifelse
+ Level2?
+ {
+ /_pdfCIDFontStatus
+ {
+ /CIDFont /Category pdf_resourcestatus
+ {
+ pop pop
+ /CIDFont pdf_resourcestatus
+ {pop pop true}
+ {false}
+ ifelse
+ }
+ { pop false }
+ ifelse
+ } bd
+ }
+ if
+ /_pdfString100 100 string def
+ /_pdfComposeFontName
+ {
+ dup length 1 eq
+ {
+ 0 get
+ 1 index
+ type /nametype eq
+ {
+ _pdfString100 cvs
+ length dup dup _pdfString100 exch (-) putinterval
+ _pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
+ 2 index exch cvs length
+ add 1 add _pdfString100 exch 0 exch getinterval
+ exch pop
+ true
+ }
+ {
+ pop pop
+ false
+ }
+ ifelse
+ }
+ {
+ false
+ }
+ ifelse
+ dup {exch cvn exch} if
+ } bd
+ /_pdfConcatNames
+ {
+ exch
+ _pdfString100 cvs
+ length dup dup _pdfString100 exch (-) putinterval
+ _pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
+ 3 -1 roll exch cvs length
+ add 1 add _pdfString100 exch 0 exch getinterval
+ cvn
+ } bind def
+ /_pdfTextTempString 50 string def
+ /_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
+ /_pdf_CheckCIDSystemInfo
+ {
+ 1 index _pdfTextTempString cvs
+ (Identity) anchorsearch
+ {
+ pop pop pop pop true
+ }
+ {
+ false
+ _pdfRegOrderingArray
+ {
+ 2 index exch
+ anchorsearch
+ { pop pop pop true exit}
+ { pop }
+ ifelse
+ }
+ forall
+ exch pop
+ exch /CIDFont findresource
+ /CIDSystemInfo get
+ 3 -1 roll /CMap findresource
+ /CIDSystemInfo get
+ exch
+ 3 -1 roll
+ {
+ 2 copy
+ /Supplement get
+ exch
+ dup type /dicttype eq
+ {/Supplement get}
+ {pop 0 }
+ ifelse
+ ge
+ }
+ { true }
+ ifelse
+ {
+ dup /Registry get
+ 2 index /Registry get eq
+ {
+ /Ordering get
+ exch /Ordering get
+ dup type /arraytype eq
+ {
+ 1 index type /arraytype eq
+ {
+ true
+ 1 index length 1 sub -1 0
+ {
+ dup 2 index exch get exch 3 index exch get ne
+ { pop false exit}
+ if
+ } for
+ exch pop exch pop
+ }
+ { pop pop false }
+ ifelse
+ }
+ {
+ eq
+ }
+ ifelse
+ }
+ { pop pop false }
+ ifelse
+ }
+ { pop pop false }
+ ifelse
+ }
+ ifelse
+ } bind def
+ pdf_has_composefont?
+ {
+ /_pdfComposeFont
+ {
+ 2 copy _pdfComposeFontName not
+ {
+ 2 index
+ }
+ if
+ (pdf) exch _pdfConcatNames
+ dup _pdfFontStatus
+ { dup findfont 5 2 roll pop pop pop true}
+ {
+ 4 1 roll
+ 1 index /CMap pdf_resourcestatus
+ {
+ pop pop
+ true
+ }
+ {false}
+ ifelse
+ 1 index true exch
+ {
+ _pdfCIDFontStatus not
+ {pop false exit}
+ if
+ }
+ forall
+ and
+ {
+ 1 index 1 index 0 get _pdf_CheckCIDSystemInfo
+ {
+ 3 -1 roll pop
+ 2 index 3 1 roll
+ composefont true
+ }
+ {
+ pop pop exch pop false
+ }
+ ifelse
+ }
+ {
+ _pdfComposeFontName
+ {
+ dup _pdfFontStatus
+ {
+ exch pop
+ 1 index exch
+ findfont definefont true
+ }
+ {
+ pop exch pop
+ false
+ }
+ ifelse
+ }
+ {
+ exch pop
+ false
+ }
+ ifelse
+ }
+ ifelse
+ { true }
+ {
+ dup _pdfFontStatus
+ { dup findfont true }
+ { pop false }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ }
+ {
+ /_pdfComposeFont
+ {
+ _pdfComposeFontName not
+ {
+ dup
+ }
+ if
+ dup
+ _pdfFontStatus
+ {exch pop dup findfont true}
+ {
+ 1 index
+ dup type /nametype eq
+ {pop}
+ {cvn}
+ ifelse
+ eq
+ {pop false}
+ {
+ dup _pdfFontStatus
+ {dup findfont true}
+ {pop false}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ }
+ ifelse
+ /_pdfStyleDicts 4 dict dup begin
+ /Adobe-Japan1 4 dict dup begin
+ Level2?
+ {
+ /Serif
+ /HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
+ {/HeiseiMin-W3}
+ {
+ /HeiseiMin-W3 _pdfCIDFontStatus
+ {/HeiseiMin-W3}
+ {/Ryumin-Light}
+ ifelse
+ }
+ ifelse
+ def
+ /SansSerif
+ /HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
+ {/HeiseiKakuGo-W5}
+ {
+ /HeiseiKakuGo-W5 _pdfCIDFontStatus
+ {/HeiseiKakuGo-W5}
+ {/GothicBBB-Medium}
+ ifelse
+ }
+ ifelse
+ def
+ /HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
+ {/HeiseiMaruGo-W4}
+ {
+ /HeiseiMaruGo-W4 _pdfCIDFontStatus
+ {/HeiseiMaruGo-W4}
+ {
+ /Jun101-Light-RKSJ-H _pdfFontStatus
+ { /Jun101-Light }
+ { SansSerif }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ /RoundSansSerif exch def
+ /Default Serif def
+ }
+ {
+ /Serif /Ryumin-Light def
+ /SansSerif /GothicBBB-Medium def
+ {
+ (fonts/Jun101-Light-83pv-RKSJ-H) status
+ }stopped
+ {pop}{
+ { pop pop pop pop /Jun101-Light }
+ { SansSerif }
+ ifelse
+ /RoundSansSerif exch def
+ }ifelse
+ /Default Serif def
+ }
+ ifelse
+ end
+ def
+ /Adobe-Korea1 4 dict dup begin
+ /Serif /HYSMyeongJo-Medium def
+ /SansSerif /HYGoThic-Medium def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ /Adobe-GB1 4 dict dup begin
+ /Serif /STSong-Light def
+ /SansSerif /STHeiti-Regular def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ /Adobe-CNS1 4 dict dup begin
+ /Serif /MKai-Medium def
+ /SansSerif /MHei-Medium def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ end
+ def
+ /TZzero
+ {
+ /_wmode xdd
+ /_styleArr xdd
+ /_regOrdering xdd
+ 3 copy
+ _pdfComposeFont
+ {
+ 5 2 roll pop pop pop
+ }
+ {
+ [
+ 0 1 _styleArr length 1 sub
+ {
+ _styleArr exch get
+ _pdfStyleDicts _regOrdering 2 copy known
+ {
+ get
+ exch 2 copy known not
+ { pop /Default }
+ if
+ get
+ }
+ {
+ pop pop pop /Unknown
+ }
+ ifelse
+ }
+ for
+ ]
+ exch pop
+ 2 index 3 1 roll
+ _pdfComposeFont
+ {3 -1 roll pop}
+ {
+ findfont dup /FontName get exch
+ }
+ ifelse
+ }
+ ifelse
+ dup /WMode 2 copy known
+ { get _wmode ne }
+ { pop pop _wmode 1 eq}
+ ifelse
+ {
+ exch _wmode _pdfConcatNames
+ dup _pdfFontStatus
+ { exch pop dup findfont false}
+ { exch true }
+ ifelse
+ }
+ {
+ dup /FontType get 0 ne
+ }
+ ifelse
+ {
+ dup /FontType get 3 eq _wmode 1 eq and
+ {
+ _pdfVerticalRomanT3Font dup length 10 add dict copy
+ begin
+ /_basefont exch
+ dup length 3 add dict
+ begin
+ {1 index /FID ne {def}{pop pop} ifelse }
+ forall
+ /Encoding Encoding dup length array copy
+ dup 16#27 /quotesingle put
+ dup 16#60 /grave put
+ _regOrdering /Adobe-Japan1 eq
+ {dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
+ if
+ def
+ FontName
+ currentdict
+ end
+ definefont
+ def
+ /Encoding _basefont /Encoding get def
+ /_fauxfont true def
+ }
+ {
+ dup length 3 add dict
+ begin
+ {1 index /FID ne {def}{pop pop} ifelse }
+ forall
+ FontType 0 ne
+ {
+ /Encoding Encoding dup length array copy
+ dup 16#27 /quotesingle put
+ dup 16#60 /grave put
+ _regOrdering /Adobe-Japan1 eq
+ {dup 16#5c /yen put}
+ if
+ def
+ /_fauxfont true def
+ } if
+ } ifelse
+ /WMode _wmode def
+ dup dup /FontName exch def
+ currentdict
+ end
+ definefont pop
+ }
+ {
+ pop
+ }
+ ifelse
+ /_pdf_FontDirectory 3 1 roll _safeput
+ }
+ bd
+ Level2?
+ {
+ /Tf {
+ _pdf_FontDirectory 2 index 2 copy known
+ {get exch 3 -1 roll pop}
+ {pop pop}
+ ifelse
+ selectfont
+ } bd
+ }
+ {
+ /Tf {
+ _pdf_FontDirectory 2 index 2 copy known
+ {get exch 3 -1 roll pop}
+ {pop pop}
+ ifelse
+ exch findfont exch
+ dup type /arraytype eq
+ {makefont}
+ {scalefont}
+ ifelse
+ setfont
+ } bd
+ }
+ ifelse
+ /cshow where
+ {
+ pop /pdf_cshow /cshow load dd
+ /pdf_remove2 {pop pop} dd
+ }
+ {
+ /pdf_cshow {exch forall} dd
+ /pdf_remove2 {} dd
+ } ifelse
+ /pdf_xshow
+ {
+ /_pdf_na xdd
+ /_pdf_i 0 dd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ {
+ pdf_remove2
+ _pdf_str1 exch 0 exch put
+ _pdf_str1 /_pdf_showproc load exec
+ {_pdf_na _pdf_i get} stopped
+ { pop pop }
+ {
+ _pdf_x _pdf_y moveto
+ 0
+ rmoveto
+ }
+ ifelse
+ _pdf_i 1 add /_pdf_i xdd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ }
+ exch
+ pdf_cshow
+ } bd
+ /pdf_yshow
+ {
+ /_pdf_na xdd
+ /_pdf_i 0 dd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ {
+ pdf_remove2
+ _pdf_str1 exch 0 exch put
+ _pdf_str1 /_pdf_showproc load exec
+ {_pdf_na _pdf_i get} stopped
+ { pop pop }
+ {
+ _pdf_x _pdf_y moveto
+ 0 exch
+ rmoveto
+ }
+ ifelse
+ _pdf_i 1 add /_pdf_i xdd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ }
+ exch
+ pdf_cshow
+ } bd
+ /pdf_xyshow
+ {
+ /_pdf_na xdd
+ /_pdf_i 0 dd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ {
+ pdf_remove2
+ _pdf_str1 exch 0 exch put
+ _pdf_str1 /_pdf_showproc load exec
+ {_pdf_na _pdf_i get} stopped
+ { pop pop }
+ {
+ {_pdf_na _pdf_i 1 add get} stopped
+ { pop pop pop}
+ {
+ _pdf_x _pdf_y moveto
+ rmoveto
+ }
+ ifelse
+ }
+ ifelse
+ _pdf_i 2 add /_pdf_i xdd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ }
+ exch
+ pdf_cshow
+ } bd
+ /pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
+ /pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
+ /pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
+ Level2? _ColorSep5044? not and
+ {
+ /pdfxs {{xshow} stopped {pdfl1xs} if} bd
+ /pdfys {{yshow} stopped {pdfl1ys} if} bd
+ /pdfxys {{xyshow} stopped {pdfl1xys} if} bd
+ }
+ {
+ /pdfxs /pdfl1xs load dd
+ /pdfys /pdfl1ys load dd
+ /pdfxys /pdfl1xys load dd
+ } ifelse
+ /pdf_charpath {false charpath} bd
+ /pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
+ /pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
+ /pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
+ /pdf_strokepath
+ {
+ {
+ pdf_remove2
+ _pdf_str1 exch 0 exch put
+ _pdf_str1 false charpath
+ currentpoint S moveto
+ } bind
+ exch pdf_cshow
+ } bd
+ /pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
+ /pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
+ /pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
+ Level2? {currentglobal true setglobal} if
+ /d0/setcharwidth ld
+ /nND {{/.notdef} repeat} bd
+ /T3Defs {
+ /BuildChar
+ {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+ }
+ def
+ /BuildGlyph {
+ exch begin
+ GlyphProcs exch get exec
+ end
+ } def
+ /_pdfT3Font true def
+ } bd
+ /_pdfBoldRomanWidthProc
+ {
+ stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
+ 0 0
+ } bd
+ /_pdfType0WidthProc
+ {
+ dup stringwidth 0 0 moveto
+ 2 index true charpath pathbbox
+ 0 -1
+ 7 index 2 div .88
+ setcachedevice2
+ pop
+ 0 0
+ } bd
+ /_pdfType0WMode1WidthProc
+ {
+ dup stringwidth
+ pop 2 div neg -0.88
+ 2 copy
+ moveto
+ 0 -1
+ 5 -1 roll true charpath pathbbox
+ setcachedevice
+ } bd
+ /_pdfBoldBaseFont
+ 11 dict begin
+ /FontType 3 def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /Encoding cHexEncoding def
+ /_setwidthProc /_pdfBoldRomanWidthProc load def
+ /_bcstr1 1 string def
+ /BuildChar
+ {
+ exch begin
+ _basefont setfont
+ _bcstr1 dup 0 4 -1 roll put
+ dup
+ _setwidthProc
+ 3 copy
+ moveto
+ show
+ _basefonto setfont
+ moveto
+ show
+ end
+ }bd
+ currentdict
+ end
+ def
+ pdf_has_composefont?
+ {
+ /_pdfBoldBaseCIDFont
+ 11 dict begin
+ /CIDFontType 1 def
+ /CIDFontName /_pdfBoldBaseCIDFont def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /_setwidthProc /_pdfType0WidthProc load def
+ /_bcstr2 2 string def
+ /BuildGlyph
+ {
+ exch begin
+ _basefont setfont
+ _bcstr2 1 2 index 256 mod put
+ _bcstr2 0 3 -1 roll 256 idiv put
+ _bcstr2 dup _setwidthProc
+ 3 copy
+ moveto
+ show
+ _basefonto setfont
+ moveto
+ show
+ end
+ }bd
+ currentdict
+ end
+ def
+ /_pdfDefineIdentity-H
+ {
+ /Identity-H /CMap PDFText /pdf_resourcestatus get exec
+ {
+ pop pop
+ }
+ {
+ /CIDInit/ProcSet findresource begin 12 dict begin
+ begincmap
+ /CIDSystemInfo
+ 3 dict begin
+ /Registry (Adobe) def
+ /Ordering (Identity) def
+ /Supplement 0 def
+ currentdict
+ end
+ def
+ /CMapName /Identity-H def
+ /CMapVersion 1 def
+ /CMapType 1 def
+ 1 begincodespacerange
+ <0000> <ffff>
+ endcodespacerange
+ 1 begincidrange
+ <0000> <ffff> 0
+ endcidrange
+ endcmap
+ CMapName currentdict/CMap defineresource pop
+ end
+ end
+ } ifelse
+ } def
+ } if
+ /_pdfVerticalRomanT3Font
+ 10 dict begin
+ /FontType 3 def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /_bcstr1 1 string def
+ /BuildChar
+ {
+ exch begin
+ _basefont setfont
+ _bcstr1 dup 0 4 -1 roll put
+ dup
+ _pdfType0WidthProc
+ moveto
+ show
+ end
+ }bd
+ currentdict
+ end
+ def
+ Level2? {setglobal} if
+ /MakeBoldFont
+ {
+ dup /ct_SyntheticBold known
+ {
+ dup length 3 add dict begin
+ CopyFont
+ /ct_StrokeWidth .03 0 FontMatrix idtransform pop def
+ /ct_SyntheticBold true def
+ currentdict
+ end
+ definefont
+ }
+ {
+ dup dup length 3 add dict
+ begin
+ CopyFont
+ /PaintType 2 def
+ /StrokeWidth .03 0 FontMatrix idtransform pop def
+ /dummybold currentdict
+ end
+ definefont
+ dup /FontType get dup 9 ge exch 11 le and
+ {
+ _pdfBoldBaseCIDFont
+ dup length 3 add dict copy begin
+ dup /CIDSystemInfo get /CIDSystemInfo exch def
+ /_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
+ /_basefont exch def
+ /_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
+ /_basefonto exch def
+ currentdict
+ end
+ /CIDFont defineresource
+ }
+ {
+ _pdfBoldBaseFont
+ dup length 3 add dict copy begin
+ /_basefont exch def
+ /_basefonto exch def
+ currentdict
+ end
+ definefont
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ /MakeBold {
+ 1 index
+ _pdf_FontDirectory 2 index 2 copy known
+ {get}
+ {exch pop}
+ ifelse
+ findfont
+ dup
+ /FontType get 0 eq
+ {
+ dup /WMode known {dup /WMode get 1 eq }{false} ifelse
+ version length 4 ge
+ and
+ {version 0 4 getinterval cvi 2015 ge }
+ {true}
+ ifelse
+ {/_pdfType0WidthProc}
+ {/_pdfType0WMode1WidthProc}
+ ifelse
+ _pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
+ {MakeBoldFont} Type0CopyFont definefont
+ }
+ {
+ dup /_fauxfont known not 1 index /SubstMaster known not and
+ {
+ _pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
+ MakeBoldFont
+ }
+ {
+ 2 index 2 index eq
+ { exch pop }
+ {
+ dup length dict begin
+ CopyFont
+ currentdict
+ end
+ definefont
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ pop pop
+ dup /dummybold ne
+ {/_pdf_FontDirectory exch dup _safeput }
+ { pop }
+ ifelse
+ }bd
+ /MakeItalic {
+ _pdf_FontDirectory exch 2 copy known
+ {get}
+ {exch pop}
+ ifelse
+ dup findfont
+ dup /FontInfo 2 copy known
+ {
+ get
+ /ItalicAngle 2 copy known
+ {get 0 eq }
+ { pop pop true}
+ ifelse
+ }
+ { pop pop true}
+ ifelse
+ {
+ exch pop
+ dup /FontType get 0 eq Level2? not and
+ { dup /FMapType get 6 eq }
+ { false }
+ ifelse
+ {
+ dup /WMode 2 copy known
+ {
+ get 1 eq
+ { _italMtx_WMode1Type0 }
+ { _italMtxType0 }
+ ifelse
+ }
+ { pop pop _italMtxType0 }
+ ifelse
+ }
+ {
+ dup /WMode 2 copy known
+ {
+ get 1 eq
+ { _italMtx_WMode1 }
+ { _italMtx }
+ ifelse
+ }
+ { pop pop _italMtx }
+ ifelse
+ }
+ ifelse
+ makefont
+ dup /FontType get 42 eq Level2? not or
+ {
+ dup length dict begin
+ CopyFont
+ currentdict
+ end
+ }
+ if
+ 1 index exch
+ definefont pop
+ /_pdf_FontDirectory exch dup _safeput
+ }
+ {
+ pop
+ 2 copy ne
+ {
+ /_pdf_FontDirectory 3 1 roll _safeput
+ }
+ { pop pop }
+ ifelse
+ }
+ ifelse
+ }bd
+ /MakeBoldItalic {
+ /dummybold exch
+ MakeBold
+ /dummybold
+ MakeItalic
+ }bd
+ Level2?
+ {
+ /pdf_CopyDict
+ {1 index length add dict copy}
+ def
+ }
+ {
+ /pdf_CopyDict
+ {
+ 1 index length add dict
+ 1 index wcheck
+ { copy }
+ { begin
+ {def} forall
+ currentdict
+ end
+ }
+ ifelse
+ }
+ def
+ }
+ ifelse
+ /pdf_AddEuroGlyphProc
+ {
+ currentdict /CharStrings known
+ {
+ CharStrings /Euro known not
+ {
+ dup
+ /CharStrings
+ CharStrings 1 pdf_CopyDict
+ begin
+ /Euro pdf_EuroProcSet 4 -1 roll get def
+ currentdict
+ end
+ def
+ /pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
+ /pdf_PathOps /pdf_PathOps load def
+ /Symbol eq
+ {
+ /Encoding Encoding dup length array copy
+ dup 160 /Euro put def
+ }
+ if
+ }
+ { pop
+ }
+ ifelse
+ }
+ { pop
+ }
+ ifelse
+ }
+ def
+ Level2? {currentglobal true setglobal} if
+ /pdf_PathOps 4 dict dup begin
+ /m {moveto} def
+ /l {lineto} def
+ /c {curveto} def
+ /cp {closepath} def
+ end
+ def
+ /pdf_PSBuildGlyph
+ {
+ gsave
+ 8 -1 roll pop
+ 7 1 roll
+ currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
+ dup 9 1 roll
+ {
+ currentdict /StrokeWidth 2 copy known
+ {
+ get 2 div
+ 5 1 roll
+ 4 -1 roll 4 index sub
+ 4 1 roll
+ 3 -1 roll 4 index sub
+ 3 1 roll
+ exch 4 index add exch
+ 4 index add
+ 5 -1 roll pop
+ }
+ {
+ pop pop
+ }
+ ifelse
+ }
+ if
+ setcachedevice
+ pdf_PathOps begin
+ exec
+ end
+ {
+ currentdict /StrokeWidth 2 copy known
+ { get }
+ { pop pop 0 }
+ ifelse
+ setlinewidth stroke
+ }
+ {
+ fill
+ }
+ ifelse
+ grestore
+ } def
+ /pdf_EuroProcSet 13 dict def
+ pdf_EuroProcSet
+ begin
+ /Courier-Bold
+ {
+ 600 0 6 -12 585 612
+ {
+ 385 274 m
+ 180 274 l
+ 179 283 179 293 179 303 c
+ 179 310 179 316 180 323 c
+ 398 323 l
+ 423 404 l
+ 197 404 l
+ 219 477 273 520 357 520 c
+ 409 520 466 490 487 454 c
+ 487 389 l
+ 579 389 l
+ 579 612 l
+ 487 612 l
+ 487 560 l
+ 449 595 394 612 349 612 c
+ 222 612 130 529 98 404 c
+ 31 404 l
+ 6 323 l
+ 86 323 l
+ 86 304 l
+ 86 294 86 284 87 274 c
+ 31 274 l
+ 6 193 l
+ 99 193 l
+ 129 77 211 -12 359 -12 c
+ 398 -12 509 8 585 77 c
+ 529 145 l
+ 497 123 436 80 356 80 c
+ 285 80 227 122 198 193 c
+ 360 193 l
+ cp
+ 600 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Courier-BoldOblique /Courier-Bold load def
+ /Courier
+ {
+ 600 0 17 -12 578 584
+ {
+ 17 204 m
+ 97 204 l
+ 126 81 214 -12 361 -12 c
+ 440 -12 517 17 578 62 c
+ 554 109 l
+ 501 70 434 43 366 43 c
+ 266 43 184 101 154 204 c
+ 380 204 l
+ 400 259 l
+ 144 259 l
+ 144 270 143 281 143 292 c
+ 143 299 143 307 144 314 c
+ 418 314 l
+ 438 369 l
+ 153 369 l
+ 177 464 249 529 345 529 c
+ 415 529 484 503 522 463 c
+ 522 391 l
+ 576 391 l
+ 576 584 l
+ 522 584 l
+ 522 531 l
+ 473 566 420 584 348 584 c
+ 216 584 122 490 95 369 c
+ 37 369 l
+ 17 314 l
+ 87 314 l
+ 87 297 l
+ 87 284 88 272 89 259 c
+ 37 259 l
+ cp
+ 600 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Courier-Oblique /Courier load def
+ /Helvetica
+ {
+ 556 0 24 -19 541 703
+ {
+ 541 628 m
+ 510 669 442 703 354 703 c
+ 201 703 117 607 101 444 c
+ 50 444 l
+ 25 372 l
+ 97 372 l
+ 97 301 l
+ 49 301 l
+ 24 229 l
+ 103 229 l
+ 124 67 209 -19 350 -19 c
+ 435 -19 501 25 509 32 c
+ 509 131 l
+ 492 105 417 60 343 60 c
+ 267 60 204 127 197 229 c
+ 406 229 l
+ 430 301 l
+ 191 301 l
+ 191 372 l
+ 455 372 l
+ 479 444 l
+ 194 444 l
+ 201 531 245 624 348 624 c
+ 433 624 484 583 509 534 c
+ cp
+ 556 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Helvetica-Oblique /Helvetica load def
+ /Helvetica-Bold
+ {
+ 556 0 12 -19 563 710
+ {
+ 563 621 m
+ 537 659 463 710 363 710 c
+ 216 710 125 620 101 462 c
+ 51 462 l
+ 12 367 l
+ 92 367 l
+ 92 346 l
+ 92 337 93 328 93 319 c
+ 52 319 l
+ 12 224 l
+ 102 224 l
+ 131 58 228 -19 363 -19 c
+ 417 -19 471 -12 517 18 c
+ 517 146 l
+ 481 115 426 93 363 93 c
+ 283 93 254 166 246 224 c
+ 398 224 l
+ 438 319 l
+ 236 319 l
+ 236 367 l
+ 457 367 l
+ 497 462 l
+ 244 462 l
+ 259 552 298 598 363 598 c
+ 425 598 464 570 486 547 c
+ 507 526 513 517 517 509 c
+ cp
+ 556 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Helvetica-BoldOblique /Helvetica-Bold load def
+ /Symbol
+ {
+ 750 0 20 -12 714 685
+ {
+ 714 581 m
+ 650 645 560 685 465 685 c
+ 304 685 165 580 128 432 c
+ 50 432 l
+ 20 369 l
+ 116 369 l
+ 115 356 115 347 115 337 c
+ 115 328 115 319 116 306 c
+ 50 306 l
+ 20 243 l
+ 128 243 l
+ 165 97 300 -12 465 -12 c
+ 560 -12 635 25 685 65 c
+ 685 155 l
+ 633 91 551 51 465 51 c
+ 340 51 238 131 199 243 c
+ 555 243 l
+ 585 306 l
+ 184 306 l
+ 183 317 182 326 182 336 c
+ 182 346 183 356 184 369 c
+ 614 369 l 644 432 l
+ 199 432 l
+ 233 540 340 622 465 622 c
+ 555 622 636 580 685 520 c
+ cp
+ 750 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-Bold
+ {
+ 500 0 16 -14 478 700
+ {
+ 367 308 m
+ 224 308 l
+ 224 368 l
+ 375 368 l
+ 380 414 l
+ 225 414 l
+ 230 589 257 653 315 653 c
+ 402 653 431 521 444 457 c
+ 473 457 l
+ 473 698 l
+ 444 697 l
+ 441 679 437 662 418 662 c
+ 393 662 365 700 310 700 c
+ 211 700 97 597 73 414 c
+ 21 414 l
+ 16 368 l
+ 69 368 l
+ 69 359 68 350 68 341 c
+ 68 330 68 319 69 308 c
+ 21 308 l
+ 16 262 l
+ 73 262 l
+ 91 119 161 -14 301 -14 c
+ 380 -14 443 50 478 116 c
+ 448 136 l
+ 415 84 382 40 323 40 c
+ 262 40 231 77 225 262 c
+ 362 262 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-BoldItalic
+ {
+ 500 0 9 -20 542 686
+ {
+ 542 686 m
+ 518 686 l
+ 513 673 507 660 495 660 c
+ 475 660 457 683 384 683 c
+ 285 683 170 584 122 430 c
+ 58 430 l
+ 34 369 l
+ 105 369 l
+ 101 354 92 328 90 312 c
+ 34 312 l
+ 9 251 l
+ 86 251 l
+ 85 238 84 223 84 207 c
+ 84 112 117 -14 272 -14 c
+ 326 -14 349 9 381 9 c
+ 393 9 393 -10 394 -20 c
+ 420 -20 l
+ 461 148 l
+ 429 148 l
+ 416 109 362 15 292 15 c
+ 227 15 197 55 197 128 c
+ 197 162 204 203 216 251 c
+ 378 251 l
+ 402 312 l
+ 227 312 l
+ 229 325 236 356 241 369 c
+ 425 369 l
+ 450 430 l
+ 255 430 l
+ 257 435 264 458 274 488 c
+ 298 561 337 654 394 654 c
+ 437 654 484 621 484 530 c
+ 484 516 l
+ 516 516 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-Italic
+ {
+ 500 0 23 -10 595 692
+ {
+ 399 317 m
+ 196 317 l
+ 199 340 203 363 209 386 c
+ 429 386 l
+ 444 424 l
+ 219 424 l
+ 246 514 307 648 418 648 c
+ 448 648 471 638 492 616 c
+ 529 576 524 529 527 479 c
+ 549 475 l
+ 595 687 l
+ 570 687 l
+ 562 674 558 664 542 664 c
+ 518 664 474 692 423 692 c
+ 275 692 162 551 116 424 c
+ 67 424 l
+ 53 386 l
+ 104 386 l
+ 98 363 93 340 90 317 c
+ 37 317 l
+ 23 279 l
+ 86 279 l
+ 85 266 85 253 85 240 c
+ 85 118 137 -10 277 -10 c
+ 370 -10 436 58 488 128 c
+ 466 149 l
+ 424 101 375 48 307 48 c
+ 212 48 190 160 190 234 c
+ 190 249 191 264 192 279 c
+ 384 279 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-Roman
+ {
+ 500 0 10 -12 484 692
+ {
+ 347 298 m
+ 171 298 l
+ 170 310 170 322 170 335 c
+ 170 362 l
+ 362 362 l
+ 374 403 l
+ 172 403 l
+ 184 580 244 642 308 642 c
+ 380 642 434 574 457 457 c
+ 481 462 l
+ 474 691 l
+ 449 691 l
+ 433 670 429 657 410 657 c
+ 394 657 360 692 299 692 c
+ 204 692 94 604 73 403 c
+ 22 403 l
+ 10 362 l
+ 70 362 l
+ 69 352 69 341 69 330 c
+ 69 319 69 308 70 298 c
+ 22 298 l
+ 10 257 l
+ 73 257 l
+ 97 57 216 -12 295 -12 c
+ 364 -12 427 25 484 123 c
+ 458 142 l
+ 425 101 384 37 316 37 c
+ 256 37 189 84 173 257 c
+ 335 257 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ end
+ Level2? {setglobal} if
+ currentdict readonly pop end
+ %%EndResource
+ PDFText begin
+ [userdict /pdf_svglb currentglobal put true setglobal
+ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
+ /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
+ /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
+ /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
+ /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+ /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+ /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+ /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+ /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
+ /guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
+ /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
+ /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
+ /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
+ /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
+ /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
+ /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
+ /hungarumlaut/ogonek/caron
+ 0 TE
+ [1/dotlessi/caron 39/quotesingle 96/grave 
+ 127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
+ /dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
+ /bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
+ /quotedblright/bullet/endash/emdash/tilde/trademark/scaron
+ /guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
+ /currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
+ /guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
+ /twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
+ /onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
+ /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+ /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+ /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
+ /Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
+ /aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
+ /ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
+ /ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
+ /ucircumflex/udieresis/yacute/thorn/ydieresis
+ 1 TE
+ end
+ 
+ userdict /pdf_svglb get setglobal
+ currentdict readonly pop
+ end end
+ /currentpacking where {pop setpacking}if
+ PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
+ PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
+ PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
+ PDFVars begin PDF begin
+ PDFVars/DocInitAll get exec PDFVars/InitAll get exec
+ PDFVars/TermAll get exec end end
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%BeginPageSetup
+ userdict /pgsave save put
+ PDFVars begin PDF begin PDFVars/InitAll get exec
+ userdict begin
+ userdict /pdf_svglb currentglobal put true setglobal
+ %%BeginResource: font Arial-BoldMT
+ ct_CffDict begin
+ %!FontType1
+ 16 dict begin
+ /FontInfo 15 dict dup begin
+ /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated.  All Rights Reserved.Arial is a trademark of The Monotype Corporation. registered in the US Patent and Trademark Office and elsewhere.) def
+ /version (001.001) def
+ /FullName (Arial MT Bold) def
+ /FamilyName (Arial MT) def
+ /Weight (Bold) def
+ /ItalicAngle 0 def
+ /isFixedPitch false  def
+ /UnderlinePosition -100 def
+ /UnderlineThickness 50 def
+ end def
+ /FontName /Arial-BoldMT def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 0 /.notdef put
+  def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0 ] def
+ /FontBBox { -167 -250 1006 939 } def
+ /XUID [6 44341 ] def
+ /StrokeWidth 0 def
+ currentdict end
+ currentfile eexec A0B00ED5187D9C0F1ECDF51878C3AA5CAA3FFCA5020F48
+ 69FCFE28B419AB05B54FAF364D68E82805BE1C1765A19BEC4D29A426539E9449
+ 5BE860D6EEF29ED037F1F407E7FE48577F0B69E118A7C8737034DBBD04699FA2
+ 80A7C6E922784295ED8C74A3C79BEB5BC6F95B767A170D04BD8041F7BDA3426A
+ 0B38EEBC414A4A52B6E26531115CF035146099BDF3B8A00193EF9C63D5056C56
+ 27F34FF02A444A05338ECAEBA23251AC7E7B67DA94C2F71DFB3E6EBBF2B8CD64
+ C128D630515F608E6436F23A665C100FEB078798141BB5533A2BE422590BB1C5
+ 6D0F257E7C6438DB38F18E581BEDF1D3810B75C017FCEA8F9EAF3B486651B632
+ F2D1D16279E221FE73375419D0A086839CFAAECC1618C4E60207E167DD9AEDDC
+ 37E07006BA902F4A4531AE919B9048413BE1EF9D321A92DD52A1B9B85D11116C
+ 5DEDF1C2112BD4E7BD1754F72123471DF2FA90FE00256B54B0D7DB81E1035390
+ 4317D65A1B999795B9214ADD5CB2BD50C71B0C1C65DD95F7420FF93451281A99
+ B3403CD0905E899046B1D4EEC1339434B286D808782ED4CC6D04AE1C92F14D32
+ 73DD3E4C697AF30E029C876DC06033C5A55623074B84A6E5244237ADF6B563B4
+ EE13D3EFCE21281E3F54526F5F1E4A5BC6CBD568A3D82E17B552176D7D0FC581
+ 20F2549FB6A55AE982185B67D6962DBB1ECB64F77A2FBF7D597479E05AD8B833
+ 7B2A2747961C244F8D47CE7372A440D2FA986D2EB57A64721615F6BFCCA1F0BF
+ 2EDAD01479994BB51DC4EB7C590A90EE81A1F3E477D760E7C886EF03BF55124C
+ 0A00F228D50F4F869ED28BF35C094F39087571769F759BE1EE3598DD5B58C9D8
+ F85B744EF72FE601843D977E137AFCEF4E4E212035638E3E598B0EF2AE58E876
+ 6440B3C60438D7A0EC054648CD04EB0A8E9A793E4F7FC322525C8AE24C726691
+ 2A880F47C52FFC40B3974DF4D22C8B2BFC3ED011DD9B3FD11DEEAB8E04ACA611
+ 2723B29E0D04F63BDD5B0836CA33BAD1310235EE9F1D69A5202F4CD581B8F66D
+ F5C9C045D628F0899B7E4188D2B262C1623403446E40C8CA3163884FDBA560D8
+ A5449EDF3D6C52D1CAB8CBC763E39BAA68DDD188E021AB803EE3A6EE2EED2DD3
+ 3E16D7B4A6AB33E849F894DDEC6CEFF007273F6693A44103C76BFDF0BFE9C415
+ A3E69746FB35A20E885252D78F90692D0C7101FDE9E9EBB2953CD34F4D771E35
+ A692E77C2B9045619A2BC3C2C058FA85589E32A5F4FEDFC98E4FD378AE32CB89
+ 1A232210A3DA6F1266BA3BC55D748A864207064F4161EF8BDFBD9CCCBBCC1290
+ FA3551CB543E7F74A8D7889B0A88EA23AD4B2787D084813663A144F34D0870B8
+ 6FE2842D825DA8A6B33F9F886E82D3D4F39098AD8F9452474D3375FC9EC1255D
+ 017F13417A5EC4C91E2CB3796EB6D06F8499CA959785EEB01882D86D1A4AD689
+ D802AF92E181B6276C0F267BAB4EBCDBC9CD978D93346EDCA8D28EA961C02347
+ A9D9D531C73FEB745BA8BC37B94624E1E706D82B38CF26F434C596C821F445CD
+ A2CEDC3B10C63CC9CD2D506BCBE24C3E54B6E062298F094F6F2259271A2D8761
+ FC07930CC62082493640A41C7C10BE1C659753638AB0F2FC3D2C22B355BA186B
+ 93B8EAF547557DAB8EEE8AF3B86BE3651D7B1455334062D7E20402F2AAEE9BFB
+ 6080A9AABD2611E581B25AEFEB596B08ED24ABC715FAF69863088C659A4C8E1C
+ 996B38C78BAE579AE0D181AE39B4C9C18A3B9278A1FD02EA8302C833376FC171
+ BF9EAC985AAC026D472ED294051FE7C805714A13DB53938EB2501653B0404352
+ CE6118F10D5F8A49D69BA3EE59FDF7F7B1ED07C1236A606C5B4D41321762E046
+ 8019D9C64084A4C3DD4AEA4EB00D34EA00C643072CF5E44EA325EF80A9EEFD8F
+ 2C3C7E74EDE6A9AA0C191A2599B16FB09BF5EC8C9A2B1F17F6A1D8B598E311F7
+ 4D2E047E053FC5F86E2D1FB64E78770DFC12F37985CAA063509B80A0269DB7F4
+ 8D9B1DA6D24C3D27669B115EBE4CAF75EA2586724A9C1649F5C9F8D77776C904
+ B52548DB3482119439BD2E3FBFFD4D1C602171437A57A3675658F8A346883EC2
+ 0596DB9BB3B0F76AF1EC6A7BEEC44B39B76F24E427B15881D06F1DE0A499FF69
+ 5D2C8B60A0CF57473F8607559DBCDA5D7C1544649F4F67C963EFFFE39F1D5471
+ 7F303E886C54EA23DF62A172B5E75B1EDB98FC4ABB897E5E1DDCC5305BFF4E9F
+ C9BB5EFFC6F970A9D604231519A522606B3C9AA2AB17E6474EADA0B494A5439D
+ 0BD84093110E243CFFF77B68E57E70C5662BC7264D6CF6CF1DBB65712A311E8C
+ 2FDD3082AB7117A9802F46E8E6585673021AC210E8E821B7E5B8E63A6B68D78D
+ BE14692778BA472948C3DD2312BE3656382DB847E12F945DD6559FC8472F7466
+ B28DCF25F249F0AC849871950B631A72606B8A3974FC27C9056F8BB8C88FBE36
+ 4CE0E64AB23F1D8C10A435302124A6577FC6F4D13FA5B65F4C428FB9410EB583
+ D62B2562654F1262209B130E7D779BBF67DED0874158CEE3EC414E6AF78EA5B0
+ 51CF785BD7DF00AD450565245090EC55D5F03B0181413E02C73E851263AA425A
+ 1834E1E854BD004F1FC7E9C1E171D97129BCD9568F86AD51727BE077BF6AE2F1
+ 672DE2CE46411C7D22B19078DBEFC082A73C979905E01133CD633CA92595C6B0
+ DB688BB2DD5C8917D3BBCA94A994B84223AB4414B7B9CF19BDDD78FD215508EF
+ 4C1B52575493FFC1B0C00EDB5EA0719AB94DE49B507AE15BC0244B2A47474E6B
+ E5B846D3315425257B10868588EE49AE2E2A52EBDA205612E31EE015A95F9BDA
+ 494D5648F762997DAF12A512B3C43DF42729C0D21EA513151BA5DBE93F2A15CA
+ FFE20D77D30498782CA383EF952FF7B5EB19A2F0C5971D98CACDD7D8035D527E
+ 253BA55C2ABDC8E1778D882BC84E777A3B6051FF167FECA275B062BC67BAACC1
+ 118AF58B082E8E4BC6FC7A80913A55C547D1DBBE57CB153A879D8BC02E2632F7
+ 2061F11B252EEEC0B65853BFD0E6285439EA5A8A35B6C7E21A39ECACB39D0DC5
+ 1D84FCAB4526021F9865D2EF3A1E4869F19D2966684339CB5A40D7D73C392DE6
+ 29ADDF581649B180EFC6929ADA1958BD0AC8B17C88E364D9B908953FE60348C0
+ 4015C80A4222D9CB14E4D51FEDABD792EAB645CDF7CA65674327DD1987A89F86
+ 0B57095EE175B0F8B7EBA84D867FCA3DFEAEF38FE2769CE6751D17418D0368EA
+ 3327817A4CAF67D9F2AB7DA404E69C7FB35BC7BE7C1B429F64F687D4797CD398
+ 311D643B8C7E30D5EF3EAB2A990F4385C3B0AD5C44F34FA306CBF0E52E7CF164
+ 20FBD608DF9D2208029399E85EF137725748F95868AA280C6CA2D726687EFF7E
+ 1C26AA1D8A08D87BBAA3D222CFB9102DF9990841CCCBF7D717813FC43099FAA6
+ CF3A7FFF2BE6A869BDF92D8FEE4A89D16C9BD3ABEAA6E07B13CE597F12C95732
+ BB14C9A9A4902F27870FDBD4CF70EB37DB47C130564C18CB0A87AA09F7C5E045
+ FC0D0B8B7EDD1C3F6F0D4EC46831B1B0D1CAB2C6E0EAF49B59654F5BDEBA31E7
+ 4E35397A004996A281A44C802E1305E21C7EC9CF0F3E82BE805AFD4EC2F9FABD
+ E555A9EC58657D62E65A3A6AA610D87B89474EA2C0ABEB919B534D1F7177273B
+ BD0DBEBCE083BF67EAF2140F12FA6E48D8AB8ED2A874C821F66EB27DFF953865
+ B4148AC5B3540D6E0B5D8D42850DC20486AC50907007C82CFCAE6C85E6DEBFAE
+ 3B00861F75BC5D6F28412851C658EA9CB9015A9D8AECF427FF575BEC703FC583
+ 8525D86F7DA7FDA35C03DFED51BD629C5CE1F90A79B9E404BF94FEB843D5A564
+ A100624431DC55E2B7DA8D04C84F7278C4F55AE63B44714861FA24E7B9B359EB
+ 1879A9F3000A005918ACDFC0A8AC38997EDB24CA4DCFCF3019DF0F5558D95743
+ DFDEEB434C525765431A987AEA620CD5FB939B49D9BAC76D62BFDE83DF981673
+ 674DA67BCFFB68DBAAB3889F3EEC8D7CED342A27991473410AF46F55D950111E
+ 87FDE431201DC5077C2B7480B1F5CE0ED2E60AC63C22A5578C193931532B7820
+ E997333B8B6DF8ADC96C59C63164AD4911137BA379C92FF8905B40D6E8B22569
+ 6576BD0C42E3A7934BF67D11962B5962CA91232FB61CA3EA105A7F8BB6EBF604
+ 7CED87B27D056BFCA557B3D1213C1A807C0EC9D25A863EF4BC569F6467D837A5
+ E72EAC1BD6649D6E55B992F1282406631264D040EA8FA1A76DB77D5516557C74
+ D774F2704248B41143F81A0757ED477E1E693604F761BBC6A0A47D6C5E1BA8EF
+ 59BB3C4D6FC027490138F792DFFED59B1D8ACC964F845BAE1106728DBC1776A1
+ 89C2BE31C01BABA8EFC45B6E6CAD399638EFABF0D4B45052ADE173859AE3D6E6
+ 9E85BE3DAE09458781FC9C871C856C9E3B8C581318F700E27475E93A77D00025
+ AF26B9AE72B81122A56A57C8459DF38926ED208F8FDC4443BFF2BD2E8D589873
+ A947BE6AE8D501516D0A586EF0C39D13822325AF939C39B1D17CC2286FB8FA82
+ E045C283380D9D627AAD6B4D4AB800EF9BBC3AEE1398E0571B372B14F1EA15C7
+ 9148AA2DA402A72354D6C20093CC4EF4126C27727E0D5902665801E1D050B28F
+ 862A060841D463C69F64C60B1B169354CF07B1483ACAB968AD6ADDF317F9ACE3
+ 85A274A39B3466B667689F16F50FBCCE75BB8EA6666CC69F4E460D17CEB7AE5C
+ CE3DAA9FE2110CD355E02CAE06074F99DA950DFA65B536ABA9F1B852C4A2D961
+ 1A2564220ADA708E670541D32393F1071BC876281A33E5C9673E61EADD8B1680
+ F5E69E1351D9683B58C053909B02BA394243315350875B209F56DF54F4DE83AA
+ 3E8F7CC4BA8FD8280FD516EFAAAA2881DD9514F644B6E893207BD4026FFE2252
+ AF806254492FA55CE7D09F1B66243A72462B03D54350E6A55BC6F12EDE24149A
+ 18C6A45788C3BD3858E084155E4A15EEE56F48E6B019D2EB2D400B9117946949
+ 4CD70B9703B3CC04772447AD2B968B49A8F9B07A0EB1199D78283FC914982841
+ 36965AB09BE1E5CB7C7974667543AD854827B7333FC458D680A06C491CCD9E39
+ D1E745BA3577A7CEF63A909C04CD9DE56AB57DA35B9AE97284516ADDDE7B59A5
+ B5B55B5F7E49BA648900A7D511D3E7AC47693FE4DE21EB0FA6EF3AA35B980C22
+ BE7BB24D6D31BC9E9376E7801F6946B41DC629FF341172174997D9D8111EA72C
+ AF09A38923DF201A2A2851EC341AE8DE43AD52DF3001FF15AA6BFF95F2A84DF6
+ B521241BBB9D6010D09023312B54ACE4A0FCFDA9D8D21255A249A150C9E0A7D1
+ AD894B82F9798E5CB072BCBBDFC5B79086BBC1B91E5C610DEA0F32A3F7F7317F
+ 9E4BC64042C41113D9ABF187120A734CE563426B8E7AAECAF43F5228D026E5B1
+ 28DC8B6BC21264992D92F0AAF93018880FDDFDAAF7874A06B7D6412B9AF3BF1A
+ 6E58EF8E5C4283DD70BC40D0F0007E362424D629D9E1D877CA534E040A470071
+ 7285DAE114C95D0A7ECFA95CFC79A5CA35FD190906C2CA17AF02E07FD68958BA
+ E33ACFFDC2478E099386AF4F2ADD465B25530A62E959FAD1AAB96A6C69420021
+ 63B4EF8EB833C61701FC8A5DE37EEC42A1E574333ECC4DEFF71AE771B8344CD3
+ F19A4A10A9984260622D770087E6F2FD5714E2F620079BCFCD6C1A9F5DE21D20
+ AC45FC8C37A4DE50F88BCCE8569948E82B4CF6420CFBA7FDF1D95BD59A89845E
+ AAAC3C4CADAC48AB3ED5D37A6466CB1AC31C3C7182D421EA4CD7C2FE6D934098
+ B87F457A4F498352E9BA688DB0B06857BA2ACCAEBB85CC2FD71B6103BA00AD14
+ 55FF2FD9F53FACCF869337A7F2AB7B484F247160C6753DBFE587A1EB383B7C43
+ 5860D8C3702B44711794C8559C1B8B97EB73B5FABDAD1FACDDC79BE1EA48F39C
+ 6D1799FFD4CF7971B97A8222CDF027C7FD8F7B4ED8B474713FAE4529F87000B5
+ BCF5CA520D1450ECF367865D15856F4D127D8D98AEC55D464B96288068C0EE44
+ 918E7F7909FCE4100CA06C24326380EEB0F4EEEAD49CE2C72FE93FB7ED764CE0
+ 015039ED26935497A15583F6F0463A6CEC9323AFEB6D1722078FE036D56DE441
+ 8FF5D396F9C98E41838DF1846F7D02D75A1376AD7F88C843A5D0B0233461719B
+ 2C0C271E42CD5FF6A799F516E8906F109E707BEE6D71581FC76D349ACB242D0D
+ 5CD9FD6EF5ADB121F904848F3184A3C2CC0DECE579D3438D4CD7B173FC4FDFBD
+ FD604FD61421E039908475DA6BDB61AEACDA9C225119301A5CE0F5F783F9F1EF
+ E58882E7565C93AAE411CAE92BB2AFA127D45BD7F477480148CAED36B30F14DC
+ 7A69B3B88F13047DD20EA481A13EF25AA98F66FE6F10AEA03DF80A1FA34A9D04
+ 7E1CA9E37DDC0AC18978E8BCFF43DD81D0122A707C949C7ECA3EF598438B5679
+ 915CFE2A9576E66981B91F637E666809E90895DC06CC543DE2C3380A4ED2D05A
+ 821DA469044EFC5F12C1CFD5037903675A703ACF2C1B49029A63D2A0B43D044D
+ 584FE44866A328545370001670165FAA76C57B97035432AF3536F892D93E30AE
+ 6495E4A6AE9E1C16ED2F5AB3F2BF81DB48D70DFEF38F1DA3A468208C21572491
+ FCC4D92E17DFD95F365FE8D9D2D25B9C997E72DFCD2EF4B302ED428A9645298F
+ E20BB0EA75C189FB2E3E7A8E463FAF92AD214CC9263001F27758770CDAF007C8
+ BCC9A085320B1F88AF02A88F9FD0120DF5C4104C2049304E360A22781CC2C27E
+ 9B661C7345BC1E61C451AC4285DEF04B0CFD137588BC0411F60F51F1254BC78E
+ C599E5A5B937261AE3B612B8C2FD49DAA029DB24B3DFC510D708D97EF0AD2473
+ 27BFEF55BC3D6EE029014B3F88DE0E285B9378DD28CC2A8CA33BAB3E94EEDD69
+ D95309FBC1DD6CB786D5FA277531679E33F8347876997B80F8B76594D1607F30
+ 572EF1FF3361091EDAC28619803293FC40080F32B1DF166483FE6D81C94FB8BE
+ BA913D97C251909437780F2B403E33B0DA48497552FCF7BE786BFE9D2CCD5C24
+ F54A0D3865C70C07C999E5FA0B822B916966A68310F5C692662746B2EE862BF0
+ 5AF5F5EF1B1B6F741AAA581E9E1EF2916F1407B89C8E8C33BB5F48609E881761
+ 5F5600E7013043B5DC141B951D6FAEF604849E3964C13BFE016A704791911276
+ B0CCAF564B5CC6023A3334E69A02CA7BA64328B8F81C4C3FBCD779C763AA60EF
+ 6419FD6C0E416F5CE6A32096B737754F7DE6761CE028AD97CFDE2D16596CA20D
+ 5DE765F602758E4E635AC388CDB54E7E82D9516F2F8BD5059353F1A3BF030FBC
+ BCB1F18E76E9392B9340C2422C8DA7717F4EBE7112FD5BA7DD641C99DD65D6C8
+ 27C715B9433A54873B2FBAFCDFD786699E24A7E7DE78BF4286D5B143A296DFD8
+ F8619E732B7152DCD00441D192CE08167C53A3E70745C3BDDC3F5C692A001D02
+ F2E36ECB32939D61C7ADE4FE924F1F8DB67D08BCF492D2421FEE4C6687E5AC26
+ BF8A06A5CF79C5A5A627A14189110DB91E01A4F2D3D92F187918A6967713FBDE
+ 75022B551F8B999AD41A1F0F7FCF7C2E41F263B414CE924A7E88A47420E6911A
+ 27C971F333BFB47D7306BF74B44389F54BF9E51BE849F70DA288D16F7D091CA8
+ 10DDB815056B0F8AB66D45E58B1779CB79223D32475901C122A4E7067B8E54B9
+ 5A064CCB7808086CC0C8B7ACC66CEF056F3B4231E62D8D3A7C58929C3B25C40B
+ 427ACF3DE83F50D3C23236124642AA17C9299364BE276D3F2D58459A1E58B8C8
+ 7EAB08390A461317C33B41881B46089FE5A4ADFB24B052877CD2998C631B8B7C
+ 3AE7C239DF03BF51E93A3ECA6AFA98DA43E981700240CBF7F96B0F8BF9B03FE4
+ 54D3F7DAED9AD3992EDEF92F1ABB7261312DD935B4C625118B544B2DC234EF5B
+ 084799116232B24042D53A82FB4E1387936D290A8B9B150C12BC5529C8373203
+ D4A6F1B88A2A0D7B6497099B9F63D44AB78B79420D165937DD644B688F9066B1
+ D2F5D024FA7F1E082B9C9A90CA1C9E296944FF0270E23F7BC52D9FF158A03FF9
+ 03A3D44A8919E8DB14BF1A3BD54895AF449DF8FD361443B7FAA9A11A89BEA2E6
+ E99DA8C620B7AC082CEAB7ABD1C2FCB792BC1CF8BB98393367AD4939D59465D3
+ B140413246EF6B5505E9843696B125DAB1E0D9E8DD23DB8DF4DCE3CB0B256775
+ 45CC73D17E88E7B3A6C42986CE55C0722CAEB188B5E476A95112B4FC9B6BB35F
+ 8E56D5AE441CFB03288A291B9A5A56F78A4226FBF2B466575DEBCA6B7AA6210A
+ C23A3AD2DD7714D4A5995AD41AA3B5A6BECE076034C1991C8BFFBDEC29ECAD37
+ F09086AF0811A92A60CC8E5EE2984301B5C7ECEBE3EBACE33059468311BBA691
+ F8F4BA8CEDEFC000E020ED302DA02E2B46D9527E12374C8C710095C21C82D221
+ 3059C20A1A6028D9426EA6CFEBD90DFF04FE8F942E68FFF01DE50B16234BAC4F
+ 2AFC733E1C844FC0FC37E8E92309D1EE60EEB16B13CFE61D21302021C8301BAD
+ 2D30BA2DF2BCE16453A98FF3D1D42A84CE81A5EA371EF62CCF054D086C5D672F
+ 93694B89DF5EBA809BFD56E492EEEF6DDD784EA205098828AA904773A19C2E22
+ 26D660F6810969C3A142E9313B4F8325AE00845C048F5A68A682B4DAB655AD8C
+ 03F118107FB88E5D4BA332568003FBFF144D4EFD2142ECEC29F035F6BB37F240
+ E2A323387BFB791D0F953F26B89CBA5C86D969D88C34F7C961540FE3B5D87E2E
+ 680CDE28EFB7C31ECB32817E6E7376101673B373D11BC381527158ABCAAB1235
+ 7302EA2713C2AB89B7985E8685F4EF1074CA31D19E4F7AFF01CEB5657C790EA1
+ 1595BB85EC158BBB0B52F01E2E68533B6C51DB791A41BE54E1E5002B0A8A7B16
+ 483736867BF9295D6F5B1C067CA82BA1D5765DD8F2441780C82F83B12C2B12AC
+ AC5CABC89F17BD100299E9DDA79F0172F15783FF9433095FD3AEF9921AF4B290
+ AD5EF82C25D606F8E1C57440B4786D662F61CCCFCD47129B64304543279F4ED8
+ C623724788CB12FD9E8E1F11A16DCC2133544F0E4FD1061D3D39B4D1566B3490
+ 21DFF979CB2A08A75B65E37685CEA98C02C3560F72AA308CD76C35E1E9516F3F
+ 91415E9C6D123E5DF16BAD3A9FA6082106925AEE211DF828574D627B4BBC8B20
+ 6943F2C13DF109A7D23F3F181F80C63666A25310FD3BBCC792CE84B9E8BBBA0B
+ 67335016D177930B85A4356ED5EA80E154C5B255B69DFC91F5984EF1749A0057
+ 93B1C7645BB87CA694178065B77143C701213746B83450F8F6AC91A0CA5A0B5E
+ C4D0CD25F518A674343ABCE8013135189C3F07DB93918F23D168A7704004D73A
+ 738395C255640C7AB99E0E184B4B4917F2FED7844F70082C9D202EF7544BCB1A
+ E841F633B999C3FCEF7B4FEFF1D5398C883BA8CA43CB4681DFB11CEA1C31D97C
+ 7C6184076CB38E076A5D4DC22AD1B84534A66C7E7BE7F2A0B7445FB2AC022E98
+ 34F7854C98BC80CD937778FA01AADD72A8102E63A41E837BDB9CFAC77EB63F24
+ BF2D7CECA59709A4AE2EB5D30CD2EA860DC28B288F01E2B71926DF89A7AFBA3C
+ DA19B30617CD594F1DBA57892A1D993FD9E63884D08FE488409FA3511E4E9749
+ C1F2BE3590B6589B3B9B3E1159DC8D9BA97EDAE65FF0A0435654A61CAC628F1A
+ FF8B3794A013DA5D82B8520117A7412D4143FF9037E6BBA1191DA45C4542A5D8
+ 881C313D13C377E636C814210F6D97124BC5BCDD13670191D7B43E03AF553AD7
+ CA125308AC66E3687325EE5D5C9C11E4042B3B4CB43D8F635302CCBF7407AF0E
+ 9C87BCAF146A7AF48A2CE534ACD3119D04351E59B64594FCFAB7C76417215F37
+ AFD22CCA4C0F4A98644366F86C9CF618531ED747C95AD237C516CE8FEFCE381C
+ 0E3A3D0B439C070BD0555B1415DF13DDADD6C836E1472EB1C1118FEDA9C1C583
+ E06769BC993201AB1E132E13D0FB98E9621078AD082F63CE00C12F4B18AE585E
+ 454805896CDADF5492180BCB7E38DEC944C42A4DCA5C5D5FA69277E40166269C
+ D60335391712FED3F5D772742BD1BFF1FAA95F398750E4EC9A8DB9FEAFC74726
+ 0B13D09B90D2424207903C456557BD6AEC9D89A08BF58FB60A18702D7CC2DFCE
+ 1ECFF113A68B68E7358A8F31AFAA04BA99488FCA4A8231929C710125D6DD1F3F
+ 44F504CF999EBF7D57FFFF39587FA052A5A084272A53EAB0B2F859BF91F65ACD
+ 9C748EEEB2235038F774669EB80DFC8D59B1696A99CC84FF07EBE52DD234D7FA
+ D04F431B2F97D8C446278A899E4F9C012AA31A95CF993F1980BBED045049E316
+ 7EAD37C04CF86D3F12D0936944761CC01EE16E9B3018C715AE7C6701AA7F8150
+ A86F293EF30EE68FD175E099CDA37DADAD32C0B97D173F49C5C9FD5D46187BC7
+ 64D8BE8FC92A289203CAE007960EA02C61122191A89990484F74AD3A883CB135
+ DE3A7F9093DC8AF2C8B4EF83CA995064BD13CE56995E56F645A1B9CEC7F93795
+ 31B0F846359EF21BD8D20EEBED699890697CE3802978C80A5720E58A9D72AA7A
+ 6D283B3ADC5C5CD4F682E8BF13469BE319A802B17F65E5195038C990BB8D0B9E
+ 2BAFC8A2E1A5F477F2D5B9D187FDFFEF8E75249EC8D688B8A6FB40D2D0FDFAC3
+ B937ABE9817CB4E611F8A128EB09FDD0D8584391A47F440F330D0BF08CAE2C90
+ E7ADB27D34852C8FB0BE664E0F4FCF6078B458B7EAFE7746EA801C5F374D0B67
+ A984851CDAC1CBCD55676059EC8720B6A4BBCCE5D5C5805EBBE3EC8DB03D50CF
+ 35BF3BEB41B39C75FB970687F1C0FA3F179CBAFC7816D4A1CC2458699BC42281
+ 4A2D4448D032FB9C4F0F7277B243D03C6EE3DF8AE2D3D4353B28BF319E180D2D
+ 5E181C9AFB5C9F21BF4C0B5489FE5DCF02CB3C7C6F93D7D9C65622A32457ABD0
+ 3337A7B94BB606FA84222FB2D3C17267D71D172D99E13391E279D62F35A6AD67
+ 551AC747427AF2BFADC5ADF846613B189D9A5A1EC1AC2A1C0DCBD47576404B7A
+ ABEF094CD4858585C8ED8A343553175596AA3809EF8594F5CCDA6626D9A59D07
+ 98622B580D1C2D7B0DAE199EDCED7664646C97C1D701A4EB1AD9D8E524FFC216
+ 57EEABC7598F50E42E03D2F4AC74031956C4A56FD1CD6BF84F98E3B729FB7E26
+ 29A945C4AA5544E0E27EA4AAC207F4D551517647959496ECCC70D167A3C3DFD3
+ F87BEDEA0B3C780960C4560F4B0043B5DEC279AC41633F560EA60839898120E0
+ AD9C3B9B931D38A73B2A03A5467033AD048CD88CAC1225B59F526C1E396EB67E
+ 70EF592D905FDED5C50E52D813A36794FB519F68E457615377F2491A186E42C1
+ 28C0EF3DC6435833597AD2685398776914821FF0A6643276D8697D5B0461E924
+ 6E5AE87EEC95E6D4CC5F3C6878C25F029F50CAC4532161723816BFF6A2A13F1C
+ 3E60DD883E84D2FB1C8EDD09DBFEA0BC4F95C3C1DEDF10A3FA212980263456A6
+ BC708E401600375D1349D53B1DB3F4CF342416C8BD3FC9E95A40CDF49FAE3944
+ FCF12D90B3E7173C6FE81693B533757BD3AF60124A6645ECCA5CA1528FEF57DD
+ 1144F34FE7A90C243028B7346A95E7859D81902513F3B24A4B3927EC123BC37C
+ 1ECDE61F931F73D5D32F61149FFE9AAFAE6CB9A6C08978B3DB9EA80FB756C446
+ 01D1305BF4A7EF2B2AF1E1F02D258645A88231685CB573232AB777F8F7C60D19
+ 7FEB70ED3107D841FFA1A7D4AB4858B56315825C264090059B3B906D4805F9D7
+ 5C1F74012E14A68D1542A57315E71FA6C82B2904EC913BE67435C791EEC865B3
+ 9A93A246AB8B24F8B2D324054DF4348796AD4C6E8F6ED09ED1BB8E980F3D62C0
+ AA2103BD9107A0F7685CE43C25D1DCF400C0331E4EFB65F7927052DAFE331C5A
+ 0B9789B8C81790BAD5738376CB50F469B9C0AF89EDA54B18CA9283F6C04B4711
+ 984ACE3D52A284863315905A8EA5CFEA9C70838A8E1EEC5245CC553399A962CB
+ 1140A106ADB20A701B590B2A571C09877D000E65946217EDFFE2596590C0F14D
+ 7EFE58F8E6D31EDF4493994AE08A0C56A8C95E2920F71B311D000AB4FAB2C38B
+ 96C28B19378E300DEA04F5350E25469D9753FBEF4F68EC03D1E29C7CDA8B7617
+ E58E8340872C6EC64BFC93F6EF5BC1F64E186971E35D7E3531DE0B81034F21DF
+ EB65D8DC84DD4E8660257E84ADB9ED22BA3D831060E151D4B71FFA6482F9D1FE
+ 9D68DB59DB769C6A23B220562CDC6087A980EFD706AD8064042007A49A5EACF0
+ 88CC426DDDBBBAB38D5084966C31A14BADCB29502D42D611A7B4A7D654E89840
+ 04F0B7682458D5FBE2EA3E847A0749D1218480700BFAEFD5D63801A085E94677
+ A4585D5A070ACFFFBC8CDFB4CDD368E33CB0BD8FBBC639E44AE36C7F2442940E
+ D2D79CD95454FD27AD8E0AF18F957D04A0483326E97C763B1BF794ADBAED630C
+ 97FC31BCE00FFC7643DB64AC4FC6763C11112B3D8703D739C2BEB52D9D4D2594
+ E804D9D1289584FF0AE9722D6EBC4760391E03C878B0B3652CE0BE04747E7355
+ 4B1B3F219CC3C15BFB92E92C28282080384CAEDA842293E8546E69716C215B58
+ 301803208059992D905331DFF6485FC4AE24DC6481454F6D005AED73A7CE5276
+ 6079ADDC65C086E434707179DFBB7B85293857395A0C02CE537EA4198540FCAA
+ 7FB2E3A183E9AF9730792295EFBC70FE109744895A119C37AAF80676FE6069CF
+ 079B2424D89A8C020D9BBA5C9C10EAF99B5262389E259DF8F4D6563998C21F29
+ C958365DA770E22D606C13D892A0085CEEC72DC76CCAF5B55151590340B98714
+ 9A87EF1154066BD130B8DB8B21D90A3D4BC617776EF9F36C06DB41BB1C06946C
+ 1177823C9203F3F32C4D7CE534012C291A762EAC1762ADC1F1A238B4F6F2B55F
+ 0C4A61E3E6213B8FBEA37424421416C54902B674638956F1F3100186BC780E72
+ 738B2238406BCC59160C7262721F8299E3A9A9A7A92F1E9E10671EC18A540FC1
+ 38C150C45E937A8A482A8BC627A9BAB1CC94BE02B02B32565BF1052EE18AF4BC
+ 838F671CEA9022ABBB7D97D5EAE1635F69B1CEEDFBC19D46E07F3D4B0783A3B2
+ 50AB2C39FCD91BDF1277703B827E3B6B1DE524942F0EDA63DB1D5463B6D95285
+ B793F7DA3601B8855D8344B4A104F93D66AB4D25E26D927A52F5C8B5FED789B2
+ 8D4EC7419406D09A65A25A85E97CC464CEE5B5CCAFAFDCF1CBA78D0593149458
+ ABF8794EF422C766CAD46189635453F51A12C8A81927943D27C72A53D0B9EC0B
+ 76A836F4928372523D13647414F08EEBDEA8BFD1FAAB403AC25F37BFDB0DF1CA
+ 2CE626220EA395C00A3375A6FE1CE0EA65F3AEF3D23CD328D25DD1A453D53F92
+ 08EA1A31E41AF3372E02F767AA669F17A66016DD3479C49FF2C3D001D2A8C79C
+ 98354E80E9CBF98873184F48558A93F2A720A8A4D80DB2B7C1F72D0977979E62
+ B4C9B5F28EB1FB582937D76E5CFAFD6BA7D7A4B7237F2F7B5E1B5968FF578467
+ 580A1E65E2E84824C4C388D80D34E6CCFA755C88ECEB3B9544B933F80159D284
+ 2E98E38D763F8474423E0C3DFC0E9D546A52CD0E16E3F78E3CFCA9F50CF65AB6
+ 8E6F356CC46DD901D3BCFE408C7B8E947E54D9BBDA3B4ADB5D862B1E89F24A65
+ A8229DD40B9258F11D1FC88D474C4EB444BE76E20CAD8F08DC3A826B457DA886
+ 952A92477A930050F2E3FD35A2B5E828864F14F2F5541ACE5290EA64BFF5F8C4
+ A2F5ACD0075C1A3501E88671339382905C918C5FA2BF5A645FEEDD85EA492B29
+ 74642090CB2B1B976B6DB6B357BB32CFAEA302DEEE2B5F6E3241BECA989316A6
+ 277996CC221BF6BD0F4B0CAE47751AA99094B87585F2B24240470FE19B461A43
+ AD1837AB035E12F68A989AD69E26C3FD67A07229F435852AE4FC45810691E2DE
+ 278934F5848092454E57AABC69D687614E224101E361DF86E6F9B501BCC1952E
+ 19D5CB83AE7495E9C498FA75F84417DD53472BDB8D27B8B55B87640AF058FD85
+ DD8169D418F438BA4B6753BB9BFF41985B5731AF468D4962BD089945BBF627C0
+ 0CD8AB32AF62EFA4AA37E30DD229F1A5868310AF50D6C633BFD9382F73AB0384
+ F3309EF0219A6B38C3B5347ED163EAA7F47399B91C3A09B054FB21E316893B8B
+ BEEBA09E4FD1E6B760A931B7D8E5A3B0706D5924809961F93BBA59313B8E3EAF
+ 5CA7E2855897322929B2FD58290A4CFE9DA58ADFE68776C89E06101EC1AEFAB2
+ EFC54203F04D6872EA8356EA089D60E0EE944A78DBAF3A4786F6F524096557E6
+ 570D9AEE1EE7A82622329BA04C1628ECDA430AD2C41CBC1D92D2297090DDA990
+ 5790DCF3BED588A9144C321A4D60C97BC5A758433F776AB136C0E78397D5C382
+ 635234889EF13D398FD198E41810BA66A5C73A23B40649A2A4EB36FB2E745362
+ 10C81C6B72E3B9726549BFE71B91116ECC6B62D19D07D34A06795F798D05528E
+ FD457CAF852134C35F595A54CF31021D1116D3F4BD858A5BEF951947BC336139
+ CCE57A8CD7CB1EC30A95614A388F403607241C864472220A2AA256EE682DE51A
+ CD6E49F6307FA965D65BA05D50CD9E1433BF2D8769AE1BB5273B7615D0C7AA4F
+ C47FBA8450A240C87FBCF5EE65172972FFC4A85536D57EFBF7CC8CC700D8819C
+ 124985C98F1394CF97B22EFB10027F63BE76EC6DB5F5866D004C32E9F2792FBD
+ EF44276EDEABEF0DC2F6F346719400FA2EF8151F79F7DE6517A13DC209DE81DE
+ 0FACCE6491D4866C06BE2B376735E48BDB800516D08CC6D5B454467E8EF83F8A
+ 982DCB86FFB3B9D4620A3E98356422FD328330DC64E1278AF07C798ED1319CC8
+ 4F5311BB91B0DD5E5805380339EB94D575848DF52503030827866B7DE6E85D7B
+ ED098F4CD28D711C5337D231385F710B5AC60C149BD00C491E15DCA71F157027
+ 8BBF22FBB4DA70F9616042A49F7F827D96B83B08A5A7C9CB3794B3BFD9DBA4E6
+ FD066E91CAADDF99AEEB2308189AE578B5ED8E2A10652C3CA1EA29FFE04FF452
+ 0C71E2D4DDBBC7634E0716CCE695DFF93A04B1984690005A240D1BC4B97370EB
+ 2D074EDFDC2C303CDC001910CC3B90D6F5DDFF3EF7BF6DB6A98ECBBA533B59EB
+ 83485B1988B0AAB2904AAF2F074A30F5CFE92DB1F6589D31C33E62946D44CD40
+ E56FA1732B8610930ED87CD29F2CE1B52B156AC58505580FB21B8937F922B75B
+ 9610BA37775E7EC99DB805B7B39DEBE375EC2C82544DB55698E9DED37B28D0FE
+ 0181F035EB2DF8A84C202C893ABC9E5AEE4A70D7CCEC5B51A2B0CDB7B618F812
+ 8E68346649654E2FD81B2E5B61452A4F35730AA9D71F7A241B2B3C39B2DC8018
+ 05FCBD17853B8820269D1AA3C33699FD1EC55FDC15E28688A3CFFCA5CF86F0D4
+ 31C8AD7503448FFE56B22E063E4699EC485192D492E2FF30008759B5332D79FB
+ D383BE46807C6DC44E6637EF10A4FCA02BAD7A6D62C05F756996B9F1EFC59A87
+ C976DBED30F2FB223D6664FD46A3B94FE870EBDD2938C97582FFCC7613E66264
+ 5A40580E4349F4427EA45BF59F29F1CC10B582BF9D9C2A46B9434F93BF9F562C
+ 90311D2030E00984723F82399B71D41459D6CA8083C7DB67806AAF3049DAF42F
+ 6F919691BD5B5D61D052CD3F732A47C642C1493DC917708666CE13A9DECC2283
+ 78C1151D194C99E6518989D34D7ECB7F15BA0F726E79417AAF10879CD11FF84D
+ 2F8EC1A7CBB256D3D1BCEE00A9904F015EDD51A9AB05A85ABEC6F56B4B6A9CCA
+ E0B1EA47FFC0109C2E3798ED853817A96B8B23FBF512EA557796836385DF6806
+ 4A7556BDF10D80C3622F4E6F0273A93A835924D2C73882D79286B254CE49A05B
+ D5CF8BE4D0C71A0BF83B9CA5E9289B8441914F45D1C2B455D90503E58B98BC11
+ B3C694DAFDF167E5C5AB48F61F8B714422D8AD9A693015A84B0A5BDAE39D11D7
+ 2B09ABB15358A0072E9AFF5CDFF175F897C6C751AAF9BB2D1AE97C84A3EAF913
+ C999CDEF79AB170FC724A3DCE838C280DE524663CFA4856D122C72AA1979FCD1
+ FA537FB73A0C854E3F21033FF8FBEBF6AB2F1D5BC49BE81809BEA2EBA6C1EA5D
+ FA63A6414760BC8E0ABDE07F7693281E970D3B1E32ED2D70533748C87ACC2D04
+ 67077D3E4F72338E916AE32D3CB066986A203A8CC53D461D2A418443F49A00F8
+ 14B12F59FF66E024BC3B0241E3352D865AB0451B2B1F710E744F35AB1FCE7C38
+ 66000F479FE2BA3EB1906C48ACCAB652078CC3349E16071F777C3F9A0176EBDE
+ 564AA4552CE9EC8D4ECE4399A0D45CF831FB2C9A21EB789063079A7CF36FC8D7
+ 2CA5992FF670600B29831F9EBB740E03171F946380558A07BE8F3A5B73FD8D5F
+ 2CA7B410541AB2071E3BB8855417F77C8D911AAE3932B6E2CEDBEEEED5FA58E9
+ 09CE2CCFD16F0B8F808E3E43205F56A98BBB446CD9985FBEE58EB5C60E9A6887
+ 71F7DF24E568E094082C3797D3761FB30DB8480F09612C589AD63E984B887072
+ 922A04920450FB05BB301DBC3EEFA1D43F9693E4BB5AE0D4EB8C542F804A3D76
+ 12152C6AC333393B346CBE059F1E26AE92A813D88E7FC5DC9DA061EEA3E1402F
+ 16E3C3A9C1BD0255700D96DF39D36FD2B86E423C448F17B67D9933DF8587D8A2
+ E84EBF9D4635B43F125165C83A96FD60F800681474A4CCA8004324575F28C91C
+ B9D4B780646735697B75712FBB56A4B572AF7B7C8668F32AD81BFAE45E285D04
+ A0E7CB89A92EA3FA21FB433F4F6A5CE38A12AA5E3E29C68452AA0E2A666CF0A0
+ 6874108064E46C2D3B26B005AB8B4641860AAA42981D22B052F4394A839EC42A
+ D9C542B8DEF07ED20E377B3A389FCCC0F88F8590DCD417EF3E6E92013EE1FC51
+ 13CD712AF88600764E251F47106D74F046D9C976B0BF24C5796B7FE15A310457
+ 67AA335822241DB4CA4F3BCF6940377D55D78A5B46568821203F5C06881B6411
+ 2364C3ECC5D43F6928B20C118F8A76166FCCFA749C0938D4756FACE32D977382
+ 8B3E8EDD49825788339352DB6BA0198F980BA778F69695E9497C954EBB3F6032
+ 2056B41B6D979C83DE9671CF7D773A118B7191AA7EC4BE45B4A0E5A448565028
+ 3551CC4B84D159FD626EA0BD94162999FED7CF55C1F82112F488804D9B159756
+ 05E24128E81A5EFC7E8ADC314BB6FA6D15B2715D5934FAEB688B6528AFEA3938
+ FFC21E579E88D4DB719E852E6D5D2F60254E60A9B95AE0A0CB706C6CC935CA73
+ C94D374C8F37B8EB1FD3DA1F0EA6490540C3F7BA7EA6F8C3242820A4559AF9CC
+ 3B00B5796358B4A1F9C267D06A4DE769DDA0C333152E0798228F892C166DD05C
+ 327AAFBBF3C071030C250B9C1E6A9FF4DD080F678B0D9117CCF55E2A75522933
+ BDE13B3F17F8ACA22B6E25CDF3315ACC493208102B366F121692DAD2AC0C04AA
+ 32FD313B118EB56306489DEC5E5038D030915510CDD5D1FD2EB9EC0D31886043
+ A60BFF521837BE1BC4FE40241A46D1933E9BA1274F07DA01CEEE5B6BB345E28A
+ 351D3A6456401B1AC56A7072466F2422233F31D219D9F1FA1F67B133F32C0E05
+ D127F4DFADF0926D425F54B7D8315264FBF57937E81F598215E357786499AEEE
+ 91B59231585906B0D4F1AEC4703B6F2CAD9785324ECB079EB71DAB334F3052BE
+ 4BEA9D48DD36BD08A88553610488CED07B7E4C9518895F27C10A4DD9F7CE073B
+ AAE53081DD9619D0172EA6BD42D9021A0A398957C8BC28DB1937ACF6191E3A4F
+ 0EA3988B04EE13502F87E013278A65E280FA377EC96A354C96D8647CB7877F73
+ 2D72D5205BFCD4BE8307A3105CBAA07B7EE9562C6D16B7BF856A67F03A0C9C83
+ 29821298DC35E05714D326D41B8B940B158414265A1630FE2FB6759EFF9420CB
+ 41361949283832147FDA74BB9E8CF5B8332B90CCD2C949FBC1F75645E7A225EE
+ 667E25E4D58A644C5814B392686CF151B8598C2531946D1220DDF70FD5A6C09D
+ F438B3D262B8C3C50AD3BAA4B34F3551625860E08A1E8685D2CCCD5C96CA68A6
+ 897FCE1C7B03CC0668E87502A0C02094465574D1AC54A3A473583364BDBD910E
+ 23051960DA316B686A152F4826CC05343FC851D56CFF8C9088F8A73108F98A4F
+ 17615D6D2E05C8D247AEAB582DFAE066FD7CE2AF16E783FF40EDA375B9B2E1AF
+ 77490CB3CE62F86B35D70F5BA5338EDB8663DC18BA394E71FF5ED665854A885A
+ D7E08BBB6A16BAF4266C9F650CFDD9E22786D20D97A35D82E1F26BCFBDB27F20
+ 6C40296CD7D988C66026583DA561A3F325FECB8C022D149D8EBB57486F72E263
+ A33D99A10AA876991DF949DC7B5F89466773939B9B045966AF4EF00B3F1F1BD1
+ 051367CE71103CC52E8D966662A8220F03CEF49B0F3D751213C5F92CF0F63517
+ 4F52B241E26E2F1F4B01D37A63D7C68D5DE1782CC502D747170BBF7E4C5D370D
+ 7FCF7AF0645567B7D0FFFC84CFACC566DC45955C907F9A71305566BE05E46C4C
+ 76903133F8EB4566939C93BB195459014F29552EAD08473E3CE60AF6AC886447
+ 3E31E1597EF1720F94FEDBF533E9D5F9C135C956100DB2B733363A19A41AE93B
+ B3D14322CA7B1FAE0C305CF04BC52B70B4B501656EB990A185ED31F756059D35
+ 9138E61F074C82D628BB483FF1ACBB64C66EFE9AE8426A04FBC10162C225E26E
+ AA4A2AC51205C02A0C6D9666D12C9FA8FBFF86EE5459904A22795E02CA51D0B8
+ 1ECE92F687DD5400CECFE2A3A0B1B2B88031721D69ACB8BEC9392650AB3517D5
+ 209EA8CDCDBD7C5F80017C5F5C86EB26CF4E84CA6C3FDA77608E7B54926273C7
+ F6BDE6CEB0591F1ACE82CFA5C3A178AADC49628C9D998980517FA79378BCF84E
+ D8772238FBE755409E2564186F3A604AF5FEBB1D3CBCDDB483BE2CE1D1D39070
+ 3953CCD24C921FADA6D18C410E86833E944FA9C37D0903812A82F387CD179E59
+ 1533D1F6307AFC8326CCB258480F6B2CE9BBFE52DBC9EF8D98E56F6B7D16CCFD
+ C86D451B1CF95C5321910F63ADFCF6B1C798D41FD68B82C626706A3E61D294DF
+ 3F2E99C4810B03D07FA69901FE100619265BCBAB24C11827CB0D53965BEF2E96
+ 8B5ACAA6B7F2C4B1DBC855B19330D304D61B510E6CFED840AFEAD12DCF9FFA48
+ 45BC853233EA064F18D037B5B6C7A769DCC75AD1B4727FEF00BC04EF1D83CBC9
+ ABD4D5535104746DB85D8551BAAB27039C6A579F5C573BBF5B0D8EF8C4DAF914
+ C32E8A4CBCE9EEF6C651F26B9EED9B38012F15833CD5D7A9C4AC80A5387A0674
+ 02AAA3470486465D5A4C98D8ED87B93348B327DB1C8F4CCFE11F502648F6A97E
+ 25DAD00B38F6F02EFAD1CFCAD96122CEA2EE672A5D6F2FC271E9C30E93865A09
+ 26BB4E4B2F27A31DEFD714AB73BD8A467AE39EEC063BB3A6609CF010039A98BB
+ 7DEF9791F6C3CEDA5DBD139B4FE48DE30B462F71CD86D3BF0C3008289BB3B9C7
+ CB0027450E7A8DA78ED34E9E352D4ECCE77825D308B01EDDDC16BCBE5A1D54B3
+ 3E6FD9366D985F42FB18B3AD3DD3A1DA76272307684047A2518DD7DBFE0EE5CC
+ CCC6EE8C5EDA65725858C81E00AE14FF0C7B40BBC7F72846951817092403329F
+ BC2AD5ED026A3F5A471196D6532C1A6398950B49FC210029F10B21820BF2633B
+ 78C8BB785B7F1C784D218D679EA0B024FD2903E1B684F3D80A8E5C8DFCB66910
+ 82EFC9C5CE7702713C449DE868AD9312069FFC4987E35571184D66D6AFED4F72
+ B72AFA7BC9709826C0A550088FA82C21E41D74D8799DB7153AD348B95EBC404E
+ 72AA548969A5A8C2546E181725D0996443F9F8736CEF860918829F820FE1AF94
+ B997E66D010F8E85EF5710CE00CB507315B8280484CE0A26A56C128AF91171F4
+ 468A06B28736BE87E35BFCBCB67B03615ECC263FB44152A437FBB6681C74BB77
+ 5FF7EB3B845C3293783F2043208F42B9A6FA7BB02BD8B62EABDC98B4116AAA00
+ 61179776A5F8C915D8B94D6089132CA53B1589D02A06F13F767505E3ECB339D3
+ 023F1C521C2E61FF555AF4370EC63BF856BBC7EF6D8867A212A8FC21CDB3BF1E
+ 948BEC51F961BC9E78A640745406F14E6835AC945A8B473E0E943387D3E9CBCD
+ 0C581443F986D25EF006B18FC8A80E8C24DE6DB6ACF3226DC5D3D224CF97FAF8
+ CCDF50DED7B00B61564CA66C89FEE2F77E8BE7E6C6A0BCBEC3F8C74F74424F72
+ F8790BB10455024C4D1B07D43910B380EB1131DA8C5148F0304B9905559BDA4E
+ 4AACE89411645F2B8FC1A6BFB12A34D78F579072EC1C31A5E9670CA65814BC6C
+ A625E283BCF38E2ADFEA8882C869C64B9D41419AEF012CDAE15FC6AEA3039B9F
+ B5EB82427AB0385440A5082A9FE606587E8C0C25178C2811AA832D3413139C10
+ 2F5039E36CEC3CB51534BB7A20BD1E3D620A88BF182F47F9A5E86A365738D4F9
+ A3AF07F936A9DB30910EF681B7A5F435124FA91582BB8C224F290B56ED27C8C7
+ 0661A5C0CDC06144D8BE5064E56D36F5A1282D8D8B1F4E4C3CAD852D9A5E5B63
+ 1D4C527A7BCC188F1E6ECE780EF4B85162DCE7D4C33CE8991085AFBE8CD20BF6
+ F13B09CAD046A54E9317F628B45614786A79E6DDCA6200582525ACFB20DCD64D
+ 01658E4E5BEDC258CB5678419BFE8EDBA566F041DBEECF3E5F445D542A173213
+ 3024B585EDD104DB59374431B457E79C175A641F51561B4850DDE539ADF8EEC2
+ B58454D9F9EE52EC2E21E9FE64816B2CDD5BC806475AF35C0D867EBB2831C983
+ 13753C1C9819842C79A8B3B4FD5E382FD688C6DC2B52B6D5D237ADF97E8CB728
+ 59F5382489F61F00AA9CACB30DFF0F6AEBA0397798DE6BDD4E67EFCD46FF1649
+ 2E6E7CDFC30412C02D24ACEA6707C91A8F9B663436C6EF13DC3D0B0BA51171CD
+ BFF353B9BCF63C310FD58409FE478FB9E20DCF9F62068B65286342C2C6D1F716
+ 17355B7F647DB7BB4C4301AA870E1999732C602183A12AC800E31909CB1D1FB9
+ CCEBF9052F964F8B01A62CA0B3AC74529865D1B992FBEE20215AF4EC11735486
+ FC2B8050A1122F992D7B728744B97E8FF47E2EC7128849351E9397C166E24EFD
+ 30622C417338488D7731A3EECC40568481CC7C216E1D84D7C750181FC5937484
+ 21421559A86073051690FFB0BB61DA8AA9F591BF0A33775D7463ED8FC75F3976
+ FD02513AA561BAB092C1A271E07E67FC579E85A17F666A12BECE43E59110F196
+ FB3FFFC8A498664B74D014A362BA6F949F516B73F7DF64F612EEB1C3EB56B6D3
+ 67BA0DEB523E6EED6E0BC9E744C39D65EC0E5E6BC8E3D0800A5B65CA3EA829B0
+ 8D31158B0BB5C7797430C5C49073120D85605A9E972C772DDD2B79159C42F51C
+ 56DB3D0FA0BBA7BEE2BEC7F98DBFEBA049D12AA5F2F8DF2D9E74942C354E03F7
+ 307FE6F3B323A1E19C43B1FDD8EDF02E8EFAA4E046C6BD60F7DA5526784D5DA8
+ CEFCF4D698EDC567BB86C198D594C5E7B9F6A5C4DE88EEC18A892E3856985DDD
+ BEA6BCF5C6EFA66A0795B333B5106986BA9FEE98C910E5EBD68FAB323442A84C
+ 66AD82EB62C1BD6E718D616EDE60EE03E4B4F784BBAB74357D9773B7D1FE4085
+ 45D510C65C4BB7214B6FE75677E03445FA58BB0F009E3066F64E4B6A80B4CB92
+ CFA3B1A5D3761F33288FF6A5346022467A3FD94100D52077473FE5A7A330ECB3
+ 80C39564648779CF9BB9D4F9EEDCE5009EFABAB33F67F3520CDFD085AE741C58
+ ED63B637F115ED68E4E069ABB21B3D7B3D6BF96F34AF66075E3014F884C43CC6
+ 961088A9EB4E029827964F86E6073AB1CF3FA6A039B703E4B9F5EB6A5470D4A1
+ 486E5ACEDBBE35FF75B725B6A19ABA44904D0C269721243E54A1B8D785AF79EA
+ 604D6A73721DB150B18F067505E66F89520E87788DC31256C84BFD95736273E1
+ 5DE70C0E2BD50435F260A97C207BABD51EFF9186B1D0285A87FF452FE7B3C2FE
+ EBA59AA3A4C14B806A45D15261810B9D41F28ADDB24870CEDA21B26D1501C2FE
+ 7F815F205AA44342D35CEEE23ED90755669CAA1FBF19635A36271BE894FF98AA
+ 02642461FFAEB786509BA6D49BF7580E122B4D03C9FA13BB4C14AD6E97D4320D
+ 22C592E6D4F66FA1F3DAD918A99E7D41E9751DD2EEBB04B00DB9878EBF2303A0
+ EDD0557D2AC8B6658A65BE488C0E2914FA50DE46C77D512F03973BF4D0357AF3
+ FEBEC432D50C23E8035FDA32615C80FF62BB0C87FC8ABE06FB1EC225C2F4A56F
+ 3C366BE149A984BD7443FC797E6E9CEF59B1602302C499E671C64680CC038FAC
+ 5DB0BBAA7B6BA9A7D9223E802C6682B7BB2803AEC667AC1E226E4B137FAD6EAE
+ C5B5F231E90301EA996B403E218029A449FFC9808817F978902FBFABC9814FD4
+ 4828A60052931BF22ABBE391466BC46DB059E4E1DD5FB2EC979E38730734DB2D
+ E71BC82D7130FE363563BCC60CF69ACE8BFEB00D9A80BD72D83EDB68F2E7A845
+ 60B88841CC01362723C956E16AB013419CFD378BFEE5A9E07403B120CDA0F137
+ 0E0111FC7BE6C6A4BCCED8F494F972336EC542EC00CC80FB4EC18A081338320E
+ A2EAA3A0A95499E637B6625B255C54898FA3295FC1F7E0744D158899CB7BCA21
+ 46ACCBCEF4A34E264D68D5055E73049CEFA3DBBA6C623C51D325570DA5AAA8B8
+ DEA11D428E7868221390FB9AC77E6898E1CA244B9D90640874CF18066C3AEDAE
+ EFC6526CA322FC7B1B58C587627E29591B5987D1D6637E08E056C0E1405467EE
+ 93A78756F8BB2E16F61B22F28D779F6F39C1FF89F6BC711261306BC4916D02CA
+ CECC7884A859F37AB1A5C31958D82C29D4D1DEBEF5DD5CB1E37F55FE5783A688
+ BB287A17449582A1C7A2DF55503C06D75605B865B88E9D04A4E4E56901CC19D4
+ 66BA12229F8F13114666AAC85DE4B7D509D3A086BC742EBA29A29462D825084F
+ C70FAC623FA00134C9057973653B9E53A40B632E70D0356BC5321F65E95A2805
+ 679764A76A5E18C7796AB31CEF25FF68EBA6977E4811E5E1847F5D4D2A7AE60D
+ 616CE48FDFD07087F9492BC1871EF4C57AD37030B5E3C976DF4B7FD07DD15B5A
+ D7232B3FEA667301B50FAD4025DD05D2DCB603AC475AE262F8D7033C0099FEC7
+ 2EA43CB3E1FE616CEB3AAECC41B8F6EC386290F996FA1935D76C0F249BF8BA31
+ 01AC8AEDDE71CCB86A4AAF296442B0A30D1A9AB5A3B651684C5FEB9137484BB3
+ 143173C33D18851F6CD60D8D66E970E20D391ED68421C912F4B965A173CEA0D0
+ 9728C7D118DC26841AB6FDDC21E91DB1F6818BDB44474990A85D6435357DFA63
+ 7035CD97C4CAD4BFFEBB757B5743CAE0D30DD1B65C4415115B46ED9753EC7045
+ 3AE673FE89F063D13F21A1558C0328775B820EFBE798ACB4A8B7AFD67B4AF5F8
+ 322DC1A60035FA89F9FE2C078581E07F6FEC3C9A23F580377C35BE7F7FBE0D1F
+ 9AFD67BBE221D777FC3CF7868C854E97F58003CCA61FD9C0D91B9E8D30C28D1F
+ 4E2A3A13F959A2CAB6D78EB63ADD0D34E0C428A377427CA120A277A45C71353F
+ DA4AB2B17C33B96EE99F8BC3A15CD7452BC9AC2E43EE827ACDA78979E8325CE1
+ 50CA9E410073C957F5916CDE8083B34A68DB901C3918CABABA4950E6CA718527
+ 65FC51158958014DC02EF0AAB451A7330076E41FF0637C6F97213BD7DEFF676D
+ 7D0038F07B1C69A10AC966099BA97A95EDD91C842C45809B4407F8D2310F3002
+ AF4E5AEBE35521F73D3A36713BF38606BEE08E4EA2FB107D98998FADADE1E403
+ EE993C27E8DC2084A5FB99E2723BDDBE62E0B0B321C22F89EB14F5007DEB1AD1
+ 4ADD73C56B6D8A85642C347AEB2CF271E06EAA29C601E2954B4806A4D4FD135D
+ DD1E5B95110EDC7CF9CE81F238C20CEF8054B1AC7B709A2B360CE8AE8F442A79
+ 83269789D19FA010CD061A28E7BBBADE01115B8692A314F7021DC3F490941C73
+ 8ACAE6E8898DA2467194F44FDB570F9EE0C2ABB1AC82FAE62598F0BDBB545B81
+ 76D11FFDA82D8B4246897F7930DBCA386D754ADAE65C041E5F26508C68ECC603
+ 195F72200E46468C89F3972EB268327ACA34E04CA8DD2FDF4CC9CFCDC8C34725
+ 82C08A276A7621431C52A7135B0B500E8CFF8D177D7045F4E5D0585E866D2CFA
+ F77328487A46D1EACE15E9B6B8EB7ECDB6A3669411580A142017DB8D429FE3F0
+ 1FAAFE1C3A665ADD27DF56C7BC2F02973EB0B855CA955A88B6E9E41E8EA0456C
+ 1543518EB59A4DBB333625E8F7293DE9E981E4907FC8C0399BE6B8D053D1EC53
+ 04C121C3728842D4E29441D4265117FF1316DA1ACB7F7F371C0732F49F86CA67
+ 2AF10F9C910816268673AA090474D981803ED3577CE6F00DD59917AEA37E693A
+ 49AF39DAC61193C5FA8C6FE53B8F8D60E745960A779E61A3147A5C973710734C
+ C9D7EF05E63BB230C16C7378FDB6FD29476523F19D156A432C18690D04BB4888
+ 7697C6AC165020575D7A041E505A87092D92EB376FA0EAE68DF11603E4DE3777
+ 706E72F6586D1E510E1B89D1686ADBAE1796B7E3A5EF390A37B5279A2D766ADD
+ BDCE29FAF27CF48E841735864F8AC863CCAAF39FF2D78C3154F303E506D7E781
+ 9FCA0B06C8A82C6B527068545890C4A17AAEF4CE53DB05440E2BCFC57F7D8CD2
+ 5E81588153006031DC6FD9F944D3842972AC4E82DF0FCE98D99B090FF0E83FD5
+ 0C140C1DED9392907F2FFC05CD6EA5FBCD32B7CD8C18FBF4DD9B367564323F13
+ 79DDA88814193D1F90E61B43C51B8241B8F84DCC2AF0BBD3C166F57CE9C03EA2
+ 4A3DE752B8AAEF9B469F61ACA3AC80C4B97A90BE85BA6CAAB48995C845901F16
+ F5EF251BACFD1EE033323A4AD5742A1C923A23F47FC7ADA12A43896B21E7C83B
+ 6D771557A7F55C336B401197682532C208264FF7BE2251D09726C9502B0A4E14
+ FCA1DC15BEADE1E9568DD85FE6305D3EAB59DDEF7CF15CDE4B00C5E36F049385
+ 9E57021DB84BCBE80116A18EA6D860A02DE3B66818E1EB4504DC35446C408548
+ 6ECCAEE996CA30F018468B222333ACBB7EDEB89DA739C9CC99468D832AA075F0
+ D0DCC6448A01FEC983EF79830AB46ECF607C9BFB178D564C2A824DF65406B1E7
+ F5F79B17F846EBE587179279116BED9A27DBD3980F4DE055217F1E6F1AC92EFA
+ FF3605537295239F04C244775BA25A56D25EA389757AD96418E9229CE0767F6D
+ E218DE11389A6D8823BE8F1E195691812167AFEA67444A28652F0E51C99CE2B9
+ BC7309A63E39BF56CE63E4273C88802E205A5A2935878FC1FB34A9659AA61F22
+ 1E2955E960055380FBD7EB843D4DF42336ADBB55BAD7F5F9DB4B30F7B3B8A4A8
+ 2C0825E602C4E4F0B0208ADE162B1805A4DEC2F42EEF87533E440FE9B270111F
+ 2BBAC709A24CBA7FA2F297E6CED34706DBEF304345E85E8DF0D584BDC2D95A0D
+ C3CB351E96601109F17E6C5524C12FF4037D2EEDCF7B5EBB1E67DF582B4DFD0E
+ 7D4C6F38C21499DD2C5D34AAAF76AD1F28EBC050C7C86B7BB3A8CE1811029E34
+ A52DC5341263C9BA95BAFCF0CD9E5329095CEF3993C8F8C083E13D8AFAC8464F
+ 81BCAC39A6191D62A5D3AF00F945255FD8923EFE38334F0DE898077515F6F3B3
+ 43EF14A8A71C47323A5971BAB13A89FF9DE8C08AB378D71079537F463311AF0C
+ 45A733CD3EAD522816D94E2F05486F63E065E664ED8535817391C41D121D457A
+ DE4C143FA631574AA20DE037DB800183DFD8B7CF843B43D2754B0DA90217CD0B
+ 6BD23374A51665D05B69CF09D8D07E7C4F2FF4E3C7D8F5D9B4E20437EAB24F32
+ FA71674F67CCE25CD182717B038B13079078159683A0B5913B4913760BC7D175
+ B47B0026E587A625B2302ECC00023AC4043954EF9F0BB0C5C527A9EA022C8F63
+ F3782D2A4A063EF7666D69837C013120EC46301A05C94470E54B70500C7F6929
+ 4543AA2BD22A4BDDDC99EE05AB143F5E7F206A175917EF60A3A60C8441BDE14A
+ EFF3AB838F4A8074FC022A908488ABF5E513D71F832F75A8D38241D07387CFC8
+ C1E1AF507A72AC13750038106473D7227BDF9E01312A4A9428DD6CE05E7B3879
+ FD47B2D52726B48BE3D131DBE2078A2A0341518C8150988198F525575B72B241
+ 2B57F4FFE79D255566447E8B8D104621BE20D9F2E8CE6168B9625EB787400957
+ 12A248F5AC73918ACCD8138F7521FC913393ADB5C3E86E4623946B0C707A103C
+ 094E7CDF652E98ECD85A507BCFECA27717A49550CC60E0704C5BCD75BF30B462
+ F862F34E21ABF2BEA5D204A2E7BE7013A35D4A2D6CA2618B2EBE4207E76C77E2
+ 103F7783FFDED20D70C5CC3BE00547AAEF6927738BB39E90ABA55640C2EB3358
+ 97FC0705ABDAFAF2DBCCDEDDA83B2B3A8CB427F490A225B7BE83DFC9A23DC84A
+ 8A5BA3A432636B8836298F1A12FAF6A18197C8AE74E58639CF01FBC6E988DBB8
+ DD886656CB8631953C00540EDF46D0415AEE7E318FE3850A55CABF517B5BBCA7
+ FD21BFD45CB6779FF635ECF7483F07DBDC5ADD39C7E5F83FD172F793EED60609
+ DA3F0ACB6DE0439BDAF67692E92BA2C70E47928683F4A54D1EA3663BDEDA5458
+ 2481EC036D27C019153554BA2D790172127ACF2D3C292895138EF64633BAA3F4
+ 84DF48B1B36109C94BF8A80E79F8CA896B31057AE012AB7057771CD99326DFD2
+ AE01D0231F3A0F0FEAEBC011A40EA69E9D91D373B5420C22D0BE00B5032BA3BF
+ A072FF63FCFD24CD465D499116F006C68644129D219681A48F659CDC9513193C
+ 61A797FC50730406CD5395DB96FD34A6820D2DD8AA68EB5F97CA60AAEB2A5229
+ C7876F9E3C88DF70D16887B978B64EE5B6DE2FE02800ACB74A1A03715EECCAF1
+ E91B638C3F747E3606E8F493115F90F3F05DFC45F87ADC0AF9034B762E049E21
+ 7E3BF73226C190023E439B1B2729548B36F97DA2801026CF633CEEAB36CE6D41
+ C2E993956B716B975CE4761A49430CE510B984791AE28F76C5E22CB55DBDBFCE
+ BE837EBF634A4A833E2A824DE14ED0DA50559CCC0C742FDD45C0313078D34BF6
+ 18863CA4D3A3A392359A7BBD43331D4D5B556AD543FE822E6E4D126502D32E7F
+ 85C71FD804334EA20A61AE888C6BC1D072C9DA67238EF08FD61F26ECB14EA27D
+ CC7B89C1A570241EBE078738D169435CA55E1D03BB12429F8D32891819D9FA2A
+ 07BAEC21E59DE1E5A8C7572D03553A3465304354CD8ABA2CB168674469718EF1
+ B68635C8D9991A4D91672A404FA2668FE9FFF8D4670E9EF44F10D0EA9F4604A1
+ 7352432A5CE3BD3828B61F85FC982E76124DD1402FFC0CF728FF2F6169BAC75F
+ 328321970E901E44E32ED2228CCE3D512BC97A110EB977B2F86CCF76B2B56E30
+ E255EFAE79E68C892022F4D0FA9166A358B1457679D5592CDEC46ABAC7387E51
+ F7C13485F8040BF33962E0724FC9048D667CBA46F0CB219BD49E128ACBC8CC27
+ 8F1490ABA2DC1E051680DFDEBA2C940D98826092C444E12B3AA87B2D0511E421
+ 3B24343988A003FB5531FE7C56330C3428C8318AB1EC3DC949557D14D936F7CB
+ 0C18E9A92E8D2BE0E9DE496910196A78CAA5B12345E9A712FAA46E6C2FABE0AC
+ 492E4A58197E14D954D8AF1650ABD3CE13B5011C0FB537BA42B413A9AF29BF38
+ 4FAA7699C9466AB41286A0E4E9D90057B696265ABEE8E515988151DC60D389C7
+ D5A04E1EE1D120647721473245036873B3521A9FFF59761C46FFB00B0779E19B
+ F47BEA9055F941750E86B94C7C704D9748FDF5079B1778097D3F3D9B09FC9EFD
+ 92485EF758579611240036A1A24D41A2036E765F1B979AF7C37BC4B651DA3BEC
+ 2AC7ECBA06C54E2F72011C407AA2F3B55DEB3022005F35956578A2517D561FF5
+ 66E90379C070AF246C56DE8490777229E0547961AB86FB0B25A26DC033DB5062
+ 790F522904450329E110EF3F08D12F45443F584901A876D23CB84F77E02BA93F
+ 0FCA7D3D889AD5E8494CB9C8B5E3ED861A2683A8A25B66459A8745ACB39AD727
+ 62444E065D5F84DE95103185308B4113E9EFF20D0DEF81D22D8E51B7AB9A35B5
+ 1B4E985259B992F6DB20C2D43C46A2C701388FF32E686DEDC4E75843EF9BD195
+ 23CB2BE00C07539850A4DC817A7553EFAEDA4D0274143D91C02DF30C08FC126D
+ 8C59EF815366E959E140A3756B6044CF88B57C32F6809B17E328612745C76D20
+ 4B62B9CAD6F0825D2F6E2B33DB227D43982A56EBB068E117B2CAD2829151617C
+ AF83CCB445A862EBFD7BCD1CA6B40FC1F0791E56908FCBED69D469C03F853B13
+ DD02F362507542066B9E278344433BA64E92A6E36B6C9237A6F9A400BC207BE7
+ 899046750889F8C1960803708DAD56FB2637C4F84E98C5D9345ACCD09DBD4C4B
+ 8257DC4EE366B368AE7A405F8AB57E0D0F96C87336C3DE8B986A1F08C4DCE414
+ 263C529F17028C075937E473D20309AD7DCB0B1D3A376E1C401A527024054328
+ 98D3312EBF86DAA1071EB87CE449AF778EB4178C661AD5BD76680B560185D506
+ 6B7ED11615F2E92CE534BB5D7A04CC537240B441840AFA4E74D96A9A77534E85
+ 0A5CB0B0486C7A5A4FE53DCB66D5BB1F61CE18EAE8A82B047FD7F0DCB92A598D
+ 67A90D90BB253B3E9895C4A0C92D39878E44BFADC4ACD3EFD0763FC3E519CDD6
+ 28030440B3A26920934D050EE398FCE347B52784DF304C6A049687B830D13116
+ 7B41C000C5DA03379CC8673676223DD11441BF8FD5D0DE5CF726D3C294EDA249
+ F7F15E75A415BAF6579207F29934B07845F3FED8E2CB424F2816E59934064146
+ 661C2307B2B2791D15B8B3027C71BC760946FFDDA54560F8A461501C3CDE4D6E
+ 99F35012C9237FB169194DC226E921F6CF95A3095658A6E10E95721411ADD736
+ E4D0111DBF59C9E40B2D517960670C8161DA233F08FFC404471B5E70D89F48DB
+ 79E7FB938A9B488F52E24B0E30F7179B3B19A5C1AFEDC72C8939F8FBFDDE4507
+ DE26E8BD800ADD0037B13B04AF667C7186A3C109B180B261A2C8FF178175A5EC
+ D46A16DBC6EDF48755F71375A76195C8F5F782E2AB75098922B0E7215AACF7CB
+ 49551031E3365C3E62D29AB883D4C89D0312A8070BB88ED1D15DA031438BC96E
+ 30F3AE59B7CB718F29F929D51A1E17069D9785CC570ED435E677543624838AAA
+ CEB8DB807788490C3BC35A5EB8326A733756A971C0767C9FE9A1B2DB63FE75BD
+ F21777CB3A5EBF420B2C7C93654696A4792BB339038B8F3D709C9F87A9203DE3
+ 182E883E2F85600BF242CCA06C5AC56F19B58C2D29C0214DD2F521137028B28B
+ 8FD75DEC70FE78DA48B394874DDE213BB32B32B46637807B4DDDA37B7B1BCA3E
+ DE1C1C029AD18965127114F87EA89639C2B156986116F7860F897FF0E2B3E1D2
+ 94DB00CEC0B7F30E00748436D33469A3D42F608BC2D4D22C75325A52F117BD4F
+ 88A6F2ABBF2F0CAE2C4905924B9206EA770F9EC77006C29492ED18DF0224A78D
+ 0B88F750CCB72F194E4EFBBD4349891347CFAD1CD8B011E7C341C81488B4924C
+ 75C2439C3E767BCE8EFCD1D9DCF838B6650040C1BC262D7B83D216B902B5CB54
+ 7D93A913FF4EFC3F21E6F474C0E008703672FE403D265FE9CA4BA846FB32B640
+ 85F76F1B246B15B637BDF31782A79CBBD1109712B180F0027E10867FD6DFBEF4
+ 9193D253D7B8023CD8A601EF891C78CDA2CC47C145C7955EE5BB36B82742EFFA
+ 1C994AFEA6F4F73B22549A84BAEDE9D67CCE99F3C82FCFCDBD63F022459DB23D
+ 6766325FB09D858C8C02FD41B6666DC1F79257F93A17EBC924E4961534FF2884
+ 18AE9770FFF935EC29161C5ACCA9096B0FD4F2AE2849A6B5D5F07153831A77E8
+ 4487635F85333967C6EAD2E97241167FA605BBE416F591088C42B72C3E1C65A0
+ 7232A6CA5A3B2D56C8BC6C50F6B9A7A5C7B3062A97321DC596A6ECB550098944
+ 777F43A69EF8A5DF9F326F059AC8C9BB30EB0C4CF4CCED4FECA07D3CF612544E
+ E252F73EE3456FDA4BBA6C9C26F76058B85CE37616DA29C02A7D63FB0888555D
+ 3A9531C27136C70EA4E26F8518F43AC6B83DD023A7F23CC828F2940BA5663EA2
+ 129A071E3E6652092DA29EDFED3A71D07CF54B0252A5DC6DFCD23ED0BD9102A8
+ 114832BB12A09E1F2AC9D8330D7F5465C90566B1ADBD86FE76BB7562618EEE57
+ 6769529638C3D0DC3958EFDD7444A6A8EDA25AEE39599008B781AEA4D4F61753
+ 620463BD0711E8DA1B90862A9B135C7E79B2BD583C58A9F07F5D2E7374E433F6
+ 08951B1EDBA54B77D0075D19E600368E83FA588A3E338FDFB43002EB6BDB7DA5
+ 7E4306A89E759931E9C3DD8894D9F87C134F71C39743A5EF7C2A03344C3C997A
+ 7ECE72C7E2FA0A3A2FE8FB35C6FDBA386356568DF097F36A2290DBE33F861627
+ 49BFD9229A21B9000C653E9A7F2C218AE2FAF3F322749B6E6B429E10750DA995
+ 450015D187E07444EF29F7FAE898AAFA87BCACFF6F629EECE9CB21BFFB8046E7
+ 438F19F2AD412A31589BDC9FDDC426838901D1227790D99C34FCADB71EA837DE
+ 2E7C0ABF0371672701882FEDB619B224C703DA63FD694864C21F8D396C8042AE
+ E45D1617393ABE54B6E3FBAB3A6F057C05FF6D9D1C28A58FF4C52469E31B63F9
+ ADB7EDF1905F1997BD09927D9B63D232C631F1162F0AC5E87AC2EDAC89790584
+ 7502E04BA9BBDC677B174AE0A391C8165BD72EEFE0ACBBA91E7FDCB7448D188F
+ 19B94DD258B2A4E1803EC3F36C36313A2E56709668602B1AE95804D6D0FC17E1
+ 6FABF07B0406F99A90496DB8AF1C10108B7D8496723B343FA78B1269185150E2
+ 55147C6D36CA7CB13FB82E11F4CF3728C9F9CAF11091D703EEA811A96EC77ACE
+ AE19DF31933CA2C6C7DB2259B86086D11EC3B4139020AE2B0F6F48FD6E443C30
+ 0744F452B922162D5BA8DF17DC6ADA2A3E71D08BA28A2BE510741DCA5A66E451
+ 5B9EAB0E6FCC8E64BEA12E579B57AC89FCF737AFC9434FAFFE497597B9BCE237
+ C66090F2E19D48BFB4FA0FBF0B14DB6C61228DDBA74EB7FEE7EFE42ECDCE1C90
+ 593C2932E729D8C8357E61D3632FFE2C244D14DF8AB68E67EB39D1D251506309
+ AA3789A2BD30752F696BF37EC79AB8F149CF81331D60E9773100FF4BD7860D12
+ 5FDA98483B1CC148A06A28645B809A0CEC676B6A750B775A4BF9F8F337B4D899
+ 65BF6379FF2B60E5F1A0E4EEFF1A64E048AF1B48EE00B880EF22A049950C87D3
+ 2B553330465834217885838CC588C5BFCEB6B40DCD96C53D49DABD5B8E4E33FA
+ 187FE417AB8984D8779462DDE7B937A5C0CCF79FC58564C0895BD3270C1425A3
+ 2087EF0DF2123977FEA40682B2FB23581ED07946B46F9185428A83A8C45A0DE6
+ 091510DDD99A070FCEC9B6F9AFF77E2FB7CB294A8C890DB56A8FCDF7BFFBEC40
+ D2BFCF285A8945CBFA76DBE7AE9F1538FCF9F218603E7A00052A1FD829BD2527
+ 455FD00345531CC6A1401802FEA77D3BC920C9F3EF0B1735FAE3D0CC05808992
+ 86FF7512DD5D31243A374C3218CE45580C2C0CD0F36430D1265B5A1D228E2BE2
+ 9890A63B9788348E99E4569929F3255976A8B19D75D98FBF49362667664CB554
+ 9BF9097A7A69FD1BEC5FE8B06354D8774C892BF5E4883F56DAA97E374C7218E5
+ 444DF1A854A8F0C252BF1945A049D525F0C8FB5F9107A12DD70785569FE549F7
+ C55C0D1AA1C1B2B510456EBFAE3B5BEB62A5083D31524A0AC3C7650220F7DF14
+ 487B2BDC3A8588A8B023D744232B2F159396FC36E88923F603E7811C4E3EDF3F
+ DAE09B49D3FC5728845C661A8760526A41E9BC2C16BB7F87F20B25A521C151BE
+ C22768B3CCD89E37D8139B16030466C2F3266C3FDBCDCB5987EBF3ED998B6E42
+ 7F4A9AE964D1AA8C5EC965D4113FC30FB127681B5E6F8062F70B453B60C680D6
+ CC086586A0A871A6968BBFC46A82007A4E3F54211A93DF787BAE746D7D74D9C3
+ E85617AD96470D171A560EB6A02890C7BF7922504FC8F530B2A9F93B27DB6E77
+ 1492452242199DA5D2986AFF1000C1379ECE946092B2D8FFAF40666B287F8495
+ 9A79463A7C4699B81965B5ABD65A2255515489D53ACEB6BEAB5D53B0C14A156A
+ E726A3ED630485CF3CE19FED00BC82D0C2D0615A296EEE8EB57E39A7475E660E
+ 808F451A907C6F82F415BBA6BF9715231136ADDCAD736851FD15AD84EA908729
+ 4A07A7968C342055AAE50E01F9A774430F2B6F42FBFD917C356AEDC8DDF5D080
+ CAAE489ED8C224DA39B3CA7FF1039DEE0B4F31F62811518016C8709CEB089349
+ D32DAC85AC936F6D14C3CE29D1583DDFE1CE552162D06C2772E015379DA79991
+ A52D6EB6B2B348D9E0F2EC65FBB589DAE68DCF25FBFCA22E3806461693E3E6DA
+ E60F8A8F8E1D2981CADC095FFDFC9FB0FBA8A90A7D08788A6A92068BCE6BAE8E
+ 64B2EDFDA0CC1A5033DADBC21177AD74F574F703883E1FDDA2971AFE3633D2B5
+ 202A0304154C32DBE392F145ECD2CC400EC5DC9FE7483C5312B75628366BF1BB
+ 946CCC292D1CFA2790042DA92B9AB89E7EB405330043AEB7FAA4A5DB44EED1EB
+ 9349678E89DA8EFF8A2C5260D1A62656B79899C54883D90EFD3C6207CEB6383F
+ B8BEA09C166B3605F69008BE00D33E7462C98E82F8568B574697182B273A907B
+ B1922952E3EAF6B09E3FCCAF1753168A0DA6B20D800EB744F3F15FE88B4E17F2
+ 20F545D626539FCCAC6EDEF669CD655662D652BA109E4F4860069D97C7878DDC
+ 4620C8AA5D9201EB1AA3D452F22DC65C51F3467EF6A69A9869EF17E721CFE506
+ 084102E16E4861792BA86006E9514E2CE86E394B3584721891B7C8934C1655A5
+ 91E3F0F423427DD19F19D8B1E6AEBF0354335DF49FE02E628D2B7F07AC4FEFE9
+ 8CA6B96F9EFE5A46F58F91FDCA04B8520FD80B36688686F8738BED7E2DE9F915
+ 7AAF8891D6AE0BEC7B5F340E2F83699812CEED19347F2440755B6B341E4F6581
+ 1BD09BBFDAE99933B058948BE7D813E2988674ABC6434690CD48EF0E05FEEABD
+ 31CCE1D7AC5B3E53CE22877BAD5A29668C470F05DD9DF167ADEEFD4463FF5A55
+ 3B74037CA4B3E62B130A11262DE53D5D9FBC6893B1F61E0D44AF5E1367DF8790
+ 9C98A2B595D27B5AF420E02D961D3A75A4032364289AFA122367506D2B87259E
+ C54B83F46DF0F81563160383F388A5329B7532CD78263E7E823F04ACEBA1067F
+ DED6FC120EFF49FCD853F51D460973D32BD3E439850D86C752CCCAB7811510F9
+ 22159D8E047846CAA424E1E6484FADF8CACD1195536B80F7B8821CDC623A3CA2
+ FE79604407E645EC3D796800BBA74ECBCCBD774102A498827B4964F2640DECC5
+ F36DB43B491C4083B282E07E87AF6B150E126BAB097BAB48F3F19C6FE0E09C7E
+ 5D44C148681BDB59767214ACF49DDC648CFE00985BFC3AC5DCF7ED60CC4A6E7E
+ 26F37EDC01CD9A11D38F0BA8F3D2C28FE60B85A22389C384D632A6F462089FED
+ F2DDA2EC8DC598A9FE74CB159AAACAB1694EB81629B3922A5847B2BE91C97738
+ 771F3A294199F4D645F5584DCA1CDE915193088F88B17FE379B8FCA4788DEB8B
+ 97FF98327E1835BBCA0FA10E6A8E7AC1BBDB92AA3C0E2E8B2052CB5EDDEC91FE
+ 6142261328A12F74209CBC223B3CC1DC538A47B6D051BDBE4532F2C0070E99CA
+ 4E712B833894A79F6E96D7702BE8BFC7E2020D1845737E67080FDB27A089ECCE
+ 6A2DAE556D0A2C850064EE067FF012B30662D5F2C99CC48837D83FA20BD9ADF3
+ E433619D0AFD513584B257D5566D89C109B37286FDE59490AA8034F9EAD60A94
+ 43F365B42D269F39DD79B12FAA8CF72B9AADE21C0A05A74027ADC2C31B53B2D2
+ 49DD421AEE56BB221D223AC1393B7F333A61E8438490E94E244FB0E9E4D72328
+ 656537E520EC59BA3643BE41ECD548E3B29F6F03474AC8B7643E22CD69532DF3
+ 459038C4A6C06E5F9BC261C7A78FE86CF4B35562875589379771D1237C2187D0
+ 0AB27937E84ECD9B5FCBE984706B9E66E22455F1F9604FD07B6970A184DFAB33
+ 56591B67ADC13821EA0F42CBEF82966F574CE1A5A1726B6F867F739E3698D3A6
+ 73D7B618ADE471E8BEBFF45BE4ED9D0CC70FFCED114AF8792D25B679EF5630AF
+ 2099804108554CE001FC94880A494B67134F336B53C24202A9D7204ECBC65B4E
+ 6A0C75A3CFE1F1D282BEC4D6F88E378E6058FA334091284E99381FB6B87F8B81
+ 4ECFA44AF3EAA047BA6003D50F60E36F0BE82B941E8C04BA9FA736678259F976
+ 0D01B6B91F7FAD053563CC9D4DB263644CEB8C071D2BAEC7398D0F555B877963
+ BAA008B357F4B1F300069E9679DDAB50F9614AD403D442AEFD83C5AD1DC005BA
+ 59654B6ED0B4DA041B8D49046B8F8BC59A042E80806299D01340D792E92D0315
+ 7AF4DC96AAF65E1119E28DB741CC8EAD0843FD28167BAD60860C8763F2258155
+ 05E4684B3A7AF3766F1115D1E3F89CDA946E798FFC87C0CF40C88651ED6BCE03
+ AC08651067FDCD879129D8A191A789B8D87ECC89A73B78C0F0A95C4D0A957362
+ 4628AFAC2F8BE51D1B1773D64FF7572EC5271D075A9E9B455CDD835AFCFE3605
+ EB45DF68DEC50D8109F6DF28E3D1CA6BB050BE6436B48B72C72A71513A924D4D
+ E3723BEAF87B2CA32BB94CF02CA405976BCE483959EE1390B6F5ADAD581C1BEC
+ 7F6FAA9D19148F83392CD6BCC05BA14CFD3F58774ACF4B0F4EB0BA580FE45097
+ 975F01DF0FDF617D0D0902521A92AFBBC537F6F46F53BC79959B8EDF4972F733
+ 4959FD5F94A25437F45A371AE10DD437CC6B1FB908C5E3FCF90F9CD134EE88AA
+ 9166285041A9CAA606D2BB858EB8A9A0C9D86CF6D8801F3D6226D5842BCD6D69
+ EBEED1A3D53B564E4B94B1354A53EEA8E1DA91012EF0A8DB1F31757CAEAAFF59
+ C6215D166356A0C6FADDDE01528E1001FB89AA578ED54EB0159989BD8E6EB193
+ F2170470CBE780E70843F65A777E4C4E30EC2C54F4C281C59D0CAAFE5DCC0C03
+ 4B663D3FF0A2FF68D25B94CFF009DD0F7528329D6424690CDEDD3FAADFE7EA05
+ 5C0DE6D645EDD3AF582DF3450D7E79DE1759E5914A1828BE7E5229DC36F31F0F
+ 5EE2E5E7496F1C1755A918947F4EA8A94441AE2914486B8F5FC0FE6891FB0871
+ 884C3B3C047B4EFD3559BD3D1726C7F8BCFB614D8C3C47ED68BE8E1CAB2D0E99
+ 97D354372E6A112083781AE023378030B0F207B6EDDBAC60A0F2AE1C62C1F46C
+ 9C51A083DB7F04DC1BAD29D4165B2BFFE451915836E55B64146ACFD8AC9D67CF
+ 9CB4AAB6A0CBE35A4BD03659399D3A615584A08E7C12A149E6E0A433FCC42016
+ 266F8A26755E8D7A29445A3A5E785C45F4327BD3BD34E13D0CF63C4129BDE2B4
+ 5C1D0376EAE7658A04E804DEFA2BEE2271B43BA2DCD794C4BDA0D9E833BDC925
+ 5ADD649B82955A216675D87D8FAB75A6CFB3210CF37669F2156007C514873736
+ 0F7933901E1857AC4F9C2DBD99CAE3104FB4D0BD81E072802F2BCF893DB97092
+ E6EE28C8821701122199018806CC38588EAE24F1BBE04CE258C42774B0457DA1
+ D541F46C83659B25B3C7932D8BBA40871C6DFE686665E768F9D1FAA01C97BABA
+ 04D407A6320B001496E068898FC3C33B8A557FF6E8AA40FAB528FCCF3038E576
+ C5818CB86BA7198E4CDA922DDAF319C9F8889CB4AC5A2E0507D4F3BA9E684CB4
+ D4AE82C90E3C55AF6E5211FF8A3E3279BB8F485832D8688A50BF4D42BC4D45AE
+ F14332533706155638DB94B076D1ED65D62046E2462F06CC5BFF9B7C1134201F
+ E5500D35CF6A1680B551DE45ECA52DA43CD2639F0456DCDB4E8CECE0425798F2
+ 1EB9ADF95E529F01F1BD20A14D6222564F27E76DB0E27519D6DECCC06CBB4946
+ 8319445F33EC6A3A8703370B568DD0391E9F95CC34C5EDA2240B3876FE7ADBB5
+ C761B1D33A70DB5DB0D9210B03AB4D35981DB1F5B1A7B7B5AE6BC6B96405E185
+ DB8106D1F41E971706BB9418A4EBEB712ED5CF5D77C9451533270B2A7C814547
+ 8CF7DEE7FB64DD8EDAFC579FCC9AF43512D660D0C9C27B78017142E1233351A5
+ 8D5F8F0B53CA613F834C990BB47AD38C19B55DC5AFDCDC329422B81C4D6F4AEB
+ 5A6332D12EF1F994E71E2715D043833ABB0E093D604B926E0557DDB69A477480
+ 48BD2C008B21B92CFF7277F3903A14203C750734F0D466A4D5B3FAD797904459
+ AEA8FCF9F4C924DFC61DDD935E78D1F8A3C932A4ECE9CA519E995CE991A92BFF
+ F12CC5DB11BC845B41948207071B3E89852748FFC34862C1DAC51924AAD20AC4
+ ACDA65B085045C981D81AAE17AB65D60DEEABB2F420168ECB7D0AA8764D298D9
+ 296BABA8EA2A9A27A0D87C3925946DD14211A959651EC3F658E5D372C4C37A26
+ 8B13ABD03047FBCAB7BE046E69C032C4CEA56ADFD202D1EC3FE12F33FF267A35
+ 1039E28DC6DD6F31794C476D64F401AAE28FCB000DE64C0B4F7053B6ADEB56C7
+ 17316AC3064C7CBC0EDC78D98D7D82BB630D51E3FA0D231731CAFCCE5978D354
+ A9C373494F45CDF9105707F7C6191B49607A2E64DAFFC2FE648AEB0AA0650207
+ 29D6BBD672C2664EDCA914909323C47D6A4EC45D209DACDBC38A31C3C9D25BAA
+ DE4CD108D7FBA4833956713514F0D8202A0FBA388684C760643CF9D1374D405C
+ CE1D51E3C8E8868F0ED5CFFA6F3E3A204013C659D19DD4D548EC3FFC7F6DD34D
+ 91AC9CAFF89E98D9E3CE57512727348A720C98CDD3CE66B859D526CD55337D56
+ 1ED91B3AB212CD77037AF0C3B8173282BD99F2F8EC82DBAD39E3B71ABB3F5BD8
+ F373BDEB5E3627665563255F0D8F205ED27A162C51F26D1B4576FF441D98EB9E
+ 6933CB3F741788EB06B8286CF43BD1F39660387BD735A2A410A02E2A84E61DAB
+ 1EDB0444A664EE6EBC90CCDD866B0D30EC63C3B7C4A7597CFE0A77943D8F7EB5
+ 9760C5AC3BF48FB66D893F70F6B15F70692E24D3AC2B8D22278C44D8F2D6E20A
+ 6ED89DBABCDEE5397C8F25C1C9FE96C5C71EF8B434C4F83CA8542D8C421298A7
+ 29A2C3486B71E0835CA4ECCDDF7F85AA5EFD23B2BF7F146155F97FCA5AB364D3
+ C7BEC21E7AB1CB94091837B81ECC1E980C11E487BC7DA5F28B37E18D0EFB6019
+ 4A3243962ABF364167353775AD96B3691820BB85F9ED3C5BAEA7E91B634C9675
+ 99FB33B89262BC5CAB773B34AA7ED222DB03A2374BD32393F1071BC876281A2F
+ 8666C1BA35BDF4906D5540B6E624D6772493517878A60D76332AFE7CD5E6929F
+ 223A72533A267B30BC4011BC9DF053CB0DF538213442A17312E11BB00142C06A
+ 86934756FE93F9D3073E3FC4DB904477FF391E4E319525FEA19BF00F25F56ABF
+ 21E5537B8E664F10DDA138A614F74C238E06D7C82FA33A2A4C21768C87345ABB
+ 23278DE80629A2E88E64017118E37E5BF92FB5B2458BA181E713B6290A5E2E57
+ 5EFF0C8FD9971D808FC76605BB5D6C03E5FC2E3A4734562CE86D2ABCD0AC79E3
+ 873B9CC4D05FCBBA5433B7B94BC81B6930D78053C1BA758FBC4BBD990D6A5AFC
+ EFEC37E6C92609C51EA9EBC95141EFE2189A014B0A40A93EE26108E58A44D0F4
+ BF780E1D8AC03C428C760C9E76757F3E4FA8CDF717427F887AA7CA04A33C9B4F
+ E13157136B6D19C2C0288CB53269629177B6E3C956DFDC015A744D45745EA6E2
+ 0F133400F685D829AFB5453F4809245E393EC56C5E18E5C1904778BD68F922F7
+ 3AD0211853C1B9628B347CE13364A91CFEEFF6E913EC131F8DA6A04065242176
+ A60E0A6719DC0103374639FF1551D29B3DAEDC04172D7A34B06C45DC66743AC7
+ 0D1A8E44BDBEF7DB3638438E8C9E262F784CE7686F1E64CC6E6555DCF0C92768
+ FE1890A2723289556A16A3502DD109C14E46A2FA8DCC44602AAD39F7EFE13F66
+ 64C894844F5F606A817795714EB5A1D2D6E426E51FBF7978FE261E9C79333FAF
+ D372414328317AE6AC4020505BAC19233D77222AED2F67755C59048C7D41620E
+ 250CC2D36C15830AC101C28FC37C5E89DB5513C1928A1C4F958B7F1254F00EEA
+ B380482F14C7627B33EC91EB950186154D595F30A491EC6A6C7515B72A455637
+ 4EEA74BF2D3856808DC6F53F0DD98F099D1FD7AC7392CEC0CAFB85A28F344075
+ FCA511F6C810BDDA47B1F0E3C201ADEF0A613804EA6F354CFE6A279A03CE9EA1
+ 298FC21C45C4811CBB7774F6AA5AE5794C112DC54AED87761F6DB83C79E67C7D
+ 6B8B625A6912B84579D343CDB5475DF1EE591C84A0CF4A23353482BE64F4627E
+ 7DE706449D005A254BEFFBB2DE2D2B077A6CCE6F2C65E5494EC7C3CA67FBF836
+ 335CB56E048B01A1ADC9C6CF65FCA9C06AB4416B45C16E82DA0AFF75B5B590F8
+ D5BF0FDD1DD6AAB68ECA8924ABE24F27981AAEE545EBB0B5FC59D14996FFA893
+ B53C6B2A16DFCE9E4CD9C0BA9B85917C77134AC6ADC8AE29C2C1068ACCDBDF15
+ C6152BF48A195531431E1E1D0DBD13D8E196E435C8A63C8148144E8C02B8A297
+ 211F842BBEAE049A038A1A8E4B66092F31E3B6DB3408E0382F54B6409BA8C3B9
+ 7D0470EFF1B2BDAE6E1FDF8E077DEB18C857B45E21C8BAF4543BF1F53BCA93AC
+ EFA462A363022E2EF1F196C4A8AECA836058A213ADD58358B625816FEC8324E7
+ 7D63B3AF2775A5D1CA41D9AA824EBE0E1CBD48ABD7CD129A0DE3508D12E148D4
+ 7CFE7D5E7EF8620E66DCB65400BADB0BE36425458CACC5CB90705824C9124461
+ 4B440B4301123DA5D56022B4239F57214C6587E4422682F0A72F15F93A39874A
+ 4E096067967FABCB9079F24B1DED47C70E575C7C5538B859068DBA887736C026
+ 78B84AF6BFE2E05769FC9F0A899B0D6DCC6E11861F879B0D315B249F284E925F
+ 0309ACE966A9B0A4B5D2EB6FC570CF41CA3B2B98FCE21958435C8B625012D37F
+ B44FAEEB62DBCC59C6D129F71EE8A0E988FA34961BB1863FE4EFF4A86110AE0D
+ 726C18854F35E806B9E0D8A8A2686228D0805FBEC25F6483423AE6E447808B60
+ 3C86207E94F6B311ADB5F35E1B91CED27F845B4980D558E0081D0F1CD2E768B3
+ 4D8CB623FC05D1BA7458B23D98D4292611C0E61183890AC3C87DD3BA9A62B024
+ 2E60DD5E4660652345F86ED229555357A06123F1190CC954671884F1D2B81A0A
+ 201BAC968BCD2084831A6EF4A85601EDA64DC5200035EC8DA637394F38EBD9D9
+ 6E445C4B95B6736B42A0648F11368B2C1C6B0B801586E34F8C28B5C21702F80F
+ 333EE81CE3A92F47B491A651224C05C300757EA8E26553BEC5673E9823FE2D06
+ E3C9323AB1211FF39971FED4AF62413C98158DF7611A391A7E20BBA364FA787F
+ 4A7C9F900EF946C05F5DCE4626A5399E4DA47A3D98DACB56523E3573CAEA62F2
+ 1395330431D9D5208264D8806C8F27C60DB0A4B2E239721F4E9572EB10597632
+ 764A7E78B256070E5420C4FC85ACAB93C2AF0653668E10214A7922F2943967CE
+ EF83F543E06703859FC71808885A23A63414F494F1C16A1ED27EB974E5AAE965
+ AA947E79544FCC3825CE0BB56C70EE2D04793E94A15882ED2F97FF33E689BA94
+ BCC7CD90F4B949EB01BAEAABF904649FE3C58AC834856ED8311127D6C42A4515
+ 1758E3B73D82D5E859BE7979FCB14D45C6C180223ADA127FE54B066A5A1ED6DC
+ EC00CDC83DAB49108D5D9EF92742EC14D47719B0DB5D82A63B9C462B2AFD38D9
+ A5B71DBFC72F82DDD1177AE6BFA0568735D57983F9FD9F23E33D5156ACE336E6
+ 71A7F9AB2FDD5C867A742A5C953F1B444A522233146878DF19F86C47F3AB39C5
+ A2FBD8342C5F2C3757400BB325C5219B516C63F33D023EE882B7CCE8F224DF69
+ 68A68AEA665F3A4413A8E3877F3BE11B624F71735928996DB1B93766F8BF6C1A
+ 2B4C8C740862707E5913DD6691E4D20267F222EF50F46EE108C35A4B2E0C5739
+ 89F6B8FED1C5B0565C6D0C3018EA0F0703DCEE34290642914B0DCBCE66A621A6
+ 47C3F103499099488E1F3B4623746950B613A2AB5178DFCD407854E556A41BF7
+ 04267ED8DDFC5D4A692467B1025C570715917B936560DEE5F91B53BA55EE13F4
+ 0A67F54A589F2BAD640235030017D05ED32E332DA06B599DAB69EE2DA3602856
+ 03DAA6DF35A3A4AFCFC8CC1885A3E448A4864A1A8C9E38E24E86B98E73F04981
+ 4BE6253E896B606C0CE61D65B4849C20D9459CCD9BDD17C25A340B55FE3A449C
+ CA7F0A09A6CDF4BA9FA2EAF253A4CDDA717D6974FA4C61A6ADD465FE06E53035
+ E8577AF00EEA5B2763FFE3C7014A596CD4F9EE44919F95B404291E462E154D97
+ 7D0C0C686E637EFCB3CB8E73CEA4EC6D118A3CC5668137E17DEC1D4EEE158688
+ 7AD62667829D107FA7EDBF17B7BD4925CF8D475C0E52FE8A4460A52F5EB831AA
+ 5025B23F6D6B3F57A0E2E509A356A93328E86B6C85DF8872BFEE1CFB7A9461C3
+ 9ECBE1B116001F23465D803B9B87C111C669345101AA9B824AE17EB80916326E
+ AE3B4F5C2E04AF8BB4596860A549BBF81803658AEDAA96A55EE0C8C8DC6AB9A9
+ A7609AF4394B57B510F31AE295C22521EAA9488C132903C6D3B7C1B8ABF25C64
+ 9EADCB68D02E6590EFD05FF30C6B8D8BA9E0ECC2F1AA6C7A68BE0F46C2A41A62
+ 4445E4AA736E008814E8C55B022DDD85E985CD681D8A1B69542F3B0E9009B53A
+ 902C93823BAB638B3103755A48B4588AB8A72F109C6C67B5168C0763C27059DC
+ 1F60D7863AE9AC4A544731EB64794EB29A1A5CC640F3A614101823B4645DC0DE
+ 7DB420D32D0230E0FDADF8F2FC8D0310898CAB70A620AC7B2FB1B6A326311893
+ 99031C8396B6511E21154F9C3971B78BC6B20AD8FB1417C04A309B8B5CAC7649
+ 72C267BB988E285E5325AFC05BE59E8B816B337D0CF840DED8A26CBB332C48B8
+ C02BC87ABC32C5F08F1BD1071F93E2A0EE2ADEACBCF33E689116F4CA9609B067
+ 210E5482E30C3D9F0B154428FED0E13137B6B3B9E2AD4109AF39228AAC8782B4
+ 2A84E22273171E969C7E408926E52A2B96152570D275A18D31F7C109E857EFBD
+ 64F1354AB5FCD767B50D55687E07F3026561F397FD7434DF9270862912E041F8
+ 902064FE49E46258EB99AEF254B4E3C99E2A692A23C4E468B82877666C178F4F
+ C8ED4201315EF9B66A3DD93D81A1B6BAD7ED7B001E012A64BAFC4185560B0F75
+ BEA48C7EDFB4199980BCB8073CC8F7CEAD8ADF1A68FA2294B6A884894EB02474
+ 54F7831C4DA63758F7B7DF35E9D692522C5792AA834BEF7320712DB967D144B7
+ 4897640A0B62D989C2836595D83E76583239F3A7D0F2E089C6EDF19E4DC018E1
+ D0F5D7BDD8F2DB164155AA58A87FF275494918727CE8D04D3EBB3D3061D5B0B0
+ 9AAC9B6FA98DB4608DFC9D4F4069CB5F1E4401900B135712763F8DBA4283E154
+ 64D1E3CDDEF09C6DBC102C4CA0551E6DCCB5EFD78450327B096C6A8626C85218
+ 742BF3C75800CB27E6AE63D3AC4880B246DB9583D4F2FFAFB1976AFD64391E08
+ CD6D961F095FCAD9B14E63363A67BD6ECDA0D065032D021FEB6C612A61EDD50A
+ C15388B62536511A19A82B84E87234DC46BC248E60C5E0AE96CB0B92BF28A8BE
+ 07EBF8B0C55EB70CC9D29A53407A1CDA8E5AE1BE5B023FB4D6A5635B83821573
+ AA5CD0E779F30D0F828FFC2990CC92E598340EA13910D2C0F1B2A96DEA9A0C5D
+ 0288428FC80268B86DC4FA2F0965050A709D57AF6DF9CC889FDB8864EDE545F7
+ EEA233127E2D18B01A95FAD8B277B6A2300F6C76F6C0980F116F84A7C6011087
+ C307464ADF91335255FD8A11FA0B0E661E5CB89886E95D3834E761C872BD83CA
+ 2D779B51B0E328F2C12C1298425B3FEC42BDD452A2D9ED78AEFE1042E86D61B9
+ FBF9058AAAF60CE470C405756E2FE1D952376D82387CC532C60EF2F2EEAF91EE
+ 68FF258D85F18479E20DCFE517DA3D217E36AD6999AD46AE87ACA434B691240C
+ BB20799BE21224950B39766B39D36F95B82CBC99E6AEE2AAC64BE4E65CC3208B
+ 29D6804BAC78B4D4151349DFFC0D70393ADCCDCA1BEDBC6AB7ADC0BEABFDE2E4
+ 5092F34FCE1D75EAAC2850E04786D89B98138A87BAB0F8827CFC7A560DC1994D
+ B2DDB1C9C3FE7D2D194CA9AE29279EF3B3157944BA742C5351E590331E72F809
+ CB048AAC041F4B70B8FF9B9278059F3802878B8AD03C14976B6DB6B357BB32CF
+ AEA302019CE7C268F9BE6B54203E07CE8D6C9C3B41C60B64D77B3A5F22585F2D
+ 5B950E6288BCD0F49DFC228BC8DB9C576D3D89BE55CDC890E104CFC2A7CC2838
+ 5211FC6610D52699D05FE917846535D3712A67B7B4BBBF31689E344C62F28F7F
+ 8F56A23D2B3FFD7B606EE5A327D0DC126260A426CC0C108C6A327BB3A37F1BBF
+ A6003EE764F01DBEDC3E550B3EF89EB0FEC675A3386DCEC17DC6FB97CC9E1A63
+ 79F21F77656DF7EA5BD818BF4373FDE351DED5E3B688E365331BF13D41D95FE4
+ 92B749974755CAAF7E078F81D1422A78DB14AED7C5CF69C8BC60B2C52D4999BF
+ B665FEF4D44F903DEE6D734DC9A35D0CF065F441E33BFFC2142B7BEA99ACCDB3
+ 5F0EF390CA3126B11AA308EC966AA3A3CF7C9BD029788C6E2155000734ACDAD4
+ 36834FA4A5D850594B19B3E69178C423F921DBC2FC8E63529276BAF3ACD132FD
+ 87DD28019FB96B6F59EBD4F890C170B6E45A6B46AF6F03A6CB76A49B8065F392
+ 7E36AA50D872A9E0DEF0B4920B5F70BABE350E2FD1F8803238949E157D41CADD
+ 9474A0E10A9632700F15981DB84948B470AC218A5A960B3BB7EB71C3734BF37C
+ CAF51EF45EC3AB1D444F34D21F59477750C5B5E7848499EBEA36D95242EDD92B
+ 4B70CED0BB89595B1C5A4ABE99C928E33F9FB802B7E03DE033A61A2F8D3CF63E
+ 14266ED62BD57DCF0F28C8294B95397E3501EADCFA0B6748182A79B00342A75B
+ 803C8DB8222C43412D72CB0535DDF3FD540BF19AECD7164C1644B648932E8E79
+ FFCFD3CA3428DE8C3E91CD1CFADDF780733FB3AC98F3A975A92547BE3CBFCDFF
+ B4331AFA735C59D2E6BA8E20082414B528FC2D78B34142C2CC3DEE0D41757517
+ 9CC54B2C8277C3BCA6664C3020D69FFABEA7BD80BE64A7EEE2B3FF1DDE293343
+ 2F4E67026111D2AA89E8522519C07C15712D3DB72DB8E69E6E947A512D8313B8
+ 354496C7AFCE3F74A16FA5089A98298DC4EADDCB7B8E86FF52F0D4965E74BFDC
+ 7B5804FCBB527ABEE658284281D082A06827393159F5A70CC798269917513A0E
+ 8BE1D8324D50F37824027F2E80C476D8C194BE88B79904BB51EA5571872E4DEE
+ 919460C00A40BE20280726EA86C9469BD2E7C5B905F81C791401D9D07CA04A10
+ 36621F1825DCEE7F7FD09561274DD5DF5532FBB044F9BE0E8E0F4D985BA847A5
+ D8640B5AF2267A66E98CCC2E136BEFAA7DC03B17FE1F95ABD2561824BA6CCD73
+ BBACEF0F8614C5A1F81010DDDE7DAB4E3D360485813EA0E6810C0F5C2989B875
+ FA588D931103CB7BE93A677CB9C975612861A01651C1009932A9D151069E51BC
+ 479F0D1D74F58BD2B5CC1B83D70A98E5E1F0EE53ED717A4BEF8AA247BD032F75
+ 1812FA3A644FCD833A3BFA65793300A79A7CCD08FD4EEBC2158572FCA6FC532D
+ 3A0C391002F97A8308135E051B1FCBE1B070C417DFBEB8796722A1A14E3E6D3C
+ 6139868843EEF4DA1EC382BFD2A14127A0D9847328E8C23FF57EEF32CB7F7A20
+ 06F65DF4A6B38E4EAADB43A6859E46724AFFF9AAB9E73347A1C02B8BCBE215EA
+ 93EC400B13DE4D5358E0A0CB706C6CC935CA7C8104066F9E81C55F53A1334DF3
+ 2FE19B1CDDEF52F6AB729900A6EA6B7725F4BF537DC8124BD12FCF8AAE826E8E
+ 6C35DB3EBEF0D7B0EC746445EED004ADE24D4E663020D32AD273B46F4E7BFA1C
+ 6E6A9A152366ECAA15BE911A0D92DE538165405457CE0FBDF888C082523AFB86
+ A6546D070F9BEA54FE4CEB33119183A907206113D3205B0EE82470D81BD49253
+ F363AEFA109478E653FD3950A896D2B906C5B3B4A45ADC8850CB7B0A220FABF5
+ 54C8B9E5A44349B409A57AD85E45417E74D97D2D596CD9E1F3BF24A6246332C3
+ 64321409F02C84BA1067AC7FB45344F402A29FFCAD9CEC28DCF49C56B8F4EC63
+ 8A7788F4AC2582892F289473919B575AA72FC765865A0C7DA00898AE099163DF
+ C7D8BC3AAEE07E08C4FB36D8A25728A39C849244F85A95D1359B0494EB786A04
+ 986C09D1EECDB9C3F3ACE751C1555366924DB9B5A1044D1DAE16DB41E5A66E1F
+ 6A9579136363BACE2C1EFF5F55A8FDAC9CC4475E43C363410649F0A20654D4C1
+ 915622AD5FBB48C70E09AA97E32392E33E08A5456F86D4036EB14B2FD1D3A67F
+ 52D5931FF44F8B835852D78AEB4C0F9F78A4553B44E932D104A434BE7B51EE4F
+ 643F17A66074FAE81411FBAD6A322EE8127484AB55B7DEC19B1A81F312F6BA45
+ A01C9E1B06067D2B842754B636F0869B17CBDC1A4454C063F0B4A010C8DE95ED
+ 7CE8B314C38935086AB9B52AD649E82AB0B2E61A6DFB9420259E19E02F19B959
+ 82026DC847AA61654C992540A5502BF6CF88CE08D22E80429764AE298F99E4BE
+ FE73A4BA4C4E31B883F5E804759770265B37B60B1593016F545CF833A72FC294
+ 176ADC3D3F8EB61237B800E6797189C1ED790DF495F93B2B934BA323251E39E5
+ 1AF43FE2F671207BB0028316CC85491AC6D5D37E4E3736FE6B0BB45769D9DDF9
+ E1A559622DB050AB826DE48B31714A215F002B2564E27A83B6FFE4476520A647
+ 625ECC7F00112E22AC3C10AD3EDF1C8860484EBE7EA6417E4375032950310ADE
+ 91700C0C173DA0E3D277ACAD119D46DDBF8104B80C380DB2FC811CB36873C146
+ AC5AF37F127E8951F5CCBFD2876694B17F1FD7B07D6F0224909ED53BB1A338B6
+ F80E40372E3744889CCF039923BF56808DB3DB61E8AAE9C1065E12E5E9BF2D0C
+ E8010A6553E1737A45A70240C566443CD63C61EA74A7EB5027A736C9DB46AAA9
+ 4EDDA02B91D1ECC7BCC15DF930BAEF585B591574D1A795393DB119B5FB7A842E
+ 218A755C497F26F28FA23934C6DBBC940FE7981AE79CF00DC981BDC38000E89A
+ DFD1D99E489D4DA1A4BA716228E8C5CFF3D8A6497832367C0D02D13F6B1A6301
+ F045427A65DF558F4527878B85CA63F06BAD303CD3C32F8DDC91D1B86FF35971
+ A2FAF57B9FBCBEFC2B7C712B40E827893F11B8807112A58BBBE054DBBA4C0E93
+ 8F1FD760CEF12CED1ACC1F3A0F5059F4D6730EC55486EF677EF3B836EA81C18A
+ 9FAB77CDCF5A0A031EDD4A37FCCA3D14E00279131EDD981253D080FA53882F09
+ 350E7DB7B1487FB2D4BF6BA9DCE16E11D3D931E751233EBA8C0F35E2EC39B891
+ DEC387C15518335041C66893B36C3B906ADA15CD8F88C99067285035290EB087
+ 923038071845392B07B939BF104547BE0E30C51709BD9AF240BB686DB007A030
+ 6FA3215F7C3E9DABC3EB7D4B5C789EDED99160730153E79E635BB5B8AF28D8ED
+ 093A3D6611EC565FC7781D14B3887FE201995D2F675F3F597EB50A9BB3404871
+ 10D931B6DBB34A58583247AD731DD9CAAC7142DADA64898798B7E3B784015777
+ C2BBB1BD11B6B8AB327D10181E5E9D08EEEDBAD19A76EF67B089AD3FB787C7E3
+ 6702BB51B9D6819335644121BC00CAD5932B081376A7B7CB077A463E3BACEBEF
+ ED0A3877363A7747676F1837CFE539D9A86204BB717CB363092BE3A6317F2792
+ 8283A88DC0D616DB3AD97DCECC794EF8EC0CCE6A6AC71D6CC55E861B59C5016F
+ 7C47E09E677DE1594E4B3CAC9C1695DCC265D45584118A96D059456A0E226A23
+ C40A3723BA1BCA3F2473F1B208CF063BC16FAF9BCADB81E418BB1D84A83CD7A4
+ 15752DC74DE2001383B461714E14CA006D0F759E232076A4604DD7ED9BD43C36
+ DF3480069ECCF31D5F0CADB0A852D1722FF5079B92A0455AC8B6700BA4B7B99F
+ 3A216855317502C4A79A185712FB21BF34A37FAFDF59640451600F948FBF2DA4
+ F2A28EFAB8C5D153225905E8D1D3D6B6678DEC3D1026443C43F735AB36E74661
+ 0FB4E3C51552BB730BF5CEA82ACA519747349D912BB85052D28C36B2487E7E0B
+ 287ED78CF6CFCD751D4C5624DC40690433BAA19A521105B35137A108981C5D61
+ C1D45DC3657CA1CD0FD21B64619203955539C55B6D35FD6C63B0A567463086F3
+ 6F3B2063D3251710EC920DFC4B17F4A1E8AD80DCABD55F8630FE5EBC80BFB44A
+ 8803242FADCF41C83594C027A690CEAAACF2F9C66140706EB5AA340CF6BED080
+ FAE33D5A34F2E27C1337EC9C2EE942145F41A39AB871FC6D5A9ECDA765C25064
+ 9864BF68BACE2A3C224C7BA23A2CEA26A6E0B27F9DFAF25A9396BFCED0337603
+ BEE2F121CF61512330D3C74F80D5F5DD3E66F77EFD0BE20CA59E806910CC2BD0
+ EF2E7612C1E91BD928492D9EF9FEFE59F251BAF4B8C1902AAAFC5B96D5FC6814
+ 26E221B12CF20DDBE7DC22BD919563961A1BC68939ABEA7B365916789F7E9F5D
+ E7ECD22E99212568546E1A321FBA29AC89BEC076C9DCB937DE55F317FC2E11D1
+ 5D497FA86D69073032D18FB553588B3070E543D91E82FC34857E5067F9363494
+ C175161E060C3C30FC6FD85FDFB9D3DCCD0392B10DD584528A46A7310A9D482A
+ EA44701653FEEE8A1114E82E3B96103D00D59AA44470E9B68A9B3703BE92EEA0
+ CAAC9E79BFEFEA4572D3CD62FFB896132656A75F132B52E5C7D28D376AEFD606
+ 048C372F3C7A420CF263D995FF671AE5212AE6E1082F7A130A3B090D6D41B971
+ A70E2E70F0585187CDF3738DE5029E6B785F6FA63BBC0ECA7534B94662506A68
+ A69BF0294D1F56533CBD2ABFABFC45DD30CFC65585BA9BE092D87328F398EFD4
+ BA0FE2FEF791
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ /Arial-BoldMT findfont /Encoding get
+ dup 32 /space put
+ dup 33 /exclam put
+ dup 34 /quotedbl put
+ dup 35 /numbersign put
+ dup 36 /dollar 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 55 /seven put
+ dup 56 /eight put
+ dup 57 /nine put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 60 /less put
+ dup 61 /equal put
+ dup 62 /greater put
+ dup 63 /question put
+ dup 64 /at 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 88 /X put
+ dup 89 /Y put
+ dup 90 /Z put
+ dup 91 /bracketleft put
+ dup 92 /backslash put
+ dup 93 /bracketright put
+ dup 94 /asciicircum put
+ dup 95 /underscore put
+ dup 96 /quoteleft 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 /braceleft put
+ dup 124 /bar put
+ dup 125 /braceright put
+ dup 126 /asciitilde put
+ dup 161 /exclamdown put
+ dup 162 /cent put
+ dup 163 /sterling put
+ dup 164 /fraction put
+ dup 165 /yen put
+ dup 166 /florin put
+ dup 167 /section put
+ dup 168 /currency put
+ dup 169 /quotesingle put
+ dup 170 /quotedblleft put
+ dup 171 /guillemotleft put
+ dup 172 /guilsinglleft put
+ dup 173 /guilsinglright put
+ dup 174 /fi put
+ dup 175 /fl put
+ dup 177 /endash put
+ dup 178 /dagger put
+ dup 179 /daggerdbl put
+ dup 180 /periodcentered put
+ dup 182 /paragraph put
+ dup 183 /bullet put
+ dup 184 /quotesinglbase put
+ dup 185 /quotedblbase put
+ dup 186 /quotedblright put
+ dup 187 /guillemotright put
+ dup 188 /ellipsis put
+ dup 189 /perthousand put
+ dup 191 /questiondown put
+ dup 193 /grave put
+ dup 194 /acute put
+ dup 195 /circumflex put
+ dup 196 /tilde put
+ dup 197 /macron put
+ dup 198 /breve put
+ dup 199 /dotaccent put
+ dup 200 /dieresis put
+ dup 202 /ring put
+ dup 203 /cedilla put
+ dup 205 /hungarumlaut put
+ dup 206 /ogonek put
+ dup 207 /caron put
+ dup 208 /emdash put
+ dup 225 /AE put
+ dup 227 /ordfeminine put
+ dup 232 /Lslash put
+ dup 233 /Oslash put
+ dup 234 /OE put
+ dup 235 /ordmasculine put
+ dup 241 /ae put
+ dup 245 /dotlessi put
+ dup 248 /lslash put
+ dup 249 /oslash put
+ dup 250 /oe put
+ dup 251 /germandbls put
+ dup 0 /onesuperior put
+ dup 127 /.notdef put
+ pop
+ end
+ %%EndResource
+ 
+ userdict /pdf_svglb get setglobal
+ end
+ [/N10/Arial-BoldMT 1 TZG
+ userdict begin
+ userdict /pdf_svglb currentglobal put true setglobal
+ %%BeginResource: font ArialMT
+ ct_CffDict begin
+ %!FontType1
+ 16 dict begin
+ /FontInfo 15 dict dup begin
+ /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated.  All Rights Reserved.Arial is a trademark of The Monotype Corporation, registered in the US Patent and Trademark Office and elsewhere.) def
+ /version (001.001) def
+ /FullName (Arial MT) def
+ /FamilyName (Arial MT) def
+ /Weight (Regular) def
+ /ItalicAngle 0 def
+ /isFixedPitch false  def
+ /UnderlinePosition -100 def
+ /UnderlineThickness 50 def
+ end def
+ /FontName /ArialMT def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 0 /.notdef put
+  def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0 ] def
+ /FontBBox { -222 -250 1006 922 } def
+ /XUID [6 44339 ] def
+ /StrokeWidth 0 def
+ currentdict end
+ currentfile eexec A0B00ED5187D9C0F1ECDF51878C3AA5CAA3EC70E14AF46
+ F38884AB0522111E1FD6B5E292C7A7C85F79C8CF269C29C6F79E84099DF3FE97
+ 919C760621BE9B4756D5ECC123E0FEBC7A1BC9CFDCE3B7AB1B118837C4B97C17
+ A4A2D65552C37CAAD683D3DABCC09A36FF0DBDB89E43724FD10F7C1BE056E775
+ 101008AD51C29014E0B4AFF4CDE74E1CA5A64E39C83FCEE568A997B7D0D888FB
+ 5AE51C74D8CBBBF61463B3A1C80032F9E9B615124B88BD716363A24D9B750718
+ 4290A3206B935F4107372023D4CF18300B61A6F017E700015589C6D8BC7BED9D
+ C6B3584EE181363F824D6F1E3CF3DF48A631A54AC4E8C81536C1461454CB4B63
+ CBA14A6242F261EBAA3F7955E7C1E758A77E93DB07F4A86D1667FD99BA1B965D
+ 92FFB04F46A8F81AA8F43A6205BDEBF751C54A5394DF443719D16B0AFBFAF01B
+ C9203F81FDE5B931E192C430769AD893C30126CA27135878D49BFA89AC71C990
+ D2A4E8825524271BDF10C6FB049A8B0E7475BED9B44CD4C2B8104452ACF12AA9
+ AC8AFE331F9AF9B0A708BBF3F45200395732639C0F92AB91274625421A93F511
+ 6771881AE8715C58B854B88976701B5385AFE60F40E1B56702BA711ABED94473
+ B72503CDC76C7C34E0A2298FE19357CA17DF344A592ED134D171E58899FCA9D0
+ 62653DAAEFF8D71C19F6D3958220794375F07D635FAC19B5C16DE6D9F30A648B
+ 9FD57832B6804A07E3B1C5D6B07F59AC95E2FCBE0E02CAD0960ED6C98F70D7F1
+ BF7885DD5F0B40BAD91171728FADDFD616EE8A88FC18B5C8F16804C16D7F6408
+ CA476477EA76AEA7911801F204F4E0C0313B1FF1EBC254D7323C0DC28797B201
+ 5A904335690D638EC2C45723DA891C15965F7E459C7707B5CA2F5FD3AB3E68A0
+ 313986EF4BA1E06DA9EF1C961944F5EAD42BF3F30C93B800BD3829FA6254F143
+ 6E9FAE87431D328C947B5D4518A07B8BDFCD64BE3F120FB418101229783A489E
+ 248775C96CCB00A5E65470D0FCBAF0FAE402EBD451D060534D8C0BDBEBB5FCA1
+ D2EC726465F6E37F50D455AD5A00EF50DB61B78CD04FAB58973478F3D9301CBF
+ 6EA03071660EAD7CD6BAD616C77689D560133648C8F3CC438400A2F69C672330
+ F046654B0C61443F393DC0B4F138C0051B027383B50F624D1B597BD5B6FA0F3A
+ 255EA0200400F6EA8C15B2BBA215A6DF7152EB6E1DBA4ACCD4BCE3511207E8DD
+ 13212B8B2A33C259F9AE30A45B338BACC981BE53D6AEC541E6DE02A15260EDAF
+ CAE20D543A7277E81EFB454532425CC074D08E1E3E066F4B62AFF15EF8F59202
+ EEA5CAF47E4C5F55C16C0F6BACA0E175A659043E50A65B8A4CAACB535CA5BF25
+ 824F7EBB192DEBCF59F80B8E8FA78634C7E0C86BAE5385477AE8BB9CF7BADFB3
+ 05296420051EA5FBB7780324620366F20EE93A46EC5A65047F69BE9E82953C57
+ 5C363FAB8A11C647F86C8FAA99FB3C21E2E9B9311A7F61CA453F919912FC714D
+ B64BF3D52D3FD48D2BF9FE81EDDC7B93896BCD68C3DA1CAA36D446DE08F14F24
+ 881212362D63355AC0A4A4C1DE86F48D18286C2EBC5325387915D77D6586E10F
+ 9F7332A871D5F876C17998EFD998EE49A21B141B60E33C515464787589D34945
+ FC6D3C0697E124CB796B6570FD477D0921D4B5C20DA297A3A5990F39ACAC22CD
+ 7C0A2E2F6013054D2306398087113AE376AF6BF19822B988FD14AC9F0D11A0E4
+ 5B6FA61BC823D97A1BD3B4EAD9CA98A68A8A82A95731ECD22DB5E62890A468C0
+ 33E806EA900AA2683E537994FA1CBB14711CD8934550F385593F10E49455D48B
+ C883E2923D91AFACD479F37E4502A252C407B0A3E0E91F083ED08D5B9EA01C30
+ 9B2A91B3EB2B2A9BE3BDEC6C2F1611F5FE5B6C5D6F63E1007ADC1EC081577BEF
+ 25703376B5CB3EF7AE0B682521326B0602AFC8EDD3F9D29B6681B97F2F6D02C1
+ D6B9951EEA1CD4ECE1D1B9030D1E8E498ABF13905DA3A3EE416995456B39301F
+ 1A268AED8DFC91A4941FA2E15A40865DCE35E106B036811366F5A809D7BBADF2
+ D3BE3E66576E1CD5F49F26F48231FB265825D1883F5529372B539765B684408B
+ D9827D62A85A3223BE93705ADD0EBE9B209C4198FC396CEA26F3C39EEBDFD571
+ 696FC4FF8A1046721B1F5A2459772AD1B1D73E8815DF6075C56D6CB4821496E0
+ 6177B9BCB8D9DD8141264C9351D1CB9C66F3CA360C73EBC99CF256AB34832665
+ 418ED547CF8AF9967445629E3F8812D72C9A1367AF724B29503EBD2709A849A7
+ 73B145ED245AF6F558EF3C3DD58A79841D2D8072829B4354B4FB9B92511C1DDE
+ 4419ABE724FE38922CB46D755965EAF364546A8113725EA3F655A17D23B86DBA
+ 967D6093A61D81E7D891F1FFCE8555AD2E572ABC392622947EEF2B19F37EE7BA
+ AA23C81AA8366982D80AF6F8E800DE29C5E9E9F27EA194D5DD0B05448BEB860A
+ 0F1F0A6B21B920C11019FCD3C7AB2A9131802E49A5C0D83D24282D2893A4D414
+ 25607C2775199F43509E85DEBD1940B6BB515F1CAE035F62783B8CE47BD02AFB
+ 20A5F22CC3A1FECBCCF75E71B22DDCB8DDC1E6BAA1149EFB3643C90574D5854D
+ F042CFA4C6AD811BFBF1D9B3F28CF5CA542033379C85879D32122C8A647978B5
+ 196B70CF7AD5F4986720107860406624DF6DEC7EF00F683504CAD094C1D9B02D
+ B0F85AB73DC47B4E598324D3D87348A08FE851CB80183CAFC75DA9F097F437F0
+ 4B201BE3D266A020292DB51B30FB6789E6381981D1E4F90CAF8B0F2DFC6D169B
+ 30E18BE97EF91B75E09904BE317F7D6F881EDC478742EEC2B480E9E8A7DDD194
+ 42B4ACBF73B56BF0719F73E4E0C4FC0FE55777E7DC2FB7C28E043BFA7D93D42B
+ D399400549C35FD4A97B36275903BD7F0B87BA7171186DF4E052114E06CEB9BC
+ 507FCA94AFD74BF077E0A0926A1ED0C76395A9EC95964026A4A3D1201551B0A4
+ 505DAE3B203E6597D3CABFE5F0DA7173630CCB05EBAD3994A072DFC27BA6E93C
+ 965ADCEF109D4AC3AAC43F493750D1A3AB840159EAC69422A70E17F078931605
+ A65F6D264A140DF4B0466E98FD9A620B48E9AE7AD462E8C6DAD19A6074CF929A
+ 5FC78056D249B2E2A4C64E3E378047787E25C8E3CB799831021990736A979469
+ 291E01D76778C4854DAE4785D7554DD5E5159F2C95BF76B752DA815B8E123689
+ C77DB25BF0A6F0DE18F8CD9E3E585C5F5A806ABDB3B1653BEEA0D7E0EFF2348A
+ 8AA54DB0B29E5A3FE8AE348EE04F1EAAA7A7CA16A43E7B6D4B71312A9BF29191
+ 4C2B3DC2BBE1D3B5ADC998199239FE7639C1345A4BD8A6366436580CC30C0D05
+ 84914262FC7E798A62CF2FEF968D05FD4C6863D9AFEF5AE41D12FDC272C50695
+ E9AACE78A61FB7017430186DDFE3D535471936C2FB4C7AA03CA3C7D70CA15526
+ 0F851513E08FB11A3A1AB04280E4C22F2F06434DC59CA70B7E9EA443668902F7
+ 70058CAC92A2967EE581143887BD5165638B47B6F0A31F01647C28F56263EB6B
+ 70CBF3BC9C48DFDDD9D81BD7D323D3B1086E35B86A8D111B3B5A656119239CC0
+ C106D49294DFA01E1D32745FC88F8A17E614A32164B891EB787F4D681E74A3A8
+ 4EDAC7D8D6BBE9A84FC9F7FAB3D7E7211E4C57F9CFEF7C5C3D292971D4435199
+ 2FB5C396D93A20FC01C54E903A7F0809F44FD39D74F194F06D5B2F6112181321
+ 59BC06420509DCFC2AA4C7C0E2F7A01E47C4AF9D83474EC7C326ED7D45F67550
+ 283B1DD83F682155C7579025A47218D6393B6E10F1108902553B1D9E4679927F
+ E6183F4673276A1371895857A61AED50ACD7250CD94F01E9728F26CDADAFA751
+ D4F63803ED04708EB64E3576196065311C3CEFD7C823B8D03A71F983B2F61182
+ 2D67217F51E80DEBFF0ACD0B71B7E4C5AF129DC11E18597B3930B67358181789
+ 1ED9A4BA4304DE8C02D520423CEA3FEFACCCD6C51997E2E201F6E658EDAD7BD4
+ 2E3AA2A040D205F5FFE0AACEC3CE9E35304F2FB46CFF000E19D908FC360AB518
+ A6EAE095E3A510D06488F5C3356DE58C20C5383125A8B70F64CBD689F9CDEC93
+ 57BA59AC019828F415225B57BC706072B26C15ABF21195F6E812D1BB55761502
+ 878F7DB41EAEE10B72FD42BE5847344D108DB5FA5C74F8F92AB617C50FA6EA2F
+ 4DFB003C241E522E01FF393572F2024F506C99C4601195958FB17F6C2A7F0754
+ FA9DEEA8466C67ED10B6B49826C6F417C402D485CFB262847B307A9481209A62
+ 554927F8860664038D73E298BF0A865EF16075A64633F2E2D5F7604C4E4A1535
+ 6CFCFE727A89C10F122EFD87D157177065A8676D9E668ABFAA25537BD5319418
+ F6C9C826082D3277DDAEA8DA0C332AEE80E03DAB6B1F7CEA226830BB7EBFB709
+ 832560C9174EA571FF354742FE0AEBCEDFE381899B2BA05F61C0D8ABCDFE3B8D
+ 274A6A0D49520EF4EB02C62FC5160AEA8BD284445238EDF8A057BC091B85F418
+ 5E979392F00A218EDDE76F97E2839B17E7B4013F130682AAACBE2F9218A5A93A
+ 3CFC057F5AF071F75B82206F94FA17F54E6F71BFD578EE68801F1567E97C9E8C
+ 4B1A22889D06C7FA4668981F8D70729AC4001D4636228A46BED87EDC73D5AEED
+ DA1BEA33F6093848FD2A6AD0F6FAD9A6DDC132FAA99398D22819CF29D5C2AEF2
+ 9349373FF31A56942922C297F03C923E52FCCF4FC49B3AD1D9B05FC03F77D26B
+ C266952BEE8927F257BB29BE33E2DC8D37293F348EB776F1595C2C705AFBD1D5
+ 981A9F80BA14BA7FE2AE63F9629300797CCB7BBABD8ABACCAFEFB4FA0C3F6834
+ B0605AC8992CEB28DD64840FE35F8B82C3F28DCA7F59E7BC15D3CB752DB98E70
+ 5DFC14336FBD98825E25422E29CF9A454B39749D7966DABE2A62B10E651FE4AF
+ 1BD2D7967C93CB7551E099927CB0F327B98204F5CC896C8F54DFF84E54C316C4
+ E7E80C35DE22DB201CDA5CC2DCED211BD2C0301F44CA54DE07AD73CD4605835A
+ B026D2E53F6518551C180469A83D5F7131E367452306C1D71E357DBFA8BA9329
+ FA86682E0A5A85A91BA04972CA5138ABA88959B004BB9377484493051DD68056
+ 1452C5D202A15A433188F9DF70526AD0B5305C14812CF2481D22CFAF89E357C0
+ 97541CCE109C468AE99ACEC83FC85D4184D7333A4EC3ED05AB4A4A313F8DCD85
+ BAC1BB0E4DFA9CB36DCE88099A0FAEC665138EDD86436191BEBF4F67D4492865
+ CE2E446C3CD9634A474E7B53EE756C93B3EE1EAF95BB66DD465D52D853FD2434
+ 1760250C3070601BB35E4485ABCFCA9E9D257334889DD0909C9A86399A41D623
+ 20EF0320886BFC2F9535C231851CA6F445FFB4449DBA10A78E6C77AA45C5A880
+ 3F46952BC328B80D38BC1EBF615EF7C603C8734ABF624DF726B6B6FB281D7DE7
+ 5993A64E15B7BED306D4D293D5A7DC84148D14A918AE73856C7685C238C2ADB7
+ 6A4FCBC74DE4837DBD244DBBD722D09A253FBE3757AF79D4262582FDA40E4EC3
+ 4B1DEDA6797C15AC457349203A28871D17D447280DA7E811D24033D38BC3253C
+ 1B213EC5DD2FC811A5DABFF75F282486B192093BEF15FA2E510C15DBB9681C92
+ F8CD64F1B41901559285B089B87EAD0451FFEB200DD126A264597DB8550CF94B
+ FBBB78899EC837CB7C2E381BF444B4C1E2AA2CB19836726DB0E745C0A3029521
+ 602D5EA7BD26F33B2BEE4A255F0D301A372724214741FA66503A801CB88C6BB0
+ 5C6F22BFE4E8F6FD3F37927AF7C71F9EB5F42BCFE1C26AF0A40E16B9238E65A9
+ FC4812BEF803C8D42ED81D5F9E6F130267D4516DCB084412E72E2E4EA3A4FDAD
+ AB6067B4057A35B7E507ABCBE265581A2E60D930EAB40763A9131FE72CD14C15
+ 1AFDDE4C0154D812E7222A9F587CA1BFAF7E70F05493DB925A8ED8D97D07A30E
+ 83633F45923213D47DB0D546A818873AF1DD0FEBEEFC2F4BA27C2AA140954678
+ 7A3DE247426E23CB0B5C0C2A535D1378AC6C153F7934542F3F0803AAB9FE206F
+ 67EA2A77C782C72F0214A3EBA8B4776214BBF5537EFAF0C8864B6F7847BC07E2
+ 538774ACD5727D517C77F910035857B3E6869D14F81216E35C615CB010CE1692
+ 79C7F8626498BD854DE0E5E13D50B09C16ABBD96D3A817E53CD541454BD23797
+ 8AB95BDAD2D0CF607BED989668A3404976D194DE3DBE045292061EF685560868
+ 54B4F11CCB21489E7A2DD8C120E70A7C6EAC263B1B89401981D13BE1FE2D3AEA
+ 7572935DA23FF1FCE073689EDABCE1144C31B4521811C56D0B787551AA6D87CF
+ DC7B1C6936851BBB0CE2923E8CC97C30E3DB86F0588DB1CBD9751E3806669089
+ DB0F32070C9DD2310E54313113D3D3AA330A99B4893D8FF077662960CA4AEB8D
+ 6FB4CEDF2ED2926597D155A7BEC8EA3011E735D9A7B17EBADB27C09E34E5909C
+ CCDFE5B74556577A1F31073B9BE6876F397A6B51C415565F6CF4F8477876A909
+ 7AF23CE9283F99924A00670E377FC6CC2C5A2EABC51687C0A0E3E7833E270520
+ CAAFBE18BF863B4B950F6916D6CA8E6454EA76C04931C7BC883C0070AFA0DA33
+ B3DD70DE68114E8A1C6E164D227A3F8F317B73116043A0C145025CC8A322A637
+ 583C084D10C5F154EC29D15439DD8F436A2D4C56D56D147B851BF96A3F0535F4
+ C0B865CFF88DFE0DECFC6AC9A30F51E6768BD8475E76DDA2D8FD48C5102706CC
+ 98CB773088B05F0492F2F82FB213745B88D87151AB317085D0444492421F27C3
+ C01B3C1901BF86E719ECBAC5525F9B0FA862F3A10E549B9F07D9F3B43AC51BE2
+ 9E107E737D3188A91CF57D7C739583835073A7082E94336EA42BADB20918A370
+ 2E5E6F121C11BF956C3C23F1F1F9DFED5F187DAFB3528C6936BCE11AF4793087
+ 763B4F2F4A81592EC7074D2ED1BB0724D82629CA7E054BB2C1EBA8B49486A11A
+ F8C92EF89C735AD88242C3165CF44EC64ABCFE378C1EFA1F11E979C3D09DE332
+ 1DEC2A8C1CD30E12D4A960CD33C72ABA46BE1BA9AB05F1746A1F707A746F5AC9
+ 023910335FFE88A5F9B9768A9673845D30C201A6CA3C2E65FC911EFAE8E54BCE
+ F877A8236A2835CD2789A31EA9F7F422FD785A3503AD0EFF2B58105FD86CA536
+ 938DFE5549BB115FF1170E31EFBA8E6ADA58730AE2F3313913DEE77E01D97EA7
+ 71C5FEADD8DCED4F881DCC1A702BAD8D36A0A26C1EDBC4F00F0BB21BA91A4090
+ 8BA77A7CD5BBF1D25BC0416B5DE1456EA3188DE97FE0EC0797119E9C8E81FCB7
+ B9B137E9E4DB829A47A4FDEF03D93F5F45197F46B2E7C04ABFD55C960C2F3BB8
+ 7A9EBAF2BCCA67D6D78DC86FC44F55730490DB4C00EA25CE4D4A5AC4AA45B973
+ 10D3D1B7CF84E5C3877DB63EB307E3AC2FCB62FA9CCE135A5809C7D77B20983F
+ E2471999B318EA15D8A33389A86B84EE277BED89971F32588795B64767D20621
+ BEB1C7F003F9AB28D396C2CEA1B668C570A90CB21F5E69F440046D2E255E8DD8
+ D0A30521005616262259349A174E88B8CF8468B94876DE0CDC2C2AF592FBE1FE
+ E94912C87E4D2EC34A10700BBE528FC38675766FE8DDBEE5355D2163156B50FA
+ 2B74CBD15D3950D36521F6E971510A5A6DEA8D50D0F4B3A9124BA2CFBB81164C
+ 351E911EDE208416757BD186DED69B24C81095A7CB7BF185E5B69B842CE11CF7
+ D80E92CA194E46162A5EE583A61C212475A0F9B70F5A8FED079DFEEF281609E5
+ E7A953EF08DCF8117F9872E392395012EA536B8EFBA94DD04D94C1EF7714DF01
+ 482BC1D9022406CDFDD713F8A4596AE80CB3F211DC2942FD033401D236F8D433
+ B37A27FAF8362C22A69A558BCB6F6DEFC0F853D379ABC4706971E169EA482ADD
+ 2BB3F2E91972C87BEF275FD07735815E0589FA5C02F2A51B8EBD6DC6333738CD
+ 1D5C910A279E9AEDA7496AFC29E36F678C72DE40EA33F2750A36846A2B0D2A0C
+ 961D48289B981A2EAEA7CBF3B215724FFBFC720E949717ADA630CFCC704B1307
+ C652D4ACD8E662380F9C2E11088BFE6EC6ADAD402464BB35E629B05169A78927
+ 11704A570B24357C0E267C1700BF6DC76A2BBCC6F8181F710652DF2A85BEF960
+ 241256325284F09A457DCB98A6E8D273952966804BCC023A216EDECAE681A522
+ 7314668D3B38C0FCDC11EB7CD50781790509BD9C0706810CBA7C7F4F0D0AC364
+ B6732C64FA47A65FC5DA6DC109C18F4F52E02DEC24E434D9F6BD9A53711A4042
+ 6483BA0C7C2B8A85CB30D4F1C5F0761F61CD0A99890D7DAA6C97EF326BCDC88C
+ 0A9F6C6C2D57950CB482D4C4E7E3503FAAF70850EAF284D73A4D7CA5440D625D
+ C96AB5634CFCC923CFACA343C0A3A361756D55EEA1FA1E9458DDF965C6C0721E
+ 92C5A066FE13F9F87EA9B3AC013BE4D5E85D7948F182C1C09CCD3C7945035BC0
+ AB8BD07B2F0CCBEC6EC156340F12478E47F28766A3667960BACEC484E745663E
+ 774177E99D32F9518A31C0B88281D6270BC5DF83CC23D686C25C6796FBD4E617
+ DB97D6F572BF4E91E1738AE1F7A7B0FCCC4EA07E5587B99836B6BD04949A5112
+ 9AEBAF7D89259CFF3E03DA661B3B1F82BE911DF21E45A4C3002E15737170F1E4
+ 323B0B7A025F0987FCD7F6A7C9EFCED4D09DDB60F10FEEACFBB32B898BDC4413
+ 0329D6D1260176B9E2AD358DF23C526DBDFB27F6F2FC81E3B4FF796D3D1856B7
+ 25D2A48B2F82BC1EFAFC038823852E753ADC3614BDFC4B5240FD8F47C1DCFFE7
+ DF66DEF58D9E1633E57DEE8C7F8BBC9BE0884EFAE93894B8709D88161CC43132
+ 695A72320B57344199C502DDA81A446D1320DC4B62B7F6D7D7CD43E94005DD7C
+ 88F0FA0E339869EAB6F0859627F61F5BEDA3795059388222DB4FAB385D681BE2
+ 926000A8009A42A1252104E6FF7F1490259419F89A47233D86E083A5AB852AA1
+ D3555D05F4B6B52C28479B91CDB53323517B6B40458AC4A3F567DF142B654D14
+ CAD1A682439D29908E29EBC65889A472E9B15E6468E9ADE97CC6FE90945702A4
+ 262B8E6BD70D0AB853AE8E57E302049A02139C82454024093F9724685C8B8F94
+ 34E23495444F3B8D195B1BEE6025286CD66DD297FE7C5350BB3F4AC0A23D9B6B
+ CF0D4A411C7D018291150EB9AA5351030FB716D1E0FA5ABF14A1CE6D98AE9F03
+ BDC1497FDB995F1BD7482673B12BF732709B22B1EEB113A389AF650BA6CE57D9
+ 9CC63BB5A3E8D0A06480ECF7C9A87436C239219C246E42A7B5AEAF43DA8042F5
+ AE62704E332B12A5344D50F672099E4543F5CE715227B347D3EB34F01CEB1FC7
+ C2C1E151B787739775647A7F27A6DB802AB28F2A83472D8EEF7A74BE517C61E4
+ E6BFC3FC8E1022B63623FD987629C10A4B0E8A8563F2E6CDB34249F2002CCF4A
+ 2AAD7677D6298DA001C00CC59A45CA32D7373D3146737A5DD6D9C3FB40CD16D2
+ 37A5F759FC904936856CE916AFBFC3099D8D8CB48891002B222110E169D32E61
+ 53442A14A1AD51280B918029B9699AAFCC01B0821781A23CD5A5159703A2C2EF
+ B9BA7DC8FFDEBB091A0703426B8B37C37156BEED1B67526995BB659CC9757171
+ 502C27380D4FF5D3B84D9B50DA2E7DAC00A9B4F737E2F0259D3678DD3790DD91
+ 3A59CF899F89C68F4A4846DBE7D1F5BE4D544C4796B086E3D93D199D6ECDC003
+ ADED84D3F8973364BD288B8A662395450062893C1237F6E9CB438E1F9AD54C48
+ 4DFB2C86D923E7D33B6E42CEF8A55F0A67238927D8548E8F9D27758B8D1E72ED
+ 9AEA686369CDA9CBAA3FADD8BC374A462D955E641DC537E2D581D641F19062BE
+ 34D14F7D120ACE457D58D888874E84A44E1706AFD76AEA9C956BBCDCD959837B
+ 7292ACE14D63BA658C049255AAF1191A797FB9559C473521FE3E8F7A6E5C9ABF
+ B539268C27554413C9F1B7B822020C9949732F6918EDAC9ADEDB11E049C4B239
+ 3672F95D00D6BAEF22EE08737D32820D7CDF18EE825159577F65B5ED2377A68F
+ 2FD871D4407D212187F5E244239C35DBEE6894ADAEAB8F5CEA9FFE0F2F2AF3EA
+ 9F99F097AC38F210D9EA5C66700058C33E5087E2003E77E2D3E7BE37E9E7B0CD
+ 2A9295EFEDE8A0D1154196ABA5CAA8A5D65A1C0205FF05237F58C097B78A9E7D
+ AE71257606438617BBC922D7808CC73897F6605B39EFC269E674F6766C52F061
+ E8C14DDF8E6F1FBAB411F50C4E9E1CB90541403BED5A569238A62F1B38E4FEB1
+ B9D4C82FF075F64108679F06DE974C2B98154F8E71CBC4445AF6B9D43E715C41
+ A424477DC3BE7900018EBB602045D605E9EDBCF0457F45649D869489A7B7D8EF
+ D0B5B00E0EB522FD0C67453089839D8601625F03E646CDA3E9D7B03473597555
+ 5D6989548EFAB9D2AF83E2F8C26CDE5A9DD7FEDDBA3C1865444027ACCB3AF41E
+ 20A9ADD814E6C60315716B618E75364EC70CD99FAA93278AE712C5EFC1DFBE96
+ 579144AED2BABBC932665D840B48B9FD71B263A1D86EE2A08E6DCCDB791720C7
+ A83BB28A3629DB628F623EAD1E8910FA6B905E1B9639E2EE4812B5AE9C42AB1F
+ 9596508320EA819B33CFA017F8636707C24106DBC4F3F7E56D0F726B455CF905
+ 6117383B6994F9B08AB0811FF256390717726F0EF0B97D98C514234722E87B33
+ 0957ADB0E40AB53C301F363AB2006663E8511CB09B4791D5254A8B42C01D4653
+ CE459F2C8F44410A3975126E2F12A759CD253881D9D1CF91A1A62B056D84069E
+ FDA1A4B9D76B2019880B1C2C5AE9DACDED2FCA522B507425C033C39D34E914F6
+ DC4CBACBA8069FC4917AA791DC56A9CB90080222064CDB87CD26E89B79BBD375
+ 67FF6BFE2CD60F20A808C679C130B66FA17B31E6C3F41EC28BD1C4C2A96E944A
+ 05662279988A7F41E1AFAD375138CEF9288697CC55BF125F7AF57B6843C690E3
+ 5FC7F7B2802DE0260498F7D723923EA12A5DBDE2BD757FF33E2EA8BAA974E53C
+ 890A9E1C29E85484D7176A63C038ED69663F2EDE72E54F0C03FC546D8424812B
+ E40EF5DB62C7D50827671FBBCF27F0A9AADB8D15E246ACEFE25BB49430C9C37E
+ 415BE72ED38AE50B22B5C9634ED88ABFB6438DD6B13C74BD7CB9A6DDD234BA6A
+ D281AA1A5B567CACE5738227295BFE7C18C868DB982BDB0B4D033AD60FE20C6D
+ EB9353877904F0C8B4D951DEBFD96DC897C1084418AA332A063017016766260A
+ 4F48298C2BD39257D40E8F75FD3507EA809E4805939A59E9922CB15B2EF0ADBF
+ 5BA0FFA96C67DB2220B5A59AB03F3FE3A365116746798892CA7285F0839C7FF0
+ E03C450FC11C30932C007E12A6B6902B8834A9C067B6EC5531CB137371C533F3
+ 75B17E3CC307D346944F80A8DA6F3C6C2AEA295A013EE084E7B1C42D158B7EBB
+ 6B5E30B06C379EC7F66B8CB9A50DD34A8233E1CE18471A8CF7EEC646D3E378A4
+ 453D932CF50B7E576A005772596B25B11F78B4BB89973CD55C40E19E2DA99135
+ 1CC77D7B2449FC7339466DAAFF480C5269E55A16F5A71BC41F282F466276E884
+ 9332EB5B86E2D96F11AF1E5A5AAF521EA203062BDD877415DC357896D5294897
+ E1EED1CB0EF2F3E52E6AA7AC396662F4E7DD2AE83A740C961A322EE11846040C
+ 81AFB289A4D7F422222847A164DB13BAA768AB50FD177936FCFD117BFC5EE961
+ 4EA21017301254C78CE6D18B985C463DF43044C2388D21E4EC51BD489DC170D6
+ B712359A6735B19093A25AFA743FF0D1A88591BB2D5876DE9055C646F75A1510
+ 198B21767C67A655C967093731CE31424AC8C63C4E3654BCDCB90F2A2DB9828A
+ 91A97EE0C13C1E3FFEEFDA52C4F2C326552EB93F2047CA1345F1F139BD9A9649
+ 81FE4F0BC006CDE8F3EAEB3C5E2AA537F2F9A770ECF05001D22EB192C5E83AE4
+ E6E2757B1675438372CBD0BF4BA3680CFE9387E834AE7F6741089D89858DE31E
+ 57D0AF4113157CE1B79CE5FC3880959B3179D488345DBFA33ABCDD3213BC388F
+ 3FFF9CA54083A0A47F37D5CF1EF48F9AF64AA904011A0DC5580D9E5F9D02B2CA
+ 61F9A74805FF7EEA16A5ED0A1213752AFAA894F5E750115B448EC2530ED5DE57
+ FEC6F6AE773195F5E907CE9918E0AA6602CF974CADDE726C4B4EE2A05549F168
+ 76C0EB34D633F0C51F6D21D34BA56706775BE1023A8889CA73E28812E1A8D5A9
+ FEE81C9DC165557ECCA94DF7CE945B3CD24CB0497137D3297C635AE9305D2CA6
+ B705F070A52D127A1B1862B72E8C2815CBF23EC80CADF7239596A5F2012E33F7
+ C87B95531D574F525555F4FE8EE0662FBA341DABF23EB24F8026D327E039DA44
+ 89362D91C2D138E6D768B49A4F8B79F56641DF6F16562FD6416459DE3BDAF053
+ 714745C7E9CA273D57BDC647E8D36FD750D1871CE0DAEA9454485E3AA1F981E8
+ 0791A6FEB2AA25AEEF544B7B351FDD2CF8CD64571A79BC199A288574D7132B8E
+ F24DF197828B625081CE072AF9001AE81DDDF994F369DD52E7250E8F42EA55C5
+ CD0AFD5572BE4FECCE06AFA0A48D70A929838530CAEB5F6179B37B9FF84958AC
+ D0E615668A0832A26CF95C53FAD456BCC0AB2C330024D8B85D249D2CE6FF67AE
+ 39DB4B95C1AE20BB730C9F268892B0497C8D353EEBBCDA5B695E449B7A5D164A
+ 9BE1319BD377E4097BDDF21830C18489CADE6BABF640CDE853082CBF0A3BF931
+ 143422991DFA2D7F670B83BF78730712FFDFD4CA4112CC6934284652D8C1DC0E
+ 51022CD9F1BE46CE700D458E5B1BB0917D871EB8A27256897E042C91B6FC470B
+ D41D75F955F6456D55FFF7962D601EAF6E066A7781381208F61E31853317F7EF
+ B638C3BBFABCE1C8C68944C36DB2DD375B038E0B5F10091FAA0F185884C238A7
+ F983EB48CCE8CE08DE7BA22C8D670EECB5402F3B335642B92232BCA7437E45F8
+ CFF3082A5D0DAFAF3D06A3B05DF217CC131EFB7EFCAD55185E1A26C2FE2A30CB
+ BD1B783BFA2FD5D3C003B30DF8F678BF31600E19DE6A824EDB7B0437603F23E7
+ B68003A221E125CEB715E67E6FD896E1B835D43426E69B3978AF9FE9B0B32966
+ 8C27EF77BCDC956AC40F9B3832306CE237E440D796968821AE2DC60B271F8ED2
+ 5F09BDB5DF2BFCA8654EC28FFAEF28725F2933A068D2ACBC1B217FE6D46D700C
+ 208FD63C717282D152EF5BCE49F2B1A99D436A84B502AD48B931CC9D13F23483
+ 0429A536EB8E2145B96736D9A102D65A5F3E73D048B2CE6DE41D566116785D90
+ A4FBCD0D377F6DEC7EDB4047D850FA8AE349C1342E39FB3E9E21EBB3DB3906FC
+ 0FA3411F6175CA8B6DBC99123F2F94002E1D20B98FBA8ADB9C8FAFF99FC67093
+ 867FE1F1D699EAA27A3E90E6B8EBB4A5948E6EF426CCA1E9F9CE276E73842161
+ 14E6268EC487A6CA0580BF4550C7C3DDC81700DBB4C58A8303CC76E5DBE3EDB8
+ 7F80C22C857D60FB0A723374EB7DFEA1F4A987F14757EC1870719701219D9F92
+ F01AAF8E0F5AB1E245361D235AC7122C58F66BF57D401CE9A17BB98A994178EF
+ A25126EC3DB7CFC26AC8942877FE586B566CCC61C07EBD44CECE694D36E7287F
+ A9B5B022DFFB7C1B56388FD43D2AE2D0A6630D28A4049761BCFE117FF7B55EC6
+ 47606DB758AF1FA50AA3FD5C7D1C766BD88CBDFCEF0D497D4C0DC0F6F2860547
+ 35A2D4F79C65D5B8E43B9CA952622682ABD20BFB2BDD04D89004CB1BBFAE89C9
+ D373477ED7CC7C6484137B77EC745A34364F88D9A0C53C1DDA908B50DBE2AD6C
+ E1CD8EC1A8BE3AA9FF0B2DD245D8FC50868989D93B05FF30D8825953EF79548A
+ 89578D7BC51D3F8623987885AD56C4076F35D10DC10EB7369769C5E9D8EFC993
+ 644D5863BE900DBA3886682226407E4BD2B3CBB3F0BE8A827555C7CCBE07807E
+ 81A5235F10321CC7AF816668973603E2BADC29ED0718245099C3BB0F8027D241
+ 4FEE7A27DD8BBD52FF76302AB688E6C452EDA6D6AE3921B430EE62159C960B4F
+ 7E5078010F6419F24DBEFBA09D9286594EA69D6B83A83D9C7B706C4019CDCE1A
+ E6702B4096EB885CBFC0F1D83A1643D9881AB062734810A35F780E156E7538A2
+ D8672E00F98CD218D7AD59382435851597C6FB5C681E99AA3B54D984E1E6355F
+ E7EA8B8F9D0AB617733FBEB7F4C77922A131D8FD4513BEA5B52C07EFE1D0AC44
+ 85B1ECE90F3957B1583FA02CE642CFABE419A79D5D7B40B46D68AAF77B731BFF
+ AE71F66F4A8B5180001605D4ADCA0104BC8DDDA2E75496B2FAB5CD5E26CB1194
+ FD71A73EC803DB5726D7D8CD98F17F059E0FE003FE9210078956A3F829241CDB
+ 2C66159AB563AE1D6AECF15F1AD3588510ABD7B5095C5EDEE2758DF8A074EFF1
+ 4CDC2A369F44F43773849691B4BDD94B87C6C2300276D2652BDABCD8354A9C32
+ 30CE2FDD010645F586C41D4AEB1168940AC38E485C415396F6E51174FE49BC04
+ E0F4A41DCBBE1FE050160EAA865D0A1C2C7BD9EDEFEEF6B2FCEEF92FA2E794E3
+ 5D48B0A1E8FDD58060CA6A0B49D1D99721BDA689DDA975D523EE96502E88C529
+ 1217AF7920A1F79F19E0327FBB203041B9DC04DD6324C285B87A8C76AF32FE30
+ 9B59EC61042511EBB5D21699495D1C675330678576B5BD6D5A611CAF8825E628
+ E0E77BFA9563AE8EC8388CE431D2257C88E1BD6C0A919E8427BAC54F7B9FBE88
+ 87C60A5683A64DC8B001A52FAAD02F2F557A33F9BA4C774086DFF5E0CBF45599
+ D23642AC8513F89905D96FCC32784B0F2C61E0FC4F3B32AA7AE08D65404845B8
+ 6C8FB766F111F4200F1DB20EC50C2657E96CD1E25B43AE45A4B4BF413E2D9FB8
+ D78AF6F6BA1ED3438F167E197C40AA586B7C3BD0CC3AFBAED567A8464A902E04
+ C571780783F0AFA3CBA16235A581381AFD266145DE84F23A4A3962A7FDB54A57
+ 457EA9488217E54862CEDE4F291A0F7E79CCF8D2C3D0CD8FDB280CCA1C425939
+ C837715B22DBA1E1D0BEBFC252C45B8F653794C13913722F486C26E75CADCE77
+ AF57571C04F3D0FE0A0E2A0BA88D46AA758B0EFE8B2449D97F27B37D28509503
+ B6078BD53C505E6922AA22144857B5BA47AB9A13A6DBFBB03D03FE7BD9B59371
+ CC59708A7C82FD6B0483DD845D53FC8CBDA75AD21259C7DD96C7E823325FD8EE
+ 172C6A034717A3353F7361C213C3E7C224152CC010BBE00B75CCA4EFFC122434
+ 4B267CA4FC0260FF88AF16D4473E6BD03A0089D1BDC389BB2D0A2BE9A6A79713
+ C2642E1D787F62DA9102EF9EE3C040FF746C933240AEDFCAB24CC03594491D0E
+ A7E451CD51E3A681CF7CD0F09BA2F1D7EB6CF3838D3373A7D88E04AB2E6CF446
+ 851617CFDB8BACC4AB63DC2CBB9AEBA4F75A217BBF8200A24C47BA6B9EA62E67
+ CB66CB16C449DB4EC5283C8C2DF3CD1F6974E95FC177B9A09452B3D66F285756
+ DD0ADAA460F3E89349C36FF759AB0BFFCD811F2C03E98DCA3E73891A4BB9403C
+ CFC58F6B06E082DF7B14A9B981E0715D0C51E847614B144761FFC8121C7BC226
+ ABC2F1F140D3C24B5BDB56B489E5D2C3E4B9F8FD1A8F8885D950CEDDB16C9D26
+ C0082A49CD719AF0690A0B597F5CEFF356D86D8D948C943C9AC7BA0717969B8C
+ 9E53D837884195C5455639CE51EB71184294BAAAD10D60600EF53E600ED09D84
+ 155629C4F57BED39943CB09420DDB6D6A689D147ADB3E2F839E0D35866875E31
+ 03B555A16D3EB508A6AD112496AD5A075561615C498DABC6CBE8E29C2E289D18
+ 0FD1E04BC0AAAAF54D7316C59BF8A7D0FE929A9ADE643A99C29CB8B5EEF9D0EC
+ A0EC5886D7C63B2BF802E6838F7C5CDE3BB885D1B4866B0E854B68F6B071C15E
+ 4CED37F535D56F232B68D07D9352372987A7D66EFBA92FC6C42CB37F857041D7
+ 6425DCB774523D16430B5672B535AF436599F760DBAE1CF7C33D9637DD8DF283
+ 8B355BA6C80674191DF895FA92B54774B42BA45C7B0FB08215AF42943140136A
+ D750719821316AC907D72AF38C4206A40305A53D17DAF53198CBADA262C77AC4
+ 75EA4A4DD77037D91E76764A7BA4573A610996ED3A721ACECE828EE8D0704356
+ 0290382EE000586053560E747C65B2CFF9D16A4C7BCD1DD4016B95457CD545BC
+ 8A1B3AB239202C106BA9CB13C5606D8FE667BBD97D71D424C8B108C09CA9EBF0
+ FE003E1345803D249E101F4F24C8B9296920EB1057ED5081D55CDD08B289289A
+ 21252531E494137765312365ED5FCDC994DDCE88010C31FF63A5225344E67063
+ 09166712A9AAE98BD976D6EC42BFF36BF20B6293707B48A26D60E136F0F8B0E2
+ 4B264A41D54447246554F596C04E552DE0271D0DC22A788AFE6E78623D94CD38
+ 3728C67DEF29BC237AED6CFD87D4453E06BE19E12B69AB66CB174D5EF85441C6
+ CD3133C5D8030E628EEFEE11A067E8141213E6398197B47FDAAB002328911626
+ 8D40108D56316D8A9554D8487C5C3531F8BB03135341ACA5B66FAC08DC4FD018
+ B3DD562A6D32710CA57141F28B461D810179FE2313488E17559F486EC80EFA6A
+ 955C19BD0D7F58A5D2D319D3249EE8488931EA56F2A92A727F7690F6CE5EC903
+ B296DDA6AC3757523418A2D96DA8810B4AA9DC746434DC4540927849BEBE96A1
+ C86F0492E55257058C08B13F97DE7B9EB8C3B9355ADC5D4401D1E00876D43341
+ 873F064732F136F18561EA03DB2BD71FA728D2BC7D3E070AFF24F200BCECE913
+ 0D360614A3114089CD297C85B6AAECFC29FDBDEFE4C9C67C2FC390F148E50EF3
+ E38719E2F6471758B3158402F90A239F17F26983201AAB0E0700C9C2E32F4444
+ 5DE750154DAA72EE4AA53185026BDD2A23DBB630C87DA4FC51F1C6016399C09A
+ 284282745FF0049EBD208873EEA93EBB638F8F646D10D99B759604D617F5A1CE
+ 9D8D9C8D5E1DF497157497D147C509E1B584986E93F6D85864A79D417944E1F0
+ 2A2FEFFFCC51DDD4470BEF1CE553A7E406C424187240D221704A2F45017EA94B
+ B9AB319074FA0078A046E2F10F83D9FAD2F729DC762570017FF61C4E6EE5319A
+ 2BEBF3BD9F6392DA468F5F5472FB09EE7B4B3FAC19EA648ED1D5EAB5598193A2
+ 4B0AA0E69F2015FA20CCEAFBB75047D36527DD7A58643D6FFDB0F7E98B95313C
+ 35A06C2D98535055D04B55B1D616701C5EC6E71D497D5224084CDB92AE80C7C5
+ 309C9C23CB55954B26BA124B6D8A8E95AB0FA759E3C1CF0430A06D5BB7A8F5FF
+ 62CDF1530B09E0F6B6012AD85ACB62F3AF7AE208FAD8857339D86944716B87D2
+ 97F76489B0BF3922030B51587AEC7F452B69E8C16FFEF7405BF365F421044EFF
+ F0B2BE653172DE00E2B51736839D1707CD47A5E835ED694917F88389CAEBA855
+ D35C672186FE2F349C1AF67ADB85EB9E1EDB563C33017C40DC18AAE3F15D8CF4
+ 25116B0F888443A38D9AB76DCA31FAC4660AE9CC0879B1D7C565708DA4D3DE43
+ 1B32A6F80542202D3F4A00B1C525B3153C3DFEA43E37BAA2E123CD74ED5F70C5
+ F2709D715E003405A1255AED63CCAE605F93506D9AF5C192C3E56832E9F30D67
+ A10DADEEFCAE0F9A40DC1BFCB35191B8EA36BB1479EFED817FF10A536150C721
+ 41912891CEFCBA381C423CC8C484EE819E0E87584F7D2A065AE0FDC204AB0510
+ 2FC186E4FEFC78CFA2728ABEA420547E0B382C663E61422A74CA7E883E3609E5
+ F213B85AD58EE17EC9508A2B211F710CDD6A7A30A35022055B855F6378EAB2BE
+ 240B4741693D19431233BF10C077EB3622310CCCAC9DC4C3C1A19DB8A6A5F11A
+ C67374F42EF95ACFDB76DEAFF26DF395ACEFA96E17C1F1CFD8C5F4FA5ED30278
+ 7A275B5BA38DCF85DE620C8A00DD1EBA329B05ACC3BF51AAEBBE3D997F7E099F
+ F5F1582BE3AF8371244493E55C545D600BA2BE3E3776BE1300C94F68B673B762
+ D6224EA03385475C2E1CFBF96BEE9A959ECE84CEBF2BE09C43FDB040D30C5C38
+ 936A0B4F247D7ACFBBEB24A44CFE6A32D5E19B105C8A17B8ECF3EB20E25B4BD8
+ A44AB3CA654D52188DA0DB64B14CDF7F715A1277F697A90089DD57A0DF687202
+ 80A5AA94644102AF56694C2747270A37954B6450B683BC059A0BEAFD1690C098
+ 32B58EE07E0A1B6588E7E5A98CF34278AF39019FCD9E7025B2DB213BDE9CE3E8
+ 214AA55A1AE848B320E76A1146DACDFDFEF57A2E4943C0BAAADDCE294951878E
+ 51CCAEC70FED225817BAA3D5AD8C219B13812661E5F8D0B1B3FE8D0DB3104EFC
+ 199B93F6D931E85E5AEAC9E459831170E809DBD9B308A4AC4C44DA74D425538C
+ 21A2AB0738306A1438D3CF44FFDFF5D057E6D0887C8488934F1AA9840E7EBC9D
+ 5A949629949A82AEDF6D87B45B4044093CC24B64D0D8E8C74FF1336FF2E4E238
+ 054EA9CB2ED4436FC9567458D0301312D3CE7314D641B6224057E617E902C6F1
+ CA3152BF5C4ADDFBC021198299583E9F2EF014BD6109413999EE5F371B5A744C
+ 2B8B7C4633B2A902F939090AAF77DF909B4F021D80F91A7CD8DF18AECF6BD94D
+ 23E69570DF5B5619532012326F6347F889E0E22F9E1165E9F4B2EFCEDA0BE3D9
+ AB90C57BAF1EA87E5E25B997C77B548140148B4FCB268AE927A9C448359A7AD3
+ 645E433242ABA7D34F5F948BF598417EA8A1D91F2AC9B27E79BBBA9212E279A0
+ D794797E87F600DAFFED607B86959A759F2832D0225D8058C231C6BEA2981027
+ B1524CF43D947BB469BDA67764403080F33DA089B62362C7CCA4A6F95B7533B7
+ DC553D1726A82B74F3A4DE1534202D2A7712126475C22BE8B876B30F7C968EEA
+ 3A26562C49E4B8F20A48EF0C5A478A7E5ABF4E4C982FD1BD8A9DCA5C12F2D88F
+ 5B53DAD8FC18BB75989960069BFA56C8CB83AC916446E702F82B62B43B3D57B2
+ DD0F9A47A70211B7EB07D2AB6A297CB06BD2F72C0A264281D6BF99E636AB3F49
+ E5CDC67F2962BBCB0CB70B9FF66A9D631BF42EE4A3217264F7815C141DB66F7F
+ A633AD7150B76F1E364A6D33C178B6646497448488E6ABD3ACA55C191F76DB9A
+ 268B5787BD6555BBA3DF109B52DC5FFFDA7B54F3AED7ECB29D22493C31D72139
+ 4E49D4150C7E6D7EADEC2678AA546942041C17571F1E4AE81CFEE3A593790870
+ 389DC39FCDE10917E863C46A1E40ACDBE212A3780B3BCD3495099B3026D7C42D
+ BB9C9A4E1A44B0D8C5013FA259F081A567641E07FBF3B0DC278EC5FF271AEC28
+ 2745B17A60FAA4812BBA24671E50B7144B0D686524F5959F36F29C9E475956C0
+ 0237172B0BEAE2CDCF08C153A03A99F8AD4753185F836111ECB6C500FD6AB4FB
+ EBE0599BBEFEB59D4F529CF206D5E342292348B2B8F0CD6B59F90D940E4DEA2D
+ 4CC61CE08D728653B7D56197427B09B90F06D479EFA3937EE3439388AE5C7726
+ EC72D2A51AAA09DB49C49C439C06CBD1BE16BC633A60A5D2162EBFD984A8B364
+ ED5F145966CB8DC129A980116F5379D5D4B039782E377ED397D59A20F06E9333
+ F7AEE48EB502C31C89D9D642D63CF1895BA62EE171546FAE203FDE5B53B311CA
+ 4641768A821D653C683E3097988DF7A354179FC5A47708F7EC20149461BED8A3
+ 55084D743A115C1438A212BF46535CF9CEE6F437FE0A637EF5B27401E6967C11
+ AEBEE3B044CE9D02805E3301D2FB3A0F5F00AEF082F51702AE4689BF220FBCE5
+ 4508787A74F576DDC6DC4514F446938DFD331DE5E4E519B7D6871EA5FA1AE260
+ DA402F6DB6919A6B0DA02764E5EEA390DB9806311C0597D9D3F25E2A7977EB61
+ F8AED9403571934E56614F3AED73265D1794AA3580D561CB19F154546F0AD1E3
+ C2565DDACB0149B771541551C71AD7B6C181F8101DC4376434628A2DAE345331
+ 39DE8F8DD67E6EA0077D285B91AFBACA260D1AEE256DCB6D4EC744FBB967F57D
+ 524E11C5531AF1FB78469DB344E0B5EDD6E55F030ABACD77C50B593C45001635
+ 9B8E97BCC0A856F145D71FC868C9811148E9B44B7B9DA90D88482E6823FF289E
+ 02DD0354CC2BA97A60D1DE7D56DEC4B0FF456950F516F4BDB2908485E27807EA
+ A51A3CF11BCC81D3A9575761C65EFBF054A38591DD62FAE8108C04854154E75F
+ CDF594C9B14AD2E0A97D6DB1940D6D882AAB867091FFF864138D5EE6E7F898EF
+ 64FB106F0035D9816536E699051F6347EF854BA1F10F5DEF45478A3050DD12B9
+ 0C5BFA626320DC9DAB7B56BE3636A3CAF827B793724460899757755918E2BF91
+ B1A3DDFB8E3F69A8D2FCC1D9BE3E7E11BEDB4C318D34CC6813A4D0BCA7484992
+ 723409E89B85FEB06C98F5749F850CFA269EBCE996DE990EC4523436334C89DF
+ 8BD8F5ED431B54F887F1CE678DF651AA5AFB5CBAAC2A7C888D368115319F3606
+ AC1CAF7C1A76196A56E83F4CDB34C04BEC725D5AB8753B141652CCED1710AB42
+ C25644AAEFB8F079E8D45F7B5BB9B435A80C2137EBCD27DCC53E8B59E2B258CD
+ DDEF12CF54532540D3A6E4953BC7C24321542B3248B8DEBB3F7922FC5208979F
+ 037DE5898C407E32EFC58AC958DD5635C199998D4B0742013A536EA6CF28EB73
+ 61CD12FFB4EEE4204174118BC2554DD88197A52B290970D728D4C65DD9621E58
+ 2FAB5D31627F08B6BFC18D244AFFB69B72E7AE47C9DAF05988A70E711269FD62
+ A3E883D2C3ABDAB020016FCF66522CEDB123E27620CC4E44B39B5E557C00CD15
+ 664B23F27B2CFE4605C8F89970E69876ADA8219CB67153B5A17342DF7FB90F03
+ CE20AFAF03C4E7CD775D3F8D9E9C69EB709592DEC37E92B711669EF9FABCD362
+ C3FC574D666A8E2AC8AA17B13ABEE49EE59A5170D2FB75E471D88320723B2DDC
+ 576E54A24E330E42650B8BDDD9B3838BE8080C855000ADFF6B20F27EDAEDB57A
+ FDD41C5B3C27A557C1078182ABFA4C93AFFED7843EB63711B126CBE589918AB1
+ 57E2D1395B1695F2078B03CE7529ED943F45FE33DF449DE1B65F6197A3AC95D1
+ 50B6EEDDC9F7680D64C14C2AED99628BEAB5137CBADE741FDEC04CD4EE7D24C2
+ 8237BE6B631A7F5091E17B25774BBDD344322D77A9A9278290C6203352DB7C16
+ 87DB0CB44F4C979C2AE37B3316D94152CF21970C770F946317740DCD964AE8F8
+ 645FB20C24A194A04F1DD79E31F9618C99EA7D02F19B18673A8C6656E1F3CA5B
+ 863B56D9D9849A6CDA0E5E839ED20225649EC6394D1B390CA374E32DE1E206F9
+ ACC0EEED44D8C8565A47BBB45B5AA1D268561AC83102A55301580FF33C7B6AED
+ 1B2476459E1050E77C7506B0CB70931188FD3A592D364AC8FB723F8910D20FD9
+ 8CB0512084E4F57A3014E275C93A177BE32CEB05141EB55C82AFD9BC59D7E0C1
+ BB9B0CE8CDEA149D0CC7DB9623D9C6044CB638C2A1B9D9B4D1D95C2B6810C50A
+ 09636DFEAD86E174AD2ABB50759F19EE1BB60EE1E743A31FF6A089FB0D5BAF8F
+ ACFC210065E9868685DD2D157A6A3301A090CEB6947986525CD014D245DA7E33
+ 881156B5A5F29254FB2E54727CF5FE024AA8828C7C7362FF7C62A87664D9B167
+ D334FB37D304446A136FB3FBDFE16301B0A3C5ECBD402712EF3D21343ABF89E3
+ EBC8CCD40296A99BBE47B6DDC552CA136F253CDA15369AA62F42A168FE6FFE69
+ 4E4C5A936E112AEB1072246E6341E5D950FA76F89B5D6505FEBB983476CCBBCA
+ 31C06CB803459628777BE8964EF0CA1F1D4F3B397A26640450D296A3A8E25844
+ A207DFAA2CD381F7763B70E6C63C2837EF6678278205B7AB473B7758CA2648ED
+ A92E77292A5D1FD1FEB89D8FC7D2814C7FF9441AD489F2F72D2ED53FC73DF8F2
+ 697B2C0F1A4529F8045482A7487960AFBA6FBF1F09A424A97F1EFDA9A4CDD7FE
+ B8AF1056C93DF5CD6BF669C443EBF50F286739E1B57A8828262AC7638B90D404
+ A2BB1EA11CCF090789D6654A52EF9F8AC850AFAD9F52C27B6E7CCA6ED24005D3
+ A2F618FF5C9D8D0A6820AB5EEBABFD5BCE0F5539087970EAC64117C860D4890D
+ AB7C7673F77A0170635C889C928E27BB75FCAF602E5CF5C3754DAA86633876CD
+ 52C6E7566F21D1EBAC870FF14311BB4E2B74E595D52DDE3AAE9E7B58F8C7EA82
+ CF88E1ABE8B8B31F8B5ED5001C6FCC6AB54C9C352643D1E32B61CCAF59BDEFE7
+ A0340454BEEAF3BA4DBCB350D26BF9F6CF0BE109CC95FAA3AF291D52EC2E8DB9
+ C98458FB7C58E767BF2276B9790B8DB232DE2C3D139AD6F44842952D4F0D1CEB
+ 3761A46AA126A48CE53BDDC8AF9C2AA7151FBBE5C37EEC7756FE18A8A45CD29C
+ 0E5D191174E9DE37B900D3C72F490B08EBA9663E68AFC62E8AD55BE0330563C3
+ 25431F9A036E64EB611091B10E6A7600D8849FC7CDB0135B79C9B9650EF87EDC
+ 2A0458DEB8FBCCCB0F5898C6F187847F74C58F354B3EFC16AB9D17EBF9961B51
+ B19970687C6390D530F37592ABA60FCCA00C14A24A54C0402296DAF11ACFB597
+ 55EADF450B444EF233F2E80A612091E3DC81620053F377121CC8D16DA84E3DAA
+ E7B926D6202EA64A59D0E129F349E683AEF0A7D51D59C309D25C429230B64C3D
+ 6A9347989AEEB6937A8161C4C67CC26BB136FBD0BE18B99CABC1E270F25B7B3D
+ 256C99B48D059A112CD114133AA85E61561F873C6FB8E0B09F19746D53551C47
+ D77D89AECDE9B1D814235AFB537E77A0B1D25865C068AD792C8F328020698757
+ BB294CA1FD42734AB2486EBEC5162C2710021F4223D4A3F76F98CE7F6E7E48D3
+ 969B5AD21D052385085C5641C287A77213561191479A35E8CD629CB3DAFDDCB4
+ 67DB0930A2B956C90971706DDDDCE4B1371BB0D22DD3AAC237621EC82D40F342
+ 04DC1FC16B07FBCED716B4129BF6FE2CA9C41D0F926FDDACCE5A49F5FCAB38D9
+ E9AF637C2F2D21313A450617300CE255684D27F45D1F85318A5962DFDC7A00BF
+ 299B95E1A85E7DD1932C626D29E0CDA025ED8FEF38E5CC69E6F300A623FC085E
+ 92F121EB273CEBB9D8DA65339F1A4A88D7011A31E52369884C5F55D56D2C6E24
+ D99B329A06A09507326E0D47C5A24D69388EABB40E2AFE0567C99C321775C7A1
+ 4E622A18A6E355EA9770EF6D13706B4DCAEBA182B7BDB1B1E99F2ACFE0DC47B6
+ 765C85F0E15599AFA69008BCDDDE22470C901EA09EED374E8AD79E3A98818333
+ 6B92ABA34192965CB2EC92F91D66B40933851B5AA57D28048009917DC292F95F
+ 3F68FC8BA05572652EFE8D60F1859F90EC716CB1886B5E21D7457E9CE57906F7
+ 7D648F070D3FF615C77C31BDD9A34B1FD7DA9770B05276511D6BE46F0F6AC080
+ 78FF8AC9CF75B5A22F6E7E44BF087FA8477E4D73AE5B5B2A33AF31AA8B10C624
+ 41F201754678CDABBC3B13DF00AB039B1DC26D5422D982F44BDC3A316BC0BDCD
+ 6FB356F4991D3433A830622F70B7B31DB0C1941F3F9BD06FE9850E2EB7E80DD4
+ 6B8ADA70E5A54E0608CE8B680D1BD1FC664951E486B5BC5135BA211619795A6D
+ 67EBBF00BF8949457AFEF63CBBC7956F6001731D43C25D4E532713B3E775954D
+ AAA3D02DED26B02519529792243DE59859B25E6FE4651478626F77EDFCC08846
+ 65AC5DBF140F32D3B814C44F926A5BA3B919E1DFD240AF6D694F136A795D20C7
+ 34A725B497F3A7549F9A3BF3CD39777F23D779D46A9769FD637C6A4BF3CAA4CE
+ 78F7378E3D9EF1545F4346858A3DDB5189E32CBA278F86678C1F4EE22DFE56A2
+ 240157E8C3A080B92EE6458B406366C967EF877530DD9FB0E12F7A9C0C50C7BE
+ D44107AA1D5EF1654714CEAABFD0C3C5FD7C83AAF0F83D7114C6AECCAA176D4A
+ 000E3DA7D8FB3CA39BEDA918CF942924AAD15F160B08ECC564C14CF304294591
+ 3585709F4634C9899E3D45CF469CDAD6AADF505D302F97B88FF022179339030D
+ 00AB98190CA9AC09171F77670B7CEF7B71590318EF14718F8FFBF25352A66BAF
+ A2F5834118E888ECDF192D5F0D0531C55897B435643FEC11E3946CC0E1C4D67F
+ A030DFF2B639699E37BA20DA179980B3AD58F1FAE92F42A0D88536CEEA55E63F
+ 6DA128D50636890EC3E543F5B8EA27DB0924129A792E12E3AC34FBE687603D64
+ BFAE518065694E478787A6BB2ED19962399727862E9C15262510ADC499B16BCD
+ 5FAAAEA4C207468A651B72774C83D5315464DDD24E312AA91C746B95DC012D3D
+ A4117130BAAFFEBB2035E2D4D89B4E6E0217FC140DD9973C906904D82FD6995C
+ E2E203205723BCEA3420CBCC4D3A825462365566F4C2D30ED17A13791E1BABBB
+ AA8415A75FAAC00204FA2562ADAEABC3431BED083BFAD41D751E50CC86D3B0E6
+ 8F359F40BE4C99A298FEE4CC2C861E33B6F58D438D72D17D98674840C8309752
+ B6B35DA1B9715B6E3D967A9B52FB881389BBD4CA3641DC1B6D84D093D41CF5B0
+ 226E53D7AFFA27D9355C964A9C679B7E387A3C5999B1F146B2238C5F77B92D3F
+ 6DCB4A7C4AEC7F30F521C33AADD370BB8F49F23CCD2B35D5DA181CF1BC0C353B
+ FFF250424B90BB3EA4B66E6B60C6DE4F646575F4BA3C76231DD4505488A9F54A
+ C2455E3DEFC629CE2E4143A9F219E8EDB341469F6B436519E3AE9B1F0486C172
+ E6BA02A9C422316AF07A0BE8310AA6F84D0B6E5DD75C1666C5C3897EBFD6E528
+ BA5FB1D38B886EF694AAB231938749FEAC6A5006E6CAF450BBC3C0DDA8A6E917
+ 27DE03E89A22A3FB166909C69176634AC30C90951D98AE02DBE54ED3E37EE271
+ D3D73907F0E6A7C33D45C7B311684AF3436A1D2857AEACF70D2DCFBD1D9BD55C
+ A0647EE82D60147683F41071503D852155D45AD85899B063EBF6E97A15DC826A
+ B2745B87F68900D79ACB9EBF74D9C556079C6C4A1E7F175D411A64AB1584A40D
+ B8F49B98BC58EE95CD7E3B7E2A0EA16A1DC61CCAD706E5E7E58C007D1C9281E7
+ 09F70E7DDA6F141E9DCDE51146F732B1A2C9A5B4BD1E4429A21E74F47FB4851E
+ 0D0E6D10D4823EB915E507DD7CC9E0A7CD3B9A6FEE38F3CD0A4AA85E73AFBEFF
+ 45C84F188C7FD83CEDCC8EB6BDC47A0C754D9EB386B01F5EFDBA137F25D7EE5C
+ 15E4E8A3111BEBA6BCE3B7633CE12F4E3AAA910AAD7CB068B2598069888AE586
+ 8D0183C089053E654B0A20A778C5AD6D428A67E9742DE5FBA30B2A1EA6D974CB
+ B2A5E7BFD981BE5FB045013D326299D428719D59E289A143FDC737987DFB7324
+ A8261A0FF5224CAA525D9C24746A0F000CFA0847394C6A51EA3622CAF7DDED55
+ B726D54B09C6127D0E4BA193E063882CABD22E752D3FA4BD6DF7B448A4F6B90C
+ 2A0142E2FFE229547863ACBD9247809CE4122D48923F7C41A8E4F4528676FCB1
+ 5D35657C825190B3CBC9773510F88F6E55F0A1A14AD46C8FF2921C1B87306933
+ 9E6BC800D116BF568718B2F3B4F0057B9EE15E5FCA85126B720F76A2C6230C6A
+ 411ECCE95E05D38D963D35E350D82090B628CC25BC5C2BC723461033A375A128
+ ED02A20894359BC73B3D111D121DB869FE415B6408D11E7649BFA587871B66DD
+ 6342ADEEF677E5A4B4C5248BD991DD881FBD20FFC442B00752BC6AC3191E4F35
+ FFA0B09A32080B1161DB3E8962548A957374E26581052051A7D6E09A28814435
+ 434E0E48A5D93F1CF5641860C97DACCF30A34F44740B6507A28D812E64EF4088
+ AF34DB5F95947C0BC5C6210B2839479E2F1B921CF963682344A0405731730EC1
+ 0B44DDD919292D2221530278B536893FD16051196A45277175A003BD120A70B5
+ C5BE289575C072264832809D271E55F3754784E51AACC2F6364E3367FCDF9187
+ 7A68A2CDEE368231B72C289C040462D69CDA4E26FC32D24630D08B0AD0BDE2B6
+ C02D3C0BFF00471B681A5CFB301394A72BEECF5647BDB0C8006C0FF1DAF40FB0
+ 55DEBA8C6CBCD7A0DD27BA39180E6DD12271679DC571E5E8CCC33C363CD0DFB8
+ 02521B34139C3514FE4122E3C26248DF880DA01EF8BD421A5E30ECE022E120DB
+ D74E16FA80FA2F1997EB804F17D543B38A314F85FFC4F9566CCA1D2332F4DC49
+ 348D44B82EF497E7F27DEB3B5FC9F66B6614BA3F970138383362D0E59983093B
+ 072805078D6A3C167C79DB82834916C24CA46CC47A5E5D480AA9A44C445E9716
+ 1ECFC6DAE237BF66A3A7217721508905CD33650E08B1C7C511A28ADFF14D38EF
+ 1311EE90312DC74D55D221BE1CCEDB298A43309AD3DD9007BB08A6EB69B13BC2
+ 2611DF4B054E83D3E0AA2AA8BE73F1728D8E0E3AFD6D0411E81DA3BB148C5EAB
+ 16F0733CA1FBA8FBA84C8A3C483667FB62C879961E7E695D607DD76434B2383A
+ 43941B02B0F4FD4B615B5D949FB141129E0B67806F49FA9BB43005CE9F5B5D3A
+ 9E0E95DA897A8B20333922D789A3FF150E7824DFAE2078F67615447E4266D1D1
+ A52D568388A1CE96847B0F77813221E049FEF913E17A4B0E37F5F362235894D3
+ C0C19B7777D7442C39304368631A2881C4CF03C60CE54076B0CBF3C7B91C7392
+ B4B61DBA8D6392885CB7F000DB2EBEDF1BB93117D6B9B1D432CBCE3F63F36C09
+ 55FE99040B0EE6C003B844A7E6BC58F0011E17F799120EAC87424BC8869C8198
+ 67B5FCF19EF4131B66E56BD2FFAAB92DFF34A9951AB9CC63CAF8B9027D338AC8
+ F5D5371C7AE27675E5B8D790A1901CCA7628B4484C64AECE23316B8E17650F93
+ 13906C730C824EA1A95DB9D2BAAB9FB207799873DD4F17364BBABEBA08837F45
+ 2F99F0C15FE395125C816EA40FFCA8662B362663C3C2F8591F2F7B61843291BE
+ 2B6856ADEBE40C00FB3D847B95500CF08DED40133AD625A48D00C31DFA11424E
+ 2063FB2842642FC0C30B07065AE8C02A3857D63E831A46DA8954D6295D41E208
+ 41C5FD103267AF0A3B2A5D550F7B8992B36D2ED2F1C29653309144E025C9C22C
+ B8BBF7DF78EC58568CAA880597DF881A1D9EF50B458C6B35E9E470993F40619E
+ 5C3FBB32DA0A8E33D976B576F67C4BFF6792598160186C192565C3E4C71D850B
+ 6B35356E4A3D2277391617ED635DC10D7761593DD9B45D1A29E57FDBC96F183B
+ 1F6C802AD1F992E1BE9DEF23B0C7C7202034579F1E2108EF941F6884FEB9625D
+ 3EC5BA5CE14E5420B819F7694664A8224ACC2F1BA3D88F5FD588611ACD9F98B0
+ 764583CDD35668D0AFB1EE4C6AB90205A8CA16EF528CA3D6822DC04F9ED1D883
+ 3423BD0F2088E2F141010B159D927AC595DC41088CEAEE3836DCFCF6A7B20832
+ 362B431B359144E2DCC8180FD0D63104F6253B12FAFAC902C557924593948BCE
+ E760488B506489594EC9F6DED77AB531404B26558F2B80247144C7EBA41DA089
+ 8127A314F85B99FDDBA311961FC5CC66FEAA064A0F91567CCFF71AB4D17EF851
+ E6199D9BA9D9C54C90EBA0E2F2187F9A1234517574D5554E2B59F9F152738B5E
+ 7C899B184B63E9DEED9EE169BD5E21F82EEF762DAE78DD25908852F2831E5C90
+ 89F1BCA499D39037282EE83224DCB43D785E13E93BB7D68A43A283499AB86A41
+ CEAD535DC60CC200F60A3DA117E86D53E314F427E3B499B412BD81561A596B54
+ 9E272BDA5BC9E1FAD7E0AA741EDE4A6204065A48108E7C1B4B5AB31B78A35448
+ 7F59056B2ADDAD1470DD94149E583A728F11DCCC3B9CC26210DEA187BEFEF53F
+ 132022CF94D62B1A32E414E766B61FD3018D23F9EC43F7779A5E868E014AD274
+ 6280E3C09E0D6338EA772C907CC7E0864026A567B391C9C384D571239C4B07E8
+ 5D69623F5B334A48C01F59939EA95DE46CB1D7C5CCA3164C9625176700C62D06
+ 8CF75083AA5C34DBF7D99A7BB76A49BA7F86F27655228E7F7FBFBC1353A1F265
+ F816FC421DF7CB3A828F8809686786C7E3125E04FE2A5C0DA940ED496B4FE43E
+ 534EE8845003E23A6C044CFCD646DB1A6A26810B40891D4376728EB773E4BFB2
+ B27F4B7E68EC751380F2D10BBD3F8216D5A8880C5BC37BB7816380DE0EA0A4FA
+ C5FD212372BAD4DC928D27DC3201E38D4B7965C26824301F3817FAE62E548FB5
+ EDA51B86F5D1EEF70D981564AED8B02A1521E610799710D8A9C6DC84EEDA2D06
+ AAE228A8D991969CD62341FD968C9B29CD888515726A7E1E3070F311E1C15A09
+ 3B73544441807DE088F9B12160CF63BC24C43B24A1C28AB1262F767345708806
+ E22846F903D7196B93182B4F3A76F46682DA369401E9D4B1B0F940046EF3359A
+ 485B01A022682CD97A2397AD51292FDE26919614C39925C96E15CCC79C203706
+ 92D47F40782C9CB919FA96875AD6A21A84290F56CBEB34BB54138F39D82CE443
+ CB1F3AE8822477027A9A0DD0056855C47AB850511FC77C749B2EB2440479A61D
+ 0319E049117D61442CA4C648B0184401ABBEEDB9F12A14EEED6A30B2C576BF81
+ 09384737582A5C6A562EDA458DC8B343A4C24E892727D7713B1AA09167F1D204
+ F197E5F7A687E76F87170EE4E3C766DD8C5BB1D7D9901F244D8B47EFE44DF138
+ 57D7708FA0F7F6FC0E81C61AC38F64EAF873CE3EC5F8F201796BFC2E6D93482E
+ 53E6D0DD61F7C27CA8729AD7B244AA6D4CF17C56BBDD7D7B5CE90E7C76B743B6
+ 0D1B536E0CC7870785E538BE35D7627943C528B88D7CA573BD429166A74F75F0
+ D36FE3E794E66BC5937FE0F8F185ABFED1CC3BF979954C3D7789E15025C1095E
+ 0AACB4DCFAEE557C374D0B6C9140C7E98DC564AF0F2B7F943585B5C0B52E69E5
+ 5DB4693A042BB28FAF27CDA13C2FC486D31688355A3134C1D8E629E17507A632
+ FD0FA7A99B50D350033AFD2E9157B0C7EF9CB0445A1151E3E1234D3F699140D8
+ A0D7598A38C890A41155A025691A8274E663FFAFCEECA733121C4FBAB02F1AD0
+ C90EF6FCBB8F8A774A14F9BA2F98F8551401ACEE6E5AF73EBC96BB02F864F65F
+ 54FB1F26101846258EB0216E9527FA4BF3D701441A9B04E1AAEFE136C83DB0DD
+ DB6A5250ADFAC29B7AA11E5D24CD3BCAF585AA44185C3095EB3EA0498D257B27
+ 70EF25C2E8BB3358C8D47A80272500E641CD4823C25058FB247FEF11607B7B5F
+ D0DBDB9612D449EE067318C2B4E74BA771A554995B04AF4EF856ED6EE7C50E32
+ C7FC84E0D5E20C999726ADFA481887CF51A73E7C83C60AD5721C4318DC10D41C
+ A6FE0BC8E1FA9FFE42D9316F21653BFF2362A0B70F1299A37C4AD982411475FA
+ CE92CF8C652B4D33B6C462B0F545FDC6D70052F58A1F3716560E2A736FD09404
+ 1C04E6081CD1AF63CEB3FE4B3D9CD04F9E9D2E2027279627CD332B988039AB29
+ A54E708EFF9292C150CB845B3B22B24B99BE687024EFFAEACE4A28ADABE8987D
+ CC95D3198DB6929B2D768CD001E14DFEC6D755BD7F74DA20852512949C555552
+ 3987A708D1D9DA4831CFABAF7A3E9AD970E384B44E3A8260F8F4B08796A21905
+ 36233FE34113AB20F9387C62EACC2A04E54BE09D4FB773B47EA0C73E5140802F
+ B2EF016AD675023267DA33D5CE7FF5B9C4E00D4BCEECF69065ACD63B27738A9F
+ 0BA5CB135F1222DB6E63D8030DEF64D14B5BF599DBD72239EC0CC305B950847D
+ DC58C9028E2D37C075130437EF7934A738CA706E9C2342EF3FA6EFD66F336349
+ A83F354A2F8F24C22D19EA2FE8AC3BF08AD93DA7FEEACF303B2D780F9E424594
+ 32A19507AEB0919DDFB6B396D57F817AAFD51FC3D387AFAFA9792FFF344CDE2A
+ BC2266176A8731E5F3CB9E466A2A41FE81556D2A4D503D0F61889C7F7CF1D4B2
+ 2C634D58F81DF62FB770FD5F3F44B221BE19CD25EBB7F420D93DC60D247CF541
+ 6D9E0924B7F28A5CE70A98678864710C8B9678710A90A9B9EF50F33602967BC1
+ 02776DE5489C8699331DAEAC4FD2BA11F9BC2B957660E8FF82BCBCBCCBA153D7
+ E438A514CFFEE8DB3BDF8AE63178D01ABA9D029FA29347CFE3CF2ADB5B2B06D5
+ BD30AD6F0D328B9886340812AD5EAC4488A2A1F8AEFB739E73094D207E69CE22
+ 1AD38B99C639FE5A464BF2245CBD29E96D164A0A07AABE123015453506AE553F
+ 3E2F3F6392587A1853693A9EF713AE8D784345C5E3F8B73EC3B7AD3252CB6A0A
+ F52CF8C59DA49CCE0D5A8164B8FC027EFB874E43ED02122C27782178103315C9
+ 507C90FDF4AE8C0F58520D024CB864E4BD8F7B423E5BCA4DFD1F044C1BEB2986
+ FA468B96E3402A10A0B3185830CE5AD2F56BF8EE198FE076C3361EC35FCDB400
+ 779A5EBD3320ECBBBD3789CC921CAFB85E15C2D5CAA8752D1F152A14EF281218
+ 5F779D342C37C8F0E287A2F18366CE027D670621D2A6FA60E87F5A5805CC90A6
+ 141DADE1959FE08949E5CD55ABF790560765D56E4C85FA893ABBECF20F8AF13F
+ F334C74579CF89E9F4CBD9A47BE9DE7E050E7CF63F3FAC8DF8D6804AC7FB515F
+ 03B9C4431A4A7D376804FDC763EBD81C62B2354B3FDB5ACA9DFEBE09B3D7666B
+ 3633EF66D7E4E903C273D1D6AE0D02EDF11FBC70CACC06372BDA0BA70798CD65
+ F5D50100D05176B4AAE693531937769B040170733BB0351D33F6518C29286A70
+ 27F1C1FDEA5E1CCEA3DFB91384C6A0CB4F1C956565BDD1D984E179589B8DAFC1
+ 1564BE8B02209348FFE16C60B433DF6515AE1A43DA9109030F5DEC13A5362129
+ 5E24161C102AE64542367C8A1F40625BB9076E5D53913F6B43DE52D8E825C12A
+ 00E07AEEF9727BC4BF8F6A2DEB858938C9068EAF891FBB15B30F70B86E314E59
+ 998A41FBCA38E0125597C3124012E1BDBFE4281EA75A99168C6C33B1C5DA393B
+ CC68FD6B68C3373E318B2D49D11737085E6498906C1EF952C11674A2D9DAF363
+ D93BA9A3FC52B14E223089347D8A548FB380184EBF47EB96AEE509D46D8CC849
+ BE63A79A652ECE1AC4CB2E6B3961E000D790661FC90B45F72FC7DA0D99AB91CD
+ 041D0F0AD4DE42DC383C4BFE5DED1A6C9ED44023637C172C89A6B213CEC6B44B
+ 84F6DA0A7BB4B46F4F1B6791156B0BA74B31A2A4F8706B37D717A729E46AA435
+ EFC3ED8ED23113F2C8B71AF202EE4D8A79C19B254680659B6D2930AF8CAA2B9D
+ A46F961FB6B1C8D91977D98961141A8A2061A2C2E225863601926B717C751BDE
+ 2D5CBDB5688C3D379E80E43A7C3319C60854A3DAE518E2957634345F84907661
+ 9DE9912B8B3FEB72F47869BA2F4740DBD7CD54BCE2F8DF0AC235CAB1B4F904C6
+ CF50DA353149254CE0E88B6A4B81F536AC838E6E4A22642CB5921737EC6E7C49
+ A04D5F0F4E1B1B8E33400E0C4CE90A4332B6671ACFBBCF5BF06441EDB67B37ED
+ 890B2ADDCFB3F898D6AEB59A1D2754932E0696756DC94B488068448270E76D87
+ 2742A7FDED0FAD8C9DBC2220AC7B37F7D0B7D53757B4FDBE9E9FB18351630973
+ B357242453A2D1F671B2CDCD69926711E5EA8924D802D3757B13E058E4E51623
+ 560C3B19986A02264C848BB3FD80BF0FCA88B525A3A709D53DC26F88EA09C688
+ BD0063E4286D80FF19C2FAF67D422751E2AE723E77FE7824223BBB0431CA3135
+ 967D3F1F322E70162CF1800F5FF8CE54B60529F2F4283E227DCD55096D853F4C
+ 07583F23E797E28544C862B3895EB433C3A1CC4B7CF86AE11B86D03C4ACAF459
+ E54ADFCB9FD6F73384009FDA17109CDF8188FE5E308A13B66FCCF15A1EF0128D
+ C31F3F412938D43F470F30F3F0537CEFD282369424BA1B8242FE3A60A88FC5BD
+ 737F1305CF784B66B326F518536E8F86E951375E0B5397198F24429AD2674645
+ EADAF13D700B753FAE75133A602C9700D198ACEE2679FF849F47321C399E9CD2
+ 05C0B6252849C4D827E8F74904CE186F6D79F4D3C048CCDEF05EC122707BD905
+ 79D9045FD16935F8553865C8296EBC794CFC32060313C5A539D96F5D3CD1F3C9
+ CB3DE8EF376A9E5D64C3449D44C495E81FC91B7D3C9C470C83D7F108CB4B603F
+ DB2D9FD4E29078A171F4717C1A94F51F1C2B786F417BCEDEEA957461CC174896
+ 91A5B043256998716381E843EC7E6F82839D98E2C7BF936FC6E0205B59648420
+ 6BAE1F221CF366BA96B88799F5D12E06077FD6180854386A4889605070747B71
+ DDA3B8BCAAA26E3B1D0F2576E5199767EEA10F510DBAB888D38F36D424BC6382
+ 738FA6B5B2DA9AFBAA19C100FBB01B415AEDC1A951F41755DFC7E9F4EB67D9B6
+ 8142C7C3077F638A76EB503A2AD2F69961072635F567CD8EC9749463E003DBEF
+ 7E0724E5414B9521048C860078F5946248A8BAF885473C0E8CC022E74C35BA51
+ 7DB29DABBD58F6C71360D68AEF5A62F19667E6A02FFA1766E9B4FF376DC557A2
+ 400F154DAF277DFAE65A0F571EE62C7C227662B284901A609D7A6F9768CB7411
+ B9468046CD4DFCA84E112B233589FDAE508809DA855B84F738881A1ED5A97C91
+ 57BD7C94D6F4D313D7B9E5229140B74EB2E40159F1C91676EE3B8A47308223E2
+ B320701AFE105941A47E0345FEE521183EAE75DF6D1A4E809E72D2F2394827B7
+ 79AF5FCEB13E58D443162F16B7CCD64218198B0C1CBD72467CC4146D4A91D898
+ 7F177F7658DCA6DA46E47026B211202B1BAD60F79E8017305FD769D3DD054935
+ 88FA73098293D8733334028000872F8367E4D89745FFF758426D621DEF2AB2D8
+ 1330D98C1B35DF980B5C64CA341DCD96462FC0412C385676411A1EBC4B3CB613
+ 2DC8BF7FB1223FB71435F31D91792744BFA5529389680E3DA9EDCA27A430890D
+ 195A97D1DB3B2FB5020419213B74746E8BB7441E7FF7FE5C81BB4B5FF2D87667
+ CFE9CFEEE090F26C8B3892280689835BA5598FE9178A6ADC05038261335CDFBE
+ 56F02ABC96D95C02B0E4DCB56A8108B19FF26D92664234FCD7794B2F2AA2F32C
+ 4771500133C6EF95B5DD7ED7DB48CC98F433025260D5F7B4A46209244FC79217
+ 9B31B106BEA4F95C867380ABCE1D9A1AFCBB2FC0C977F38B52BBEDA251C8B46E
+ CDDED593419E564218DA2F65188A89E857CA9F71BF4A47FFF8DA6E427F083B86
+ 8DC22A41E187500CA741BD2CFEA46FA11E5065FC62D6EDEC9EECE1E376BD9CC0
+ 0EC9D96961C5558029B650B5F304681E99E12712ADB5E3586106B28C19B46D55
+ 4D5A4870D50DCD9611F7237F425511837762E0192AC419E2B33F60CDF2ECB420
+ 3E1D1856E02F5DBFA6AC0F610B3EFBD83EC23F2A2E658F4EC5CD68CB5B68CFF6
+ 091174BB71EF410023F06A4621C0128C6979204D65A63BFE21E7DC38DF13D20B
+ A41AE125F850FF69F2B1F5B4125548A87F02D341592665DE119FF20D402B621C
+ 9446639AE1B31F7FF9B1B3BFEA1332CAB2038EBDA834E10F56AE8CE84C71BE8A
+ 6E48F9EEBD079A0A765CA637529D26806A73D46BB466EFD574E50999F65E8F8A
+ C0A08D28F3F6D77F155BBF26CBC24E478BF7979D1012B705559089699AD70858
+ FC2E0F4AF05ED631AC5B068BD2AC2700DF59EEBA9CCD7EF49F6B3BAFF31547F9
+ BC9558E18FA0D87856F2F17158776F1C5889AAE7E6089DFA6B2B71A6C823B00C
+ 19F028C521D86D6E8A933176C363DAE90F1260566B45A8D4AF75689AFC2CB234
+ 89725F84E2F91CD9BB50755BD07B80B0975CB1F29E590A99922877E90F328E7C
+ BAD59A3FF7F5E07D9CE3C12C5E4AD9CD8E0ECE5648651E5488EE0C6F32DBF457
+ C484668CFA377C2E7DD5C5BE31CF12B771C740869517EC7F156EE966F8ADA714
+ A46DAFEF7FA3A7AF49F259A5CF200243D25DB34A15DD00C7E06BAF9DBD4EE17F
+ 5BD830C7DBCBF7A890E9406C943D4E086160B6B859F487B763E0BCBFFB5155A9
+ D90F25E552A84B4BA7FA10568663A9D80353EBF87877ED9A79A2E3B815E348E2
+ B27BE1DA6702092B134CB7026A595E1C2A75087846B3B8A1B3ABA608E4F375F6
+ FCA9C952DA86F0421DC54C9AE27B0A2D3CDB217018F47927F74C4773F8F88D34
+ 69ECA096530B072BDD6B136BAF2D254B1291310287F591377D429FD65E7318A5
+ 7B440D0A161ED03634AE380A04BDA62CB8F03492B1BDBFA1CD172FBA954302FF
+ 226ACE7D5B7DDD8908B296033F201B8221173ACD176DE7F6F009390660509120
+ 8920562BEEC05B592669A2178CC9D20A69CF22D26797AA5565861719BE16136E
+ 815E5EC7AE1C473F1A03CBB170454955A3F74AACAD127AC14B0FB307262B42FA
+ CD4AE7CA6F60BA3C4B3CF8B4710F4EC979B471865B8596B00BCF20490905E403
+ AC81E09855AA4E79C870D3D33A7FEC2F8879B42B3282656B9B40BD15622B9792
+ 964571A671BF71F369D9ADF7BF0213F01DCFC6A53565B915F55A374F85E77224
+ 66449FE859396D519C50132C92D5219BA7DC7785B6604970897650B4793FBBD0
+ 4EDE56D2347F43B0AAFE335095E8816CBF379A27C70FB01DD516941098A66FB9
+ 278805AE5A24F9A1FE69B5C8BBB1822BB3C47C842F1CA1C89913BCE23EAB8647
+ 15CD6660CD3223FE616B64964791E703522FFB85DFF39A92A641330239049C68
+ 53D2650B8E0B1BC9D7332B7E5EF571724558F329110142B04D699834EC68D519
+ DEB22CE4733C50005045B520B038C6C6FA4102FA4B5F1B4CF0FF777C0D1613E4
+ C648CEB54034B42E041BBA3A68BF0A5337E1C8B1C105CF0E347ACC8514BF65A1
+ 3976A303A713E2E502C5C62224FC4BDEE6BBEB425185B6557CBEE81526A8E707
+ 7626D1663B7F1DB8EFF63157D29B650B2E1584D86792F1F1CD0F331CD226BBD9
+ F3303FACC384B5C40B909268402DEB37C5A9860F6B939FA15C4B5EAC786A7DEC
+ D58E647ECEFF2EABECAEA0F05D249F89C30903ED5E686C2E84F345242C2EDF23
+ 9253CFEB7DC01A43F0C0B46640E81533884633D211B74FB3A5D0592F8EB94819
+ 43C6A5E660FFD8AD40E0B1E6B50EF4AFF828E338DF3AB9C327D2E516C86C178D
+ 6BEEEEDCCF8B32905CADCAA1EE12375DDC6EF30733EB90A5EE66A83B28F2C00D
+ 4ABB2981DA254177A50E362CC3FAC83037F9BAE515666CACF14A01B9B57B595B
+ D5A8EAE08C0A42DD48D42910E30C35867A819566E6F048D3B909EBABA159D267
+ FFF4C55CC12B5A5D876FF7B0B032012E593FD5265A467CB2DA7C5586CF1BFD78
+ E9A4B066C058243FE56C5AB4379AA453E72541DAEE5973CF463EEB87B6B50295
+ 54CBCC1101058CAA7F5525350370C064B92BEEDF23A08CEBF155F1D2E8B46C0A
+ F245F44EF179505F57FB4CEF271C5826F00F322F59A4684B3D8AFFED411B0957
+ AD7CFEBC8153328C043E8D53B8E40D92E51A437008CBD238089FE575A44ACC24
+ AC8F5B1F6B25B92BEB6762D7CB80C0B0AED644147507DBE05349DE04DE3AA7A5
+ 40C551BBF099B46FA74D0B0FE8872D994788ECF772CC65385BE59758C95AA150
+ A1FE1BE38C8675D272A6334932365D629F675DCF3EEB6F1886547367B8A5A39B
+ 8906971D7FF412F2C53448783031BD9CC109CE450DE67E29BDC39302C18B0E7B
+ 1EF42B69BBD957D94AD70BFE77330A257111BBD261607B5B5778D45CF3663441
+ 1FE4EA373F542C2BCADA91FBBADD68E69FD9AB7E999482307476A7430D319565
+ 41A371F660BFFF00AFC9B46981A948384B2A83B1871711F6E82F732540B897D5
+ 51C8D6A9647EF43CB31E6BAFC00A25429E5BBAEDF70879B764A7645A106A7142
+ 22ECC5F6EF95748862285F407F1CE08C8A086A09A58C080049F2318D2B392F13
+ 454C7E10B0D0E15D75B3A977F8ACF1554208D28B63ABC887A65D69EF5B1EE4CB
+ A4F06D3B8279AE97AA36BF9B16263675ABF8C378F9E7DF4CBEDCC03E705C34DA
+ 374DB462EA99CCCC9D1FD2CCC7078D06BE46CEBCB659B9FD88CA44CEFA9A77CF
+ B11BAEC9C081D337553912F8D58A50F4A45C3C7503195A5AA10E22F78AD21CD8
+ 602827A464F9805FD00C2AA4199E7E9B33923A0AC6ED203E5E58CF826E33CB4E
+ CA9337D39F6EE56BBBDD2F4BC3EB27ADCC217D6EC79F6841DEF9AE82810337A0
+ F52E0193BB62128121EDC27DA1DAA9CC24572692E56F64C23617F67A8441F3EE
+ D47D5C1CA56590DC0531B75B5EDE8CF4413E60CFB868BA9F0D27FDF7787BCDB8
+ F13F0C5C9F9F749A1CCD413D7ACA8700FBA6ACC9AE5D0C4EC73FE3FFF8A62C64
+ B9BA399984BAFFB3C4287F45BA311C921020FF90AD6EF89D5272E2EA96CDC444
+ 7248B7FAB06436DB95463368791ACC30B8897341B8DB33618368AFF5A5A73D1B
+ 772D43F037194882F5328B468B25C3728797471E3261D2EEBA1EBD69EBD86D6B
+ CE26DBDDBEF15AFF62827C64452F841926EEC3524B640826374A80E410719EF8
+ 97A039E25439C17B31AF2370C8D498260AC5505FFF2060521113F6A3E29DAC4C
+ CF283021F4DD6917378D7358A5D03DDBD95AF4DE7CF10DBA767AC100D51C0B8A
+ 2FD58767610FA2ADC366D39E2C204450681DBC3FFAC765CD5588CC0A1CC9479E
+ 6822B2D1CD785D700E2F4684A2167B584E257DF53E681D0D25E0ABBD5E281A29
+ C24A997172D00143D55E112F4974DC430E967731B2B9D940C3619FED976F4214
+ 7AF362DCF85774746000B34A462A998DA8200B5A3852D2B6C1EB336F12026693
+ 4A664EA7AFBAC4DE16A88D4AE27AB15893C4DE003721452B6F77D36CEF86BC90
+ 3EEB4FD4B30CD23BDE3BB218351FD3BF0B5A89866F7EC4A40EED6793D0C62EA3
+ CEEA3507F5C04D38411BE356472BEC194B8493F5018C5A255BC4FF97317D4E8B
+ C425306093B3B3C325B317137C2336212106787C8BC9E6AF6E465E35E6B8DF41
+ 28C1BC138E89009519603C7C2FD1BD5C6C5FE490E298568FCC60A331CD299B61
+ EAAADCE321B4BE8A14574CEFBAC8A8900E4F39FA1D0CF0408CE67C77F08261B9
+ EFCCEF71173A64AEF366A42C300AC9B4214DF25995BC5EDBA90FCAA3F0756932
+ 19796F29D81D571954558F9A0D64850826BF40263E2C5D0DB44C0F9F078E4073
+ 2AC87EC87AD89178901A0D34B33A19E053EC098B3150DCBF9DDF287816FE9CC4
+ 8ECF86BEFC30F3E22C618286EAC6C36EBA595B51D1EA66053A1B6D2A2F01FD96
+ 408A486483646D4DF996F0B519CC273E59D7AF7473BAE49026BC912216A17D76
+ 9A34940B2BEE1DFB2ACDD40BA3170BC4D02B88485ED47D964AAB67930A8066FC
+ 2575364ECF3C0B01DB2FAE3237BBABE481753CEF96CD37141413878C33961F4E
+ 8CF6278915F5410767A2957E5D3169E3D75DDB7125727A8C0F57AB119C69DD40
+ 7E52684743BBD00C4DB517F5079F5B24F2AD4778BB7D4E681E841FFD534A1E98
+ B1D138CD9CE880F0871768011D22322292FC060D30380A23783E6F31C078B09D
+ F57685CDCF1E0E113D23152EDFFC322594F9DFBAC141541C2A83B5695F176E7B
+ DAEFFD367FF69595919D74A7DE97990FE8263112D3390D4C146125C078F89398
+ EDF6B6304858C5DDECC065FFBE03E3BE4C7D1B03494CACC5FF40BA7BE4B8C288
+ 62F17FFD212FADAB91D552F999F1F63D0062E3A8F722F33A442E3AFE5AF5B942
+ 4B40F79A069307D5BBC68A29D1065A7C025F92C10BC6FA93029D86C618BD6D42
+ F9F02FDF6E0650B024D9E82EABF5E8566B306AA75F58898137096A3F201912E4
+ AA53440D726F3A8483363104E1C1831EEBE72C1C65335DCDBA00CB0ACF624BB7
+ C16772AC7114ED7D5BCCA84ADFE28597D6612D1D16C99992F5BCC82EAF285B47
+ 16F8A6DEC91A50E80373406446229975939E5278FB870BC4D5B981A3D4D1DE60
+ 597854E1B6A78E66AD7392AA152894DBE57325C1BD90BFB08CDB0881A9BC5662
+ 80EED3C4E1845F8905960AD6718E81552EDD94383577773F25E1F6CCAF12FAB4
+ 15CDB8B94052C9F430875D63957CB4F102F8DA43BD56D6BA96CB67488F6435A2
+ FFFF9D0F6314376B075D7923F749FE1FA02E89D1697A12A1C9C10F947B0F0A71
+ 3C0C98A23DA9E4749FD25C4179194051191DD03F4A9D677271EEA5DEDC8FC7DA
+ CC3BCE2DD71A6453917C3BF0EA36DF5D9D8870541EDC17912BE51EC86D31FFBB
+ 7ECDAD7E3BB0EB2D93F6DBD8CEF95836CD1C4AB38BD6E6090B96DA85B9F517C0
+ 21D44C501727FB90D70D9DFCFE034D0A4643730FA162633656302385BF79B31A
+ 0EA0801512008BCBC8736CF01AE382149BE74449711CC0F181AD08DC07298B41
+ 7AB2DA7CE18533E4A9503F193A659ED9BAB67C7F150BA04635251BE1A626B6B5
+ D4241E6CFD2EE1224C3E818582D082C6F73A8157B3C2F2B037C8325FD875400A
+ EDE69B3882A9458524F0B5A9C10F47398A9B98540BE2DDF736DE58395D51A1F1
+ 9343383CC77B82573BC56730A221C48CC17C4553B05BD631077257C5C3CC5E03
+ DE41E12DCF9856BD5922E697B80C854890808D91CB4A403183D04AFB1D91FADD
+ 7F745309D01C58C078EF5A22589500A1F82A580A71028A9D3D9CBCC13381D6C5
+ A6684FA7ADE79D339C824230D15EE191FE74EC6907CD3AB70D0B7AC68072FD69
+ E7566A8F5F325B61C84D3058D245B61740D8B17DF73B380C1936F71691BF8CE3
+ EC0384B626334C850A2041F6C9FDE1E9999975E5D41779829B817DC683CBA598
+ 48E78EF9594CEA1C1D0673EF83239157636AB5A76F173200A3FF0746E30C7C46
+ A77C4F2F542B1D9B152D11B338636828504DADEE2A6FA6903EB56DD5A77D1499
+ 1A48DD4745659C90FC75D065D0E4B6080769095F16017A4FE5553DCC74D80DA4
+ A7C352A5E6E5B66493AB0325BA4D562CA35481003D01EF6FF6C417764188B010
+ 3156A2BCB475DE8C79542BE2863E5408D298983350B9932177C5389B76B66FB1
+ 6A449C9285CA4B819FB99914F1D163F7B50912843A39F81AF60E0973C40F43B8
+ FFA331CAB4D9C493C98234C330F9CE5A2F5D4BD021C10BB197115999FDA23A61
+ 97F973843B40210C08AF43559070D09B9B6F0BED0AF1A7AD1D26E74402B92A8B
+ 6A0E92240DFD38C37E190B5B670BC8AF08727BFAFF2DA93F3072C36A005A914C
+ 739673EE6BF33FEF3EC4B0A294816011BEE7039C6FC82E9306D3711B9F0FD7B9
+ FDA88801B916D069B5875BCF853D09C91BE63723928CD8A12EF4898910F61090
+ 8F1719D323716C8A625FA25BF896C315AEBABA554303F46B9525DE7790AF0998
+ 12841D7F967360B55C523F12C732B0B3181AC6B5768568E0FD53292DECA6B499
+ 27ADBA848AC163C0BEE7558184C29F01AC14ED54BCA98E8A673DDFFE8145607D
+ 2B0C9F33ABF381AB8D6F47A76D7550E0F6CA6D49747CCDC3A7E45982404A0C78
+ 0FFCB2257CCB71ACFA024A0008BFBF3B884EE41D1F9B39EDC4A4026683CA2067
+ F1F599DE3C002218F48D38FDA394A841C2AF3B4AA6399828AAACDCB7E833B7E5
+ CC602662F204F5BDA78935BDE4AFA6400338966B3A9D02D1233B7125078892D6
+ 113C908FEBFE8E7FBD1A9D37834C114C26C38D01A2BB380E17FF8D65CEBC8695
+ E2BEA9E08F1EC6C3256B35183701A8B565C646247FD3DC31C041D863D6015A01
+ BD66E1A0B7783B9514DC75C9D25FCE7073ED6D796B80D23F602409611BB1FB0D
+ 325CB94C1CBC2FF49D3067B20B58E38AA67F75987A62354AAE04E53E9EAED79A
+ 076FFC79214E25E6A3BE79DB94E31246AB373669044F4A04D25A5EE1C0C3F2F4
+ A99883EE2694AD494AD95A76665E2CA9C32F81D9A18F0271BE545ACEE2856592
+ CB3FBD47844DAE2CD992D7E8F9823008B7D5A1D54A699B1E21084A935EB91870
+ BEF490B176801EE3FF1B0CF5EF529511B4C9ACBEDCF9B0D2E1492C6E8A417A66
+ BA5B70A8A5EC603248F2573133CDA97160FC6F37854963D21ABE77F3538E08E6
+ 149C98380884452A2C831D9751B28F7D9A2B66625AFB9C270CB24F4F4D9EF98A
+ 350A563AB6870DEDA6DF5A1FB55F12E5E1F345AAA2FDD5DB8A65D77C6EA56D26
+ 6EEA82880A782DEEF3C6CD889DE76CD879676D31DCF8DAD04F5DD199B7DF8D32
+ 9262FC346B6D74C7636DC7662F91FDEA7F9B12ACF67F2701492EE4048DF22184
+ 0FA882B8BD3D3D4B42491B726D59797B7D8D2E406DFF53ACAD7C8E1E805C6F58
+ 236FCE5D392A2E009402261C33326641C56974DA66F9CD6C4803F825C703AD88
+ D1F134336D69068771706FFE35F0C30D32755E97697D425E0DFD81DEB9A60D07
+ AF515939FFFCD96F1B1F0A1A09F5FF89410B4BFDA312F53197D6AD44E4E81D7F
+ 253566BEFD684A19FDCFBFBDD87BF3D8EC15AAA11DC98D807BBF91FE6A63F2D8
+ CB32AA593B2A271960D10ED3858F3EE929BFB6963DF2BDD4F57890771F262861
+ 4B32758FBB163E5745D793C3321C1A18DF914BFF37B57DBFB3C4301CBE812032
+ 65870B75F41931614A729F52BE2E3FAB7CF442120B58D6E7BAFA1A39D30C4EF3
+ A2453EB3D5A9BC08607C59438787ED9822A370343521898886F54D73CA54CE81
+ 5A3C0DE2B5E0F1C9F9ADCDDD1B42242562680DCD6A688B0AE334C66F17661542
+ F03DDCCCD64E9586EDB8AA3D653144138E4E4D9A90739700A231909E51EF9F58
+ 45D87D0CAEF5C1CDD98608C2DFAAAF732F10BC36EABF4BCBCD635830948BE8CB
+ 357772A871E4172E4946DCCDD04C044FDB868C5EC1EE6E96817D94E8F0B5B017
+ 2959E569FFCB5D164B10A9EB7B94522C3BDF2957C721847BFCF7DA77A1CD242E
+ 2345B46759D42B18002E5BD6E6CDF8F7B7DF14D8B4B7ED0F2EC44BC58EDF435E
+ E930D065A7F6D2C7013E0411394C2A77F3C4D091E0339E08ECCD38F3CC4291AC
+ 4F17E959F0E49DA2B52ED46CE35E8E396D1D9C8C2B0615195AD4AF2BE5696C82
+ 72632F6EF88083D6A269377EB077098188C96F738770ABA5A5EDB5B563DCC9A9
+ C0C7A5C725803F9192EBC35A96F1AAECFF25F64BA4A565E2DD064A0E1BACC9CE
+ 60EB7281F7EB173851246B8617072BD1E66E134F519E0F1E404F27219AF71AF0
+ ED27A4C9F71D6AAE1458FD394286A57F9E44C3C44184FD71094493EB93FBCC37
+ D95640004D5B5F2E6B0C88CC9624241D3FE3041266F349295A346779B4677C80
+ F377DAFA6C9A92FCEEDD04F71E370B287CC3D330CB1988F69EBF880426772809
+ CE104D285B626CFC15643DEBB8844EB1E10F9B87FF6F66DB46CCEAC261C23807
+ 38FA8DA37FF154A90F1E3CF889A2CA6C66B8B2FFF2FCF0B6DD2C718543E9B76E
+ B8954A9D17AB6659A0D3150277FADE660699413D89DCC5D8F2F45A6D592A302F
+ 655DABD5F88BE437428D96A53D67D19671BA6660D628FE989A0E26451D769940
+ A88C13DECF306EA5B2FB448B43648277817A55D4C2E81C5868365F6C612C7A53
+ B5C741C39C2EC58BC9D1BCAD7BD99268AFDAE014C811DA2473556FB50B6B0518
+ 3C27AE62898209EA05A0F07020574E660BB339A9CA7B8A2AC68CC5ABA31EFBF6
+ 4EBBA04B291CEF7971193DE1E935E1CAA8DD81D23EB5E9AD1348B204AE7C316D
+ 99421EE9F904A31FF491DA3465FFA4D4AC545FDE78738FBCF3607B146B8840E8
+ 418E2A1A5F749AE01FFF32B695F61A20DF8169EB83F54F5120E29C6FEB50DDCC
+ 9D53D37295B798958388A0E2135CE6E06B21D3ACD1047287A00128298F931B91
+ 0103AEC5DFDF838F898E84574D0E05EE8D08C95877CB86912425E6E3BE817408
+ 580760D95F86227254D63388754302819A9F900A28F9F2D6A861ED36283E075D
+ 2DD606B284070E537C384FBBCE26B6BAC082C8D97C23104D5646EFAF7D7E25AE
+ 678B777D6BA675F78C9AA10D3CAD8FBDEE445A988CB2D8C2A267FF3175E4CD3E
+ E553449793A4737CBF8E25EB2B6DA7735BD11D050344E1F71295802B0D716799
+ 410F391BBA38B5285EB85A92E3A2F4F7DE940D95D720227CEB46E00D635A8197
+ DFE053D0B93C4DBF47B501DDF9950F2D3EFCD3CD6AF835CA4B81D6AF9BDBCFD1
+ 64598AAD45E5AE436F95A7BA8C8CBED550FAECD75CF3EE8D0A654489ABC5B9CB
+ BC8595CE2E23A396FC467798DC61DB826316AF739259BDBD49C1A4DD14B8289F
+ DA880CD88C18B1285ABF35763224E40B87A5EAF714538ACB5873F28B1E715BDB
+ 21303ED5B40BA3D057F2D215D1A1B40626F8244C92932F78E6BDD789C06E2E44
+ F2C8665B8306203D16A638A0AB7FEBA955CB1BBD1817C76F87477A881183ACCC
+ BC90304090510F17197F2B3110A5FD76D828603CB217926044498866562DFD5B
+ 4C887EB20FA90C0B9F4B33B74CAB76593296C9E1FA9830BFBA909E48854B42F8
+ A06BBA84431900E0AD3D1947EBD145824936EB94453B1C074BFEE73069407147
+ 5A159802DA0A366827ED9BC75683FFF40B5D75AF58D70E2EA5FE3864C219AFDA
+ BAD5C60A3B2AEA907F9ACF47BE50348E94F36F706CCB5A61C1EE7EA7C5A2C6FE
+ 5DC656AEE91174442DB79D3C3764FD21CC82A9B8F9BC9772D4E3F9B5573277D6
+ 980012C8BA4C63EA2861A37A23D41A924BF08EA6C2682CE5A4F1B82D493139EB
+ 4E03125C84232EE11C7829DA6C886D77006F1FDCF479F8C6ED2B9B04735D5CB0
+ 4A96153250DE03A29760A2FB7784CE214908B4773581F4EC4BF09FFD65F29E59
+ 60760474C59BA9474CBC2F7C1AC8A849562F4DCA4105EBE29F23304489F97B67
+ 733C58C2E8924EED9DE7E68F8CA61E7A0145B75C3ED249507531A7427E142705
+ BF45C934DDF3F85B7A0F3E5DB96A02B265938028B46543A45A67EE3278190C53
+ E046D763A6F86FEF962D6C30101D2D06FBEB5B426DF0FDE54CADBA492228014D
+ 3916AD26205092E5F5B3AC4F70F2ADB9107A3D9BAC651AF51A40D8B74BE3A93F
+ 72D6C0AEA8315FF45AD0D3A86FFFE5A8E6DDB2393A393FE015A2702EAA92D630
+ 115E7358EBFEE3FA1B9D9218C115FBBF76C0520031A794B831C363A9C912254F
+ D86D028A8EF1ACEBC567FB31AE26CFC0DC9A55CBD975B4799DB899CBCA006BE7
+ 6A671CA04983F4BB67EB1C5D14A82B3711087F6FBA10258CD318E03D35A49D97
+ BBAF88C86D7EC90853163514AB02C6112125370A4880F94B7ADE4B1027CC65CD
+ 667D6AD254E2593C2F00099F423527BB180380CD41D007F5C3CD4ACBCE59D3ED
+ C97437CEFE0E4E310DD9A5E34ED1986C92AE9B7CE083384B37FC03B4B1FBDED2
+ E14F139351ECD1C0742A2B8555349D79CEBCEAA2A1B56A1B1FD6A3B82DB47949
+ 9AD783107FE4CED56DE3CDF46217DDEEFD7D2A39D9C8485F00922AE866F9B364
+ 2F815E58D125727CB26CBF0043AA7071AC45F9329C9B8F00F0CF45701C60B6D0
+ 9689A65643DF97365BF3EB747773A1ADFD02FC9721737AC2F00C4FF22F546E2C
+ C354B199E55CD3D7846A8D1759C35D0803BF876D845C454CAB711B39C1CF3E3B
+ 790D713FAB9439A13AE0B119812E4FD978A6498947C432A05F4A49556523461C
+ B217424DBE8D1C2EE7CB4C1755A96BF71F9A668E41285DE8EA87537D3751C397
+ 116B40D7866B2CBC0C8DA3E9E8EDB10F42F77C73B98F7D68283CE323CCB36CF6
+ 59B44153C994FA483F8369658A62754A56C2E1B66E76998E7C32201B6403B186
+ 1850EE877F56D175FA7395400EFF76FA8FEC7E50854F493316E8311BEFE34CA2
+ 3ECCDDFED7F9D0C3E387474EC1DFF9928C18368646026F0BEC11732A6EEBEC67
+ 6E50F14C3FEC9205BF01988437F0E32EC84F3C2C5CC68C85AFC1D5E6A4CF5790
+ 373E480401903055D2865D3069EBFBB75037FD74A0E5DC17720BBC2B900A3EC5
+ D5AA21251FE3918E3D2B8FAC02272B8861B3D65C1CD287B8C483BE7BA65AE9C2
+ F9F4A09F806614B70365472385674E516663BD6E7E7220ED7CBC2E5AD79B72B5
+ A99255D300636C24B8AB799F903C0E06F49DC00A78B8E540547F96F1D7CB328E
+ 4A8B533E5159C142A3F0ABDE3369D42A465C82EF5E01CF18D166A4E86FABD95A
+ A245B4D43C647310CAC5042FED03267EBF81ADB40E9E2D4F41194DAD6DC1E37A
+ 6BC7C00A28506B5FA9611CD8A167268A991172B97B40A898EAD22077DC44B945
+ FDB8AD4F87E8023FBAD44DE025F05877D81A61EB0272137BEB7ED4952283268D
+ 6489BA70BA0825F5F13366B33768E3194A06B7D53DDFF3113B36CF0DC6A71F56
+ B6726762B236F988DA3D8F40FC97906995EA46A306FAA174C7157EE7F21009CF
+ FE78D783A698108536D1CAFAD4155B30D6C7F655597E17522EAA40CEB0BCF267
+ 4202ACBB86D59E2A92166B8FB47B2A6DCC3223F6AE4DFF8AA68CB7DA4ABF65DC
+ 5DC977AD81D7085FE052E661795F556BA4959F54CBF2864AB96241DA06BDD40C
+ 6C7147AEC6DBCA99516166DB3EB2644A62708779C23AF12B2C628901BB3170FA
+ 4E79800154787DBFA92E8E599485A009170C2C4AD5F065F71004A59445635BDA
+ E8FF885324CAFA11909FDB3CB4E2C44C0CB4AE26B63EEDDC518178597F244081
+ D5B2DEE2300A51C8B8B510D667AF90DF80BDA9CD1278EBF007D2536D96E45148
+ E0D8380D9176219180E3473A3EB2FE68BFBB52A70EC937E9D3FBCCD84F27D837
+ 73C9F5A94EDCDCA87F541EE9A13267955E80A6558AE7D4D39B29F1EF549EE1B0
+ 51980E27B28BA43972D37771863F4A9FCB14DD4AE6F367EE3E474042E4702358
+ 6AD9F0E046A12397D7800BC0D31E710CCF9F7D97ADF0E2E018C6CE59EC8C8EF1
+ FA2E1CADD83860E0D80F1BD06F203F898DEABA47E4BCB7A7E7DC31A61ECDAD1D
+ 06E66BC130DE4A2A23CC99B7D1C43448DFAB8F906D3855D61B2A46E6C1621ADC
+ ADFC817771707C7B762DBE73CC7E3972A89284C4F8E804A6B901D856CCB80769
+ F5ABF020D5CDB10EEEB5490623C0435A16AAE8894136BA3E31F126EE78E0C8BC
+ A5FD518355C1736615E0E15FE5C8BD98A91FBB3ECCAB61A739212C4D2B878BFB
+ 111138C1575CAC87F14D3EC5163A92E1E3AAB9262A1747BFA2761F0F810EB355
+ 3FCC4C2CD357835632AE4E5B27891C562C3F7D4D0B692E33F73FA871E4899E42
+ AB9D40FF36D019BE222C8DD68E0944ACD642E5B0E2636BF11269E9A95909361C
+ B4943296B2B2DB1592D4F6DEFBC4B1B71D9A1A3E9BDA8A71A461569E6F6655ED
+ 0B3BF5D489E4550C5C9B517A42E26266B0738E3A9B56798097EFDDC02F138781
+ B904452FA2A1C4D2BFE8D7F2EF0F9DA1F78FA1F3C95C044F820CE50D64DFB592
+ 9BA23B80BF61195688D8DAE00793322AF789AA18B77A4BFE2121FAE31318054F
+ 252B4D43E2D95F9EE8651547E0517A000EA7CDDC01F90699C9E9B6811C73BA46
+ 88EAE94907FCB5D8CFDB026D2788C3C2C1F125A1AE199BFEE87A816C754403CC
+ 66F5ABA1339438F228F5046F41FBBD4D68A82058602528A2AAB45CDDEA82BE69
+ 4D0E0081D9CBABA174F6A871CDC42A9630F2DEFF0824EE2D4E1A33BD09825093
+ DDE75F9A27FCD28FCB28FC02A678AED604AB23DEA5925D73127F2BC2943FCE6F
+ F32AAD928D7BCD88FFD961E8DA50C41014A4975934D96E203DFC0D3445C2C89B
+ 0C0E27A8ED7C754ACD7C7FC142CDC08A8A2F4E774340A8CFB55910D7F35F1FA5
+ D1A02889B69ED9481698D9C2E9179A7D45BF678BE1F9EECB8D9366564ED5DC99
+ C82E056B082F1350BA389857EBCC9499FC84EA8F69A2744D334392918D715CA6
+ F92437AF9B0C8BBE1D105CE2696DF6DD87C81DA9E9957D84FC0E8985F6BC81C3
+ C6726AE0E28F693F56FFD370A71F826FFEEC21EC7275604F7F9B2A8AA067523E
+ 21DAF1C5E45E06661A6A111907123C0F8AC823693BBA60017DD743D0C061E91D
+ 0093E91DCB5BA63024AE519423AE086EF048BF44B43A6108A988B4C1E343CDDE
+ 4864EBC6423FEFB48E9FE18930647622B664D59F80B04A9621C05B5ED6574694
+ 668F6F255963FCADE0CDBCF3DA24A00BC42C634BECE069A90BF73EBE07F03F6F
+ 76FBCEF1A001DE598B50D9D0C85C793F5BC70ABF479FFAF51D3C766A02A1CD7D
+ 9850F107D585B698B5850F8DD6CD5F3D8AA7E6CAE31716CC5FE64E759C6B8743
+ BBD93E8F5674CC999D1E21B5988B055EFC864C7E1E6A71D20B4284DAC8CDD087
+ ADF9AB3FC77C6CEDED60FF8F36CF3F706F8BBCD834F74FC543DEA66AA7D486A6
+ B7A127E399E22E429C7F927DB82D5D64F336D9933952884E7BD3C3E7A8C5B511
+ 936C07CCEC7808CB64FFFCFCB899FEFC84EEFAAE1F52F5E49F1C151C57A4FA13
+ 3775573BD150C3C0DA86A9AFCEAE297888455E86FBC254BF3A67C9AC7D682204
+ 7613EFC8FA15DB8362F79377F9FC395FDD302CF2E2D60D921C7E191E4E78B714
+ 65084A88467C3C2CB790AD3380018E095EEB27B1A9186D69785650A51993CB25
+ 
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ /ArialMT findfont /Encoding get
+ dup 32 /space put
+ dup 33 /exclam put
+ dup 34 /quotedbl put
+ dup 35 /numbersign put
+ dup 36 /dollar 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 55 /seven put
+ dup 56 /eight put
+ dup 57 /nine put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 60 /less put
+ dup 61 /equal put
+ dup 62 /greater put
+ dup 63 /question put
+ dup 64 /at 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 88 /X put
+ dup 89 /Y put
+ dup 90 /Z put
+ dup 91 /bracketleft put
+ dup 92 /backslash put
+ dup 93 /bracketright put
+ dup 94 /asciicircum put
+ dup 95 /underscore put
+ dup 96 /quoteleft 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 /braceleft put
+ dup 124 /bar put
+ dup 125 /braceright put
+ dup 126 /asciitilde put
+ dup 161 /exclamdown put
+ dup 162 /cent put
+ dup 163 /sterling put
+ dup 164 /fraction put
+ dup 165 /yen put
+ dup 166 /florin put
+ dup 167 /section put
+ dup 168 /currency put
+ dup 169 /quotesingle put
+ dup 170 /quotedblleft put
+ dup 171 /guillemotleft put
+ dup 172 /guilsinglleft put
+ dup 173 /guilsinglright put
+ dup 174 /fi put
+ dup 175 /fl put
+ dup 177 /endash put
+ dup 178 /dagger put
+ dup 179 /daggerdbl put
+ dup 180 /periodcentered put
+ dup 182 /paragraph put
+ dup 183 /bullet put
+ dup 184 /quotesinglbase put
+ dup 185 /quotedblbase put
+ dup 186 /quotedblright put
+ dup 187 /guillemotright put
+ dup 188 /ellipsis put
+ dup 189 /perthousand put
+ dup 191 /questiondown put
+ dup 193 /grave put
+ dup 194 /acute put
+ dup 195 /circumflex put
+ dup 196 /tilde put
+ dup 197 /macron put
+ dup 198 /breve put
+ dup 199 /dotaccent put
+ dup 200 /dieresis put
+ dup 202 /ring put
+ dup 203 /cedilla put
+ dup 205 /hungarumlaut put
+ dup 206 /ogonek put
+ dup 207 /caron put
+ dup 208 /emdash put
+ dup 225 /AE put
+ dup 227 /ordfeminine put
+ dup 232 /Lslash put
+ dup 233 /Oslash put
+ dup 234 /OE put
+ dup 235 /ordmasculine put
+ dup 241 /ae put
+ dup 245 /dotlessi put
+ dup 248 /lslash put
+ dup 249 /oslash put
+ dup 250 /oe put
+ dup 251 /germandbls put
+ dup 0 /onesuperior put
+ dup 127 /.notdef put
+ pop
+ end
+ %%EndResource
+ 
+ userdict /pdf_svglb get setglobal
+ end
+ [/N8/ArialMT 1 TZG
+ %%EndPageSetup
+ 0 0 792 612 re
+ W
+ n
+ n
+ 5.03999 4.79999 779.28 603.12 re
+ [/DeviceRGB] cs 1 1 1 sc
+ 
+ f
+ 0.23999 w
+ 1 J
+ 2 j
+ 1 M
+ n
+ 53.04 597.84 m
+ 783.84 597.84 l
+ 783.84 107.52 l
+ 53.04 107.52 l
+ 53.04 597.84 l
+ h
+ 0 0 0 sc
+ S
+ q
+ n
+ 53.04 189.12 730.8 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 53.04 189.36 m
+ 783.84 189.36 l
+ S
+ Q
+ q
+ n
+ 53.04 270.72 730.8 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 53.04 270.96 m
+ 783.84 270.96 l
+ S
+ Q
+ q
+ n
+ 53.04 352.56 730.8 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 53.04 352.8 m
+ 783.84 352.8 l
+ S
+ Q
+ q
+ n
+ 53.04 434.16 730.8 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 53.04 434.4 m
+ 783.84 434.4 l
+ S
+ Q
+ q
+ n
+ 53.04 598.8 m
+ 53.04 106.56 l
+ 783.84 106.56 l
+ 783.84 598.8 l
+ 214.56 586.56 m
+ 214.56 516 l
+ 331.2 516 l
+ 331.2 586.56 l
+ h
+ eoclip
+ n
+ 1 j
+ 10 M
+ n
+ 53.04 516.24 m
+ 783.84 516.24 l
+ S
+ Q
+ q
+ n
+ 53.04 597.6 730.8 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 53.04 597.84 m
+ 783.84 597.84 l
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 0.959991 612 m
+ 0.959991 0.959991 l
+ 788.4 0.959991 l
+ 788.4 612 l
+ 214.56 586.56 m
+ 214.56 516 l
+ 331.2 516 l
+ 331.2 586.56 l
+ h
+ eoclip
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 53.04 107.52 730.8 490.32 re
+ 0.501999 0.501999 0.501999 sc
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 53.28 107.52 24.48 405.36 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 60.48 107.52 9.84 398.16 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 98.88 107.52 24.72 288.96 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 106.08 107.52 10.08 281.76 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 144.72 107.52 24.48 384 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 151.92 107.52 9.84 376.8 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 190.32 107.52 24.48 380.16 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 197.52 107.52 9.84 372.96 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 235.92 107.52 24.72 74.16 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 243.12 107.52 10.08 66.96 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 281.76 107.52 24.48 165.84 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 288.96 107.52 9.84 158.64 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 327.36 107.52 24.48 209.76 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 334.56 107.52 9.84 202.56 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 372.96 107.52 24.72 110.16 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 380.16 107.52 10.08 102.96 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 418.8 107.52 24.48 406.32 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 426 107.52 9.84 399.12 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 464.4 107.52 24.48 110.88 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 471.6 107.52 9.84 103.68 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 510 107.52 24.48 397.92 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 517.2 107.52 9.84003 390.72 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 555.6 107.52 24.72 395.76 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 562.8 107.52 10.08 388.56 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 601.44 107.52 24.48 392.64 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 608.64 107.52 9.83997 385.44 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 647.04 107.52 24.48 342.72 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 654.24 107.52 9.83997 335.52 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 692.64 107.52 24.72 345.84 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 699.84 107.52 10.08 338.64 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 738.48 107.52 24.48 361.92 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 745.68 107.52 9.84003 354.72 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 63.36 107.52 24.72 405.36 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 70.56 107.52 10.08 398.16 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 109.2 107.52 24.48 297.6 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 116.4 107.52 9.84 290.4 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 154.8 107.52 24.72 405.36 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 162 107.52 10.08 398.16 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 200.4 107.52 24.72 384 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 207.6 107.52 10.08 376.8 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 246.24 107.52 24.48 110.88 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 253.44 107.52 9.83998 103.68 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 291.84 107.52 24.72 167.04 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 299.04 107.52 10.08 159.84 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 337.44 107.52 24.72 391.92 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 344.64 107.52 10.08 384.72 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 383.28 107.52 24.48 180 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 390.48 107.52 9.84 172.8 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 428.88 107.52 24.72 414.48 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 436.08 107.52 10.08 407.28 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 474.48 107.52 24.72 347.52 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 481.68 107.52 10.08 340.32 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 520.08 107.52 24.72 397.92 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 527.28 107.52 10.08 390.72 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 565.92 107.52 24.48 395.04 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 573.12 107.52 9.83997 387.84 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 611.52 107.52 24.72 330 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 618.72 107.52 10.08 322.8 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 657.12 107.52 24.72 334.8 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 664.32 107.52 10.08 327.6 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 702.96 107.52 24.48 334.32 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 710.16 107.52 9.84003 327.12 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 748.56 107.52 24.72 368.64 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 755.76 107.52 10.08 361.44 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 73.68 107.52 24.48 414 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 80.88 107.52 9.84 406.8 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 119.28 107.52 24.72 234.72 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 126.48 107.52 10.08 227.52 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 165.12 107.52 24.48 163.2 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 172.32 107.52 9.84 156 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 210.72 107.52 24.48 374.88 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 217.92 107.52 9.84 367.68 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 256.32 107.52 24.72 265.68 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 263.52 107.52 10.08 258.48 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 302.16 107.52 24.48 81.84 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 309.36 107.52 9.84 74.64 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 347.76 107.52 24.48 179.04 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 354.96 107.52 9.84 171.84 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 393.36 107.52 24.72 57.84 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 400.56 107.52 10.08 50.64 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 439.2 107.52 24.48 339.84 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 446.4 107.52 9.84 332.64 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 484.8 107.52 24.48 63.36 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 492 107.52 9.84 56.16 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 530.4 107.52 24.48 402.48 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 537.6 107.52 9.83997 395.28 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 576 107.52 24.72 347.04 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 583.2 107.52 10.08 339.84 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 621.84 107.52 24.48 432.48 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 629.04 107.52 9.84003 425.28 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 667.44 107.52 24.48 407.04 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 674.64 107.52 9.83997 399.84 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 713.04 107.52 24.72 347.76 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 720.24 107.52 10.08 340.56 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 758.88 107.52 24.48 365.28 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 766.08 107.52 9.83997 358.08 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ 1 j
+ 10 M
+ n
+ 53.04 597.84 m
+ 53.04 107.52 l
+ S
+ n
+ 49.2 107.52 m
+ 53.04 107.52 l
+ S
+ n
+ 49.2 189.36 m
+ 53.04 189.36 l
+ S
+ n
+ 49.2 270.96 m
+ 53.04 270.96 l
+ S
+ n
+ 49.2 352.8 m
+ 53.04 352.8 l
+ S
+ n
+ 49.2 434.4 m
+ 53.04 434.4 l
+ S
+ n
+ 49.2 516.24 m
+ 53.04 516.24 l
+ S
+ n
+ 49.2 597.84 m
+ 53.04 597.84 l
+ S
+ n
+ 53.04 107.52 m
+ 783.84 107.52 l
+ S
+ n
+ 53.04 102.72 m
+ 53.04 107.52 l
+ S
+ n
+ 98.64 102.72 m
+ 98.64 107.52 l
+ S
+ n
+ 144.48 102.72 m
+ 144.48 107.52 l
+ S
+ n
+ 190.08 102.72 m
+ 190.08 107.52 l
+ S
+ n
+ 235.68 102.72 m
+ 235.68 107.52 l
+ S
+ n
+ 281.52 102.72 m
+ 281.52 107.52 l
+ S
+ n
+ 327.12 102.72 m
+ 327.12 107.52 l
+ S
+ n
+ 372.72 102.72 m
+ 372.72 107.52 l
+ S
+ n
+ 418.56 102.72 m
+ 418.56 107.52 l
+ S
+ n
+ 464.16 102.72 m
+ 464.16 107.52 l
+ S
+ n
+ 509.76 102.72 m
+ 509.76 107.52 l
+ S
+ n
+ 555.36 102.72 m
+ 555.36 107.52 l
+ S
+ n
+ 601.2 102.72 m
+ 601.2 107.52 l
+ S
+ n
+ 646.8 102.72 m
+ 646.8 107.52 l
+ S
+ n
+ 692.4 102.72 m
+ 692.4 107.52 l
+ S
+ n
+ 738.24 102.72 m
+ 738.24 107.52 l
+ S
+ n
+ 783.84 102.72 m
+ 783.84 107.52 l
+ S
+ 36.96 103.44 m
+ /N8 12 Tf
+ (0) show
+ 26.88 185.28 m
+ (0.2)
+ [6.71199 3.37599 6.71199 ] pdfxs
+ 26.88 266.88 m
+ (0.4)
+ [6.71199 3.37599 6.71199 ] pdfxs
+ 26.88 348.72 m
+ (0.6)
+ [6.71199 3.37599 6.71199 ] pdfxs
+ 26.88 430.32 m
+ (0.8)
+ [6.71199 3.37599 6.71199 ] pdfxs
+ 36.96 512.16 m
+ (1) show
+ 26.88 593.76 m
+ (1.2)
+ [6.71199 3.37599 6.71199 ] pdfxs
+ 69.6 95.52 m
+ /N8 [0 -15.6 15.6 0 0 0] Tf
+ (175.vpr)
+ [-8.68128 -8.68128 -8.68128 -4.34449 -7.80769 -8.68128 -5.20237 ] pdfys
+ 115.2 95.52 m
+ (197.parser-b)
+ [-8.68389 -8.68389 -8.68389 -4.3471 -8.68389 -8.68389 -5.20498 -7.8103 -8.68389 -5.20498 -5.20498 
+ -8.68389 ] pdfys
+ 161.04 95.52 m
+ (300.twolf)
+ [-8.6435 -8.6435 -8.6435 -4.30671 -4.30671 -11.2331 -8.6435 -3.43311 -4.30671 ] pdfys
+ 206.64 95.76 m
+ (bc)
+ [-8.59679 -7.7232 ] pdfys
+ 252.24 95.76 m
+ (ft)
+ [-4.32 -4.32 ] pdfys
+ 298.08 95.52 m
+ (analyzer)
+ [-8.68449 -8.68449 -8.68449 -3.47409 -7.81089 -7.81089 -8.68449 -5.20558 ] pdfys
+ 343.68 95.52 m
+ (llu-bench)
+ [-3.47109 -3.47109 -8.68148 -5.20257 -8.68148 -8.68148 -8.68148 -7.80788 -8.68148 ] pdfys
+ 389.28 95.52 m
+ (chomp) show
+ 435.12 95.52 m
+ (fpgrowth)
+ [-4.3286 -8.6654 -8.6654 -5.18649 -8.6654 -11.255 -4.3286 -8.6654 ] pdfys
+ 480.72 95.52 m
+ (espresso)
+ [-8.74248 -7.86889 -8.74248 -5.26357 -8.74248 -7.86889 -7.86889 -8.74248 ] pdfys
+ 526.32 95.52 m
+ (povray31)
+ [-8.69329 -8.69329 -7.81969 -5.21438 -8.69329 -7.81969 -8.69329 -8.69329 ] pdfys
+ 572.16 95.52 m
+ (b) show
+ (i)
+ [-3.46619 ] pdfys
+ (sort) show
+ 617.76 95.52 m
+ (health)
+ [-8.6312 -8.6312 -8.6312 -3.42081 -4.29441 -8.6312 ] pdfys
+ 663.36 95.76 m
+ (mst)
+ [-13.0975 -7.90279 -4.43959 ] pdfys
+ 709.2 95.52 m
+ (perimeter)
+ [-8.66039 -8.66039 -5.18148 -3.45 -12.9815 -8.66039 -4.3236 -8.66039 -5.18148 ] pdfys
+ 754.8 95.76 m
+ (tsp)
+ [-4.43999 -7.90319 -8.77679 ] pdfys
+ 23.52 289.44 m
+ /N10 [0 15.84 -15.84 0 0 0] Tf
+ (Cache miss ratio)
+ [11.4622 8.83273 8.83273 9.70381 8.83273 4.32002 14.1076 4.42921 8.83273 8.83273 4.32002 
+ 6.18757 8.83273 5.3003 4.42921 9.70381 ] pdfys
+ n
+ 214.8 516 116.16 70.32 re
+ 1 1 1 sc
+ f
+ n
+ 214.56 516 116.4 70.56 re
+ 0 0 0 sc
+ S
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 214.8 561.12 22.8 25.2 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ n
+ 219.6 568.56 10.56 10.56 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ 234.48 568.08 m
+ /N8 17.76 Tf
+ (L1 Misses)
+ [9.82946 9.82946 5.03998 14.7489 3.89763 8.83491 8.83491 9.82946 8.83491 ] pdfxs
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 214.8 537.6 22.8 25.2 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ n
+ 219.6 545.04 10.56 10.56 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ 234.48 544.56 m
+ (L2 Misses)
+ [9.82946 9.82946 5.03998 14.7489 3.89763 8.83491 8.83491 9.82946 8.83491 ] pdfxs
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 214.8 516.24 22.8 23.04 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ n
+ 219.6 521.52 10.56 10.56 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ 234.48 521.04 m
+ (TLB Misses)
+ [10.7997 9.82305 11.7945 5.03997 14.7424 3.89122 8.8285 8.8285 9.82305 8.8285 ] pdfxs
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Trailer
+ %%DocumentProcessColors: Cyan Magenta Yellow Black
+ %%DocumentSuppliedResources:
+ %%+ font ArialMT
+ %%+ font Arial-BoldMT
+ %%+ procset (Adobe Acrobat - PDF operators) 1.2 0
+ %%+ procset (Adobe Acrobat - type operators) 1.2 0
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial -150 3016 V 76 3101 a Fn(Figur)o(e)18 b(10.)h
+ Fj(Ratio)f(of)f(misses)g(at)h(L1/L2/TLB:)f(FullP)-6 b(A/NoP)g(A)-150
+ 3354 y Fz(correlated)22 b(at)g(all)g(the)g(three)g(le)n(v)o(els)g(of)g
+ (the)g(memory)h(hierarchy)-5 b(.)22 b(This)g(in-)-150
+ 3437 y(dicates)i(that)g(in)g(these)g(cases,)h(the)f(performance)h
+ (bene\002ts)f(are)g(primarily)-150 3520 y(due)f(to)f(smaller)g(w)o
+ (orking)h(sets,)f(which)h(w)o(ould)g(be)f(produced)i(by)f(defrag-)-150
+ 3603 y(menting)d(the)f(heap.)-50 3686 y(T)-6 b(o)28 b(characterize)i
+ (this)e(ef)n(fect,)h(we)g(discuss)g(chomp)h(in)f(more)g(detail.)-150
+ 3769 y(Chomp)16 b(allocates)f(three)g(dif)n(ferent)h(nodes,)g(which)f
+ (we)g(call)g(L,)f(P)-8 b(,)14 b(&)h(D.)f(L)h(is)-150
+ 3852 y(an)j(8-byte)g(object)g(of)f(type)p 576 3852 24
+ 4 v 46 w Fs(list)p Fz(,)h(P)f(is)g(a)g(16-byte)i(object)e(of)h(type)p
+ 1643 3852 V 46 w Fs(play)p Fz(,)-150 3935 y(and)27 b(D)f(is)f(an)i
+ (array)f(of)g(int.)g(Chomp)h(uses)f(an)h(irre)o(gular)f(allocation)g
+ (pat-)-150 4018 y(tern,)c(b)o(ut)g(generally)i(intermix)o(es)e(object)h
+ (allocations)g(\(e.g.)f(it)g(starts)g(with)-150 4101
+ y(DPDLDPDLDLDDDPDLDL...\).)10 b(When)15 b(using)g(malloc,)g(these)g
+ (objects)-150 4184 y(are)25 b(interspersed)i(on)f(the)f(heap,)h
+ (roughly)h(corresponding)g(to)f(allocation)-150 4267
+ y(order)h(\(reuse)g(of)g(freed)g(memory)h(mak)o(es)g(it)e(ine)o
+ (xact\).)h(When)g(using)g(the)-150 4350 y(pool)21 b(allocator)m(,)g
+ (the)g(three)f(dif)n(ferent)h(objects)g(are)g(put)g(in)g(separate)g
+ (pools,)-150 4433 y(and)16 b(objects)g(in)f(each)h(pool)f(are)h
+ (roughly)g(in)f(allocation)h(order)g(\(P)e(is)h(e)o(xactly)-150
+ 4516 y(in)k(allocation)g(order\).)-50 4599 y(These)f(layout)h(patterns)
+ f(mean)h(that,)f(without)g(Pool)g(Allocation,)h(the)f(L)-150
+ 4682 y(and)h(P)e(list)h(nodes)h(are)f(dispersed)h(in)f(memory)h(\(e.g.)
+ f(with)g(v)n(ariable)g(strides)-150 4765 y(of)d(100-500)j(bytes)d(for)h
+ (the)f(P)g(objects\))g(whereas)h(the)g(pool)g(allocator)f(packs)-150
+ 4848 y(them)33 b(together)h(\(achie)n(ving)h(a)e(perfect)h(stride)f(of)
+ g(20)h(bytes)f(for)h(the)f(P)-150 4932 y(objects,)20
+ b(16)g(for)f(the)h(object)g(and)g(4)g(for)g(the)g(object)g(header\).)g
+ (This)f(change)-150 5015 y(dramatically)31 b(reduces)h(the)f(cache)g
+ (footprint)g(of)g(link)o(ed)h(list)e(tra)o(v)o(ersals)-150
+ 5098 y(o)o(v)o(er)24 b(the)f(P)g(and)h(L)f(nodes.)h(In)f(the)h(case)f
+ (of)h(the)f(P)g(list,)f(it)h(yields)g(optimal)-150 5181
+ y(cache)28 b(density)f(and)h(pro)o(vides)f(the)g(hardw)o(are)h(stride)f
+ (prefetcher)g(with)f(a)-150 5264 y(linear)d(access)g(pattern.)g(This)g
+ (combination)h(pro)o(vides)g(a)f(reduction)h(from)-150
+ 5347 y(251M)j(L1)f(misses)h(to)f(63M)h(L1)f(misses.)g(While)f(chomp)j
+ (is)d(an)i(e)o(xtreme)-150 5430 y(case,)19 b(it)f(illustrates)g(e)o
+ (xactly)i(the)f(ef)n(fect)g(we)f(aim)h(for)l(.)2042 66
+ y Fn(9.6)75 b(Contrib)o(utions)16 b(of)j(Indi)o(vidual)f(Optimizations)
+ 2042 183 y Fz(Figure)26 b(11)g(sho)n(ws)h(the)f(runtime)h(ratio)e(of)h
+ (each)h(program)g(with)f(one)h(op-)2042 266 y(timization)d(disabled)i
+ (at)e(a)h(time,)f(and)h(compares)h(it)e(to)g(a)h(baseline)g(of)g(all)
+ 2042 349 y(optimizations)e(on.)h(This)e(sho)n(ws)i(ho)n(w)f(much)h(the)
+ f(program)h(slo)n(ws)f(do)n(wn)2042 432 y(when)j(a)f(particular)h
+ (optimization)g(is)f(disabled,)g(which)h(is)f(correlated)h(to)2042
+ 515 y(ho)n(w)15 b(much)h(the)f(optimization)g(helps)g(the)g
+ (performance)h(of)f(the)g(code.)g(Note)2042 598 y(that)i(if)f(tw)o(o)h
+ (optimizations)h(can)f(pro)o(vide)h(the)f(speedup)i(\(e.g.)e(either)g
+ (use)g(of)2042 681 y(alignment-opt)g(or)e(b)o(ump-pointer)i(to)f
+ (reduce)h(inter)o(-object)e(padding\),)i(dis-)2042 764
+ y(abling)k(either)h(will)e(not)h(sho)n(w)h(a)f(slo)n(wdo)n(wn.)h
+ (Despite)f(this,)g(this)g(analysis)2042 847 y(does)e(pro)o(vide)h
+ (useful)g(insight)f(into)g(the)g(ef)n(fect)f(of)h(the)g(optimizations.)
+ 2106 2380 y @beginspecial 0 @llx 0 @lly 792 @urx 612
+ @ury 1728 @rhi @setspecial
+ %%BeginDocument: Tables/OptimizationEffect.ps
+ %!PS-Adobe-3.0
+ %%Title: (\376\377)
+ %%Version: 1 2
+ %%Creator: (\376\377)
+ %%CreationDate: (D:20050420113457)
+ %%For: (\376\377)
+ %%DocumentData: Clean7Bit
+ %%LanguageLevel: 2
+ %%BoundingBox: 0 0 792 612
+ %%Pages: 1
+ %%DocumentProcessColors: (atend)
+ %%DocumentSuppliedResources: (atend)
+ %%EndComments
+ %%BeginDefaults
+ %%EndDefaults
+ %%BeginProlog
+ %%EndProlog
+ %%BeginSetup
+ %%BeginResource: l2check
+ %%Copyright: Copyright 1993 Adobe Systems Incorporated. All Rights Reserved.
+ systemdict /languagelevel known
+ { systemdict /languagelevel get 1 eq }
+ { true }
+ ifelse
+ {
+ initgraphics /Helvetica findfont 18 scalefont setfont
+ 72 600 moveto (Error: Your printer driver needs to be configured) dup show
+ 72 580 moveto (for printing to a PostScript Language Level 1 printer.) dup show
+ exch = =
+ /Helvetica-Bold findfont 16 scalefont setfont
+ 72 520 moveto (Windows and Unix) show
+ /Times-Roman findfont 16 scalefont setfont
+ 72 500 moveto (Select ªLanguage Level 1º in the PostScript options section) show
+ 72 480 moveto (of the Acrobat print dialog.) show
+ /Helvetica-Bold findfont 16 scalefont setfont
+ 72 440 moveto (Macintosh) show
+ /Times-Roman findfont 16 scalefont setfont
+ 72 420 moveto (In the Chooser, select your printer driver.) show
+ 72 400 moveto (Then select your printer and click the Setup button.) show
+ 72 380 moveto (Follow any on-screen dialogs that may appear.) show
+ showpage
+ quit
+ }
+ if
+ %%EndResource
+ userdict /pdf_svglb currentglobal put true setglobal
+ %%BeginResource: file Pscript_CFF PSVER
+ userdict/ct_CffDict 6 dict put ct_CffDict begin/F0Subr{systemdict/internaldict
+ known{1183615869 systemdict/internaldict get exec/FlxProc known{save true}{
+ false}ifelse}{userdict/internaldict known not{userdict/internaldict{count 0 eq
+ {/internaldict errordict/invalidaccess get exec}if dup type/integertype ne{
+ /internaldict errordict/invalidaccess get exec}if dup 1183615869 eq{pop 0}{
+ /internaldict errordict/invalidaccess get exec}ifelse}dup 14 get 1 25 dict put
+ bind executeonly put}if 1183615869 userdict/internaldict get exec/FlxProc
+ known{save true}{false}ifelse}ifelse[systemdict/internaldict known not{100
+ dict/begin cvx/mtx matrix/def cvx}if systemdict/currentpacking known{
+ currentpacking true setpacking}if{systemdict/internaldict known{1183615869
+ systemdict/internaldict get exec dup/$FlxDict known not{dup dup length exch
+ maxlength eq{pop userdict dup/$FlxDict known not{100 dict begin/mtx matrix def
+ dup/$FlxDict currentdict put end}if}{100 dict begin/mtx matrix def dup
+ /$FlxDict currentdict put end}ifelse}if/$FlxDict get begin}if grestore/exdef{
+ exch def}def/dmin exch abs 100 div def/epX exdef/epY exdef/c4y2 exdef/c4x2
+ exdef/c4y1 exdef/c4x1 exdef/c4y0 exdef/c4x0 exdef/c3y2 exdef/c3x2 exdef/c3y1
+ exdef/c3x1 exdef/c3y0 exdef/c3x0 exdef/c1y2 exdef/c1x2 exdef/c2x2 c4x2 def
+ /c2y2 c4y2 def/yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def/PickCoords{{
+ c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2}{c3x0 c3y0 c3x1
+ c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2}ifelse/y5 exdef/x5 exdef/y4 exdef
+ /x4 exdef/y3 exdef/x3 exdef/y2 exdef/x2 exdef/y1 exdef/x1 exdef/y0 exdef/x0
+ exdef}def mtx currentmatrix pop mtx 0 get abs 1e-05 lt mtx 3 get abs 1e-05 lt
+ or{/flipXY -1 def}{mtx 1 get abs 1e-05 lt mtx 2 get abs 1e-05 lt or{/flipXY 1
+ def}{/flipXY 0 def}ifelse}ifelse/erosion 1 def systemdict/internaldict known{
+ 1183615869 systemdict/internaldict get exec dup/erosion known{/erosion get
+ /erosion exch def}{pop}ifelse}if yflag{flipXY 0 eq c3y2 c4y2 eq or{false
+ PickCoords}{/shrink c3y2 c4y2 eq{0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs}ifelse
+ def/yshrink{c4y2 sub shrink mul c4y2 add}def/c1y0 c3y0 yshrink def/c1y1 c3y1
+ yshrink def/c2y0 c4y0 yshrink def/c2y1 c4y1 yshrink def/c1x0 c3x0 def/c1x1
+ c3x1 def/c2x0 c4x0 def/c2x1 c4x1 def/dY 0 c3y2 c1y2 sub round dtransform
+ flipXY 1 eq{exch}if pop abs def dY dmin lt PickCoords y2 c1y2 sub abs .001 gt{
+ c1x2 c1y2 transform flipXY 1 eq{exch}if/cx exch def/cy exch def/dY 0 y2 c1y2
+ sub round dtransform flipXY 1 eq{exch}if pop def dY round dup 0 ne{/dY exdef}{
+ pop dY 0 lt{-1}{1}ifelse/dY exdef}ifelse/erode PaintType 2 ne erosion .5 ge
+ and def erode{/cy cy .5 sub def}if/ey cy dY add def/ey ey ceiling ey sub ey
+ floor add def erode{/ey ey .5 add def}if ey cx flipXY 1 eq{exch}if itransform
+ exch pop y2 sub/eShift exch def/y1 y1 eShift add def/y2 y2 eShift add def/y3
+ y3 eShift add def}if}ifelse}{flipXY 0 eq c3x2 c4x2 eq or{false PickCoords}{
+ /shrink c3x2 c4x2 eq{0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs}ifelse def/xshrink
+ {c4x2 sub shrink mul c4x2 add}def/c1x0 c3x0 xshrink def/c1x1 c3x1 xshrink def
+ /c2x0 c4x0 xshrink def/c2x1 c4x1 xshrink def/c1y0 c3y0 def/c1y1 c3y1 def/c2y0
+ c4y0 def/c2y1 c4y1 def/dX c3x2 c1x2 sub round 0 dtransform flipXY -1 eq{exch}
+ if pop abs def dX dmin lt PickCoords x2 c1x2 sub abs .001 gt{c1x2 c1y2
+ transform flipXY -1 eq{exch}if/cy exch def/cx exch def/dX x2 c1x2 sub round 0
+ dtransform flipXY -1 eq{exch}if pop def dX round dup 0 ne{/dX exdef}{pop dX 0
+ lt{-1}{1}ifelse/dX exdef}ifelse/erode PaintType 2 ne erosion .5 ge and def
+ erode{/cx cx .5 sub def}if/ex cx dX add def/ex ex ceiling ex sub ex floor add
+ def erode{/ex ex .5 add def}if ex cy flipXY -1 eq{exch}if itransform pop x2
+ sub/eShift exch def/x1 x1 eShift add def/x2 x2 eShift add def/x3 x3 eShift add
+ def}if}ifelse}ifelse x2 x5 eq y2 y5 eq or{x5 y5 lineto}{x0 y0 x1 y1 x2 y2
+ curveto x3 y3 x4 y4 x5 y5 curveto}ifelse epY epX}systemdict/currentpacking
+ known{exch setpacking}if/exec cvx/end cvx]cvx executeonly exch{pop true exch
+ restore}{systemdict/internaldict known not{1183615869 userdict/internaldict
+ get exec exch/FlxProc exch put true}{1183615869 systemdict/internaldict get
+ exec dup length exch maxlength eq{false}{1183615869 systemdict/internaldict
+ get exec exch/FlxProc exch put true}ifelse}ifelse}ifelse{systemdict
+ /internaldict known{1183615869 systemdict/internaldict get exec/FlxProc get
+ exec}{1183615869 userdict/internaldict get exec/FlxProc get exec}ifelse}if}
+ executeonly def/F1Subr{gsave currentpoint newpath moveto}bind def/F2Subr{
+ currentpoint grestore gsave currentpoint newpath moveto}bind def/HSSubr{
+ systemdict/internaldict known not{pop 3}{1183615869 systemdict/internaldict
+ get exec dup/startlock known{/startlock get exec}{dup/strtlck known{/strtlck
+ get exec}{pop 3}ifelse}ifelse}ifelse}bind def end
+ %%EndResource
+ 
+ userdict /pdf_svglb get setglobal
+ /currentpacking where{pop currentpacking true setpacking}if
+ %%BeginResource: procset pdfvars
+ %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
+ %%Version: 5.0 6
+ %%Title: definition of dictionary of variables used by PDF & PDFText procsets
+ userdict /PDF 160 dict put
+ userdict /PDFVars 89 dict dup begin put
+ /docSetupDone false def
+ /InitAll 0 def
+ /TermAll 0 def
+ /DocInitAll 0 def
+ /DocTermAll 0 def
+ /_pdfEncodings 2 array def
+ /_pdf_str1 1 string def
+ /_pdf_i 0 def
+ /_pdf_na 0 def
+ /_pdf_showproc 0 def
+ /_italMtx [1 0 .212557 1 0 0] def
+ /_italMtx_WMode1 [1 -.212557 0 1 0 0] def
+ /_italMtxType0 [1 0 .1062785 1 0 0] def
+ /_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
+ /_basefont 0 def
+ /_basefonto 0 def
+ /_pdf_oldCIDInit null def
+ /_pdf_FontDirectory 30 dict def
+ /_categories 10 dict def
+ /_sa? true def
+ /_ColorSep5044? false def
+ /nulldict 0 dict def
+ /_processColors 0 def
+ /overprintstack null def
+ /_defaulttransfer currenttransfer def
+ /_defaultflatness currentflat def
+ /_defaulthalftone null def
+ /_defaultcolortransfer null def
+ /_defaultblackgeneration null def
+ /_defaultundercolorremoval null def
+ /_defaultcolortransfer null def
+ PDF begin
+ [/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
+ /applyInterpFunc/applystitchFunc/domainClip/encodeInput
+ /initgs/int/limit/rangeClip
+ /defineRes/findRes/setSA/pl
+ %% to keep CoolType entries in GlyphDirProcs safe from collisions with Win PS driver
+ /? /! /| /: /+ /GetGlyphDirectory
+ /pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
+ /pdf_shfill /pdf_sethalftone
+ ] {null def} bind forall
+ end
+ end
+ %%EndResource
+ PDFVars begin PDF begin
+ %%BeginResource: procset pdfutil
+ %%Copyright: Copyright 1993-1999 Adobe Systems Incorporated. All Rights Reserved.
+ %%Version: 4.0 2
+ %%Title: Basic utilities used by other PDF procsets
+ /bd {bind def} bind def
+ /ld {load def} bd
+ /bld {
+ dup length dict begin
+ { null def } forall
+ bind
+ end
+ def
+ } bd
+ /dd { PDFVars 3 1 roll put } bd
+ /xdd { exch dd } bd
+ /Level2?
+ systemdict /languagelevel known
+ { systemdict /languagelevel get 2 ge } { false } ifelse
+ def
+ /Level1? Level2? not def
+ /Level3?
+ systemdict /languagelevel known
+ {systemdict /languagelevel get 3 eq } { false } ifelse
+ def
+ /getifknown {
+ 2 copy known { get true } { pop pop false } ifelse
+ } bd
+ /here {
+ currentdict exch getifknown
+ } bd
+ /isdefined? { where { pop true } { false } ifelse } bd
+ %%EndResource
+ %%BeginResource: procset pdf
+ %%Version: 5.0 7
+ %%Copyright: Copyright 1998-2001 Adobe Systems Incorporated. All Rights Reserved.
+ %%Title: General operators for PDF, common to all Language Levels.
+ /cm { matrix astore concat } bd
+ /d /setdash ld
+ /f /fill ld
+ /h /closepath ld
+ /i {dup 0 eq {pop _defaultflatness} if setflat} bd
+ /j /setlinejoin ld
+ /J /setlinecap ld
+ /M /setmiterlimit ld
+ /n /newpath ld
+ /S /stroke ld
+ /w /setlinewidth ld
+ /W /clip ld
+ /initgs {
+ 0 setgray
+ [] 0 d
+ 0 j
+ 0 J
+ 10 M
+ 1 w
+ false setSA
+ /_defaulttransfer load settransfer
+ 0 i
+ /RelativeColorimetric ri
+ newpath
+ } bd
+ /int {
+ dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
+ exch pop add exch pop
+ } bd
+ /limit {
+ dup 2 index le { exch } if pop
+ dup 2 index ge { exch } if pop
+ } bd
+ /domainClip {
+ Domain aload pop 3 2 roll
+ limit
+ } [/Domain] bld
+ /applyInterpFunc {
+ 0 1 DimOut 1 sub
+ {
+ dup C0 exch get exch
+ dup C1 exch get exch
+ 3 1 roll
+ 1 index sub
+ 3 index
+ N exp mul add
+ exch
+ currentdict /Range_lo known
+ {
+ dup Range_lo exch get exch
+ Range_hi exch get
+ 3 2 roll limit
+ }
+ {
+ pop
+ }
+ ifelse
+ exch
+ } for
+ pop
+ } [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
+ /encodeInput {
+ NumParts 1 sub
+ 0 1 2 index
+ {
+ dup Bounds exch get
+ 2 index gt
+ { exit }
+ { dup
+ 3 index eq
+ { exit }
+ { pop } ifelse
+ } ifelse
+ } for
+ 3 2 roll pop
+ dup Bounds exch get exch
+ dup 1 add Bounds exch get exch
+ 2 mul
+ dup Encode exch get exch
+ 1 add Encode exch get
+ int
+ } [/NumParts /Bounds /Encode] bld
+ /rangeClip {
+ exch dup Range_lo exch get
+ exch Range_hi exch get
+ 3 2 roll
+ limit
+ } [/Range_lo /Range_hi] bld
+ /applyStitchFunc {
+ Functions exch get exec
+ currentdict /Range_lo known {
+ 0 1 DimOut 1 sub {
+ DimOut 1 add -1 roll
+ rangeClip
+ } for
+ } if
+ } [/Functions /Range_lo /DimOut] bld
+ /pdf_flushfilters
+ {
+ aload length
+ { dup status
+ 1 index currentfile ne and
+ { dup flushfile closefile }
+ { pop }
+ ifelse
+ } repeat
+ } bd
+ /pdf_readstring
+ {
+ 1 index dup length 1 sub get
+ exch readstring pop
+ exch pdf_flushfilters
+ } bind def
+ /pdf_dictOp
+ {
+ 3 2 roll
+ 10 dict copy
+ begin
+ _Filters dup length 1 sub get def
+ currentdict exch exec
+ _Filters pdf_flushfilters
+ end
+ } [/_Filters] bld
+ /pdf_image {{image} /DataSource pdf_dictOp} bd
+ /pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
+ /pdf_shfill {{sh} /DataSource pdf_dictOp} bd
+ /pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
+ /pdf_maskedImage
+ {
+ 10 dict copy begin
+ /miDict currentdict def
+ /DataDict DataDict 10 dict copy def
+ DataDict begin
+ /DataSource
+ _Filters dup length 1 sub get
+ def
+ miDict image
+ _Filters pdf_flushfilters
+ end
+ end
+ } [/miDict /DataDict /_Filters] bld
+ /RadialShade {
+ 40 dict begin
+ /background exch def
+ /ext1 exch def
+ /ext0 exch def
+ /BBox exch def
+ /r2 exch def
+ /c2y exch def
+ /c2x exch def
+ /r1 exch def
+ /c1y exch def
+ /c1x exch def
+ /rampdict exch def
+ gsave
+ BBox length 0 gt {
+ newpath
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ newpath
+ } if
+ c1x c2x eq
+ {
+ c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
+ }
+ {
+ /slope c2y c1y sub c2x c1x sub div def
+ /theta slope 1 atan def
+ c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
+ c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
+ }
+ ifelse
+ gsave
+ clippath
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ { pathbbox } stopped
+ { 0 0 0 0 } if
+ /yMax exch def
+ /xMax exch def
+ /yMin exch def
+ /xMin exch def
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }
+ {
+ rampdict begin
+ 40 dict begin
+ background length 0 gt { background sssetbackground gsave clippath fill grestore } if
+ gsave
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
+ /c1y 0 def
+ /c1x 0 def
+ /c2x 0 def
+ ext0 {
+ 0 getrampcolor
+ c2y r2 add r1 lt
+ {
+ c1x c1y r1 360 0 arcn
+ xMin yMin moveto
+ xMax yMin lineto
+ xMax yMax lineto
+ xMin yMax lineto
+ xMin yMin lineto
+ eofill
+ }
+ {
+ c2y r1 add r2 le
+ {
+ c1x c1y r1 0 360 arc
+ fill
+ }
+ {
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r1 neg def
+ /p1y c1y def
+ /p2x r1 def
+ /p2y c1y def
+ p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
+ fill
+ }
+ {
+ /AA r2 r1 sub c2y div def
+ /theta AA 1 AA dup mul sub sqrt div 1 atan def
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y p1x SS1 div neg def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y p2x SS2 div neg def
+ r1 r2 gt
+ {
+ /L1maxX p1x yMin p1y sub SS1 div add def
+ /L2maxX p2x yMin p2y sub SS2 div add def
+ }
+ {
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }
+ ifelse
+ }
+ ifelse
+ } ifelse
+ } if
+ c1x c2x sub dup mul
+ c1y c2y sub dup mul
+ add 0.5 exp
+ 0 dtransform
+ dup mul exch dup mul add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt { exch } if pop
+ /hires exch def
+ hires mul
+ /numpix exch def
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ } if
+ } if
+ /xInc c2x c1x sub numsteps div def
+ /yInc c2y c1y sub numsteps div def
+ /rInc r2 r1 sub numsteps div def
+ /cx c1x def
+ /cy c1y def
+ /radius r1 def
+ newpath
+ xInc 0 eq yInc 0 eq rInc 0 eq and and
+ {
+ 0 getrampcolor
+ cx cy radius 0 360 arc
+ stroke
+ NumSamples 1 sub getrampcolor
+ cx cy radius 72 hires div add 0 360 arc
+ 0 setlinewidth
+ stroke
+ }
+ {
+ 0
+ numsteps
+ {
+ dup
+ subsampling { round cvi } if
+ getrampcolor
+ cx cy radius 0 360 arc
+ /cx cx xInc add def
+ /cy cy yInc add def
+ /radius radius rInc add def
+ cx cy radius 360 0 arcn
+ eofill
+ rampIndxInc add
+ }
+ repeat
+ pop
+ } ifelse
+ ext1 {
+ c2y r2 add r1 lt
+ {
+ c2x c2y r2 0 360 arc
+ fill
+ }
+ {
+ c2y r1 add r2 le
+ {
+ c2x c2y r2 360 0 arcn
+ xMin yMin moveto
+ xMax yMin lineto
+ xMax yMax lineto
+ xMin yMax lineto
+ xMin yMin lineto
+ eofill
+ }
+ {
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r2 neg def
+ /p1y c2y def
+ /p2x r2 def
+ /p2y c2y def
+ p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
+ fill
+ }
+ {
+ /AA r2 r1 sub c2y div def
+ /theta AA 1 AA dup mul sub sqrt div 1 atan def
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y c2y p1x SS1 div sub def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y c2y p2x SS2 div sub def
+ r1 r2 lt
+ {
+ /L1maxX p1x yMax p1y sub SS1 div add def
+ /L2maxX p2x yMax p2y sub SS2 div add def
+ }
+ {
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }
+ ifelse
+ }
+ ifelse
+ } ifelse
+ } if
+ grestore
+ grestore
+ end
+ end
+ end
+ } ifelse
+ } bd
+ /GenStrips {
+ 40 dict begin
+ /background exch def
+ /ext1 exch def
+ /ext0 exch def
+ /BBox exch def
+ /y2 exch def
+ /x2 exch def
+ /y1 exch def
+ /x1 exch def
+ /rampdict exch def
+ gsave
+ BBox length 0 gt {
+ newpath
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ newpath
+ } if
+ x1 x2 eq
+ {
+ y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
+ }
+ {
+ /slope y2 y1 sub x2 x1 sub div def
+ /theta slope 1 atan def
+ x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
+ x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
+ }
+ ifelse
+ gsave
+ clippath
+ x1 y1 translate
+ theta rotate
+ { pathbbox } stopped
+ { 0 0 0 0 } if
+ /yMax exch def
+ /xMax exch def
+ /yMin exch def
+ /xMin exch def
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }
+ {
+ rampdict begin
+ 20 dict begin
+ background length 0 gt { background sssetbackground gsave clippath fill grestore } if
+ gsave
+ x1 y1 translate
+ theta rotate
+ /xStart 0 def
+ /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
+ /ySpan yMax yMin sub def
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ xStart 0 transform
+ xEnd 0 transform
+ 3 -1 roll
+ sub dup mul
+ 3 1 roll
+ sub dup mul
+ add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt { exch } if pop
+ mul
+ /numpix exch def
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ } if
+ } if
+ ext0 {
+ 0 getrampcolor
+ xMin xStart lt
+ { xMin yMin xMin neg ySpan rectfill } if
+ } if
+ /xInc xEnd xStart sub numsteps div def
+ /x xStart def
+ 0
+ numsteps
+ {
+ dup
+ subsampling { round cvi } if
+ getrampcolor
+ x yMin xInc ySpan rectfill
+ /x x xInc add def
+ rampIndxInc add
+ }
+ repeat
+ pop
+ ext1 {
+ xMax xEnd gt
+ { xEnd yMin xMax xEnd sub ySpan rectfill } if
+ } if
+ grestore
+ grestore
+ end
+ end
+ end
+ } ifelse
+ } bd
+ %%EndResource
+ %%BeginResource: procset pdflev2
+ %%Version: 5.0 15
+ %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
+ %%LanguageLevel: 2
+ %%Title: PDF operators, with code specific for Level 2
+ /docinitialize {
+ PDF begin
+ /_defaulthalftone currenthalftone dd
+ /_defaultblackgeneration currentblackgeneration dd
+ /_defaultundercolorremoval currentundercolorremoval dd
+ /_defaultcolortransfer [currentcolortransfer] dd
+ /_defaulttransfer currenttransfer dd
+ end
+ PDFVars /docSetupDone true put
+ } bd
+ /initialize {
+ PDFVars /docSetupDone get {
+ _defaulthalftone sethalftone
+ /_defaultblackgeneration load setblackgeneration
+ /_defaultundercolorremoval load setundercolorremoval
+ _defaultcolortransfer aload pop setcolortransfer
+ } if
+ false setoverprint
+ } bd
+ /terminate { } bd
+ /c /curveto ld
+ /cs /setcolorspace ld
+ /l /lineto ld
+ /m /moveto ld
+ /q /gsave ld
+ /Q /grestore ld
+ /sc /setcolor ld
+ /setSA/setstrokeadjust ld
+ /re {
+ 4 2 roll m
+ 1 index 0 rlineto
+ 0 exch rlineto
+ neg 0 rlineto
+ h
+ } bd
+ /concattransferfuncs {
+ [ 3 1 roll /exec load exch /exec load ] cvx
+ } bd
+ /concatandsettransfer {
+ /_defaulttransfer load concattransferfuncs settransfer
+ } bd
+ /concatandsetcolortransfer {
+ _defaultcolortransfer aload pop
+ 8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
+ 6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
+ 4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
+ concattransferfuncs
+ setcolortransfer
+ } bd
+ /defineRes/defineresource ld
+ /findRes/findresource ld
+ currentglobal
+ true systemdict /setglobal get exec
+ [/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource /Image]
+ { /Generic /Category findresource dup length dict copy /Category defineresource pop }
+ forall
+ systemdict /setglobal get exec
+ /ri
+ {
+ /findcolorrendering isdefined?
+ {
+ mark exch
+ findcolorrendering
+ counttomark 2 eq
+ { type /booleantype eq
+ { dup type /nametype eq
+ { dup /ColorRendering resourcestatus
+ { pop pop
+ dup /DefaultColorRendering ne
+ {
+ /ColorRendering findresource
+ setcolorrendering
+ } if
+ } if
+ } if
+ } if
+ } if
+ cleartomark
+ }
+ { pop
+ } ifelse
+ } bd
+ /knownColorants? {
+ pop false
+ } bd
+ /getrampcolor {
+ /indx exch def
+ 0 1 NumComp 1 sub {
+ dup
+ Samples exch get
+ dup type /stringtype eq { indx get } if
+ exch
+ Scaling exch get aload pop
+ 3 1 roll
+ mul add
+ } for
+ setcolor
+ } bd
+ /sssetbackground { aload pop setcolor } bd
+ %%EndResource
+ %%BeginResource: procset pdftext
+ %%Version: 5.0 6
+ %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
+ %%Title: Text operators for PDF
+ PDF /PDFText 78 dict dup begin put
+ /docinitialize
+ {
+ /resourcestatus where {
+ pop
+ /CIDParams /ProcSet resourcestatus {
+ pop pop
+ false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
+ } if
+ } if
+ PDF begin
+ PDFText /_pdfDefineIdentity-H known
+ { PDFText /_pdfDefineIdentity-H get exec}
+ if
+ end
+ } bd
+ /initialize {
+ PDFText begin
+ } bd
+ /terminate { end } bd
+ Level2?
+ {
+ /_safeput
+ {
+ 3 -1 roll load 3 1 roll put
+ }
+ bd
+ }
+ {
+ /_safeput
+ {
+ 2 index load dup dup length exch maxlength ge
+ { dup length 5 add dict copy
+ 3 index xdd
+ }
+ { pop }
+ ifelse
+ 3 -1 roll load 3 1 roll put
+ }
+ bd
+ }
+ ifelse
+ /pdf_has_composefont? systemdict /composefont known def
+ /CopyFont {
+ {
+ 1 index /FID ne 2 index /UniqueID ne and
+ { def } { pop pop } ifelse
+ } forall
+ } bd
+ /Type0CopyFont
+ {
+ exch
+ dup length dict
+ begin
+ CopyFont
+ [
+ exch
+ FDepVector
+ {
+ dup /FontType get 0 eq
+ {
+ 1 index Type0CopyFont
+ /_pdfType0 exch definefont
+ }
+ {
+ /_pdfBaseFont exch
+ 2 index exec
+ }
+ ifelse
+ exch
+ }
+ forall
+ pop
+ ]
+ /FDepVector exch def
+ currentdict
+ end
+ } bd
+ Level2? {currentglobal true setglobal} if
+ /cHexEncoding
+ [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
+ /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
+ /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
+ /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
+ /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
+ /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
+ /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
+ /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
+ /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
+ /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
+ /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
+ /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
+ /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
+ /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
+ Level2? {setglobal} if
+ /modEnc {
+ /_enc xdd
+ /_icode 0 dd
+ counttomark 1 sub -1 0
+ {
+ index
+ dup type /nametype eq
+ {
+ _enc _icode 3 -1 roll put
+ _icode 1 add
+ }
+ if
+ /_icode xdd
+ } for
+ cleartomark
+ _enc
+ } bd
+ /trEnc {
+ /_enc xdd
+ 255 -1 0 {
+ exch dup -1 eq
+ { pop /.notdef }
+ { Encoding exch get }
+ ifelse
+ _enc 3 1 roll put
+ } for
+ pop
+ _enc
+ } bd
+ /TE {
+ /_i xdd
+ StandardEncoding 256 array copy modEnc
+ _pdfEncodings exch _i exch put
+ } bd
+ /TZ
+ {
+ /_usePDFEncoding xdd
+ findfont
+ dup length 6 add dict
+ begin
+ {
+ 1 index /FID ne { def } { pop pop } ifelse
+ } forall
+ /pdf_origFontName FontName def
+ /FontName exch def
+ currentdict /PaintType known
+ { PaintType 2 eq {/PaintType 0 def} if }
+ if
+ _usePDFEncoding 0 ge
+ {
+ /Encoding _pdfEncodings _usePDFEncoding get def
+ pop
+ }
+ {
+ _usePDFEncoding -1 eq
+ {
+ counttomark 0 eq
+ { pop }
+ {
+ Encoding 256 array copy
+ modEnc /Encoding exch def
+ }
+ ifelse
+ }
+ {
+ 256 array
+ trEnc /Encoding exch def
+ }
+ ifelse
+ }
+ ifelse
+ pdf_EuroProcSet pdf_origFontName known
+ {
+ pdf_origFontName pdf_AddEuroGlyphProc
+ } if
+ Level2?
+ {
+ currentdict /pdf_origFontName undef
+ } if
+ FontName currentdict
+ end
+ definefont pop
+ }
+ bd
+ Level2?
+ {
+ /TZG
+ {
+ currentglobal true setglobal
+ 2 index _pdfFontStatus
+ {
+ 2 index findfont
+ false setglobal
+ 3 index findfont
+ true setglobal
+ ne
+ {
+ 2 index findfont dup rcheck
+ {
+ dup length dict begin
+ {
+ 1 index /FID ne { def } { pop pop } ifelse
+ } forall
+ currentdict end
+ }
+ if
+ 3 index exch definefont pop
+ }
+ if
+ } if
+ setglobal
+ TZ
+ } bd
+ }
+ {
+ /TZG {TZ} bd
+ } ifelse
+ Level2?
+ {
+ currentglobal false setglobal
+ userdict /pdftext_data 5 dict put
+ pdftext_data
+ begin
+ /saveStacks
+ {
+ pdftext_data
+ begin
+ /vmmode currentglobal def
+ false setglobal
+ count array astore /os exch def
+ end
+ countdictstack array dictstack pdftext_data exch /ds exch put
+ cleardictstack pdftext_data /dscount countdictstack put
+ pdftext_data /vmmode get setglobal
+ } bind def
+ /restoreStacks
+ {
+ pdftext_data /vmmode currentglobal put false setglobal
+ clear cleardictstack
+ pdftext_data /ds get dup
+ pdftext_data /dscount get 1 2 index length 1 sub
+ { get begin dup } for
+ pop pop
+ pdftext_data /os get aload pop
+ pdftext_data /vmmode get setglobal
+ } bind def
+ /testForClonePrinterBug
+ {
+ currentglobal true setglobal
+ /undefinedCategory /Generic /Category findresource
+ dup length dict copy /Category defineresource pop
+ setglobal
+ pdftext_data /saveStacks get exec
+ pdftext_data /vmmode currentglobal put false setglobal
+ /undefined /undefinedCategory { resourcestatus } stopped
+ pdftext_data exch /bugFound exch put
+ pdftext_data /vmmode get setglobal
+ pdftext_data /restoreStacks get exec
+ pdftext_data /bugFound get
+ } bind def
+ end
+ setglobal
+ /pdf_resourcestatus
+ pdftext_data /testForClonePrinterBug get exec
+ {
+ {
+ pdftext_data /saveStacks get exec
+ pdftext_data /os get dup dup length 1 sub
+ dup 1 sub dup 0 lt { pop 0 } if
+ exch 1 exch { get exch dup } for
+ pop pop
+ { resourcestatus }
+ stopped
+ {
+ clear cleardictstack pdftext_data /restoreStacks get exec
+ { pop pop } stopped pop false
+ }
+ {
+ count array astore pdftext_data exch /results exch put
+ pdftext_data /restoreStacks get exec pop pop
+ pdftext_data /results get aload pop
+ }
+ ifelse
+ }
+ }
+ { { resourcestatus } }
+ ifelse
+ bd
+ }
+ if
+ Level2?
+ {
+ /_pdfUndefineResource
+ {
+ currentglobal 3 1 roll
+ _pdf_FontDirectory 2 index 2 copy known
+ {undef}
+ {pop pop}
+ ifelse
+ 1 index (pdf) exch _pdfConcatNames 1 index
+ 1 index 1 _pdfConcatNames 1 index
+ 5 index 1 _pdfConcatNames 1 index
+ 4
+ {
+ 2 copy pdf_resourcestatus
+ {
+ pop 2 lt
+ {2 copy findresource gcheck setglobal undefineresource}
+ {pop pop}
+ ifelse
+ }
+ { pop pop}
+ ifelse
+ } repeat
+ setglobal
+ } bd
+ }
+ {
+ /_pdfUndefineResource { pop pop} bd
+ }
+ ifelse
+ Level2?
+ {
+ /_pdfFontStatus
+ {
+ currentglobal exch
+ /Font pdf_resourcestatus
+ {pop pop true}
+ {false}
+ ifelse
+ exch setglobal
+ } bd
+ }
+ {
+ /_pdfFontStatusString 50 string def
+ _pdfFontStatusString 0 (fonts/) putinterval
+ /_pdfFontStatus
+ {
+ FontDirectory 1 index known
+ { pop true }
+ {
+ _pdfFontStatusString 6 42 getinterval
+ cvs length 6 add
+ _pdfFontStatusString exch 0 exch getinterval
+ { status } stopped
+ {pop false}
+ {
+ { pop pop pop pop true}
+ { false }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ }
+ ifelse
+ Level2?
+ {
+ /_pdfCIDFontStatus
+ {
+ /CIDFont /Category pdf_resourcestatus
+ {
+ pop pop
+ /CIDFont pdf_resourcestatus
+ {pop pop true}
+ {false}
+ ifelse
+ }
+ { pop false }
+ ifelse
+ } bd
+ }
+ if
+ /_pdfString100 100 string def
+ /_pdfComposeFontName
+ {
+ dup length 1 eq
+ {
+ 0 get
+ 1 index
+ type /nametype eq
+ {
+ _pdfString100 cvs
+ length dup dup _pdfString100 exch (-) putinterval
+ _pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
+ 2 index exch cvs length
+ add 1 add _pdfString100 exch 0 exch getinterval
+ exch pop
+ true
+ }
+ {
+ pop pop
+ false
+ }
+ ifelse
+ }
+ {
+ false
+ }
+ ifelse
+ dup {exch cvn exch} if
+ } bd
+ /_pdfConcatNames
+ {
+ exch
+ _pdfString100 cvs
+ length dup dup _pdfString100 exch (-) putinterval
+ _pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
+ 3 -1 roll exch cvs length
+ add 1 add _pdfString100 exch 0 exch getinterval
+ cvn
+ } bind def
+ /_pdfTextTempString 50 string def
+ /_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
+ /_pdf_CheckCIDSystemInfo
+ {
+ 1 index _pdfTextTempString cvs
+ (Identity) anchorsearch
+ {
+ pop pop pop pop true
+ }
+ {
+ false
+ _pdfRegOrderingArray
+ {
+ 2 index exch
+ anchorsearch
+ { pop pop pop true exit}
+ { pop }
+ ifelse
+ }
+ forall
+ exch pop
+ exch /CIDFont findresource
+ /CIDSystemInfo get
+ 3 -1 roll /CMap findresource
+ /CIDSystemInfo get
+ exch
+ 3 -1 roll
+ {
+ 2 copy
+ /Supplement get
+ exch
+ dup type /dicttype eq
+ {/Supplement get}
+ {pop 0 }
+ ifelse
+ ge
+ }
+ { true }
+ ifelse
+ {
+ dup /Registry get
+ 2 index /Registry get eq
+ {
+ /Ordering get
+ exch /Ordering get
+ dup type /arraytype eq
+ {
+ 1 index type /arraytype eq
+ {
+ true
+ 1 index length 1 sub -1 0
+ {
+ dup 2 index exch get exch 3 index exch get ne
+ { pop false exit}
+ if
+ } for
+ exch pop exch pop
+ }
+ { pop pop false }
+ ifelse
+ }
+ {
+ eq
+ }
+ ifelse
+ }
+ { pop pop false }
+ ifelse
+ }
+ { pop pop false }
+ ifelse
+ }
+ ifelse
+ } bind def
+ pdf_has_composefont?
+ {
+ /_pdfComposeFont
+ {
+ 2 copy _pdfComposeFontName not
+ {
+ 2 index
+ }
+ if
+ (pdf) exch _pdfConcatNames
+ dup _pdfFontStatus
+ { dup findfont 5 2 roll pop pop pop true}
+ {
+ 4 1 roll
+ 1 index /CMap pdf_resourcestatus
+ {
+ pop pop
+ true
+ }
+ {false}
+ ifelse
+ 1 index true exch
+ {
+ _pdfCIDFontStatus not
+ {pop false exit}
+ if
+ }
+ forall
+ and
+ {
+ 1 index 1 index 0 get _pdf_CheckCIDSystemInfo
+ {
+ 3 -1 roll pop
+ 2 index 3 1 roll
+ composefont true
+ }
+ {
+ pop pop exch pop false
+ }
+ ifelse
+ }
+ {
+ _pdfComposeFontName
+ {
+ dup _pdfFontStatus
+ {
+ exch pop
+ 1 index exch
+ findfont definefont true
+ }
+ {
+ pop exch pop
+ false
+ }
+ ifelse
+ }
+ {
+ exch pop
+ false
+ }
+ ifelse
+ }
+ ifelse
+ { true }
+ {
+ dup _pdfFontStatus
+ { dup findfont true }
+ { pop false }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ }
+ {
+ /_pdfComposeFont
+ {
+ _pdfComposeFontName not
+ {
+ dup
+ }
+ if
+ dup
+ _pdfFontStatus
+ {exch pop dup findfont true}
+ {
+ 1 index
+ dup type /nametype eq
+ {pop}
+ {cvn}
+ ifelse
+ eq
+ {pop false}
+ {
+ dup _pdfFontStatus
+ {dup findfont true}
+ {pop false}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ }
+ ifelse
+ /_pdfStyleDicts 4 dict dup begin
+ /Adobe-Japan1 4 dict dup begin
+ Level2?
+ {
+ /Serif
+ /HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
+ {/HeiseiMin-W3}
+ {
+ /HeiseiMin-W3 _pdfCIDFontStatus
+ {/HeiseiMin-W3}
+ {/Ryumin-Light}
+ ifelse
+ }
+ ifelse
+ def
+ /SansSerif
+ /HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
+ {/HeiseiKakuGo-W5}
+ {
+ /HeiseiKakuGo-W5 _pdfCIDFontStatus
+ {/HeiseiKakuGo-W5}
+ {/GothicBBB-Medium}
+ ifelse
+ }
+ ifelse
+ def
+ /HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
+ {/HeiseiMaruGo-W4}
+ {
+ /HeiseiMaruGo-W4 _pdfCIDFontStatus
+ {/HeiseiMaruGo-W4}
+ {
+ /Jun101-Light-RKSJ-H _pdfFontStatus
+ { /Jun101-Light }
+ { SansSerif }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ /RoundSansSerif exch def
+ /Default Serif def
+ }
+ {
+ /Serif /Ryumin-Light def
+ /SansSerif /GothicBBB-Medium def
+ {
+ (fonts/Jun101-Light-83pv-RKSJ-H) status
+ }stopped
+ {pop}{
+ { pop pop pop pop /Jun101-Light }
+ { SansSerif }
+ ifelse
+ /RoundSansSerif exch def
+ }ifelse
+ /Default Serif def
+ }
+ ifelse
+ end
+ def
+ /Adobe-Korea1 4 dict dup begin
+ /Serif /HYSMyeongJo-Medium def
+ /SansSerif /HYGoThic-Medium def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ /Adobe-GB1 4 dict dup begin
+ /Serif /STSong-Light def
+ /SansSerif /STHeiti-Regular def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ /Adobe-CNS1 4 dict dup begin
+ /Serif /MKai-Medium def
+ /SansSerif /MHei-Medium def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ end
+ def
+ /TZzero
+ {
+ /_wmode xdd
+ /_styleArr xdd
+ /_regOrdering xdd
+ 3 copy
+ _pdfComposeFont
+ {
+ 5 2 roll pop pop pop
+ }
+ {
+ [
+ 0 1 _styleArr length 1 sub
+ {
+ _styleArr exch get
+ _pdfStyleDicts _regOrdering 2 copy known
+ {
+ get
+ exch 2 copy known not
+ { pop /Default }
+ if
+ get
+ }
+ {
+ pop pop pop /Unknown
+ }
+ ifelse
+ }
+ for
+ ]
+ exch pop
+ 2 index 3 1 roll
+ _pdfComposeFont
+ {3 -1 roll pop}
+ {
+ findfont dup /FontName get exch
+ }
+ ifelse
+ }
+ ifelse
+ dup /WMode 2 copy known
+ { get _wmode ne }
+ { pop pop _wmode 1 eq}
+ ifelse
+ {
+ exch _wmode _pdfConcatNames
+ dup _pdfFontStatus
+ { exch pop dup findfont false}
+ { exch true }
+ ifelse
+ }
+ {
+ dup /FontType get 0 ne
+ }
+ ifelse
+ {
+ dup /FontType get 3 eq _wmode 1 eq and
+ {
+ _pdfVerticalRomanT3Font dup length 10 add dict copy
+ begin
+ /_basefont exch
+ dup length 3 add dict
+ begin
+ {1 index /FID ne {def}{pop pop} ifelse }
+ forall
+ /Encoding Encoding dup length array copy
+ dup 16#27 /quotesingle put
+ dup 16#60 /grave put
+ _regOrdering /Adobe-Japan1 eq
+ {dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
+ if
+ def
+ FontName
+ currentdict
+ end
+ definefont
+ def
+ /Encoding _basefont /Encoding get def
+ /_fauxfont true def
+ }
+ {
+ dup length 3 add dict
+ begin
+ {1 index /FID ne {def}{pop pop} ifelse }
+ forall
+ FontType 0 ne
+ {
+ /Encoding Encoding dup length array copy
+ dup 16#27 /quotesingle put
+ dup 16#60 /grave put
+ _regOrdering /Adobe-Japan1 eq
+ {dup 16#5c /yen put}
+ if
+ def
+ /_fauxfont true def
+ } if
+ } ifelse
+ /WMode _wmode def
+ dup dup /FontName exch def
+ currentdict
+ end
+ definefont pop
+ }
+ {
+ pop
+ }
+ ifelse
+ /_pdf_FontDirectory 3 1 roll _safeput
+ }
+ bd
+ Level2?
+ {
+ /Tf {
+ _pdf_FontDirectory 2 index 2 copy known
+ {get exch 3 -1 roll pop}
+ {pop pop}
+ ifelse
+ selectfont
+ } bd
+ }
+ {
+ /Tf {
+ _pdf_FontDirectory 2 index 2 copy known
+ {get exch 3 -1 roll pop}
+ {pop pop}
+ ifelse
+ exch findfont exch
+ dup type /arraytype eq
+ {makefont}
+ {scalefont}
+ ifelse
+ setfont
+ } bd
+ }
+ ifelse
+ /cshow where
+ {
+ pop /pdf_cshow /cshow load dd
+ /pdf_remove2 {pop pop} dd
+ }
+ {
+ /pdf_cshow {exch forall} dd
+ /pdf_remove2 {} dd
+ } ifelse
+ /pdf_xshow
+ {
+ /_pdf_na xdd
+ /_pdf_i 0 dd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ {
+ pdf_remove2
+ _pdf_str1 exch 0 exch put
+ _pdf_str1 /_pdf_showproc load exec
+ {_pdf_na _pdf_i get} stopped
+ { pop pop }
+ {
+ _pdf_x _pdf_y moveto
+ 0
+ rmoveto
+ }
+ ifelse
+ _pdf_i 1 add /_pdf_i xdd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ }
+ exch
+ pdf_cshow
+ } bd
+ /pdf_yshow
+ {
+ /_pdf_na xdd
+ /_pdf_i 0 dd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ {
+ pdf_remove2
+ _pdf_str1 exch 0 exch put
+ _pdf_str1 /_pdf_showproc load exec
+ {_pdf_na _pdf_i get} stopped
+ { pop pop }
+ {
+ _pdf_x _pdf_y moveto
+ 0 exch
+ rmoveto
+ }
+ ifelse
+ _pdf_i 1 add /_pdf_i xdd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ }
+ exch
+ pdf_cshow
+ } bd
+ /pdf_xyshow
+ {
+ /_pdf_na xdd
+ /_pdf_i 0 dd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ {
+ pdf_remove2
+ _pdf_str1 exch 0 exch put
+ _pdf_str1 /_pdf_showproc load exec
+ {_pdf_na _pdf_i get} stopped
+ { pop pop }
+ {
+ {_pdf_na _pdf_i 1 add get} stopped
+ { pop pop pop}
+ {
+ _pdf_x _pdf_y moveto
+ rmoveto
+ }
+ ifelse
+ }
+ ifelse
+ _pdf_i 2 add /_pdf_i xdd
+ currentpoint
+ /_pdf_y xdd
+ /_pdf_x xdd
+ }
+ exch
+ pdf_cshow
+ } bd
+ /pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
+ /pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
+ /pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
+ Level2? _ColorSep5044? not and
+ {
+ /pdfxs {{xshow} stopped {pdfl1xs} if} bd
+ /pdfys {{yshow} stopped {pdfl1ys} if} bd
+ /pdfxys {{xyshow} stopped {pdfl1xys} if} bd
+ }
+ {
+ /pdfxs /pdfl1xs load dd
+ /pdfys /pdfl1ys load dd
+ /pdfxys /pdfl1xys load dd
+ } ifelse
+ /pdf_charpath {false charpath} bd
+ /pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
+ /pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
+ /pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
+ /pdf_strokepath
+ {
+ {
+ pdf_remove2
+ _pdf_str1 exch 0 exch put
+ _pdf_str1 false charpath
+ currentpoint S moveto
+ } bind
+ exch pdf_cshow
+ } bd
+ /pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
+ /pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
+ /pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
+ Level2? {currentglobal true setglobal} if
+ /d0/setcharwidth ld
+ /nND {{/.notdef} repeat} bd
+ /T3Defs {
+ /BuildChar
+ {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+ }
+ def
+ /BuildGlyph {
+ exch begin
+ GlyphProcs exch get exec
+ end
+ } def
+ /_pdfT3Font true def
+ } bd
+ /_pdfBoldRomanWidthProc
+ {
+ stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
+ 0 0
+ } bd
+ /_pdfType0WidthProc
+ {
+ dup stringwidth 0 0 moveto
+ 2 index true charpath pathbbox
+ 0 -1
+ 7 index 2 div .88
+ setcachedevice2
+ pop
+ 0 0
+ } bd
+ /_pdfType0WMode1WidthProc
+ {
+ dup stringwidth
+ pop 2 div neg -0.88
+ 2 copy
+ moveto
+ 0 -1
+ 5 -1 roll true charpath pathbbox
+ setcachedevice
+ } bd
+ /_pdfBoldBaseFont
+ 11 dict begin
+ /FontType 3 def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /Encoding cHexEncoding def
+ /_setwidthProc /_pdfBoldRomanWidthProc load def
+ /_bcstr1 1 string def
+ /BuildChar
+ {
+ exch begin
+ _basefont setfont
+ _bcstr1 dup 0 4 -1 roll put
+ dup
+ _setwidthProc
+ 3 copy
+ moveto
+ show
+ _basefonto setfont
+ moveto
+ show
+ end
+ }bd
+ currentdict
+ end
+ def
+ pdf_has_composefont?
+ {
+ /_pdfBoldBaseCIDFont
+ 11 dict begin
+ /CIDFontType 1 def
+ /CIDFontName /_pdfBoldBaseCIDFont def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /_setwidthProc /_pdfType0WidthProc load def
+ /_bcstr2 2 string def
+ /BuildGlyph
+ {
+ exch begin
+ _basefont setfont
+ _bcstr2 1 2 index 256 mod put
+ _bcstr2 0 3 -1 roll 256 idiv put
+ _bcstr2 dup _setwidthProc
+ 3 copy
+ moveto
+ show
+ _basefonto setfont
+ moveto
+ show
+ end
+ }bd
+ currentdict
+ end
+ def
+ /_pdfDefineIdentity-H
+ {
+ /Identity-H /CMap PDFText /pdf_resourcestatus get exec
+ {
+ pop pop
+ }
+ {
+ /CIDInit/ProcSet findresource begin 12 dict begin
+ begincmap
+ /CIDSystemInfo
+ 3 dict begin
+ /Registry (Adobe) def
+ /Ordering (Identity) def
+ /Supplement 0 def
+ currentdict
+ end
+ def
+ /CMapName /Identity-H def
+ /CMapVersion 1 def
+ /CMapType 1 def
+ 1 begincodespacerange
+ <0000> <ffff>
+ endcodespacerange
+ 1 begincidrange
+ <0000> <ffff> 0
+ endcidrange
+ endcmap
+ CMapName currentdict/CMap defineresource pop
+ end
+ end
+ } ifelse
+ } def
+ } if
+ /_pdfVerticalRomanT3Font
+ 10 dict begin
+ /FontType 3 def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /_bcstr1 1 string def
+ /BuildChar
+ {
+ exch begin
+ _basefont setfont
+ _bcstr1 dup 0 4 -1 roll put
+ dup
+ _pdfType0WidthProc
+ moveto
+ show
+ end
+ }bd
+ currentdict
+ end
+ def
+ Level2? {setglobal} if
+ /MakeBoldFont
+ {
+ dup /ct_SyntheticBold known
+ {
+ dup length 3 add dict begin
+ CopyFont
+ /ct_StrokeWidth .03 0 FontMatrix idtransform pop def
+ /ct_SyntheticBold true def
+ currentdict
+ end
+ definefont
+ }
+ {
+ dup dup length 3 add dict
+ begin
+ CopyFont
+ /PaintType 2 def
+ /StrokeWidth .03 0 FontMatrix idtransform pop def
+ /dummybold currentdict
+ end
+ definefont
+ dup /FontType get dup 9 ge exch 11 le and
+ {
+ _pdfBoldBaseCIDFont
+ dup length 3 add dict copy begin
+ dup /CIDSystemInfo get /CIDSystemInfo exch def
+ /_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
+ /_basefont exch def
+ /_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
+ /_basefonto exch def
+ currentdict
+ end
+ /CIDFont defineresource
+ }
+ {
+ _pdfBoldBaseFont
+ dup length 3 add dict copy begin
+ /_basefont exch def
+ /_basefonto exch def
+ currentdict
+ end
+ definefont
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ /MakeBold {
+ 1 index
+ _pdf_FontDirectory 2 index 2 copy known
+ {get}
+ {exch pop}
+ ifelse
+ findfont
+ dup
+ /FontType get 0 eq
+ {
+ dup /WMode known {dup /WMode get 1 eq }{false} ifelse
+ version length 4 ge
+ and
+ {version 0 4 getinterval cvi 2015 ge }
+ {true}
+ ifelse
+ {/_pdfType0WidthProc}
+ {/_pdfType0WMode1WidthProc}
+ ifelse
+ _pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
+ {MakeBoldFont} Type0CopyFont definefont
+ }
+ {
+ dup /_fauxfont known not 1 index /SubstMaster known not and
+ {
+ _pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
+ MakeBoldFont
+ }
+ {
+ 2 index 2 index eq
+ { exch pop }
+ {
+ dup length dict begin
+ CopyFont
+ currentdict
+ end
+ definefont
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ pop pop
+ dup /dummybold ne
+ {/_pdf_FontDirectory exch dup _safeput }
+ { pop }
+ ifelse
+ }bd
+ /MakeItalic {
+ _pdf_FontDirectory exch 2 copy known
+ {get}
+ {exch pop}
+ ifelse
+ dup findfont
+ dup /FontInfo 2 copy known
+ {
+ get
+ /ItalicAngle 2 copy known
+ {get 0 eq }
+ { pop pop true}
+ ifelse
+ }
+ { pop pop true}
+ ifelse
+ {
+ exch pop
+ dup /FontType get 0 eq Level2? not and
+ { dup /FMapType get 6 eq }
+ { false }
+ ifelse
+ {
+ dup /WMode 2 copy known
+ {
+ get 1 eq
+ { _italMtx_WMode1Type0 }
+ { _italMtxType0 }
+ ifelse
+ }
+ { pop pop _italMtxType0 }
+ ifelse
+ }
+ {
+ dup /WMode 2 copy known
+ {
+ get 1 eq
+ { _italMtx_WMode1 }
+ { _italMtx }
+ ifelse
+ }
+ { pop pop _italMtx }
+ ifelse
+ }
+ ifelse
+ makefont
+ dup /FontType get 42 eq Level2? not or
+ {
+ dup length dict begin
+ CopyFont
+ currentdict
+ end
+ }
+ if
+ 1 index exch
+ definefont pop
+ /_pdf_FontDirectory exch dup _safeput
+ }
+ {
+ pop
+ 2 copy ne
+ {
+ /_pdf_FontDirectory 3 1 roll _safeput
+ }
+ { pop pop }
+ ifelse
+ }
+ ifelse
+ }bd
+ /MakeBoldItalic {
+ /dummybold exch
+ MakeBold
+ /dummybold
+ MakeItalic
+ }bd
+ Level2?
+ {
+ /pdf_CopyDict
+ {1 index length add dict copy}
+ def
+ }
+ {
+ /pdf_CopyDict
+ {
+ 1 index length add dict
+ 1 index wcheck
+ { copy }
+ { begin
+ {def} forall
+ currentdict
+ end
+ }
+ ifelse
+ }
+ def
+ }
+ ifelse
+ /pdf_AddEuroGlyphProc
+ {
+ currentdict /CharStrings known
+ {
+ CharStrings /Euro known not
+ {
+ dup
+ /CharStrings
+ CharStrings 1 pdf_CopyDict
+ begin
+ /Euro pdf_EuroProcSet 4 -1 roll get def
+ currentdict
+ end
+ def
+ /pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
+ /pdf_PathOps /pdf_PathOps load def
+ /Symbol eq
+ {
+ /Encoding Encoding dup length array copy
+ dup 160 /Euro put def
+ }
+ if
+ }
+ { pop
+ }
+ ifelse
+ }
+ { pop
+ }
+ ifelse
+ }
+ def
+ Level2? {currentglobal true setglobal} if
+ /pdf_PathOps 4 dict dup begin
+ /m {moveto} def
+ /l {lineto} def
+ /c {curveto} def
+ /cp {closepath} def
+ end
+ def
+ /pdf_PSBuildGlyph
+ {
+ gsave
+ 8 -1 roll pop
+ 7 1 roll
+ currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
+ dup 9 1 roll
+ {
+ currentdict /StrokeWidth 2 copy known
+ {
+ get 2 div
+ 5 1 roll
+ 4 -1 roll 4 index sub
+ 4 1 roll
+ 3 -1 roll 4 index sub
+ 3 1 roll
+ exch 4 index add exch
+ 4 index add
+ 5 -1 roll pop
+ }
+ {
+ pop pop
+ }
+ ifelse
+ }
+ if
+ setcachedevice
+ pdf_PathOps begin
+ exec
+ end
+ {
+ currentdict /StrokeWidth 2 copy known
+ { get }
+ { pop pop 0 }
+ ifelse
+ setlinewidth stroke
+ }
+ {
+ fill
+ }
+ ifelse
+ grestore
+ } def
+ /pdf_EuroProcSet 13 dict def
+ pdf_EuroProcSet
+ begin
+ /Courier-Bold
+ {
+ 600 0 6 -12 585 612
+ {
+ 385 274 m
+ 180 274 l
+ 179 283 179 293 179 303 c
+ 179 310 179 316 180 323 c
+ 398 323 l
+ 423 404 l
+ 197 404 l
+ 219 477 273 520 357 520 c
+ 409 520 466 490 487 454 c
+ 487 389 l
+ 579 389 l
+ 579 612 l
+ 487 612 l
+ 487 560 l
+ 449 595 394 612 349 612 c
+ 222 612 130 529 98 404 c
+ 31 404 l
+ 6 323 l
+ 86 323 l
+ 86 304 l
+ 86 294 86 284 87 274 c
+ 31 274 l
+ 6 193 l
+ 99 193 l
+ 129 77 211 -12 359 -12 c
+ 398 -12 509 8 585 77 c
+ 529 145 l
+ 497 123 436 80 356 80 c
+ 285 80 227 122 198 193 c
+ 360 193 l
+ cp
+ 600 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Courier-BoldOblique /Courier-Bold load def
+ /Courier
+ {
+ 600 0 17 -12 578 584
+ {
+ 17 204 m
+ 97 204 l
+ 126 81 214 -12 361 -12 c
+ 440 -12 517 17 578 62 c
+ 554 109 l
+ 501 70 434 43 366 43 c
+ 266 43 184 101 154 204 c
+ 380 204 l
+ 400 259 l
+ 144 259 l
+ 144 270 143 281 143 292 c
+ 143 299 143 307 144 314 c
+ 418 314 l
+ 438 369 l
+ 153 369 l
+ 177 464 249 529 345 529 c
+ 415 529 484 503 522 463 c
+ 522 391 l
+ 576 391 l
+ 576 584 l
+ 522 584 l
+ 522 531 l
+ 473 566 420 584 348 584 c
+ 216 584 122 490 95 369 c
+ 37 369 l
+ 17 314 l
+ 87 314 l
+ 87 297 l
+ 87 284 88 272 89 259 c
+ 37 259 l
+ cp
+ 600 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Courier-Oblique /Courier load def
+ /Helvetica
+ {
+ 556 0 24 -19 541 703
+ {
+ 541 628 m
+ 510 669 442 703 354 703 c
+ 201 703 117 607 101 444 c
+ 50 444 l
+ 25 372 l
+ 97 372 l
+ 97 301 l
+ 49 301 l
+ 24 229 l
+ 103 229 l
+ 124 67 209 -19 350 -19 c
+ 435 -19 501 25 509 32 c
+ 509 131 l
+ 492 105 417 60 343 60 c
+ 267 60 204 127 197 229 c
+ 406 229 l
+ 430 301 l
+ 191 301 l
+ 191 372 l
+ 455 372 l
+ 479 444 l
+ 194 444 l
+ 201 531 245 624 348 624 c
+ 433 624 484 583 509 534 c
+ cp
+ 556 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Helvetica-Oblique /Helvetica load def
+ /Helvetica-Bold
+ {
+ 556 0 12 -19 563 710
+ {
+ 563 621 m
+ 537 659 463 710 363 710 c
+ 216 710 125 620 101 462 c
+ 51 462 l
+ 12 367 l
+ 92 367 l
+ 92 346 l
+ 92 337 93 328 93 319 c
+ 52 319 l
+ 12 224 l
+ 102 224 l
+ 131 58 228 -19 363 -19 c
+ 417 -19 471 -12 517 18 c
+ 517 146 l
+ 481 115 426 93 363 93 c
+ 283 93 254 166 246 224 c
+ 398 224 l
+ 438 319 l
+ 236 319 l
+ 236 367 l
+ 457 367 l
+ 497 462 l
+ 244 462 l
+ 259 552 298 598 363 598 c
+ 425 598 464 570 486 547 c
+ 507 526 513 517 517 509 c
+ cp
+ 556 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Helvetica-BoldOblique /Helvetica-Bold load def
+ /Symbol
+ {
+ 750 0 20 -12 714 685
+ {
+ 714 581 m
+ 650 645 560 685 465 685 c
+ 304 685 165 580 128 432 c
+ 50 432 l
+ 20 369 l
+ 116 369 l
+ 115 356 115 347 115 337 c
+ 115 328 115 319 116 306 c
+ 50 306 l
+ 20 243 l
+ 128 243 l
+ 165 97 300 -12 465 -12 c
+ 560 -12 635 25 685 65 c
+ 685 155 l
+ 633 91 551 51 465 51 c
+ 340 51 238 131 199 243 c
+ 555 243 l
+ 585 306 l
+ 184 306 l
+ 183 317 182 326 182 336 c
+ 182 346 183 356 184 369 c
+ 614 369 l 644 432 l
+ 199 432 l
+ 233 540 340 622 465 622 c
+ 555 622 636 580 685 520 c
+ cp
+ 750 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-Bold
+ {
+ 500 0 16 -14 478 700
+ {
+ 367 308 m
+ 224 308 l
+ 224 368 l
+ 375 368 l
+ 380 414 l
+ 225 414 l
+ 230 589 257 653 315 653 c
+ 402 653 431 521 444 457 c
+ 473 457 l
+ 473 698 l
+ 444 697 l
+ 441 679 437 662 418 662 c
+ 393 662 365 700 310 700 c
+ 211 700 97 597 73 414 c
+ 21 414 l
+ 16 368 l
+ 69 368 l
+ 69 359 68 350 68 341 c
+ 68 330 68 319 69 308 c
+ 21 308 l
+ 16 262 l
+ 73 262 l
+ 91 119 161 -14 301 -14 c
+ 380 -14 443 50 478 116 c
+ 448 136 l
+ 415 84 382 40 323 40 c
+ 262 40 231 77 225 262 c
+ 362 262 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-BoldItalic
+ {
+ 500 0 9 -20 542 686
+ {
+ 542 686 m
+ 518 686 l
+ 513 673 507 660 495 660 c
+ 475 660 457 683 384 683 c
+ 285 683 170 584 122 430 c
+ 58 430 l
+ 34 369 l
+ 105 369 l
+ 101 354 92 328 90 312 c
+ 34 312 l
+ 9 251 l
+ 86 251 l
+ 85 238 84 223 84 207 c
+ 84 112 117 -14 272 -14 c
+ 326 -14 349 9 381 9 c
+ 393 9 393 -10 394 -20 c
+ 420 -20 l
+ 461 148 l
+ 429 148 l
+ 416 109 362 15 292 15 c
+ 227 15 197 55 197 128 c
+ 197 162 204 203 216 251 c
+ 378 251 l
+ 402 312 l
+ 227 312 l
+ 229 325 236 356 241 369 c
+ 425 369 l
+ 450 430 l
+ 255 430 l
+ 257 435 264 458 274 488 c
+ 298 561 337 654 394 654 c
+ 437 654 484 621 484 530 c
+ 484 516 l
+ 516 516 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-Italic
+ {
+ 500 0 23 -10 595 692
+ {
+ 399 317 m
+ 196 317 l
+ 199 340 203 363 209 386 c
+ 429 386 l
+ 444 424 l
+ 219 424 l
+ 246 514 307 648 418 648 c
+ 448 648 471 638 492 616 c
+ 529 576 524 529 527 479 c
+ 549 475 l
+ 595 687 l
+ 570 687 l
+ 562 674 558 664 542 664 c
+ 518 664 474 692 423 692 c
+ 275 692 162 551 116 424 c
+ 67 424 l
+ 53 386 l
+ 104 386 l
+ 98 363 93 340 90 317 c
+ 37 317 l
+ 23 279 l
+ 86 279 l
+ 85 266 85 253 85 240 c
+ 85 118 137 -10 277 -10 c
+ 370 -10 436 58 488 128 c
+ 466 149 l
+ 424 101 375 48 307 48 c
+ 212 48 190 160 190 234 c
+ 190 249 191 264 192 279 c
+ 384 279 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-Roman
+ {
+ 500 0 10 -12 484 692
+ {
+ 347 298 m
+ 171 298 l
+ 170 310 170 322 170 335 c
+ 170 362 l
+ 362 362 l
+ 374 403 l
+ 172 403 l
+ 184 580 244 642 308 642 c
+ 380 642 434 574 457 457 c
+ 481 462 l
+ 474 691 l
+ 449 691 l
+ 433 670 429 657 410 657 c
+ 394 657 360 692 299 692 c
+ 204 692 94 604 73 403 c
+ 22 403 l
+ 10 362 l
+ 70 362 l
+ 69 352 69 341 69 330 c
+ 69 319 69 308 70 298 c
+ 22 298 l
+ 10 257 l
+ 73 257 l
+ 97 57 216 -12 295 -12 c
+ 364 -12 427 25 484 123 c
+ 458 142 l
+ 425 101 384 37 316 37 c
+ 256 37 189 84 173 257 c
+ 335 257 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ end
+ Level2? {setglobal} if
+ currentdict readonly pop end
+ %%EndResource
+ PDFText begin
+ [userdict /pdf_svglb currentglobal put true setglobal
+ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
+ /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
+ /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
+ /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
+ /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+ /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+ /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+ /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+ /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
+ /guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
+ /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
+ /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
+ /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
+ /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
+ /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
+ /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
+ /hungarumlaut/ogonek/caron
+ 0 TE
+ [1/dotlessi/caron 39/quotesingle 96/grave 
+ 127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
+ /dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
+ /bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
+ /quotedblright/bullet/endash/emdash/tilde/trademark/scaron
+ /guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
+ /currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
+ /guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
+ /twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
+ /onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
+ /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+ /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+ /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
+ /Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
+ /aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
+ /ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
+ /ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
+ /ucircumflex/udieresis/yacute/thorn/ydieresis
+ 1 TE
+ end
+ 
+ userdict /pdf_svglb get setglobal
+ currentdict readonly pop
+ end end
+ /currentpacking where {pop setpacking}if
+ PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
+ PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
+ PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
+ PDFVars begin PDF begin
+ PDFVars/DocInitAll get exec PDFVars/InitAll get exec
+ PDFVars/TermAll get exec end end
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%BeginPageSetup
+ userdict /pgsave save put
+ PDFVars begin PDF begin PDFVars/InitAll get exec
+ userdict begin
+ userdict /pdf_svglb currentglobal put true setglobal
+ %%BeginResource: font Arial-BoldMT
+ ct_CffDict begin
+ %!FontType1
+ 16 dict begin
+ /FontInfo 15 dict dup begin
+ /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated.  All Rights Reserved.Arial is a trademark of The Monotype Corporation. registered in the US Patent and Trademark Office and elsewhere.) def
+ /version (001.001) def
+ /FullName (Arial MT Bold) def
+ /FamilyName (Arial MT) def
+ /Weight (Bold) def
+ /ItalicAngle 0 def
+ /isFixedPitch false  def
+ /UnderlinePosition -100 def
+ /UnderlineThickness 50 def
+ end def
+ /FontName /Arial-BoldMT def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 0 /.notdef put
+  def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0 ] def
+ /FontBBox { -167 -250 1006 939 } def
+ /XUID [6 44341 ] def
+ /StrokeWidth 0 def
+ currentdict end
+ currentfile eexec A0B00ED5187D9C0F1ECDF51878C3AA5CAA3FFCA5020F48
+ 69FCFE28B419AB05B54FAF364D68E82805BE1C1765A19BEC4D29A426539E9449
+ 5BE860D6EEF29ED037F1F407E7FE48577F0B69E118A7C8737034DBBD04699FA2
+ 80A7C6E922784295ED8C74A3C79BEB5BC6F95B767A170D04BD8041F7BDA3426A
+ 0B38EEBC414A4A52B6E26531115CF035146099BDF3B8A00193EF9C63D5056C56
+ 27F34FF02A444A05338ECAEBA23251AC7E7B67DA94C2F71DFB3E6EBBF2B8CD64
+ C128D630515F608E6436F23A665C100FEB078798141BB5533A2BE422590BB1C5
+ 6D0F257E7C6438DB38F18E581BEDF1D3810B75C017FCEA8F9EAF3B486651B632
+ F2D1D16279E221FE73375419D0A086839CFAAECC1618C4E60207E167DD9AEDDC
+ 37E07006BA902F4A4531AE919B9048413BE1EF9D321A92DD52A1B9B85D11116C
+ 5DEDF1C2112BD4E7BD1754F72123471DF2FA90FE00256B54B0D7DB81E1035390
+ 4317D65A1B999795B9214ADD5CB2BD50C71B0C1C65DD95F7420FF93451281A99
+ B3403CD0905E899046B1D4EEC1339434B286D808782ED4CC6D04AE1C92F14D32
+ 73DD3E4C697AF30E029C876DC06033C5A55623074B84A6E5244237ADF6B563B4
+ EE13D3EFCE21281E3F54526F5F1E4A5BC6CBD568A3D82E17B552176D7D0FC581
+ 20F2549FB6A55AE982185B67D6962DBB1ECB64F77A2FBF7D597479E05AD8B833
+ 7B2A2747961C244F8D47CE7372A440D2FA986D2EB57A64721615F6BFCCA1F0BF
+ 2EDAD01479994BB51DC4EB7C590A90EE81A1F3E477D760E7C886EF03BF55124C
+ 0A00F228D50F4F869ED28BF35C094F39087571769F759BE1EE3598DD5B58C9D8
+ F85B744EF72FE601843D977E137AFCEF4E4E212035638E3E598B0EF2AE58E876
+ 6440B3C60438D7A0EC054648CD04EB0A8E9A793E4F7FC322525C8AE24C726691
+ 2A880F47C52FFC40B3974DF4D22C8B2BFC3ED011DD9B3FD11DEEAB8E04ACA611
+ 2723B29E0D04F63BDD5B0836CA33BAD1310235EE9F1D69A5202F4CD581B8F66D
+ F5C9C045D628F0899B7E4188D2B262C1623403446E40C8CA3163884FDBA560D8
+ A5449EDF3D6C52D1CAB8CBC763E39BAA68DDD188E021AB803EE3A6EE2EED2DD3
+ 3E16D7B4A6AB33E849F894DDEC6CEFF007273F6693A44103C76BFDF0BFE9C415
+ A3E69746FB35A20E885252D78F90692D0C7101FDE9E9EBB2953CD34F4D771E35
+ A692E77C2B9045619A2BC3C2C058FA85589E32A5F4FEDFC98E4FD378AE32CB89
+ 1A232210A3DA6F1266BA3BC55D748A864207064F4161EF8BDFBD9CCCBBCC1290
+ FA3551CB543E7F74A8D7889B0A88EA23AD4B2787D084813663A144F34D0870B8
+ 6FE2842D825DA8A6B33F9F886E82D3D4F39098AD8F9452474D3375FC9EC1255D
+ 017F13417A5EC4C91E2CB3796EB6D06F8499CA959785EEB01882D86D1A4AD689
+ D802AF92E181B6276C0F267BAB4EBCDBC9CD978D93346EDCA8D28EA961C02347
+ A9D9D531C73FEB745BA8BC37B94624E1E706D82B38CF26F434C596C821F445CD
+ A2CEDC3B10C63CC9CD2D506BCBE24C3E54B6E062298F094F6F2259271A2D8761
+ FC07930CC62082493640A41C7C10BE1C659753638AB0F2FC3D2C22B355BA186B
+ 93B8EAF547557DAB8EEE8AF3B86BE3651D7B1455334062D7E20402F2AAEE9BFB
+ 6080A9AABD2611E581B25AEFEB596B08ED24ABC715FAF69863088C659A4C8E1C
+ 996B38C78BAE579AE0D181AE39B4C9C18A3B9278A1FD02EA8302C833376FC171
+ BF9EAC985AAC026D472ED294051FE7C805714A13DB53938EB2501653B0404352
+ CE6118F10D5F8A49D69BA3EE59FDF7F7B1ED07C1236A606C5B4D41321762E046
+ 8019D9C64084A4C3DD4AEA4EB00D34EA00C643072CF5E44EA325EF80A9EEFD8F
+ 2C3C7E74EDE6A9AA0C191A2599B16FB09BF5EC8C9A2B1F17F6A1D8B598E311F7
+ 4D2E047E053FC5F86E2D1FB64E78770DFC12F37985CAA063509B80A0269DB7F4
+ 8D9B1DA6D24C3D27669B115EBE4CAF75EA2586724A9C1649F5C9F8D77776C904
+ B52548DB3482119439BD2E3FBFFD4D1C602171437A57A3675658F8A346883EC2
+ 0596DB9BB3B0F76AF1EC6A7BEEC44B39B76F24E427B15881D06F1DE0A499FF69
+ 5D2C8B60A0CF57473F8607559DBCDA5D7C1544649F4F67C963EFFFE39F1D5471
+ 7F303E886C54EA23DF62A172B5E75B1EDB98FC4ABB897E5E1DDCC5305BFF4E9F
+ C9BB5EFFC6F970A9D604231519A522606B3C9AA2AB17E6474EADA0B494A5439D
+ 0BD84093110E243CFFF77B68E57E70C5662BC7264D6CF6CF1DBB65712A311E8C
+ 2FDD3082AB7117A9802F46E8E6585673021AC210E8E821B7E5B8E63A6B68D78D
+ BE14692778BA472948C3DD2312BE3656382DB847E12F945DD6559FC8472F7466
+ B28DCF25F249F0AC849871950B631A72606B8A3974FC27C9056F8BB8C88FBE36
+ 4CE0E64AB23F1D8C10A435302124A6577FC6F4D13FA5B65F4C428FB9410EB583
+ D62B2562654F1262209B130E7D779BBF67DED0874158CEE3EC414E6AF78EA5B0
+ 51CF785BD7DF00AD450565245090EC55D5F03B0181413E02C73E851263AA425A
+ 1834E1E854BD004F1FC7E9C1E171D97129BCD9568F86AD51727BE077BF6AE2F1
+ 672DE2CE46411C7D22B19078DBEFC082A73C979905E01133CD633CA92595C6B0
+ DB688BB2DD5C8917D3BBCA94A994B84223AB4414B7B9CF19BDDD78FD215508EF
+ 4C1B52575493FFC1B0C00EDB5EA0719AB94DE49B507AE15BC0244B2A47474E6B
+ E5B846D3315425257B10868588EE49AE2E2A52EBDA205612E31EE015A95F9BDA
+ 494D5648F762997DAF12A512B3C43DF42729C0D21EA513151BA5DBE93F2A15CA
+ FFE20D77D30498782CA383EF952FF7B5EB19A2F0C5971D98CACDD7D8035D527E
+ 253BA55C2ABDC8E1778D882BC84E777A3B6051FF167FECA275B062BC67BAACC1
+ 118AF58B082E8E4BC6FC7A80913A55C547D1DBBE57CB153A879D8BC02E2632F7
+ 2061F11B252EEEC0B65853BFD0E6285439EA5A8A35B6C7E21A39ECACB39D0DC5
+ 1D84FCAB4526021F9865D2EF3A1E4869F19D2966684339CB5A40D7D73C392DE6
+ 29ADDF581649B180EFC6929ADA1958BD0AC8B17C88E364D9B908953FE60348C0
+ 4015C80A4222D9CB14E4D51FEDABD792EAB645CDF7CA65674327DD1987A89F86
+ 0B57095EE175B0F8B7EBA84D867FCA3DFEAEF38FE2769CE6751D17418D0368EA
+ 3327817A4CAF67D9F2AB7DA404E69C7FB35BC7BE7C1B429F64F687D4797CD398
+ 311D643B8C7E30D5EF3EAB2A990F4385C3B0AD5C44F34FA306CBF0E52E7CF164
+ 20FBD608DF9D2208029399E85EF137725748F95868AA280C6CA2D726687EFF7E
+ 1C26AA1D8A08D87BBAA3D222CFB9102DF9990841CCCBF7D717813FC43099FAA6
+ CF3A7FFF2BE6A869BDF92D8FEE4A89D16C9BD3ABEAA6E07B13CE597F12C95732
+ BB14C9A9A4902F27870FDBD4CF70EB37DB47C130564C18CB0A87AA09F7C5E045
+ FC0D0B8B7EDD1C3F6F0D4EC46831B1B0D1CAB2C6E0EAF49B59654F5BDEBA31E7
+ 4E35397A004996A281A44C802E1305E21C7EC9CF0F3E82BE805AFD4EC2F9FABD
+ E555A9EC58657D62E65A3A6AA610D87B89474EA2C0ABEB919B534D1F7177273B
+ BD0DBEBCE083BF67EAF2140F12FA6E48D8AB8ED2A874C821F66EB27DFF953865
+ B4148AC5B3540D6E0B5D8D42850DC20486AC50907007C82CFCAE6C85E6DEBFAE
+ 3B00861F75BC5D6F28412851C658EA9CB9015A9D8AECF427FF575BEC703FC583
+ 8525D86F7DA7FDA35C03DFED51BD629C5CE1F90A79B9E404BF94FEB843D5A564
+ A100624431DC55E2B7DA8D04C84F7278C4F55AE63B44714861FA24E7B9B359EB
+ 1879A9F3000A005918ACDFC0A8AC38997EDB24CA4DCFCF3019DF0F5558D95743
+ DFDEEB434C525765431A987AEA620CD5FB939B49D9BAC76D62BFDE83DF981673
+ 674DA67BCFFB68DBAAB3889F3EEC8D7CED342A27991473410AF46F55D950111E
+ 87FDE431201DC5077C2B7480B1F5CE0ED2E60AC63C22A5578C193931532B7820
+ E997333B8B6DF8ADC96C59C63164AD4911137BA379C92FF8905B40D6E8B22569
+ 6576BD0C42E3A7934BF67D11962B5962CA91232FB61CA3EA105A7F8BB6EBF604
+ 7CED87B27D056BFCA557B3D1213C1A807C0EC9D25A863EF4BC569F6467D837A5
+ E72EAC1BD6649D6E55B992F1282406631264D040EA8FA1A76DB77D5516557C74
+ D774F2704248B41143F81A0757ED477E1E693604F761BBC6A0A47D6C5E1BA8EF
+ 59BB3C4D6FC027490138F792DFFED59B1D8ACC964F845BAE1106728DBC1776A1
+ 89C2BE31C01BABA8EFC45B6E6CAD399638EFABF0D4B45052ADE173859AE3D6E6
+ 9E85BE3DAE09458781FC9C871C856C9E3B8C581318F700E27475E93A77D00025
+ AF26B9AE72B81122A56A57C8459DF38926ED208F8FDC4443BFF2BD2E8D589873
+ A947BE6AE8D501516D0A586EF0C39D13822325AF939C39B1D17CC2286FB8FA82
+ E045C283380D9D627AAD6B4D4AB800EF9BBC3AEE1398E0571B372B14F1EA15C7
+ 9148AA2DA402A72354D6C20093CC4EF4126C27727E0D5902665801E1D050B28F
+ 862A060841D463C69F64C60B1B169354CF07B1483ACAB968AD6ADDF317F9ACE3
+ 85A274A39B3466B667689F16F50FBCCE75BB8EA6666CC69F4E460D17CEB7AE5C
+ CE3DAA9FE2110CD355E02CAE06074F99DA950DFA65B536ABA9F1B852C4A2D961
+ 1A2564220ADA708E670541D32393F1071BC876281A33E5C9673E61EADD8B1680
+ F5E69E1351D9683B58C053909B02BA394243315350875B209F56DF54F4DE83AA
+ 3E8F7CC4BA8FD8280FD516EFAAAA2881DD9514F644B6E893207BD4026FFE2252
+ AF806254492FA55CE7D09F1B66243A72462B03D54350E6A55BC6F12EDE24149A
+ 18C6A45788C3BD3858E084155E4A15EEE56F48E6B019D2EB2D400B9117946949
+ 4CD70B9703B3CC04772447AD2B968B49A8F9B07A0EB1199D78283FC914982841
+ 36965AB09BE1E5CB7C7974667543AD854827B7333FC458D680A06C491CCD9E39
+ D1E745BA3577A7CEF63A909C04CD9DE56AB57DA35B9AE97284516ADDDE7B59A5
+ B5B55B5F7E49BA648900A7D511D3E7AC47693FE4DE21EB0FA6EF3AA35B980C22
+ BE7BB24D6D31BC9E9376E7801F6946B41DC629FF341172174997D9D8111EA72C
+ AF09A38923DF201A2A2851EC341AE8DE43AD52DF3001FF15AA6BFF95F2A84DF6
+ B521241BBB9D6010D09023312B54ACE4A0FCFDA9D8D21255A249A150C9E0A7D1
+ AD894B82F9798E5CB072BCBBDFC5B79086BBC1B91E5C610DEA0F32A3F7F7317F
+ 9E4BC64042C41113D9ABF187120A734CE563426B8E7AAECAF43F5228D026E5B1
+ 28DC8B6BC21264992D92F0AAF93018880FDDFDAAF7874A06B7D6412B9AF3BF1A
+ 6E58EF8E5C4283DD70BC40D0F0007E362424D629D9E1D877CA534E040A470071
+ 7285DAE114C95D0A7ECFA95CFC79A5CA35FD190906C2CA17AF02E07FD68958BA
+ E33ACFFDC2478E099386AF4F2ADD465B25530A62E959FAD1AAB96A6C69420021
+ 63B4EF8EB833C61701FC8A5DE37EEC42A1E574333ECC4DEFF71AE771B8344CD3
+ F19A4A10A9984260622D770087E6F2FD5714E2F620079BCFCD6C1A9F5DE21D20
+ AC45FC8C37A4DE50F88BCCE8569948E82B4CF6420CFBA7FDF1D95BD59A89845E
+ AAAC3C4CADAC48AB3ED5D37A6466CB1AC31C3C7182D421EA4CD7C2FE6D934098
+ B87F457A4F498352E9BA688DB0B06857BA2ACCAEBB85CC2FD71B6103BA00AD14
+ 55FF2FD9F53FACCF869337A7F2AB7B484F247160C6753DBFE587A1EB383B7C43
+ 5860D8C3702B44711794C8559C1B8B97EB73B5FABDAD1FACDDC79BE1EA48F39C
+ 6D1799FFD4CF7971B97A8222CDF027C7FD8F7B4ED8B474713FAE4529F87000B5
+ BCF5CA520D1450ECF367865D15856F4D127D8D98AEC55D464B96288068C0EE44
+ 918E7F7909FCE4100CA06C24326380EEB0F4EEEAD49CE2C72FE93FB7ED764CE0
+ 015039ED26935497A15583F6F0463A6CEC9323AFEB6D1722078FE036D56DE441
+ 8FF5D396F9C98E41838DF1846F7D02D75A1376AD7F88C843A5D0B0233461719B
+ 2C0C271E42CD5FF6A799F516E8906F109E707BEE6D71581FC76D349ACB242D0D
+ 5CD9FD6EF5ADB121F904848F3184A3C2CC0DECE579D3438D4CD7B173FC4FDFBD
+ FD604FD61421E039908475DA6BDB61AEACDA9C225119301A5CE0F5F783F9F1EF
+ E58882E7565C93AAE411CAE92BB2AFA127D45BD7F477480148CAED36B30F14DC
+ 7A69B3B88F13047DD20EA481A13EF25AA98F66FE6F10AEA03DF80A1FA34A9D04
+ 7E1CA9E37DDC0AC18978E8BCFF43DD81D0122A707C949C7ECA3EF598438B5679
+ 915CFE2A9576E66981B91F637E666809E90895DC06CC543DE2C3380A4ED2D05A
+ 821DA469044EFC5F12C1CFD5037903675A703ACF2C1B49029A63D2A0B43D044D
+ 584FE44866A328545370001670165FAA76C57B97035432AF3536F892D93E30AE
+ 6495E4A6AE9E1C16ED2F5AB3F2BF81DB48D70DFEF38F1DA3A468208C21572491
+ FCC4D92E17DFD95F365FE8D9D2D25B9C997E72DFCD2EF4B302ED428A9645298F
+ E20BB0EA75C189FB2E3E7A8E463FAF92AD214CC9263001F27758770CDAF007C8
+ BCC9A085320B1F88AF02A88F9FD0120DF5C4104C2049304E360A22781CC2C27E
+ 9B661C7345BC1E61C451AC4285DEF04B0CFD137588BC0411F60F51F1254BC78E
+ C599E5A5B937261AE3B612B8C2FD49DAA029DB24B3DFC510D708D97EF0AD2473
+ 27BFEF55BC3D6EE029014B3F88DE0E285B9378DD28CC2A8CA33BAB3E94EEDD69
+ D95309FBC1DD6CB786D5FA277531679E33F8347876997B80F8B76594D1607F30
+ 572EF1FF3361091EDAC28619803293FC40080F32B1DF166483FE6D81C94FB8BE
+ BA913D97C251909437780F2B403E33B0DA48497552FCF7BE786BFE9D2CCD5C24
+ F54A0D3865C70C07C999E5FA0B822B916966A68310F5C692662746B2EE862BF0
+ 5AF5F5EF1B1B6F741AAA581E9E1EF2916F1407B89C8E8C33BB5F48609E881761
+ 5F5600E7013043B5DC141B951D6FAEF604849E3964C13BFE016A704791911276
+ B0CCAF564B5CC6023A3334E69A02CA7BA64328B8F81C4C3FBCD779C763AA60EF
+ 6419FD6C0E416F5CE6A32096B737754F7DE6761CE028AD97CFDE2D16596CA20D
+ 5DE765F602758E4E635AC388CDB54E7E82D9516F2F8BD5059353F1A3BF030FBC
+ BCB1F18E76E9392B9340C2422C8DA7717F4EBE7112FD5BA7DD641C99DD65D6C8
+ 27C715B9433A54873B2FBAFCDFD786699E24A7E7DE78BF4286D5B143A296DFD8
+ F8619E732B7152DCD00441D192CE08167C53A3E70745C3BDDC3F5C692A001D02
+ F2E36ECB32939D61C7ADE4FE924F1F8DB67D08BCF492D2421FEE4C6687E5AC26
+ BF8A06A5CF79C5A5A627A14189110DB91E01A4F2D3D92F187918A6967713FBDE
+ 75022B551F8B999AD41A1F0F7FCF7C2E41F263B414CE924A7E88A47420E6911A
+ 27C971F333BFB47D7306BF74B44389F54BF9E51BE849F70DA288D16F7D091CA8
+ 10DDB815056B0F8AB66D45E58B1779CB79223D32475901C122A4E7067B8E54B9
+ 5A064CCB7808086CC0C8B7ACC66CEF056F3B4231E62D8D3A7C58929C3B25C40B
+ 427ACF3DE83F50D3C23236124642AA17C9299364BE276D3F2D58459A1E58B8C8
+ 7EAB08390A461317C33B41881B46089FE5A4ADFB24B052877CD2998C631B8B7C
+ 3AE7C239DF03BF51E93A3ECA6AFA98DA43E981700240CBF7F96B0F8BF9B03FE4
+ 54D3F7DAED9AD3992EDEF92F1ABB7261312DD935B4C625118B544B2DC234EF5B
+ 084799116232B24042D53A82FB4E1387936D290A8B9B150C12BC5529C8373203
+ D4A6F1B88A2A0D7B6497099B9F63D44AB78B79420D165937DD644B688F9066B1
+ D2F5D024FA7F1E082B9C9A90CA1C9E296944FF0270E23F7BC52D9FF158A03FF9
+ 03A3D44A8919E8DB14BF1A3BD54895AF449DF8FD361443B7FAA9A11A89BEA2E6
+ E99DA8C620B7AC082CEAB7ABD1C2FCB792BC1CF8BB98393367AD4939D59465D3
+ B140413246EF6B5505E9843696B125DAB1E0D9E8DD23DB8DF4DCE3CB0B256775
+ 45CC73D17E88E7B3A6C42986CE55C0722CAEB188B5E476A95112B4FC9B6BB35F
+ 8E56D5AE441CFB03288A291B9A5A56F78A4226FBF2B466575DEBCA6B7AA6210A
+ C23A3AD2DD7714D4A5995AD41AA3B5A6BECE076034C1991C8BFFBDEC29ECAD37
+ F09086AF0811A92A60CC8E5EE2984301B5C7ECEBE3EBACE33059468311BBA691
+ F8F4BA8CEDEFC000E020ED302DA02E2B46D9527E12374C8C710095C21C82D221
+ 3059C20A1A6028D9426EA6CFEBD90DFF04FE8F942E68FFF01DE50B16234BAC4F
+ 2AFC733E1C844FC0FC37E8E92309D1EE60EEB16B13CFE61D21302021C8301BAD
+ 2D30BA2DF2BCE16453A98FF3D1D42A84CE81A5EA371EF62CCF054D086C5D672F
+ 93694B89DF5EBA809BFD56E492EEEF6DDD784EA205098828AA904773A19C2E22
+ 26D660F6810969C3A142E9313B4F8325AE00845C048F5A68A682B4DAB655AD8C
+ 03F118107FB88E5D4BA332568003FBFF144D4EFD2142ECEC29F035F6BB37F240
+ E2A323387BFB791D0F953F26B89CBA5C86D969D88C34F7C961540FE3B5D87E2E
+ 680CDE28EFB7C31ECB32817E6E7376101673B373D11BC381527158ABCAAB1235
+ 7302EA2713C2AB89B7985E8685F4EF1074CA31D19E4F7AFF01CEB5657C790EA1
+ 1595BB85EC158BBB0B52F01E2E68533B6C51DB791A41BE54E1E5002B0A8A7B16
+ 483736867BF9295D6F5B1C067CA82BA1D5765DD8F2441780C82F83B12C2B12AC
+ AC5CABC89F17BD100299E9DDA79F0172F15783FF9433095FD3AEF9921AF4B290
+ AD5EF82C25D606F8E1C57440B4786D662F61CCCFCD47129B64304543279F4ED8
+ C623724788CB12FD9E8E1F11A16DCC2133544F0E4FD1061D3D39B4D1566B3490
+ 21DFF979CB2A08A75B65E37685CEA98C02C3560F72AA308CD76C35E1E9516F3F
+ 91415E9C6D123E5DF16BAD3A9FA6082106925AEE211DF828574D627B4BBC8B20
+ 6943F2C13DF109A7D23F3F181F80C63666A25310FD3BBCC792CE84B9E8BBBA0B
+ 67335016D177930B85A4356ED5EA80E154C5B255B69DFC91F5984EF1749A0057
+ 93B1C7645BB87CA694178065B77143C701213746B83450F8F6AC91A0CA5A0B5E
+ C4D0CD25F518A674343ABCE8013135189C3F07DB93918F23D168A7704004D73A
+ 738395C255640C7AB99E0E184B4B4917F2FED7844F70082C9D202EF7544BCB1A
+ E841F633B999C3FCEF7B4FEFF1D5398C883BA8CA43CB4681DFB11CEA1C31D97C
+ 7C6184076CB38E076A5D4DC22AD1B84534A66C7E7BE7F2A0B7445FB2AC022E98
+ 34F7854C98BC80CD937778FA01AADD72A8102E63A41E837BDB9CFAC77EB63F24
+ BF2D7CECA59709A4AE2EB5D30CD2EA860DC28B288F01E2B71926DF89A7AFBA3C
+ DA19B30617CD594F1DBA57892A1D993FD9E63884D08FE488409FA3511E4E9749
+ C1F2BE3590B6589B3B9B3E1159DC8D9BA97EDAE65FF0A0435654A61CAC628F1A
+ FF8B3794A013DA5D82B8520117A7412D4143FF9037E6BBA1191DA45C4542A5D8
+ 881C313D13C377E636C814210F6D97124BC5BCDD13670191D7B43E03AF553AD7
+ CA125308AC66E3687325EE5D5C9C11E4042B3B4CB43D8F635302CCBF7407AF0E
+ 9C87BCAF146A7AF48A2CE534ACD3119D04351E59B64594FCFAB7C76417215F37
+ AFD22CCA4C0F4A98644366F86C9CF618531ED747C95AD237C516CE8FEFCE381C
+ 0E3A3D0B439C070BD0555B1415DF13DDADD6C836E1472EB1C1118FEDA9C1C583
+ E06769BC993201AB1E132E13D0FB98E9621078AD082F63CE00C12F4B18AE585E
+ 454805896CDADF5492180BCB7E38DEC944C42A4DCA5C5D5FA69277E40166269C
+ D60335391712FED3F5D772742BD1BFF1FAA95F398750E4EC9A8DB9FEAFC74726
+ 0B13D09B90D2424207903C456557BD6AEC9D89A08BF58FB60A18702D7CC2DFCE
+ 1ECFF113A68B68E7358A8F31AFAA04BA99488FCA4A8231929C710125D6DD1F3F
+ 44F504CF999EBF7D57FFFF39587FA052A5A084272A53EAB0B2F859BF91F65ACD
+ 9C748EEEB2235038F774669EB80DFC8D59B1696A99CC84FF07EBE52DD234D7FA
+ D04F431B2F97D8C446278A899E4F9C012AA31A95CF993F1980BBED045049E316
+ 7EAD37C04CF86D3F12D0936944761CC01EE16E9B3018C715AE7C6701AA7F8150
+ A86F293EF30EE68FD175E099CDA37DADAD32C0B97D173F49C5C9FD5D46187BC7
+ 64D8BE8FC92A289203CAE007960EA02C61122191A89990484F74AD3A883CB135
+ DE3A7F9093DC8AF2C8B4EF83CA995064BD13CE56995E56F645A1B9CEC7F93795
+ 31B0F846359EF21BD8D20EEBED699890697CE3802978C80A5720E58A9D72AA7A
+ 6D283B3ADC5C5CD4F682E8BF13469BE319A802B17F65E5195038C990BB8D0B9E
+ 2BAFC8A2E1A5F477F2D5B9D187FDFFEF8E75249EC8D688B8A6FB40D2D0FDFAC3
+ B937ABE9817CB4E611F8A128EB09FDD0D8584391A47F440F330D0BF08CAE2C90
+ E7ADB27D34852C8FB0BE664E0F4FCF6078B458B7EAFE7746EA801C5F374D0B67
+ A984851CDAC1CBCD55676059EC8720B6A4BBCCE5D5C5805EBBE3EC8DB03D50CF
+ 35BF3BEB41B39C75FB970687F1C0FA3F179CBAFC7816D4A1CC2458699BC42281
+ 4A2D4448D032FB9C4F0F7277B243D03C6EE3DF8AE2D3D4353B28BF319E180D2D
+ 5E181C9AFB5C9F21BF4C0B5489FE5DCF02CB3C7C6F93D7D9C65622A32457ABD0
+ 3337A7B94BB606FA84222FB2D3C17267D71D172D99E13391E279D62F35A6AD67
+ 551AC747427AF2BFADC5ADF846613B189D9A5A1EC1AC2A1C0DCBD47576404B7A
+ ABEF094CD4858585C8ED8A343553175596AA3809EF8594F5CCDA6626D9A59D07
+ 98622B580D1C2D7B0DAE199EDCED7664646C97C1D701A4EB1AD9D8E524FFC216
+ 57EEABC7598F50E42E03D2F4AC74031956C4A56FD1CD6BF84F98E3B729FB7E26
+ 29A945C4AA5544E0E27EA4AAC207F4D551517647959496ECCC70D167A3C3DFD3
+ F87BEDEA0B3C780960C4560F4B0043B5DEC279AC41633F560EA60839898120E0
+ AD9C3B9B931D38A73B2A03A5467033AD048CD88CAC1225B59F526C1E396EB67E
+ 70EF592D905FDED5C50E52D813A36794FB519F68E457615377F2491A186E42C1
+ 28C0EF3DC6435833597AD2685398776914821FF0A6643276D8697D5B0461E924
+ 6E5AE87EEC95E6D4CC5F3C6878C25F029F50CAC4532161723816BFF6A2A13F1C
+ 3E60DD883E84D2FB1C8EDD09DBFEA0BC4F95C3C1DEDF10A3FA212980263456A6
+ BC708E401600375D1349D53B1DB3F4CF342416C8BD3FC9E95A40CDF49FAE3944
+ FCF12D90B3E7173C6FE81693B533757BD3AF60124A6645ECCA5CA1528FEF57DD
+ 1144F34FE7A90C243028B7346A95E7859D81902513F3B24A4B3927EC123BC37C
+ 1ECDE61F931F73D5D32F61149FFE9AAFAE6CB9A6C08978B3DB9EA80FB756C446
+ 01D1305BF4A7EF2B2AF1E1F02D258645A88231685CB573232AB777F8F7C60D19
+ 7FEB70ED3107D841FFA1A7D4AB4858B56315825C264090059B3B906D4805F9D7
+ 5C1F74012E14A68D1542A57315E71FA6C82B2904EC913BE67435C791EEC865B3
+ 9A93A246AB8B24F8B2D324054DF4348796AD4C6E8F6ED09ED1BB8E980F3D62C0
+ AA2103BD9107A0F7685CE43C25D1DCF400C0331E4EFB65F7927052DAFE331C5A
+ 0B9789B8C81790BAD5738376CB50F469B9C0AF89EDA54B18CA9283F6C04B4711
+ 984ACE3D52A284863315905A8EA5CFEA9C70838A8E1EEC5245CC553399A962CB
+ 1140A106ADB20A701B590B2A571C09877D000E65946217EDFFE2596590C0F14D
+ 7EFE58F8E6D31EDF4493994AE08A0C56A8C95E2920F71B311D000AB4FAB2C38B
+ 96C28B19378E300DEA04F5350E25469D9753FBEF4F68EC03D1E29C7CDA8B7617
+ E58E8340872C6EC64BFC93F6EF5BC1F64E186971E35D7E3531DE0B81034F21DF
+ EB65D8DC84DD4E8660257E84ADB9ED22BA3D831060E151D4B71FFA6482F9D1FE
+ 9D68DB59DB769C6A23B220562CDC6087A980EFD706AD8064042007A49A5EACF0
+ 88CC426DDDBBBAB38D5084966C31A14BADCB29502D42D611A7B4A7D654E89840
+ 04F0B7682458D5FBE2EA3E847A0749D1218480700BFAEFD5D63801A085E94677
+ A4585D5A070ACFFFBC8CDFB4CDD368E33CB0BD8FBBC639E44AE36C7F2442940E
+ D2D79CD95454FD27AD8E0AF18F957D04A0483326E97C763B1BF794ADBAED630C
+ 97FC31BCE00FFC7643DB64AC4FC6763C11112B3D8703D739C2BEB52D9D4D2594
+ E804D9D1289584FF0AE9722D6EBC4760391E03C878B0B3652CE0BE04747E7355
+ 4B1B3F219CC3C15BFB92E92C28282080384CAEDA842293E8546E69716C215B58
+ 301803208059992D905331DFF6485FC4AE24DC6481454F6D005AED73A7CE5276
+ 6079ADDC65C086E434707179DFBB7B85293857395A0C02CE537EA4198540FCAA
+ 7FB2E3A183E9AF9730792295EFBC70FE109744895A119C37AAF80676FE6069CF
+ 079B2424D89A8C020D9BBA5C9C10EAF99B5262389E259DF8F4D6563998C21F29
+ C958365DA770E22D606C13D892A0085CEEC72DC76CCAF5B55151590340B98714
+ 9A87EF1154066BD130B8DB8B21D90A3D4BC617776EF9F36C06DB41BB1C06946C
+ 1177823C9203F3F32C4D7CE534012C291A762EAC1762ADC1F1A238B4F6F2B55F
+ 0C4A61E3E6213B8FBEA37424421416C54902B674638956F1F3100186BC780E72
+ 738B2238406BCC59160C7262721F8299E3A9A9A7A92F1E9E10671EC18A540FC1
+ 38C150C45E937A8A482A8BC627A9BAB1CC94BE02B02B32565BF1052EE18AF4BC
+ 838F671CEA9022ABBB7D97D5EAE1635F69B1CEEDFBC19D46E07F3D4B0783A3B2
+ 50AB2C39FCD91BDF1277703B827E3B6B1DE524942F0EDA63DB1D5463B6D95285
+ B793F7DA3601B8855D8344B4A104F93D66AB4D25E26D927A52F5C8B5FED789B2
+ 8D4EC7419406D09A65A25A85E97CC464CEE5B5CCAFAFDCF1CBA78D0593149458
+ ABF8794EF422C766CAD46189635453F51A12C8A81927943D27C72A53D0B9EC0B
+ 76A836F4928372523D13647414F08EEBDEA8BFD1FAAB403AC25F37BFDB0DF1CA
+ 2CE626220EA395C00A3375A6FE1CE0EA65F3AEF3D23CD328D25DD1A453D53F92
+ 08EA1A31E41AF3372E02F767AA669F17A66016DD3479C49FF2C3D001D2A8C79C
+ 98354E80E9CBF98873184F48558A93F2A720A8A4D80DB2B7C1F72D0977979E62
+ B4C9B5F28EB1FB582937D76E5CFAFD6BA7D7A4B7237F2F7B5E1B5968FF578467
+ 580A1E65E2E84824C4C388D80D34E6CCFA755C88ECEB3B9544B933F80159D284
+ 2E98E38D763F8474423E0C3DFC0E9D546A52CD0E16E3F78E3CFCA9F50CF65AB6
+ 8E6F356CC46DD901D3BCFE408C7B8E947E54D9BBDA3B4ADB5D862B1E89F24A65
+ A8229DD40B9258F11D1FC88D474C4EB444BE76E20CAD8F08DC3A826B457DA886
+ 952A92477A930050F2E3FD35A2B5E828864F14F2F5541ACE5290EA64BFF5F8C4
+ A2F5ACD0075C1A3501E88671339382905C918C5FA2BF5A645FEEDD85EA492B29
+ 74642090CB2B1B976B6DB6B357BB32CFAEA302DEEE2B5F6E3241BECA989316A6
+ 277996CC221BF6BD0F4B0CAE47751AA99094B87585F2B24240470FE19B461A43
+ AD1837AB035E12F68A989AD69E26C3FD67A07229F435852AE4FC45810691E2DE
+ 278934F5848092454E57AABC69D687614E224101E361DF86E6F9B501BCC1952E
+ 19D5CB83AE7495E9C498FA75F84417DD53472BDB8D27B8B55B87640AF058FD85
+ DD8169D418F438BA4B6753BB9BFF41985B5731AF468D4962BD089945BBF627C0
+ 0CD8AB32AF62EFA4AA37E30DD229F1A5868310AF50D6C633BFD9382F73AB0384
+ F3309EF0219A6B38C3B5347ED163EAA7F47399B91C3A09B054FB21E316893B8B
+ BEEBA09E4FD1E6B760A931B7D8E5A3B0706D5924809961F93BBA59313B8E3EAF
+ 5CA7E2855897322929B2FD58290A4CFE9DA58ADFE68776C89E06101EC1AEFAB2
+ EFC54203F04D6872EA8356EA089D60E0EE944A78DBAF3A4786F6F524096557E6
+ 570D9AEE1EE7A82622329BA04C1628ECDA430AD2C41CBC1D92D2297090DDA990
+ 5790DCF3BED588A9144C321A4D60C97BC5A758433F776AB136C0E78397D5C382
+ 635234889EF13D398FD198E41810BA66A5C73A23B40649A2A4EB36FB2E745362
+ 10C81C6B72E3B9726549BFE71B91116ECC6B62D19D07D34A06795F798D05528E
+ FD457CAF852134C35F595A54CF31021D1116D3F4BD858A5BEF951947BC336139
+ CCE57A8CD7CB1EC30A95614A388F403607241C864472220A2AA256EE682DE51A
+ CD6E49F6307FA965D65BA05D50CD9E1433BF2D8769AE1BB5273B7615D0C7AA4F
+ C47FBA8450A240C87FBCF5EE65172972FFC4A85536D57EFBF7CC8CC700D8819C
+ 124985C98F1394CF97B22EFB10027F63BE76EC6DB5F5866D004C32E9F2792FBD
+ EF44276EDEABEF0DC2F6F346719400FA2EF8151F79F7DE6517A13DC209DE81DE
+ 0FACCE6491D4866C06BE2B376735E48BDB800516D08CC6D5B454467E8EF83F8A
+ 982DCB86FFB3B9D4620A3E98356422FD328330DC64E1278AF07C798ED1319CC8
+ 4F5311BB91B0DD5E5805380339EB94D575848DF52503030827866B7DE6E85D7B
+ ED098F4CD28D711C5337D231385F710B5AC60C149BD00C491E15DCA71F157027
+ 8BBF22FBB4DA70F9616042A49F7F827D96B83B08A5A7C9CB3794B3BFD9DBA4E6
+ FD066E91CAADDF99AEEB2308189AE578B5ED8E2A10652C3CA1EA29FFE04FF452
+ 0C71E2D4DDBBC7634E0716CCE695DFF93A04B1984690005A240D1BC4B97370EB
+ 2D074EDFDC2C303CDC001910CC3B90D6F5DDFF3EF7BF6DB6A98ECBBA533B59EB
+ 83485B1988B0AAB2904AAF2F074A30F5CFE92DB1F6589D31C33E62946D44CD40
+ E56FA1732B8610930ED87CD29F2CE1B52B156AC58505580FB21B8937F922B75B
+ 9610BA37775E7EC99DB805B7B39DEBE375EC2C82544DB55698E9DED37B28D0FE
+ 0181F035EB2DF8A84C202C893ABC9E5AEE4A70D7CCEC5B51A2B0CDB7B618F812
+ 8E68346649654E2FD81B2E5B61452A4F35730AA9D71F7A241B2B3C39B2DC8018
+ 05FCBD17853B8820269D1AA3C33699FD1EC55FDC15E28688A3CFFCA5CF86F0D4
+ 31C8AD7503448FFE56B22E063E4699EC485192D492E2FF30008759B5332D79FB
+ D383BE46807C6DC44E6637EF10A4FCA02BAD7A6D62C05F756996B9F1EFC59A87
+ C976DBED30F2FB223D6664FD46A3B94FE870EBDD2938C97582FFCC7613E66264
+ 5A40580E4349F4427EA45BF59F29F1CC10B582BF9D9C2A46B9434F93BF9F562C
+ 90311D2030E00984723F82399B71D41459D6CA8083C7DB67806AAF3049DAF42F
+ 6F919691BD5B5D61D052CD3F732A47C642C1493DC917708666CE13A9DECC2283
+ 78C1151D194C99E6518989D34D7ECB7F15BA0F726E79417AAF10879CD11FF84D
+ 2F8EC1A7CBB256D3D1BCEE00A9904F015EDD51A9AB05A85ABEC6F56B4B6A9CCA
+ E0B1EA47FFC0109C2E3798ED853817A96B8B23FBF512EA557796836385DF6806
+ 4A7556BDF10D80C3622F4E6F0273A93A835924D2C73882D79286B254CE49A05B
+ D5CF8BE4D0C71A0BF83B9CA5E9289B8441914F45D1C2B455D90503E58B98BC11
+ B3C694DAFDF167E5C5AB48F61F8B714422D8AD9A693015A84B0A5BDAE39D11D7
+ 2B09ABB15358A0072E9AFF5CDFF175F897C6C751AAF9BB2D1AE97C84A3EAF913
+ C999CDEF79AB170FC724A3DCE838C280DE524663CFA4856D122C72AA1979FCD1
+ FA537FB73A0C854E3F21033FF8FBEBF6AB2F1D5BC49BE81809BEA2EBA6C1EA5D
+ FA63A6414760BC8E0ABDE07F7693281E970D3B1E32ED2D70533748C87ACC2D04
+ 67077D3E4F72338E916AE32D3CB066986A203A8CC53D461D2A418443F49A00F8
+ 14B12F59FF66E024BC3B0241E3352D865AB0451B2B1F710E744F35AB1FCE7C38
+ 66000F479FE2BA3EB1906C48ACCAB652078CC3349E16071F777C3F9A0176EBDE
+ 564AA4552CE9EC8D4ECE4399A0D45CF831FB2C9A21EB789063079A7CF36FC8D7
+ 2CA5992FF670600B29831F9EBB740E03171F946380558A07BE8F3A5B73FD8D5F
+ 2CA7B410541AB2071E3BB8855417F77C8D911AAE3932B6E2CEDBEEEED5FA58E9
+ 09CE2CCFD16F0B8F808E3E43205F56A98BBB446CD9985FBEE58EB5C60E9A6887
+ 71F7DF24E568E094082C3797D3761FB30DB8480F09612C589AD63E984B887072
+ 922A04920450FB05BB301DBC3EEFA1D43F9693E4BB5AE0D4EB8C542F804A3D76
+ 12152C6AC333393B346CBE059F1E26AE92A813D88E7FC5DC9DA061EEA3E1402F
+ 16E3C3A9C1BD0255700D96DF39D36FD2B86E423C448F17B67D9933DF8587D8A2
+ E84EBF9D4635B43F125165C83A96FD60F800681474A4CCA8004324575F28C91C
+ B9D4B780646735697B75712FBB56A4B572AF7B7C8668F32AD81BFAE45E285D04
+ A0E7CB89A92EA3FA21FB433F4F6A5CE38A12AA5E3E29C68452AA0E2A666CF0A0
+ 6874108064E46C2D3B26B005AB8B4641860AAA42981D22B052F4394A839EC42A
+ D9C542B8DEF07ED20E377B3A389FCCC0F88F8590DCD417EF3E6E92013EE1FC51
+ 13CD712AF88600764E251F47106D74F046D9C976B0BF24C5796B7FE15A310457
+ 67AA335822241DB4CA4F3BCF6940377D55D78A5B46568821203F5C06881B6411
+ 2364C3ECC5D43F6928B20C118F8A76166FCCFA749C0938D4756FACE32D977382
+ 8B3E8EDD49825788339352DB6BA0198F980BA778F69695E9497C954EBB3F6032
+ 2056B41B6D979C83DE9671CF7D773A118B7191AA7EC4BE45B4A0E5A448565028
+ 3551CC4B84D159FD626EA0BD94162999FED7CF55C1F82112F488804D9B159756
+ 05E24128E81A5EFC7E8ADC314BB6FA6D15B2715D5934FAEB688B6528AFEA3938
+ FFC21E579E88D4DB719E852E6D5D2F60254E60A9B95AE0A0CB706C6CC935CA73
+ C94D374C8F37B8EB1FD3DA1F0EA6490540C3F7BA7EA6F8C3242820A4559AF9CC
+ 3B00B5796358B4A1F9C267D06A4DE769DDA0C333152E0798228F892C166DD05C
+ 327AAFBBF3C071030C250B9C1E6A9FF4DD080F678B0D9117CCF55E2A75522933
+ BDE13B3F17F8ACA22B6E25CDF3315ACC493208102B366F121692DAD2AC0C04AA
+ 32FD313B118EB56306489DEC5E5038D030915510CDD5D1FD2EB9EC0D31886043
+ A60BFF521837BE1BC4FE40241A46D1933E9BA1274F07DA01CEEE5B6BB345E28A
+ 351D3A6456401B1AC56A7072466F2422233F31D219D9F1FA1F67B133F32C0E05
+ D127F4DFADF0926D425F54B7D8315264FBF57937E81F598215E357786499AEEE
+ 91B59231585906B0D4F1AEC4703B6F2CAD9785324ECB079EB71DAB334F3052BE
+ 4BEA9D48DD36BD08A88553610488CED07B7E4C9518895F27C10A4DD9F7CE073B
+ AAE53081DD9619D0172EA6BD42D9021A0A398957C8BC28DB1937ACF6191E3A4F
+ 0EA3988B04EE13502F87E013278A65E280FA377EC96A354C96D8647CB7877F73
+ 2D72D5205BFCD4BE8307A3105CBAA07B7EE9562C6D16B7BF856A67F03A0C9C83
+ 29821298DC35E05714D326D41B8B940B158414265A1630FE2FB6759EFF9420CB
+ 41361949283832147FDA74BB9E8CF5B8332B90CCD2C949FBC1F75645E7A225EE
+ 667E25E4D58A644C5814B392686CF151B8598C2531946D1220DDF70FD5A6C09D
+ F438B3D262B8C3C50AD3BAA4B34F3551625860E08A1E8685D2CCCD5C96CA68A6
+ 897FCE1C7B03CC0668E87502A0C02094465574D1AC54A3A473583364BDBD910E
+ 23051960DA316B686A152F4826CC05343FC851D56CFF8C9088F8A73108F98A4F
+ 17615D6D2E05C8D247AEAB582DFAE066FD7CE2AF16E783FF40EDA375B9B2E1AF
+ 77490CB3CE62F86B35D70F5BA5338EDB8663DC18BA394E71FF5ED665854A885A
+ D7E08BBB6A16BAF4266C9F650CFDD9E22786D20D97A35D82E1F26BCFBDB27F20
+ 6C40296CD7D988C66026583DA561A3F325FECB8C022D149D8EBB57486F72E263
+ A33D99A10AA876991DF949DC7B5F89466773939B9B045966AF4EF00B3F1F1BD1
+ 051367CE71103CC52E8D966662A8220F03CEF49B0F3D751213C5F92CF0F63517
+ 4F52B241E26E2F1F4B01D37A63D7C68D5DE1782CC502D747170BBF7E4C5D370D
+ 7FCF7AF0645567B7D0FFFC84CFACC566DC45955C907F9A71305566BE05E46C4C
+ 76903133F8EB4566939C93BB195459014F29552EAD08473E3CE60AF6AC886447
+ 3E31E1597EF1720F94FEDBF533E9D5F9C135C956100DB2B733363A19A41AE93B
+ B3D14322CA7B1FAE0C305CF04BC52B70B4B501656EB990A185ED31F756059D35
+ 9138E61F074C82D628BB483FF1ACBB64C66EFE9AE8426A04FBC10162C225E26E
+ AA4A2AC51205C02A0C6D9666D12C9FA8FBFF86EE5459904A22795E02CA51D0B8
+ 1ECE92F687DD5400CECFE2A3A0B1B2B88031721D69ACB8BEC9392650AB3517D5
+ 209EA8CDCDBD7C5F80017C5F5C86EB26CF4E84CA6C3FDA77608E7B54926273C7
+ F6BDE6CEB0591F1ACE82CFA5C3A178AADC49628C9D998980517FA79378BCF84E
+ D8772238FBE755409E2564186F3A604AF5FEBB1D3CBCDDB483BE2CE1D1D39070
+ 3953CCD24C921FADA6D18C410E86833E944FA9C37D0903812A82F387CD179E59
+ 1533D1F6307AFC8326CCB258480F6B2CE9BBFE52DBC9EF8D98E56F6B7D16CCFD
+ C86D451B1CF95C5321910F63ADFCF6B1C798D41FD68B82C626706A3E61D294DF
+ 3F2E99C4810B03D07FA69901FE100619265BCBAB24C11827CB0D53965BEF2E96
+ 8B5ACAA6B7F2C4B1DBC855B19330D304D61B510E6CFED840AFEAD12DCF9FFA48
+ 45BC853233EA064F18D037B5B6C7A769DCC75AD1B4727FEF00BC04EF1D83CBC9
+ ABD4D5535104746DB85D8551BAAB27039C6A579F5C573BBF5B0D8EF8C4DAF914
+ C32E8A4CBCE9EEF6C651F26B9EED9B38012F15833CD5D7A9C4AC80A5387A0674
+ 02AAA3470486465D5A4C98D8ED87B93348B327DB1C8F4CCFE11F502648F6A97E
+ 25DAD00B38F6F02EFAD1CFCAD96122CEA2EE672A5D6F2FC271E9C30E93865A09
+ 26BB4E4B2F27A31DEFD714AB73BD8A467AE39EEC063BB3A6609CF010039A98BB
+ 7DEF9791F6C3CEDA5DBD139B4FE48DE30B462F71CD86D3BF0C3008289BB3B9C7
+ CB0027450E7A8DA78ED34E9E352D4ECCE77825D308B01EDDDC16BCBE5A1D54B3
+ 3E6FD9366D985F42FB18B3AD3DD3A1DA76272307684047A2518DD7DBFE0EE5CC
+ CCC6EE8C5EDA65725858C81E00AE14FF0C7B40BBC7F72846951817092403329F
+ BC2AD5ED026A3F5A471196D6532C1A6398950B49FC210029F10B21820BF2633B
+ 78C8BB785B7F1C784D218D679EA0B024FD2903E1B684F3D80A8E5C8DFCB66910
+ 82EFC9C5CE7702713C449DE868AD9312069FFC4987E35571184D66D6AFED4F72
+ B72AFA7BC9709826C0A550088FA82C21E41D74D8799DB7153AD348B95EBC404E
+ 72AA548969A5A8C2546E181725D0996443F9F8736CEF860918829F820FE1AF94
+ B997E66D010F8E85EF5710CE00CB507315B8280484CE0A26A56C128AF91171F4
+ 468A06B28736BE87E35BFCBCB67B03615ECC263FB44152A437FBB6681C74BB77
+ 5FF7EB3B845C3293783F2043208F42B9A6FA7BB02BD8B62EABDC98B4116AAA00
+ 61179776A5F8C915D8B94D6089132CA53B1589D02A06F13F767505E3ECB339D3
+ 023F1C521C2E61FF555AF4370EC63BF856BBC7EF6D8867A212A8FC21CDB3BF1E
+ 948BEC51F961BC9E78A640745406F14E6835AC945A8B473E0E943387D3E9CBCD
+ 0C581443F986D25EF006B18FC8A80E8C24DE6DB6ACF3226DC5D3D224CF97FAF8
+ CCDF50DED7B00B61564CA66C89FEE2F77E8BE7E6C6A0BCBEC3F8C74F74424F72
+ F8790BB10455024C4D1B07D43910B380EB1131DA8C5148F0304B9905559BDA4E
+ 4AACE89411645F2B8FC1A6BFB12A34D78F579072EC1C31A5E9670CA65814BC6C
+ A625E283BCF38E2ADFEA8882C869C64B9D41419AEF012CDAE15FC6AEA3039B9F
+ B5EB82427AB0385440A5082A9FE606587E8C0C25178C2811AA832D3413139C10
+ 2F5039E36CEC3CB51534BB7A20BD1E3D620A88BF182F47F9A5E86A365738D4F9
+ A3AF07F936A9DB30910EF681B7A5F435124FA91582BB8C224F290B56ED27C8C7
+ 0661A5C0CDC06144D8BE5064E56D36F5A1282D8D8B1F4E4C3CAD852D9A5E5B63
+ 1D4C527A7BCC188F1E6ECE780EF4B85162DCE7D4C33CE8991085AFBE8CD20BF6
+ F13B09CAD046A54E9317F628B45614786A79E6DDCA6200582525ACFB20DCD64D
+ 01658E4E5BEDC258CB5678419BFE8EDBA566F041DBEECF3E5F445D542A173213
+ 3024B585EDD104DB59374431B457E79C175A641F51561B4850DDE539ADF8EEC2
+ B58454D9F9EE52EC2E21E9FE64816B2CDD5BC806475AF35C0D867EBB2831C983
+ 13753C1C9819842C79A8B3B4FD5E382FD688C6DC2B52B6D5D237ADF97E8CB728
+ 59F5382489F61F00AA9CACB30DFF0F6AEBA0397798DE6BDD4E67EFCD46FF1649
+ 2E6E7CDFC30412C02D24ACEA6707C91A8F9B663436C6EF13DC3D0B0BA51171CD
+ BFF353B9BCF63C310FD58409FE478FB9E20DCF9F62068B65286342C2C6D1F716
+ 17355B7F647DB7BB4C4301AA870E1999732C602183A12AC800E31909CB1D1FB9
+ CCEBF9052F964F8B01A62CA0B3AC74529865D1B992FBEE20215AF4EC11735486
+ FC2B8050A1122F992D7B728744B97E8FF47E2EC7128849351E9397C166E24EFD
+ 30622C417338488D7731A3EECC40568481CC7C216E1D84D7C750181FC5937484
+ 21421559A86073051690FFB0BB61DA8AA9F591BF0A33775D7463ED8FC75F3976
+ FD02513AA561BAB092C1A271E07E67FC579E85A17F666A12BECE43E59110F196
+ FB3FFFC8A498664B74D014A362BA6F949F516B73F7DF64F612EEB1C3EB56B6D3
+ 67BA0DEB523E6EED6E0BC9E744C39D65EC0E5E6BC8E3D0800A5B65CA3EA829B0
+ 8D31158B0BB5C7797430C5C49073120D85605A9E972C772DDD2B79159C42F51C
+ 56DB3D0FA0BBA7BEE2BEC7F98DBFEBA049D12AA5F2F8DF2D9E74942C354E03F7
+ 307FE6F3B323A1E19C43B1FDD8EDF02E8EFAA4E046C6BD60F7DA5526784D5DA8
+ CEFCF4D698EDC567BB86C198D594C5E7B9F6A5C4DE88EEC18A892E3856985DDD
+ BEA6BCF5C6EFA66A0795B333B5106986BA9FEE98C910E5EBD68FAB323442A84C
+ 66AD82EB62C1BD6E718D616EDE60EE03E4B4F784BBAB74357D9773B7D1FE4085
+ 45D510C65C4BB7214B6FE75677E03445FA58BB0F009E3066F64E4B6A80B4CB92
+ CFA3B1A5D3761F33288FF6A5346022467A3FD94100D52077473FE5A7A330ECB3
+ 80C39564648779CF9BB9D4F9EEDCE5009EFABAB33F67F3520CDFD085AE741C58
+ ED63B637F115ED68E4E069ABB21B3D7B3D6BF96F34AF66075E3014F884C43CC6
+ 961088A9EB4E029827964F86E6073AB1CF3FA6A039B703E4B9F5EB6A5470D4A1
+ 486E5ACEDBBE35FF75B725B6A19ABA44904D0C269721243E54A1B8D785AF79EA
+ 604D6A73721DB150B18F067505E66F89520E87788DC31256C84BFD95736273E1
+ 5DE70C0E2BD50435F260A97C207BABD51EFF9186B1D0285A87FF452FE7B3C2FE
+ EBA59AA3A4C14B806A45D15261810B9D41F28ADDB24870CEDA21B26D1501C2FE
+ 7F815F205AA44342D35CEEE23ED90755669CAA1FBF19635A36271BE894FF98AA
+ 02642461FFAEB786509BA6D49BF7580E122B4D03C9FA13BB4C14AD6E97D4320D
+ 22C592E6D4F66FA1F3DAD918A99E7D41E9751DD2EEBB04B00DB9878EBF2303A0
+ EDD0557D2AC8B6658A65BE488C0E2914FA50DE46C77D512F03973BF4D0357AF3
+ FEBEC432D50C23E8035FDA32615C80FF62BB0C87FC8ABE06FB1EC225C2F4A56F
+ 3C366BE149A984BD7443FC797E6E9CEF59B1602302C499E671C64680CC038FAC
+ 5DB0BBAA7B6BA9A7D9223E802C6682B7BB2803AEC667AC1E226E4B137FAD6EAE
+ C5B5F231E90301EA996B403E218029A449FFC9808817F978902FBFABC9814FD4
+ 4828A60052931BF22ABBE391466BC46DB059E4E1DD5FB2EC979E38730734DB2D
+ E71BC82D7130FE363563BCC60CF69ACE8BFEB00D9A80BD72D83EDB68F2E7A845
+ 60B88841CC01362723C956E16AB013419CFD378BFEE5A9E07403B120CDA0F137
+ 0E0111FC7BE6C6A4BCCED8F494F972336EC542EC00CC80FB4EC18A081338320E
+ A2EAA3A0A95499E637B6625B255C54898FA3295FC1F7E0744D158899CB7BCA21
+ 46ACCBCEF4A34E264D68D5055E73049CEFA3DBBA6C623C51D325570DA5AAA8B8
+ DEA11D428E7868221390FB9AC77E6898E1CA244B9D90640874CF18066C3AEDAE
+ EFC6526CA322FC7B1B58C587627E29591B5987D1D6637E08E056C0E1405467EE
+ 93A78756F8BB2E16F61B22F28D779F6F39C1FF89F6BC711261306BC4916D02CA
+ CECC7884A859F37AB1A5C31958D82C29D4D1DEBEF5DD5CB1E37F55FE5783A688
+ BB287A17449582A1C7A2DF55503C06D75605B865B88E9D04A4E4E56901CC19D4
+ 66BA12229F8F13114666AAC85DE4B7D509D3A086BC742EBA29A29462D825084F
+ C70FAC623FA00134C9057973653B9E53A40B632E70D0356BC5321F65E95A2805
+ 679764A76A5E18C7796AB31CEF25FF68EBA6977E4811E5E1847F5D4D2A7AE60D
+ 616CE48FDFD07087F9492BC1871EF4C57AD37030B5E3C976DF4B7FD07DD15B5A
+ D7232B3FEA667301B50FAD4025DD05D2DCB603AC475AE262F8D7033C0099FEC7
+ 2EA43CB3E1FE616CEB3AAECC41B8F6EC386290F996FA1935D76C0F249BF8BA31
+ 01AC8AEDDE71CCB86A4AAF296442B0A30D1A9AB5A3B651684C5FEB9137484BB3
+ 143173C33D18851F6CD60D8D66E970E20D391ED68421C912F4B965A173CEA0D0
+ 9728C7D118DC26841AB6FDDC21E91DB1F6818BDB44474990A85D6435357DFA63
+ 7035CD97C4CAD4BFFEBB757B5743CAE0D30DD1B65C4415115B46ED9753EC7045
+ 3AE673FE89F063D13F21A1558C0328775B820EFBE798ACB4A8B7AFD67B4AF5F8
+ 322DC1A60035FA89F9FE2C078581E07F6FEC3C9A23F580377C35BE7F7FBE0D1F
+ 9AFD67BBE221D777FC3CF7868C854E97F58003CCA61FD9C0D91B9E8D30C28D1F
+ 4E2A3A13F959A2CAB6D78EB63ADD0D34E0C428A377427CA120A277A45C71353F
+ DA4AB2B17C33B96EE99F8BC3A15CD7452BC9AC2E43EE827ACDA78979E8325CE1
+ 50CA9E410073C957F5916CDE8083B34A68DB901C3918CABABA4950E6CA718527
+ 65FC51158958014DC02EF0AAB451A7330076E41FF0637C6F97213BD7DEFF676D
+ 7D0038F07B1C69A10AC966099BA97A95EDD91C842C45809B4407F8D2310F3002
+ AF4E5AEBE35521F73D3A36713BF38606BEE08E4EA2FB107D98998FADADE1E403
+ EE993C27E8DC2084A5FB99E2723BDDBE62E0B0B321C22F89EB14F5007DEB1AD1
+ 4ADD73C56B6D8A85642C347AEB2CF271E06EAA29C601E2954B4806A4D4FD135D
+ DD1E5B95110EDC7CF9CE81F238C20CEF8054B1AC7B709A2B360CE8AE8F442A79
+ 83269789D19FA010CD061A28E7BBBADE01115B8692A314F7021DC3F490941C73
+ 8ACAE6E8898DA2467194F44FDB570F9EE0C2ABB1AC82FAE62598F0BDBB545B81
+ 76D11FFDA82D8B4246897F7930DBCA386D754ADAE65C041E5F26508C68ECC603
+ 195F72200E46468C89F3972EB268327ACA34E04CA8DD2FDF4CC9CFCDC8C34725
+ 82C08A276A7621431C52A7135B0B500E8CFF8D177D7045F4E5D0585E866D2CFA
+ F77328487A46D1EACE15E9B6B8EB7ECDB6A3669411580A142017DB8D429FE3F0
+ 1FAAFE1C3A665ADD27DF56C7BC2F02973EB0B855CA955A88B6E9E41E8EA0456C
+ 1543518EB59A4DBB333625E8F7293DE9E981E4907FC8C0399BE6B8D053D1EC53
+ 04C121C3728842D4E29441D4265117FF1316DA1ACB7F7F371C0732F49F86CA67
+ 2AF10F9C910816268673AA090474D981803ED3577CE6F00DD59917AEA37E693A
+ 49AF39DAC61193C5FA8C6FE53B8F8D60E745960A779E61A3147A5C973710734C
+ C9D7EF05E63BB230C16C7378FDB6FD29476523F19D156A432C18690D04BB4888
+ 7697C6AC165020575D7A041E505A87092D92EB376FA0EAE68DF11603E4DE3777
+ 706E72F6586D1E510E1B89D1686ADBAE1796B7E3A5EF390A37B5279A2D766ADD
+ BDCE29FAF27CF48E841735864F8AC863CCAAF39FF2D78C3154F303E506D7E781
+ 9FCA0B06C8A82C6B527068545890C4A17AAEF4CE53DB05440E2BCFC57F7D8CD2
+ 5E81588153006031DC6FD9F944D3842972AC4E82DF0FCE98D99B090FF0E83FD5
+ 0C140C1DED9392907F2FFC05CD6EA5FBCD32B7CD8C18FBF4DD9B367564323F13
+ 79DDA88814193D1F90E61B43C51B8241B8F84DCC2AF0BBD3C166F57CE9C03EA2
+ 4A3DE752B8AAEF9B469F61ACA3AC80C4B97A90BE85BA6CAAB48995C845901F16
+ F5EF251BACFD1EE033323A4AD5742A1C923A23F47FC7ADA12A43896B21E7C83B
+ 6D771557A7F55C336B401197682532C208264FF7BE2251D09726C9502B0A4E14
+ FCA1DC15BEADE1E9568DD85FE6305D3EAB59DDEF7CF15CDE4B00C5E36F049385
+ 9E57021DB84BCBE80116A18EA6D860A02DE3B66818E1EB4504DC35446C408548
+ 6ECCAEE996CA30F018468B222333ACBB7EDEB89DA739C9CC99468D832AA075F0
+ D0DCC6448A01FEC983EF79830AB46ECF607C9BFB178D564C2A824DF65406B1E7
+ F5F79B17F846EBE587179279116BED9A27DBD3980F4DE055217F1E6F1AC92EFA
+ FF3605537295239F04C244775BA25A56D25EA389757AD96418E9229CE0767F6D
+ E218DE11389A6D8823BE8F1E195691812167AFEA67444A28652F0E51C99CE2B9
+ BC7309A63E39BF56CE63E4273C88802E205A5A2935878FC1FB34A9659AA61F22
+ 1E2955E960055380FBD7EB843D4DF42336ADBB55BAD7F5F9DB4B30F7B3B8A4A8
+ 2C0825E602C4E4F0B0208ADE162B1805A4DEC2F42EEF87533E440FE9B270111F
+ 2BBAC709A24CBA7FA2F297E6CED34706DBEF304345E85E8DF0D584BDC2D95A0D
+ C3CB351E96601109F17E6C5524C12FF4037D2EEDCF7B5EBB1E67DF582B4DFD0E
+ 7D4C6F38C21499DD2C5D34AAAF76AD1F28EBC050C7C86B7BB3A8CE1811029E34
+ A52DC5341263C9BA95BAFCF0CD9E5329095CEF3993C8F8C083E13D8AFAC8464F
+ 81BCAC39A6191D62A5D3AF00F945255FD8923EFE38334F0DE898077515F6F3B3
+ 43EF14A8A71C47323A5971BAB13A89FF9DE8C08AB378D71079537F463311AF0C
+ 45A733CD3EAD522816D94E2F05486F63E065E664ED8535817391C41D121D457A
+ DE4C143FA631574AA20DE037DB800183DFD8B7CF843B43D2754B0DA90217CD0B
+ 6BD23374A51665D05B69CF09D8D07E7C4F2FF4E3C7D8F5D9B4E20437EAB24F32
+ FA71674F67CCE25CD182717B038B13079078159683A0B5913B4913760BC7D175
+ B47B0026E587A625B2302ECC00023AC4043954EF9F0BB0C5C527A9EA022C8F63
+ F3782D2A4A063EF7666D69837C013120EC46301A05C94470E54B70500C7F6929
+ 4543AA2BD22A4BDDDC99EE05AB143F5E7F206A175917EF60A3A60C8441BDE14A
+ EFF3AB838F4A8074FC022A908488ABF5E513D71F832F75A8D38241D07387CFC8
+ C1E1AF507A72AC13750038106473D7227BDF9E01312A4A9428DD6CE05E7B3879
+ FD47B2D52726B48BE3D131DBE2078A2A0341518C8150988198F525575B72B241
+ 2B57F4FFE79D255566447E8B8D104621BE20D9F2E8CE6168B9625EB787400957
+ 12A248F5AC73918ACCD8138F7521FC913393ADB5C3E86E4623946B0C707A103C
+ 094E7CDF652E98ECD85A507BCFECA27717A49550CC60E0704C5BCD75BF30B462
+ F862F34E21ABF2BEA5D204A2E7BE7013A35D4A2D6CA2618B2EBE4207E76C77E2
+ 103F7783FFDED20D70C5CC3BE00547AAEF6927738BB39E90ABA55640C2EB3358
+ 97FC0705ABDAFAF2DBCCDEDDA83B2B3A8CB427F490A225B7BE83DFC9A23DC84A
+ 8A5BA3A432636B8836298F1A12FAF6A18197C8AE74E58639CF01FBC6E988DBB8
+ DD886656CB8631953C00540EDF46D0415AEE7E318FE3850A55CABF517B5BBCA7
+ FD21BFD45CB6779FF635ECF7483F07DBDC5ADD39C7E5F83FD172F793EED60609
+ DA3F0ACB6DE0439BDAF67692E92BA2C70E47928683F4A54D1EA3663BDEDA5458
+ 2481EC036D27C019153554BA2D790172127ACF2D3C292895138EF64633BAA3F4
+ 84DF48B1B36109C94BF8A80E79F8CA896B31057AE012AB7057771CD99326DFD2
+ AE01D0231F3A0F0FEAEBC011A40EA69E9D91D373B5420C22D0BE00B5032BA3BF
+ A072FF63FCFD24CD465D499116F006C68644129D219681A48F659CDC9513193C
+ 61A797FC50730406CD5395DB96FD34A6820D2DD8AA68EB5F97CA60AAEB2A5229
+ C7876F9E3C88DF70D16887B978B64EE5B6DE2FE02800ACB74A1A03715EECCAF1
+ E91B638C3F747E3606E8F493115F90F3F05DFC45F87ADC0AF9034B762E049E21
+ 7E3BF73226C190023E439B1B2729548B36F97DA2801026CF633CEEAB36CE6D41
+ C2E993956B716B975CE4761A49430CE510B984791AE28F76C5E22CB55DBDBFCE
+ BE837EBF634A4A833E2A824DE14ED0DA50559CCC0C742FDD45C0313078D34BF6
+ 18863CA4D3A3A392359A7BBD43331D4D5B556AD543FE822E6E4D126502D32E7F
+ 85C71FD804334EA20A61AE888C6BC1D072C9DA67238EF08FD61F26ECB14EA27D
+ CC7B89C1A570241EBE078738D169435CA55E1D03BB12429F8D32891819D9FA2A
+ 07BAEC21E59DE1E5A8C7572D03553A3465304354CD8ABA2CB168674469718EF1
+ B68635C8D9991A4D91672A404FA2668FE9FFF8D4670E9EF44F10D0EA9F4604A1
+ 7352432A5CE3BD3828B61F85FC982E76124DD1402FFC0CF728FF2F6169BAC75F
+ 328321970E901E44E32ED2228CCE3D512BC97A110EB977B2F86CCF76B2B56E30
+ E255EFAE79E68C892022F4D0FA9166A358B1457679D5592CDEC46ABAC7387E51
+ F7C13485F8040BF33962E0724FC9048D667CBA46F0CB219BD49E128ACBC8CC27
+ 8F1490ABA2DC1E051680DFDEBA2C940D98826092C444E12B3AA87B2D0511E421
+ 3B24343988A003FB5531FE7C56330C3428C8318AB1EC3DC949557D14D936F7CB
+ 0C18E9A92E8D2BE0E9DE496910196A78CAA5B12345E9A712FAA46E6C2FABE0AC
+ 492E4A58197E14D954D8AF1650ABD3CE13B5011C0FB537BA42B413A9AF29BF38
+ 4FAA7699C9466AB41286A0E4E9D90057B696265ABEE8E515988151DC60D389C7
+ D5A04E1EE1D120647721473245036873B3521A9FFF59761C46FFB00B0779E19B
+ F47BEA9055F941750E86B94C7C704D9748FDF5079B1778097D3F3D9B09FC9EFD
+ 92485EF758579611240036A1A24D41A2036E765F1B979AF7C37BC4B651DA3BEC
+ 2AC7ECBA06C54E2F72011C407AA2F3B55DEB3022005F35956578A2517D561FF5
+ 66E90379C070AF246C56DE8490777229E0547961AB86FB0B25A26DC033DB5062
+ 790F522904450329E110EF3F08D12F45443F584901A876D23CB84F77E02BA93F
+ 0FCA7D3D889AD5E8494CB9C8B5E3ED861A2683A8A25B66459A8745ACB39AD727
+ 62444E065D5F84DE95103185308B4113E9EFF20D0DEF81D22D8E51B7AB9A35B5
+ 1B4E985259B992F6DB20C2D43C46A2C701388FF32E686DEDC4E75843EF9BD195
+ 23CB2BE00C07539850A4DC817A7553EFAEDA4D0274143D91C02DF30C08FC126D
+ 8C59EF815366E959E140A3756B6044CF88B57C32F6809B17E328612745C76D20
+ 4B62B9CAD6F0825D2F6E2B33DB227D43982A56EBB068E117B2CAD2829151617C
+ AF83CCB445A862EBFD7BCD1CA6B40FC1F0791E56908FCBED69D469C03F853B13
+ DD02F362507542066B9E278344433BA64E92A6E36B6C9237A6F9A400BC207BE7
+ 899046750889F8C1960803708DAD56FB2637C4F84E98C5D9345ACCD09DBD4C4B
+ 8257DC4EE366B368AE7A405F8AB57E0D0F96C87336C3DE8B986A1F08C4DCE414
+ 263C529F17028C075937E473D20309AD7DCB0B1D3A376E1C401A527024054328
+ 98D3312EBF86DAA1071EB87CE449AF778EB4178C661AD5BD76680B560185D506
+ 6B7ED11615F2E92CE534BB5D7A04CC537240B441840AFA4E74D96A9A77534E85
+ 0A5CB0B0486C7A5A4FE53DCB66D5BB1F61CE18EAE8A82B047FD7F0DCB92A598D
+ 67A90D90BB253B3E9895C4A0C92D39878E44BFADC4ACD3EFD0763FC3E519CDD6
+ 28030440B3A26920934D050EE398FCE347B52784DF304C6A049687B830D13116
+ 7B41C000C5DA03379CC8673676223DD11441BF8FD5D0DE5CF726D3C294EDA249
+ F7F15E75A415BAF6579207F29934B07845F3FED8E2CB424F2816E59934064146
+ 661C2307B2B2791D15B8B3027C71BC760946FFDDA54560F8A461501C3CDE4D6E
+ 99F35012C9237FB169194DC226E921F6CF95A3095658A6E10E95721411ADD736
+ E4D0111DBF59C9E40B2D517960670C8161DA233F08FFC404471B5E70D89F48DB
+ 79E7FB938A9B488F52E24B0E30F7179B3B19A5C1AFEDC72C8939F8FBFDDE4507
+ DE26E8BD800ADD0037B13B04AF667C7186A3C109B180B261A2C8FF178175A5EC
+ D46A16DBC6EDF48755F71375A76195C8F5F782E2AB75098922B0E7215AACF7CB
+ 49551031E3365C3E62D29AB883D4C89D0312A8070BB88ED1D15DA031438BC96E
+ 30F3AE59B7CB718F29F929D51A1E17069D9785CC570ED435E677543624838AAA
+ CEB8DB807788490C3BC35A5EB8326A733756A971C0767C9FE9A1B2DB63FE75BD
+ F21777CB3A5EBF420B2C7C93654696A4792BB339038B8F3D709C9F87A9203DE3
+ 182E883E2F85600BF242CCA06C5AC56F19B58C2D29C0214DD2F521137028B28B
+ 8FD75DEC70FE78DA48B394874DDE213BB32B32B46637807B4DDDA37B7B1BCA3E
+ DE1C1C029AD18965127114F87EA89639C2B156986116F7860F897FF0E2B3E1D2
+ 94DB00CEC0B7F30E00748436D33469A3D42F608BC2D4D22C75325A52F117BD4F
+ 88A6F2ABBF2F0CAE2C4905924B9206EA770F9EC77006C29492ED18DF0224A78D
+ 0B88F750CCB72F194E4EFBBD4349891347CFAD1CD8B011E7C341C81488B4924C
+ 75C2439C3E767BCE8EFCD1D9DCF838B6650040C1BC262D7B83D216B902B5CB54
+ 7D93A913FF4EFC3F21E6F474C0E008703672FE403D265FE9CA4BA846FB32B640
+ 85F76F1B246B15B637BDF31782A79CBBD1109712B180F0027E10867FD6DFBEF4
+ 9193D253D7B8023CD8A601EF891C78CDA2CC47C145C7955EE5BB36B82742EFFA
+ 1C994AFEA6F4F73B22549A84BAEDE9D67CCE99F3C82FCFCDBD63F022459DB23D
+ 6766325FB09D858C8C02FD41B6666DC1F79257F93A17EBC924E4961534FF2884
+ 18AE9770FFF935EC29161C5ACCA9096B0FD4F2AE2849A6B5D5F07153831A77E8
+ 4487635F85333967C6EAD2E97241167FA605BBE416F591088C42B72C3E1C65A0
+ 7232A6CA5A3B2D56C8BC6C50F6B9A7A5C7B3062A97321DC596A6ECB550098944
+ 777F43A69EF8A5DF9F326F059AC8C9BB30EB0C4CF4CCED4FECA07D3CF612544E
+ E252F73EE3456FDA4BBA6C9C26F76058B85CE37616DA29C02A7D63FB0888555D
+ 3A9531C27136C70EA4E26F8518F43AC6B83DD023A7F23CC828F2940BA5663EA2
+ 129A071E3E6652092DA29EDFED3A71D07CF54B0252A5DC6DFCD23ED0BD9102A8
+ 114832BB12A09E1F2AC9D8330D7F5465C90566B1ADBD86FE76BB7562618EEE57
+ 6769529638C3D0DC3958EFDD7444A6A8EDA25AEE39599008B781AEA4D4F61753
+ 620463BD0711E8DA1B90862A9B135C7E79B2BD583C58A9F07F5D2E7374E433F6
+ 08951B1EDBA54B77D0075D19E600368E83FA588A3E338FDFB43002EB6BDB7DA5
+ 7E4306A89E759931E9C3DD8894D9F87C134F71C39743A5EF7C2A03344C3C997A
+ 7ECE72C7E2FA0A3A2FE8FB35C6FDBA386356568DF097F36A2290DBE33F861627
+ 49BFD9229A21B9000C653E9A7F2C218AE2FAF3F322749B6E6B429E10750DA995
+ 450015D187E07444EF29F7FAE898AAFA87BCACFF6F629EECE9CB21BFFB8046E7
+ 438F19F2AD412A31589BDC9FDDC426838901D1227790D99C34FCADB71EA837DE
+ 2E7C0ABF0371672701882FEDB619B224C703DA63FD694864C21F8D396C8042AE
+ E45D1617393ABE54B6E3FBAB3A6F057C05FF6D9D1C28A58FF4C52469E31B63F9
+ ADB7EDF1905F1997BD09927D9B63D232C631F1162F0AC5E87AC2EDAC89790584
+ 7502E04BA9BBDC677B174AE0A391C8165BD72EEFE0ACBBA91E7FDCB7448D188F
+ 19B94DD258B2A4E1803EC3F36C36313A2E56709668602B1AE95804D6D0FC17E1
+ 6FABF07B0406F99A90496DB8AF1C10108B7D8496723B343FA78B1269185150E2
+ 55147C6D36CA7CB13FB82E11F4CF3728C9F9CAF11091D703EEA811A96EC77ACE
+ AE19DF31933CA2C6C7DB2259B86086D11EC3B4139020AE2B0F6F48FD6E443C30
+ 0744F452B922162D5BA8DF17DC6ADA2A3E71D08BA28A2BE510741DCA5A66E451
+ 5B9EAB0E6FCC8E64BEA12E579B57AC89FCF737AFC9434FAFFE497597B9BCE237
+ C66090F2E19D48BFB4FA0FBF0B14DB6C61228DDBA74EB7FEE7EFE42ECDCE1C90
+ 593C2932E729D8C8357E61D3632FFE2C244D14DF8AB68E67EB39D1D251506309
+ AA3789A2BD30752F696BF37EC79AB8F149CF81331D60E9773100FF4BD7860D12
+ 5FDA98483B1CC148A06A28645B809A0CEC676B6A750B775A4BF9F8F337B4D899
+ 65BF6379FF2B60E5F1A0E4EEFF1A64E048AF1B48EE00B880EF22A049950C87D3
+ 2B553330465834217885838CC588C5BFCEB6B40DCD96C53D49DABD5B8E4E33FA
+ 187FE417AB8984D8779462DDE7B937A5C0CCF79FC58564C0895BD3270C1425A3
+ 2087EF0DF2123977FEA40682B2FB23581ED07946B46F9185428A83A8C45A0DE6
+ 091510DDD99A070FCEC9B6F9AFF77E2FB7CB294A8C890DB56A8FCDF7BFFBEC40
+ D2BFCF285A8945CBFA76DBE7AE9F1538FCF9F218603E7A00052A1FD829BD2527
+ 455FD00345531CC6A1401802FEA77D3BC920C9F3EF0B1735FAE3D0CC05808992
+ 86FF7512DD5D31243A374C3218CE45580C2C0CD0F36430D1265B5A1D228E2BE2
+ 9890A63B9788348E99E4569929F3255976A8B19D75D98FBF49362667664CB554
+ 9BF9097A7A69FD1BEC5FE8B06354D8774C892BF5E4883F56DAA97E374C7218E5
+ 444DF1A854A8F0C252BF1945A049D525F0C8FB5F9107A12DD70785569FE549F7
+ C55C0D1AA1C1B2B510456EBFAE3B5BEB62A5083D31524A0AC3C7650220F7DF14
+ 487B2BDC3A8588A8B023D744232B2F159396FC36E88923F603E7811C4E3EDF3F
+ DAE09B49D3FC5728845C661A8760526A41E9BC2C16BB7F87F20B25A521C151BE
+ C22768B3CCD89E37D8139B16030466C2F3266C3FDBCDCB5987EBF3ED998B6E42
+ 7F4A9AE964D1AA8C5EC965D4113FC30FB127681B5E6F8062F70B453B60C680D6
+ CC086586A0A871A6968BBFC46A82007A4E3F54211A93DF787BAE746D7D74D9C3
+ E85617AD96470D171A560EB6A02890C7BF7922504FC8F530B2A9F93B27DB6E77
+ 1492452242199DA5D2986AFF1000C1379ECE946092B2D8FFAF40666B287F8495
+ 9A79463A7C4699B81965B5ABD65A2255515489D53ACEB6BEAB5D53B0C14A156A
+ E726A3ED630485CF3CE19FED00BC82D0C2D0615A296EEE8EB57E39A7475E660E
+ 808F451A907C6F82F415BBA6BF9715231136ADDCAD736851FD15AD84EA908729
+ 4A07A7968C342055AAE50E01F9A774430F2B6F42FBFD917C356AEDC8DDF5D080
+ CAAE489ED8C224DA39B3CA7FF1039DEE0B4F31F62811518016C8709CEB089349
+ D32DAC85AC936F6D14C3CE29D1583DDFE1CE552162D06C2772E015379DA79991
+ A52D6EB6B2B348D9E0F2EC65FBB589DAE68DCF25FBFCA22E3806461693E3E6DA
+ E60F8A8F8E1D2981CADC095FFDFC9FB0FBA8A90A7D08788A6A92068BCE6BAE8E
+ 64B2EDFDA0CC1A5033DADBC21177AD74F574F703883E1FDDA2971AFE3633D2B5
+ 202A0304154C32DBE392F145ECD2CC400EC5DC9FE7483C5312B75628366BF1BB
+ 946CCC292D1CFA2790042DA92B9AB89E7EB405330043AEB7FAA4A5DB44EED1EB
+ 9349678E89DA8EFF8A2C5260D1A62656B79899C54883D90EFD3C6207CEB6383F
+ B8BEA09C166B3605F69008BE00D33E7462C98E82F8568B574697182B273A907B
+ B1922952E3EAF6B09E3FCCAF1753168A0DA6B20D800EB744F3F15FE88B4E17F2
+ 20F545D626539FCCAC6EDEF669CD655662D652BA109E4F4860069D97C7878DDC
+ 4620C8AA5D9201EB1AA3D452F22DC65C51F3467EF6A69A9869EF17E721CFE506
+ 084102E16E4861792BA86006E9514E2CE86E394B3584721891B7C8934C1655A5
+ 91E3F0F423427DD19F19D8B1E6AEBF0354335DF49FE02E628D2B7F07AC4FEFE9
+ 8CA6B96F9EFE5A46F58F91FDCA04B8520FD80B36688686F8738BED7E2DE9F915
+ 7AAF8891D6AE0BEC7B5F340E2F83699812CEED19347F2440755B6B341E4F6581
+ 1BD09BBFDAE99933B058948BE7D813E2988674ABC6434690CD48EF0E05FEEABD
+ 31CCE1D7AC5B3E53CE22877BAD5A29668C470F05DD9DF167ADEEFD4463FF5A55
+ 3B74037CA4B3E62B130A11262DE53D5D9FBC6893B1F61E0D44AF5E1367DF8790
+ 9C98A2B595D27B5AF420E02D961D3A75A4032364289AFA122367506D2B87259E
+ C54B83F46DF0F81563160383F388A5329B7532CD78263E7E823F04ACEBA1067F
+ DED6FC120EFF49FCD853F51D460973D32BD3E439850D86C752CCCAB7811510F9
+ 22159D8E047846CAA424E1E6484FADF8CACD1195536B80F7B8821CDC623A3CA2
+ FE79604407E645EC3D796800BBA74ECBCCBD774102A498827B4964F2640DECC5
+ F36DB43B491C4083B282E07E87AF6B150E126BAB097BAB48F3F19C6FE0E09C7E
+ 5D44C148681BDB59767214ACF49DDC648CFE00985BFC3AC5DCF7ED60CC4A6E7E
+ 26F37EDC01CD9A11D38F0BA8F3D2C28FE60B85A22389C384D632A6F462089FED
+ F2DDA2EC8DC598A9FE74CB159AAACAB1694EB81629B3922A5847B2BE91C97738
+ 771F3A294199F4D645F5584DCA1CDE915193088F88B17FE379B8FCA4788DEB8B
+ 97FF98327E1835BBCA0FA10E6A8E7AC1BBDB92AA3C0E2E8B2052CB5EDDEC91FE
+ 6142261328A12F74209CBC223B3CC1DC538A47B6D051BDBE4532F2C0070E99CA
+ 4E712B833894A79F6E96D7702BE8BFC7E2020D1845737E67080FDB27A089ECCE
+ 6A2DAE556D0A2C850064EE067FF012B30662D5F2C99CC48837D83FA20BD9ADF3
+ E433619D0AFD513584B257D5566D89C109B37286FDE59490AA8034F9EAD60A94
+ 43F365B42D269F39DD79B12FAA8CF72B9AADE21C0A05A74027ADC2C31B53B2D2
+ 49DD421AEE56BB221D223AC1393B7F333A61E8438490E94E244FB0E9E4D72328
+ 656537E520EC59BA3643BE41ECD548E3B29F6F03474AC8B7643E22CD69532DF3
+ 459038C4A6C06E5F9BC261C7A78FE86CF4B35562875589379771D1237C2187D0
+ 0AB27937E84ECD9B5FCBE984706B9E66E22455F1F9604FD07B6970A184DFAB33
+ 56591B67ADC13821EA0F42CBEF82966F574CE1A5A1726B6F867F739E3698D3A6
+ 73D7B618ADE471E8BEBFF45BE4ED9D0CC70FFCED114AF8792D25B679EF5630AF
+ 2099804108554CE001FC94880A494B67134F336B53C24202A9D7204ECBC65B4E
+ 6A0C75A3CFE1F1D282BEC4D6F88E378E6058FA334091284E99381FB6B87F8B81
+ 4ECFA44AF3EAA047BA6003D50F60E36F0BE82B941E8C04BA9FA736678259F976
+ 0D01B6B91F7FAD053563CC9D4DB263644CEB8C071D2BAEC7398D0F555B877963
+ BAA008B357F4B1F300069E9679DDAB50F9614AD403D442AEFD83C5AD1DC005BA
+ 59654B6ED0B4DA041B8D49046B8F8BC59A042E80806299D01340D792E92D0315
+ 7AF4DC96AAF65E1119E28DB741CC8EAD0843FD28167BAD60860C8763F2258155
+ 05E4684B3A7AF3766F1115D1E3F89CDA946E798FFC87C0CF40C88651ED6BCE03
+ AC08651067FDCD879129D8A191A789B8D87ECC89A73B78C0F0A95C4D0A957362
+ 4628AFAC2F8BE51D1B1773D64FF7572EC5271D075A9E9B455CDD835AFCFE3605
+ EB45DF68DEC50D8109F6DF28E3D1CA6BB050BE6436B48B72C72A71513A924D4D
+ E3723BEAF87B2CA32BB94CF02CA405976BCE483959EE1390B6F5ADAD581C1BEC
+ 7F6FAA9D19148F83392CD6BCC05BA14CFD3F58774ACF4B0F4EB0BA580FE45097
+ 975F01DF0FDF617D0D0902521A92AFBBC537F6F46F53BC79959B8EDF4972F733
+ 4959FD5F94A25437F45A371AE10DD437CC6B1FB908C5E3FCF90F9CD134EE88AA
+ 9166285041A9CAA606D2BB858EB8A9A0C9D86CF6D8801F3D6226D5842BCD6D69
+ EBEED1A3D53B564E4B94B1354A53EEA8E1DA91012EF0A8DB1F31757CAEAAFF59
+ C6215D166356A0C6FADDDE01528E1001FB89AA578ED54EB0159989BD8E6EB193
+ F2170470CBE780E70843F65A777E4C4E30EC2C54F4C281C59D0CAAFE5DCC0C03
+ 4B663D3FF0A2FF68D25B94CFF009DD0F7528329D6424690CDEDD3FAADFE7EA05
+ 5C0DE6D645EDD3AF582DF3450D7E79DE1759E5914A1828BE7E5229DC36F31F0F
+ 5EE2E5E7496F1C1755A918947F4EA8A94441AE2914486B8F5FC0FE6891FB0871
+ 884C3B3C047B4EFD3559BD3D1726C7F8BCFB614D8C3C47ED68BE8E1CAB2D0E99
+ 97D354372E6A112083781AE023378030B0F207B6EDDBAC60A0F2AE1C62C1F46C
+ 9C51A083DB7F04DC1BAD29D4165B2BFFE451915836E55B64146ACFD8AC9D67CF
+ 9CB4AAB6A0CBE35A4BD03659399D3A615584A08E7C12A149E6E0A433FCC42016
+ 266F8A26755E8D7A29445A3A5E785C45F4327BD3BD34E13D0CF63C4129BDE2B4
+ 5C1D0376EAE7658A04E804DEFA2BEE2271B43BA2DCD794C4BDA0D9E833BDC925
+ 5ADD649B82955A216675D87D8FAB75A6CFB3210CF37669F2156007C514873736
+ 0F7933901E1857AC4F9C2DBD99CAE3104FB4D0BD81E072802F2BCF893DB97092
+ E6EE28C8821701122199018806CC38588EAE24F1BBE04CE258C42774B0457DA1
+ D541F46C83659B25B3C7932D8BBA40871C6DFE686665E768F9D1FAA01C97BABA
+ 04D407A6320B001496E068898FC3C33B8A557FF6E8AA40FAB528FCCF3038E576
+ C5818CB86BA7198E4CDA922DDAF319C9F8889CB4AC5A2E0507D4F3BA9E684CB4
+ D4AE82C90E3C55AF6E5211FF8A3E3279BB8F485832D8688A50BF4D42BC4D45AE
+ F14332533706155638DB94B076D1ED65D62046E2462F06CC5BFF9B7C1134201F
+ E5500D35CF6A1680B551DE45ECA52DA43CD2639F0456DCDB4E8CECE0425798F2
+ 1EB9ADF95E529F01F1BD20A14D6222564F27E76DB0E27519D6DECCC06CBB4946
+ 8319445F33EC6A3A8703370B568DD0391E9F95CC34C5EDA2240B3876FE7ADBB5
+ C761B1D33A70DB5DB0D9210B03AB4D35981DB1F5B1A7B7B5AE6BC6B96405E185
+ DB8106D1F41E971706BB9418A4EBEB712ED5CF5D77C9451533270B2A7C814547
+ 8CF7DEE7FB64DD8EDAFC579FCC9AF43512D660D0C9C27B78017142E1233351A5
+ 8D5F8F0B53CA613F834C990BB47AD38C19B55DC5AFDCDC329422B81C4D6F4AEB
+ 5A6332D12EF1F994E71E2715D043833ABB0E093D604B926E0557DDB69A477480
+ 48BD2C008B21B92CFF7277F3903A14203C750734F0D466A4D5B3FAD797904459
+ AEA8FCF9F4C924DFC61DDD935E78D1F8A3C932A4ECE9CA519E995CE991A92BFF
+ F12CC5DB11BC845B41948207071B3E89852748FFC34862C1DAC51924AAD20AC4
+ ACDA65B085045C981D81AAE17AB65D60DEEABB2F420168ECB7D0AA8764D298D9
+ 296BABA8EA2A9A27A0D87C3925946DD14211A959651EC3F658E5D372C4C37A26
+ 8B13ABD03047FBCAB7BE046E69C032C4CEA56ADFD202D1EC3FE12F33FF267A35
+ 1039E28DC6DD6F31794C476D64F401AAE28FCB000DE64C0B4F7053B6ADEB56C7
+ 17316AC3064C7CBC0EDC78D98D7D82BB630D51E3FA0D231731CAFCCE5978D354
+ A9C373494F45CDF9105707F7C6191B49607A2E64DAFFC2FE648AEB0AA0650207
+ 29D6BBD672C2664EDCA914909323C47D6A4EC45D209DACDBC38A31C3C9D25BAA
+ DE4CD108D7FBA4833956713514F0D8202A0FBA388684C760643CF9D1374D405C
+ CE1D51E3C8E8868F0ED5CFFA6F3E3A204013C659D19DD4D548EC3FFC7F6DD34D
+ 91AC9CAFF89E98D9E3CE57512727348A720C98CDD3CE66B859D526CD55337D56
+ 1ED91B3AB212CD77037AF0C3B8173282BD99F2F8EC82DBAD39E3B71ABB3F5BD8
+ F373BDEB5E3627665563255F0D8F205ED27A162C51F26D1B4576FF441D98EB9E
+ 6933CB3F741788EB06B8286CF43BD1F39660387BD735A2A410A02E2A84E61DAB
+ 1EDB0444A664EE6EBC90CCDD866B0D30EC63C3B7C4A7597CFE0A77943D8F7EB5
+ 9760C5AC3BF48FB66D893F70F6B15F70692E24D3AC2B8D22278C44D8F2D6E20A
+ 6ED89DBABCDEE5397C8F25C1C9FE96C5C71EF8B434C4F83CA8542D8C421298A7
+ 29A2C3486B71E0835CA4ECCDDF7F85AA5EFD23B2BF7F146155F97FCA5AB364D3
+ C7BEC21E7AB1CB94091837B81ECC1E980C11E487BC7DA5F28B37E18D0EFB6019
+ 4A3243962ABF364167353775AD96B3691820BB85F9ED3C5BAEA7E91B634C9675
+ 99FB33B89262BC5CAB773B34AA7ED222DB03A2374BD32393F1071BC876281A2F
+ 8666C1BA35BDF4906D5540B6E624D6772493517878A60D76332AFE7CD5E6929F
+ 223A72533A267B30BC4011BC9DF053CB0DF538213442A17312E11BB00142C06A
+ 86934756FE93F9D3073E3FC4DB904477FF391E4E319525FEA19BF00F25F56ABF
+ 21E5537B8E664F10DDA138A614F74C238E06D7C82FA33A2A4C21768C87345ABB
+ 23278DE80629A2E88E64017118E37E5BF92FB5B2458BA181E713B6290A5E2E57
+ 5EFF0C8FD9971D808FC76605BB5D6C03E5FC2E3A4734562CE86D2ABCD0AC79E3
+ 873B9CC4D05FCBBA5433B7B94BC81B6930D78053C1BA758FBC4BBD990D6A5AFC
+ EFEC37E6C92609C51EA9EBC95141EFE2189A014B0A40A93EE26108E58A44D0F4
+ BF780E1D8AC03C428C760C9E76757F3E4FA8CDF717427F887AA7CA04A33C9B4F
+ E13157136B6D19C2C0288CB53269629177B6E3C956DFDC015A744D45745EA6E2
+ 0F133400F685D829AFB5453F4809245E393EC56C5E18E5C1904778BD68F922F7
+ 3AD0211853C1B9628B347CE13364A91CFEEFF6E913EC131F8DA6A04065242176
+ A60E0A6719DC0103374639FF1551D29B3DAEDC04172D7A34B06C45DC66743AC7
+ 0D1A8E44BDBEF7DB3638438E8C9E262F784CE7686F1E64CC6E6555DCF0C92768
+ FE1890A2723289556A16A3502DD109C14E46A2FA8DCC44602AAD39F7EFE13F66
+ 64C894844F5F606A817795714EB5A1D2D6E426E51FBF7978FE261E9C79333FAF
+ D372414328317AE6AC4020505BAC19233D77222AED2F67755C59048C7D41620E
+ 250CC2D36C15830AC101C28FC37C5E89DB5513C1928A1C4F958B7F1254F00EEA
+ B380482F14C7627B33EC91EB950186154D595F30A491EC6A6C7515B72A455637
+ 4EEA74BF2D3856808DC6F53F0DD98F099D1FD7AC7392CEC0CAFB85A28F344075
+ FCA511F6C810BDDA47B1F0E3C201ADEF0A613804EA6F354CFE6A279A03CE9EA1
+ 298FC21C45C4811CBB7774F6AA5AE5794C112DC54AED87761F6DB83C79E67C7D
+ 6B8B625A6912B84579D343CDB5475DF1EE591C84A0CF4A23353482BE64F4627E
+ 7DE706449D005A254BEFFBB2DE2D2B077A6CCE6F2C65E5494EC7C3CA67FBF836
+ 335CB56E048B01A1ADC9C6CF65FCA9C06AB4416B45C16E82DA0AFF75B5B590F8
+ D5BF0FDD1DD6AAB68ECA8924ABE24F27981AAEE545EBB0B5FC59D14996FFA893
+ B53C6B2A16DFCE9E4CD9C0BA9B85917C77134AC6ADC8AE29C2C1068ACCDBDF15
+ C6152BF48A195531431E1E1D0DBD13D8E196E435C8A63C8148144E8C02B8A297
+ 211F842BBEAE049A038A1A8E4B66092F31E3B6DB3408E0382F54B6409BA8C3B9
+ 7D0470EFF1B2BDAE6E1FDF8E077DEB18C857B45E21C8BAF4543BF1F53BCA93AC
+ EFA462A363022E2EF1F196C4A8AECA836058A213ADD58358B625816FEC8324E7
+ 7D63B3AF2775A5D1CA41D9AA824EBE0E1CBD48ABD7CD129A0DE3508D12E148D4
+ 7CFE7D5E7EF8620E66DCB65400BADB0BE36425458CACC5CB90705824C9124461
+ 4B440B4301123DA5D56022B4239F57214C6587E4422682F0A72F15F93A39874A
+ 4E096067967FABCB9079F24B1DED47C70E575C7C5538B859068DBA887736C026
+ 78B84AF6BFE2E05769FC9F0A899B0D6DCC6E11861F879B0D315B249F284E925F
+ 0309ACE966A9B0A4B5D2EB6FC570CF41CA3B2B98FCE21958435C8B625012D37F
+ B44FAEEB62DBCC59C6D129F71EE8A0E988FA34961BB1863FE4EFF4A86110AE0D
+ 726C18854F35E806B9E0D8A8A2686228D0805FBEC25F6483423AE6E447808B60
+ 3C86207E94F6B311ADB5F35E1B91CED27F845B4980D558E0081D0F1CD2E768B3
+ 4D8CB623FC05D1BA7458B23D98D4292611C0E61183890AC3C87DD3BA9A62B024
+ 2E60DD5E4660652345F86ED229555357A06123F1190CC954671884F1D2B81A0A
+ 201BAC968BCD2084831A6EF4A85601EDA64DC5200035EC8DA637394F38EBD9D9
+ 6E445C4B95B6736B42A0648F11368B2C1C6B0B801586E34F8C28B5C21702F80F
+ 333EE81CE3A92F47B491A651224C05C300757EA8E26553BEC5673E9823FE2D06
+ E3C9323AB1211FF39971FED4AF62413C98158DF7611A391A7E20BBA364FA787F
+ 4A7C9F900EF946C05F5DCE4626A5399E4DA47A3D98DACB56523E3573CAEA62F2
+ 1395330431D9D5208264D8806C8F27C60DB0A4B2E239721F4E9572EB10597632
+ 764A7E78B256070E5420C4FC85ACAB93C2AF0653668E10214A7922F2943967CE
+ EF83F543E06703859FC71808885A23A63414F494F1C16A1ED27EB974E5AAE965
+ AA947E79544FCC3825CE0BB56C70EE2D04793E94A15882ED2F97FF33E689BA94
+ BCC7CD90F4B949EB01BAEAABF904649FE3C58AC834856ED8311127D6C42A4515
+ 1758E3B73D82D5E859BE7979FCB14D45C6C180223ADA127FE54B066A5A1ED6DC
+ EC00CDC83DAB49108D5D9EF92742EC14D47719B0DB5D82A63B9C462B2AFD38D9
+ A5B71DBFC72F82DDD1177AE6BFA0568735D57983F9FD9F23E33D5156ACE336E6
+ 71A7F9AB2FDD5C867A742A5C953F1B444A522233146878DF19F86C47F3AB39C5
+ A2FBD8342C5F2C3757400BB325C5219B516C63F33D023EE882B7CCE8F224DF69
+ 68A68AEA665F3A4413A8E3877F3BE11B624F71735928996DB1B93766F8BF6C1A
+ 2B4C8C740862707E5913DD6691E4D20267F222EF50F46EE108C35A4B2E0C5739
+ 89F6B8FED1C5B0565C6D0C3018EA0F0703DCEE34290642914B0DCBCE66A621A6
+ 47C3F103499099488E1F3B4623746950B613A2AB5178DFCD407854E556A41BF7
+ 04267ED8DDFC5D4A692467B1025C570715917B936560DEE5F91B53BA55EE13F4
+ 0A67F54A589F2BAD640235030017D05ED32E332DA06B599DAB69EE2DA3602856
+ 03DAA6DF35A3A4AFCFC8CC1885A3E448A4864A1A8C9E38E24E86B98E73F04981
+ 4BE6253E896B606C0CE61D65B4849C20D9459CCD9BDD17C25A340B55FE3A449C
+ CA7F0A09A6CDF4BA9FA2EAF253A4CDDA717D6974FA4C61A6ADD465FE06E53035
+ E8577AF00EEA5B2763FFE3C7014A596CD4F9EE44919F95B404291E462E154D97
+ 7D0C0C686E637EFCB3CB8E73CEA4EC6D118A3CC5668137E17DEC1D4EEE158688
+ 7AD62667829D107FA7EDBF17B7BD4925CF8D475C0E52FE8A4460A52F5EB831AA
+ 5025B23F6D6B3F57A0E2E509A356A93328E86B6C85DF8872BFEE1CFB7A9461C3
+ 9ECBE1B116001F23465D803B9B87C111C669345101AA9B824AE17EB80916326E
+ AE3B4F5C2E04AF8BB4596860A549BBF81803658AEDAA96A55EE0C8C8DC6AB9A9
+ A7609AF4394B57B510F31AE295C22521EAA9488C132903C6D3B7C1B8ABF25C64
+ 9EADCB68D02E6590EFD05FF30C6B8D8BA9E0ECC2F1AA6C7A68BE0F46C2A41A62
+ 4445E4AA736E008814E8C55B022DDD85E985CD681D8A1B69542F3B0E9009B53A
+ 902C93823BAB638B3103755A48B4588AB8A72F109C6C67B5168C0763C27059DC
+ 1F60D7863AE9AC4A544731EB64794EB29A1A5CC640F3A614101823B4645DC0DE
+ 7DB420D32D0230E0FDADF8F2FC8D0310898CAB70A620AC7B2FB1B6A326311893
+ 99031C8396B6511E21154F9C3971B78BC6B20AD8FB1417C04A309B8B5CAC7649
+ 72C267BB988E285E5325AFC05BE59E8B816B337D0CF840DED8A26CBB332C48B8
+ C02BC87ABC32C5F08F1BD1071F93E2A0EE2ADEACBCF33E689116F4CA9609B067
+ 210E5482E30C3D9F0B154428FED0E13137B6B3B9E2AD4109AF39228AAC8782B4
+ 2A84E22273171E969C7E408926E52A2B96152570D275A18D31F7C109E857EFBD
+ 64F1354AB5FCD767B50D55687E07F3026561F397FD7434DF9270862912E041F8
+ 902064FE49E46258EB99AEF254B4E3C99E2A692A23C4E468B82877666C178F4F
+ C8ED4201315EF9B66A3DD93D81A1B6BAD7ED7B001E012A64BAFC4185560B0F75
+ BEA48C7EDFB4199980BCB8073CC8F7CEAD8ADF1A68FA2294B6A884894EB02474
+ 54F7831C4DA63758F7B7DF35E9D692522C5792AA834BEF7320712DB967D144B7
+ 4897640A0B62D989C2836595D83E76583239F3A7D0F2E089C6EDF19E4DC018E1
+ D0F5D7BDD8F2DB164155AA58A87FF275494918727CE8D04D3EBB3D3061D5B0B0
+ 9AAC9B6FA98DB4608DFC9D4F4069CB5F1E4401900B135712763F8DBA4283E154
+ 64D1E3CDDEF09C6DBC102C4CA0551E6DCCB5EFD78450327B096C6A8626C85218
+ 742BF3C75800CB27E6AE63D3AC4880B246DB9583D4F2FFAFB1976AFD64391E08
+ CD6D961F095FCAD9B14E63363A67BD6ECDA0D065032D021FEB6C612A61EDD50A
+ C15388B62536511A19A82B84E87234DC46BC248E60C5E0AE96CB0B92BF28A8BE
+ 07EBF8B0C55EB70CC9D29A53407A1CDA8E5AE1BE5B023FB4D6A5635B83821573
+ AA5CD0E779F30D0F828FFC2990CC92E598340EA13910D2C0F1B2A96DEA9A0C5D
+ 0288428FC80268B86DC4FA2F0965050A709D57AF6DF9CC889FDB8864EDE545F7
+ EEA233127E2D18B01A95FAD8B277B6A2300F6C76F6C0980F116F84A7C6011087
+ C307464ADF91335255FD8A11FA0B0E661E5CB89886E95D3834E761C872BD83CA
+ 2D779B51B0E328F2C12C1298425B3FEC42BDD452A2D9ED78AEFE1042E86D61B9
+ FBF9058AAAF60CE470C405756E2FE1D952376D82387CC532C60EF2F2EEAF91EE
+ 68FF258D85F18479E20DCFE517DA3D217E36AD6999AD46AE87ACA434B691240C
+ BB20799BE21224950B39766B39D36F95B82CBC99E6AEE2AAC64BE4E65CC3208B
+ 29D6804BAC78B4D4151349DFFC0D70393ADCCDCA1BEDBC6AB7ADC0BEABFDE2E4
+ 5092F34FCE1D75EAAC2850E04786D89B98138A87BAB0F8827CFC7A560DC1994D
+ B2DDB1C9C3FE7D2D194CA9AE29279EF3B3157944BA742C5351E590331E72F809
+ CB048AAC041F4B70B8FF9B9278059F3802878B8AD03C14976B6DB6B357BB32CF
+ AEA302019CE7C268F9BE6B54203E07CE8D6C9C3B41C60B64D77B3A5F22585F2D
+ 5B950E6288BCD0F49DFC228BC8DB9C576D3D89BE55CDC890E104CFC2A7CC2838
+ 5211FC6610D52699D05FE917846535D3712A67B7B4BBBF31689E344C62F28F7F
+ 8F56A23D2B3FFD7B606EE5A327D0DC126260A426CC0C108C6A327BB3A37F1BBF
+ A6003EE764F01DBEDC3E550B3EF89EB0FEC675A3386DCEC17DC6FB97CC9E1A63
+ 79F21F77656DF7EA5BD818BF4373FDE351DED5E3B688E365331BF13D41D95FE4
+ 92B749974755CAAF7E078F81D1422A78DB14AED7C5CF69C8BC60B2C52D4999BF
+ B665FEF4D44F903DEE6D734DC9A35D0CF065F441E33BFFC2142B7BEA99ACCDB3
+ 5F0EF390CA3126B11AA308EC966AA3A3CF7C9BD029788C6E2155000734ACDAD4
+ 36834FA4A5D850594B19B3E69178C423F921DBC2FC8E63529276BAF3ACD132FD
+ 87DD28019FB96B6F59EBD4F890C170B6E45A6B46AF6F03A6CB76A49B8065F392
+ 7E36AA50D872A9E0DEF0B4920B5F70BABE350E2FD1F8803238949E157D41CADD
+ 9474A0E10A9632700F15981DB84948B470AC218A5A960B3BB7EB71C3734BF37C
+ CAF51EF45EC3AB1D444F34D21F59477750C5B5E7848499EBEA36D95242EDD92B
+ 4B70CED0BB89595B1C5A4ABE99C928E33F9FB802B7E03DE033A61A2F8D3CF63E
+ 14266ED62BD57DCF0F28C8294B95397E3501EADCFA0B6748182A79B00342A75B
+ 803C8DB8222C43412D72CB0535DDF3FD540BF19AECD7164C1644B648932E8E79
+ FFCFD3CA3428DE8C3E91CD1CFADDF780733FB3AC98F3A975A92547BE3CBFCDFF
+ B4331AFA735C59D2E6BA8E20082414B528FC2D78B34142C2CC3DEE0D41757517
+ 9CC54B2C8277C3BCA6664C3020D69FFABEA7BD80BE64A7EEE2B3FF1DDE293343
+ 2F4E67026111D2AA89E8522519C07C15712D3DB72DB8E69E6E947A512D8313B8
+ 354496C7AFCE3F74A16FA5089A98298DC4EADDCB7B8E86FF52F0D4965E74BFDC
+ 7B5804FCBB527ABEE658284281D082A06827393159F5A70CC798269917513A0E
+ 8BE1D8324D50F37824027F2E80C476D8C194BE88B79904BB51EA5571872E4DEE
+ 919460C00A40BE20280726EA86C9469BD2E7C5B905F81C791401D9D07CA04A10
+ 36621F1825DCEE7F7FD09561274DD5DF5532FBB044F9BE0E8E0F4D985BA847A5
+ D8640B5AF2267A66E98CCC2E136BEFAA7DC03B17FE1F95ABD2561824BA6CCD73
+ BBACEF0F8614C5A1F81010DDDE7DAB4E3D360485813EA0E6810C0F5C2989B875
+ FA588D931103CB7BE93A677CB9C975612861A01651C1009932A9D151069E51BC
+ 479F0D1D74F58BD2B5CC1B83D70A98E5E1F0EE53ED717A4BEF8AA247BD032F75
+ 1812FA3A644FCD833A3BFA65793300A79A7CCD08FD4EEBC2158572FCA6FC532D
+ 3A0C391002F97A8308135E051B1FCBE1B070C417DFBEB8796722A1A14E3E6D3C
+ 6139868843EEF4DA1EC382BFD2A14127A0D9847328E8C23FF57EEF32CB7F7A20
+ 06F65DF4A6B38E4EAADB43A6859E46724AFFF9AAB9E73347A1C02B8BCBE215EA
+ 93EC400B13DE4D5358E0A0CB706C6CC935CA7C8104066F9E81C55F53A1334DF3
+ 2FE19B1CDDEF52F6AB729900A6EA6B7725F4BF537DC8124BD12FCF8AAE826E8E
+ 6C35DB3EBEF0D7B0EC746445EED004ADE24D4E663020D32AD273B46F4E7BFA1C
+ 6E6A9A152366ECAA15BE911A0D92DE538165405457CE0FBDF888C082523AFB86
+ A6546D070F9BEA54FE4CEB33119183A907206113D3205B0EE82470D81BD49253
+ F363AEFA109478E653FD3950A896D2B906C5B3B4A45ADC8850CB7B0A220FABF5
+ 54C8B9E5A44349B409A57AD85E45417E74D97D2D596CD9E1F3BF24A6246332C3
+ 64321409F02C84BA1067AC7FB45344F402A29FFCAD9CEC28DCF49C56B8F4EC63
+ 8A7788F4AC2582892F289473919B575AA72FC765865A0C7DA00898AE099163DF
+ C7D8BC3AAEE07E08C4FB36D8A25728A39C849244F85A95D1359B0494EB786A04
+ 986C09D1EECDB9C3F3ACE751C1555366924DB9B5A1044D1DAE16DB41E5A66E1F
+ 6A9579136363BACE2C1EFF5F55A8FDAC9CC4475E43C363410649F0A20654D4C1
+ 915622AD5FBB48C70E09AA97E32392E33E08A5456F86D4036EB14B2FD1D3A67F
+ 52D5931FF44F8B835852D78AEB4C0F9F78A4553B44E932D104A434BE7B51EE4F
+ 643F17A66074FAE81411FBAD6A322EE8127484AB55B7DEC19B1A81F312F6BA45
+ A01C9E1B06067D2B842754B636F0869B17CBDC1A4454C063F0B4A010C8DE95ED
+ 7CE8B314C38935086AB9B52AD649E82AB0B2E61A6DFB9420259E19E02F19B959
+ 82026DC847AA61654C992540A5502BF6CF88CE08D22E80429764AE298F99E4BE
+ FE73A4BA4C4E31B883F5E804759770265B37B60B1593016F545CF833A72FC294
+ 176ADC3D3F8EB61237B800E6797189C1ED790DF495F93B2B934BA323251E39E5
+ 1AF43FE2F671207BB0028316CC85491AC6D5D37E4E3736FE6B0BB45769D9DDF9
+ E1A559622DB050AB826DE48B31714A215F002B2564E27A83B6FFE4476520A647
+ 625ECC7F00112E22AC3C10AD3EDF1C8860484EBE7EA6417E4375032950310ADE
+ 91700C0C173DA0E3D277ACAD119D46DDBF8104B80C380DB2FC811CB36873C146
+ AC5AF37F127E8951F5CCBFD2876694B17F1FD7B07D6F0224909ED53BB1A338B6
+ F80E40372E3744889CCF039923BF56808DB3DB61E8AAE9C1065E12E5E9BF2D0C
+ E8010A6553E1737A45A70240C566443CD63C61EA74A7EB5027A736C9DB46AAA9
+ 4EDDA02B91D1ECC7BCC15DF930BAEF585B591574D1A795393DB119B5FB7A842E
+ 218A755C497F26F28FA23934C6DBBC940FE7981AE79CF00DC981BDC38000E89A
+ DFD1D99E489D4DA1A4BA716228E8C5CFF3D8A6497832367C0D02D13F6B1A6301
+ F045427A65DF558F4527878B85CA63F06BAD303CD3C32F8DDC91D1B86FF35971
+ A2FAF57B9FBCBEFC2B7C712B40E827893F11B8807112A58BBBE054DBBA4C0E93
+ 8F1FD760CEF12CED1ACC1F3A0F5059F4D6730EC55486EF677EF3B836EA81C18A
+ 9FAB77CDCF5A0A031EDD4A37FCCA3D14E00279131EDD981253D080FA53882F09
+ 350E7DB7B1487FB2D4BF6BA9DCE16E11D3D931E751233EBA8C0F35E2EC39B891
+ DEC387C15518335041C66893B36C3B906ADA15CD8F88C99067285035290EB087
+ 923038071845392B07B939BF104547BE0E30C51709BD9AF240BB686DB007A030
+ 6FA3215F7C3E9DABC3EB7D4B5C789EDED99160730153E79E635BB5B8AF28D8ED
+ 093A3D6611EC565FC7781D14B3887FE201995D2F675F3F597EB50A9BB3404871
+ 10D931B6DBB34A58583247AD731DD9CAAC7142DADA64898798B7E3B784015777
+ C2BBB1BD11B6B8AB327D10181E5E9D08EEEDBAD19A76EF67B089AD3FB787C7E3
+ 6702BB51B9D6819335644121BC00CAD5932B081376A7B7CB077A463E3BACEBEF
+ ED0A3877363A7747676F1837CFE539D9A86204BB717CB363092BE3A6317F2792
+ 8283A88DC0D616DB3AD97DCECC794EF8EC0CCE6A6AC71D6CC55E861B59C5016F
+ 7C47E09E677DE1594E4B3CAC9C1695DCC265D45584118A96D059456A0E226A23
+ C40A3723BA1BCA3F2473F1B208CF063BC16FAF9BCADB81E418BB1D84A83CD7A4
+ 15752DC74DE2001383B461714E14CA006D0F759E232076A4604DD7ED9BD43C36
+ DF3480069ECCF31D5F0CADB0A852D1722FF5079B92A0455AC8B6700BA4B7B99F
+ 3A216855317502C4A79A185712FB21BF34A37FAFDF59640451600F948FBF2DA4
+ F2A28EFAB8C5D153225905E8D1D3D6B6678DEC3D1026443C43F735AB36E74661
+ 0FB4E3C51552BB730BF5CEA82ACA519747349D912BB85052D28C36B2487E7E0B
+ 287ED78CF6CFCD751D4C5624DC40690433BAA19A521105B35137A108981C5D61
+ C1D45DC3657CA1CD0FD21B64619203955539C55B6D35FD6C63B0A567463086F3
+ 6F3B2063D3251710EC920DFC4B17F4A1E8AD80DCABD55F8630FE5EBC80BFB44A
+ 8803242FADCF41C83594C027A690CEAAACF2F9C66140706EB5AA340CF6BED080
+ FAE33D5A34F2E27C1337EC9C2EE942145F41A39AB871FC6D5A9ECDA765C25064
+ 9864BF68BACE2A3C224C7BA23A2CEA26A6E0B27F9DFAF25A9396BFCED0337603
+ BEE2F121CF61512330D3C74F80D5F5DD3E66F77EFD0BE20CA59E806910CC2BD0
+ EF2E7612C1E91BD928492D9EF9FEFE59F251BAF4B8C1902AAAFC5B96D5FC6814
+ 26E221B12CF20DDBE7DC22BD919563961A1BC68939ABEA7B365916789F7E9F5D
+ E7ECD22E99212568546E1A321FBA29AC89BEC076C9DCB937DE55F317FC2E11D1
+ 5D497FA86D69073032D18FB553588B3070E543D91E82FC34857E5067F9363494
+ C175161E060C3C30FC6FD85FDFB9D3DCCD0392B10DD584528A46A7310A9D482A
+ EA44701653FEEE8A1114E82E3B96103D00D59AA44470E9B68A9B3703BE92EEA0
+ CAAC9E79BFEFEA4572D3CD62FFB896132656A75F132B52E5C7D28D376AEFD606
+ 048C372F3C7A420CF263D995FF671AE5212AE6E1082F7A130A3B090D6D41B971
+ A70E2E70F0585187CDF3738DE5029E6B785F6FA63BBC0ECA7534B94662506A68
+ A69BF0294D1F56533CBD2ABFABFC45DD30CFC65585BA9BE092D87328F398EFD4
+ BA0FE2FEF791
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ /Arial-BoldMT findfont /Encoding get
+ dup 32 /space put
+ dup 33 /exclam put
+ dup 34 /quotedbl put
+ dup 35 /numbersign put
+ dup 36 /dollar 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 55 /seven put
+ dup 56 /eight put
+ dup 57 /nine put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 60 /less put
+ dup 61 /equal put
+ dup 62 /greater put
+ dup 63 /question put
+ dup 64 /at 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 88 /X put
+ dup 89 /Y put
+ dup 90 /Z put
+ dup 91 /bracketleft put
+ dup 92 /backslash put
+ dup 93 /bracketright put
+ dup 94 /asciicircum put
+ dup 95 /underscore put
+ dup 96 /quoteleft 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 /braceleft put
+ dup 124 /bar put
+ dup 125 /braceright put
+ dup 126 /asciitilde put
+ dup 161 /exclamdown put
+ dup 162 /cent put
+ dup 163 /sterling put
+ dup 164 /fraction put
+ dup 165 /yen put
+ dup 166 /florin put
+ dup 167 /section put
+ dup 168 /currency put
+ dup 169 /quotesingle put
+ dup 170 /quotedblleft put
+ dup 171 /guillemotleft put
+ dup 172 /guilsinglleft put
+ dup 173 /guilsinglright put
+ dup 174 /fi put
+ dup 175 /fl put
+ dup 177 /endash put
+ dup 178 /dagger put
+ dup 179 /daggerdbl put
+ dup 180 /periodcentered put
+ dup 182 /paragraph put
+ dup 183 /bullet put
+ dup 184 /quotesinglbase put
+ dup 185 /quotedblbase put
+ dup 186 /quotedblright put
+ dup 187 /guillemotright put
+ dup 188 /ellipsis put
+ dup 189 /perthousand put
+ dup 191 /questiondown put
+ dup 193 /grave put
+ dup 194 /acute put
+ dup 195 /circumflex put
+ dup 196 /tilde put
+ dup 197 /macron put
+ dup 198 /breve put
+ dup 199 /dotaccent put
+ dup 200 /dieresis put
+ dup 202 /ring put
+ dup 203 /cedilla put
+ dup 205 /hungarumlaut put
+ dup 206 /ogonek put
+ dup 207 /caron put
+ dup 208 /emdash put
+ dup 225 /AE put
+ dup 227 /ordfeminine put
+ dup 232 /Lslash put
+ dup 233 /Oslash put
+ dup 234 /OE put
+ dup 235 /ordmasculine put
+ dup 241 /ae put
+ dup 245 /dotlessi put
+ dup 248 /lslash put
+ dup 249 /oslash put
+ dup 250 /oe put
+ dup 251 /germandbls put
+ dup 0 /onesuperior put
+ dup 127 /.notdef put
+ pop
+ end
+ %%EndResource
+ 
+ userdict /pdf_svglb get setglobal
+ end
+ [/N10/Arial-BoldMT 1 TZG
+ userdict begin
+ userdict /pdf_svglb currentglobal put true setglobal
+ %%BeginResource: font ArialMT
+ ct_CffDict begin
+ %!FontType1
+ 16 dict begin
+ /FontInfo 15 dict dup begin
+ /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated.  All Rights Reserved.Arial is a trademark of The Monotype Corporation, registered in the US Patent and Trademark Office and elsewhere.) def
+ /version (001.001) def
+ /FullName (Arial MT) def
+ /FamilyName (Arial MT) def
+ /Weight (Regular) def
+ /ItalicAngle 0 def
+ /isFixedPitch false  def
+ /UnderlinePosition -100 def
+ /UnderlineThickness 50 def
+ end def
+ /FontName /ArialMT def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 0 /.notdef put
+  def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0 ] def
+ /FontBBox { -222 -250 1006 922 } def
+ /XUID [6 44339 ] def
+ /StrokeWidth 0 def
+ currentdict end
+ currentfile eexec A0B00ED5187D9C0F1ECDF51878C3AA5CAA3EC70E14AF46
+ F38884AB0522111E1FD6B5E292C7A7C85F79C8CF269C29C6F79E84099DF3FE97
+ 919C760621BE9B4756D5ECC123E0FEBC7A1BC9CFDCE3B7AB1B118837C4B97C17
+ A4A2D65552C37CAAD683D3DABCC09A36FF0DBDB89E43724FD10F7C1BE056E775
+ 101008AD51C29014E0B4AFF4CDE74E1CA5A64E39C83FCEE568A997B7D0D888FB
+ 5AE51C74D8CBBBF61463B3A1C80032F9E9B615124B88BD716363A24D9B750718
+ 4290A3206B935F4107372023D4CF18300B61A6F017E700015589C6D8BC7BED9D
+ C6B3584EE181363F824D6F1E3CF3DF48A631A54AC4E8C81536C1461454CB4B63
+ CBA14A6242F261EBAA3F7955E7C1E758A77E93DB07F4A86D1667FD99BA1B965D
+ 92FFB04F46A8F81AA8F43A6205BDEBF751C54A5394DF443719D16B0AFBFAF01B
+ C9203F81FDE5B931E192C430769AD893C30126CA27135878D49BFA89AC71C990
+ D2A4E8825524271BDF10C6FB049A8B0E7475BED9B44CD4C2B8104452ACF12AA9
+ AC8AFE331F9AF9B0A708BBF3F45200395732639C0F92AB91274625421A93F511
+ 6771881AE8715C58B854B88976701B5385AFE60F40E1B56702BA711ABED94473
+ B72503CDC76C7C34E0A2298FE19357CA17DF344A592ED134D171E58899FCA9D0
+ 62653DAAEFF8D71C19F6D3958220794375F07D635FAC19B5C16DE6D9F30A648B
+ 9FD57832B6804A07E3B1C5D6B07F59AC95E2FCBE0E02CAD0960ED6C98F70D7F1
+ BF7885DD5F0B40BAD91171728FADDFD616EE8A88FC18B5C8F16804C16D7F6408
+ CA476477EA76AEA7911801F204F4E0C0313B1FF1EBC254D7323C0DC28797B201
+ 5A904335690D638EC2C45723DA891C15965F7E459C7707B5CA2F5FD3AB3E68A0
+ 313986EF4BA1E06DA9EF1C961944F5EAD42BF3F30C93B800BD3829FA6254F143
+ 6E9FAE87431D328C947B5D4518A07B8BDFCD64BE3F120FB418101229783A489E
+ 248775C96CCB00A5E65470D0FCBAF0FAE402EBD451D060534D8C0BDBEBB5FCA1
+ D2EC726465F6E37F50D455AD5A00EF50DB61B78CD04FAB58973478F3D9301CBF
+ 6EA03071660EAD7CD6BAD616C77689D560133648C8F3CC438400A2F69C672330
+ F046654B0C61443F393DC0B4F138C0051B027383B50F624D1B597BD5B6FA0F3A
+ 255EA0200400F6EA8C15B2BBA215A6DF7152EB6E1DBA4ACCD4BCE3511207E8DD
+ 13212B8B2A33C259F9AE30A45B338BACC981BE53D6AEC541E6DE02A15260EDAF
+ CAE20D543A7277E81EFB454532425CC074D08E1E3E066F4B62AFF15EF8F59202
+ EEA5CAF47E4C5F55C16C0F6BACA0E175A659043E50A65B8A4CAACB535CA5BF25
+ 824F7EBB192DEBCF59F80B8E8FA78634C7E0C86BAE5385477AE8BB9CF7BADFB3
+ 05296420051EA5FBB7780324620366F20EE93A46EC5A65047F69BE9E82953C57
+ 5C363FAB8A11C647F86C8FAA99FB3C21E2E9B9311A7F61CA453F919912FC714D
+ B64BF3D52D3FD48D2BF9FE81EDDC7B93896BCD68C3DA1CAA36D446DE08F14F24
+ 881212362D63355AC0A4A4C1DE86F48D18286C2EBC5325387915D77D6586E10F
+ 9F7332A871D5F876C17998EFD998EE49A21B141B60E33C515464787589D34945
+ FC6D3C0697E124CB796B6570FD477D0921D4B5C20DA297A3A5990F39ACAC22CD
+ 7C0A2E2F6013054D2306398087113AE376AF6BF19822B988FD14AC9F0D11A0E4
+ 5B6FA61BC823D97A1BD3B4EAD9CA98A68A8A82A95731ECD22DB5E62890A468C0
+ 33E806EA900AA2683E537994FA1CBB14711CD8934550F385593F10E49455D48B
+ C883E2923D91AFACD479F37E4502A252C407B0A3E0E91F083ED08D5B9EA01C30
+ 9B2A91B3EB2B2A9BE3BDEC6C2F1611F5FE5B6C5D6F63E1007ADC1EC081577BEF
+ 25703376B5CB3EF7AE0B682521326B0602AFC8EDD3F9D29B6681B97F2F6D02C1
+ D6B9951EEA1CD4ECE1D1B9030D1E8E498ABF13905DA3A3EE416995456B39301F
+ 1A268AED8DFC91A4941FA2E15A40865DCE35E106B036811366F5A809D7BBADF2
+ D3BE3E66576E1CD5F49F26F48231FB265825D1883F5529372B539765B684408B
+ D9827D62A85A3223BE93705ADD0EBE9B209C4198FC396CEA26F3C39EEBDFD571
+ 696FC4FF8A1046721B1F5A2459772AD1B1D73E8815DF6075C56D6CB4821496E0
+ 6177B9BCB8D9DD8141264C9351D1CB9C66F3CA360C73EBC99CF256AB34832665
+ 418ED547CF8AF9967445629E3F8812D72C9A1367AF724B29503EBD2709A849A7
+ 73B145ED245AF6F558EF3C3DD58A79841D2D8072829B4354B4FB9B92511C1DDE
+ 4419ABE724FE38922CB46D755965EAF364546A8113725EA3F655A17D23B86DBA
+ 967D6093A61D81E7D891F1FFCE8555AD2E572ABC392622947EEF2B19F37EE7BA
+ AA23C81AA8366982D80AF6F8E800DE29C5E9E9F27EA194D5DD0B05448BEB860A
+ 0F1F0A6B21B920C11019FCD3C7AB2A9131802E49A5C0D83D24282D2893A4D414
+ 25607C2775199F43509E85DEBD1940B6BB515F1CAE035F62783B8CE47BD02AFB
+ 20A5F22CC3A1FECBCCF75E71B22DDCB8DDC1E6BAA1149EFB3643C90574D5854D
+ F042CFA4C6AD811BFBF1D9B3F28CF5CA542033379C85879D32122C8A647978B5
+ 196B70CF7AD5F4986720107860406624DF6DEC7EF00F683504CAD094C1D9B02D
+ B0F85AB73DC47B4E598324D3D87348A08FE851CB80183CAFC75DA9F097F437F0
+ 4B201BE3D266A020292DB51B30FB6789E6381981D1E4F90CAF8B0F2DFC6D169B
+ 30E18BE97EF91B75E09904BE317F7D6F881EDC478742EEC2B480E9E8A7DDD194
+ 42B4ACBF73B56BF0719F73E4E0C4FC0FE55777E7DC2FB7C28E043BFA7D93D42B
+ D399400549C35FD4A97B36275903BD7F0B87BA7171186DF4E052114E06CEB9BC
+ 507FCA94AFD74BF077E0A0926A1ED0C76395A9EC95964026A4A3D1201551B0A4
+ 505DAE3B203E6597D3CABFE5F0DA7173630CCB05EBAD3994A072DFC27BA6E93C
+ 965ADCEF109D4AC3AAC43F493750D1A3AB840159EAC69422A70E17F078931605
+ A65F6D264A140DF4B0466E98FD9A620B48E9AE7AD462E8C6DAD19A6074CF929A
+ 5FC78056D249B2E2A4C64E3E378047787E25C8E3CB799831021990736A979469
+ 291E01D76778C4854DAE4785D7554DD5E5159F2C95BF76B752DA815B8E123689
+ C77DB25BF0A6F0DE18F8CD9E3E585C5F5A806ABDB3B1653BEEA0D7E0EFF2348A
+ 8AA54DB0B29E5A3FE8AE348EE04F1EAAA7A7CA16A43E7B6D4B71312A9BF29191
+ 4C2B3DC2BBE1D3B5ADC998199239FE7639C1345A4BD8A6366436580CC30C0D05
+ 84914262FC7E798A62CF2FEF968D05FD4C6863D9AFEF5AE41D12FDC272C50695
+ E9AACE78A61FB7017430186DDFE3D535471936C2FB4C7AA03CA3C7D70CA15526
+ 0F851513E08FB11A3A1AB04280E4C22F2F06434DC59CA70B7E9EA443668902F7
+ 70058CAC92A2967EE581143887BD5165638B47B6F0A31F01647C28F56263EB6B
+ 70CBF3BC9C48DFDDD9D81BD7D323D3B1086E35B86A8D111B3B5A656119239CC0
+ C106D49294DFA01E1D32745FC88F8A17E614A32164B891EB787F4D681E74A3A8
+ 4EDAC7D8D6BBE9A84FC9F7FAB3D7E7211E4C57F9CFEF7C5C3D292971D4435199
+ 2FB5C396D93A20FC01C54E903A7F0809F44FD39D74F194F06D5B2F6112181321
+ 59BC06420509DCFC2AA4C7C0E2F7A01E47C4AF9D83474EC7C326ED7D45F67550
+ 283B1DD83F682155C7579025A47218D6393B6E10F1108902553B1D9E4679927F
+ E6183F4673276A1371895857A61AED50ACD7250CD94F01E9728F26CDADAFA751
+ D4F63803ED04708EB64E3576196065311C3CEFD7C823B8D03A71F983B2F61182
+ 2D67217F51E80DEBFF0ACD0B71B7E4C5AF129DC11E18597B3930B67358181789
+ 1ED9A4BA4304DE8C02D520423CEA3FEFACCCD6C51997E2E201F6E658EDAD7BD4
+ 2E3AA2A040D205F5FFE0AACEC3CE9E35304F2FB46CFF000E19D908FC360AB518
+ A6EAE095E3A510D06488F5C3356DE58C20C5383125A8B70F64CBD689F9CDEC93
+ 57BA59AC019828F415225B57BC706072B26C15ABF21195F6E812D1BB55761502
+ 878F7DB41EAEE10B72FD42BE5847344D108DB5FA5C74F8F92AB617C50FA6EA2F
+ 4DFB003C241E522E01FF393572F2024F506C99C4601195958FB17F6C2A7F0754
+ FA9DEEA8466C67ED10B6B49826C6F417C402D485CFB262847B307A9481209A62
+ 554927F8860664038D73E298BF0A865EF16075A64633F2E2D5F7604C4E4A1535
+ 6CFCFE727A89C10F122EFD87D157177065A8676D9E668ABFAA25537BD5319418
+ F6C9C826082D3277DDAEA8DA0C332AEE80E03DAB6B1F7CEA226830BB7EBFB709
+ 832560C9174EA571FF354742FE0AEBCEDFE381899B2BA05F61C0D8ABCDFE3B8D
+ 274A6A0D49520EF4EB02C62FC5160AEA8BD284445238EDF8A057BC091B85F418
+ 5E979392F00A218EDDE76F97E2839B17E7B4013F130682AAACBE2F9218A5A93A
+ 3CFC057F5AF071F75B82206F94FA17F54E6F71BFD578EE68801F1567E97C9E8C
+ 4B1A22889D06C7FA4668981F8D70729AC4001D4636228A46BED87EDC73D5AEED
+ DA1BEA33F6093848FD2A6AD0F6FAD9A6DDC132FAA99398D22819CF29D5C2AEF2
+ 9349373FF31A56942922C297F03C923E52FCCF4FC49B3AD1D9B05FC03F77D26B
+ C266952BEE8927F257BB29BE33E2DC8D37293F348EB776F1595C2C705AFBD1D5
+ 981A9F80BA14BA7FE2AE63F9629300797CCB7BBABD8ABACCAFEFB4FA0C3F6834
+ B0605AC8992CEB28DD64840FE35F8B82C3F28DCA7F59E7BC15D3CB752DB98E70
+ 5DFC14336FBD98825E25422E29CF9A454B39749D7966DABE2A62B10E651FE4AF
+ 1BD2D7967C93CB7551E099927CB0F327B98204F5CC896C8F54DFF84E54C316C4
+ E7E80C35DE22DB201CDA5CC2DCED211BD2C0301F44CA54DE07AD73CD4605835A
+ B026D2E53F6518551C180469A83D5F7131E367452306C1D71E357DBFA8BA9329
+ FA86682E0A5A85A91BA04972CA5138ABA88959B004BB9377484493051DD68056
+ 1452C5D202A15A433188F9DF70526AD0B5305C14812CF2481D22CFAF89E357C0
+ 97541CCE109C468AE99ACEC83FC85D4184D7333A4EC3ED05AB4A4A313F8DCD85
+ BAC1BB0E4DFA9CB36DCE88099A0FAEC665138EDD86436191BEBF4F67D4492865
+ CE2E446C3CD9634A474E7B53EE756C93B3EE1EAF95BB66DD465D52D853FD2434
+ 1760250C3070601BB35E4485ABCFCA9E9D257334889DD0909C9A86399A41D623
+ 20EF0320886BFC2F9535C231851CA6F445FFB4449DBA10A78E6C77AA45C5A880
+ 3F46952BC328B80D38BC1EBF615EF7C603C8734ABF624DF726B6B6FB281D7DE7
+ 5993A64E15B7BED306D4D293D5A7DC84148D14A918AE73856C7685C238C2ADB7
+ 6A4FCBC74DE4837DBD244DBBD722D09A253FBE3757AF79D4262582FDA40E4EC3
+ 4B1DEDA6797C15AC457349203A28871D17D447280DA7E811D24033D38BC3253C
+ 1B213EC5DD2FC811A5DABFF75F282486B192093BEF15FA2E510C15DBB9681C92
+ F8CD64F1B41901559285B089B87EAD0451FFEB200DD126A264597DB8550CF94B
+ FBBB78899EC837CB7C2E381BF444B4C1E2AA2CB19836726DB0E745C0A3029521
+ 602D5EA7BD26F33B2BEE4A255F0D301A372724214741FA66503A801CB88C6BB0
+ 5C6F22BFE4E8F6FD3F37927AF7C71F9EB5F42BCFE1C26AF0A40E16B9238E65A9
+ FC4812BEF803C8D42ED81D5F9E6F130267D4516DCB084412E72E2E4EA3A4FDAD
+ AB6067B4057A35B7E507ABCBE265581A2E60D930EAB40763A9131FE72CD14C15
+ 1AFDDE4C0154D812E7222A9F587CA1BFAF7E70F05493DB925A8ED8D97D07A30E
+ 83633F45923213D47DB0D546A818873AF1DD0FEBEEFC2F4BA27C2AA140954678
+ 7A3DE247426E23CB0B5C0C2A535D1378AC6C153F7934542F3F0803AAB9FE206F
+ 67EA2A77C782C72F0214A3EBA8B4776214BBF5537EFAF0C8864B6F7847BC07E2
+ 538774ACD5727D517C77F910035857B3E6869D14F81216E35C615CB010CE1692
+ 79C7F8626498BD854DE0E5E13D50B09C16ABBD96D3A817E53CD541454BD23797
+ 8AB95BDAD2D0CF607BED989668A3404976D194DE3DBE045292061EF685560868
+ 54B4F11CCB21489E7A2DD8C120E70A7C6EAC263B1B89401981D13BE1FE2D3AEA
+ 7572935DA23FF1FCE073689EDABCE1144C31B4521811C56D0B787551AA6D87CF
+ DC7B1C6936851BBB0CE2923E8CC97C30E3DB86F0588DB1CBD9751E3806669089
+ DB0F32070C9DD2310E54313113D3D3AA330A99B4893D8FF077662960CA4AEB8D
+ 6FB4CEDF2ED2926597D155A7BEC8EA3011E735D9A7B17EBADB27C09E34E5909C
+ CCDFE5B74556577A1F31073B9BE6876F397A6B51C415565F6CF4F8477876A909
+ 7AF23CE9283F99924A00670E377FC6CC2C5A2EABC51687C0A0E3E7833E270520
+ CAAFBE18BF863B4B950F6916D6CA8E6454EA76C04931C7BC883C0070AFA0DA33
+ B3DD70DE68114E8A1C6E164D227A3F8F317B73116043A0C145025CC8A322A637
+ 583C084D10C5F154EC29D15439DD8F436A2D4C56D56D147B851BF96A3F0535F4
+ C0B865CFF88DFE0DECFC6AC9A30F51E6768BD8475E76DDA2D8FD48C5102706CC
+ 98CB773088B05F0492F2F82FB213745B88D87151AB317085D0444492421F27C3
+ C01B3C1901BF86E719ECBAC5525F9B0FA862F3A10E549B9F07D9F3B43AC51BE2
+ 9E107E737D3188A91CF57D7C739583835073A7082E94336EA42BADB20918A370
+ 2E5E6F121C11BF956C3C23F1F1F9DFED5F187DAFB3528C6936BCE11AF4793087
+ 763B4F2F4A81592EC7074D2ED1BB0724D82629CA7E054BB2C1EBA8B49486A11A
+ F8C92EF89C735AD88242C3165CF44EC64ABCFE378C1EFA1F11E979C3D09DE332
+ 1DEC2A8C1CD30E12D4A960CD33C72ABA46BE1BA9AB05F1746A1F707A746F5AC9
+ 023910335FFE88A5F9B9768A9673845D30C201A6CA3C2E65FC911EFAE8E54BCE
+ F877A8236A2835CD2789A31EA9F7F422FD785A3503AD0EFF2B58105FD86CA536
+ 938DFE5549BB115FF1170E31EFBA8E6ADA58730AE2F3313913DEE77E01D97EA7
+ 71C5FEADD8DCED4F881DCC1A702BAD8D36A0A26C1EDBC4F00F0BB21BA91A4090
+ 8BA77A7CD5BBF1D25BC0416B5DE1456EA3188DE97FE0EC0797119E9C8E81FCB7
+ B9B137E9E4DB829A47A4FDEF03D93F5F45197F46B2E7C04ABFD55C960C2F3BB8
+ 7A9EBAF2BCCA67D6D78DC86FC44F55730490DB4C00EA25CE4D4A5AC4AA45B973
+ 10D3D1B7CF84E5C3877DB63EB307E3AC2FCB62FA9CCE135A5809C7D77B20983F
+ E2471999B318EA15D8A33389A86B84EE277BED89971F32588795B64767D20621
+ BEB1C7F003F9AB28D396C2CEA1B668C570A90CB21F5E69F440046D2E255E8DD8
+ D0A30521005616262259349A174E88B8CF8468B94876DE0CDC2C2AF592FBE1FE
+ E94912C87E4D2EC34A10700BBE528FC38675766FE8DDBEE5355D2163156B50FA
+ 2B74CBD15D3950D36521F6E971510A5A6DEA8D50D0F4B3A9124BA2CFBB81164C
+ 351E911EDE208416757BD186DED69B24C81095A7CB7BF185E5B69B842CE11CF7
+ D80E92CA194E46162A5EE583A61C212475A0F9B70F5A8FED079DFEEF281609E5
+ E7A953EF08DCF8117F9872E392395012EA536B8EFBA94DD04D94C1EF7714DF01
+ 482BC1D9022406CDFDD713F8A4596AE80CB3F211DC2942FD033401D236F8D433
+ B37A27FAF8362C22A69A558BCB6F6DEFC0F853D379ABC4706971E169EA482ADD
+ 2BB3F2E91972C87BEF275FD07735815E0589FA5C02F2A51B8EBD6DC6333738CD
+ 1D5C910A279E9AEDA7496AFC29E36F678C72DE40EA33F2750A36846A2B0D2A0C
+ 961D48289B981A2EAEA7CBF3B215724FFBFC720E949717ADA630CFCC704B1307
+ C652D4ACD8E662380F9C2E11088BFE6EC6ADAD402464BB35E629B05169A78927
+ 11704A570B24357C0E267C1700BF6DC76A2BBCC6F8181F710652DF2A85BEF960
+ 241256325284F09A457DCB98A6E8D273952966804BCC023A216EDECAE681A522
+ 7314668D3B38C0FCDC11EB7CD50781790509BD9C0706810CBA7C7F4F0D0AC364
+ B6732C64FA47A65FC5DA6DC109C18F4F52E02DEC24E434D9F6BD9A53711A4042
+ 6483BA0C7C2B8A85CB30D4F1C5F0761F61CD0A99890D7DAA6C97EF326BCDC88C
+ 0A9F6C6C2D57950CB482D4C4E7E3503FAAF70850EAF284D73A4D7CA5440D625D
+ C96AB5634CFCC923CFACA343C0A3A361756D55EEA1FA1E9458DDF965C6C0721E
+ 92C5A066FE13F9F87EA9B3AC013BE4D5E85D7948F182C1C09CCD3C7945035BC0
+ AB8BD07B2F0CCBEC6EC156340F12478E47F28766A3667960BACEC484E745663E
+ 774177E99D32F9518A31C0B88281D6270BC5DF83CC23D686C25C6796FBD4E617
+ DB97D6F572BF4E91E1738AE1F7A7B0FCCC4EA07E5587B99836B6BD04949A5112
+ 9AEBAF7D89259CFF3E03DA661B3B1F82BE911DF21E45A4C3002E15737170F1E4
+ 323B0B7A025F0987FCD7F6A7C9EFCED4D09DDB60F10FEEACFBB32B898BDC4413
+ 0329D6D1260176B9E2AD358DF23C526DBDFB27F6F2FC81E3B4FF796D3D1856B7
+ 25D2A48B2F82BC1EFAFC038823852E753ADC3614BDFC4B5240FD8F47C1DCFFE7
+ DF66DEF58D9E1633E57DEE8C7F8BBC9BE0884EFAE93894B8709D88161CC43132
+ 695A72320B57344199C502DDA81A446D1320DC4B62B7F6D7D7CD43E94005DD7C
+ 88F0FA0E339869EAB6F0859627F61F5BEDA3795059388222DB4FAB385D681BE2
+ 926000A8009A42A1252104E6FF7F1490259419F89A47233D86E083A5AB852AA1
+ D3555D05F4B6B52C28479B91CDB53323517B6B40458AC4A3F567DF142B654D14
+ CAD1A682439D29908E29EBC65889A472E9B15E6468E9ADE97CC6FE90945702A4
+ 262B8E6BD70D0AB853AE8E57E302049A02139C82454024093F9724685C8B8F94
+ 34E23495444F3B8D195B1BEE6025286CD66DD297FE7C5350BB3F4AC0A23D9B6B
+ CF0D4A411C7D018291150EB9AA5351030FB716D1E0FA5ABF14A1CE6D98AE9F03
+ BDC1497FDB995F1BD7482673B12BF732709B22B1EEB113A389AF650BA6CE57D9
+ 9CC63BB5A3E8D0A06480ECF7C9A87436C239219C246E42A7B5AEAF43DA8042F5
+ AE62704E332B12A5344D50F672099E4543F5CE715227B347D3EB34F01CEB1FC7
+ C2C1E151B787739775647A7F27A6DB802AB28F2A83472D8EEF7A74BE517C61E4
+ E6BFC3FC8E1022B63623FD987629C10A4B0E8A8563F2E6CDB34249F2002CCF4A
+ 2AAD7677D6298DA001C00CC59A45CA32D7373D3146737A5DD6D9C3FB40CD16D2
+ 37A5F759FC904936856CE916AFBFC3099D8D8CB48891002B222110E169D32E61
+ 53442A14A1AD51280B918029B9699AAFCC01B0821781A23CD5A5159703A2C2EF
+ B9BA7DC8FFDEBB091A0703426B8B37C37156BEED1B67526995BB659CC9757171
+ 502C27380D4FF5D3B84D9B50DA2E7DAC00A9B4F737E2F0259D3678DD3790DD91
+ 3A59CF899F89C68F4A4846DBE7D1F5BE4D544C4796B086E3D93D199D6ECDC003
+ ADED84D3F8973364BD288B8A662395450062893C1237F6E9CB438E1F9AD54C48
+ 4DFB2C86D923E7D33B6E42CEF8A55F0A67238927D8548E8F9D27758B8D1E72ED
+ 9AEA686369CDA9CBAA3FADD8BC374A462D955E641DC537E2D581D641F19062BE
+ 34D14F7D120ACE457D58D888874E84A44E1706AFD76AEA9C956BBCDCD959837B
+ 7292ACE14D63BA658C049255AAF1191A797FB9559C473521FE3E8F7A6E5C9ABF
+ B539268C27554413C9F1B7B822020C9949732F6918EDAC9ADEDB11E049C4B239
+ 3672F95D00D6BAEF22EE08737D32820D7CDF18EE825159577F65B5ED2377A68F
+ 2FD871D4407D212187F5E244239C35DBEE6894ADAEAB8F5CEA9FFE0F2F2AF3EA
+ 9F99F097AC38F210D9EA5C66700058C33E5087E2003E77E2D3E7BE37E9E7B0CD
+ 2A9295EFEDE8A0D1154196ABA5CAA8A5D65A1C0205FF05237F58C097B78A9E7D
+ AE71257606438617BBC922D7808CC73897F6605B39EFC269E674F6766C52F061
+ E8C14DDF8E6F1FBAB411F50C4E9E1CB90541403BED5A569238A62F1B38E4FEB1
+ B9D4C82FF075F64108679F06DE974C2B98154F8E71CBC4445AF6B9D43E715C41
+ A424477DC3BE7900018EBB602045D605E9EDBCF0457F45649D869489A7B7D8EF
+ D0B5B00E0EB522FD0C67453089839D8601625F03E646CDA3E9D7B03473597555
+ 5D6989548EFAB9D2AF83E2F8C26CDE5A9DD7FEDDBA3C1865444027ACCB3AF41E
+ 20A9ADD814E6C60315716B618E75364EC70CD99FAA93278AE712C5EFC1DFBE96
+ 579144AED2BABBC932665D840B48B9FD71B263A1D86EE2A08E6DCCDB791720C7
+ A83BB28A3629DB628F623EAD1E8910FA6B905E1B9639E2EE4812B5AE9C42AB1F
+ 9596508320EA819B33CFA017F8636707C24106DBC4F3F7E56D0F726B455CF905
+ 6117383B6994F9B08AB0811FF256390717726F0EF0B97D98C514234722E87B33
+ 0957ADB0E40AB53C301F363AB2006663E8511CB09B4791D5254A8B42C01D4653
+ CE459F2C8F44410A3975126E2F12A759CD253881D9D1CF91A1A62B056D84069E
+ FDA1A4B9D76B2019880B1C2C5AE9DACDED2FCA522B507425C033C39D34E914F6
+ DC4CBACBA8069FC4917AA791DC56A9CB90080222064CDB87CD26E89B79BBD375
+ 67FF6BFE2CD60F20A808C679C130B66FA17B31E6C3F41EC28BD1C4C2A96E944A
+ 05662279988A7F41E1AFAD375138CEF9288697CC55BF125F7AF57B6843C690E3
+ 5FC7F7B2802DE0260498F7D723923EA12A5DBDE2BD757FF33E2EA8BAA974E53C
+ 890A9E1C29E85484D7176A63C038ED69663F2EDE72E54F0C03FC546D8424812B
+ E40EF5DB62C7D50827671FBBCF27F0A9AADB8D15E246ACEFE25BB49430C9C37E
+ 415BE72ED38AE50B22B5C9634ED88ABFB6438DD6B13C74BD7CB9A6DDD234BA6A
+ D281AA1A5B567CACE5738227295BFE7C18C868DB982BDB0B4D033AD60FE20C6D
+ EB9353877904F0C8B4D951DEBFD96DC897C1084418AA332A063017016766260A
+ 4F48298C2BD39257D40E8F75FD3507EA809E4805939A59E9922CB15B2EF0ADBF
+ 5BA0FFA96C67DB2220B5A59AB03F3FE3A365116746798892CA7285F0839C7FF0
+ E03C450FC11C30932C007E12A6B6902B8834A9C067B6EC5531CB137371C533F3
+ 75B17E3CC307D346944F80A8DA6F3C6C2AEA295A013EE084E7B1C42D158B7EBB
+ 6B5E30B06C379EC7F66B8CB9A50DD34A8233E1CE18471A8CF7EEC646D3E378A4
+ 453D932CF50B7E576A005772596B25B11F78B4BB89973CD55C40E19E2DA99135
+ 1CC77D7B2449FC7339466DAAFF480C5269E55A16F5A71BC41F282F466276E884
+ 9332EB5B86E2D96F11AF1E5A5AAF521EA203062BDD877415DC357896D5294897
+ E1EED1CB0EF2F3E52E6AA7AC396662F4E7DD2AE83A740C961A322EE11846040C
+ 81AFB289A4D7F422222847A164DB13BAA768AB50FD177936FCFD117BFC5EE961
+ 4EA21017301254C78CE6D18B985C463DF43044C2388D21E4EC51BD489DC170D6
+ B712359A6735B19093A25AFA743FF0D1A88591BB2D5876DE9055C646F75A1510
+ 198B21767C67A655C967093731CE31424AC8C63C4E3654BCDCB90F2A2DB9828A
+ 91A97EE0C13C1E3FFEEFDA52C4F2C326552EB93F2047CA1345F1F139BD9A9649
+ 81FE4F0BC006CDE8F3EAEB3C5E2AA537F2F9A770ECF05001D22EB192C5E83AE4
+ E6E2757B1675438372CBD0BF4BA3680CFE9387E834AE7F6741089D89858DE31E
+ 57D0AF4113157CE1B79CE5FC3880959B3179D488345DBFA33ABCDD3213BC388F
+ 3FFF9CA54083A0A47F37D5CF1EF48F9AF64AA904011A0DC5580D9E5F9D02B2CA
+ 61F9A74805FF7EEA16A5ED0A1213752AFAA894F5E750115B448EC2530ED5DE57
+ FEC6F6AE773195F5E907CE9918E0AA6602CF974CADDE726C4B4EE2A05549F168
+ 76C0EB34D633F0C51F6D21D34BA56706775BE1023A8889CA73E28812E1A8D5A9
+ FEE81C9DC165557ECCA94DF7CE945B3CD24CB0497137D3297C635AE9305D2CA6
+ B705F070A52D127A1B1862B72E8C2815CBF23EC80CADF7239596A5F2012E33F7
+ C87B95531D574F525555F4FE8EE0662FBA341DABF23EB24F8026D327E039DA44
+ 89362D91C2D138E6D768B49A4F8B79F56641DF6F16562FD6416459DE3BDAF053
+ 714745C7E9CA273D57BDC647E8D36FD750D1871CE0DAEA9454485E3AA1F981E8
+ 0791A6FEB2AA25AEEF544B7B351FDD2CF8CD64571A79BC199A288574D7132B8E
+ F24DF197828B625081CE072AF9001AE81DDDF994F369DD52E7250E8F42EA55C5
+ CD0AFD5572BE4FECCE06AFA0A48D70A929838530CAEB5F6179B37B9FF84958AC
+ D0E615668A0832A26CF95C53FAD456BCC0AB2C330024D8B85D249D2CE6FF67AE
+ 39DB4B95C1AE20BB730C9F268892B0497C8D353EEBBCDA5B695E449B7A5D164A
+ 9BE1319BD377E4097BDDF21830C18489CADE6BABF640CDE853082CBF0A3BF931
+ 143422991DFA2D7F670B83BF78730712FFDFD4CA4112CC6934284652D8C1DC0E
+ 51022CD9F1BE46CE700D458E5B1BB0917D871EB8A27256897E042C91B6FC470B
+ D41D75F955F6456D55FFF7962D601EAF6E066A7781381208F61E31853317F7EF
+ B638C3BBFABCE1C8C68944C36DB2DD375B038E0B5F10091FAA0F185884C238A7
+ F983EB48CCE8CE08DE7BA22C8D670EECB5402F3B335642B92232BCA7437E45F8
+ CFF3082A5D0DAFAF3D06A3B05DF217CC131EFB7EFCAD55185E1A26C2FE2A30CB
+ BD1B783BFA2FD5D3C003B30DF8F678BF31600E19DE6A824EDB7B0437603F23E7
+ B68003A221E125CEB715E67E6FD896E1B835D43426E69B3978AF9FE9B0B32966
+ 8C27EF77BCDC956AC40F9B3832306CE237E440D796968821AE2DC60B271F8ED2
+ 5F09BDB5DF2BFCA8654EC28FFAEF28725F2933A068D2ACBC1B217FE6D46D700C
+ 208FD63C717282D152EF5BCE49F2B1A99D436A84B502AD48B931CC9D13F23483
+ 0429A536EB8E2145B96736D9A102D65A5F3E73D048B2CE6DE41D566116785D90
+ A4FBCD0D377F6DEC7EDB4047D850FA8AE349C1342E39FB3E9E21EBB3DB3906FC
+ 0FA3411F6175CA8B6DBC99123F2F94002E1D20B98FBA8ADB9C8FAFF99FC67093
+ 867FE1F1D699EAA27A3E90E6B8EBB4A5948E6EF426CCA1E9F9CE276E73842161
+ 14E6268EC487A6CA0580BF4550C7C3DDC81700DBB4C58A8303CC76E5DBE3EDB8
+ 7F80C22C857D60FB0A723374EB7DFEA1F4A987F14757EC1870719701219D9F92
+ F01AAF8E0F5AB1E245361D235AC7122C58F66BF57D401CE9A17BB98A994178EF
+ A25126EC3DB7CFC26AC8942877FE586B566CCC61C07EBD44CECE694D36E7287F
+ A9B5B022DFFB7C1B56388FD43D2AE2D0A6630D28A4049761BCFE117FF7B55EC6
+ 47606DB758AF1FA50AA3FD5C7D1C766BD88CBDFCEF0D497D4C0DC0F6F2860547
+ 35A2D4F79C65D5B8E43B9CA952622682ABD20BFB2BDD04D89004CB1BBFAE89C9
+ D373477ED7CC7C6484137B77EC745A34364F88D9A0C53C1DDA908B50DBE2AD6C
+ E1CD8EC1A8BE3AA9FF0B2DD245D8FC50868989D93B05FF30D8825953EF79548A
+ 89578D7BC51D3F8623987885AD56C4076F35D10DC10EB7369769C5E9D8EFC993
+ 644D5863BE900DBA3886682226407E4BD2B3CBB3F0BE8A827555C7CCBE07807E
+ 81A5235F10321CC7AF816668973603E2BADC29ED0718245099C3BB0F8027D241
+ 4FEE7A27DD8BBD52FF76302AB688E6C452EDA6D6AE3921B430EE62159C960B4F
+ 7E5078010F6419F24DBEFBA09D9286594EA69D6B83A83D9C7B706C4019CDCE1A
+ E6702B4096EB885CBFC0F1D83A1643D9881AB062734810A35F780E156E7538A2
+ D8672E00F98CD218D7AD59382435851597C6FB5C681E99AA3B54D984E1E6355F
+ E7EA8B8F9D0AB617733FBEB7F4C77922A131D8FD4513BEA5B52C07EFE1D0AC44
+ 85B1ECE90F3957B1583FA02CE642CFABE419A79D5D7B40B46D68AAF77B731BFF
+ AE71F66F4A8B5180001605D4ADCA0104BC8DDDA2E75496B2FAB5CD5E26CB1194
+ FD71A73EC803DB5726D7D8CD98F17F059E0FE003FE9210078956A3F829241CDB
+ 2C66159AB563AE1D6AECF15F1AD3588510ABD7B5095C5EDEE2758DF8A074EFF1
+ 4CDC2A369F44F43773849691B4BDD94B87C6C2300276D2652BDABCD8354A9C32
+ 30CE2FDD010645F586C41D4AEB1168940AC38E485C415396F6E51174FE49BC04
+ E0F4A41DCBBE1FE050160EAA865D0A1C2C7BD9EDEFEEF6B2FCEEF92FA2E794E3
+ 5D48B0A1E8FDD58060CA6A0B49D1D99721BDA689DDA975D523EE96502E88C529
+ 1217AF7920A1F79F19E0327FBB203041B9DC04DD6324C285B87A8C76AF32FE30
+ 9B59EC61042511EBB5D21699495D1C675330678576B5BD6D5A611CAF8825E628
+ E0E77BFA9563AE8EC8388CE431D2257C88E1BD6C0A919E8427BAC54F7B9FBE88
+ 87C60A5683A64DC8B001A52FAAD02F2F557A33F9BA4C774086DFF5E0CBF45599
+ D23642AC8513F89905D96FCC32784B0F2C61E0FC4F3B32AA7AE08D65404845B8
+ 6C8FB766F111F4200F1DB20EC50C2657E96CD1E25B43AE45A4B4BF413E2D9FB8
+ D78AF6F6BA1ED3438F167E197C40AA586B7C3BD0CC3AFBAED567A8464A902E04
+ C571780783F0AFA3CBA16235A581381AFD266145DE84F23A4A3962A7FDB54A57
+ 457EA9488217E54862CEDE4F291A0F7E79CCF8D2C3D0CD8FDB280CCA1C425939
+ C837715B22DBA1E1D0BEBFC252C45B8F653794C13913722F486C26E75CADCE77
+ AF57571C04F3D0FE0A0E2A0BA88D46AA758B0EFE8B2449D97F27B37D28509503
+ B6078BD53C505E6922AA22144857B5BA47AB9A13A6DBFBB03D03FE7BD9B59371
+ CC59708A7C82FD6B0483DD845D53FC8CBDA75AD21259C7DD96C7E823325FD8EE
+ 172C6A034717A3353F7361C213C3E7C224152CC010BBE00B75CCA4EFFC122434
+ 4B267CA4FC0260FF88AF16D4473E6BD03A0089D1BDC389BB2D0A2BE9A6A79713
+ C2642E1D787F62DA9102EF9EE3C040FF746C933240AEDFCAB24CC03594491D0E
+ A7E451CD51E3A681CF7CD0F09BA2F1D7EB6CF3838D3373A7D88E04AB2E6CF446
+ 851617CFDB8BACC4AB63DC2CBB9AEBA4F75A217BBF8200A24C47BA6B9EA62E67
+ CB66CB16C449DB4EC5283C8C2DF3CD1F6974E95FC177B9A09452B3D66F285756
+ DD0ADAA460F3E89349C36FF759AB0BFFCD811F2C03E98DCA3E73891A4BB9403C
+ CFC58F6B06E082DF7B14A9B981E0715D0C51E847614B144761FFC8121C7BC226
+ ABC2F1F140D3C24B5BDB56B489E5D2C3E4B9F8FD1A8F8885D950CEDDB16C9D26
+ C0082A49CD719AF0690A0B597F5CEFF356D86D8D948C943C9AC7BA0717969B8C
+ 9E53D837884195C5455639CE51EB71184294BAAAD10D60600EF53E600ED09D84
+ 155629C4F57BED39943CB09420DDB6D6A689D147ADB3E2F839E0D35866875E31
+ 03B555A16D3EB508A6AD112496AD5A075561615C498DABC6CBE8E29C2E289D18
+ 0FD1E04BC0AAAAF54D7316C59BF8A7D0FE929A9ADE643A99C29CB8B5EEF9D0EC
+ A0EC5886D7C63B2BF802E6838F7C5CDE3BB885D1B4866B0E854B68F6B071C15E
+ 4CED37F535D56F232B68D07D9352372987A7D66EFBA92FC6C42CB37F857041D7
+ 6425DCB774523D16430B5672B535AF436599F760DBAE1CF7C33D9637DD8DF283
+ 8B355BA6C80674191DF895FA92B54774B42BA45C7B0FB08215AF42943140136A
+ D750719821316AC907D72AF38C4206A40305A53D17DAF53198CBADA262C77AC4
+ 75EA4A4DD77037D91E76764A7BA4573A610996ED3A721ACECE828EE8D0704356
+ 0290382EE000586053560E747C65B2CFF9D16A4C7BCD1DD4016B95457CD545BC
+ 8A1B3AB239202C106BA9CB13C5606D8FE667BBD97D71D424C8B108C09CA9EBF0
+ FE003E1345803D249E101F4F24C8B9296920EB1057ED5081D55CDD08B289289A
+ 21252531E494137765312365ED5FCDC994DDCE88010C31FF63A5225344E67063
+ 09166712A9AAE98BD976D6EC42BFF36BF20B6293707B48A26D60E136F0F8B0E2
+ 4B264A41D54447246554F596C04E552DE0271D0DC22A788AFE6E78623D94CD38
+ 3728C67DEF29BC237AED6CFD87D4453E06BE19E12B69AB66CB174D5EF85441C6
+ CD3133C5D8030E628EEFEE11A067E8141213E6398197B47FDAAB002328911626
+ 8D40108D56316D8A9554D8487C5C3531F8BB03135341ACA5B66FAC08DC4FD018
+ B3DD562A6D32710CA57141F28B461D810179FE2313488E17559F486EC80EFA6A
+ 955C19BD0D7F58A5D2D319D3249EE8488931EA56F2A92A727F7690F6CE5EC903
+ B296DDA6AC3757523418A2D96DA8810B4AA9DC746434DC4540927849BEBE96A1
+ C86F0492E55257058C08B13F97DE7B9EB8C3B9355ADC5D4401D1E00876D43341
+ 873F064732F136F18561EA03DB2BD71FA728D2BC7D3E070AFF24F200BCECE913
+ 0D360614A3114089CD297C85B6AAECFC29FDBDEFE4C9C67C2FC390F148E50EF3
+ E38719E2F6471758B3158402F90A239F17F26983201AAB0E0700C9C2E32F4444
+ 5DE750154DAA72EE4AA53185026BDD2A23DBB630C87DA4FC51F1C6016399C09A
+ 284282745FF0049EBD208873EEA93EBB638F8F646D10D99B759604D617F5A1CE
+ 9D8D9C8D5E1DF497157497D147C509E1B584986E93F6D85864A79D417944E1F0
+ 2A2FEFFFCC51DDD4470BEF1CE553A7E406C424187240D221704A2F45017EA94B
+ B9AB319074FA0078A046E2F10F83D9FAD2F729DC762570017FF61C4E6EE5319A
+ 2BEBF3BD9F6392DA468F5F5472FB09EE7B4B3FAC19EA648ED1D5EAB5598193A2
+ 4B0AA0E69F2015FA20CCEAFBB75047D36527DD7A58643D6FFDB0F7E98B95313C
+ 35A06C2D98535055D04B55B1D616701C5EC6E71D497D5224084CDB92AE80C7C5
+ 309C9C23CB55954B26BA124B6D8A8E95AB0FA759E3C1CF0430A06D5BB7A8F5FF
+ 62CDF1530B09E0F6B6012AD85ACB62F3AF7AE208FAD8857339D86944716B87D2
+ 97F76489B0BF3922030B51587AEC7F452B69E8C16FFEF7405BF365F421044EFF
+ F0B2BE653172DE00E2B51736839D1707CD47A5E835ED694917F88389CAEBA855
+ D35C672186FE2F349C1AF67ADB85EB9E1EDB563C33017C40DC18AAE3F15D8CF4
+ 25116B0F888443A38D9AB76DCA31FAC4660AE9CC0879B1D7C565708DA4D3DE43
+ 1B32A6F80542202D3F4A00B1C525B3153C3DFEA43E37BAA2E123CD74ED5F70C5
+ F2709D715E003405A1255AED63CCAE605F93506D9AF5C192C3E56832E9F30D67
+ A10DADEEFCAE0F9A40DC1BFCB35191B8EA36BB1479EFED817FF10A536150C721
+ 41912891CEFCBA381C423CC8C484EE819E0E87584F7D2A065AE0FDC204AB0510
+ 2FC186E4FEFC78CFA2728ABEA420547E0B382C663E61422A74CA7E883E3609E5
+ F213B85AD58EE17EC9508A2B211F710CDD6A7A30A35022055B855F6378EAB2BE
+ 240B4741693D19431233BF10C077EB3622310CCCAC9DC4C3C1A19DB8A6A5F11A
+ C67374F42EF95ACFDB76DEAFF26DF395ACEFA96E17C1F1CFD8C5F4FA5ED30278
+ 7A275B5BA38DCF85DE620C8A00DD1EBA329B05ACC3BF51AAEBBE3D997F7E099F
+ F5F1582BE3AF8371244493E55C545D600BA2BE3E3776BE1300C94F68B673B762
+ D6224EA03385475C2E1CFBF96BEE9A959ECE84CEBF2BE09C43FDB040D30C5C38
+ 936A0B4F247D7ACFBBEB24A44CFE6A32D5E19B105C8A17B8ECF3EB20E25B4BD8
+ A44AB3CA654D52188DA0DB64B14CDF7F715A1277F697A90089DD57A0DF687202
+ 80A5AA94644102AF56694C2747270A37954B6450B683BC059A0BEAFD1690C098
+ 32B58EE07E0A1B6588E7E5A98CF34278AF39019FCD9E7025B2DB213BDE9CE3E8
+ 214AA55A1AE848B320E76A1146DACDFDFEF57A2E4943C0BAAADDCE294951878E
+ 51CCAEC70FED225817BAA3D5AD8C219B13812661E5F8D0B1B3FE8D0DB3104EFC
+ 199B93F6D931E85E5AEAC9E459831170E809DBD9B308A4AC4C44DA74D425538C
+ 21A2AB0738306A1438D3CF44FFDFF5D057E6D0887C8488934F1AA9840E7EBC9D
+ 5A949629949A82AEDF6D87B45B4044093CC24B64D0D8E8C74FF1336FF2E4E238
+ 054EA9CB2ED4436FC9567458D0301312D3CE7314D641B6224057E617E902C6F1
+ CA3152BF5C4ADDFBC021198299583E9F2EF014BD6109413999EE5F371B5A744C
+ 2B8B7C4633B2A902F939090AAF77DF909B4F021D80F91A7CD8DF18AECF6BD94D
+ 23E69570DF5B5619532012326F6347F889E0E22F9E1165E9F4B2EFCEDA0BE3D9
+ AB90C57BAF1EA87E5E25B997C77B548140148B4FCB268AE927A9C448359A7AD3
+ 645E433242ABA7D34F5F948BF598417EA8A1D91F2AC9B27E79BBBA9212E279A0
+ D794797E87F600DAFFED607B86959A759F2832D0225D8058C231C6BEA2981027
+ B1524CF43D947BB469BDA67764403080F33DA089B62362C7CCA4A6F95B7533B7
+ DC553D1726A82B74F3A4DE1534202D2A7712126475C22BE8B876B30F7C968EEA
+ 3A26562C49E4B8F20A48EF0C5A478A7E5ABF4E4C982FD1BD8A9DCA5C12F2D88F
+ 5B53DAD8FC18BB75989960069BFA56C8CB83AC916446E702F82B62B43B3D57B2
+ DD0F9A47A70211B7EB07D2AB6A297CB06BD2F72C0A264281D6BF99E636AB3F49
+ E5CDC67F2962BBCB0CB70B9FF66A9D631BF42EE4A3217264F7815C141DB66F7F
+ A633AD7150B76F1E364A6D33C178B6646497448488E6ABD3ACA55C191F76DB9A
+ 268B5787BD6555BBA3DF109B52DC5FFFDA7B54F3AED7ECB29D22493C31D72139
+ 4E49D4150C7E6D7EADEC2678AA546942041C17571F1E4AE81CFEE3A593790870
+ 389DC39FCDE10917E863C46A1E40ACDBE212A3780B3BCD3495099B3026D7C42D
+ BB9C9A4E1A44B0D8C5013FA259F081A567641E07FBF3B0DC278EC5FF271AEC28
+ 2745B17A60FAA4812BBA24671E50B7144B0D686524F5959F36F29C9E475956C0
+ 0237172B0BEAE2CDCF08C153A03A99F8AD4753185F836111ECB6C500FD6AB4FB
+ EBE0599BBEFEB59D4F529CF206D5E342292348B2B8F0CD6B59F90D940E4DEA2D
+ 4CC61CE08D728653B7D56197427B09B90F06D479EFA3937EE3439388AE5C7726
+ EC72D2A51AAA09DB49C49C439C06CBD1BE16BC633A60A5D2162EBFD984A8B364
+ ED5F145966CB8DC129A980116F5379D5D4B039782E377ED397D59A20F06E9333
+ F7AEE48EB502C31C89D9D642D63CF1895BA62EE171546FAE203FDE5B53B311CA
+ 4641768A821D653C683E3097988DF7A354179FC5A47708F7EC20149461BED8A3
+ 55084D743A115C1438A212BF46535CF9CEE6F437FE0A637EF5B27401E6967C11
+ AEBEE3B044CE9D02805E3301D2FB3A0F5F00AEF082F51702AE4689BF220FBCE5
+ 4508787A74F576DDC6DC4514F446938DFD331DE5E4E519B7D6871EA5FA1AE260
+ DA402F6DB6919A6B0DA02764E5EEA390DB9806311C0597D9D3F25E2A7977EB61
+ F8AED9403571934E56614F3AED73265D1794AA3580D561CB19F154546F0AD1E3
+ C2565DDACB0149B771541551C71AD7B6C181F8101DC4376434628A2DAE345331
+ 39DE8F8DD67E6EA0077D285B91AFBACA260D1AEE256DCB6D4EC744FBB967F57D
+ 524E11C5531AF1FB78469DB344E0B5EDD6E55F030ABACD77C50B593C45001635
+ 9B8E97BCC0A856F145D71FC868C9811148E9B44B7B9DA90D88482E6823FF289E
+ 02DD0354CC2BA97A60D1DE7D56DEC4B0FF456950F516F4BDB2908485E27807EA
+ A51A3CF11BCC81D3A9575761C65EFBF054A38591DD62FAE8108C04854154E75F
+ CDF594C9B14AD2E0A97D6DB1940D6D882AAB867091FFF864138D5EE6E7F898EF
+ 64FB106F0035D9816536E699051F6347EF854BA1F10F5DEF45478A3050DD12B9
+ 0C5BFA626320DC9DAB7B56BE3636A3CAF827B793724460899757755918E2BF91
+ B1A3DDFB8E3F69A8D2FCC1D9BE3E7E11BEDB4C318D34CC6813A4D0BCA7484992
+ 723409E89B85FEB06C98F5749F850CFA269EBCE996DE990EC4523436334C89DF
+ 8BD8F5ED431B54F887F1CE678DF651AA5AFB5CBAAC2A7C888D368115319F3606
+ AC1CAF7C1A76196A56E83F4CDB34C04BEC725D5AB8753B141652CCED1710AB42
+ C25644AAEFB8F079E8D45F7B5BB9B435A80C2137EBCD27DCC53E8B59E2B258CD
+ DDEF12CF54532540D3A6E4953BC7C24321542B3248B8DEBB3F7922FC5208979F
+ 037DE5898C407E32EFC58AC958DD5635C199998D4B0742013A536EA6CF28EB73
+ 61CD12FFB4EEE4204174118BC2554DD88197A52B290970D728D4C65DD9621E58
+ 2FAB5D31627F08B6BFC18D244AFFB69B72E7AE47C9DAF05988A70E711269FD62
+ A3E883D2C3ABDAB020016FCF66522CEDB123E27620CC4E44B39B5E557C00CD15
+ 664B23F27B2CFE4605C8F89970E69876ADA8219CB67153B5A17342DF7FB90F03
+ CE20AFAF03C4E7CD775D3F8D9E9C69EB709592DEC37E92B711669EF9FABCD362
+ C3FC574D666A8E2AC8AA17B13ABEE49EE59A5170D2FB75E471D88320723B2DDC
+ 576E54A24E330E42650B8BDDD9B3838BE8080C855000ADFF6B20F27EDAEDB57A
+ FDD41C5B3C27A557C1078182ABFA4C93AFFED7843EB63711B126CBE589918AB1
+ 57E2D1395B1695F2078B03CE7529ED943F45FE33DF449DE1B65F6197A3AC95D1
+ 50B6EEDDC9F7680D64C14C2AED99628BEAB5137CBADE741FDEC04CD4EE7D24C2
+ 8237BE6B631A7F5091E17B25774BBDD344322D77A9A9278290C6203352DB7C16
+ 87DB0CB44F4C979C2AE37B3316D94152CF21970C770F946317740DCD964AE8F8
+ 645FB20C24A194A04F1DD79E31F9618C99EA7D02F19B18673A8C6656E1F3CA5B
+ 863B56D9D9849A6CDA0E5E839ED20225649EC6394D1B390CA374E32DE1E206F9
+ ACC0EEED44D8C8565A47BBB45B5AA1D268561AC83102A55301580FF33C7B6AED
+ 1B2476459E1050E77C7506B0CB70931188FD3A592D364AC8FB723F8910D20FD9
+ 8CB0512084E4F57A3014E275C93A177BE32CEB05141EB55C82AFD9BC59D7E0C1
+ BB9B0CE8CDEA149D0CC7DB9623D9C6044CB638C2A1B9D9B4D1D95C2B6810C50A
+ 09636DFEAD86E174AD2ABB50759F19EE1BB60EE1E743A31FF6A089FB0D5BAF8F
+ ACFC210065E9868685DD2D157A6A3301A090CEB6947986525CD014D245DA7E33
+ 881156B5A5F29254FB2E54727CF5FE024AA8828C7C7362FF7C62A87664D9B167
+ D334FB37D304446A136FB3FBDFE16301B0A3C5ECBD402712EF3D21343ABF89E3
+ EBC8CCD40296A99BBE47B6DDC552CA136F253CDA15369AA62F42A168FE6FFE69
+ 4E4C5A936E112AEB1072246E6341E5D950FA76F89B5D6505FEBB983476CCBBCA
+ 31C06CB803459628777BE8964EF0CA1F1D4F3B397A26640450D296A3A8E25844
+ A207DFAA2CD381F7763B70E6C63C2837EF6678278205B7AB473B7758CA2648ED
+ A92E77292A5D1FD1FEB89D8FC7D2814C7FF9441AD489F2F72D2ED53FC73DF8F2
+ 697B2C0F1A4529F8045482A7487960AFBA6FBF1F09A424A97F1EFDA9A4CDD7FE
+ B8AF1056C93DF5CD6BF669C443EBF50F286739E1B57A8828262AC7638B90D404
+ A2BB1EA11CCF090789D6654A52EF9F8AC850AFAD9F52C27B6E7CCA6ED24005D3
+ A2F618FF5C9D8D0A6820AB5EEBABFD5BCE0F5539087970EAC64117C860D4890D
+ AB7C7673F77A0170635C889C928E27BB75FCAF602E5CF5C3754DAA86633876CD
+ 52C6E7566F21D1EBAC870FF14311BB4E2B74E595D52DDE3AAE9E7B58F8C7EA82
+ CF88E1ABE8B8B31F8B5ED5001C6FCC6AB54C9C352643D1E32B61CCAF59BDEFE7
+ A0340454BEEAF3BA4DBCB350D26BF9F6CF0BE109CC95FAA3AF291D52EC2E8DB9
+ C98458FB7C58E767BF2276B9790B8DB232DE2C3D139AD6F44842952D4F0D1CEB
+ 3761A46AA126A48CE53BDDC8AF9C2AA7151FBBE5C37EEC7756FE18A8A45CD29C
+ 0E5D191174E9DE37B900D3C72F490B08EBA9663E68AFC62E8AD55BE0330563C3
+ 25431F9A036E64EB611091B10E6A7600D8849FC7CDB0135B79C9B9650EF87EDC
+ 2A0458DEB8FBCCCB0F5898C6F187847F74C58F354B3EFC16AB9D17EBF9961B51
+ B19970687C6390D530F37592ABA60FCCA00C14A24A54C0402296DAF11ACFB597
+ 55EADF450B444EF233F2E80A612091E3DC81620053F377121CC8D16DA84E3DAA
+ E7B926D6202EA64A59D0E129F349E683AEF0A7D51D59C309D25C429230B64C3D
+ 6A9347989AEEB6937A8161C4C67CC26BB136FBD0BE18B99CABC1E270F25B7B3D
+ 256C99B48D059A112CD114133AA85E61561F873C6FB8E0B09F19746D53551C47
+ D77D89AECDE9B1D814235AFB537E77A0B1D25865C068AD792C8F328020698757
+ BB294CA1FD42734AB2486EBEC5162C2710021F4223D4A3F76F98CE7F6E7E48D3
+ 969B5AD21D052385085C5641C287A77213561191479A35E8CD629CB3DAFDDCB4
+ 67DB0930A2B956C90971706DDDDCE4B1371BB0D22DD3AAC237621EC82D40F342
+ 04DC1FC16B07FBCED716B4129BF6FE2CA9C41D0F926FDDACCE5A49F5FCAB38D9
+ E9AF637C2F2D21313A450617300CE255684D27F45D1F85318A5962DFDC7A00BF
+ 299B95E1A85E7DD1932C626D29E0CDA025ED8FEF38E5CC69E6F300A623FC085E
+ 92F121EB273CEBB9D8DA65339F1A4A88D7011A31E52369884C5F55D56D2C6E24
+ D99B329A06A09507326E0D47C5A24D69388EABB40E2AFE0567C99C321775C7A1
+ 4E622A18A6E355EA9770EF6D13706B4DCAEBA182B7BDB1B1E99F2ACFE0DC47B6
+ 765C85F0E15599AFA69008BCDDDE22470C901EA09EED374E8AD79E3A98818333
+ 6B92ABA34192965CB2EC92F91D66B40933851B5AA57D28048009917DC292F95F
+ 3F68FC8BA05572652EFE8D60F1859F90EC716CB1886B5E21D7457E9CE57906F7
+ 7D648F070D3FF615C77C31BDD9A34B1FD7DA9770B05276511D6BE46F0F6AC080
+ 78FF8AC9CF75B5A22F6E7E44BF087FA8477E4D73AE5B5B2A33AF31AA8B10C624
+ 41F201754678CDABBC3B13DF00AB039B1DC26D5422D982F44BDC3A316BC0BDCD
+ 6FB356F4991D3433A830622F70B7B31DB0C1941F3F9BD06FE9850E2EB7E80DD4
+ 6B8ADA70E5A54E0608CE8B680D1BD1FC664951E486B5BC5135BA211619795A6D
+ 67EBBF00BF8949457AFEF63CBBC7956F6001731D43C25D4E532713B3E775954D
+ AAA3D02DED26B02519529792243DE59859B25E6FE4651478626F77EDFCC08846
+ 65AC5DBF140F32D3B814C44F926A5BA3B919E1DFD240AF6D694F136A795D20C7
+ 34A725B497F3A7549F9A3BF3CD39777F23D779D46A9769FD637C6A4BF3CAA4CE
+ 78F7378E3D9EF1545F4346858A3DDB5189E32CBA278F86678C1F4EE22DFE56A2
+ 240157E8C3A080B92EE6458B406366C967EF877530DD9FB0E12F7A9C0C50C7BE
+ D44107AA1D5EF1654714CEAABFD0C3C5FD7C83AAF0F83D7114C6AECCAA176D4A
+ 000E3DA7D8FB3CA39BEDA918CF942924AAD15F160B08ECC564C14CF304294591
+ 3585709F4634C9899E3D45CF469CDAD6AADF505D302F97B88FF022179339030D
+ 00AB98190CA9AC09171F77670B7CEF7B71590318EF14718F8FFBF25352A66BAF
+ A2F5834118E888ECDF192D5F0D0531C55897B435643FEC11E3946CC0E1C4D67F
+ A030DFF2B639699E37BA20DA179980B3AD58F1FAE92F42A0D88536CEEA55E63F
+ 6DA128D50636890EC3E543F5B8EA27DB0924129A792E12E3AC34FBE687603D64
+ BFAE518065694E478787A6BB2ED19962399727862E9C15262510ADC499B16BCD
+ 5FAAAEA4C207468A651B72774C83D5315464DDD24E312AA91C746B95DC012D3D
+ A4117130BAAFFEBB2035E2D4D89B4E6E0217FC140DD9973C906904D82FD6995C
+ E2E203205723BCEA3420CBCC4D3A825462365566F4C2D30ED17A13791E1BABBB
+ AA8415A75FAAC00204FA2562ADAEABC3431BED083BFAD41D751E50CC86D3B0E6
+ 8F359F40BE4C99A298FEE4CC2C861E33B6F58D438D72D17D98674840C8309752
+ B6B35DA1B9715B6E3D967A9B52FB881389BBD4CA3641DC1B6D84D093D41CF5B0
+ 226E53D7AFFA27D9355C964A9C679B7E387A3C5999B1F146B2238C5F77B92D3F
+ 6DCB4A7C4AEC7F30F521C33AADD370BB8F49F23CCD2B35D5DA181CF1BC0C353B
+ FFF250424B90BB3EA4B66E6B60C6DE4F646575F4BA3C76231DD4505488A9F54A
+ C2455E3DEFC629CE2E4143A9F219E8EDB341469F6B436519E3AE9B1F0486C172
+ E6BA02A9C422316AF07A0BE8310AA6F84D0B6E5DD75C1666C5C3897EBFD6E528
+ BA5FB1D38B886EF694AAB231938749FEAC6A5006E6CAF450BBC3C0DDA8A6E917
+ 27DE03E89A22A3FB166909C69176634AC30C90951D98AE02DBE54ED3E37EE271
+ D3D73907F0E6A7C33D45C7B311684AF3436A1D2857AEACF70D2DCFBD1D9BD55C
+ A0647EE82D60147683F41071503D852155D45AD85899B063EBF6E97A15DC826A
+ B2745B87F68900D79ACB9EBF74D9C556079C6C4A1E7F175D411A64AB1584A40D
+ B8F49B98BC58EE95CD7E3B7E2A0EA16A1DC61CCAD706E5E7E58C007D1C9281E7
+ 09F70E7DDA6F141E9DCDE51146F732B1A2C9A5B4BD1E4429A21E74F47FB4851E
+ 0D0E6D10D4823EB915E507DD7CC9E0A7CD3B9A6FEE38F3CD0A4AA85E73AFBEFF
+ 45C84F188C7FD83CEDCC8EB6BDC47A0C754D9EB386B01F5EFDBA137F25D7EE5C
+ 15E4E8A3111BEBA6BCE3B7633CE12F4E3AAA910AAD7CB068B2598069888AE586
+ 8D0183C089053E654B0A20A778C5AD6D428A67E9742DE5FBA30B2A1EA6D974CB
+ B2A5E7BFD981BE5FB045013D326299D428719D59E289A143FDC737987DFB7324
+ A8261A0FF5224CAA525D9C24746A0F000CFA0847394C6A51EA3622CAF7DDED55
+ B726D54B09C6127D0E4BA193E063882CABD22E752D3FA4BD6DF7B448A4F6B90C
+ 2A0142E2FFE229547863ACBD9247809CE4122D48923F7C41A8E4F4528676FCB1
+ 5D35657C825190B3CBC9773510F88F6E55F0A1A14AD46C8FF2921C1B87306933
+ 9E6BC800D116BF568718B2F3B4F0057B9EE15E5FCA85126B720F76A2C6230C6A
+ 411ECCE95E05D38D963D35E350D82090B628CC25BC5C2BC723461033A375A128
+ ED02A20894359BC73B3D111D121DB869FE415B6408D11E7649BFA587871B66DD
+ 6342ADEEF677E5A4B4C5248BD991DD881FBD20FFC442B00752BC6AC3191E4F35
+ FFA0B09A32080B1161DB3E8962548A957374E26581052051A7D6E09A28814435
+ 434E0E48A5D93F1CF5641860C97DACCF30A34F44740B6507A28D812E64EF4088
+ AF34DB5F95947C0BC5C6210B2839479E2F1B921CF963682344A0405731730EC1
+ 0B44DDD919292D2221530278B536893FD16051196A45277175A003BD120A70B5
+ C5BE289575C072264832809D271E55F3754784E51AACC2F6364E3367FCDF9187
+ 7A68A2CDEE368231B72C289C040462D69CDA4E26FC32D24630D08B0AD0BDE2B6
+ C02D3C0BFF00471B681A5CFB301394A72BEECF5647BDB0C8006C0FF1DAF40FB0
+ 55DEBA8C6CBCD7A0DD27BA39180E6DD12271679DC571E5E8CCC33C363CD0DFB8
+ 02521B34139C3514FE4122E3C26248DF880DA01EF8BD421A5E30ECE022E120DB
+ D74E16FA80FA2F1997EB804F17D543B38A314F85FFC4F9566CCA1D2332F4DC49
+ 348D44B82EF497E7F27DEB3B5FC9F66B6614BA3F970138383362D0E59983093B
+ 072805078D6A3C167C79DB82834916C24CA46CC47A5E5D480AA9A44C445E9716
+ 1ECFC6DAE237BF66A3A7217721508905CD33650E08B1C7C511A28ADFF14D38EF
+ 1311EE90312DC74D55D221BE1CCEDB298A43309AD3DD9007BB08A6EB69B13BC2
+ 2611DF4B054E83D3E0AA2AA8BE73F1728D8E0E3AFD6D0411E81DA3BB148C5EAB
+ 16F0733CA1FBA8FBA84C8A3C483667FB62C879961E7E695D607DD76434B2383A
+ 43941B02B0F4FD4B615B5D949FB141129E0B67806F49FA9BB43005CE9F5B5D3A
+ 9E0E95DA897A8B20333922D789A3FF150E7824DFAE2078F67615447E4266D1D1
+ A52D568388A1CE96847B0F77813221E049FEF913E17A4B0E37F5F362235894D3
+ C0C19B7777D7442C39304368631A2881C4CF03C60CE54076B0CBF3C7B91C7392
+ B4B61DBA8D6392885CB7F000DB2EBEDF1BB93117D6B9B1D432CBCE3F63F36C09
+ 55FE99040B0EE6C003B844A7E6BC58F0011E17F799120EAC87424BC8869C8198
+ 67B5FCF19EF4131B66E56BD2FFAAB92DFF34A9951AB9CC63CAF8B9027D338AC8
+ F5D5371C7AE27675E5B8D790A1901CCA7628B4484C64AECE23316B8E17650F93
+ 13906C730C824EA1A95DB9D2BAAB9FB207799873DD4F17364BBABEBA08837F45
+ 2F99F0C15FE395125C816EA40FFCA8662B362663C3C2F8591F2F7B61843291BE
+ 2B6856ADEBE40C00FB3D847B95500CF08DED40133AD625A48D00C31DFA11424E
+ 2063FB2842642FC0C30B07065AE8C02A3857D63E831A46DA8954D6295D41E208
+ 41C5FD103267AF0A3B2A5D550F7B8992B36D2ED2F1C29653309144E025C9C22C
+ B8BBF7DF78EC58568CAA880597DF881A1D9EF50B458C6B35E9E470993F40619E
+ 5C3FBB32DA0A8E33D976B576F67C4BFF6792598160186C192565C3E4C71D850B
+ 6B35356E4A3D2277391617ED635DC10D7761593DD9B45D1A29E57FDBC96F183B
+ 1F6C802AD1F992E1BE9DEF23B0C7C7202034579F1E2108EF941F6884FEB9625D
+ 3EC5BA5CE14E5420B819F7694664A8224ACC2F1BA3D88F5FD588611ACD9F98B0
+ 764583CDD35668D0AFB1EE4C6AB90205A8CA16EF528CA3D6822DC04F9ED1D883
+ 3423BD0F2088E2F141010B159D927AC595DC41088CEAEE3836DCFCF6A7B20832
+ 362B431B359144E2DCC8180FD0D63104F6253B12FAFAC902C557924593948BCE
+ E760488B506489594EC9F6DED77AB531404B26558F2B80247144C7EBA41DA089
+ 8127A314F85B99FDDBA311961FC5CC66FEAA064A0F91567CCFF71AB4D17EF851
+ E6199D9BA9D9C54C90EBA0E2F2187F9A1234517574D5554E2B59F9F152738B5E
+ 7C899B184B63E9DEED9EE169BD5E21F82EEF762DAE78DD25908852F2831E5C90
+ 89F1BCA499D39037282EE83224DCB43D785E13E93BB7D68A43A283499AB86A41
+ CEAD535DC60CC200F60A3DA117E86D53E314F427E3B499B412BD81561A596B54
+ 9E272BDA5BC9E1FAD7E0AA741EDE4A6204065A48108E7C1B4B5AB31B78A35448
+ 7F59056B2ADDAD1470DD94149E583A728F11DCCC3B9CC26210DEA187BEFEF53F
+ 132022CF94D62B1A32E414E766B61FD3018D23F9EC43F7779A5E868E014AD274
+ 6280E3C09E0D6338EA772C907CC7E0864026A567B391C9C384D571239C4B07E8
+ 5D69623F5B334A48C01F59939EA95DE46CB1D7C5CCA3164C9625176700C62D06
+ 8CF75083AA5C34DBF7D99A7BB76A49BA7F86F27655228E7F7FBFBC1353A1F265
+ F816FC421DF7CB3A828F8809686786C7E3125E04FE2A5C0DA940ED496B4FE43E
+ 534EE8845003E23A6C044CFCD646DB1A6A26810B40891D4376728EB773E4BFB2
+ B27F4B7E68EC751380F2D10BBD3F8216D5A8880C5BC37BB7816380DE0EA0A4FA
+ C5FD212372BAD4DC928D27DC3201E38D4B7965C26824301F3817FAE62E548FB5
+ EDA51B86F5D1EEF70D981564AED8B02A1521E610799710D8A9C6DC84EEDA2D06
+ AAE228A8D991969CD62341FD968C9B29CD888515726A7E1E3070F311E1C15A09
+ 3B73544441807DE088F9B12160CF63BC24C43B24A1C28AB1262F767345708806
+ E22846F903D7196B93182B4F3A76F46682DA369401E9D4B1B0F940046EF3359A
+ 485B01A022682CD97A2397AD51292FDE26919614C39925C96E15CCC79C203706
+ 92D47F40782C9CB919FA96875AD6A21A84290F56CBEB34BB54138F39D82CE443
+ CB1F3AE8822477027A9A0DD0056855C47AB850511FC77C749B2EB2440479A61D
+ 0319E049117D61442CA4C648B0184401ABBEEDB9F12A14EEED6A30B2C576BF81
+ 09384737582A5C6A562EDA458DC8B343A4C24E892727D7713B1AA09167F1D204
+ F197E5F7A687E76F87170EE4E3C766DD8C5BB1D7D9901F244D8B47EFE44DF138
+ 57D7708FA0F7F6FC0E81C61AC38F64EAF873CE3EC5F8F201796BFC2E6D93482E
+ 53E6D0DD61F7C27CA8729AD7B244AA6D4CF17C56BBDD7D7B5CE90E7C76B743B6
+ 0D1B536E0CC7870785E538BE35D7627943C528B88D7CA573BD429166A74F75F0
+ D36FE3E794E66BC5937FE0F8F185ABFED1CC3BF979954C3D7789E15025C1095E
+ 0AACB4DCFAEE557C374D0B6C9140C7E98DC564AF0F2B7F943585B5C0B52E69E5
+ 5DB4693A042BB28FAF27CDA13C2FC486D31688355A3134C1D8E629E17507A632
+ FD0FA7A99B50D350033AFD2E9157B0C7EF9CB0445A1151E3E1234D3F699140D8
+ A0D7598A38C890A41155A025691A8274E663FFAFCEECA733121C4FBAB02F1AD0
+ C90EF6FCBB8F8A774A14F9BA2F98F8551401ACEE6E5AF73EBC96BB02F864F65F
+ 54FB1F26101846258EB0216E9527FA4BF3D701441A9B04E1AAEFE136C83DB0DD
+ DB6A5250ADFAC29B7AA11E5D24CD3BCAF585AA44185C3095EB3EA0498D257B27
+ 70EF25C2E8BB3358C8D47A80272500E641CD4823C25058FB247FEF11607B7B5F
+ D0DBDB9612D449EE067318C2B4E74BA771A554995B04AF4EF856ED6EE7C50E32
+ C7FC84E0D5E20C999726ADFA481887CF51A73E7C83C60AD5721C4318DC10D41C
+ A6FE0BC8E1FA9FFE42D9316F21653BFF2362A0B70F1299A37C4AD982411475FA
+ CE92CF8C652B4D33B6C462B0F545FDC6D70052F58A1F3716560E2A736FD09404
+ 1C04E6081CD1AF63CEB3FE4B3D9CD04F9E9D2E2027279627CD332B988039AB29
+ A54E708EFF9292C150CB845B3B22B24B99BE687024EFFAEACE4A28ADABE8987D
+ CC95D3198DB6929B2D768CD001E14DFEC6D755BD7F74DA20852512949C555552
+ 3987A708D1D9DA4831CFABAF7A3E9AD970E384B44E3A8260F8F4B08796A21905
+ 36233FE34113AB20F9387C62EACC2A04E54BE09D4FB773B47EA0C73E5140802F
+ B2EF016AD675023267DA33D5CE7FF5B9C4E00D4BCEECF69065ACD63B27738A9F
+ 0BA5CB135F1222DB6E63D8030DEF64D14B5BF599DBD72239EC0CC305B950847D
+ DC58C9028E2D37C075130437EF7934A738CA706E9C2342EF3FA6EFD66F336349
+ A83F354A2F8F24C22D19EA2FE8AC3BF08AD93DA7FEEACF303B2D780F9E424594
+ 32A19507AEB0919DDFB6B396D57F817AAFD51FC3D387AFAFA9792FFF344CDE2A
+ BC2266176A8731E5F3CB9E466A2A41FE81556D2A4D503D0F61889C7F7CF1D4B2
+ 2C634D58F81DF62FB770FD5F3F44B221BE19CD25EBB7F420D93DC60D247CF541
+ 6D9E0924B7F28A5CE70A98678864710C8B9678710A90A9B9EF50F33602967BC1
+ 02776DE5489C8699331DAEAC4FD2BA11F9BC2B957660E8FF82BCBCBCCBA153D7
+ E438A514CFFEE8DB3BDF8AE63178D01ABA9D029FA29347CFE3CF2ADB5B2B06D5
+ BD30AD6F0D328B9886340812AD5EAC4488A2A1F8AEFB739E73094D207E69CE22
+ 1AD38B99C639FE5A464BF2245CBD29E96D164A0A07AABE123015453506AE553F
+ 3E2F3F6392587A1853693A9EF713AE8D784345C5E3F8B73EC3B7AD3252CB6A0A
+ F52CF8C59DA49CCE0D5A8164B8FC027EFB874E43ED02122C27782178103315C9
+ 507C90FDF4AE8C0F58520D024CB864E4BD8F7B423E5BCA4DFD1F044C1BEB2986
+ FA468B96E3402A10A0B3185830CE5AD2F56BF8EE198FE076C3361EC35FCDB400
+ 779A5EBD3320ECBBBD3789CC921CAFB85E15C2D5CAA8752D1F152A14EF281218
+ 5F779D342C37C8F0E287A2F18366CE027D670621D2A6FA60E87F5A5805CC90A6
+ 141DADE1959FE08949E5CD55ABF790560765D56E4C85FA893ABBECF20F8AF13F
+ F334C74579CF89E9F4CBD9A47BE9DE7E050E7CF63F3FAC8DF8D6804AC7FB515F
+ 03B9C4431A4A7D376804FDC763EBD81C62B2354B3FDB5ACA9DFEBE09B3D7666B
+ 3633EF66D7E4E903C273D1D6AE0D02EDF11FBC70CACC06372BDA0BA70798CD65
+ F5D50100D05176B4AAE693531937769B040170733BB0351D33F6518C29286A70
+ 27F1C1FDEA5E1CCEA3DFB91384C6A0CB4F1C956565BDD1D984E179589B8DAFC1
+ 1564BE8B02209348FFE16C60B433DF6515AE1A43DA9109030F5DEC13A5362129
+ 5E24161C102AE64542367C8A1F40625BB9076E5D53913F6B43DE52D8E825C12A
+ 00E07AEEF9727BC4BF8F6A2DEB858938C9068EAF891FBB15B30F70B86E314E59
+ 998A41FBCA38E0125597C3124012E1BDBFE4281EA75A99168C6C33B1C5DA393B
+ CC68FD6B68C3373E318B2D49D11737085E6498906C1EF952C11674A2D9DAF363
+ D93BA9A3FC52B14E223089347D8A548FB380184EBF47EB96AEE509D46D8CC849
+ BE63A79A652ECE1AC4CB2E6B3961E000D790661FC90B45F72FC7DA0D99AB91CD
+ 041D0F0AD4DE42DC383C4BFE5DED1A6C9ED44023637C172C89A6B213CEC6B44B
+ 84F6DA0A7BB4B46F4F1B6791156B0BA74B31A2A4F8706B37D717A729E46AA435
+ EFC3ED8ED23113F2C8B71AF202EE4D8A79C19B254680659B6D2930AF8CAA2B9D
+ A46F961FB6B1C8D91977D98961141A8A2061A2C2E225863601926B717C751BDE
+ 2D5CBDB5688C3D379E80E43A7C3319C60854A3DAE518E2957634345F84907661
+ 9DE9912B8B3FEB72F47869BA2F4740DBD7CD54BCE2F8DF0AC235CAB1B4F904C6
+ CF50DA353149254CE0E88B6A4B81F536AC838E6E4A22642CB5921737EC6E7C49
+ A04D5F0F4E1B1B8E33400E0C4CE90A4332B6671ACFBBCF5BF06441EDB67B37ED
+ 890B2ADDCFB3F898D6AEB59A1D2754932E0696756DC94B488068448270E76D87
+ 2742A7FDED0FAD8C9DBC2220AC7B37F7D0B7D53757B4FDBE9E9FB18351630973
+ B357242453A2D1F671B2CDCD69926711E5EA8924D802D3757B13E058E4E51623
+ 560C3B19986A02264C848BB3FD80BF0FCA88B525A3A709D53DC26F88EA09C688
+ BD0063E4286D80FF19C2FAF67D422751E2AE723E77FE7824223BBB0431CA3135
+ 967D3F1F322E70162CF1800F5FF8CE54B60529F2F4283E227DCD55096D853F4C
+ 07583F23E797E28544C862B3895EB433C3A1CC4B7CF86AE11B86D03C4ACAF459
+ E54ADFCB9FD6F73384009FDA17109CDF8188FE5E308A13B66FCCF15A1EF0128D
+ C31F3F412938D43F470F30F3F0537CEFD282369424BA1B8242FE3A60A88FC5BD
+ 737F1305CF784B66B326F518536E8F86E951375E0B5397198F24429AD2674645
+ EADAF13D700B753FAE75133A602C9700D198ACEE2679FF849F47321C399E9CD2
+ 05C0B6252849C4D827E8F74904CE186F6D79F4D3C048CCDEF05EC122707BD905
+ 79D9045FD16935F8553865C8296EBC794CFC32060313C5A539D96F5D3CD1F3C9
+ CB3DE8EF376A9E5D64C3449D44C495E81FC91B7D3C9C470C83D7F108CB4B603F
+ DB2D9FD4E29078A171F4717C1A94F51F1C2B786F417BCEDEEA957461CC174896
+ 91A5B043256998716381E843EC7E6F82839D98E2C7BF936FC6E0205B59648420
+ 6BAE1F221CF366BA96B88799F5D12E06077FD6180854386A4889605070747B71
+ DDA3B8BCAAA26E3B1D0F2576E5199767EEA10F510DBAB888D38F36D424BC6382
+ 738FA6B5B2DA9AFBAA19C100FBB01B415AEDC1A951F41755DFC7E9F4EB67D9B6
+ 8142C7C3077F638A76EB503A2AD2F69961072635F567CD8EC9749463E003DBEF
+ 7E0724E5414B9521048C860078F5946248A8BAF885473C0E8CC022E74C35BA51
+ 7DB29DABBD58F6C71360D68AEF5A62F19667E6A02FFA1766E9B4FF376DC557A2
+ 400F154DAF277DFAE65A0F571EE62C7C227662B284901A609D7A6F9768CB7411
+ B9468046CD4DFCA84E112B233589FDAE508809DA855B84F738881A1ED5A97C91
+ 57BD7C94D6F4D313D7B9E5229140B74EB2E40159F1C91676EE3B8A47308223E2
+ B320701AFE105941A47E0345FEE521183EAE75DF6D1A4E809E72D2F2394827B7
+ 79AF5FCEB13E58D443162F16B7CCD64218198B0C1CBD72467CC4146D4A91D898
+ 7F177F7658DCA6DA46E47026B211202B1BAD60F79E8017305FD769D3DD054935
+ 88FA73098293D8733334028000872F8367E4D89745FFF758426D621DEF2AB2D8
+ 1330D98C1B35DF980B5C64CA341DCD96462FC0412C385676411A1EBC4B3CB613
+ 2DC8BF7FB1223FB71435F31D91792744BFA5529389680E3DA9EDCA27A430890D
+ 195A97D1DB3B2FB5020419213B74746E8BB7441E7FF7FE5C81BB4B5FF2D87667
+ CFE9CFEEE090F26C8B3892280689835BA5598FE9178A6ADC05038261335CDFBE
+ 56F02ABC96D95C02B0E4DCB56A8108B19FF26D92664234FCD7794B2F2AA2F32C
+ 4771500133C6EF95B5DD7ED7DB48CC98F433025260D5F7B4A46209244FC79217
+ 9B31B106BEA4F95C867380ABCE1D9A1AFCBB2FC0C977F38B52BBEDA251C8B46E
+ CDDED593419E564218DA2F65188A89E857CA9F71BF4A47FFF8DA6E427F083B86
+ 8DC22A41E187500CA741BD2CFEA46FA11E5065FC62D6EDEC9EECE1E376BD9CC0
+ 0EC9D96961C5558029B650B5F304681E99E12712ADB5E3586106B28C19B46D55
+ 4D5A4870D50DCD9611F7237F425511837762E0192AC419E2B33F60CDF2ECB420
+ 3E1D1856E02F5DBFA6AC0F610B3EFBD83EC23F2A2E658F4EC5CD68CB5B68CFF6
+ 091174BB71EF410023F06A4621C0128C6979204D65A63BFE21E7DC38DF13D20B
+ A41AE125F850FF69F2B1F5B4125548A87F02D341592665DE119FF20D402B621C
+ 9446639AE1B31F7FF9B1B3BFEA1332CAB2038EBDA834E10F56AE8CE84C71BE8A
+ 6E48F9EEBD079A0A765CA637529D26806A73D46BB466EFD574E50999F65E8F8A
+ C0A08D28F3F6D77F155BBF26CBC24E478BF7979D1012B705559089699AD70858
+ FC2E0F4AF05ED631AC5B068BD2AC2700DF59EEBA9CCD7EF49F6B3BAFF31547F9
+ BC9558E18FA0D87856F2F17158776F1C5889AAE7E6089DFA6B2B71A6C823B00C
+ 19F028C521D86D6E8A933176C363DAE90F1260566B45A8D4AF75689AFC2CB234
+ 89725F84E2F91CD9BB50755BD07B80B0975CB1F29E590A99922877E90F328E7C
+ BAD59A3FF7F5E07D9CE3C12C5E4AD9CD8E0ECE5648651E5488EE0C6F32DBF457
+ C484668CFA377C2E7DD5C5BE31CF12B771C740869517EC7F156EE966F8ADA714
+ A46DAFEF7FA3A7AF49F259A5CF200243D25DB34A15DD00C7E06BAF9DBD4EE17F
+ 5BD830C7DBCBF7A890E9406C943D4E086160B6B859F487B763E0BCBFFB5155A9
+ D90F25E552A84B4BA7FA10568663A9D80353EBF87877ED9A79A2E3B815E348E2
+ B27BE1DA6702092B134CB7026A595E1C2A75087846B3B8A1B3ABA608E4F375F6
+ FCA9C952DA86F0421DC54C9AE27B0A2D3CDB217018F47927F74C4773F8F88D34
+ 69ECA096530B072BDD6B136BAF2D254B1291310287F591377D429FD65E7318A5
+ 7B440D0A161ED03634AE380A04BDA62CB8F03492B1BDBFA1CD172FBA954302FF
+ 226ACE7D5B7DDD8908B296033F201B8221173ACD176DE7F6F009390660509120
+ 8920562BEEC05B592669A2178CC9D20A69CF22D26797AA5565861719BE16136E
+ 815E5EC7AE1C473F1A03CBB170454955A3F74AACAD127AC14B0FB307262B42FA
+ CD4AE7CA6F60BA3C4B3CF8B4710F4EC979B471865B8596B00BCF20490905E403
+ AC81E09855AA4E79C870D3D33A7FEC2F8879B42B3282656B9B40BD15622B9792
+ 964571A671BF71F369D9ADF7BF0213F01DCFC6A53565B915F55A374F85E77224
+ 66449FE859396D519C50132C92D5219BA7DC7785B6604970897650B4793FBBD0
+ 4EDE56D2347F43B0AAFE335095E8816CBF379A27C70FB01DD516941098A66FB9
+ 278805AE5A24F9A1FE69B5C8BBB1822BB3C47C842F1CA1C89913BCE23EAB8647
+ 15CD6660CD3223FE616B64964791E703522FFB85DFF39A92A641330239049C68
+ 53D2650B8E0B1BC9D7332B7E5EF571724558F329110142B04D699834EC68D519
+ DEB22CE4733C50005045B520B038C6C6FA4102FA4B5F1B4CF0FF777C0D1613E4
+ C648CEB54034B42E041BBA3A68BF0A5337E1C8B1C105CF0E347ACC8514BF65A1
+ 3976A303A713E2E502C5C62224FC4BDEE6BBEB425185B6557CBEE81526A8E707
+ 7626D1663B7F1DB8EFF63157D29B650B2E1584D86792F1F1CD0F331CD226BBD9
+ F3303FACC384B5C40B909268402DEB37C5A9860F6B939FA15C4B5EAC786A7DEC
+ D58E647ECEFF2EABECAEA0F05D249F89C30903ED5E686C2E84F345242C2EDF23
+ 9253CFEB7DC01A43F0C0B46640E81533884633D211B74FB3A5D0592F8EB94819
+ 43C6A5E660FFD8AD40E0B1E6B50EF4AFF828E338DF3AB9C327D2E516C86C178D
+ 6BEEEEDCCF8B32905CADCAA1EE12375DDC6EF30733EB90A5EE66A83B28F2C00D
+ 4ABB2981DA254177A50E362CC3FAC83037F9BAE515666CACF14A01B9B57B595B
+ D5A8EAE08C0A42DD48D42910E30C35867A819566E6F048D3B909EBABA159D267
+ FFF4C55CC12B5A5D876FF7B0B032012E593FD5265A467CB2DA7C5586CF1BFD78
+ E9A4B066C058243FE56C5AB4379AA453E72541DAEE5973CF463EEB87B6B50295
+ 54CBCC1101058CAA7F5525350370C064B92BEEDF23A08CEBF155F1D2E8B46C0A
+ F245F44EF179505F57FB4CEF271C5826F00F322F59A4684B3D8AFFED411B0957
+ AD7CFEBC8153328C043E8D53B8E40D92E51A437008CBD238089FE575A44ACC24
+ AC8F5B1F6B25B92BEB6762D7CB80C0B0AED644147507DBE05349DE04DE3AA7A5
+ 40C551BBF099B46FA74D0B0FE8872D994788ECF772CC65385BE59758C95AA150
+ A1FE1BE38C8675D272A6334932365D629F675DCF3EEB6F1886547367B8A5A39B
+ 8906971D7FF412F2C53448783031BD9CC109CE450DE67E29BDC39302C18B0E7B
+ 1EF42B69BBD957D94AD70BFE77330A257111BBD261607B5B5778D45CF3663441
+ 1FE4EA373F542C2BCADA91FBBADD68E69FD9AB7E999482307476A7430D319565
+ 41A371F660BFFF00AFC9B46981A948384B2A83B1871711F6E82F732540B897D5
+ 51C8D6A9647EF43CB31E6BAFC00A25429E5BBAEDF70879B764A7645A106A7142
+ 22ECC5F6EF95748862285F407F1CE08C8A086A09A58C080049F2318D2B392F13
+ 454C7E10B0D0E15D75B3A977F8ACF1554208D28B63ABC887A65D69EF5B1EE4CB
+ A4F06D3B8279AE97AA36BF9B16263675ABF8C378F9E7DF4CBEDCC03E705C34DA
+ 374DB462EA99CCCC9D1FD2CCC7078D06BE46CEBCB659B9FD88CA44CEFA9A77CF
+ B11BAEC9C081D337553912F8D58A50F4A45C3C7503195A5AA10E22F78AD21CD8
+ 602827A464F9805FD00C2AA4199E7E9B33923A0AC6ED203E5E58CF826E33CB4E
+ CA9337D39F6EE56BBBDD2F4BC3EB27ADCC217D6EC79F6841DEF9AE82810337A0
+ F52E0193BB62128121EDC27DA1DAA9CC24572692E56F64C23617F67A8441F3EE
+ D47D5C1CA56590DC0531B75B5EDE8CF4413E60CFB868BA9F0D27FDF7787BCDB8
+ F13F0C5C9F9F749A1CCD413D7ACA8700FBA6ACC9AE5D0C4EC73FE3FFF8A62C64
+ B9BA399984BAFFB3C4287F45BA311C921020FF90AD6EF89D5272E2EA96CDC444
+ 7248B7FAB06436DB95463368791ACC30B8897341B8DB33618368AFF5A5A73D1B
+ 772D43F037194882F5328B468B25C3728797471E3261D2EEBA1EBD69EBD86D6B
+ CE26DBDDBEF15AFF62827C64452F841926EEC3524B640826374A80E410719EF8
+ 97A039E25439C17B31AF2370C8D498260AC5505FFF2060521113F6A3E29DAC4C
+ CF283021F4DD6917378D7358A5D03DDBD95AF4DE7CF10DBA767AC100D51C0B8A
+ 2FD58767610FA2ADC366D39E2C204450681DBC3FFAC765CD5588CC0A1CC9479E
+ 6822B2D1CD785D700E2F4684A2167B584E257DF53E681D0D25E0ABBD5E281A29
+ C24A997172D00143D55E112F4974DC430E967731B2B9D940C3619FED976F4214
+ 7AF362DCF85774746000B34A462A998DA8200B5A3852D2B6C1EB336F12026693
+ 4A664EA7AFBAC4DE16A88D4AE27AB15893C4DE003721452B6F77D36CEF86BC90
+ 3EEB4FD4B30CD23BDE3BB218351FD3BF0B5A89866F7EC4A40EED6793D0C62EA3
+ CEEA3507F5C04D38411BE356472BEC194B8493F5018C5A255BC4FF97317D4E8B
+ C425306093B3B3C325B317137C2336212106787C8BC9E6AF6E465E35E6B8DF41
+ 28C1BC138E89009519603C7C2FD1BD5C6C5FE490E298568FCC60A331CD299B61
+ EAAADCE321B4BE8A14574CEFBAC8A8900E4F39FA1D0CF0408CE67C77F08261B9
+ EFCCEF71173A64AEF366A42C300AC9B4214DF25995BC5EDBA90FCAA3F0756932
+ 19796F29D81D571954558F9A0D64850826BF40263E2C5D0DB44C0F9F078E4073
+ 2AC87EC87AD89178901A0D34B33A19E053EC098B3150DCBF9DDF287816FE9CC4
+ 8ECF86BEFC30F3E22C618286EAC6C36EBA595B51D1EA66053A1B6D2A2F01FD96
+ 408A486483646D4DF996F0B519CC273E59D7AF7473BAE49026BC912216A17D76
+ 9A34940B2BEE1DFB2ACDD40BA3170BC4D02B88485ED47D964AAB67930A8066FC
+ 2575364ECF3C0B01DB2FAE3237BBABE481753CEF96CD37141413878C33961F4E
+ 8CF6278915F5410767A2957E5D3169E3D75DDB7125727A8C0F57AB119C69DD40
+ 7E52684743BBD00C4DB517F5079F5B24F2AD4778BB7D4E681E841FFD534A1E98
+ B1D138CD9CE880F0871768011D22322292FC060D30380A23783E6F31C078B09D
+ F57685CDCF1E0E113D23152EDFFC322594F9DFBAC141541C2A83B5695F176E7B
+ DAEFFD367FF69595919D74A7DE97990FE8263112D3390D4C146125C078F89398
+ EDF6B6304858C5DDECC065FFBE03E3BE4C7D1B03494CACC5FF40BA7BE4B8C288
+ 62F17FFD212FADAB91D552F999F1F63D0062E3A8F722F33A442E3AFE5AF5B942
+ 4B40F79A069307D5BBC68A29D1065A7C025F92C10BC6FA93029D86C618BD6D42
+ F9F02FDF6E0650B024D9E82EABF5E8566B306AA75F58898137096A3F201912E4
+ AA53440D726F3A8483363104E1C1831EEBE72C1C65335DCDBA00CB0ACF624BB7
+ C16772AC7114ED7D5BCCA84ADFE28597D6612D1D16C99992F5BCC82EAF285B47
+ 16F8A6DEC91A50E80373406446229975939E5278FB870BC4D5B981A3D4D1DE60
+ 597854E1B6A78E66AD7392AA152894DBE57325C1BD90BFB08CDB0881A9BC5662
+ 80EED3C4E1845F8905960AD6718E81552EDD94383577773F25E1F6CCAF12FAB4
+ 15CDB8B94052C9F430875D63957CB4F102F8DA43BD56D6BA96CB67488F6435A2
+ FFFF9D0F6314376B075D7923F749FE1FA02E89D1697A12A1C9C10F947B0F0A71
+ 3C0C98A23DA9E4749FD25C4179194051191DD03F4A9D677271EEA5DEDC8FC7DA
+ CC3BCE2DD71A6453917C3BF0EA36DF5D9D8870541EDC17912BE51EC86D31FFBB
+ 7ECDAD7E3BB0EB2D93F6DBD8CEF95836CD1C4AB38BD6E6090B96DA85B9F517C0
+ 21D44C501727FB90D70D9DFCFE034D0A4643730FA162633656302385BF79B31A
+ 0EA0801512008BCBC8736CF01AE382149BE74449711CC0F181AD08DC07298B41
+ 7AB2DA7CE18533E4A9503F193A659ED9BAB67C7F150BA04635251BE1A626B6B5
+ D4241E6CFD2EE1224C3E818582D082C6F73A8157B3C2F2B037C8325FD875400A
+ EDE69B3882A9458524F0B5A9C10F47398A9B98540BE2DDF736DE58395D51A1F1
+ 9343383CC77B82573BC56730A221C48CC17C4553B05BD631077257C5C3CC5E03
+ DE41E12DCF9856BD5922E697B80C854890808D91CB4A403183D04AFB1D91FADD
+ 7F745309D01C58C078EF5A22589500A1F82A580A71028A9D3D9CBCC13381D6C5
+ A6684FA7ADE79D339C824230D15EE191FE74EC6907CD3AB70D0B7AC68072FD69
+ E7566A8F5F325B61C84D3058D245B61740D8B17DF73B380C1936F71691BF8CE3
+ EC0384B626334C850A2041F6C9FDE1E9999975E5D41779829B817DC683CBA598
+ 48E78EF9594CEA1C1D0673EF83239157636AB5A76F173200A3FF0746E30C7C46
+ A77C4F2F542B1D9B152D11B338636828504DADEE2A6FA6903EB56DD5A77D1499
+ 1A48DD4745659C90FC75D065D0E4B6080769095F16017A4FE5553DCC74D80DA4
+ A7C352A5E6E5B66493AB0325BA4D562CA35481003D01EF6FF6C417764188B010
+ 3156A2BCB475DE8C79542BE2863E5408D298983350B9932177C5389B76B66FB1
+ 6A449C9285CA4B819FB99914F1D163F7B50912843A39F81AF60E0973C40F43B8
+ FFA331CAB4D9C493C98234C330F9CE5A2F5D4BD021C10BB197115999FDA23A61
+ 97F973843B40210C08AF43559070D09B9B6F0BED0AF1A7AD1D26E74402B92A8B
+ 6A0E92240DFD38C37E190B5B670BC8AF08727BFAFF2DA93F3072C36A005A914C
+ 739673EE6BF33FEF3EC4B0A294816011BEE7039C6FC82E9306D3711B9F0FD7B9
+ FDA88801B916D069B5875BCF853D09C91BE63723928CD8A12EF4898910F61090
+ 8F1719D323716C8A625FA25BF896C315AEBABA554303F46B9525DE7790AF0998
+ 12841D7F967360B55C523F12C732B0B3181AC6B5768568E0FD53292DECA6B499
+ 27ADBA848AC163C0BEE7558184C29F01AC14ED54BCA98E8A673DDFFE8145607D
+ 2B0C9F33ABF381AB8D6F47A76D7550E0F6CA6D49747CCDC3A7E45982404A0C78
+ 0FFCB2257CCB71ACFA024A0008BFBF3B884EE41D1F9B39EDC4A4026683CA2067
+ F1F599DE3C002218F48D38FDA394A841C2AF3B4AA6399828AAACDCB7E833B7E5
+ CC602662F204F5BDA78935BDE4AFA6400338966B3A9D02D1233B7125078892D6
+ 113C908FEBFE8E7FBD1A9D37834C114C26C38D01A2BB380E17FF8D65CEBC8695
+ E2BEA9E08F1EC6C3256B35183701A8B565C646247FD3DC31C041D863D6015A01
+ BD66E1A0B7783B9514DC75C9D25FCE7073ED6D796B80D23F602409611BB1FB0D
+ 325CB94C1CBC2FF49D3067B20B58E38AA67F75987A62354AAE04E53E9EAED79A
+ 076FFC79214E25E6A3BE79DB94E31246AB373669044F4A04D25A5EE1C0C3F2F4
+ A99883EE2694AD494AD95A76665E2CA9C32F81D9A18F0271BE545ACEE2856592
+ CB3FBD47844DAE2CD992D7E8F9823008B7D5A1D54A699B1E21084A935EB91870
+ BEF490B176801EE3FF1B0CF5EF529511B4C9ACBEDCF9B0D2E1492C6E8A417A66
+ BA5B70A8A5EC603248F2573133CDA97160FC6F37854963D21ABE77F3538E08E6
+ 149C98380884452A2C831D9751B28F7D9A2B66625AFB9C270CB24F4F4D9EF98A
+ 350A563AB6870DEDA6DF5A1FB55F12E5E1F345AAA2FDD5DB8A65D77C6EA56D26
+ 6EEA82880A782DEEF3C6CD889DE76CD879676D31DCF8DAD04F5DD199B7DF8D32
+ 9262FC346B6D74C7636DC7662F91FDEA7F9B12ACF67F2701492EE4048DF22184
+ 0FA882B8BD3D3D4B42491B726D59797B7D8D2E406DFF53ACAD7C8E1E805C6F58
+ 236FCE5D392A2E009402261C33326641C56974DA66F9CD6C4803F825C703AD88
+ D1F134336D69068771706FFE35F0C30D32755E97697D425E0DFD81DEB9A60D07
+ AF515939FFFCD96F1B1F0A1A09F5FF89410B4BFDA312F53197D6AD44E4E81D7F
+ 253566BEFD684A19FDCFBFBDD87BF3D8EC15AAA11DC98D807BBF91FE6A63F2D8
+ CB32AA593B2A271960D10ED3858F3EE929BFB6963DF2BDD4F57890771F262861
+ 4B32758FBB163E5745D793C3321C1A18DF914BFF37B57DBFB3C4301CBE812032
+ 65870B75F41931614A729F52BE2E3FAB7CF442120B58D6E7BAFA1A39D30C4EF3
+ A2453EB3D5A9BC08607C59438787ED9822A370343521898886F54D73CA54CE81
+ 5A3C0DE2B5E0F1C9F9ADCDDD1B42242562680DCD6A688B0AE334C66F17661542
+ F03DDCCCD64E9586EDB8AA3D653144138E4E4D9A90739700A231909E51EF9F58
+ 45D87D0CAEF5C1CDD98608C2DFAAAF732F10BC36EABF4BCBCD635830948BE8CB
+ 357772A871E4172E4946DCCDD04C044FDB868C5EC1EE6E96817D94E8F0B5B017
+ 2959E569FFCB5D164B10A9EB7B94522C3BDF2957C721847BFCF7DA77A1CD242E
+ 2345B46759D42B18002E5BD6E6CDF8F7B7DF14D8B4B7ED0F2EC44BC58EDF435E
+ E930D065A7F6D2C7013E0411394C2A77F3C4D091E0339E08ECCD38F3CC4291AC
+ 4F17E959F0E49DA2B52ED46CE35E8E396D1D9C8C2B0615195AD4AF2BE5696C82
+ 72632F6EF88083D6A269377EB077098188C96F738770ABA5A5EDB5B563DCC9A9
+ C0C7A5C725803F9192EBC35A96F1AAECFF25F64BA4A565E2DD064A0E1BACC9CE
+ 60EB7281F7EB173851246B8617072BD1E66E134F519E0F1E404F27219AF71AF0
+ ED27A4C9F71D6AAE1458FD394286A57F9E44C3C44184FD71094493EB93FBCC37
+ D95640004D5B5F2E6B0C88CC9624241D3FE3041266F349295A346779B4677C80
+ F377DAFA6C9A92FCEEDD04F71E370B287CC3D330CB1988F69EBF880426772809
+ CE104D285B626CFC15643DEBB8844EB1E10F9B87FF6F66DB46CCEAC261C23807
+ 38FA8DA37FF154A90F1E3CF889A2CA6C66B8B2FFF2FCF0B6DD2C718543E9B76E
+ B8954A9D17AB6659A0D3150277FADE660699413D89DCC5D8F2F45A6D592A302F
+ 655DABD5F88BE437428D96A53D67D19671BA6660D628FE989A0E26451D769940
+ A88C13DECF306EA5B2FB448B43648277817A55D4C2E81C5868365F6C612C7A53
+ B5C741C39C2EC58BC9D1BCAD7BD99268AFDAE014C811DA2473556FB50B6B0518
+ 3C27AE62898209EA05A0F07020574E660BB339A9CA7B8A2AC68CC5ABA31EFBF6
+ 4EBBA04B291CEF7971193DE1E935E1CAA8DD81D23EB5E9AD1348B204AE7C316D
+ 99421EE9F904A31FF491DA3465FFA4D4AC545FDE78738FBCF3607B146B8840E8
+ 418E2A1A5F749AE01FFF32B695F61A20DF8169EB83F54F5120E29C6FEB50DDCC
+ 9D53D37295B798958388A0E2135CE6E06B21D3ACD1047287A00128298F931B91
+ 0103AEC5DFDF838F898E84574D0E05EE8D08C95877CB86912425E6E3BE817408
+ 580760D95F86227254D63388754302819A9F900A28F9F2D6A861ED36283E075D
+ 2DD606B284070E537C384FBBCE26B6BAC082C8D97C23104D5646EFAF7D7E25AE
+ 678B777D6BA675F78C9AA10D3CAD8FBDEE445A988CB2D8C2A267FF3175E4CD3E
+ E553449793A4737CBF8E25EB2B6DA7735BD11D050344E1F71295802B0D716799
+ 410F391BBA38B5285EB85A92E3A2F4F7DE940D95D720227CEB46E00D635A8197
+ DFE053D0B93C4DBF47B501DDF9950F2D3EFCD3CD6AF835CA4B81D6AF9BDBCFD1
+ 64598AAD45E5AE436F95A7BA8C8CBED550FAECD75CF3EE8D0A654489ABC5B9CB
+ BC8595CE2E23A396FC467798DC61DB826316AF739259BDBD49C1A4DD14B8289F
+ DA880CD88C18B1285ABF35763224E40B87A5EAF714538ACB5873F28B1E715BDB
+ 21303ED5B40BA3D057F2D215D1A1B40626F8244C92932F78E6BDD789C06E2E44
+ F2C8665B8306203D16A638A0AB7FEBA955CB1BBD1817C76F87477A881183ACCC
+ BC90304090510F17197F2B3110A5FD76D828603CB217926044498866562DFD5B
+ 4C887EB20FA90C0B9F4B33B74CAB76593296C9E1FA9830BFBA909E48854B42F8
+ A06BBA84431900E0AD3D1947EBD145824936EB94453B1C074BFEE73069407147
+ 5A159802DA0A366827ED9BC75683FFF40B5D75AF58D70E2EA5FE3864C219AFDA
+ BAD5C60A3B2AEA907F9ACF47BE50348E94F36F706CCB5A61C1EE7EA7C5A2C6FE
+ 5DC656AEE91174442DB79D3C3764FD21CC82A9B8F9BC9772D4E3F9B5573277D6
+ 980012C8BA4C63EA2861A37A23D41A924BF08EA6C2682CE5A4F1B82D493139EB
+ 4E03125C84232EE11C7829DA6C886D77006F1FDCF479F8C6ED2B9B04735D5CB0
+ 4A96153250DE03A29760A2FB7784CE214908B4773581F4EC4BF09FFD65F29E59
+ 60760474C59BA9474CBC2F7C1AC8A849562F4DCA4105EBE29F23304489F97B67
+ 733C58C2E8924EED9DE7E68F8CA61E7A0145B75C3ED249507531A7427E142705
+ BF45C934DDF3F85B7A0F3E5DB96A02B265938028B46543A45A67EE3278190C53
+ E046D763A6F86FEF962D6C30101D2D06FBEB5B426DF0FDE54CADBA492228014D
+ 3916AD26205092E5F5B3AC4F70F2ADB9107A3D9BAC651AF51A40D8B74BE3A93F
+ 72D6C0AEA8315FF45AD0D3A86FFFE5A8E6DDB2393A393FE015A2702EAA92D630
+ 115E7358EBFEE3FA1B9D9218C115FBBF76C0520031A794B831C363A9C912254F
+ D86D028A8EF1ACEBC567FB31AE26CFC0DC9A55CBD975B4799DB899CBCA006BE7
+ 6A671CA04983F4BB67EB1C5D14A82B3711087F6FBA10258CD318E03D35A49D97
+ BBAF88C86D7EC90853163514AB02C6112125370A4880F94B7ADE4B1027CC65CD
+ 667D6AD254E2593C2F00099F423527BB180380CD41D007F5C3CD4ACBCE59D3ED
+ C97437CEFE0E4E310DD9A5E34ED1986C92AE9B7CE083384B37FC03B4B1FBDED2
+ E14F139351ECD1C0742A2B8555349D79CEBCEAA2A1B56A1B1FD6A3B82DB47949
+ 9AD783107FE4CED56DE3CDF46217DDEEFD7D2A39D9C8485F00922AE866F9B364
+ 2F815E58D125727CB26CBF0043AA7071AC45F9329C9B8F00F0CF45701C60B6D0
+ 9689A65643DF97365BF3EB747773A1ADFD02FC9721737AC2F00C4FF22F546E2C
+ C354B199E55CD3D7846A8D1759C35D0803BF876D845C454CAB711B39C1CF3E3B
+ 790D713FAB9439A13AE0B119812E4FD978A6498947C432A05F4A49556523461C
+ B217424DBE8D1C2EE7CB4C1755A96BF71F9A668E41285DE8EA87537D3751C397
+ 116B40D7866B2CBC0C8DA3E9E8EDB10F42F77C73B98F7D68283CE323CCB36CF6
+ 59B44153C994FA483F8369658A62754A56C2E1B66E76998E7C32201B6403B186
+ 1850EE877F56D175FA7395400EFF76FA8FEC7E50854F493316E8311BEFE34CA2
+ 3ECCDDFED7F9D0C3E387474EC1DFF9928C18368646026F0BEC11732A6EEBEC67
+ 6E50F14C3FEC9205BF01988437F0E32EC84F3C2C5CC68C85AFC1D5E6A4CF5790
+ 373E480401903055D2865D3069EBFBB75037FD74A0E5DC17720BBC2B900A3EC5
+ D5AA21251FE3918E3D2B8FAC02272B8861B3D65C1CD287B8C483BE7BA65AE9C2
+ F9F4A09F806614B70365472385674E516663BD6E7E7220ED7CBC2E5AD79B72B5
+ A99255D300636C24B8AB799F903C0E06F49DC00A78B8E540547F96F1D7CB328E
+ 4A8B533E5159C142A3F0ABDE3369D42A465C82EF5E01CF18D166A4E86FABD95A
+ A245B4D43C647310CAC5042FED03267EBF81ADB40E9E2D4F41194DAD6DC1E37A
+ 6BC7C00A28506B5FA9611CD8A167268A991172B97B40A898EAD22077DC44B945
+ FDB8AD4F87E8023FBAD44DE025F05877D81A61EB0272137BEB7ED4952283268D
+ 6489BA70BA0825F5F13366B33768E3194A06B7D53DDFF3113B36CF0DC6A71F56
+ B6726762B236F988DA3D8F40FC97906995EA46A306FAA174C7157EE7F21009CF
+ FE78D783A698108536D1CAFAD4155B30D6C7F655597E17522EAA40CEB0BCF267
+ 4202ACBB86D59E2A92166B8FB47B2A6DCC3223F6AE4DFF8AA68CB7DA4ABF65DC
+ 5DC977AD81D7085FE052E661795F556BA4959F54CBF2864AB96241DA06BDD40C
+ 6C7147AEC6DBCA99516166DB3EB2644A62708779C23AF12B2C628901BB3170FA
+ 4E79800154787DBFA92E8E599485A009170C2C4AD5F065F71004A59445635BDA
+ E8FF885324CAFA11909FDB3CB4E2C44C0CB4AE26B63EEDDC518178597F244081
+ D5B2DEE2300A51C8B8B510D667AF90DF80BDA9CD1278EBF007D2536D96E45148
+ E0D8380D9176219180E3473A3EB2FE68BFBB52A70EC937E9D3FBCCD84F27D837
+ 73C9F5A94EDCDCA87F541EE9A13267955E80A6558AE7D4D39B29F1EF549EE1B0
+ 51980E27B28BA43972D37771863F4A9FCB14DD4AE6F367EE3E474042E4702358
+ 6AD9F0E046A12397D7800BC0D31E710CCF9F7D97ADF0E2E018C6CE59EC8C8EF1
+ FA2E1CADD83860E0D80F1BD06F203F898DEABA47E4BCB7A7E7DC31A61ECDAD1D
+ 06E66BC130DE4A2A23CC99B7D1C43448DFAB8F906D3855D61B2A46E6C1621ADC
+ ADFC817771707C7B762DBE73CC7E3972A89284C4F8E804A6B901D856CCB80769
+ F5ABF020D5CDB10EEEB5490623C0435A16AAE8894136BA3E31F126EE78E0C8BC
+ A5FD518355C1736615E0E15FE5C8BD98A91FBB3ECCAB61A739212C4D2B878BFB
+ 111138C1575CAC87F14D3EC5163A92E1E3AAB9262A1747BFA2761F0F810EB355
+ 3FCC4C2CD357835632AE4E5B27891C562C3F7D4D0B692E33F73FA871E4899E42
+ AB9D40FF36D019BE222C8DD68E0944ACD642E5B0E2636BF11269E9A95909361C
+ B4943296B2B2DB1592D4F6DEFBC4B1B71D9A1A3E9BDA8A71A461569E6F6655ED
+ 0B3BF5D489E4550C5C9B517A42E26266B0738E3A9B56798097EFDDC02F138781
+ B904452FA2A1C4D2BFE8D7F2EF0F9DA1F78FA1F3C95C044F820CE50D64DFB592
+ 9BA23B80BF61195688D8DAE00793322AF789AA18B77A4BFE2121FAE31318054F
+ 252B4D43E2D95F9EE8651547E0517A000EA7CDDC01F90699C9E9B6811C73BA46
+ 88EAE94907FCB5D8CFDB026D2788C3C2C1F125A1AE199BFEE87A816C754403CC
+ 66F5ABA1339438F228F5046F41FBBD4D68A82058602528A2AAB45CDDEA82BE69
+ 4D0E0081D9CBABA174F6A871CDC42A9630F2DEFF0824EE2D4E1A33BD09825093
+ DDE75F9A27FCD28FCB28FC02A678AED604AB23DEA5925D73127F2BC2943FCE6F
+ F32AAD928D7BCD88FFD961E8DA50C41014A4975934D96E203DFC0D3445C2C89B
+ 0C0E27A8ED7C754ACD7C7FC142CDC08A8A2F4E774340A8CFB55910D7F35F1FA5
+ D1A02889B69ED9481698D9C2E9179A7D45BF678BE1F9EECB8D9366564ED5DC99
+ C82E056B082F1350BA389857EBCC9499FC84EA8F69A2744D334392918D715CA6
+ F92437AF9B0C8BBE1D105CE2696DF6DD87C81DA9E9957D84FC0E8985F6BC81C3
+ C6726AE0E28F693F56FFD370A71F826FFEEC21EC7275604F7F9B2A8AA067523E
+ 21DAF1C5E45E06661A6A111907123C0F8AC823693BBA60017DD743D0C061E91D
+ 0093E91DCB5BA63024AE519423AE086EF048BF44B43A6108A988B4C1E343CDDE
+ 4864EBC6423FEFB48E9FE18930647622B664D59F80B04A9621C05B5ED6574694
+ 668F6F255963FCADE0CDBCF3DA24A00BC42C634BECE069A90BF73EBE07F03F6F
+ 76FBCEF1A001DE598B50D9D0C85C793F5BC70ABF479FFAF51D3C766A02A1CD7D
+ 9850F107D585B698B5850F8DD6CD5F3D8AA7E6CAE31716CC5FE64E759C6B8743
+ BBD93E8F5674CC999D1E21B5988B055EFC864C7E1E6A71D20B4284DAC8CDD087
+ ADF9AB3FC77C6CEDED60FF8F36CF3F706F8BBCD834F74FC543DEA66AA7D486A6
+ B7A127E399E22E429C7F927DB82D5D64F336D9933952884E7BD3C3E7A8C5B511
+ 936C07CCEC7808CB64FFFCFCB899FEFC84EEFAAE1F52F5E49F1C151C57A4FA13
+ 3775573BD150C3C0DA86A9AFCEAE297888455E86FBC254BF3A67C9AC7D682204
+ 7613EFC8FA15DB8362F79377F9FC395FDD302CF2E2D60D921C7E191E4E78B714
+ 65084A88467C3C2CB790AD3380018E095EEB27B1A9186D69785650A51993CB25
+ 
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ /ArialMT findfont /Encoding get
+ dup 32 /space put
+ dup 33 /exclam put
+ dup 34 /quotedbl put
+ dup 35 /numbersign put
+ dup 36 /dollar 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 55 /seven put
+ dup 56 /eight put
+ dup 57 /nine put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 60 /less put
+ dup 61 /equal put
+ dup 62 /greater put
+ dup 63 /question put
+ dup 64 /at 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 88 /X put
+ dup 89 /Y put
+ dup 90 /Z put
+ dup 91 /bracketleft put
+ dup 92 /backslash put
+ dup 93 /bracketright put
+ dup 94 /asciicircum put
+ dup 95 /underscore put
+ dup 96 /quoteleft 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 /braceleft put
+ dup 124 /bar put
+ dup 125 /braceright put
+ dup 126 /asciitilde put
+ dup 161 /exclamdown put
+ dup 162 /cent put
+ dup 163 /sterling put
+ dup 164 /fraction put
+ dup 165 /yen put
+ dup 166 /florin put
+ dup 167 /section put
+ dup 168 /currency put
+ dup 169 /quotesingle put
+ dup 170 /quotedblleft put
+ dup 171 /guillemotleft put
+ dup 172 /guilsinglleft put
+ dup 173 /guilsinglright put
+ dup 174 /fi put
+ dup 175 /fl put
+ dup 177 /endash put
+ dup 178 /dagger put
+ dup 179 /daggerdbl put
+ dup 180 /periodcentered put
+ dup 182 /paragraph put
+ dup 183 /bullet put
+ dup 184 /quotesinglbase put
+ dup 185 /quotedblbase put
+ dup 186 /quotedblright put
+ dup 187 /guillemotright put
+ dup 188 /ellipsis put
+ dup 189 /perthousand put
+ dup 191 /questiondown put
+ dup 193 /grave put
+ dup 194 /acute put
+ dup 195 /circumflex put
+ dup 196 /tilde put
+ dup 197 /macron put
+ dup 198 /breve put
+ dup 199 /dotaccent put
+ dup 200 /dieresis put
+ dup 202 /ring put
+ dup 203 /cedilla put
+ dup 205 /hungarumlaut put
+ dup 206 /ogonek put
+ dup 207 /caron put
+ dup 208 /emdash put
+ dup 225 /AE put
+ dup 227 /ordfeminine put
+ dup 232 /Lslash put
+ dup 233 /Oslash put
+ dup 234 /OE put
+ dup 235 /ordmasculine put
+ dup 241 /ae put
+ dup 245 /dotlessi put
+ dup 248 /lslash put
+ dup 249 /oslash put
+ dup 250 /oe put
+ dup 251 /germandbls put
+ dup 0 /onesuperior put
+ dup 127 /.notdef put
+ pop
+ end
+ %%EndResource
+ 
+ userdict /pdf_svglb get setglobal
+ end
+ [/N8/ArialMT 1 TZG
+ %%EndPageSetup
+ 0 0 792 612 re
+ W
+ n
+ n
+ 5.03999 4.79999 779.28 603.12 re
+ [/DeviceRGB] cs 1 1 1 sc
+ 
+ f
+ 0.23999 w
+ 1 J
+ 2 j
+ 1 M
+ n
+ 65.52 593.76 m
+ 784.32 593.76 l
+ 784.32 96.72 l
+ 65.52 96.72 l
+ 65.52 593.76 l
+ h
+ 0 0 0 sc
+ S
+ q
+ n
+ 65.52 151.68 718.8 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 65.52 151.92 m
+ 784.32 151.92 l
+ S
+ Q
+ q
+ n
+ 65.52 206.88 718.8 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 65.52 207.12 m
+ 784.32 207.12 l
+ S
+ Q
+ q
+ n
+ 65.52 262.08 718.8 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 65.52 262.32 m
+ 784.32 262.32 l
+ S
+ Q
+ q
+ n
+ 65.52 317.28 718.8 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 65.52 317.52 m
+ 784.32 317.52 l
+ S
+ Q
+ q
+ n
+ 65.52 372.72 718.8 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 65.52 372.96 m
+ 784.32 372.96 l
+ S
+ Q
+ q
+ n
+ 65.52 427.92 718.8 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 65.52 428.16 m
+ 784.32 428.16 l
+ S
+ Q
+ q
+ n
+ 65.52 594.72 m
+ 65.52 95.76 l
+ 784.32 95.76 l
+ 784.32 594.72 l
+ 572.16 555.6 m
+ 572.16 448.8 l
+ 761.04 448.8 l
+ 761.04 555.6 l
+ h
+ eoclip
+ n
+ 1 j
+ 10 M
+ n
+ 65.52 483.36 m
+ 784.32 483.36 l
+ S
+ Q
+ q
+ n
+ 65.52 594.72 m
+ 65.52 95.76 l
+ 784.32 95.76 l
+ 784.32 594.72 l
+ 572.16 555.6 m
+ 572.16 448.8 l
+ 761.04 448.8 l
+ 761.04 555.6 l
+ h
+ eoclip
+ n
+ 1 j
+ 10 M
+ n
+ 65.52 538.56 m
+ 784.32 538.56 l
+ S
+ Q
+ q
+ n
+ 65.52 593.52 718.8 0.23999 re
+ h
+ W
+ n
+ 1 j
+ 10 M
+ n
+ 65.52 593.76 m
+ 784.32 593.76 l
+ S
+ Q
+ q
+ n
+ 0.959991 612 m
+ 0.959991 0.959991 l
+ 788.4 0.959991 l
+ 788.4 612 l
+ 572.16 555.6 m
+ 572.16 448.8 l
+ 761.04 448.8 l
+ 761.04 555.6 l
+ h
+ eoclip
+ n
+ 1 j
+ 10 M
+ n
+ 65.52 96.72 718.8 497.04 re
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 65.52 96.72 19.2 68.88 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 70.56 96.72 6.71999 61.68 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 108.24 96.72 21.36 72 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 115.44 96.72 6.71999 64.8 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 153.12 96.72 21.36 73.68 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 160.32 96.72 6.71999 66.48 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 198.24 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 205.44 96.72 6.71999 55.2 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 243.12 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 250.32 96.72 6.71999 55.2 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 288 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 295.2 96.72 6.71997 55.2 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 332.88 96.72 21.36 62.64 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 340.08 96.72 6.72 55.44 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 377.76 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 384.96 96.72 6.72 55.2 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 422.88 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 430.08 96.72 6.72 55.2 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 467.76 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 474.96 96.72 6.72 55.2 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 512.64 96.72 21.36 70.8 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 519.84 96.72 6.71997 63.6 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 557.52 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 564.72 96.72 6.71997 55.2 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 602.4 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 609.6 96.72 6.71997 55.2 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 647.28 96.72 21.36 76.08 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 654.48 96.72 6.71997 68.88 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 692.4 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 699.6 96.72 6.71997 55.2 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 737.28 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 744.48 96.72 6.71997 55.2 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 70.32 96.72 21.36 80.64 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 77.52 96.72 6.71999 73.44 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 115.2 96.72 21.36 95.04 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 122.4 96.72 6.71999 87.84 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 160.08 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 167.28 96.72 6.71999 55.2 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 205.2 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 212.4 96.72 6.71999 55.2 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 250.08 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 257.28 96.72 6.72 55.2 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 294.96 96.72 21.36 63.12 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 302.16 96.72 6.71997 55.92 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 339.84 96.72 21.36 62.64 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 347.04 96.72 6.71997 55.44 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 384.72 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 391.92 96.72 6.71997 55.2 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 429.84 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 437.04 96.72 6.71997 55.2 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 474.72 96.72 21.36 72.48 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 481.92 96.72 6.71997 65.28 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 519.6 96.72 21.36 68.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 526.8 96.72 6.71997 61.2 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 564.48 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 571.68 96.72 6.71997 55.2 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 609.36 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 616.56 96.72 6.71997 55.2 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 654.24 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 661.44 96.72 6.71997 55.2 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 699.36 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 706.56 96.72 6.71997 55.2 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 744.24 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 751.44 96.72 6.71997 55.2 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 77.28 96.72 21.12 91.44 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 84.48 96.72 6.48 84.24 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 122.16 96.72 21.12 81.6 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 129.36 96.72 6.48 74.4 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 167.04 96.72 21.36 90.72 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 174.24 96.72 6.71999 83.52 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 212.16 96.72 21.12 71.28 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 219.36 96.72 6.48 64.08 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 257.04 96.72 21.12 162.24 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 264.24 96.72 6.47998 155.04 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 301.92 96.72 21.12 180 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 309.12 96.72 6.47998 172.8 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 346.8 96.72 21.12 189.6 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 354 96.72 6.47998 182.4 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 391.68 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 398.88 96.72 6.71997 55.2 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 436.8 96.72 21.12 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 444 96.72 6.47998 55.2 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 481.68 96.72 21.12 72.48 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 488.88 96.72 6.47998 65.28 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 526.56 96.72 21.12 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 533.76 96.72 6.47998 55.2 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 571.44 96.72 21.12 161.52 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 578.64 96.72 6.47998 154.32 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 616.32 96.72 21.12 141.84 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 623.52 96.72 6.47998 134.64 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 661.2 96.72 21.36 97.92 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 668.4 96.72 6.71997 90.72 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 706.32 96.72 21.12 94.08 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 713.52 96.72 6.47998 86.88 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 751.2 96.72 21.12 160.8 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 758.4 96.72 6.47998 153.6 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 84 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 91.2 96.72 6.71999 55.2 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 128.88 96.72 21.36 70.32 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 136.08 96.72 6.71999 63.12 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 174 96.72 21.36 96.96 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 181.2 96.72 6.71999 89.76 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 218.88 96.72 21.36 71.28 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 226.08 96.72 6.71999 64.08 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 263.76 96.72 21.36 158.88 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 270.96 96.72 6.72 151.68 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 308.64 96.72 21.36 63.12 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 315.84 96.72 6.72 55.92 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 353.52 96.72 21.36 62.64 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 360.72 96.72 6.71997 55.44 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 398.64 96.72 21.36 156.96 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 405.84 96.72 6.72 149.76 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 443.52 96.72 21.36 75.36 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 450.72 96.72 6.71997 68.16 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 488.4 96.72 21.36 72.48 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 495.6 96.72 6.71997 65.28 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 533.28 96.72 21.36 65.52 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 540.48 96.72 6.71997 58.32 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 578.16 96.72 21.36 62.4 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 585.36 96.72 6.71997 55.2 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 623.04 96.72 21.36 108.72 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 630.24 96.72 6.71997 101.52 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 668.16 96.72 21.36 89.04 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 675.36 96.72 6.71997 81.84 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 713.04 96.72 21.36 82.8 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 720.24 96.72 6.71997 75.6 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 757.92 96.72 21.36 165.36 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 765.12 96.72 6.71997 158.16 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 90.96 96.72 21.36 91.92 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 98.16 96.72 6.71999 84.72 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 135.84 96.72 21.36 79.2 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 143.04 96.72 6.71999 72 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 180.96 96.72 21.36 117.84 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 188.16 96.72 6.71999 110.64 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 225.84 96.72 21.36 71.28 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 233.04 96.72 6.71999 64.08 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 270.72 96.72 21.36 163.44 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 277.92 96.72 6.71997 156.24 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 315.6 96.72 21.36 287.04 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 322.8 96.72 6.71997 279.84 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 360.48 96.72 21.36 492 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 367.68 96.72 6.71997 484.8 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 405.6 96.72 21.36 156.96 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 412.8 96.72 6.71997 149.76 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 450.48 96.72 21.36 75.36 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 457.68 96.72 6.71997 68.16 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 495.36 96.72 21.36 92.88 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 502.56 96.72 6.71997 85.68 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 540.24 96.72 21.36 73.92 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 547.44 96.72 6.71997 66.72 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 585.12 96.72 21.36 161.52 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 592.32 96.72 6.71997 154.32 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 630 96.72 21.36 123.6 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 637.2 96.72 6.71997 116.4 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 675.12 96.72 21.36 76.08 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 682.32 96.72 6.71997 68.88 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 720 96.72 21.36 94.08 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 727.2 96.72 6.71997 86.88 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 764.88 96.72 21.36 162.72 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ 1 j
+ 10 M
+ n
+ 772.08 96.72 6.71997 155.52 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ 1 j
+ 10 M
+ n
+ 65.52 593.76 m
+ 65.52 96.72 l
+ S
+ n
+ 60.24 96.72 m
+ 65.52 96.72 l
+ S
+ n
+ 60.24 151.92 m
+ 65.52 151.92 l
+ S
+ n
+ 60.24 207.12 m
+ 65.52 207.12 l
+ S
+ n
+ 60.24 262.32 m
+ 65.52 262.32 l
+ S
+ n
+ 60.24 317.52 m
+ 65.52 317.52 l
+ S
+ n
+ 60.24 372.96 m
+ 65.52 372.96 l
+ S
+ n
+ 60.24 428.16 m
+ 65.52 428.16 l
+ S
+ n
+ 60.24 483.36 m
+ 65.52 483.36 l
+ S
+ n
+ 60.24 538.56 m
+ 65.52 538.56 l
+ S
+ n
+ 60.24 593.76 m
+ 65.52 593.76 l
+ S
+ n
+ 65.52 96.72 m
+ 784.32 96.72 l
+ S
+ n
+ 65.52 92.4 m
+ 65.52 96.72 l
+ S
+ n
+ 110.4 92.4 m
+ 110.4 96.72 l
+ S
+ n
+ 155.28 92.4 m
+ 155.28 96.72 l
+ S
+ n
+ 200.4 92.4 m
+ 200.4 96.72 l
+ S
+ n
+ 245.28 92.4 m
+ 245.28 96.72 l
+ S
+ n
+ 290.16 92.4 m
+ 290.16 96.72 l
+ S
+ n
+ 335.04 92.4 m
+ 335.04 96.72 l
+ S
+ n
+ 379.92 92.4 m
+ 379.92 96.72 l
+ S
+ n
+ 425.04 92.4 m
+ 425.04 96.72 l
+ S
+ n
+ 469.92 92.4 m
+ 469.92 96.72 l
+ S
+ n
+ 514.8 92.4 m
+ 514.8 96.72 l
+ S
+ n
+ 559.68 92.4 m
+ 559.68 96.72 l
+ S
+ n
+ 604.56 92.4 m
+ 604.56 96.72 l
+ S
+ n
+ 649.44 92.4 m
+ 649.44 96.72 l
+ S
+ n
+ 694.56 92.4 m
+ 694.56 96.72 l
+ S
+ n
+ 739.44 92.4 m
+ 739.44 96.72 l
+ S
+ n
+ 784.32 92.4 m
+ 784.32 96.72 l
+ S
+ 29.04 91.2 m
+ /N8 17.04 Tf
+ (0.9)
+ [9.49903 4.76191 9.49903 ] pdfxs
+ 43.2 146.4 m
+ (1) show
+ 29.04 201.6 m
+ (1.1)
+ [9.49903 4.76191 9.49903 ] pdfxs
+ 29.04 256.8 m
+ (1.2)
+ [9.49903 4.76191 9.49903 ] pdfxs
+ 29.04 312 m
+ (1.3)
+ [9.49903 4.76191 9.49903 ] pdfxs
+ 29.04 367.44 m
+ (1.4)
+ [9.49903 4.76191 9.49903 ] pdfxs
+ 29.04 422.64 m
+ (1.5)
+ [9.49903 4.76191 9.49903 ] pdfxs
+ 29.04 477.84 m
+ (1.6)
+ [9.49903 4.76191 9.49903 ] pdfxs
+ 29.04 533.04 m
+ (1.7)
+ [9.49903 4.76191 9.49903 ] pdfxs
+ 29.04 588.24 m
+ (1.8)
+ [9.49903 4.76191 9.49903 ] pdfxs
+ 82.08 90 m
+ /N8 [0 -14.16 14.16 0 0 0] Tf
+ (175.vpr)
+ [-7.91525 -7.91525 -7.91525 -3.97877 -7.12229 -7.91525 -4.75747 ] pdfys
+ 126.96 90 m
+ (197.parser-b)
+ [-7.92355 -7.92355 -7.92355 -3.98707 -7.92355 -7.92355 -4.76577 -7.13059 -7.92355 -4.76577 -4.76577 
+ -7.92355 ] pdfys
+ 171.84 90 m
+ (300.twolf)
+ [-7.86985 -7.86985 -7.86985 -3.93338 -3.93338 -10.2204 -7.86985 -3.14042 -3.93338 ] pdfys
+ 216.72 90.24 m
+ (bc)
+ [-7.95645 -7.16349 ] pdfys
+ 261.6 90.24 m
+ (ft)
+ [-3.83998 -3.83998 ] pdfys
+ 306.72 90 m
+ (analyzer)
+ [-7.93414 -7.93414 -7.93414 -3.20471 -7.14118 -7.14118 -7.93414 -4.77636 ] pdfys
+ 351.6 90 m
+ (llu-bench)
+ [-3.18721 -3.18721 -7.91664 -4.75886 -7.91664 -7.91664 -7.91664 -7.12368 -7.91664 ] pdfys
+ 396.48 90 m
+ (chomp)
+ [-7.12519 -7.91815 -7.91815 -11.8404 -7.91815 ] pdfys
+ 441.36 90 m
+ (fpgrowth)
+ [-3.92859 -7.86506 -7.86506 -4.70728 -7.86506 -10.2156 -3.92859 -7.86506 ] pdfys
+ 486.24 90 m
+ (espresso)
+ [-7.95204 -7.15908 -7.95204 -4.79426 -7.95204 -7.15908 -7.15908 -7.95204 ] pdfys
+ 531.12 90 m
+ (povray31)
+ [-7.94294 -7.94294 -7.14999 -4.78516 -7.94294 -7.14999 -7.94294 -7.94294 ] pdfys
+ 576.24 90 m
+ (bisort)
+ [-7.90273 -3.1733 -7.10978 -7.90273 -4.74496 -3.96626 ] pdfys
+ 621.12 90 m
+ (health)
+ [-7.88435 -7.88435 -7.88435 -3.15492 -3.94787 -7.88435 ] pdfys
+ 666 90 m
+ (mst)
+ [-11.7913 -7.0761 -3.93258 ] pdfys
+ 710.88 90 m
+ (perimeter)
+ [-7.89544 -7.89544 -4.73766 -3.16601 -11.8177 -7.89544 -3.95897 -7.89544 -4.73766 ] pdfys
+ 755.76 90 m
+ (tsp)
+ [-3.95997 -7.10349 -7.89645 ] pdfys
+ 26.64 205.44 m
+ /N10 [0 18.72 -18.72 0 0 0] Tf
+ (Runtime ratio \(smaller is faster\))
+ [13.4945 11.4165 11.4165 6.21233 5.18287 16.6209 10.387 5.28007 7.26093 10.387 6.21233 
+ 5.18287 11.4165 5.28007 6.21233 10.387 16.6209 10.387 5.18287 5.18287 10.387 7.26093 
+ 5.28007 5.18287 10.387 5.28007 6.21233 10.387 10.387 6.21233 10.387 7.26093 6.21233 
+ ] pdfys
+ n
+ 572.4 448.8 188.4 106.56 re
+ 1 1 1 sc
+ f
+ n
+ 572.16 448.8 188.64 106.8 re
+ 0 0 0 sc
+ S
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 572.4 531.84 21.36 23.52 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ n
+ 576.72 539.28 9.59998 9.59998 re
+ h
+ q
+ 0.599991 0.599991 1 sc
+ eofill
+ Q
+ S
+ Q
+ 590.4 538.8 m
+ /N8 15.84 Tf
+ (Selective PA Disabled)
+ [10.609 8.85063 3.56008 8.85063 7.96359 4.44711 3.56008 7.96359 8.85063 4.32002 10.609 
+ 10.609 4.32002 11.4801 3.56008 7.96359 8.85063 8.85063 3.56008 8.85063 8.85063 ] pdfxs
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 572.4 510.48 21.36 24.24 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ n
+ 576.72 517.92 9.59998 9.59998 re
+ h
+ q
+ 0.599991 0.199997 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ 590.4 517.44 m
+ (PoolFree Elim Disabled)
+ [10.6157 8.85733 8.85733 3.56677 9.72841 5.32489 8.85733 8.85733 4.32002 10.6157 3.56677 
+ 3.56677 13.2449 4.32002 11.4868 3.56677 7.97029 8.85733 8.85733 3.56677 8.85733 8.85733 
+ ] pdfxs
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 572.4 489.12 21.36 24.24 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ n
+ 576.72 496.56 9.59998 9.59998 re
+ h
+ q
+ 1 1 0.799988 sc
+ eofill
+ Q
+ S
+ Q
+ 590.4 496.08 m
+ (Bump Pointer Disabled)
+ [10.6131 8.85473 13.2423 8.85473 4.31993 10.6131 8.85473 3.56418 8.85473 4.45122 8.85473 
+ 5.3223 4.31993 11.4842 3.56418 7.9677 8.85473 8.85473 3.56418 8.85473 8.85473 ] pdfxs
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 572.4 467.76 21.36 24.24 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ n
+ 576.72 475.2 9.59998 9.59998 re
+ h
+ q
+ 0.799988 1 1 sc
+ eofill
+ Q
+ S
+ Q
+ 590.4 474.72 m
+ (Align Opt Disabled)
+ [10.6127 3.56377 3.56377 8.85432 8.85432 4.32001 12.3708 8.85432 4.4508 4.32001 11.4838 
+ 3.56377 7.96729 8.85432 8.85432 3.56377 8.85432 8.85432 ] pdfxs
+ q
+ 1 0 0 1 0.0132904 0 cm
+ n
+ 572.4 449.04 21.36 21.6 re
+ h
+ W
+ n
+ 0.959991 w
+ 0 J
+ n
+ 576.72 453.84 9.59998 9.60001 re
+ h
+ q
+ 0.399994 0 0.399994 sc
+ eofill
+ Q
+ S
+ Q
+ 590.4 453.36 m
+ (All Disabled \(Base PA\))
+ [10.6099 3.56098 3.56098 4.32002 11.481 3.56098 7.96449 8.85153 8.85153 3.56098 8.85153 
+ 8.85153 4.32002 5.3191 10.6099 8.85153 7.96449 8.85153 4.32002 10.6099 10.6099 5.3191 
+ ] pdfxs
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Trailer
+ %%DocumentProcessColors: Cyan Magenta Yellow Black
+ %%DocumentSuppliedResources:
+ %%+ font ArialMT
+ %%+ font Arial-BoldMT
+ %%+ procset (Adobe Acrobat - PDF operators) 1.2 0
+ %%+ procset (Adobe Acrobat - type operators) 1.2 0
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 2042 2416 1993 3 v 2164 2501 a Fn(Figur)o(e)f(11.)h
+ Fj(Optimization)i(contrib)o(utions)e(\(1.0)e(=)g(FullP)-6
+ b(A,)17 b(all)h(optzns\))2141 2636 y Fz(All)40 b(of)h(the)g
+ (optimizations)g(e)o(xcept)g(Selecti)n(v)o(eP)-7 b(A)40
+ b(contrib)o(ute)h(no-)2042 2719 y(ticeable)28 b(impro)o(v)o(ements)h
+ (to)f(at)g(least)f(one)i(program.)g(Selecti)n(v)o(eP)-7
+ b(A)27 b(pro-)2042 2802 y(vides)k(no)g(signi\002cant)f(speedup)i(b)o
+ (ut)e(does)h(not)g(hurt)g(performance)g(and)2042 2885
+ y(it)26 b(is)h(useful)h(because)g(it)f(can)h(impro)o(v)o(e)f(memory)h
+ (consumption)i(signi\002-)2042 2968 y(cantly)20 b(in)f(some)h(cases.)f
+ (The)g(poolfree)h(optimization)g(impro)o(v)o(es)g(175.vpr)m(,)2042
+ 3051 y(197.parser)o(-b,)g(espresso,)h(and)f(po)o(vray31.)h(The)f(b)o
+ (ump)h(pointer)f(optimiza-)2042 3134 y(tion)26 b(appears)i(to)e(be)h
+ (the)f(most)h(signi\002cant)g(of)f(the)h(three,)f(being)h(partic-)2042
+ 3217 y(ularly)g(v)n(aluable)h(to)f(175.vpr)m(,)h(300.tw)o(olf,)f(ft,)f
+ (analyzer)m(,)i(llu-bench,)f(and)2042 3300 y(se)n(v)o(eral)17
+ b(Olden)h(programs.)g(Close)f(inspection)h(of)g(175.vpr)g(is)f
+ (particularly)2042 3383 y(interesting:)22 b(BaseP)-7
+ b(A)22 b(is)g(not)h(f)o(aster)f(than)h(NoP)-7 b(A,)22
+ b(b)o(ut)g(a)g(combination)i(of)2042 3466 y(poolfree)17
+ b(elimination)f(and)g(the)h(b)o(ump)f(pointer)g(optimization)h(reduces)
+ g(the)2042 3549 y(runtime)28 b(of)f(the)h(program)h(to)f(95.7\045)g(of)
+ g(NoP)-7 b(A)27 b(\(Selecti)n(v)o(eP)-7 b(A)27 b(reduces)2042
+ 3632 y(it)d(further)i(to)f(94.6\045\).)h(Finally)-5 b(,)25
+ b(se)n(v)o(eral)g(programs)i(bene\002ted)f(from)f(the)2042
+ 3715 y(alignment)19 b(optimization,)g(particularly)h(ft,)e(chomp,)h
+ (health)h(and)f(tsp.)2141 3798 y(The)29 b(speedup)h(potential)e(of)g
+ (these)h(simple)f(pool)h(optimizations)g(are)2042 3881
+ y(particularly)18 b(notable)h(because)g(the)o(y)f(are)g(all)f(v)o(ery)i
+ (simple)f(optimizations,)2042 3964 y(b)o(ut)h(can)i(only)f(be)h
+ (performed)f(only)h(once)g(the)f(heap)g(has)h(been)f(se)o(gre)o(gated)
+ 2042 4047 y(into)f(pools.)2042 4234 y FA(10.)90 b(Related)22
+ b(W)-7 b(ork)2042 4350 y Fz(The)26 b(primary)g(goal)g(of)g(the)g(pool)g
+ (allocation)h(transformation)f(is)g(to)g(gi)n(v)o(e)2042
+ 4433 y(the)21 b(compiler)h(some)f(control)h(o)o(v)o(er)g(the)f(layout)h
+ (of)f(data)g(structures)h(in)f(the)2042 4516 y(heap.)j(W)-6
+ b(e)23 b(achie)n(v)o(e)i(this)e(using)h(a)g(conte)o(xt-sensiti)n(v)o(e)
+ h(points-to)f(graph)g(to)2042 4599 y(distinguish)k(data)g(structure)g
+ (instances)h(and)f(object)g(lifetimes.)f(W)-6 b(e)27
+ b(\002rst)2042 4682 y(contrast)32 b(this)g(w)o(ork)h(with)f(pre)n
+ (vious)i(approaches)g(for)e(in\003uencing)h(the)2042
+ 4765 y(layout)18 b(of)f(heap)h(objects,)g(and)g(then)f(with)g(pre)n
+ (vious)i(w)o(ork)f(on)g(partitioning)2042 4848 y(the)h(heap)h(for)e
+ (automatic)i(\(re)o(gion-based\))g(memory)g(management.)2141
+ 4932 y(Chilimbi)42 b(et)h(al.)f([12])h(describe)g(a)f(semi-automatic)h
+ (tool)g(called)2042 5015 y Fs(ccmorph)22 b Fz(that)f(reor)o(ganizes)h
+ (the)f(layout)h(of)f(homogeneous)j(trees)d(at)g(run-)2042
+ 5098 y(time)29 b(to)g(impro)o(v)o(e)h(locality)-5 b(.)29
+ b(It)g(relies)g(on)h(programmer)g(annotations)h(to)2042
+ 5181 y(identify)j(the)f(root)h(of)g(a)f(tree)h(and)g(to)g(indicate)g
+ (the)f(reor)o(ganization)h(is)2042 5264 y(safe.)28 b(W)-6
+ b(e)29 b(automatically)g(identify)g(and)g(se)o(gre)o(gate)g(instances)h
+ (of)e(man)o(y)2042 5347 y(kinds)19 b(of)g(logical)f(data)h(structures,)
+ g(b)o(ut)f(do)h(not)g(yet)f(identify)h(when)g(a)g Fy(run-)2042
+ 5430 y(time)e Fz(reor)o(ganization)h(w)o(ould)h(be)f(safe.)f(The)o(y)h
+ (also)g(describe)h(another)f(tool,)p eop end
+ %%Page: 13 13
+ TeXDict begin 13 12 bop -150 66 a Fs(ccmalloc)p Fz(,)30
+ b(which)g(is)e(a)h Fs(malloc)h Fz(replacement)g(that)f(accepts)g(hints)
+ g(to)-150 149 y(allocate)23 b(one)g(object)h(near)f(another)g(object.)g
+ (These)g(hints)g(only)g(pro)o(vides)-150 232 y(local)c(information)h
+ (for)f(an)g(object)g(pair)g(and)h(not)f(an)o(y)h(global)g(information)
+ -150 315 y(about)g(entire)f(data)g(structures.)-50 399
+ y(Hirzel)h(et)g(al.)g([28)q(])g(describe)i(a)e(technique)i(to)f(impro)o
+ (v)o(e)g(the)g(ef)n(fecti)n(v)o(e-)-150 482 y(ness)g(of)h(Garbage)f
+ (Collection)h(by)f(partitioning)h(heap)f(objects)h(according)-150
+ 565 y(to)28 b(their)f(connecti)n(vity)i(properties.)f(Unlik)o(e)g(our)g
+ (w)o(ork,)g(their)f(partitions)-150 648 y(are)c(not)h(se)o(gre)o(gated)
+ g(on)g(the)f(runtime)h(heap,)g(are)f(not)h(directly)f(related)g(to)-150
+ 731 y(distinct)h(data)g(structures,)g(and)h(the)f(graph)h(of)g
+ (partitions)f(is)f(restricted)h(to)-150 814 y(be)19 b(a)g(D)m(A)m(G,)f
+ (which)h(pre)n(v)o(ents)h(\002ne)f(grained)g(partitioning)g(of)g
+ (mutually)h(re-)-150 897 y(cursi)n(v)o(e)f(structures)h(\(lik)o(e)f
+ (graphs\).)-50 980 y(Se)n(v)o(eral)i(proposed)j(techniques)f(aim)e(to)h
+ (impro)o(v)o(e)h(storage)f(allocation)-150 1063 y(or)15
+ b(GC)g(performance)i(by)e(relating)h(objects)f(based)h(on)g(their)f
+ (predicted)h(life-)-150 1146 y(times)21 b([26)q(,)g(18)q(,)g(4)q(,)g
+ (15,)h(13,)g(41].)f(These)h(techniques)i(use)e(heuristics)g(such)-150
+ 1229 y(as)17 b(allocation)h(site,)e(call)h(stack,)g(or)g(object)g
+ (size,)g(combined)h(with)f(pro\002ling)-150 1312 y(information,)27
+ b(to)f(predict)h(lifetime)f(properties)h(approximately)-5
+ b(.)27 b(In)g(con-)-150 1395 y(trast,)22 b(our)g(approach)j(uses)d(a)h
+ (more)g(rigorous)g(analysis)g(to)f(group)i(objects)-150
+ 1478 y(both)c(by)f(structural)g(relationships)g(and)h(statically)e
+ (deri)n(v)o(ed)i(lifetimes.)-50 1561 y(Other)46 b(authors)i(ha)o(v)o(e)
+ f(de)n(v)o(eloped)i(techniques)f(\(usually)g(pro\002le-)-150
+ 1644 y(based\))18 b(to)f(reor)o(ganize)g(\002elds)g(within)g(a)g
+ (single)g(structure)g(or)g(place)h(objects)-150 1727
+ y(near)h(each)h(other)f(to)g(impro)o(v)o(e)h(locality)f(of)g(reference)
+ g([23)q(,)f(9)q(,)g(41)q(,)g(11)q(,)g(29)q(].)-150 1810
+ y(These)23 b(placement)h(decisions)g(are)e(orthogonal)j(to)e(the)g
+ (choices)g(made)h(by)-150 1893 y(Automatic)d(Pool)g(Allocation,)f(and)i
+ (could)f(therefore)g(be)g(combined)i(with)-150 1976 y(our)c
+ (transformation.)h(This)e(an)h(important)h(direction)f(for)g(future)g
+ (w)o(ork.)-50 2059 y(There)f(has)g(been)h(signi\002cant)f(w)o(ork)h(on)
+ f(runtime)g(libraries)g(for)g(re)o(gion-)-150 2142 y(based)39
+ b(memory)g(management)g([5],)f(and)g(on)h(language)g(mechanisms)-150
+ 2225 y(for)32 b(manual)h(re)o(gion-based)h(memory)f(management)h(as)f
+ (an)f(alternati)n(v)o(e)-150 2308 y(to)42 b(garbage)g(collection,)g
+ (e.g.,)f(Real-time)g(Ja)o(v)n(a)h([7)q(],)f(RC)g([21],)g(Cy-)-150
+ 2391 y(clone)17 b([30,)f(22)q(],)f(and)i(others)f([21)q(,)g(17,)g(8].)g
+ (Compared)h(with)f(our)g(approach,)-150 2474 y(these)k(library-)f(or)h
+ (language-based)i(techniques)f(are)f(much)g(easier)g(to)g(im-)-150
+ 2557 y(plement,)26 b(b)o(ut)f(require)i(signi\002cant)f(manual)g(ef)n
+ (fort)g(to)f(use.)h(In)g(addition,)-150 2640 y(although)d(the)e(re)o
+ (gion-based)i(libraries)e(and)h(languages)h(e)o(xpose)f(the)g(rela-)
+ -150 2723 y(tionship)i(between)h(objects)f(and)h(re)o(gions)f(to)g(the)
+ g(compiler)m(,)g(the)o(y)g(do)g(not)-150 2806 y(e)o(xpose)j(an)o(y)f
+ (notion)h(of)e(higher)o(-le)n(v)o(el)h(data)g(structures)g(or)g(ho)n(w)
+ h(the)o(y)f(re-)-150 2889 y(late)18 b(to)g(objects)h(and)g(re)o(gions.)
+ f(Therefore,)g(the)h(compiler)f(does)h(not)g(obtain)-150
+ 2972 y(information)25 b(about)g(data)g(structures)g(and)g(tra)o(v)o
+ (ersals)f(that)g(could)i(enable)-150 3055 y(optimizations)20
+ b(on)f(logical)g(data)g(structures.)-50 3138 y(There)k(is)f(a)h(rich)g
+ (body)i(of)e(w)o(ork)h(on)f Fy(automatic)h Fz(re)o(gion)f(inference)h
+ (as)-150 3221 y(a)e(technique)i(for)e(memory)h(management,)g(for)f
+ (both)h(functional)g([45,)f(44)q(,)-150 3304 y(1,)g(24)q(])f(and)i
+ (object-oriented)g(languages)h([14)q(,)d(10)q(].)h(Unlik)o(e)g(this)g
+ (body)h(of)-150 3387 y(our)18 b(w)o(ork,)g(our)g(primary)g(goal)g(is)f
+ (to)h(se)o(gre)o(gate)g(and)g(control)g(the)g(layout)g(of)-150
+ 3470 y(data)d(structures)h(in)e(the)i(heap)f(for)g(better)g
+ (performance)h(and)g(to)f(enable)h(sub-)-150 3553 y(sequent)27
+ b(compiler)f(techniques)g(that)g(e)o(xploit)g(kno)n(wledge)h(of)e
+ (these)h(lay-)-150 3636 y(outs.)d(W)-6 b(e)23 b(describe)g(se)n(v)o
+ (eral)h(optimizations)g(that)e(e)o(xploit)i(data)f(structure)-150
+ 3719 y(pools,)i(and)g(e)o(xplore)g(the)g(performance)h(implications)f
+ (of)f(data)h(structure)-150 3802 y(se)o(gre)o(gation)18
+ b(on)h(program)g(performance)g(in)f(some)g(detail.)f(There)h(are)g
+ (also)-150 3885 y(some)25 b(k)o(e)o(y)g(technical)g(dif)n(ferences)h
+ (between)f(this)f(prior)h(w)o(ork)g(and)g(ours.)-150
+ 3968 y(First,)18 b(all)g(these)i(pre)n(vious)g(techniques)g(e)o(xcept)g
+ (the)f(w)o(ork)h(of)f(Cherem)h(and)-150 4051 y(Rugina)k([10])f(are)h
+ (based)g(on)f(type)h(inference)g(with)f(a)g(re)o(gion-based)i(type)-150
+ 4134 y(system.)i(It)g(does)h(not)f(appear)h(straightforw)o(ard)g(to)f
+ (e)o(xtend)i(the)e(type)h(in-)-150 4218 y(ference)19
+ b(approaches)h(to)f(w)o(ork)g(for)f(weakly-typed)i(languages)g(lik)o(e)
+ f(C)f(and)-150 4301 y(C++,)28 b(which)h(can)g(contain)g(pointer)g
+ (casts,)g(v)n(arar)o(gs)f(functions,)i(unions,)-150 4384
+ y(etc.,)23 b(on)h(which)f(type)h(information)g(is)f(dif)n(\002cult)g
+ (to)g(propagate)i(statically)-5 b(.)-150 4467 y(In)23
+ b(contrast,)g(both)g(our)g(underlying)i(pointer)e(analysis)g(and)h(our)
+ f(transfor)o(-)-150 4550 y(mation)29 b(algorithm)h(correctly)f(handle)h
+ (all)e(the)h(comple)o(x)h(features)g(of)f(C)-150 4633
+ y(and)20 b(C++,)g(by)g(distinguishing)h(objects)f(with)f(kno)n(wn)i
+ (and)f(unkno)n(wn)i(type)-150 4716 y(\(in)g(the)h(points-to)g(graph\))g
+ (and)g(by)g(using)g(a)g(conserv)n(ati)n(v)o(e)h(and)f(v)o(ery)g(ef)n
+ (\002-)-150 4799 y(cient)h(graph)g(mer)o(ging)h(technique)g(\(the)f
+ (same)g(as)f(in)h(DSA\))f(to)h(deal)g(with)-150 4882
+ y(potentially)e(type-unsafe)g(uses)g(of)f(pointers)h(during)h(the)e
+ (transformation.)-150 4965 y(Second,)d(using)h(a)f(pointer)g(analysis)h
+ (as)e(the)h(basis)h(for)e(our)i(transformation)-150 5048
+ y(enables)f(additional)g(optimizations)g(by)f(e)o(xploiting)h(the)f(e)o
+ (xplicit)g(relation-)-150 5131 y(ship)24 b(between)g(a)f(points-to)h
+ (graph)g(and)g(pools.)g(Finally)-5 b(,)22 b(the)i(use)g(of)f(type)-150
+ 5214 y(inference)f(and)f(a)g(rich)g(type-system)h(is)f(not)g(well)g
+ (suited)g(for)g(modern)h(op-)-150 5297 y(timizing)c(compilers,)h(which)
+ g(are)f(usually)h(based)g(on)g(a)f(mid-le)n(v)o(el)h(or)f(lo)n(w-)-150
+ 5380 y(le)n(v)o(el)i(internal)g(representation)h(supporting)g(multiple)
+ e(source)i(languages.)2042 66 y(Our)28 b(approach)i(is)d
+ (speci\002cally)i(designed)g(for)f(use)h(in)f(such)h(compilers,)2042
+ 149 y(and)20 b(relies)e(only)i(a)f(simple,)g(mid-le)n(v)o(el)g
+ (intermediate)g(representation)h(and)2042 232 y(pointer)f(analysis.)
+ 2141 315 y(The)25 b(w)o(ork)h(of)f(Cherem)h(and)f(Rugina)h([10)q(])e(w)
+ o(as)i(performed)g(concur)o(-)2042 399 y(rently)17 b(with)g(ours)h(and)
+ g(our)f(approaches)j(are)d(technically)h(similar)e(in)i(some)2042
+ 482 y(k)o(e)o(y)e(w)o(ays.)g(The)o(y)f(describe)i(a)e(re)o(gion)h
+ (inference)g(approach)h(for)f(Ja)o(v)n(a)f(based)2042
+ 565 y(on)20 b(a)g(\003o)n(w-insensiti)n(v)o(e,)f(conte)o(xt-sensiti)n
+ (v)o(e)i(points-to)f(analysis.)g(Because)2042 648 y(their)30
+ b(primary)h(focus)h(is)e(automatic)h(memory)h(management,)g(the)o(y)f
+ (are)2042 731 y(much)d(more)h(aggressi)n(v)o(e)g(about)f(computing)h
+ (re)o(gion)g(lifetimes,)e(includ-)2042 814 y(ing)d(loop-carried)g(re)o
+ (gions.)g(Our)g(re)o(gions)g Fy(can)g Fz(be)g(placed)h(as)e(\003e)o
+ (xibly)h(as)2042 897 y(theirs,)32 b(b)o(ut)g(we)g(use)h(a)f(simpler)h
+ (placement)g(analysis.)g(Lik)o(e)f(the)h(type-)2042 980
+ y(inference)c(approaches,)h(ho)n(we)n(v)o(er)m(,)f(their)f(w)o(ork)h
+ (also)f(does)i(not)e(support)2042 1063 y(weakly)g(typed)h(languages)h
+ (lik)o(e)e(C.)g(Although)h(the)f(underlying)i(pointer)2042
+ 1146 y(analysis)d(could)g(be)f(e)o(xtended)i(to)e(do)h(so)g(\(using)f
+ (our)h(approach,)h(for)e(e)o(x-)2042 1229 y(ample\),)g(we)g(belie)n(v)o
+ (e)g(the)g(transformation)h(w)o(ould)g(be)f(more)h(dif)n(\002cult)e(to)
+ 2042 1312 y(e)o(xtend.)k(Furthermore,)f(the)o(y)h(too)g(focus)g(on)g
+ (automatic)g(memory)h(man-)2042 1395 y(agement,)23 b(and)h(do)f(not)g
+ (e)o(xplore)h(the)f(impact)g(of)g(their)f(w)o(ork)i(on)f(memory)2042
+ 1478 y(hierarchy)j(performance)h(or)f(consider)h(other)f(optimizations)
+ h(that)e(could)2042 1561 y(e)o(xploit)h(their)g(re)o(gion)h
+ (information.)f(W)-6 b(e)25 b(e)o(xpect)i(that)f(our)h(optimization)
+ 2042 1644 y(techniques)18 b(could)g(be)f(fruitfully)g(combined)h(with)f
+ (their)g(re)o(gion)g(inference)2042 1727 y(algorithm)i(for)g(Ja)o(v)n
+ (a)g(programs.)2141 1810 y(There)e(is)f(a)h(wide)f(range)i(of)e(w)o
+ (ork)h(on)g(techniques)h(for)f(stack)g(allocation)2042
+ 1893 y(of)k(heap)h(objects)g(as)f(well)g(as)g(techniques)i(for)e
+ (static)g(garbage)h(collection,)2042 1976 y(both)28 b(of)g(which)g(are)
+ g(based)h(on)f(analyzing)h(the)f(lifetimes)f(of)h(objects)g(in)2042
+ 2059 y(programs)e(\(e.g.,)f(see)h([6,)f(42)q(,)g(31)q(])g(and)h(the)g
+ (references)g(therein\).)g(These)2042 2142 y(techniques)17
+ b(do)g(not)f(attempt)g(to)g(analyze)h(or)f(control)h(the)f(layout)h(of)
+ f(logical)2042 2225 y(data)29 b(structures)h(in)f(the)g(heap)h
+ Fy(per)g(se)p Fz(,)f(and)h(are)f(lar)o(gely)g(orthogonal)i(to)2042
+ 2308 y(our)23 b(w)o(ork.)g(A)f(minor)h(e)o(xception)h(is)e(that)g(our)h
+ (optimization)h(to)e(eliminate)2042 2391 y Fs(poolfree)31
+ b Fz(for)e(a)g(pool)h(\(when)f(there)h(are)f(no)g(interv)o(ening)i
+ (allocations)2042 2474 y(before)24 b(the)f(subsequent)i
+ Fs(pooldestroy)p Fz(\))h(essentially)d(replaces)h(e)o(xplicit)2042
+ 2557 y(deallocation)c(with)f(static)f(reclamation)i(of)f(memory)h(in)f
+ (the)g(pool.)h(This)e(is)2042 2640 y(the)g(in)m(v)o(erse)g(of)g(\(and)g
+ (much)h(more)f(limited)f(than\))h(the)g(w)o(ork)g(on)h(static)e(GC,)
+ 2042 2723 y(which)i(aims)g(to)g(replace)g(or)g(optimize)g(runtime)g
+ (GC.)2141 2806 y(Finally)-5 b(,)18 b(in)g(an)h(early)f(w)o(orkshop)i
+ (paper)f([33)q(],)e(we)h(proposed)i(the)f(basic)2042
+ 2889 y(idea)d(of)g(Automatic)h(Pool)e(Allocation.)h(That)g(w)o(ork)h
+ (did)f(not)h(consider)g(ho)n(w)2042 2972 y(to)29 b(handle)g(the)g(k)o
+ (e)o(y)h(dif)n(\002cult)f(cases)g(for)g(this)f(transformation,)i
+ (namely)-5 b(,)2042 3055 y(function)18 b(pointers)g(and)g(ef)n
+ (\002cient)f(handling)h(of)f(recursion.)h(It)f(relied)g(on)h(an)2042
+ 3138 y(early)-5 b(,)16 b(non-scalable)h(v)o(ersion)g(of)e(DSA)h
+ (\(which)g(did)g(not)g(support)h(practical)2042 3221
+ y(handling)33 b(of)f(non-type-safe)h(data)f(structures\),)g(did)g(not)g
+ (describe)h(an)o(y)2042 3304 y(optimizations)27 b(to)g(e)o(xploit)g
+ (pool)g(allocation,)g(and)h(did)f(not)g(e)n(v)n(aluate)h(the)2042
+ 3387 y(performance)j(impact)e(of)h(pool)g(allocation.)g(The)g(current)g
+ (algorithm)f(is)2042 3470 y(general,)19 b(practical)g(and)h(ef)n
+ (\002cient,)e(and)h(supersedes)i(the)e(pre)n(vious)h(w)o(ork.)2042
+ 3736 y FA(11.)90 b(Conclusions)21 b(and)h(Futur)n(e)g(W)-7
+ b(ork)2042 3852 y Fz(The)18 b(primary)h(contrib)o(ution)h(of)e(this)h
+ (paper)g(is)f(a)h(practical,)f(ef)n(\002cient)h(com-)2042
+ 3935 y(piler)g(algorithm)h(to)f(se)o(gre)o(gate)h(distinct)f(instances)
+ h(of)g(logical)f(data)h(struc-)2042 4018 y(tures)28 b(into)g(separate)g
+ (pools)h(in)e(the)h(heap.)h(Our)e(implementation)i(of)f(the)2042
+ 4101 y(algorithm)j(applies)f(to)h(the)f(full)g(generality)h(of)g(C)f
+ (and)h(C++)f(programs)2042 4184 y(and)24 b(performs)g(se)n(v)o(eral)g
+ (additional)g(optimizations)h(that)e(tak)o(e)h(adv)n(antage)2042
+ 4267 y(of)i(pool)h(allocation.)f(Our)h(results)f(sho)n(w)h(that)f(for)g
+ (man)o(y)h(programs,)g(the)2042 4350 y(transformation)e(achie)n(v)o(es)
+ g(the)f(major)h(goal)f(stated)h(in)f(the)g(Introduction,)2042
+ 4433 y(namely)-5 b(,)18 b(that)f(it)f(can)i(impro)o(v)o(e)g(program)g
+ (performance,)g(sometimes)g(quite)2042 4516 y(substantially)-5
+ b(.)16 b(The)f(complete)i(implementation)f(and)h(most)e(of)h(our)g
+ (bench-)2042 4599 y(marks)j(are)g(publicly)h(a)o(v)n(ailable)f(at)f
+ Fs(llvm.cs.uiuc.edu)p Fz(.)2141 4682 y(W)-6 b(e)33 b(belie)n(v)o(e)i
+ (that)e(the)h(combination)h(of)e(Data)h(Structure)f(Analysis)2042
+ 4765 y(and)g(Automatic)f(Pool)g(Allocation)h(together)g(pro)o(vide)g(a)
+ f(ne)n(w)h(founda-)2042 4848 y(tion)h(for)f(analyzing)j(and)e
+ (transforming)h(pointer)o(-intensi)n(v)o(e)f(programs,)2042
+ 4932 y(not)21 b(in)g(terms)g(of)g(indi)n(vidual)g(memory)h(references)g
+ (or)f(data)g(elements)g(b)o(ut)2042 5015 y(rather)f Fy(in)f(terms)h(of)
+ g(how)g(suc)o(h)h(pr)m(o)o(gr)o(ams)g(cr)m(eate)f(and)h(use)f(entir)m
+ (e)g(lo)o(gical)2042 5098 y(data)e(structur)m(es)p Fz(.)h(W)-6
+ b(e)17 b(term)g(this)h(a)g(\223macroscopic\224)h(approach)h(to)d
+ (pointer)o(-)2042 5181 y(intensi)n(v)o(e)27 b(data)h(structures.)f(The)
+ g(broad)g(goal)h(of)f(our)g(ongoing)i(w)o(ork)e(is)2042
+ 5264 y(to)32 b(continue)h(in)m(v)o(estigating)f(no)o(v)o(el)h
+ (macroscopic)g(techniques)h(for)e(pro-)2042 5347 y(gram)c
+ (optimization,)g(program)h(monitoring,)g(memory)f(safety)-5
+ b(,)28 b(and)h(au-)2042 5430 y(tomatic)f(memory)h(management.)h(The)e
+ (\002rst)f(tw)o(o)h(major)h(e)o(xamples)g(de-)p eop end
+ %%Page: 14 14
+ TeXDict begin 14 13 bop -150 66 a Fz(scribed)19 b(brie\003y)f(in)g
+ (Section)g(7)g(illustrate)g(the)g(potential)g(po)n(wer)h(of)f(this)g
+ (ap-)-150 149 y(proach)i(for)f(enabling)h(no)o(v)o(el)f(solutions)h(to)
+ f(dif)n(\002cult)f(compiler)h(problems.)-150 394 y FA(Ackno)o
+ (wledgments)-150 511 y Fz(This)42 b(w)o(ork)h(has)f(been)h(supported)h
+ (in)e(part)g(by)h(an)g(NSF)e(CAREER)-150 594 y(A)-7 b(w)o(ard)28
+ b(\(EIA-00-93426\),)g(the)g(NSF)e(Ne)o(xt)h(Generation)i(Softw)o(are)e
+ (Pro-)-150 677 y(gram)h(\(EIA-01-03756\),)g(the)g(MARCO)f(F)o(ocus)g
+ (Research)h(Center)g(Pro-)-150 760 y(gram)i(through)h(GSRC,)d(and)i(by)
+ g(an)g(Intel)f(Graduate)h(Fello)n(wship.)f(The)-150 843
+ y(authors)d(w)o(ould)g(lik)o(e)g(to)f(thank)h(John)g(Criswell)e(for)i
+ (his)f(assistance)h(with)-150 926 y(Linux)j(performance)h(monitoring)f
+ (counters)h(and)f(with)f(se)n(v)o(eral)h(bench-)-150
+ 1009 y(marks,)e(and)g(Sumant)g(K)m(o)n(wshik)h(for)f(his)g(contrib)o
+ (utions)g(to)g(parts)f(of)h(the)-150 1092 y(implementation.)j(W)-6
+ b(e)30 b(are)f(also)h(grateful)g(to)g(Shengnan)h(Cong)f(for)g(her)-150
+ 1175 y(assistance)23 b(with)g(the)g(fpgro)n(wth)g(program,)g(the)g
+ (members)h(of)e(the)h(LL)-7 b(VM)-150 1258 y(group)30
+ b(for)e(their)g(comments)i(and)f(suggestions)h(on)f(the)g(paper)m(,)g
+ (and)g(the)-150 1341 y(anon)o(ymous)21 b(re)n(vie)n(wers)e(for)g(their)
+ g(v)n(aluable)h(feedback.)-150 1586 y FA(Refer)n(ences)-117
+ 1694 y Fj([1])30 b(A.)d(Aik)o(en,)h(M.)f(F)t(\250)-26
+ b(ahndrich,)30 b(and)e(R.)g(Le)n(vien.)59 b(Better)30
+ b(static)g(memory)-10 1768 y(management:)j(Impro)o(ving)g(re)o
+ (gion-based)h(analysis)f(of)e(higher)o(-order)-10 1843
+ y(languages.)26 b(In)17 b Fa(PLDI)p Fj(,)f(pages)h(174\226185,)h(June)f
+ (1995.)-117 1934 y([2])30 b(T)-5 b(.)36 b(Austin,)i(et)g(al.)90
+ b(The)37 b(Pointer)o(-intensi)n(v)o(e)42 b(Benchmark)d(Suite.)-10
+ 2009 y Fg(www.cs.wisc.edu/~austin/)q(ptr-)q(dis)q(t.ht)q(ml)p
+ Fj(,)22 b(Sept)c(1995.)-117 2100 y([3])30 b(A.)22 b(A)-6
+ b(yers,)23 b(S.)g(de)h(Jong,)f(J.)f(Pe)o(yton,)j(and)f(R.)f(Schooler)l
+ (.)46 b(Scalable)26 b(cross-)-10 2175 y(module)18 b(optimization.)27
+ b(In)17 b Fa(PLDI)p Fj(,)f(Montreal,)i(June)g(1998.)-117
+ 2267 y([4])30 b(D.)h(A.)h(Barrett)i(and)f(B.)f(G.)g(Zorn.)73
+ b(Using)32 b(lifetime)j(predictors)g(to)-10 2341 y(impro)o(v)o(e)21
+ b(memory)f(allocation)k(performance.)36 b(In)20 b Fa(PLDI)p
+ Fj(,)f(pages)i(187\226196,)-10 2416 y(Alb)o(uquerque,)d(Ne)n(w)g(Me)o
+ (xixo,)g(June)f(1993.)-117 2507 y([5])30 b(E.)16 b(D.)g(Ber)o(ger)m(,)j
+ (B.)d(G.)h(Zorn,)f(and)i(K.)f(S.)f(McKinle)o(y)l(.)27
+ b(Reconsidering)20 b(custom)-10 2582 y(memory)d(allocation.)27
+ b(In)17 b Fa(OOPSLA)p Fj(,)e(Seattle,)k(W)-5 b(ashington,)18
+ b(No)o(v)l(.)f(2002.)-117 2673 y([6])30 b(B.)22 b(Blanchet.)45
+ b(Escape)23 b(Analysis)h(for)f(Ja)o(v)n(a\(TM\):)g(Theory)g(and)h
+ (Practice.)-10 2748 y Fa(T)o(OPLAS)p Fj(,)15 b(25\(6\):713\226775,)k
+ (No)o(v)e(2003.)-117 2839 y([7])30 b(G.)24 b(Bollella)29
+ b(and)d(J.)f(Gosling.)52 b(The)26 b(real-time)i(speci\002cation)h(for)c
+ (Ja)o(v)n(a.)-10 2914 y Fa(Computer)p Fj(,)18 b(33\(6\):47\22654,)g
+ (2000.)-117 3005 y([8])30 b(C.)23 b(Bo)o(yapati,)i(A.)e(Salcianu,)i(W)
+ -6 b(.)22 b(Beebee,)j(and)f(M.)f(Rinard.)45 b(Ownership)-10
+ 3080 y(types)17 b(for)g(safe)g(re)o(gion-based)j(memory)d(management)h
+ (in)f(real-time)j(ja)o(v)n(a.)k(In)-10 3155 y Fa(PLDI)p
+ Fj(,)15 b(2003.)-117 3246 y([9])30 b(B.)17 b(Calder)m(,)j(K.)d
+ (Chandra,)j(S.)d(John,)h(and)g(T)-5 b(.)17 b(Austin.)29
+ b(Cache-conscious)21 b(data)-10 3321 y(placement.)38
+ b(In)20 b Fa(Pr)m(oc.)g(ASPLOS-VIII)p Fj(,)f(pages)j(139\226149,)f(San)
+ g(Jose,)f(USA,)-10 3396 y(1998.)-150 3487 y([10])30 b(S.)21
+ b(Cherem)i(and)f(R.)g(Rugina.)41 b(Re)o(gion)24 b(analysis)f(and)g
+ (transformation)h(for)-10 3562 y(ja)o(v)n(a)e(programs.)36
+ b(In)20 b Fa(2004)h(Int'l)h(Symposium)g(On)e(Memory)i(Mana)o(g)o(ement)
+ p Fj(,)-10 3636 y(V)-7 b(ancouv)o(er)m(,)18 b(Canada,)h(Oct.)e(2004.)
+ -150 3728 y([11])30 b(T)-5 b(.)24 b(M.)h(Chilimbi,)i(B.)e(Da)o(vidson,)
+ h(and)g(J.)f(R.)g(Larus.)51 b(Cache-conscious)-10 3802
+ y(structure)19 b(de\002nition.)26 b(In)17 b Fa(PLDI'99)p
+ Fj(,)f(pages)i(13\22624.)f(A)m(CM)g(Press,)g(1999.)-150
+ 3894 y([12])30 b(T)-5 b(.)13 b(M.)h(Chilimbi,)i(M.)e(D.)g(Hill,)i(and)f
+ (J.)f(R.)g(Larus.)19 b(Cache-conscious)f(structure)-10
+ 3968 y(layout.)25 b(In)17 b Fa(PLDI'99)p Fj(,)g(pages)g(1\22612.)g(A)m
+ (CM)h(Press,)e(1999.)-150 4060 y([13])30 b(T)-5 b(.)15
+ b(M.)g(Chilimbi)j(and)e(J.)g(R.)f(Larus.)22 b(Using)16
+ b(generational)k(garbage)e(collection)-10 4134 y(to)27
+ b(implement)i(cache-conscious)j(data)c(placement.)60
+ b Fa(A)n(CM)27 b(SIGPLAN)-10 4209 y(Notices)p Fj(,)18
+ b(34\(3\):37\22648,)h(1999.)-150 4301 y([14])30 b(W)-6
+ b(.-N.)16 b(Chin,)j(F)-5 b(.)17 b(Craciun,)j(S.)e(Qin,)g(and)g(M.)g
+ (Rinard.)29 b(Re)o(gion)20 b(inference)h(for)-10 4375
+ y(an)c(object-oriented)22 b(language.)k(In)17 b Fa(PLDI)p
+ Fj(,)f(W)-5 b(ashington,)18 b(DC,)e(June)h(2004.)-150
+ 4467 y([15])30 b(R.)22 b(Courts.)42 b(Impro)o(ving)23
+ b(locality)j(of)c(reference)j(in)e(a)g(garbage-collecting)-10
+ 4541 y(memory)17 b(management)i(system.)24 b Fa(CA)n(CM)p
+ Fj(,)16 b(31\(9\):1128\2261138,)k(1988.)-150 4633 y([16])30
+ b(M.)20 b(Das.)36 b(Uni\002cation-based)25 b(pointer)e(analysis)f(with)
+ g(directional)j(assign-)-10 4707 y(ments.)f(In)17 b Fa(PLDI)p
+ Fj(,)f(pages)h(35\22646,)h(2000.)-150 4799 y([17])30
+ b(R.)25 b(DeLine)i(and)f(M.)f(F)t(\250)-26 b(ahndrich.)54
+ b(Enforcing)27 b(high-le)n(v)o(el)i(protocols)f(in)-10
+ 4873 y(lo)n(w-le)n(v)o(el)20 b(softw)o(are.)25 b(In)17
+ b Fa(PLDI)p Fj(,)f(Sno)n(wbird,)i(UT)-5 b(,)16 b(June)h(2001.)-150
+ 4965 y([18])30 b(A.)e(Demers,)h(M.)g(W)-5 b(eiser)m(,)29
+ b(B.)g(Hayes,)h(H.)e(Boehm,)h(D.)g(Bobro)n(w)l(,)g(and)-10
+ 5039 y(S.)f(Shenk)o(er)l(.)64 b(Combining)31 b(generational)h(and)e
+ (conserv)n(ati)n(v)o(e)j(garbage)-10 5114 y(collection:)26
+ b(frame)n(w)o(ork)d(and)g(implementations.)42 b(In)22
+ b Fa(Pr)m(oc.)f(A)n(CM)h(POPL)p Fj(,)-10 5189 y(pages)c(261\226269,)f
+ (1990.)-150 5280 y([19])30 b(D.)21 b(Dhurjati,)j(S.)d(K)n(o)n(wshik,)h
+ (V)-9 b(.)22 b(Adv)o(e,)g(and)h(C.)f(Lattner)l(.)42 b(Memory)23
+ b(safety)-10 5355 y(without)e(garbage)g(collection)i(for)c(embedded)i
+ (applications.)36 b Fa(T)l(r)o(ansactions)-10 5430 y(on)17
+ b(Embedded)h(Computing)h(Systems)p Fj(,)e(4\(1\):73\226111,)i(Feb)m(.)e
+ (2005.)2042 66 y([20])29 b(M.)18 b(F)t(\250)-26 b(ahndrich,)21
+ b(J.)d(Rehof,)h(and)g(M.)f(Das.)29 b(Scalable)22 b(conte)o(xt-sensiti)n
+ (v)o(e)h(\003o)n(w)2181 141 y(analysis)c(using)f(instantiation)k
+ (constraints.)27 b(In)17 b Fa(PLDI)p Fj(,)g(V)-7 b(ancouv)o(er)m(,)19
+ b(Canada,)2181 216 y(June)f(2000.)2042 307 y([21])29
+ b(D.)17 b(Gay)h(and)f(A.)g(Aik)o(en.)26 b(Memory)18 b(management)h
+ (with)f(e)o(xplicit)i(re)o(gions.)26 b(In)2181 382 y
+ Fa(PLDI)p Fj(,)16 b(pages)i(313\226323,)g(Montreal,)g(Canada,)h(1998.)
+ 2042 473 y([22])29 b(D.)15 b(Grossman,)h(G.)e(Morrisett,)k(T)-5
+ b(.)14 b(Jim,)h(M.)g(Hicks,)h(Y)-9 b(.)15 b(W)-5 b(ang,)15
+ b(and)h(J.)f(Chene)o(y)l(.)2181 548 y(Re)o(gion-based)20
+ b(memory)d(management)i(in)f(c)o(yclone.)26 b(In)17 b
+ Fa(PLDI)p Fj(,)e(June)j(2002.)2042 639 y([23])29 b(D.)13
+ b(Grunw)o(ald)i(and)f(B.)f(Zorn.)j(Customalloc:)h(Ef)n(\002cient)e
+ (synthesized)h(memory)2181 714 y(allocators.)27 b Fa(SP&E)p
+ Fj(,)15 b(23\(8\):851\226869,)k(1993.)2042 805 y([24])29
+ b(N.)15 b(Hallenber)o(g,)j(M.)d(Elsman,)h(and)g(M.)f(T)-5
+ b(ofte.)22 b(Combining)17 b(re)o(gion)g(inference)2181
+ 880 y(and)h(garbage)g(collection.)28 b(In)17 b Fa(PLDI)p
+ Fj(,)f(Berlin,)i(German)o(y)l(,)f(June)g(2002.)2042 971
+ y([25])29 b(J.)17 b(Han,)f(J.)g(Pei,)i(and)f(Y)-9 b(.)17
+ b(Y)l(in.)24 b(Mining)18 b(frequent)h(patterns)g(without)g(candidate)
+ 2181 1046 y(generation.)27 b(In)17 b Fa(SIGMOD)p Fj(,)g(pages)h
+ (1\22612,)f(2000.)2042 1137 y([26])29 b(D.)19 b(R.)g(Hanson.)32
+ b(F)o(ast)19 b(allocation)k(and)d(deallcoation)k(of)19
+ b(memory)g(based)h(on)2181 1212 y(object)f(lifetimes.)26
+ b Fa(SP&E)p Fj(,)16 b(20\(1\):5\22612,)i(Jan)f(1990.)2042
+ 1303 y([27])29 b(M.)21 b(Hind.)37 b(Pointer)23 b(analysis:)g(ha)o(v)o
+ (en')o(t)g(we)e(solv)o(ed)h(this)g(problem)g(yet?)39
+ b(In)2181 1378 y Fa(P)-6 b(ASTE)p Fj(,)16 b(pages)h(54\22661.)h(A)m(CM)
+ f(Press,)f(2001.)2042 1469 y([28])29 b(M.)24 b(Hirzel,)i(A.)d(Diw)o
+ (an,)i(and)g(M.)f(Hertz.)48 b(Connecti)n(vity-based)30
+ b(garbage)2181 1544 y(collection.)e(In)17 b Fa(OOPSLA)p
+ Fj(,)e(pages)j(359\226373,)g(2003.)2042 1636 y([29])29
+ b(X.)e(Huang,)h(S.)f(Blackb)o(urn,)j(K.)d(McKinle)o(y)l(,)i(E.)d(Moss,)
+ h(Z.)g(W)-5 b(ang,)27 b(and)2181 1710 y(P)-7 b(.)24 b(Cheng.)49
+ b(The)24 b(garbage)i(collection)i(adv)n(antage:)g(impro)o(ving)e
+ (program)2181 1785 y(locality)l(.)h(In)17 b Fa(OOPSLA)p
+ Fj(,)e(pages)j(69\22680,)f(2004.)2042 1876 y([30])29
+ b(T)-5 b(.)30 b(Jim,)f(G.)h(Morrisett,)h(D.)f(Grossman,)f(M.)h(Hicks,)g
+ (J.)g(Chene)o(y)l(,)h(and)2181 1951 y(Y)-9 b(.)18 b(W)-5
+ b(ang.)25 b(Cyclone:)20 b(A)d(safe)h(dialect)i(of)d(C.)26
+ b(In)17 b Fa(USENIX)g(Annual)h(T)-6 b(ec)o(hnical)2181
+ 2026 y(Confer)n(ence)p Fj(,)19 b(Montere)o(y)l(,)g(CA,)d(2002.)2042
+ 2117 y([31])29 b(R.)22 b(Jones.)41 b Fa(Garba)o(g)o(e)24
+ b(Collection.)h(Algorithms)e(for)f(A)o(utomatic)i(Dynamic)2181
+ 2192 y(Memory)18 b(Mana)o(g)o(ement)p Fj(.)27 b(John)17
+ b(W)m(ile)o(y)i(&)d(Sons,)g(1999.)2042 2283 y([32])29
+ b(C.)k(Lattner)l(.)76 b Fa(Macr)m(oscopic)35 b(Data)f(Structur)n(e)g
+ (Analysis)f(and)g(Opti-)2181 2358 y(mization)p Fj(.)68
+ b(PhD)30 b(thesis,)g(Computer)i(Science)g(Dept.,)e(Uni)n(v)o(ersity)j
+ (of)2181 2433 y(Illinois)j(at)f(Urbana-Champaign,)i(Urbana,)e(IL,)d
+ (May)j(2005.)79 b Fa(See)2181 2507 y Fg(http://llvm.cs.uiuc.ed)q(u)p
+ Fa(.)2042 2599 y Fj([33])29 b(C.)18 b(Lattner)h(and)f(V)-9
+ b(.)18 b(Adv)o(e.)26 b(Automatic)20 b(Pool)e(Allocation)j(for)d
+ (Disjoint)h(Data)2181 2673 y(Structures.)26 b(In)17 b
+ Fa(MSP)p Fj(,)g(Berlin,)h(German)o(y)l(,)f(Jun)g(2002.)2042
+ 2765 y([34])29 b(C.)d(Lattner)h(and)f(V)-9 b(.)25 b(Adv)o(e.)53
+ b(LL)-7 b(VM:)25 b(A)g(Compilation)k(Frame)n(w)o(ork)e(for)2181
+ 2839 y(Lifelong)22 b(Program)e(Analysis)h(and)f(Transformation.)36
+ b(In)19 b Fa(CGO)p Fj(,)h(San)g(Jose,)2181 2914 y(USA,)d(Mar)g(2004.)
+ 2042 3005 y([35])29 b(C.)f(Lattner)i(and)f(V)-9 b(.)28
+ b(Adv)o(e.)61 b(Transparent)30 b(Pointer)g(Compression)g(for)2181
+ 3080 y(Link)o(ed)20 b(Data)f(Structures.)30 b(In)18 b
+ Fa(Pr)m(oc.)g(A)n(CM)g(W)-6 b(orkshop)19 b(on)g(Memory)g(System)2181
+ 3155 y(P)-5 b(erformance)p Fj(,)18 b(Chicago,)h(IL,)d(Jun)g(2005.)2042
+ 3246 y([36])29 b(D.)21 b(Liang)g(and)h(M.)e(J.)g(Harrold.)39
+ b(Ef)n(\002cient)22 b(points-to)h(analysis)g(for)e(whole-)2181
+ 3321 y(program)d(analysis.)26 b(In)17 b Fa(ESEC)f(/)h(SIGSOFT)f(FSE)p
+ Fj(,)g(pages)i(199\226215,)g(1999.)2042 3412 y([37])29
+ b(D.)19 b(Liang)h(and)g(M.)f(J.)f(Harrold.)34 b(Ef)n(\002cient)21
+ b(computation)h(of)d(parameterized)2181 3487 y(pointer)g(information)g
+ (for)f(interprocedural)j(analysis.)k(In)17 b Fa(SAS)p
+ Fj(,)g(July)g(2001.)2042 3578 y([38])29 b(E.)23 b(M.)f(Nystrom,)h
+ (H.-S.)f(Kim,)h(and)g(W)-6 b(.)22 b(mei)i(W)-6 b(.)22
+ b(Hwu.)44 b(Bottom-up)24 b(and)2181 3653 y(top-do)n(wn)d(conte)o
+ (xt-sensiti)n(v)o(e)i(summary-based)d(pointer)h(analysis.)31
+ b(In)18 b Fa(SAS)p Fj(,)2181 3728 y(2004.)2042 3819 y([39])29
+ b(A.)13 b(Rogers,)h(M.)f(Carlisle,)i(J.)e(Repp)o(y)l(,)h(and)g(L.)e
+ (Hendren.)18 b(Supporting)e(dynamic)2181 3894 y(data)f(structures)h(on)
+ e(distrib)o(uted)i(memory)e(machines.)k Fa(T)o(OPLAS)p
+ Fj(,)12 b(17\(2\),)i(Mar)l(.)2181 3968 y(1995.)2042 4060
+ y([40])29 b(P)-7 b(.)22 b(Rundber)o(g)j(and)f(F)-5 b(.)22
+ b(W)-5 b(ar)o(g.)43 b(The)23 b(FreeBench)j(v1.0)d(Benchmark)i(Suite.)
+ 2181 4134 y Fg(http://www.freebench.o)q(rg)p Fj(,)e(Jan)17
+ b(2002.)2042 4226 y([41])29 b(M.)21 b(L.)e(Seidl)j(and)g(B.)e(G.)g
+ (Zorn.)37 b(Se)o(gre)o(gating)23 b(heap)f(objects)h(by)e(reference)2181
+ 4301 y(beha)o(vior)e(and)e(lifetime.)26 b(In)17 b Fa(ASPLOS-VIII)p
+ Fj(,)f(pages)h(12\22623,)g(San)g(Jose,)g(USA,)2181 4375
+ y(1998.)2042 4467 y([42])29 b(R.)22 b(Shaham,)h(E.)e(Y)-7
+ b(aha)o(v)l(,)22 b(E.)f(K.)g(K)n(olodner)m(,)j(and)e(M.)g(Sagi)n(v)l(.)
+ 41 b(Establishing)2181 4541 y(local)24 b(temporal)g(heap)e(safety)h
+ (properties)h(with)f(applications)i(to)d(compile-)2181
+ 4616 y(time)c(memory)f(management.)26 b(In)17 b Fa(SAS)p
+ Fj(,)f(San)h(Die)o(go,)h(USA,)e(June)h(2003.)2042 4707
+ y([43])29 b(B.)21 b(Steensgaard.)38 b(Points-to)23 b(analysis)f(in)f
+ (almost)h(linear)h(time.)37 b(In)20 b Fa(POPL)p Fj(,)2181
+ 4782 y(pages)e(32\22641,)g(Jan)f(1996.)2042 4873 y([44])29
+ b(M.)21 b(T)-5 b(ofte)21 b(and)g(L.)f(Birk)o(edal.)39
+ b(A)21 b(re)o(gion)h(inference)i(algorithm.)39 b Fa(T)o(OPLAS)p
+ Fj(,)2181 4948 y(20\(4\):724\226768,)19 b(July)f(1998.)2042
+ 5039 y([45])29 b(M.)19 b(T)-5 b(ofte)19 b(and)g(J.-P)-7
+ b(.)17 b(T)-5 b(alpin.)31 b(Implementation)22 b(of)d(the)h(typed)g
+ (call-by-v)n(alue)2181 5114 y Ff(\025)p Fj(-calculus)g(using)e(a)f
+ (stack)h(of)f(re)o(gions.)25 b(In)17 b Fa(POPL)p Fj(,)e(pages)j
+ (188\226201,)f(1994.)2042 5205 y([46])29 b(C.)d(B.)f(Zilles.)53
+ b(Benchmark)27 b(health)h(considered)g(harmful.)53 b
+ Fa(SIGARCH)2181 5280 y(Comput.)18 b(Ar)n(c)o(hit.)f(Ne)o(ws)p
+ Fj(,)g(29\(3\):4\2265,)h(2001.)p eop end
+ %%Trailer
+ 
+ userdict /end-hook known{end-hook}if
+ %%EOF


Index: llvm-www/pubs/index.html
diff -u llvm-www/pubs/index.html:1.14 llvm-www/pubs/index.html:1.15
--- llvm-www/pubs/index.html:1.14	Thu Nov  4 06:20:40 2004
+++ llvm-www/pubs/index.html	Wed Apr 20 23:46:11 2005
@@ -53,6 +53,13 @@
 
 <ol>
 
+<li>"<a href="2005-05-21-PLDI-PoolAlloc.html">Automatic Pool Allocation: 
+Improving Performance by Controlling Data Structure Layout in the Heap</a>"<br>
+Chris Lattner and Vikram Adve.  Proc. of the 2005 <a 
+href="http://research.ihost.com/pldi2005/">ACM SIGPLAN Conference on
+Programming Language Design and Implementation</a> (PLDI'05), Chicago, Illinois,
+Jun, 2005.</li>
+
 <li>"<a href="2004-Spring-AlexanderssonMSThesis.html">RubyComp - A Ruby-to-LLVM
 Compiler Prototype</a>"<br>Anders Alexandersson.  <i>Masters Thesis</i>, 
 Division of Computer Science at the Department of Informatics and Mathematics, 






More information about the llvm-commits mailing list