Update to final ECEASST template
diff --git a/docs/publications/MODELS2010OCLWorkshop/.cvsignore b/docs/publications/MODELS2010OCLWorkshop/.cvsignore
index c8040c3..aa700df 100644
--- a/docs/publications/MODELS2010OCLWorkshop/.cvsignore
+++ b/docs/publications/MODELS2010OCLWorkshop/.cvsignore
@@ -1,2 +1,5 @@
oclxtext.aux
oclxtext.synctex.gz
+*.bbl
+*.blg
+*.out
diff --git a/docs/publications/MODELS2010OCLWorkshop/easst.eps b/docs/publications/MODELS2010OCLWorkshop/easst.eps
new file mode 100644
index 0000000..9fac895
--- /dev/null
+++ b/docs/publications/MODELS2010OCLWorkshop/easst.eps
@@ -0,0 +1,3469 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: (EASST_Logo.pdf)
+%%Version: 1 6
+%%Creator: Adobe Acrobat 7.0
+%%CreationDate: 16:06:50 09/04/06
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 3
+%ADO_ContainsXMP: MainFirst
+%%BoundingBox: 0 0 136 134
+%%HiResBoundingBox: 0.0 0.0 136.08 134.4
+%%Pages: 0
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%DocumentSuppliedResources:
+%%+ procset (Adobe Acrobat - PDF operators) 1.2 0
+%%+ procset (Adobe Acrobat - general image support) 1.2 0
+%%+ procset (Adobe Acrobat - monochrome image support) 1.2 0
+%%+ procset (Adobe Acrobat - color image support) 1.2 0
+%%+ procset (Adobe Acrobat - indexed color image support) 1.2 0
+%%EndComments
+%%BeginProlog
+%%EndProlog
+%%BeginSetup
+%ADOPrintSettings: L3 W0 VM op crd os scsa T h ef BG UCR sf ef r b fa pr seps ttf hb EF T2 irt Drucker-/PostScript-Farbmanagement 0
+
+
+%%BeginResource: procset l3check 6.0 1
+%%Copyright: Copyright 1998,2001-2002 Adobe Systems Incorporated. All Rights Reserved.
+systemdict /languagelevel known
+{ systemdict /languagelevel get 3 lt }
+{ true }
+ifelse
+{
+initgraphics /Helvetica findfont 18 scalefont setfont
+72 600 moveto (Error: Your application needs to be configured) dup show ==
+72 580 moveto (for printing to a PostScript Language Level )dup show ==
+systemdict /languagelevel known {(2)}{(1)}ifelse dup show ==
+( printer.) dup show ==
+/Times-Roman findfont 16 scalefont setfont
+72 500 moveto (Select \252Language Level )show
+systemdict /languagelevel known {(2)}{(1)}ifelse show
+(\272 in the PostScript options section) show
+72 480 moveto (of the Advanced Print dialog.) show
+showpage
+quit
+}
+if
+%%EndResource
+/currentpacking where{pop currentpacking true setpacking}if
+%%BeginResource: procset pdfvars 6.0 1
+%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
+%%Title: definition of dictionary of variables used by PDF & PDFText procsets
+userdict /PDF 162 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/undefineRes/findRes/setSA/pl
+/? /! /| /: /+ /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 6.0 1
+%%Copyright: Copyright 1993-2001 Adobe Systems Incorporated. All Rights Reserved.
+%%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 6.0 1
+%%Copyright: Copyright 1998-2003 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
+/sg /setgray 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_imagemask {{imagemask} /DataSource pdf_dictOp} bd
+/pdf_shfill {{sh} /DataSource pdf_dictOp} bd
+/pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
+/masks [ 2#10000000
+2#11000000
+2#11100000
+2#11110000
+2#11111000
+2#11111100
+2#11111110
+2#11111111 ] def
+/addNBits
+{
+/numBits exch def
+/byte exch def
+OutBitOffset numBits add 8 gt
+{
+byte OutBitOffset 8 sub bitshift
+OutBuffer OutByteIndex get or
+OutBuffer OutByteIndex 3 -1 roll put
+/OutByteIndex OutByteIndex 1 add def
+/bitsDoneSoFar OutBitOffset def
+/OutBitOffset numBits 8 OutBitOffset sub sub def
+OutBitOffset 0 gt
+{
+byte bitsDoneSoFar bitshift
+masks numBits bitsDoneSoFar sub get and
+OutBuffer OutByteIndex 3 -1 roll put
+} if
+}
+{
+byte masks numBits 1 sub get and
+OutBitOffset neg bitshift
+OutBuffer OutByteIndex get or
+OutBuffer OutByteIndex 3 -1 roll put
+/OutBitOffset OutBitOffset numBits add def
+OutBitOffset 8 eq
+{
+/OutBitOffset 0 def
+/OutByteIndex OutByteIndex 1 add def
+} if
+} ifelse
+} bind def
+/DevNNFilter
+{
+/InBuffer Width NumComps mul BitsPerComponent mul 7 add 8 idiv string def
+AllSource InBuffer readstring pop pop
+/outlen Width NewNumComps mul BitsPerComponent mul 7 add 8 idiv def
+/OutBuffer outlen string def
+0 1 outlen 1 sub { OutBuffer exch 0 put } for
+/InByteIndex 0 def
+/InBitOffset 0 def
+/OutByteIndex 0 def
+/OutBitOffset 0 def
+/KeepArray NumComps array def
+0 1 NumComps 1 sub { KeepArray exch true put } for
+DevNNones { KeepArray exch false put } forall
+Width {
+KeepArray
+{
+{
+/bitsLeft BitsPerComponent def
+{
+bitsLeft 0 le { exit } if
+/bitsToDo 8 InBitOffset sub dup bitsLeft gt { pop bitsLeft } if def
+InBuffer InByteIndex get
+InBitOffset bitshift
+bitsToDo addNBits
+/bitsLeft bitsLeft bitsToDo sub def
+InBitOffset bitsToDo add
+dup 8 mod /InBitOffset exch def
+8 idiv InByteIndex add /InByteIndex exch def
+} loop
+}
+{
+InBitOffset BitsPerComponent add
+dup 8 mod /InBitOffset exch def
+8 idiv InByteIndex add /InByteIndex exch def
+}
+ifelse
+}
+forall
+} repeat
+OutBuffer
+} bd
+/pdf_image
+{
+20 dict copy
+begin
+/UnusedNones where { /UnusedNones get}{false} ifelse
+{
+/NumComps Decode length 2 div cvi def
+/OrigDecode Decode def
+/NumNones DevNNones length def
+/NewNumComps NumComps NumNones sub def
+/Decode NewNumComps 2 mul cvi array def
+/devNNindx 0 def
+/decIndx 0 def
+/cmpIndx 0 def
+NumComps {
+cmpIndx DevNNones devNNindx get eq
+{
+/devNNindx devNNindx 1 add dup NumNones eq {pop 0} if def
+}
+{
+Decode decIndx OrigDecode cmpIndx 2 mul get put
+Decode decIndx 1 add OrigDecode cmpIndx 2 mul 1 add get put
+/decIndx decIndx 2 add def
+} ifelse
+/cmpIndx cmpIndx 1 add def
+} repeat
+_Filters dup length 1 sub get /AllSource exch def
+/DataSource { DevNNFilter } def
+}
+{ _Filters dup length 1 sub get /DataSource exch def }
+ifelse
+currentdict image
+_Filters pdf_flushfilters
+end
+} 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
+miDict /InterleaveType get 3 eq
+{ MaskDict /DataSource get dup type /filetype eq { closefile } { pop } ifelse }
+if
+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
+}
+{
+/max { 2 copy gt { pop } {exch pop} ifelse } bind def
+/min { 2 copy lt { pop } {exch pop} ifelse } bind def
+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 sub 0.0001 lt
+{
+c1x c1y r1 360 0 arcn
+pathbbox
+/aymax exch def
+/axmax exch def
+/aymin exch def
+/axmin exch def
+/bxMin xMin axmin min def
+/byMin yMin aymin min def
+/bxMax xMax axmax max def
+/byMax yMax aymax max def
+bxMin byMin moveto
+bxMax byMin lineto
+bxMax byMax lineto
+bxMin byMax lineto
+bxMin byMin 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
+AA -1 eq
+{ /theta 89.99 def}
+{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
+ifelse
+/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 } 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 sub 0.0001 le
+{
+c2x c2y r2 360 0 arcn
+pathbbox
+/aymax exch def
+/axmax exch def
+/aymin exch def
+/axmin exch def
+/bxMin xMin axmin min def
+/byMin yMin aymin min def
+/bxMax xMax axmax max def
+/byMax yMax aymax max def
+bxMin byMin moveto
+bxMax byMin lineto
+bxMax byMax lineto
+bxMin byMax lineto
+bxMin byMin 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
+AA -1 eq
+{ /theta 89.99 def}
+{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
+ifelse
+/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 } 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
+/currentdistillerparams where { pop currentdistillerparams /CoreDistVersion get 5000 lt}{true}ifelse
+{
+/PDFMark5 {cleartomark} bd
+}
+{
+/PDFMark5 {pdfmark} bd
+}ifelse
+/ReadByPDFMark5
+{
+2 dict begin
+/makerString exch def string /tmpString exch def
+{
+currentfile tmpString readline pop
+makerString anchorsearch
+{
+pop pop cleartomark exit
+}
+{
+3 copy /PUT PDFMark5 pop 2 copy (\n) /PUT PDFMark5
+} ifelse
+}loop
+end
+}bd
+%%EndResource
+%%BeginResource: procset pdflev3 6.0 1
+%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
+%%Title: PDF operators, with code specific for Level 3
+/docinitialize {
+PDF begin
+/_defaulthalftone currenthalftone dd
+/_defaultblackgeneration currentblackgeneration dd
+/_defaultundercolorremoval currentundercolorremoval dd
+/_defaultcolortransfer [currentcolortransfer] dd
+/_defaulttransfer currenttransfer dd
+end
+PDFVars /docSetupDone true put
+} bd
+/_processColors
+currentpagedevice /ProcessColorModel getifknown
+{ << /DeviceGray [/Gray]
+/DeviceRGB [/Red /Green /Blue]
+/DeviceCMYK [/Cyan /Magenta /Yellow /Black]
+/DeviceCMY [/Cyan /Magenta /Yellow]
+/DeviceRGBK [/Red /Green /Blue /Black]
+>> exch getifknown {} {[]} ifelse }
+{[]}
+ifelse
+def
+/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
+/rssds
+{
+/Shading get /DataSource get resetfile
+} bd
+/sh
+{ dup /DataSource known
+{ dup begin
+DataSource type /filetype eq { DataSource resetfile } if
+end
+} if
+shfill
+} [/DataSource] bld
+/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
+/undefineRes/undefineresource 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
+/CMYKDeviceNColorspaces [
+[/Separation /None /DeviceCMYK {0 0 0}] bind
+[/Separation (Black)
+/DeviceCMYK {0 0 0 4 -1 roll}] bind
+[/Separation (Yellow)
+/DeviceCMYK {0 0 3 -1 roll 0}] bind
+[/DeviceN [(Yellow) (Black)]
+/DeviceCMYK {0 0 4 2 roll}] bind
+[/Separation (Magenta)
+/DeviceCMYK {0 exch 0 0}] bind
+[/DeviceN [(Magenta) (Black)]
+/DeviceCMYK {0 3 1 roll 0 exch}] bind
+[/DeviceN [(Magenta) (Yellow)]
+/DeviceCMYK {0 3 1 roll 0}] bind
+[/DeviceN [(Magenta) (Yellow) (Black)]
+/DeviceCMYK {0 4 1 roll}] bind
+[/Separation (Cyan)
+/DeviceCMYK {0 0 0}] bind
+[/DeviceN [(Cyan) (Black)]
+/DeviceCMYK {0 0 3 -1 roll}] bind
+[/DeviceN [(Cyan) (Yellow)]
+/DeviceCMYK {0 exch 0}] bind
+[/DeviceN [(Cyan) (Yellow) (Black)]
+/DeviceCMYK {0 3 1 roll}] bind
+[/DeviceN [(Cyan) (Magenta)]
+/DeviceCMYK {0 0}] bind
+[/DeviceN [(Cyan) (Magenta) (Black)]
+/DeviceCMYK {0 exch}] bind
+[/DeviceN [(Cyan) (Magenta) (Yellow)]
+/DeviceCMYK {0}] bind
+[/DeviceCMYK] bind
+] def
+/nzopmsc {
+6 dict begin
+/kk exch def
+/yy exch def
+/mm exch def
+/cc exch def
+/sum 0 def
+cc 0 ne {/sum sum 2#1000 or def cc} if
+mm 0 ne {/sum sum 2#0100 or def mm} if
+yy 0 ne {/sum sum 2#0010 or def yy} if
+kk 0 ne {/sum sum 2#0001 or def kk} if
+CMYKDeviceNColorspaces sum get setcolorspace
+sum 0 eq {0} if
+end
+setcolor
+} [/cc /mm /yy /kk /sum] bld
+/every? {
+true
+3 2 roll
+{ 2 index exec not {pop false exit} if } forall
+exch pop
+} bd
+/knownColorants? {
+3 dict begin
+/colorants exch def
+{
+colorants length 0 eq {stop} if
+/DeviceN /ColorSpaceFamily findresource pop
+/cpd currentpagedevice def
+/dc 10 dict def
+cpd /SeparationColorNames getifknown
+{ { dc exch 0 put } forall } if
+_processColors { dc exch 0 put } forall
+colorants {dc exch known} every?
+} stopped
+{ false }
+if
+end
+} [/colorants /dc /cpd] bld
+/getrampcolor {
+cvi
+/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
+%%EndResource
+%%BeginResource: procset pdftext 6.0 1
+%%Copyright: Copyright 1987-2001,2003 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
+Level2?
+{
+/pdfPatchCStrings
+{
+currentdict /CharStrings known currentdict /FontType known and
+{
+FontType 1 eq CharStrings type /dicttype eq and
+{
+CharStrings /mu known CharStrings /mu1 known not and CharStrings wcheck and
+{
+CharStrings /mu get
+type /stringtype eq
+{
+currentglobal
+CharStrings /mu1
+CharStrings /mu get
+dup gcheck setglobal
+dup length string copy
+put
+setglobal
+} if
+} if
+} if
+} if
+} bd
+}
+{ /pdfPatchCStrings {} bd }
+ifelse
+/TZ
+{
+/_usePDFEncoding xdd
+findfont
+dup length 6 add dict
+begin
+{
+1 index /FID ne { def } { pop pop } ifelse
+} forall
+pdfPatchCStrings
+/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
+pdfPatchCStrings
+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 }
+{
+1 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 160 get /.notdef eq and
+{
+/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
+[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
+%%BeginResource: procset pdfasc.prc 6.0 1
+%%Copyright: Copyright 1992-2003 Adobe Systems Incorporated. All Rights Reserved.
+/ASR {
+13 dict begin
+/mirV? exch def
+/mirH? exch def
+/center? exch def
+/autorotate? exch def
+/angle exch def
+/shrink exch def
+/Pury exch def
+/Purx exch def
+/Plly exch def
+/Pllx exch def
+/Dury exch def
+/Durx exch def
+/Dlly exch def
+/Dllx exch def
+Dury 0 eq Durx 0 eq and Dlly 0 eq Dllx 0 eq and and
+{ shrink 0 gt { GClipBBox } { GPageBBox } ifelse }
+{ ITransDBBox }
+ifelse
+/PHt Pury Plly sub def
+/PW Purx Pllx sub def
+/DHt Dury Dlly sub def
+/DW Durx Dllx sub def
+angle 90 eq angle 270 eq or
+{
+PHt /PHt PW def /PW exch def
+} if
+autorotate? PHt PW ne and DHt DW ne and
+{
+DHt DW ge
+PHt PW ge
+ne
+{ /angle angle 90 add def
+PHt /PHt PW def /PW exch def
+}
+if
+} if
+angle 0 ne
+{
+/angle angle 360 mod def
+angle rotate
+angle 90 eq
+{ 0 DW neg translate }
+if
+angle 180 eq
+{ DW neg DHt neg translate }
+if
+angle 270 eq
+{ DHt neg 0 translate }
+if
+} if
+center?
+{
+ITransBBox
+Durx Dllx add 2 div Dury Dlly add 2 div
+Purx Pllx add -2 div Pury Plly add -2 div
+3 -1 roll add exch
+3 -1 roll add exch
+translate
+}
+{
+ITransBBox
+angle 0 eq
+{Dllx Pllx sub Dury Pury sub}
+if
+angle 90 eq
+{Durx Purx sub Dury Pury sub}
+if
+angle 180 eq
+{Durx Purx sub Dlly Plly sub}
+if
+angle 270 eq
+{Dllx Pllx sub Dlly Plly sub}
+if
+translate
+}
+ifelse
+mirH? mirV? or
+{
+ITransBBox
+mirH?
+{
+-1 1 scale
+Durx Dllx add neg 0 translate
+} if
+mirV?
+{
+1 -1 scale
+0 Dury Dlly add neg translate
+} if
+} if
+shrink 0 ne
+{
+ITransBBox
+Dury Dlly sub Pury Plly sub div
+Durx Dllx sub Purx Pllx sub div
+2 copy gt { exch } if pop
+shrink 1 eq
+{
+Durx Dllx add 2 div Dury Dlly add 2 div translate
+dup scale
+Purx Pllx add -2 div Pury Plly add -2 div translate
+}
+{
+shrink 2 eq 1 index 1.0 lt and
+{
+Durx Dllx add 2 div Dury Dlly add 2 div translate
+dup scale
+Purx Pllx add -2 div Pury Plly add -2 div translate
+}
+{ pop }
+ifelse
+}
+ifelse
+} if
+end
+} [/autorotate? /shrink? /mirH? /mirV? /angle /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly /PW /PHt /DW /DHt
+/Devurx /Devury /Devllx /Devlly /pdfHt /pdfW]
+bld
+/GClipBBox
+{
+gsave newpath clippath pathbbox newpath grestore
+/Dury exch def
+/Durx exch def
+/Dlly exch def
+/Dllx exch def
+ITransDBBox
+} [/Durx /Dury /Dllx /Dlly]
+bld
+/GPageBBox
+{
+{
+currentpagedevice /PageSize get aload pop
+/Devury exch def /Devurx exch def
+/Devllx 0 def /Devlly 0 def
+ITransBBox
+}
+stopped
+{ GClipBBox }
+if
+} [/Devurx /Devury /Devllx /Devlly ]
+bld
+/ITransDBBox
+{
+Durx Dury transform matrix defaultmatrix itransform
+/Devury exch def
+/Devurx exch def
+Dllx Dlly transform matrix defaultmatrix itransform
+/Devlly exch def
+/Devllx exch def
+Devury Devlly lt {/Devlly Devury /Devury Devlly def def} if
+Devurx Devllx lt {/Devllx Devurx /Devurx Devllx def def} if
+} [/Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
+bld
+/ITransBBox
+{
+/um matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix def
+Devllx Devlly um itransform
+Devurx Devury um itransform
+/Dury exch def
+/Durx exch def
+/Dlly exch def
+/Dllx exch def
+Dury Dlly lt {/Dlly Dury /Dury Dlly def def} if
+Durx Dllx lt {/Dllx Durx /Durx Dllx def def} if
+} [ /um /Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
+bld
+%%EndResource
+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
+
+[/NamespacePush PDFMark5
+[/_objdef {Metadata_In_EPS} /type /stream /OBJ PDFMark5
+[{Metadata_In_EPS} 3388 (% &end XMP packet& %) ReadByPDFMark5
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-702">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2006-09-04T16:06:50+02:00</xap:CreateDate>
+ <xap:ModifyDate>2006-09-04T16:06:50+02:00</xap:ModifyDate>
+ <xap:MetadataDate>2006-09-04T16:06:50+02:00</xap:MetadataDate>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
+ <xapMM:DocumentID>uuid:FBC0119C1E3CDB1190748C71D53A1122</xapMM:DocumentID>
+ <xapMM:InstanceID>uuid:FBC0119C1E3CDB1190748C71D53A1122</xapMM:InstanceID>
+ <xapMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:fb342d4d-b4c9-4bcb-b043-834dcc7a7fd0</stRef:instanceID>
+ <stRef:documentID>uuid:74dad325-e4df-49ae-bec3-df08785113c6</stRef:documentID>
+ </xapMM:DerivedFrom>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/eps</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?>
+
+% &end XMP packet& %
+
+[{Metadata_In_EPS} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT PDFMark5
+[/Document 1 dict begin /Metadata {Metadata_In_EPS} def currentdict end /BDC PDFMark5
+[/NamespacePop PDFMark5
+
+PDFVars/TermAll get exec end end
+
+%%EndSetup
+ PDF /docinitialize get exec
+PDFVars begin PDF begin PDFVars/InitAll get exec
+0.0 0.0 136.08 134.4 rectclip
+q
+0.0 0.0 m
+136.08 0.0 l
+136.08 134.4 l
+0.0 134.4 l
+h
+W
+n
+q
+136.08 0.0 0.0 134.4 0.0 0.0 cm
+q
+n
+0.0 0.0 1.0 1.0 re
+[/DeviceRGB] cs
+<<
+/ImageType 1
+/Width 567
+/Height 560
+/ImageMatrix [567.0 0.0 0.0 -560.0 0.0 560.0]
+/BitsPerComponent 8
+/Decode [0.0 1.0 0.0 1.0 0.0 1.0 ]
+/_Filters [currentfile /ASCII85Decode filter dup /DCTDecode filter dup
+] >>
+pdf_image s4IA>!"M;*Ddm8XA:OX[!!3,S!/(=\#RC\A#RgtE$kNdS$P4!^%1Nd](_RJq'+u,r
+&el#o'G;)o)]g%A)\aPF-RU8e1,UpH1-7QZ4$,Mc4$,M)%13FN$4ICQ$k<jZ%Ls'b
+%hB0]'GM)j&ePZh'GD/q'bh;q'bqGu'bqH%)B'M4)BKq@*ZcON,9nQ`-S-f"s1eUH
+#Qc[]2Zj()!!3`5!tbS6_uW1)!!*6(!<E3%!<<*"z!rr?'"9eu7#RLhG!<<-(!<E3%
+!<E0#z!!*'$!sAc3#7(VC$P3:="9AT+"9J`3"pbA7$o7na!YGM;+VHL55uD&(,&r/h
+"r*2nYsKZ\'iMkW1Gj-(d6e-bP#Ll/nRHVt(8A*e-:F%sA4=A1F>ar`<T7T\Z\66F
+FlW'_-^:E\[$ASZjRf:V`RX)C<b?N0QDV+1f&lZb7os>ILR4pJa4KMK&HDk6!<NB,
+!sAc3#6tG73ro<_&Ha12&d1Kt@<!J)"YtXk'VVcu,Jd:*n1u>!iGsO56W4_0F#<D5
+"r<r=K*N_\_U:i9<217?79)6fA`E9eKYu8]j7>a)UkQ1@`73l?V7":mjn2YdG(u<[
+[`6n\p*Vdh=(c`4Q`%=5fB;o.g&MN`!<<05!tbMt!;0<S8L5f2P"A8;,a)&g8L0Or
+P"?rK,a(_k8L0HsP"?p`Uln:q.3t'J8kC:k;NaTsPbaI6,q1+&8P2Q"P#@H7,a>*f
+8L5g)rrD']XS#>TR>G9HaaFW(V`DSaaE0&nH.Vi;rh"oE!#"bsV.YpHQ?\5d73)lO
+(cem3L-uX`NP+$gq:kS+rr=T&qoAFWrr>-0Z@Ctihg#.^OHS2gEIXI=pn?"-Edmr#
+dd-o5cJP^qq-eL(5IiHCg\$d1!%]c"a7h-<P4imFRud?<?LCVHQeG_pq:kS+rr=T&
+qoAFWrr>-0Z@Ctihg#.^OHNqq0Cs2`!#-s>antZ+9<\?q4+=Jbjb;T:roCiWDq7_^
+Ye0?Ggp.Pcfu<r.5N7BD\NbOMBm'FUkASpIr33g%+5E4\mJ=s)!1"FLj85-/8UEG3
+c,]`YYBMA_bO$psr9a@&rrA?$IH13frrAV)=[2Jon%=-ja@S$t(\tT@!/_NZjSen&
+V:Y_IS\J;lo"sk.Ir\of\*GF@=C(Z^mTBiBm,J$F2]qQV^"f6p0=8=j!;!\c-iR4R
+pQ+`8rc\6NrrC4M^@D0F+XFak?fpDJ-s+$EpZ;+8?iG6IAH)YQ$bl00aa_UnXIo;s
+GMYQpA0dMJMu;@[`<u?[If-q.li-t1hlNIG@<^Qm\M*d5oooCU/2$h?pFLu\p2PSO
+O8,DTmSD`,g0K4(g\$d1!%]c"a7gn[!'>Y8J)uCAGlHfdP$ZEeo5Xd1'J&"]qssVW
+YQ"SaI^4IbL#7.SjM0krekc4J]C-isZ4]g``Vsa>ie;`i5CQsRFoMI)Dq7_^Ye0?G
+gm@s+qT8a;Q5=u0qj'Q?HT8dba8Ac;G:2k&m4Q0OmJ=s)!1"FLj85#>!1gl-5Ou\[
+]ROtC8M=]mq7-G)MA>R?rV:l<fDbiA^KEel_XG-eEaSFIlR2[6?2'EJ=U?D@ir9!;
++7V\2gn2>7[(?8;o=+$5r`EJ#O7#[?G5YtO!6YbanbpWS,e]^Tk2ZFh=1a[jjn>$J
+rc\6NrrC4M^@D0DJ'QrQTD;o>hESP],aYiqr7le@$MSRir4^VIidGS<`;<fkkLr2$
+f5`lgDfG+'&m8=DcTD+Qn,2if8j@)5]j)/P%`>mX!-3PEnOr$4HTpMR8M!A38L0Hk
+;Fr-sP`eT`V'M3q.7keJ8lA5+P*D,$,c)cL8L[4VP"JVD,a+CT8L1,XP"@)o,a(bt
+8L0I`P"?pq,a(_J9?t;lJ+WXlpm6K\01B2ir\OQSVr<-D]Ded5j?MH4nir<C3W.+6
+a6)n`,a-f$'Tu$5V'M3q.7keJ8lA5+P*D,$,c)cL8L[4VP"JVD,a+CT8L1,XP"@)o
+,a(bt8L0I`P"?pq,a(_J8L0Hk;Fr-sRi#MY48pSqr:OMj@=LE.pm]%ieVP^S!6]kC
+rr@/Ur0R2.Z1fN,8RT-p8L0HsP"?p`Uln:q.3t'J8kC:k;NaTsPbaI6,q1+&8P2Q"
+P#@H7,a>*f8L5f2P"A8;,a)&g8L0OrP"?rK,a(_k??Q6'rrAtUJ&JtuWHp&cYOS7`
+57@H:ht9Un+o^\dOo1S,cfSg$5<"Hk,aQ?8Uln:q.3t'J8kC:k;NaTsPbaI6,q1+&
+8P2Q"P#@H7,a>*f8L5f2P"A8;,a)&g8L0OrP"?rK,a(_k8L0HsP"?p`fY[W5hsiXT
+kGo4g$i/t8`81FnSubLRr`f:2qka;mjM/V2O1?O!9*NpF8L0I`P"?pq,a(_J8L0Hk
+;Fr-sP`eT`V'M3q.7keJ8lA5+P*D,$,c)cL8L[4VP"JVD,a+CT8L1,XP"@)o,a(bt
+o<7\VrBC\h-/\Agd8ulgN;inBpg<PDrrB'"\I\F&I#m@)c@7W'1&8I[8L1_a`?^U<
+.7keJ8lA5+P*D,$,c)cL8L[4VP"JVD,a+CT8L1,XP"@)o,a(bt8L0I`P"?pq,a(_J
+8L0Hk;Fr-sP`eT`VT'GDcMmm$]Dhjo=HZcncTD+Qn,2if8jDn(i.'Q9rr=AE+7+Et
+,a)7^\roW1PbaI6,q1+&8P2Q"P#@H7,a>*f8L5f2P"A8;,a)&g8L0OrP"?rK,a(_k
+8L0HsP"?p`Uln:q.3t'J8kC:k;O<r(N;inBpg<PDrrB'*MS/9QBE%s-_Z'UmGPtFI
+aFCcGjF8KdF8;5LO3Q[I8L:V'.3t'J8kC:k;NaTsPbaI6,q1+&8P2Q"P#@H7,a>*f
+8L5f2P"A8;,a)&g8L0OrP"?rK,a(_k8L0HsP"?p`Uln:q2DDn;GPk1mq<Gn]_Z"i<
+nMbs\WtJ;0!1*Wb"9.P7q(M7;!+YFg00dSY!#\qhA6VUAW/BHo!aP,9Oq>Cucd2Uk
+\5`J.SE5tq%UeV>51&MAmg/k:p(u+S??Q8JNdcKV_Pd=p-3!t*IXh=5Vu5^&pC:^-
+8(n^PbWiah_YP`TcG/nqci4!T<;urgjM162ci4!T<;urgjM'TsId$Yq^A3QYO4[f.
+8U8qe3Vi[TpBmPaS<s48q>UHh$D6p[QeXT^h&g<3h_>'"q[;Ve009+5a$2ffiD]_s
+P5bO&5<o/+;uUj$qhHp'U[8Ecjr`GE@=8k:k?n#IkPkP;.Y#`a?higIrrCh(J'N(A
+E99B,IA("q_u%L@0;>8Tli-r)r;QcoKhqNi9E+u3r;QcoKhqNi9C<e?mZ4_*n!JTL
+rIslCQ^rWdT:c,`E2ij;3QZd2T:c,`E2ij;3QZ]eR/PG+KmiP'miSdJMN[S7r,_K0
+!:CRdk;b3nF7]D3mM.tL3A7m`+1aY_YJ+HDj7X;:;I4MG!02MXrPGK1k9^-.NdcKV
+_Pd=p-2.mZpIEpPpWPk7I_tq29?t<Bcd2Uk\5`J.SE.HTcd2Uk\5`J.SE.ECb^SdQ
+6GE8NpQ*s677hdVr]0fS!;?hmo:20H3Vi[TpBmPaS<r"kO51mk=5P_2nbW^XW@p=4
+!67;gro$fTF-?P'a$2ffiD]_sP5C"hqkNNcqrT!W5@JsT-0JY1kNDjFga[g!EaSV)
+kPkP;.Y#`a?Z>-lFFBiiI)Gj%ln>*/]^,Rt*;og:qh7iAc:e0;*;og:qh7iAc:dRF
+a6o"q/+8jTGl<?g<0s/*j.DtD!-"q;!'//Nj.DtD!-"q;!'//L_jLDMp4[qd&+:UE
+^5A*FYP`J5rrDI%5Nb$[r,_K0!:CRdk;b3*F!%tWd'(/lrT!Sfd8ulgN;inBpg<PD
+rrB&lrr=&:rrDqM:\i::Z*>8I0l&fFXuK1oGG<[;mLB^-nolN:@%Sm0A^!,A//*6A
+SJ^qZLG8ml)7^fXD<C<o01Gm@`kqoXk2$#P;Z?a:_ZTo#h>V1i^VB@>!5*ctfDD.X
+h&g<Xkp>Q.pt/u(gtTTgC1$bg@"6td^WgM#J*$\1Gl<>'F3XTWm15a5]bg\K)[m8S
+Rs4\19E+u2$kN6)GPS@6n,0rh+0_g6H,"HLU%>(HUAk5R@=eFYF)M!X25u)c@=eFY
+F)M!X25u$(!13ZEp(`#%2sua65'2t[?i4^o5ONCGk-Zl?CbS*AD;XK`0>I)X!5*ct
+YIWfodIr@@P$X(H!0)^<rQVtPeugO,oYu!%YE@:LH*O^lJG0<sEuP&8eka90@a?89
+&kEhD$Sl,3LiH*b-F\'E8L6/2P"?p`Uln:q.3t'J8kC:k;NaTsPbaI6,q1+&8P2Q"
+P#@H7,a>*f8L68K^RfZI:#Gd3`0/":H/J-NJ*3jF;?$W^rr<0#l$rL^nG`Jt\qfqU
+TD7_:lADaGFV!a45Om<SeJ2@R5:H)*/^KlK8L.92P"?rK,a(_k8L0HsP"?p`Uln:q
+.3t'J8kC:k;NaTsPbaI6,q1+&8P2Q"P#@H7,a>*f8L5f2P"A8;,a)&lU]1=P+8I]K
+r]G\["m69@rrC$!r0`uQ!$4Ai!iti%pH6+/k0M0L!'EB)jS!:5P/h[oP"?pq,a(_J
+8L0Hk;Fr-sPe;q?^]#^(^,>ojkGm.:Y9Ni3rr@qHmu;hmlEtipT?g1-L\$F*T)NUl
+hYi/F8L0V&StqN@,q1+&8P2Q"P#@H7,a>*f8L5f2P"A8;,a)&g8L0OrP"?rK,a(_n
+N%a@brr<^Vrd(gpYeQcRr(Z)ElGSp:jhJV2!4lP:9Dh$,Y+beY-iQ0QqP($k*CK[P
+:],@-ogMqXO30SN9696kP"?B;,a(_k8L0HsP"?p`Uln:q.3t'J8kC:k;NaTsPbaI6
+,q1+&8P2Q"P#@H7,a>*f8L5f2P"A8;,a)&g8L0Oskl1YBa8ScVrrA*%o`9?ToRHC@
+rr=BXJ&dWHJ?&N7rQd,Oq6TXAcOV8r4dnqfZ/%8_P"@)o,a(bt8L0I`P"?pq0-^8]
+rr@qHmu;hmlF#rYaM,:d!90n<j'Ve3X^1^7o@!Wsr8Q8i^RL;Y^L;)E8L:D"W?dWu
+8kC:k;NaTsPbaI6,q1+&8P2Q"P#@H7,a>*f8L5f2P"A8;,a))9$i/t8`81FnSubL7
+0B\o+!#'SUHEeb<q/>aem[*qRP5bLmp+*(k:W`V:NjJ_`Wp7W$rh#DS!$,_N;,u**
+nrG)[h"dopP!qu7,a)&g8L0OrP"?rK,a(_k8L0HsP"?p`Uln:q.3t'J8kC:k;NaTs
+PbaI6,q1+&8P2Q"P#@H7,a>*f8L5g35PVM`!0]3'j2_*`??!S"r)it!adJdkj8P]$
+^C^DFF3DdVD#Bps_oVgQAs,_:G>1XSP"JVD,a+CT8L1,XP"@)qaM,:d!90n<j'Ve3
+Xa9:'0<Y<Tpo2R6fDbiBX&j`fr:Ib6IlOi]n)i[/n(:kjP"BE!l:E7a;NaTsPbaI6
+,q1+&8P2Q"P#@H7,a>*f8L5f2P"A8;,a)&g8L0PQ_Z"i<nMbs\WtJ&5q<*7Gh>[JH
+X@Yq]>Po$/V>gPV^Vg#-l6"LGJ)dX1!3.N[Z.)"9jSo5#=oSJ$<HS$6UWI&U5&*Y7
+O]%?6,a>*f8L5f2P"A8;,a)&g8L0OrP"?rK,a(_k8L0HsP"?p`Uln:q.3t'J8kC:k
+;NaTsPbaI6,q1+&8P3<Mr[`Q[bg6(Srr>k3S1dD4!#@fiAnV$drrAu)YJ`Z\o(*rm
+5:?Bunir>kUln@kdo&a_P*D,$,c)cL8L[4VP"JXC0<Y<Tpo2R6fDbiBX'WBMMsJ.W
+.W`<]rrD5^e_c+24YQ4Fc7N@Lq7-G)HhJ6^,a)?6HBLiFPbaI6,q1+&8P2Q"P#@H7
+,a>*f8L5f2P"A8;,a)&g8L0OrP"?rX0Ya3'r(Z)ElGSk&rd!Dk2h1"k&lJZ/QN$pe
+ronq.0C\uA@_.?er1EcM5O+-/XE>'<q*4E#J(59>5!LId=Y7sgP"?ouUln:q.3t'J
+8kC:k;NaTsPbaI6,q1+&8P2Q"P#@H7,a>*f8L5f2P"A8;,a)&g8L0OrP"?rK,a(_k
+8L0HsQ_XQ\M]_aN1]BLde-5"CdJj3cO8PE6rr=*)l2n$V&,/3!a6(^irr>/DO6$"K
+,a-2ie<3BKV'M3q.7keJ8lA5+P*EV;lbEEKF1sO3!9^B6Y-0&Gn,EBFSF;Geq<GA3
+iLeFhqhOd$=.]D/5Ml?m_FZ#=X.H,M8L5f2P"A8;,a)&g8L0OrP"?rK,a(_k8L0Hs
+P"?p`Uln:q.3t'J9oLagSc8['GQ)on,d>%TGPk1mq<Gn_J*"G\rrBW;r_*/RfWLqH
+5:?FkchaB:WuXS(IS]laTCkWS:QNX\Q:l;]Uln:a.3t'J8kC:k;NaTsPbaI6,q1+&
+8P2Q"P#@H7,a>*f8L5f2P"A8;,a)&g8L0OrP"?rK,a(_k8L0HsP"?p`V<Hgr^lR0Z
+K=JQ9]qK_o^XKd_<p;/`I6/V%2SpI'"&+iTk;9,_X@GH!#`o?;Ifd`E+N9F9Jj@#A
+CIrdVr:Kj3rr@,trbFah$%L8sXT&:p4oYNEZi:"JW.1Qtrq&Dsi8"5/5M_[br*Nf&
+GmF9>qTo0AF5Qt45Oo)ErG28eOCF0LXZd/qY5FQ]rf,&ZS3GF"(&.'-oO[fI(Y7#@
+>2HUb0HWA?g?@ZRk!/>\4$KlsH)PVhbbbme:]UE/6iA)ko9fO+r"JhGroF()m<r+`
+j<+!>lTb?oJ,-2G!6?Jd!'NNPrrCjKrrAM6r.7/sbeLh%a7pnJq#:>;?\e0"I3mqr
+o@*"irQfuhXT&:A-3!s.5-t7hh"UgKRa:n`?g,_K]ar0Y/+<95!-V_)nU5h2(Y=07
+<9JXErrCAFW;ckD:TXQrpHANVk-P'f+L:Sp14"[Jo(*o>]#`b!!%%\Zi]@<VPiV#N
+bfWC#(tP&/GVF2$bVMLR+Gr+]O[,($^a-_FScZFQ=X@gsRFJ?VlEN!hHs9g2r#2I#
+M:PfKn1pIq9f<=X!2>5gIs?C@iKn'J1m18=+!Vcm^8KJ.*n&rgL5tKN8L0Hk;Fr-s
+P`eT`V'M3q.7keJ8lA5+P*D,$,c)cL8L^our:@\_DZ9^_<[<tIo?R@9M7`cf4]ml.
+r3uGCpIkMdaa]*C(">IGjSo5#=oSJ$<HVfMIo"2d!04DbW2f+Pq+$UiDLBrs8KsuV
+P"@)o,a(bt8L0I`P"?pq,a(_Jli-t([5?dkEgq2gYRGdXi&FL*GcsL5T7R"BEN/s<
+[bLc(ci4!aO8Q,Frr@bfn*FABZ9BC%c=ic(jQU\m*$\4TYPUNdro6rW!,]4BP5V#(
+rr@&<rrBL^rQ;uLY8"U7IM(3irr?]iJ)"dgmC*#pEaQ0B5OLBnp=k)-=@k+oG:MPl
+K4">$#Q;Z?rnDAc-2Tn/ro6rW!,]4BQ%Y=[QZB5@fJW[/BAe9pC4GWZrr@*2:[s3?
+<;#sjQ8Z2MSV@s`7.,PVoekk2!95=(!#.$b!5d:d!7a5:pi.ZFV#7'mc@@WdqEa4@
+8L:J$.;Jf`l(>Apjt7m3f>#hE_dbjT#NHEf=\I,V`LfiWO-A+q)VTTHO7HNCH23j)
+PW[N(CCK=UW-O\(?QZhA1$Nk/K@kY!_#FDEeGfO'D>rV2BAe9pC4GWZrr@)DP/Q@H
+EpE.S_6<`#"9.=Zrr?oFqj(%/SqW/pd'B^lU:+E5I;4ZY!Sq+o1`aMg]TR@l8eR)6
+2\HYRM*`tSM$$UNJu#e<ZZOOH*H*G;U+>-d;rQuUgu#\OAZb/e:*N&>!(YS\PY=Z*
+g_s'^,`3;I0<:^D1]$SY2BT86:\1_%kJocUFSjF6W,rX'\u;diI`ma79??NKg<]..
+_H3lpN3/)B[YD&;26CPB!8mjVo=X&"qRh;<)P>jbf$>ki%)0:M]a&a'VYs?T*AO>;
+`GO09D7g5r:QN-A5!a"mX^a_#"'RYa5RGkAF.B+FE\]g*h$CkO'bCV5P"?qK[<"B9
+:$N0=c,QdQHbH)EPIV'al_!1s*lbejLAq6G^^9m$KU+^AY<%`5mF"nljtbmS#nc.+
+q\\m4a,kVA4So#[K\o5Nf0:?#L:_4IY@E4s7q.4d,Q)!B#%_4lg;aeS-j&<k5-eXH
+/LTsmDRMQQj-[h51cn6O/oGJq%*VJAE-r@ZM2@FeON^Bjc*pkbN,L!GHEYhZX4?j&
+RbYNEqW;!LhG5\2eZ9jWq4Z%(".+cYniB0`VZmg'Fg)dIkO_R?EJ[=mIp73>[-QpV
+95AI.E/-OE?"PHYl1b\s_T&U+"AN\A5;EAB.4fkWnn'g@'B.F,FKseZ1$OK84atp,
+P"IUu?H-*qa0[k)OPq=`DPd"blMgi_%PPh=(;'Jr+/9tRm2jaJ$Z.0QA=bSrObrQX
+AI-LZJ3In6rFGc"TCmSiM>KaeN&LBcg3X(6==XQ%[RCnl;#G-a$S&Q\O(5[BY8d>U
+dN?j4Xk4+0b\>s5cf\?r>(;*,]U(NtK*hJ6?2"d<CR5m<;>F#G;uKL%/GdJ?b8MGM
+pIea:+(P0_lT_`F5OLBnp=k)-Gt6B!r);O'?/P;c?G<If8<K2p:W`K,2^/:C.j(Vb
+"(1bN#Q;Z?rnDAc-2Tn/ro6rW!,]4BQ%YDT.<dAH&_Ju@!,(5>ghM?+[f6>J?aK5d
+mPR6&gOHb98M2H9.cDD#?hSpRrPkc7gMcg4q`b2^j&>sXD7BD-KTb>]Eip#,2?*Yh
+i.'NsJ*j]E!-2GQn3?=u5PEi]\QDEU.<d9#*J;I`N#YMpI]o*e9m+)"XDVf@:Zls+
+k"F4=`\7<=:],WjpZ:M;>N*Mj)ZK:*Nd!N70DH\^,a,UfCghfUn+`Beo@8[DL&CPW
+ibnbrcW2<drr=YM#Q<*N!:jLUrl'!jl1mR6epl3b?!-A6e+/"KXT&:#._:"V;<5#e
+T/@mW8?#0+P"JVD,a+CT8L1,XP"@)o,a(cH0C`QP!%VW1iG\Vj(Si]Crr<g!o!VX!
+(B4BLZ$JaWpkSa@?:4:*\Nf4HR8QU%WjWrqn*ul9<kb?XhKCleI8R'_rP]<FFE.<\
+o"G&'p?;MVa=^7=T_6?:>it\FZ42g:MC]m%:\%>3k5PEfrrC3s^\_Kdr.<N?V^Xu!
+r]0s1ETT9Nli&R24dZ./3<'!S?N1$&FFW?arrC)0+9)<khu<[oO8OUiJ*-b2?N1#J
+gqW_qchrB%o7*rnj_eH(Z"O&%0=l1pL\U'-U[K2KO8,LF4dZ./3<'!S?N1$&FFW?f
+.J9151[>9C)=40G"\l1/G42/1AmfkV*eDp.,kUH-#,I\=rrC-?$;<Rr%!(@G"kA"=
+n+BhM2Hc%XSNNlC,a+^TP8O0<g?SpfGn"F,P&p_O?UsAJl!5q]Vm\fU=DN`\o;g3^
+`32&pM:4\&p%ke8R]si8mg[0,a8*`(9@_U3`:D]YLii;31UDFja$N]fF<<psP35$>
+ou#1U_(7;+177fs)QFt,+-BF@N9-F[G:ff<@u6?#4W6n\i9#eOa<Enj_+pH0iP3BF
+9]&;u=0-1?oIW;LFLd1fBCB/S]sk+ck4N&GPLJ>$F_!1tcQ;3jPCQsfp,][nNs2\#
+/T<h(3=B'Mfm*$(*T2DKkB"0.EX<2N57kdZP#iRJVZ-XSCf]*6/]s-'7IHB;Q2oKs
+^/nLK5OiZTbBanji;;`OdQ@WIE'KV1M[u;lIjP*giR@:=H$]0m?'Mm\YFTSrU\+Ce
+e&eTb0._7]8SDe)'>Z2s5g7*`c_9"%[5R<@b8qpChr:&YEJ@$,ET2d8L%urB_GQ0K
+,\UO'*HS=fqL_!_GOKk(TDGD<I7a:oR@fd+7oafAmqFU`6o^Kh/:;N3j]ft/!#FB+
+nm.)hfVJ#`7>r<9qnMAHQMj)7SKfnmU!g->.JW?I0s@%hMbaIj+SYU^*1=?4@Knk_
+<U&K_1jo#p>#<2^@@3@dNU'(#Gs6tGoDYTZ]Bd4,f/Ec4G)ZmK:NI'?rDtrJ=\o%t
+(ggEN1q'9/.rXsC>!EP@0jqeWr)`\MbFHTd6q[BXo6j+QMXn%=`jfohjuTu4(:ZY:
+)gs?Z^<.PiWdC-%MbFkmrrB5e>$iNA]0Yf;l4NX[j^R+i\MmZRF15:fMr*h(\].4i
+c!BE+Cn/6^)2T!.YG]`)H*$M[_nl['p\t5AZdCL3S(7#5*[R-0>@'OX\8M3\[]^A.
+=Y.JV3&rl;XKNhRoAJHBEVl*2.c1rS4FO1,[`ulp%/\[T8L15n+!g1P!*VG?Dc+3_
+BX\n[luO%5:,Rc\R.kHS3d4U#J(D?Ke#aBcR;K&GeU*:7,JkKqI$^[PDlR(RXB=fZ
+W7cO.\tcONj8#V8(H\&a/*etYT:G'=1A1hM!)8r4l;jK/CR(+e,nV.IN,3qP%%P'd
+,\7i2CUc3-\"`Of]$F'FW7!S^>OH,c>Ro@EmgAXDn?IGSrDUU_-5J3tFTppPc.ul\
++:&DeXl#WFX"u!u@!u^fk,XnM(,tJ8eJ>dZ*p$bs;TUA715)?IHF9W"]a.#QOcYiD
+VcV@!$2uaMRVTe*/KWj5;"o3d2m@`@=ASeloqBjD-*5_iC9RX7_R'**eipLll1@#s
+8\2.anC#lE#67"Q`j`o_bAoVIjc2\Vd,'WFoO6(jA''a-!`jKkIh^d>YGW?*()?W\
+2O^$-(Kk7#>!7la\^2.lrrC=SKDtq;=J,<cJ,(t]M(/7\:-?IJN/4020k'3>(mp,3
+B&@D(!1Y&7rr=UT5OJ=I!:jiRc45L,!1$`ZpAKL:2<'H@J'i68!')^:14B./\3AO$
+P"?sehbpSAe9ZQMCNFNq`\.tPFcBfPG]"[-??uN,5Gd:f`S(7k<7NWRLhFjbP?3)+
+#!D\k/7r9q;qc`H%YOc]Q<9dQrI=W"^ZPhfrrC4n:]#UUr0m.DQ1+?M5L)pg%8Xa^
+pBTFK8(ZUuddoL+V\:j-q`SO3Q!25>#45j%-$d'n.pTdhbJSiCFhLuSZCKA&,.+0l
+P"J`6N%a@brr<^Vrd(gpYeQcRr(Z)ElGSp:jhJV2!4lP:9Dh$,Y+beY-iQ0QqP($k
+*CK[P:],@-ogMqXO30SN9696kP"?B;,a(_k8L0HsP"?p`Uln:q.3t'J:M'MVJ)tLM
+r%7pKIq&&(k5PG@a8T,^rrBpnp\$72=T8@4rr@.6aF6mN-iD'W.S1nN<l1"k,a>*f
+8L5V&rf;!j*VgM)YBJ"dO)O\3q%n^d088e[r#bg5O$C?Cn@rFq8KS0Mbl$0KWVUhk
+g=t`!`;GpP+9G<SV?ND/?V(1s(O\++I2(hV7@DKXkNT9Ucc/TBd'9k@`5enoOg_i'
+g=SM+d0&q`X:3bl>`tNR,PZBY*IMi"i>D7q?=3[dF8j_A7Oq0=%]6NrQN$r3^B,4L
+4mfA3Z0,n)$_1"#2(QU+NaoYTIR\DSaL0Sbll9OHP.0r9Hs%a[h&hTjZ*2JKTHj?S
+n.2UK:XB!5om71sAb@k+IuMqE'Cc&;ZFE-h@@sE09QC$dMT>Z#rrCqXGcUF<rOgU?
+9<mQ#B'&3rMC69%dmYo;qXr<%B6F)f@#D8qg)9F)di[`SIV[LN-iPiHBA32<F-n;u
+-gj4hDhbmoJtL-Gp@A9-T;;F/r)WE6q!fEqom\("o+[?ZCq5SXeR,C2qRtBAB7g%c
+J7_5ejFQr.4PIJ]$TAm#@l#bJ`nO4>>3>fOi-^lG/T-.4PGin:]\/02Pe[%J+$3ck
+jR4s)S)hS=>VqiF-2js+>FG2u1=dP2m"m8WNV12aFdBG;Zt&/Y6UepNe,5EI^.WHW
+:(kQkB+ks<kf.V0\<'44P"?qKX?[s>T^ij'=Se6/3j<\[:rLF;><iW2r2+lUq0^dZ
+P&rHT)7W5Upaq^T0iA"4(WO&\e_["mIdp`KG?"-]/(sP:rQ!#k06$2^3u=pUfn5[:
+oi`TbVmDlT(QA#^T6Eom(\IV(SI[<EhAir@iXDr,:R_0r0p\#`rZf%GbjtbT#!XR7
+$WVLseBb8HFY%jMApa5a<]2h\inueKqpEL\Y;&f(3K=S`/TXU;1a%K*1!@V)LCCO7
+jZSLF3MhI22$\-WpQV!Folp=C)VWD!\dO&^[k4=MrGfOM,OSjW*d/TQ6Mr@%I:r/P
+E--@BiFD$3nmF=7l-`iFV2mGgMi$&p<9YZkM31E=Dbe.62>T>_=*m"6Zk>P-On)ON
+6kTr]8&7RqU"/'bY^_S5NHSAhEHGr8?=a'9f%tm"qpu8=\W/4c/TXJnBb3QMJeu'P
+)uO.C?*)NPHP*kr_Ae^>qEX9!4s9&iLF:BgaC<;0oSgB=@aaCa:][.B<P3g6kK,!4
+d:k$TP"AH_,a(fkG*KZ2r+LRQ_#FCmZi6r)d+=k=N=Y8u+7XN(eMULj5MZnAQfM7/
+cfSg2r8&SBP$9PJP"?p`Uln:q2DDn;GPk1mq<Gn]_Z"i<nMbs\WtJ;0!1*Wb"9.P7
+q(M7;!+NNpo_b?VlTaZlY,laVl1mR6epl3b>s:J$nl[QjRZ^5f<2>[K,q1+&8P2Q"
+P#@H7,a>*f8L6Ndpp'i!Q*S0o\,H8`dMJDQ!/hrp>:]^R$\.'d]cgn`6iGCc+o+0(
+TCX;OW?dX,>7Zm-rGh\VbaV_YkD$D4!,Z=u'E!MJq<@REro_&oepl`rG%No#0(LNB
+o8iguqo&g,q&egmrb5T3%N6CED>U$J3AT:\cg<@"r:Kj3rr@,trbFah$%L8sXT&:p
+4oYNEZi:"JZ9HTsre^XTk*3U+OoC4;!9TMoS3Q/pr[_(;Ac;H'V:KkB0<EH5CU9Tu
+&4Y5iJ$?1T50oAjM>mS<Po&%`EP83T`.AYt#Xd[3@t2&ir0GK'Qcr%(qQX=]ppTFZ
+C$M#W.g30fRok1!/<T]c=!#&!l<d6`RF!\Bi>1L'Z"K$1k`:p96-nZdn;oT$Vs2h&
+B&rLPjThT0?btPi,aL6`K/XO5fU$%!k:r=.e[a4l*#dc?#m>4XO8Nhj&,L[goBZDV
+dOVIl8WPc'5_qtNq^e<eACaT^Sq!M`9BhuX3P"p/jLW.Y0Xf"U["f.M[C#o`TLgE^
+jIS`X11YR6QpNJA&OArj=S699>DmHhmUN;Bno02<P%Z_Okdu&V1N>"_be"5Nk9t\X
+GK$F*"g)k$)UMaP(]\;B/$AmP)'(O"h,_7a_$nOu4T>Du<t.B@@<-KmlE"QudEHQK
+pk()H%Sq9_Aic!nYN"VSLUWFC4V-K+YFp$]A(0]<6lu>cj6t^'1[:U`9-\@N\52Pn
+htj&`YL.DH.B`NkZIZGN4s@d0,0rIeanq2AG2+'j5CB*.niHcFI;#oN;VDY*=]##Z
+8PpL@lSm@qVtBSGAT+5r\sKp1_&s9hG2^:(]m4n4prM]#;:M#aR+\AdToX0[@g$T;
+BG'`0jnZ7,jS&17*$cHOYLK/%1NM?j3:Y-l%_D</-,TZ^);2*GoaFI\*SjAJBB'KY
+59fAR2qK+/et1SEYg\^%.Ca575KP%6T>"BgWA2_/gA8p,g-KFjKFu$-CqPK?K>KSY
+EOXT@%Wa0rVhfTt!#OK)<U_#Un8Y(b,55'SB`;.Jh>"#Y+GqFfFFg]3?>]Zt0j@^Z
+`li%JI61`sCNi!aK(P>k?fO?4]0?XQIE\P6,K]A)rr>lsr'(,M)XMD/C\*hXT.s\g
+aQ$Z@Al%(LmDsnbdUSmSq]MquqR-!JaP51L7-X-Ac2RdD!Hd5Y^Eb`8r%`DA/%)/K
+L!=i?=C-T]F$0*aA<nqMC:-"M0OWueQ3(Yd?0M(\5,Na?Z8UW':7gW'^\(A.QMk(b
+dElmjeQg/R[[7Q1]:6;8&CLF1cZ6^=;sP8&WcYnT%Lr*AXXAYe=FO!G69Z]Y;?B^N
+#pY?q[pH.kOamSS;W7dQ7fNHuk1DoY"7$F6%Cu/nY]dRga7Yk-rURN@TDgW#/KpZT
+)U*5Dhc]UknKZcHpocipMfGnK4mY&\>Dlh.BL*Vk20OA=%%?YdI:K2:UKTe*BPGCZ
+FI'\qqjnRH+&U'r<Xl1FQZ2)YrWI6PO[i`#r[_m.qgN*.,ia1ocQ._/J7m)cbL'?d
+1PB/Y?k%[re^2-rh11n-8sO:jMTkL\PD8TOlCQ7J82,Kbaqe:-`l5P5`Z%oqYb(pB
+?2PCVYXNJV0/Z5mVo"Tg-.'0E8L0Htmn"dfk?Xo;4T>C"+4BXCip?[FWbV/`kF^d%
+qHaF)?(^da<d>5M6p.=A((PE]R=.:YLe/kXbF#)g8L5f2P"AB,0B\o+!#'SUHEea"
+^RfZI:#Gd3`0>c5^VKjL\mPG0r'/i:U&@2'r]8C%U8t=86i)7-r,nY)79<9Gaukt_
+F699]8JN["P"A8;,a)&g8L0OrP"?rK,a(_pAc=61j_V-u/cPg#@e>B:rrD'!r`72A
+!5dXfp+Js=rr<W1!-ClTISQ4Wr5eIZ8L0R%_NIJ9PbaI6,q3e?j%KCC5P-3#!(8I4
+E*qWurprAH,Q@a3.m/miV]Y\@oLfEJr5AT,oRk9a?g4Jhoo*,mQ9F0\rr<hlF8l4?
+]q>?.%05<='Du!TbqclDK:g]Z5BH0Uodd[Npl8ZC]E;gSqOQ4.=SQn+*Th;(2H!*r
+?#)QEcBXZd9H%YeR6SE-@/g3dKi0&7LlKNMokY6b#s/0'40J3633iEP&[#i"%J>;Y
+m![!jk6F<Q!6ZohqgQ<XRdj9I,a0M=8PHM+d;]*c3A7TnIfBC$g`L>!J+J;crrD/H
+-iLeer_6M6cb[m:3*?u,L-TaTmBS*rg.LkRf)G`.I\HIQZXsl02_q*-r`t!HrrCI%
+R@E0q*]ZtN,fEtig\<G@cC)s40`VkfqJ&SIZeLKNf5@#R:[7oU7,*Xr`I:"mgcs%0
+GoHF?"+b6@K:rO[?7jd?C$@cf.fpm%]UJcNmrL_WQ)3uo[O$b%oafd(kHX=mK<M*M
+a3d)DolbHfMVL-4e):4^_"V909`<[mQV>%rTlmH.L"%!2O7")Zg<P994Lb3SYB8'h
+L"5]4R=enQ[rO\nVtXFX'aHnFS6699oM"/)l5@-+_^#@VogDlKD4tNMj6"_d>e8[4
+2@+@F,SX4C5Y*diVT/HKO3.D%(7cN$$h:F7L7c]`]FT[PqoZP!5,*.*Q$[PB^FJ@W
+jr9-1dQ<2j%=U(D1mH%LcRA:QP-=!!Ftq2"#DbWKP"@AOTXi&Be<AQPaJV&"Blf(>
+BTc,@!5*792cfm`f!7)6AuYFerr@shKCA!c\kfKD>jKM6r?%h"F`-p6A2NN/hR4L:
+'"DMPnGZPM#;!hd6D?OPm;r*IiabA&^c"uHX7^,*NfDVpo3Qo85+UT\J$bi75:,ZU
+F'd5UOBUTcNBm_m1@u*Uhcm-=1SXP8"!#C"/[*M:n1/MK+.N!NnIAgJ%'ULV.RV,N
+'?TAJ-QJ*ICjE_B8L1UrmPeAHVp[Wl]kjQ,]>0J6OrElr)l+$o@:HS@=S0E)ZS(u2
+^]lXon5j4bQ5n1d@tlc^G%6gH;`ms.-)]2f:'X;/(qi,,;^PapF.N3RETF0W,blX+
+P"?qe9(2fp"TYCCI=LPll2;LP9R#amVQ^:LZ2ESX[/$hQZe%6f6H(r&Y5uQ`:8.=H
+4q/UQGop2Sq-@o&bl"6:Zss=L@/;G^h]p;aZPb#O&NAi>?^o=q`5!HoKm<l[8L1^6
+jWp!\.JKX$8TV&_Q_&\d&*\<\nTKE420p24cgd_-0*D2+chaN>4GWg.*`Doo#<D_+
+^7Un5,a(f3bYh"XP*D,$,c8Qto?R@9M7`cf4]mkL?dCh5-L^m*@S/lUhr'"?0E2"u
+rZCK.;#[)Nrr='PrD?SFNhQD9-iQ0QqP($ga5n@8-+WVF8L01XP"?pq,a(_J8L0Hk
+;Fr-sP`eT`VfV-qed?l/k$=6p::OM0VAd;P#BO03r"i<3!02L5rPH2Ek-$g;6^*bP
+RTsoj,l!JE%V$hFnAN]E�((j.Co&!-#+@!'.$.j.Co&!-#+@!'.+*P"bb.0Dh[7
+/&(hKpP7BC7K3A.56LoD?2enCrrC)("9.7brc;-MS^MSjF]eD"f<L`<hcZAr6O1El
+WMo?-]Uj?VR#&ic8.pUNUN%V.:jN^FQSluPe;YNh,HL%CpugRbgag.bC1$c!i.'N4
+^WpTcUm.Kjjo5=&rM:T`c25EF�((j.Co&!-#+@!'.*MqVCh=O0"saoI,,0B([Ns
+#(99CM#O.3;GP9SiPcs"7#;A\4`jmlB.c`BaOiZWmJ83^cC<4m?9_1s*Nh6.hVdOU
+cZ.b#pQ^+*!$(nIqh97ic!GLT''+"&R2D)YZ`35Pc/j`]&O9C5oO%N;n3?=Uhrck-
+I:rEF='b(*Zgk<X7dCuY*;9OeCn8.e.LP678fX-&84kTp%?3uVc"3D=9XHi$!g6,$
+@>.>":!J/^l59?il>c0-Ol?Dl^G2IaP!f?W3uo"A";0&R?i5!75OK9Dk;=pjF7;E^
+(#S13H.#<ogc9l?5A=d-k&9)u@!rjk!$(nIqh97ic!7a/^:T0nK.`\<C*,m'B;]A4
+%c@c&l1$85H8#&trdgR=!$'nmPhG'8a[G9E#r0l<O'OkL6RGQAqbiLUl`fUKd^@R#
+SpsAIm6*Yr;.jq+#k2n1KR?k2,b[F9&eo<;4Uf*s<^Fe<Ch08)X8`0h5'__Y1U<AM
+3gM!BnZnJs+7idJIN`Q*r\=DU=pLuZV"``]J*J$8e>0-@/dZ=[)#jSZJ,---ETW>X
+:jh7%!1Q+BI_Pb^FO"$*Gh$]HEs`ld!6,Q"VD_Y$O$4#Te,KD@C?\Viiktb5J)cUe
+`S<J'IQug6qtGrkrr<qh9E\a3fkKg=S1>ZuDY;.pO0+sgXb0qS^6Js$"[9pJlY9),
+AU=bVCg>O27cV\Xgs47E(-1<rP=]B8Y`4+`_,=V3P+2D!ri?$BrbBFOO8f2_rr>"X
+!&f3>-1=LJ^:XCFihnlu?iGAR:WmgoH'sEm%7c<DqLR:C@aE3o&JF*_ZWgMuB@6^j
+FhWsWe%B6gh$&#G[Z:X*&E3F$9o8j*\oYY)\<g*@C+ZZ>de(]RP`tZYGVYaBUY\$_
+LGP4tKWK>X^9#ZNKCrfm:"D,BeN<d,$Ch%/I9(/R=b";hIu=C!A<^HbgcaioO5S.S
+m(K1f+6*-NrrD($lMX!E9tp5RCBHm&!'SS/>tb*,oaBJhl'UhV#>\4[e:5CB%3KRp
+@S-(M0L4M+(\`pg)_IC8RTa]Mrr@-fb0.rQ\_.jd^AD3ZhFTp@:f9kf!!,GV!cLu4
+P"?rK,a(_pUAk5RT7R"BE3B3@3N7MgT7R"BE3B3@3NLGg<PIG8ros;Q5Mn8GnG<=O
+^\I!MJ(uQhc>)Kj[f'a3lQ+XOd7`^<29d<*);IOFn5ouEA*#E(OIRL\*[du@o/SQo
+`^[f6$:uM-lq0hpP#@H7,a?rurd!Dk2h1"k&k`W.kC:G+rrAXl8Orbar"&\$rrD,p
+_u5JX+4Ke1j/i7\W[bTbe3BklrrC)Brr?"uFSPd/a^hkEC.T\5;NaTsPbaI6,q1+&
+8P2Q"P#@H7,a>*f8L5g!oF@Gh;l`cQ7+]&!^XR/(qtO=;\b^m+]f^)ASV,a<oVt-s
+Dpgj/IRTV'!#U/0rf$ViI,NRC+);\i9UZ#I\h7>ZISUKhRLqU``@iD4G'-!WFPkdm
+(=9lUA,_q,r]p2go4<31p0n%6FTm%d?Kp@QqQ<:1&Qj5Q^SpUBIdS"8rr<VE,K1)k
+!"YLK-f;oAdo"1MLP5V!DrS9?__CE@QgAeA8L<*$W_"J!;NaTsPbaI6,q1+&8P2Q"
+P#@H7,a>.h^Z*0-#&jE\J*L++01Gm@('+?[brq'2+*1G#Ljutsk!(bQ:\j5M+3EnJ
+8L9>[W?dWu8kC:k;NaTsPbaI6,q4*Uf73]tkBq(F!7+ZK?!]tmhu<Zk3StbT!;"`U
+n&%A]QhM$R(9]n!gjd$7$\X[7/QY),,a(bt8L0I`P"?pq,a(_J8L0Hk;Fr-sP`eT`
+V'M3q.7keJ8lA5+P+*:qcTD+Qn,2if8R[*2n+`Beo@8[GrrC5lJc>^l^\jGnJ$E9H
+qL26<FeA=q=&qA;o_b?VlTaZlY+Hf#Gq>9Ebt01D.T/h`P*D,$,c)cL8L[4VP"JVE
+rr>[T\c$+51C:01TF8r5)t^Z<Mb!bVFmn+drnIjQ1%BaKo!o5Mr8&Dr,@"'8iu&4?
+/9ln?Er!!N-tAKml3#A.\e"Urf=u@0qf!k]!&;(ZmT'8eD?UjQJ)NWeT?I67iK=*i
+^?NjkR\/5;3[qBZlLF-YT50&r4A1V:lZa83i*k)i=4*jqPN#([k#X)+C[-q'#?,MY
+;/67_Bf1XWFM-g$i(E?;(&n7S4u8+hc%D>DElTdP;)opN*[o2Wo`"o\&cVhj\mGp.
+V2@$uiaXDU!:N;MPqG_qrr>ge1$RtgO*)hu\,*8XVr[<h]$q4`LL3lp]*dGjEsjA2
+Se&p-Yl5*XT8%Fb^GYjASRh92022BGk++V=>g>!P'_1i@:GK3:#qgl0@s.7rX8^lr
+gm@rYlef6SrO<ZBrrAtr'E8&hr4i4K+6)8Xe!U.82*\=XqFdL]!1;ShpF?1C[fTq.
++0U.T?hWDNrBKeDr(lGS!:\)0!#9q2R/[.D5Hqfs8ld[s=R+`dbU'D3l80t@6kDU+
+fISLD,a)&g8L0OrP"?rK,a(_k?B>(:J)ni"q!n@a:`#WT8,iQ)5OrE!r-85AW!]`H
+5MYi$+.GJBr:'8APM)ap9-)JZ8L0I`P"?pq,a(_J8L0Hk;XuKDrrDhncM6#k!1p5t
+]"Ese^]#^(^,>ojkGm(iL4;?>mN9_+?@2LXrr@E>(C;@M>-<178L0OrP"?rK,a(_k
+8L0HsP"?p`Uln:q.3t'J8kC:k;NaTsPbaI6,rRHlSp1*,htcQUP/@3DhsiXTkGo4m
+rrAAb!!E5bJ,(berr?N>L\1M:q!100MQX%'&*`mSn^`3?'jX!f..ULmc^L"g,ZLS&
+8L5f2P"A8;,a)&g8L0PQ_Tp?hfaZ'@Ygm61NX5,nmMDOE?i&H4e\cCt,9J_$K_o-T
+6@U3NFPr6H"pi]iZ@4\2!#PH,NFVp#p@H4'4RaDci@j&KJbi;0/^<A<O/H*Ni-,+:
+q^P6pqRuRPeSW4i,e]^(-^PA=cQA&3CU'21[T)2Y3(mN*+G8G\][PlT#Nl!rS(d"5
+ks*GSNk"WjlCRsje2pbmN-rQgTQTQ6\7Cao/G<X#P"@)o,cGj7[=cl*olAsYGOor9
+=1n>>ihXDC0/JbNE'd\_9[mJOA?D)k#an56#3<6H^78r/IRDjqC_Gp@^]ADh=FRg:
+RCa!+'29H-mN1o[qkN[a4_s?fG?_Lo5+O8iUS4U>4O8lU=c:XU!WN-5nT%kscbos-
+EuW.9c&WJ,rV;MYFM6J$DrNOqE5cgP=alUMJ5Sra]#K>b8L0OrP"?rK,a(_k8L0Hs
+Q_XQ\M]_aN1]BLde-5"CdJj3cO8PE6rr=*)l2n$V&,/3!a6(^irr>/DO6$"K,a-2i
+e<3BKV'M3q.7keJ8lA5+P*EV;lbEEKF1sO3!9^B6Y-0&Gn,EBFSF;Geq<GA3iLeFh
+qhOd$=.]D/5Ml?m_FZ#=X.H,M8L5f2P"A8;,a)&g8L0OrP"?rK,a(_k8L0HsP"?p`
+Uln:q.3t'J9oLagSc8['GQ)on,d>%TGPk1mq<Gn_J*"G\rrBW;r_*/RfWLqH5:?Fk
+chaB:WuXS(IS]laTCkWS:QNX\Q:l;]Uln:a.3t'J8kC:k;NaTsPbaI6,q1+&8P39,
+e-rG1Am:'B-P_mc%;/KX/H]pH/!=2Ypq4W$NL,r$dsGg7qL`ef!36J@r\iiXO5Sg@
+S7<af,68ntY#C.]I:=b^BAqd?Ae[e:-ccOq8L0Xe]?3]G`9LGBelu0$m'ZI+[K`.P
+r(!3]T9C$a1>p7\69kXj0Of/?1d/jW&eYun#k6B(^8Ie,!(_ZQe$,E&7Z5?.o!3<l
++-Dn"XL6+(kB$.`?GO4GY%)mDXCb<@)fpp-nm$Atn11dD!3Q5oIfBC.N5e'?KI7X6
+iXl<M$f6`)>jmRQ_i39L+HDf;p9[^h-/Q1)8L0HsP"?p`Uln:q.3t'J8kC:k;O=0Y
+!/hrp1Gf"mJ(+Yb$dntS`K0qbRK!7.5O&<NnIP@V]Z90\ao;?'4HJRsBdAk^FOZIF
+,c)cL8L[4VP"JVD,a+D)MsJ.W.W`<]rrD5^f<2;$qX=FaMOa-pJ,/B;GN#1?9DaM9
+McZMLDEm"VKu-D,QE-UQP"?rK,a(_k8L0HsP"?p`Uln:q.3t'J8kC:k;NaTsPbaI6
+,q1+&8PP-skFMVQ'6jG%Yp?QgSp1*,htcQUP^hf0_#FDG?iE^r5M3-4rBD\/3m[Ys
+X/d7.qL26<FeA=q=&4n"4I/W]k+n/3'e(Dk8P2Q"P#@H7,a>*f8L5f2P"A8PRIrc`
+m+hab6os_dTC!:6oKZ_r!HA*S:4P!%XQ/rURomaYC9&,IZ-RUo1^:*Qr]]J2h0Dan
+!1@KDA0W*g]t!R^FgI/j*t!hu11WI92>7%M]\.Yd>>*g?>1"sB0E<-8>VFZHXmXEj
+J^W=XO7[7uBPd6XK7>AKoon]9rF*__)J[+okj[m_]DT=-!cS!?rr@p2j`if3Lr;qE
+P/Vt;*.=YIoB\ArT$*]"JXti<C-SOIra#p#o.k8?)3p$L?*)tFaF$>HDl_buEOstT
+PN&[PO*t<)r2+_"aLoViX)4TNh+NYW@GKHk_$#!7T8rpO`Vs*%GeI+<R"5-9E&A`f
+Qg[;ZVaeEOc-M]AR_\jKrZ3_tY<;[UNTg&M=:I#8CZisJccFJBriLTbX/Uj4B9?M-
+%<i8jiSa/N;uC(a:-K_$+$o=nTBhKSrh-DYr\!d>cbY+k#!Q+WJ]B=GSh'aW`/Z7g
+-hO-E!9eKfLGR'mR*CGL0+lRgd(D\:,eY5=;Fr-sP`eT`V'M3q.7keJ8lA5+P*EX%
+r)it!adJdkj8P])3*q[F/:Za)chR&1!)OD;Ljutsk!(bQ:\iu1Ij_Qo,aLNhUln:q
+.3t'J8kC:k;NaTsPbmGJ?2jop;k<H^rr>2_]leT:f73]tkBq(F!7+ZG^C:*f?edl9
+>.jV$EW5_!/eU`$[9WAMP"@)o,a(bt8L0I`P"?pq,a(_J8L0Hk;Fr-sP`eT`V'M3q
+.7keJ8o.pc4R`'7^[p!4-&)9g^Z'/2!7+[kU]1<GrWiDMrrDUsiVpf=&*`mSn^`3?
+'jXr,+4Ke1j/i7\W[bT-ISo13>G!buP";QD,a(bt8L0I`P"?pq,a(_J8L0HkB2,7]
+X1=l_f&6$.#AK`0O'DIuS_#D6]N7`iKe+Tb5J2A9b=P&b;[-LZq2+-jZXFK,3LrhH
+l\`8VXnQ'U:,+F8+u6;EhNX0p.@-qYP"A;u5m/#L:dWaXqTGGZ3`A(O=DaNK*%s+\
+L<Kb_Y:CbB%W52M0g&Soj,E/QIc`($RM,$!m+HK$:'*a;+@oIeE2@%P"#Ho^p3[dL
+IA*Ll)9`RdiiB5_r*01$ie?:b>0m&B-g$i;NcQ,+McM54c7qIV3M5n9lR2[5h=hHK
+9E&XRAH)YPqnD%fle'Wghs!8<\KAle[sm9HhO!0qkPWd)ao;@+pO0sVdf0<9?WfVa
+^@/R]HM01Yrr>XPrQ+t&`F!S>mn<.tF8fm%AH)YPqnD%fl$pr2XIo;qGMGErHQ#J*
+V"4NGIim[R\3p"epc^_<!&VEqJ)u+9E;oLEk*OXpr3*a#+5X\j,eqcQIr[c7nQ4Kh
+qpPBa*<-#-?WfVa^@/R]H=-8:lR2[5h=hHK?H/.8krc_k+34/WmL]?]ILhHgbqH/j
+q-S@$5J;3S;m*1d`YJ:IIDZ-0mGCi[d(,jC&gD\*fm2cUd/KA_rr<jJrDQXgbY+Lg
+_([)OCN87\Y>e.'Gu/P"P".mJ\ij^(mJ=<l!1">tkPLGB!1gl*rrDW,T=k1(Eq.)4
+TBOL+^G!M"1&_*$]-##c5Pa(,DuTeg.JqHc-3!s,I]`VMjb5pEroN0s-2rkBqssYL
+K"h6b5M_C[q]Gb'qR?J)Q5';\qi^sZS\J5*!:n"!]`.tPn\gUj!(LGrq0jF%?[n^9
+a74S=rc\6ErrC4LIe3N[J'QrPJ,*MKhLE(\i^nWp0n0&8&)aY+chCrE^;p6R4+==3
+!9Jo!H2cm>kASncr33*f5MWnk,eq`o^OBOFn5nN1qm$'+A,cP"^K1@7o"q$3rr@*2
+5HVJ@q;5:q19iAGdpZk/[t>F#Vst-<,r[L!_j?LMAKj[IBob2//C>%P$9+]B8L7f!
+8L0Hk;Fr-sP`eT`V'M3q.7keJ8lA5+P*D,$,c)cL8L[4VP"JVD,a+W6?dCh5-L^m*
+@S(!X4R`'7^[p!4./s:jIt@V"FMIa?pj]PS6i)7-r,nY)79<MNL\1M:q!100MQWQn
+P^+gGkKQRDOt'@$,a+CT8L1,XP"@)o,a(bt8L0I`P"?pq,a(_J8L0Hk;Fr-sPe+'g
+DuTfp(OtCZ5O+WH<RlSWJ,E-Trr<F0rr?$;(H)-1:[XND?hr?(GWqd`8Lu5l8L0Hk
+;Fr-sP`eT`V'M3q.8.uO`eX3!&,<b$lC,BqH0=tLrg/39!#K;H;cTDVrQu-)IRSmZ
+raoM5c/K@--*lY^,a(_k8L0HsP"?p`Uln:q.3t'J8kC:k;NaTsPbaI6,q1+&8P2Q"
+P#@H7,a>*f8L5f2P"A8;,a)&g8L0OrP"?rX0Ya3'r(Z)ElGSk&rd!Dk2h1"k&lJZ/
+QN$peronq.0C\uA@_.?er1EcM5O+-/XE>'<q*4E#J(59>5!LId=Y7sgP"?ouUln:q
+.3t'J8kC:k;NaTsPbaI6,q1+&8P2Q"P#@H7,a>*f8L5g.?fKuC!#.'c!5d<:eM2*F
+WrE&7rrDhfGQ&Aari(c-C\`p]h(5)2o<A5`I6f-A=AH/b8L0OrP"?rK,a(_k8L0Hs
+Q_&\d&*\<\nTKE420p24cgd_-0*D2+chaN>4GWg.*`Doo#<D_+^7Un5,a(f3bYh"X
+P*D,$,c)cL8L[4VP"JVD,a+CT8L1,XP"@)o,a(bt8L0I`P"?pq,a(_J8L0Hk;Fr-s
+P`eT`V'M3q.7keJ8o.pc4R`'7^[p!4-&)9g^Z'/2!7+[kU]1<GrWiDMrrDUsiVpf=
+&*`mSn^`3?'jXr,+4Ke1j/i7\W[bT-ISo13>G!buP";QD,a(bt8L0I`P"?pq,a(_J
+8L0Hk;Fr-sP`eT`V'M3q.7keJ8lFrh`P;C#?2jnYXT&:#@c^Zkr[n-MnNu^B/SG#\
+'O98])*b]83Ig4#rS[O(8L1O2AL*F1.7keJ8lA5+P*D,$,c*.Vrr<rZddTK\m/I'c
+C@jCHTAr<8?3gC6TCkoZGn9X;4Jhih%WhH6I6TZH8L0VFR&#m:,q1+&8P2Q"P#@H7
+,a>*f8L5f2P"A8;,a)&g8L0OrP"?rK,a(_k8L0HsP"?p`Uln:q.3t'J8kC:k;NaTs
+Ph<kPH/J-NJ*3jF9+1RYJ&L1C!1p8`8,c`j&,W4'!9Co4rJKk^e+/"KXT&:#._;n7
+5H!TB!687B!)us?q#$o/A@Fa;8L0ErP"?p`Uln:q.3t'J8kC:k;NaTsPbaI6,q1+&
+8P2Q"P#@H7,a>.UIuAgS:qQ`-$X*K0<5m"_X8H3%!9/^ipfc#?VC9!Yjt_F.Z?#sF
+cGTOqo`UFL@62P&,a)&g8L0OrP"?rK,a(_k??uN,5Gd:f`S(7k<7U2JcTfF)oXk_0
+]0GSLXR[J$Lj;Ya/0*jE1AZH<&<]U:QSD&WP"JVD,a+CT8L1,XP"@)o,a(bt8L0I`
+P"?pq,a(_J8L0Hk;Fr-sP`eT`V'M3q.7keJ8lA5+P*D,$,c)cL8L^our:@\_DZ9^_
+<[<tIo?R@9M7`cf4]ml.r3uGCpIkMdaa]*C(">IGjSo5#=oSJ$<HVfMIo"2d!04Db
+W2f+Pq+$UiDLBrs8KsuVP"@)o,a(bt8L0I`P"?pq,a(_J8L0Hk;Fr-sP`eT`V'M3q
+.8-]@!#GS7pn;p2(:4">Mj7RLpp^8'`='HM[@d+c;0-*gAH(h(jo5=OL\HGd#pb\N
+Fd/%\,c)cL8L[4VP"JVD,a+D)oDE9O9>LQ-MmND^X3fIiIuP!'GTZI!J(6DZj?MH3
+nsAE>3R?i!o_dPh,a)@a@Zj;.PbaI6,q1+&8P2Q"P#@H7,a>*f8L5f2P"A8;,a)&g
+8L0OrP"?rK,a(_k8L0HsP"?p`Uln:q.3t'J8kC:k;e$42kC:G+rrAXl8LuOXSc8['
+GQ)on,p2r$n3??-rrA5^!"\cRW..UbrrA(crhuj^a&)c-PQ(V'BDk\-e)U"[-'I'Z
+W?dWq8kC:k;NaTsPbaI6,q1+&8P2Q"P#@H7,a>*f8L5f2P"A8;,a)&kcdbe"O3fqU
+cH33^0\#C]f+Tbg5Fb5q`^pKPA;PuJOJ8,`_EpV/qFCNFh'`3]jSo5,rrC0;rrA('
+8cJe#\Nf^NnnZLu<PQrZ^[@`$Z[MF(EV;SYrrA('8cJe#\Nf^NnnEU6S^N#U/l2EV
+r0m5!P5bMPo)A^$IaYF6B'qk'dQd9Iks+nY-iSo#9eZEc\ki:Dao;@7rrA6hDN\Aj
+ra5Cqg/[mkh8e1E8,bO)-iW,drrCFG!6M);!027prrBR>5P.22CX(:#r?'5^l2+)e
+q4"nk+%ZD3a#g*s!8LhOqB,Mi^[]V65PGsAreLJIH+HRsU\TDq5A=3V1NspNko]]`
+FJ&GgPQ(VMrr=CGBB-c)@MWPI_D,8K2*>DiiqRIEo_3S_$$n9"Yl93Crr=%rqNW+<
+&EP$U@K]F`<c<C&ilaMp6QSU744]m9k'uE$e\CNQ2uPu=Jm\<*ol'_mNW/uSrr=1T
++XL4g+j>E)qZC?rG^CO?o7-[SHFNjq`r?%:rrA-Rrr<uZXoABAZ+oQ'!9=rl,a\?p
+R/Q";"b"]-A+mWTrrA%><rW01=PrcN!:gGGj($WSmT):F5Q$-*KTc?8895lc5/=A4
+iTu$Fc2Re6Z0L6@.i\J[r]r48CjNShb/XG]VuHaY?BC=Wkmh4tLY*@94?\bZq7lne
+4^7pI@t2u-!6?Jd!0*%?rrBT3ht6pKndEkY9Dp$XIdm49^?:9Vqd2;^!63'[J)%,D
+qLA;D^[\SohtJW?rh'0UH9t2QUcFLm+(/1*nFf(^k5PGVf_'1[Q&YeD:]CD;Qi8m+
+>Q3_oJ(+Dta=g(U0D(#Sqnqb-qjnkLm<mgk!#lu]rr@)E^Zkauj:_Im`lG-0goPGj
+J,'94#poS4k!+*=JR<K9f_r"CrrD(he\CNQ2uPu=Jm\<*ol'_mNW/uSrr=1T+XFhN
+*67LYYUf-dHQTZeJ,F,/\,FIhrrAts!0BkR!#lu]rr@)E^Zkauj;4U;Qhj(:rSdGR
+IErF6p:bJF!0*%?rrBT3ht6pKnd0g+A(A?^<]BtAr.=QoP5bMQF!&%Y^ot<-m!dR2
+rrDSolJM=d)ucK/5qi.PHFNjq`r?%:rrA-eOHNu8%V,6gfG4-C4ce=m^]$,S>Q3_o
+J(+Dta<gidNK7-?!4c4ho`"p^$doY\r?9C6nG<:$kD->>?T7ub`lG-0goPGjJ,'5^
+nZhB:pF@3^TDh-&6:l[&3KN#=?ru.Qp-3?TrrDiHol'_mNW/uSrr=1.r\coDroIX>
+e,KEh01\YfoS50u_s@a-SfYr>I,Fr()]l-]!-5?Zl2LbE')qsOa/a^FXDdrbq$$!h
+-2s"g5BqU-?ZX-;rND^j!97S>^[>,]rBL43?hi:HDu5fZrr>jp!$Jru,eqbIa6sPC
+/+.Y/+1:^QJ+7C+Bs>;(=QC6"br>4e3J6ofP`kZ,OSea#/h7`<Yh;6_`EY67mruZq
+L\1M:q!100MQX%'&*`mSn^`3?'jYWGjW70-[m"Ou,`tuf8L0OrP"?rK,a(_k8L0Hs
+P"?p`Uln:q.3t'J8kC:k;NaTsPbaI6,q1+&8P2Q"P#@H7,a>*f8L5f2P"A8PMuG7l
+TP"3(a#F!oH.)=lnR;@u2uYhPod[F8ro]W8r7Um1kG.*f-acMkQ8>D6P"?rK,a(_k
+8L0HsP"?p`Uln:q.3t'J8kC:k;NaTsPbaI6,q1+&8P2Q"P#@H7,a>*f8L5f2P"A8;
+,a)&g8L0OrP"?r`)q7*MjSo5#=oSJ$<HVfMIo"2d!04DbW2f0WO30ST=`/W:P"?jo
+,a(_J8L0Hk;Fr-sP`eT`V'M3q.7keJ8lA5+P*D,$,c)cL8L[4VP"JVD,a+CT8L1,X
+P"@)o,a(bt8L0I`]bgTKImD9Y!02!r9(SnC^Z*0-#&jE\J*L$OJ,R\H1&80HJ'UX+
+r_I9l8M"LK8L0Hk;Fr-sP`eT`V'M3q.7keJ8lA5+P*D,$,c)cL8L[4VP"JVD,a+CT
+8L1,XP"@)o,a(bt8L0I`P"?pq,a(_J8L0HkHoJ!R:W`V:NjJ_`Wp7W$rh#DS!$,_N
+;,u48+-_%1ZJ>8T,a(Sg8L0HsP"?p`Uln:q.3t'J8kC:k;NaTsPbaI6,q1+&8P2Q"
+P#@H7,a>*f8L5f2P"A8;,a)&g8L0OrP"?rKH8#&trdgR=!$'nmQ01ffJ&R38%,^jB
+rrCQKh#@BOSmGpuBB9'mSr]$3T%,*L=O*@u8L0OrP"?rK,a(_k8L0HsP"?p`Uln:q
+.3t'J8kC:k;NaTsPbaI6,q1+&8P2Q"P#@H7,a>*f8L5f2P"A8;,a)&g8L0PqDc$G*
+PQ(V'BDk\-eW-@%5:?FkchaB:Y(f.hno86Oo28.*MNj8q,c)cL8L[4VP"JVD,a+CT
+8L1,XP"@)o,a(bt8L0I`P"?pq,a(_J8L0Hk;Fr-sP`eT`V'M3q.7keJ8lG:gnR;@u
+2uYhPode=SUAk4O&*OnGn]h(6WE$M/!;AUga6(^irr>2(,PaL&8L1R32'e>V.7keJ
+8lA5+P*D,$,c)cL8L[4VP"JVD,a+CT8L1,XP"@)o,a(bt8L0I`P"?pq,a(_J8L0Hk
+;Fr-sP`eT`V'M3q.Ic2frBD\/3m[YsX0&J\X*oEl\IW=KaE(X&a<J)Z"iUTCD#IfB
+!6XZ#qeb6G\)Weq%pX;G*-7-`I59]bEtVZ+o4RA"r`<Y1!8DDjjM0j'efXgmao;@L
+h>PFl\GlPX5A4--5M_[Y>f;r#r7UqarrA>;5PEjH\M*cbonWPI/$aZl[srF)mQ]Ti
+g(j#$pLX%70dWat!&f;1rrD/(:]7`jmS!OqrF,^+b3YbtD;X-8]8u^Hp4[j7rRlUQ
+bXlOK!6q.;5P\TKrr?oJqi^sZRm1#)o"-:KgNWB<mc49@rLmQQrr@4L@<3&bJ+I==
+&,oX@rrCekroCiVcdj39Y0$\D[b^o(Has(UIQqLI[m/]8fNc@\TD[C=_uB_%fg#2b
+^UZ#nZh9+R!%Y@)mC.Rc?LC&8O4k?9chD#E(GR56rr=s+Yl=^bG#/(Fn*WjJD#IfB
+!6XZ#qeb6GQb/=Qj7\1RF8ad?L!3,&rrC<9X?ZMdPQ(W"]DIck!1Q2TJ+C3!rnDYk
+-19glq#-mmh#@@t?X\!g>(?-VlOWtrAH)YaDZ8_3k0MU#r3"0A!4L_^aa:Pt!.I.G
+=1:EMQe5Q]QCn*.qSW=5Q.\CqgV:9Pq6TaLrr=RTJ*j^pEaJ/uhiHJ+mEbN<p(oG0
+VuH`TI^&hPj`XGu[dWWWrbVOArrC4.TDNK_gm>X6pZ(t$HZT/=I>,m:C&\1XT<(9Q
+?'G9gD7f\.rrANQ=F]nR-iVkEpEf7frV6>b?JPP\G$e[!&mBeVBBp*-=(M=2gM[#O
+^ZNkn+8i:`rrBL`rQ0Drrr@L4BNMZ-h3Zc!`0R%ng%rVd!0u5%p=m?m0DVsIL]7?)
+Z@D8NIr\l`5MqOU(%'?AAbHop-)^bC2L_n1!9JB"rO21_9E&c+@K->Mm%=/lhqXR1
+O8%].KmRn>fmSRu8SS2)c(D(%q-B3a!,]@FP5bNO5?NF+]-mU4GP<EOj8JcOTjHOS
+!-V^XEu1SN!/hBO)8G^drrB$'DuA;b_uB_%fg#2b^U\Pqiq''\FR1QeB2N8&T5.(g
+N@cC[p6AjRS0`bP8/#KB40rshONeDI7YdmoeteI%+js7[,a+CT8L1,XP"@)o,a(bt
+8L0I`P"?pq,a(_J8L0Hk;Fr-sP`eT`V'M3q.7keJ8lA5+P*D,$,c)cL8L[4VP"JVD
+,a+f"f`~>
+
+n
+Q
+Q
+Q
+[/EMC PDFMark5
+PDFVars/TermAll get exec end end
+%%PageTrailer
+%%Trailer
+%%EOF
diff --git a/docs/publications/MODELS2010OCLWorkshop/easst.pdf b/docs/publications/MODELS2010OCLWorkshop/easst.pdf
new file mode 100644
index 0000000..e14d7ad
--- /dev/null
+++ b/docs/publications/MODELS2010OCLWorkshop/easst.pdf
Binary files differ
diff --git a/docs/publications/MODELS2010OCLWorkshop/eceasst.bst b/docs/publications/MODELS2010OCLWorkshop/eceasst.bst
new file mode 100644
index 0000000..09bdb5b
--- /dev/null
+++ b/docs/publications/MODELS2010OCLWorkshop/eceasst.bst
@@ -0,0 +1,1170 @@
+% EC-EASST bibliography style
+% Bibliography style for use in articles for the
+% "Electronic Communications of the EASST"
+
+% Fields
+% ======
+% Additional fields "doi" and "url" for information
+% on online availability
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ doi
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ volume
+ year }
+ {}
+ { label extra.label sort.label }
+
+% Macros for month names
+% ======================
+
+MACRO {jan} {"Jan."}
+MACRO {feb} {"Feb."}
+MACRO {mar} {"Mar."}
+MACRO {apr} {"Apr."}
+MACRO {may} {"May"}
+MACRO {jun} {"June"}
+MACRO {jul} {"July"}
+MACRO {aug} {"Aug."}
+MACRO {sep} {"Sept."}
+MACRO {oct} {"Oct."}
+MACRO {nov} {"Nov."}
+MACRO {dec} {"Dec."}
+
+% Formatting Helper Functions
+% ===========================
+
+% Add a comma between top two stack elements if both are non-empty
+FUNCTION {format.insert.comma}
+{ duplicate$ empty$
+ 'pop$ % second empty, first left
+ { swap$ duplicate$ empty$
+ 'pop$ % second empty, first left
+ { ", " * swap$ * } % first ", " second left
+ if$ }
+ if$ }
+
+% Short editors without punctuation (for "In" clauses)
+FUNCTION {format.editors.short}
+{ editor empty$
+ { "" }
+ { editor #1 "{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al. (eds.)" * }
+ { #2 <
+ { " (ed.)" * }
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al. (eds.)" * }
+ { " and " *
+ editor #2 "{ll}" format.name$ *
+ " (eds.)" * }
+ if$ }
+ if$ }
+ if$ }
+ if$ }
+
+% Book title without punctuation (for "In" clauses)
+FUNCTION {format.booktitle}
+{ booktitle empty$
+ { "" }
+ { "\emph{" booktitle * "}" * }
+ if$ }
+
+% Date without punctuation (to be used after
+% publisher or journal, includes month and year)
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month }
+ if$ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$ }
+ if$ }
+
+% Volume and number (if only one is given, printed
+% plain, if both are given, vol(num))
+FUNCTION {format.vol.num}
+{ volume empty$
+ { number empty$
+ { "" }
+ { number }
+ if$ }
+ { number empty$
+ { volume }
+ { volume "(" * number * ")" * }
+ if$ }
+ if$ }
+
+% Pages dashified
+STRINGS { rest }
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages 'rest :=
+ ""
+ { rest empty$
+ { #0 }
+ { #1 }
+ if$ }
+ { rest #1 #1 substring$ "-" =
+ { "--" *
+ { rest #1 #1 substring$ "-" = }
+ { rest #2 global.max$ substring$ 'rest := }
+ while$ }
+ { rest #1 #1 substring$ *
+ rest #2 global.max$ substring$ 'rest := }
+ if$ }
+ while$ }
+ if$ }
+
+% Are there multiple pages?
+INTEGERS { multi }
+FUNCTION {multiple.pages}
+{ pages 'rest :=
+ #0 'multi :=
+ { multi
+ { #0 }
+ { rest empty$
+ { #0 }
+ { #1 }
+ if$ }
+ if$ }
+ { rest #1 #1 substring$
+ duplicate$ "-" =
+ { #1 'multi := }
+ 'skip$
+ if$
+ duplicate$ "," =
+ { #1 'multi := }
+ 'skip$
+ if$
+ "+" =
+ { #1 'multi := }
+ 'skip$
+ if$
+ rest #2 global.max$ substring$ 'rest := }
+ while$
+ multi }
+
+FUNCTION {format.series.vol.num}
+{ series empty$
+ { "" }
+ { series }
+ if$
+ format.vol.num
+ duplicate$ empty$
+ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$
+ "Volume~" swap$ * }
+ { "~" * swap$ * }
+ if$ }
+ if$ }
+
+FUNCTION {format.add.chapter}
+{ chapter empty$
+ 'skip$
+ { chapter
+ swap$ duplicate$ empty$
+ { pop$ % Previous empty, chapter left on stack
+ type empty$
+ { "Chapter~" swap$ * }
+ { type "t" change.case$
+ "~" * swap$ * }
+ if$ }
+ { type empty$
+ { ", chapter~" * swap$ * }
+ { ", " *
+ type "l" change.case$ *
+ "~" * swap$ * }
+ if$ }
+ if$ }
+ if$ }
+
+FUNCTION {format.add.pages}
+{ format.pages % Previous information and pages on stack
+ duplicate$ empty$
+ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ % Previous empty, pages left on stack
+ multiple.pages
+ { "Pp.~" swap$ * }
+ { "P.~" swap$ * }
+ if$ }
+ { multiple.pages % Previous ", " pages left on stack
+ { ", pp.~" * swap$ * }
+ { ", p.~" * swap$ * }
+ if$ }
+ if$ }
+ if$ }
+
+% Field Output Functions
+% ======================
+
+% Helper function for writing non-empty stack content
+FUNCTION {output.nonnull}
+{ add.period$
+ write$
+ newline$ }
+
+% Helper function to test for non-emptiness and write
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$ }
+
+% Helper function for formatting author and editor names
+STRINGS { names name }
+INTEGERS { ptr left }
+FUNCTION {format.names}
+{ 'names :=
+ #1 'ptr :=
+ names num.names$ 'left :=
+ { left #0 > }
+ { names ptr "{f.~}{vv~}{ll}{, jj}" format.name$ 'name :=
+ ptr #1 >
+ { left #1 >
+ { ", " * name * }
+ { name "others" =
+ { " et~al." * }
+ { ", " * name * }
+ if$ }
+ if$ }
+ 'name
+ if$
+ ptr #1 + 'ptr :=
+ left #1 - 'left := }
+ while$ }
+
+% Authors of a contribution with period and newline
+% Field: author
+FUNCTION {output.authors}
+{ author empty$
+ 'skip$
+ { author format.names
+ output.nonnull }
+ if$ }
+
+% Editors of a book or proceedings with period and newline
+% Field: editor
+FUNCTION {output.editors}
+{ editor empty$
+ 'skip$
+ { editor format.names
+ editor num.names$ #1 >
+ { " (eds.)" * }
+ { " (ed.)" * }
+ if$
+ output.nonnull }
+ if$ }
+
+% Minor title (article, master's thesis, ...)
+% with period and newline
+% Field: title
+FUNCTION {output.minortitle}
+{ title output }
+
+% Major title (book, PhD thesis, ...)
+% with period and newline
+% Field: title
+FUNCTION {output.majortitle}
+{ title empty$
+ 'skip$
+ { "\emph{" title * "}" *
+ output.nonnull }
+ if$ }
+
+% Journal information
+% This fairly complex function does its best to put the pieces of journal
+% information together in a readable way.
+% Fields: journal, volume, number, pages, month, year
+FUNCTION {output.journal}
+{ journal empty$
+ { "" }
+ { "\emph{" journal * "}" * }
+ if$
+ format.vol.num
+ format.pages
+ duplicate$ empty$
+ { pop$ % pages empty, journal and volnum on stack
+ duplicate$ empty$
+ 'pop$ % volnum empty, journal left on stack
+ { swap$ duplicate$ empty$
+ 'pop$ % journal empty, volnum left on stack
+ { " " * swap$ * } % journal " " volnum left on stack
+ if$ }
+ if$ }
+ { swap$ duplicate$ empty$
+ { pop$ pop$ % volnum empty, leave journal on stack
+ format.add.pages } % and use format.add.pages
+ { ":" * swap$ * % journal and volnum ":" pages on stack
+ swap$ duplicate$ empty$
+ 'pop$ % journal empty, volnum ":" pages left
+ { " " * swap$ * } % journal " " volnum ":" pages left on stack
+ if$ }
+ if$ }
+ if$
+ format.date
+ format.insert.comma
+ output }
+
+FUNCTION {output.journal.crossref}
+{ "In \cite{" crossref * "}" *
+ format.add.pages
+ output.nonnull }
+
+% Fields: series, volume, number
+FUNCTION {output.series}
+{ format.series.vol.num
+ output }
+
+FUNCTION {output.series.crossref}
+{ format.vol.num
+ duplicate$ empty$
+ { pop$
+ "In \cite{" crossref * "}" * }
+ { "Volume " swap$ *
+ " in \cite{" * crossref * "}" * }
+ if$
+ edition empty$
+ 'skip$
+ { ", " *
+ edition "l" change.case$ *
+ " edition" * }
+ if$
+ format.date
+ format.insert.comma
+ output.nonnull }
+
+% Fields: series, volume, number, type, chapter, pages
+FUNCTION {output.series.pages}
+{ format.series.vol.num
+ format.add.chapter
+ format.add.pages
+ output }
+
+FUNCTION {output.series.pages.crossref}
+{ format.vol.num
+ duplicate$ empty$
+ { pop$
+ "In \cite{" crossref * "}" * }
+ { "Volume " swap$ *
+ " in \cite{" * crossref * "}" * }
+ if$
+ format.add.chapter
+ format.add.pages
+ edition empty$
+ 'skip$
+ { ", " *
+ edition "l" change.case$ *
+ " edition" * }
+ if$
+ format.date
+ format.insert.comma
+ output.nonnull }
+
+FUNCTION {output.book.crossref}
+{ ""
+ format.add.chapter
+ format.add.pages
+ duplicate$ empty$
+ { "In " * }
+ { " in " * }
+ if$
+ "\cite{" * crossref * "}" *
+ output.nonnull }
+
+% Fields: editor, booktitle
+FUNCTION {output.booktitle}
+{ format.editors.short
+ format.booktitle
+ format.insert.comma
+ duplicate$ empty$
+ 'pop$
+ { "In " swap$ *
+ output.nonnull }
+ if$ }
+
+% Fields: publisher, address, edition, month, year
+FUNCTION {output.publisher}
+{ publisher
+ address
+ format.insert.comma
+ edition empty$
+ 'skip$
+ { duplicate$ empty$
+ { edition "t" change.case$ *
+ " edition" * }
+ { ", " *
+ edition "l" change.case$ *
+ " edition" * }
+ if$ }
+ if$
+ format.date
+ format.insert.comma
+ output }
+
+% Fields: type, school, address, month, year
+FUNCTION {output.school}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$ }
+ if$
+ school
+ format.insert.comma
+ address
+ format.insert.comma
+ format.date
+ format.insert.comma
+ output }
+
+% Fields: howpublished, address, month, year
+FUNCTION {output.howpublished}
+{ howpublished
+ address
+ format.insert.comma
+ format.date
+ format.insert.comma
+ output }
+
+% Fields: organization, address, edition, month, year
+FUNCTION {output.organization}
+{ author empty$
+ { "" }
+ { organization }
+ if$
+ address
+ format.insert.comma
+ edition empty$
+ 'skip$
+ { duplicate$ empty$
+ { edition "t" change.case$ *
+ " edition" * }
+ { ", " *
+ edition "l" change.case$ *
+ " edition" * }
+ if$ }
+ if$
+ format.date
+ format.insert.comma
+ output }
+
+% Fields: type, number, institution, address, month, year
+FUNCTION {output.techreport}
+{ type empty$
+ { "Technical report" }
+ { type "t" change.case$ }
+ if$
+ number empty$
+ 'skip$
+ { "~" * number * }
+ if$
+ institution
+ format.insert.comma
+ address
+ format.insert.comma
+ format.date
+ format.insert.comma
+ output.nonnull }
+
+% Note, DOI and URL
+% Fields: note, doi, url
+FUNCTION {output.note.doi.url}
+{ note empty$
+ 'skip$
+ { note
+ add.period$
+ write$
+ newline$ }
+ if$
+ doi empty$
+ 'skip$
+ { "\\\doi{" doi * "}" *
+ write$
+ newline$ }
+ if$
+ url empty$
+ 'skip$
+ { "\\\url{" url * "}" *
+ write$
+ newline$ }
+ if$ }
+
+% Entry Type Functions
+% ====================
+
+% Helper function for writing the bibitem
+% used in all entry types
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem[" write$
+ label write$
+ "]{" write$
+ cite$ write$
+ "}" write$
+ newline$ }
+
+% Required: author, title, journal, year
+% Optional: volume, number, pages, month,
+% note, doi(!), url(!)
+FUNCTION {article}
+{ output.bibitem
+ author empty$
+ { "empty author in article " cite$ * warning$ }
+ 'output.authors
+ if$
+ title empty$
+ { "empty title in article " cite$ * warning$ }
+ 'output.minortitle
+ if$
+ crossref missing$
+ { journal empty$
+ { "empty journal in article " cite$ * warning$ }
+ 'skip$
+ if$
+ year empty$
+ { "empty year in article " cite$ * warning$ }
+ 'skip$
+ if$
+ output.journal }
+ 'output.journal.crossref
+ if$
+ output.note.doi.url }
+
+% Required: author or editor, title, publisher, year
+% Optional: series, volume(!), number(!), address, edition, month,
+% note, doi(!), url(!)
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { editor empty$
+ { "empty author and editor in book " cite$ * warning$ }
+ 'output.editors
+ if$ }
+ 'output.authors
+ if$
+ title empty$
+ { "empty title in book " cite$ * warning$ }
+ 'output.majortitle
+ if$
+ crossref missing$
+ { output.series
+ publisher empty$
+ { "empty publisher in book " cite$ * warning$ }
+ 'skip$
+ if$
+ year empty$
+ { "empty year in book " cite$ * warning$ }
+ 'skip$
+ if$
+ output.publisher }
+ 'output.series.crossref
+ if$
+ output.note.doi.url }
+
+% Required: title
+% Optional: author, howpublished, address, month, year,
+% note, doi(!), url(!)
+FUNCTION {booklet}
+{ output.bibitem
+ output.authors
+ title empty$
+ { "empty title in booklet " cite$ * warning$ }
+ 'output.minortitle
+ if$
+ output.howpublished
+ output.note.doi.url }
+
+% Required: author or editor, title, chapter and/or pages, publisher, year
+% Optional: series, volume(!), number(!), type, address, edition, month,
+% note, doi(!), url(!)
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { editor empty$
+ { "empty author and editor in inbook " cite$ * warning$ }
+ 'output.editors
+ if$ }
+ 'output.authors
+ if$
+ title empty$
+ { "empty title in inbook " cite$ * warning$ }
+ 'output.majortitle
+ if$
+ pages empty$
+ { chapter empty$
+ { "empty chapter and pages in inbook " cite$ * warning$ }
+ 'skip$
+ if$ }
+ 'skip$
+ if$
+ crossref empty$
+ { output.series.pages
+ publisher empty$
+ { "empty publisher in inbook " cite$ * warning$ }
+ 'skip$
+ if$
+ year empty$
+ { "empty year in inbook " cite$ * warning$ }
+ 'skip$
+ if$
+ output.publisher }
+ 'output.series.pages.crossref
+ if$
+ output.note.doi.url }
+
+% Required: author, title, booktitle, publisher, year
+% Optional: editor, series, volume(!), number(!), type, chapter, pages,
+% address, edition, month,
+% note, doi(!), url(!)
+FUNCTION {incollection}
+{ output.bibitem
+ author empty$
+ { "empty author in incollection " cite$ * warning$ }
+ 'output.authors
+ if$
+ title empty$
+ { "empty title in incollection " cite$ * warning$ }
+ 'output.minortitle
+ if$
+ crossref missing$
+ { booktitle empty$
+ { "empty booktitle in incollection " cite$ * warning$ }
+ 'skip$
+ if$
+ output.booktitle
+ output.series.pages
+ publisher empty$
+ { "empty publisher in incollection " cite$ * warning$ }
+ 'skip$
+ if$
+ year empty$
+ { "empty year in incollection " cite$ * warning$ }
+ 'skip$
+ if$
+ output.publisher }
+ 'output.book.crossref
+ if$
+ output.note.doi.url }
+
+% Required: author, title, booktitle, year
+% Optional: editor, series, volume(!), number(!), type(!), chapter(!),
+% pages, (organization), publisher, address, edition(!), month,
+% note, doi(!), url(!)
+FUNCTION {inproceedings}
+{ output.bibitem
+ author empty$
+ { "empty author in inproceedings " cite$ * warning$ }
+ 'output.authors
+ if$
+ title empty$
+ { "empty title in inproceedings " cite$ * warning$ }
+ 'output.minortitle
+ if$
+ crossref missing$
+ { booktitle empty$
+ { "empty booktitle in inproceedings " cite$ * warning$ }
+ 'skip$
+ if$
+ output.booktitle
+ output.series.pages
+ year empty$
+ { "empty year in inproceedings " cite$ * warning$ }
+ 'skip$
+ if$
+ output.publisher }
+ 'output.book.crossref
+ if$
+ output.note.doi.url }
+
+% Required: title
+% Optional: author, organization, address, edition, month, year,
+% note, doi(!), url(!)
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization output }
+ 'output.authors
+ if$
+ title empty$
+ { "empty title in manual " cite$ * warning$ }
+ 'output.minortitle
+ if$
+ output.organization
+ output.note.doi.url }
+
+% Required: author, title, school, year
+% Optional: type, address, month,
+% note, doi(!), url(!)
+FUNCTION {mastersthesis}
+{ output.bibitem
+ author empty$
+ { "empty author in mastersthesis " cite$ * warning$ }
+ 'output.authors
+ if$
+ title empty$
+ { "empty title in mastersthesis " cite$ * warning$ }
+ 'output.minortitle
+ if$
+ school empty$
+ { "empty school in mastersthesis " cite$ * warning$ }
+ 'skip$
+ if$
+ year empty$
+ { "empty year in mastersthesis " cite$ * warning$ }
+ 'skip$
+ if$
+ "Master's thesis" output.school
+ output.note.doi.url }
+
+% Optional: author, title, howpublished, address(!), month, year,
+% note, doi(!), url(!)
+FUNCTION {misc}
+{ output.bibitem
+ output.authors
+ output.minortitle
+ output.howpublished
+ output.note.doi.url }
+
+% Required: author, title, school, year
+% Optional: type, address, month,
+% note, doi(!), url(!)
+FUNCTION {phdthesis}
+{ output.bibitem
+ author empty$
+ { "empty author in phdthesis " cite$ * warning$ }
+ 'output.authors
+ if$
+ title empty$
+ { "empty title in phdthesis " cite$ * warning$ }
+ 'output.majortitle
+ if$
+ school empty$
+ { "empty school in phdthesis " cite$ * warning$ }
+ 'skip$
+ if$
+ year empty$
+ { "empty year in phdthesis " cite$ * warning$ }
+ 'skip$
+ if$
+ "PhD thesis" output.school
+ output.note.doi.url }
+
+% Required: title, year
+% Optional: edtor, series, volume(!), number(!), (organization),
+% publisher, address, edition(!), month,
+% note, doi(!), url(!)
+FUNCTION {proceedings}
+{ output.bibitem
+ output.editors
+ title empty$
+ { "empty title in proceedings " cite$ * warning$ }
+ 'output.majortitle
+ if$
+ output.series
+ year empty$
+ { "empty year in book " cite$ * warning$ }
+ 'skip$
+ if$
+ output.publisher
+ output.note.doi.url }
+
+FUNCTION {conference}
+{ proceedings }
+
+% Required: author, title, institution, year
+% Optional: type, number, address, month,
+% note, doi(!), url(!)
+FUNCTION {techreport}
+{ output.bibitem
+ author empty$
+ { "empty author in techreport " cite$ * warning$ }
+ 'output.authors
+ if$
+ title empty$
+ { "empty title in techreport " cite$ * warning$ }
+ 'output.minortitle
+ if$
+ institution empty$
+ { "empty institution in techreport " cite$ * warning$ }
+ 'skip$
+ if$
+ year empty$
+ { "empty year in techreport " cite$ * warning$ }
+ 'skip$
+ if$
+ output.techreport
+ output.note.doi.url }
+
+% Required: author, title, note
+% Optional: howpublished(!), address(!), month, year,
+% doi(!), url(!)
+FUNCTION {unpublished}
+{ output.bibitem
+ author empty$
+ { "empty author in unpublished " cite$ * warning$ }
+ 'output.authors
+ if$
+ title empty$
+ { "empty title in unpublished " cite$ * warning$ }
+ 'output.minortitle
+ if$
+ output.howpublished
+ note empty$
+ { "empty note in unpublished " cite$ * warning$ }
+ 'skip$
+ if$
+ output.note.doi.url }
+
+FUNCTION {default.type}
+{ misc }
+
+% Alpha Label Calculation
+% =======================
+% Shamelessly stolen from the 'alpha' standard BibTeX style
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$ }
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$ }
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$ }
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$ }
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 'name :=
+ 'len :=
+ name #1 len substring$ =
+ { name len #1 + global.max$ substring$ }
+ 'name
+ if$ }
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used := }
+
+EXECUTE {initialize.et.al.char.used}
+
+INTEGERS { num }
+
+FUNCTION {format.lab.names}
+{ 'names :=
+ names num.names$ 'num :=
+ num #1 >
+ { num #4 >
+ { #3 'left := }
+ { num 'left := }
+ if$
+ #1 'ptr :=
+ ""
+ { left #0 > }
+ { ptr num =
+ { names ptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used := }
+ { names ptr "{ll}" format.name$ #1 text.prefix$ * }
+ if$ }
+ { names ptr "{ll}" format.name$ #1 text.prefix$ * }
+ if$
+ ptr #1 + 'ptr :=
+ left #1 - 'left := }
+ while$
+ num #4 >
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used := }
+ 'skip$
+ if$
+ duplicate$ }
+ { names #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$
+ names #1 "{ll}" format.name$ #3 text.prefix$
+ duplicate$ }
+ { names #1 "{ll}" format.name$ #3 text.prefix$
+ swap$ }
+ if$ }
+ if$ }
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$
+ duplicate$ }
+ { key #3 text.prefix$
+ duplicate$ }
+ if$ }
+ { author format.lab.names }
+ if$ }
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$
+ duplicate$ }
+ { key #3 text.prefix$
+ duplicate$ }
+ if$ }
+ { editor format.lab.names }
+ if$ }
+ { author format.lab.names }
+ if$ }
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$
+ duplicate$ }
+ { "The " #4 organization chop.word #3 text.prefix$
+ duplicate$ }
+ if$ }
+ { key #3 text.prefix$
+ duplicate$ }
+ if$ }
+ { author format.lab.names }
+ if$ }
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$
+ duplicate$ }
+ { "The " #4 organization chop.word #3 text.prefix$
+ duplicate$ }
+ if$ }
+ { key #3 text.prefix$
+ duplicate$ }
+ if$ }
+ { editor format.lab.names }
+ if$ }
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$ }
+ if$ }
+ if$
+ year field.or.null purify$ #-1 #2 substring$ *
+ 'label :=
+ year field.or.null purify$ #-1 #4 substring$ *
+ sortify 'sort.label := }
+
+FUNCTION {sort.format.names}
+{ 'names :=
+ #1 'ptr :=
+ ""
+ names num.names$ 'num :=
+ num 'left :=
+ { left #0 > }
+ { ptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ names ptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 'name :=
+ ptr num = name "others" = and
+ { "et al" * }
+ { name sortify * }
+ if$
+ ptr #1 + 'ptr :=
+ left #1 - 'left := }
+ while$ }
+
+FUNCTION {sort.format.title}
+{ 'name :=
+ "A " #2
+ "An " #3
+ "The " #4 name chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$ }
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ "" }
+ { key sortify }
+ if$ }
+ { author sort.format.names }
+ if$ }
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ "" }
+ { key sortify }
+ if$ }
+ { editor sort.format.names }
+ if$ }
+ { author sort.format.names }
+ if$ }
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ "" }
+ { key sortify }
+ if$ }
+ { "The " #4 organization chop.word sortify }
+ if$ }
+ { author sort.format.names }
+ if$ }
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ "" }
+ { key sortify }
+ if$ }
+ { "The " #4 organization chop.word sortify }
+ if$ }
+ { editor sort.format.names }
+ if$ }
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " " *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$ }
+ if$ }
+ if$ *
+ " " *
+ year field.or.null sortify *
+ " " *
+ title field.or.null
+ sort.format.title *
+ #1 entry.max$ substring$
+ 'sort.key$ := }
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num := }
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label := }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label := }
+ if$ }
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width := }
+ 'skip$
+ if$
+ extra.label 'next.extra := }
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{ et.al.char.used
+ { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+ 'skip$
+ if$
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" * write$ newline$ }
+
+EXECUTE {begin.bib}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$ }
+
+EXECUTE {end.bib}
diff --git a/docs/publications/MODELS2010OCLWorkshop/eceasst.cls b/docs/publications/MODELS2010OCLWorkshop/eceasst.cls
new file mode 100644
index 0000000..0044890
--- /dev/null
+++ b/docs/publications/MODELS2010OCLWorkshop/eceasst.cls
@@ -0,0 +1,282 @@
+% *************************************************************
+% * Class file for the Electronic Communications of the EASST *
+% *************************************************************
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{eceasst}[2009/07/08 ECEASST document class v1.6]
+% Derived from the article class, fixing it to be two-sided 11pt output
+% on A4 paper
+\LoadClass[a4paper,11pt,twoside]{article}
+% =======
+% Lengths
+% =======
+\setlength{\textwidth}{420pt}
+\setlength{\headheight}{35pt}
+\setlength{\oddsidemargin}{16pt}
+\setlength{\evensidemargin}{16pt}
+\setlength{\parindent}{1em}
+\setlength{\parskip}{0pt}
+% =========
+% Footnotes
+% =========
+\renewcommand{\@makefntext}[1]{%
+ \noindent$^\@thefnmark$ #1}
+% ====================================
+% Spacing of figure and table captions
+% ====================================
+\setlength{\abovecaptionskip}{6pt}
+\setlength{\belowcaptionskip}{6pt}
+% ================================
+% Environment for acknowledgements
+% ================================
+\newenvironment{acknowledge}{%
+ \par\vspace{11pt}%
+ \noindent\textbf{Acknowledgements:}\enspace}{%
+ \par\vspace{11pt}}
+% =============================
+% Miscellaneous package imports
+% =============================
+\RequirePackage{mathptmx}
+\RequirePackage[scaled=.90]{helvet}
+\RequirePackage{courier}
+% Graphics
+\RequirePackage{graphicx}
+% Colors
+\RequirePackage{color}
+\definecolor{easstblue}{rgb}{.05,.32,.66}
+% ======================
+% Package for Hyperlinks
+% ======================
+% Hyperlinks are coloured in easstblue
+\RequirePackage[colorlinks=true,linkcolor=easstblue,citecolor=easstblue,filecolor=easstblue,menucolor=easstblue,urlcolor=easstblue,pdfpagemode={UseNone},pdfsubject={Software Science and Technology},pdfstartview={FitH}]{hyperref}
+% URLs should be in normal font
+\urlstyle{same}
+% Command for emails
+\newcommand{\email}[1]{\href{mailto:#1}{#1}}
+% Command for Digital Object Identifiers
+\newcommand{\doi}[1]{\href{http://dx.doi.org/#1}{doi:#1}}
+% Correct anchors for figures and tables to be above the float
+% ------------------------------------------------------------
+\RequirePackage[all]{hypcap}
+% =========================================
+% AMS packages for mathematics and theorems
+% =========================================
+\RequirePackage[tbtags,sumlimits,intlimits,namelimits,reqno,fleqn]{amsmath}
+\RequirePackage{amsthm}
+\RequirePackage{amsfonts}
+\RequirePackage{amssymb}
+% Custom theorem-like environments
+\newtheoremstyle{ectheorem}{11pt}{11pt}{\itshape}{}{\bfseries}{}{1em}{}
+\newtheoremstyle{ecdefinition}{11pt}{11pt}{\upshape}{}{\bfseries}{}{1em}{}
+\newtheoremstyle{ecremark}{11pt}{11pt}{\slshape}{}{\itshape}{}{1em}{}
+\theoremstyle{ectheorem}
+\newtheorem{theorem}{Theorem}
+\newtheorem{proposition}{Proposition}
+\newtheorem{lemma}{Lemma}
+\newtheorem{corollary}{Corollary}
+\theoremstyle{ecdefinition}
+\newtheorem{definition}{Definition}
+\newtheorem{algorithm}{Algorithm}
+\theoremstyle{ecremark}
+\newtheorem{remark}{Remark}
+\newtheorem{example}{Example}
+% =========================
+% Names to use in \autorefs
+% =========================
+% Names for sections and similar:
+\renewcommand{\partautorefname}{Part}
+\renewcommand{\sectionautorefname}{Section}
+\renewcommand{\subsectionautorefname}{Subsection}
+\renewcommand{\subsubsectionautorefname}{Subsubsection}
+% Names for theorem-like environments:
+\renewcommand{\theoremautorefname}{Theorem}
+\newcommand{\propositionautorefname}{Proposition}
+\newcommand{\lemmaautorefname}{Lemma}
+\newcommand{\corollaryautorefname}{Corollary}
+\newcommand{\definitionautorefname}{Definition}
+\newcommand{\algorithmautorefname}{Algorithm}
+\newcommand{\exampleautorefname}{Example}
+\newcommand{\remarkautorefname}{Remark}
+% Names for figures and tables:
+\renewcommand{\figureautorefname}{Figure}
+\newcommand{\subfigureautorefname}{Figure}
+\renewcommand{\tableautorefname}{Table}
+\newcommand{\subtableautorefname}{Table}
+% Name for the bibliography
+\renewcommand{\refname}{Bibliography}
+% ====================
+% Frontmatter commands
+% ====================
+% The volume number and title
+\newcommand{\ecvolnumber}{No \texttt{$\backslash$volume} defined!}
+\newcommand{\volume}[2]{\renewcommand{\ecvolnumber}{Volume #1 (#2)}}
+\newcommand{\ecvoltitle}{No \texttt{$\backslash$volumetitle} defined!}
+\newcommand{\volumetitle}[1]{\renewcommand{\ecvoltitle}{#1}}
+\newcommand{\ecvolshort}{\ecvolnumber}
+\newcommand{\volumeshort}[1]{\renewcommand{\ecvolshort}{#1}}
+% The volume or guest editors
+\newcommand{\eceditor}{No \texttt{$\backslash$*ed(s)} defined!}
+\newcommand{\voled}[1]{\renewcommand{\eceditor}{Volume Editor: #1}}
+\newcommand{\voleds}[1]{\renewcommand{\eceditor}{Volume Editors: #1}}
+\newcommand{\guested}[1]{\renewcommand{\eceditor}{Guest Editor: #1}}
+\newcommand{\guesteds}[1]{\renewcommand{\eceditor}{Guest Editors: #1}}
+% Title
+\newcommand{\ectitle}{No \texttt{$\backslash$title} defined!}
+\renewcommand{\title}[1]{\renewcommand{\ectitle}{#1}\hypersetup{pdftitle={#1}}}
+\newcommand{\ecshort}{\ectitle}
+\newcommand{\short}[1]{\renewcommand{\ecshort}{#1}}
+% Author(s) and institutes
+\newcommand{\ecauthor}{No \texttt{$\backslash$author} defined!}
+\renewcommand{\author}[1]{\renewcommand{\ecauthor}{#1}\setcounter{page}{0}\hypersetup{pdfauthor={#1}}}
+\newcommand{\autref}[1]{\if\thepage0\else\hyperlink{aut#1}{$^#1$}\fi}
+\newcommand{\sponsor}[1]{\if\thepage0\else\footnote{#1}\fi}
+\newcommand{\ecinstitute}{No \texttt{$\backslash$institute} defined!}
+\newcommand{\institute}[1]{\renewcommand{\ecinstitute}{#1}}
+\newcommand{\autlabel}[1]{\hypertarget{aut#1}{$^#1$}}
+% Abstract and keywords
+\newcommand{\ecabstract}{No \texttt{$\backslash$abstract} defined!}
+\renewcommand{\abstract}[1]{\renewcommand{\ecabstract}{#1}}
+\newcommand{\eckeywords}{No \texttt{$\backslash$keywords} defined!}
+\newcommand{\keywords}[1]{\renewcommand{\eckeywords}{#1}\hypersetup{pdfkeywords={#1}}}
+% ===================
+% Headers and footers
+% ===================
+% Odd page header
+% ---------------
+\def\@oddhead{\vbox{%
+ \includegraphics[width=30pt]{easst}% Logo on the left
+ \hfill%
+ \textsf{ECEASST}% ECEASST on the right
+ \vskip 3pt%
+ {\color{easstblue}\hrule height 2pt}}}
+% Odd page footer
+% ---------------
+\def\@oddfoot{\vbox{%
+ {\color{easstblue}\hrule height 2pt}
+ \vskip 3pt%
+ \textsf{\thepage\ / \pageref*{lastpage}}% Page number on the left
+ \hfill%
+ \textsf{\ecvolnumber}}}% Volume on the right
+% Even page header
+% ----------------
+\def\@evenhead{\vbox{%
+ \textsf{\ecshort}% Short title on the left
+ \hfill%
+ \includegraphics[width=30pt]{easst}% Logo on the right
+ \vskip 3pt%
+ {\color{easstblue}\hrule height 2pt}}}
+% Even page footer
+% ----------------
+\def\@evenfoot{\vbox{%
+ {\color{easstblue}\hrule height 2pt}
+ \vskip 3pt%
+ \textsf{\ecvolshort}% Short volume title on the left
+ \hfill%
+ \textsf{\thepage\ / \pageref*{lastpage}}}}% Page number on the right
+% ===========================================================
+% Making the title page and the frontmatter on the first page
+% ===========================================================
+% Define a label for the last page
+\AtEndDocument{%
+ \clearpage%
+ \addtocounter{page}{-1}%
+ \immediate\write\@auxout{\string
+ \newlabel{lastpage}{{}{\thepage}{}{}}}%
+ \addtocounter{page}{1}}
+% Head building block for the cover page
+\newcommand{\eccoverhead}{%
+ % Title box
+ \vspace*{-85pt}
+ \noindent \colorbox{easstblue}{\parbox{414pt}{\color{white}\sf
+ \vspace{6pt}
+ \hspace{6pt}{\LARGE Electronic Communications of the EASST}\\[6pt]
+ \hspace*{6pt}{\LARGE \ecvolnumber}
+ \vspace{6pt}}}
+ % EASST logo
+ \begin{flushright}
+ \includegraphics[height=80pt]{easst}
+ \end{flushright}}
+% Foot building block for the cover page
+\newcommand{\eccoverfoot}{%
+ % Information on editors, ECEASST home page and ISSN
+ \vfill
+ \colorbox{easstblue}{\parbox{414pt}{\color{white}\sf
+ \vspace{6pt}
+ \hspace{6pt}\eceditor\\
+ \hspace*{6pt}Managing Editors: Tiziana Margaria, Julia Padberg, Gabriele Taentzer\\
+ \hspace*{6pt}ECEASST Home Page: \href{http://www.easst.org/eceasst/}{\textcolor{yellow}{http://www.easst.org/eceasst/}}
+ \hfill ISSN 1863-2122\hspace{6pt}
+ \vspace{6pt}}}}
+% Introduce the maketitle command
+\renewcommand{\maketitle}{%
+ % The cover page
+ % --------------
+ \thispagestyle{empty}
+ \enlargethispage{30pt}
+ % Will be page 0, s.t. contents start on page 1
+ \setcounter{page}{0}
+ \eccoverhead
+ % Volume and article title, author(s)
+ \vspace{60pt}
+ \begin{center}
+ {\LARGE\ecvoltitle\par}
+ \vspace{44pt}
+ {\Large\ectitle\par}
+ \vspace{11pt}
+ \ecauthor\\[11pt]
+ \pageref*{lastpage} pages
+ \end{center}
+ \eccoverfoot
+ \newpage
+ % Beginning of article title on first page
+ % ----------------------------------------
+ \global\@topnum\z@ % To prevent floats above the title
+ \setlength{\parskip}{11pt}
+ % Change footnotes to symbols
+ \renewcommand{\thefootnote}{\fnsymbol{footnote}}
+ % Information on title, author(s) and institutes of authors centered
+ \begin{center}
+ {\Large\bfseries\ectitle\par}
+ {\large\bfseries\ecauthor\par}
+ \ecinstitute
+ \end{center}
+ % Reset footnote counter and change to arabic numbers
+ \setcounter{footnote}{0}
+ \renewcommand{\thefootnote}{\arabic{footnote}}
+ % Abstract and keywords as a block quote
+ \begin{quote}
+ \textbf{Abstract:} \ecabstract\par
+ \textbf{Keywords:} \eckeywords
+ \end{quote}
+ \setlength{\parskip}{0pt}}
+% Introduce the prefacetitle command
+\newcommand{\prefacetitle}{%
+ % The cover page
+ % --------------
+ \thispagestyle{empty}
+ \enlargethispage{30pt}
+ % Will be page 0, s.t. contents start on page 1
+ \setcounter{page}{0}
+ \eccoverhead
+ % Volume and article title, author(s)
+ \vspace{60pt}
+ \begin{center}
+ {\LARGE\ecvoltitle\par}
+ \vspace{44pt}
+ {\Large Preface\par}
+ \vspace{11pt}
+ \pageref*{lastpage} pages
+ \end{center}
+ \eccoverfoot
+ \newpage
+ % Beginning of article title on first page
+ % ----------------------------------------
+ \global\@topnum\z@ % To prevent floats above the title
+ \setlength{\parskip}{11pt}
+ % Preface title centered
+ \begin{center}
+ {\Large\bfseries Preface}
+ \end{center}
+ \renewcommand{\ecshort}{Preface}
+ % Footnotes as arabic numbers
+ \renewcommand{\thefootnote}{\arabic{footnote}}
+ \setlength{\parskip}{0pt}}
diff --git a/docs/publications/MODELS2010OCLWorkshop/frontmatter.tex b/docs/publications/MODELS2010OCLWorkshop/frontmatter.tex
new file mode 100644
index 0000000..baece44
--- /dev/null
+++ b/docs/publications/MODELS2010OCLWorkshop/frontmatter.tex
@@ -0,0 +1,11 @@
+% Volume frontmatter for Something 2009
+% =====================================
+\volume{36}{2010} % Volume number and year
+\volumetitle{% Title of the volume (optional)
+Proceedings of the\\
+Workshop on OCL and Textual Modelling\\
+(OCL 2010)}
+\volumeshort{% Short title of the volume (optional)
+Proc.\ OCL 2010}
+\guesteds{% Multiple guest editors
+Jordi Cabot, Tony Clark, Manuel Clavel, Martin Gogolla}
diff --git a/docs/publications/MODELS2010OCLWorkshop/oclxtext.bib b/docs/publications/MODELS2010OCLWorkshop/oclxtext.bib
new file mode 100644
index 0000000..4c4429e
--- /dev/null
+++ b/docs/publications/MODELS2010OCLWorkshop/oclxtext.bib
@@ -0,0 +1,78 @@
+@preamble{ "\newcommand{\noopsort}[1]{} "
+ # "\newcommand{\printfirst}[2]{#1} "
+ # "\newcommand{\singleletter}[1]{#1} "
+ # "\newcommand{\switchargs}[2]{#2#1} " }
+
+@MISC{ANTLR,
+ title = "ANTLR, ANother Tool for Language Recognition",
+ url = "http://www.antlr.org",
+}
+
+@Book{dragon,
+ author = {Alfred V. Aho and Ravi Sethi and Jeffrey D. Ullman},
+ title = "Compilers. Principles, Techniques and Tools",
+ publisher = "Addison Wesley",
+ year = "1986"
+}
+
+@MISC{Helios,
+ title = "Eclipse Helios release",
+ url = "http://www.eclipse.org/downloads/",
+}
+
+@MISC{IMP,
+ title = "Eclipse IDE Meta-Tooling Platform Project",
+ url = "http://www.eclipse.org/projects/project_summary.php?projectid=technology.imp",
+}
+
+@MISC{LPG,
+ title = "Sourceforge LALR Parser Project",
+ url = "http://sourceforge.net/projects/lpg",
+}
+
+@MISC{MDT/OCL,
+ title = "Eclipse MDT/OCL Project",
+ url = "http://www.eclipse.org/projects/project_summary.php?projectid=modeling.mdt.ocl",
+}
+
+@MANUAL{MOFM2T,
+ title = "MOF Model to Text Transformation Language",
+ organization = "Object Management Group",
+ edition = " v1.0, OMG Document Number: formal/2008-01-16",
+ url = "http://www.omg.org/spec/MOFM2T/1.0",
+}
+
+
+@MANUAL{OCL,
+ title = "Object Constraint Language",
+ organization = "Object Management Group",
+ edition = "Version 2.2, OMG Document Number: formal/2010-02-01",
+ url = "http://www.omg.org/spec/OCL/2.2",
+}
+
+@MANUAL{OCL2.3,
+ title = "First Ballot Resolutions for Object Constraint Language version 2.3, 2009",
+ organization = "Object Management Group",
+ url = "http://www.omg.org/archives/ocl2-rtf/msg00331.html",
+}
+
+@MANUAL{QVT,
+ title = "Query/View/Transformation Specification",
+ organization = "Object Management Group",
+ edition = "Version 2.3, OMG Document Number: ptc/09-12-05, 2009",
+ url = "http://www.omg.org/spec/QVT/1.1/Beta2/PDF",
+}
+
+@MISC{TMF/Xtext,
+ title = "Eclipse TMF/Xtext Project",
+ url = "http://www.eclipse.org/Xtext",
+}
+
+@MANUAL{UML,
+ title = "Unified Modeling Language, Superstructure",
+ organization = "Object Management Group",
+ edition = "Version 2.3, OMG Document Number: formal/2010-05-05",
+ url = "http://www.omg.org/spec/UML/2.3",
+}
+
+
diff --git a/docs/publications/MODELS2010OCLWorkshop/oclxtext.pdf b/docs/publications/MODELS2010OCLWorkshop/oclxtext.pdf
index b7a6a9e..7d8cb00 100644
--- a/docs/publications/MODELS2010OCLWorkshop/oclxtext.pdf
+++ b/docs/publications/MODELS2010OCLWorkshop/oclxtext.pdf
Binary files differ
diff --git a/docs/publications/MODELS2010OCLWorkshop/oclxtext.tex b/docs/publications/MODELS2010OCLWorkshop/oclxtext.tex
index af50656..3404cd6 100644
--- a/docs/publications/MODELS2010OCLWorkshop/oclxtext.tex
+++ b/docs/publications/MODELS2010OCLWorkshop/oclxtext.tex
@@ -1,57 +1,34 @@
-\documentclass[runningheads,a4paper]{llncs}
+\documentclass{eceasst}
+% This is the source of the author documentation
+% for the ECEASST document class.
-\usepackage{amssymb}
-\setcounter{tocdepth}{3}
-\usepackage{graphicx}
+% Required packages
+% =================
+\usepackage{subfig}
-\usepackage{url}
-\newcommand{\keywords}[1]{\par\addvspace\baselineskip
-\noindent\keywordname\enspace\ignorespaces#1}
+% Volume frontmatter
+% ==================
+\input{frontmatter}
+
+% Article frontmatter
+% ===================
+\title{% Title of the article
+Re-engineering Eclipse MDT/OCL for Xtext}
+%\short{% Short title of the article (optional)
+%Re-engineering Eclipse MDT/OCL for Xtext}
+\author{% Authors and references to addresses
+Edward Willink\autref{1}}
+\institute{% Institutes with labels
+\autlabel{1} \email{ed \_at\_ willink.me.uk}, \url{http://www.eclipse.org/modeling}\\
+Eclipse Modeling Project}
+
+\abstract{
+The current tooling used for the Eclipse OCL project uses an LALR parser generator. Enhancing the tooling to support editing motivated a migration to exploit the inherently model-driven characteristics of Xtext. This paper summarizes the experiences of that migration, identifies the many benefits and discusses a few changes in implementation approach that were required. Objective performance and size comparisons between the old LALR and new Xtext approach are provided.}
+\keywords{OCL, meta-model, editor, Xtext, LALR, LPG, ASG, AST, CSG, CST}
\begin{document}
-
-\mainmatter % start of an individual contribution
-
-% first the title is needed
-\title{MODELS 2010\\Workshop on OCL and Textual Modelling:\\Re-engineering Eclipse MDT/OCL for Xtext}
-
-% a short form should be given in case it is too long for the running head
-\titlerunning{MODELS 2010 Workshop on OCL and Textual Modelling}
-
-% the name(s) of the author(s) follow(s) next
-%
-% NB: Chinese authors should write their first names(s) in front of
-% their surnames. This ensures that the names appear correctly in
-% the running heads and the author index.
-%
-\author{Edward Willink}
-%
-\authorrunning{Re-engineering Eclipse MDT/OCL for Xtext}
-% (feature abused for this document to repeat the title also on left hand pages)
-
-% the affiliations are given next; don't give your e-mail address
-% unless you accept that it will be published
-\institute{Eclipse Modeling Project,\\
-\url{http://www.eclipse.org/modeling}}
-
-%
-% NB: a more complex sample for affiliations and the mapping to the
-% corresponding authors can be found in the file "llncs.dem"
-% (search for the string "\mainmatter" where a contribution starts).
-% "llncs.dem" accompanies the document class "llncs.cls".
-%
-
-\toctitle{MODELS 2010 Workshop on OCL and Textual Modelling}
-\tocauthor{Re-engineering Eclipse MDT/OCL for Xtext}
\maketitle
-
-\begin{abstract}
-The current tooling used for the Eclipse OCL project uses an LALR parser generator. Enhancing the tooling to support editing motivated a migration to exploit the inherently model-driven characteristics of Xtext. This paper summarizes the experiences of that migration, identifies the many benefits and discusses a few changes in implementation approach that were required. Objective performance and size comparisons between the old LALR and new Xtext approach are provided.
-\keywords{OCL, meta-model, editor, Xtext, LALR, LPG, ASG, AST, CSG, CST}
-\end{abstract}
-
-
\section{Introduction}
The Object Constraint Language (OCL)\cite{OCL} evolved, initially within the Unified Modeling Language (UML)\cite{UML}, to capture modeling constraints that were inappropriate to express graphically. It was recognized that the textual modeling expression language had utility beyond UML and so OCL 2.0 was separated out when UML 2.0 was proposed. The benefits of this separation have become clear in the last few years as OCL forms the basis for alternate modeling specifications such as the Model to Text transformation language MOFM2T\cite{MOFM2T}, and the Query/View/Transformation (QVT)\cite{QVT} Model to Model transformation languages.
@@ -71,7 +48,7 @@
In this paper we describe this redevelopment, and since this is a redevelopment of a real language, we are able to provide realistic contrasts between the more traditional parsing approaches and the revised approaches required by Xtext and, behind the scenes, ANTLR \cite{ANTLR}. We first review the basic parsing activities and see how the old tools supported it, then we see how Xtext provides much simpler and more powerful mechanisms that do much more. The redevelopment was not always straightforward and so we then describe areas where Xtext required a different approach to be adopted. Finally we conclude with some performance metrics contrasting the traditional and the Xtext implementations.
-The code for both implementations is available as part of the Eclipse Helios release. The basic MDT/OCL installation provides just the old approach. Installation of the optional MDT/OCL Examples provides the new Xtext editors that use the new Xtext approach\footnote{Install the {\tt Modeling} / {\tt OCL Examples and Editors} feature from the \url{http://download.eclipse.org/releases/helios/} Update site.}.
+The code for both implementations is available as part of the Eclipse Helios release. The basic Eclipse OCL installation provides just the old approach. Installation of the optional MDT/OCL Examples provides the new Xtext editors that use the new Xtext approach\footnote{Install the {\tt Modeling} / {\tt OCL Examples and Editors} feature from the \url{http://download.eclipse.org/releases/helios/} Update site.}.
\section{Background}
@@ -176,7 +153,7 @@
So for less manual input than for LPG, Xtext provides much more auto-generated output. As will be seen in the following examples, it is not just less input, it is 80\% less input.
-With Xtext, the CST for CollectionRangeCS (and also CollectionItemCS) can be auto-generated from the following 3 lines rather than the 10 above:
+With Xtext, the CST for CollectionRangeCS (and also CollectionItemCS) can be generated automatically from the following 3 lines rather than the 10 above:
{\small\begin{verbatim}
CollectionLiteralPartCS:
@@ -184,7 +161,7 @@
;
\end{verbatim}}
-Here the `action code' comprises the property assignments; \verb#expressionCS=# and \verb#lastExpressionCS=#. These cause the corresponding properties to exist in the \verb#CollectionLiteralPartCS# class in the CST meta-model.
+Here the `action code' comprises the two assignments to CST properties, as a result of which the \verb#CollectionLiteralPartCS# in the CST meta-model class has \verb#expressionCS# and \verb#lastExpressionCS# properties.
The maintenance of lists is also simplified from 16 lines to 6.
@@ -227,7 +204,7 @@
;
\end{verbatim}}
-Here an arbitrary number of \verb+Identifier '::'+ prefixes may precede an \verb+Identifier+. The prefixes are each analyzed as \verb+Namespace+ and appended to the \verb+PathNameExpCS::namespace+ feature, while the final \verb+Identifier+ is analyzed as a \verb+NamedElement+ and assigned to the \verb+PathNameExpCS::element+ feature.
+Here an arbitrary number of \verb+Identifier '::'+ prefixes may precede an \verb+Identifier+. The prefixes are each analyzed as \verb+Namespace+ and the \verb+PathNameExpCS::namespace+ feature accumulates them. The final \verb+Identifier+ is analyzed as a \verb+NamedElement+ and assigned to the \verb+PathNameExpCS::element+ feature.
The \verb+Namespace+ and \verb+NamedElement+ classes are part of the ASG, and their instances may be either objects created by conversion of the CSG to the ASG or objects imported from an external model.
@@ -249,11 +226,11 @@
...
\end{verbatim}}
-A repeated term such as \verb+8/4/2+ is parsed first by reduction\footnote{The reader is referred to \cite{dragon} for a description of shift and reduce transitions.} of \verb+8+ via \verb+unaryCS+ and then via \verb+multiplicativeCS+. This is followed by reduction of \verb+4+ via \verb+unaryCS+ so that a further \verb+multiplicativeCS+ reduction gives the \verb+multiplicativeCS+ for \verb+(8/4)+. Finally after reduction of \verb+2+ via \verb+unaryCS+, reduction of \verb+multiplicativeCS+ gives the \verb+multiplicativeCS+ for \verb+((8/4)/2)+.
+A repeated term such as \verb+8/4/2+ is parsed first by reduction\footnote{The reader is referred to \cite{dragon} for a description of shift and reduce transitions.} of \verb+8+ via \verb+unaryCS+ and then via \verb+multiplicativeCS+. This is followed by reduction of \verb+4+ via \verb+unaryCS+ so that a further \verb+multiplicativeCS+ reduction gives the \verb+multiplicativeCS+ for \verb+(8/4)+. Finally after reduction of \verb+2+ via \verb+unaryCS+, reduction of \verb+multiplicativeCS+ gives a \verb+multiplicativeCS+ for \verb+((8/4)/2)+.
This resolves precedence and associativity in accordance with typical language specifications and makes as much progress as possible with `shift' transitions along the rule before a `reduction' at the end of the rule. LALR grammars parse alternate syntax hypotheses concurrently for `shift's but require only one alternative to remain valid for the `reduction'.
-ANTLR, and consequently Xtext, support only right recursion and so the corresponding right recursive exposition in Xtext would incorrectly parse \verb+8/4/2+ as \verb+8/(4/2)+ rather than \verb+(8/4)/2+. This mis-parse is predictable and so could be corrected during the CSG to ASG conversion. However Xtext's extended BNF comes to the rescue for practical use cases.
+ANTLR, and consequently Xtext, supports only right recursion and so the corresponding right recursive exposition in Xtext would parse \verb+8/4/2+ as \verb+8/(4/2)+ rather than \verb+(8/4)/2+. This mis-parse is predictable and so could be corrected during the CSG to ASG conversion. However Xtext's extended BNF comes to the rescue for practical use cases.
{\small\begin{verbatim}
multiplicativeCS: unaryCS (('*'|'/') unaryCS)*;
@@ -274,7 +251,7 @@
\subsection{Overlapping Syntaxes}
-It is difficult to create a parser for the OCL grammar for a variety of reasons. One of these is the status of names. For instance, under what circumstances may \verb+String+, \verb+Set+, \verb+collect+, \verb+self+ or \verb+true+ be used as ordinary names as in: \verb+java::lang::String+, \verb+values.collect+ or \verb+myTest.true+? The OCL 2.2 specification is not clear and so implementers are forced to use intuition. The resolution of Issue 14583\cite{OCL2.3} for the OCL 2.3 specification is influenced by experience extending the Eclipse MDT/OCL implementation for re-use by QVT. Iterator names are not reserved at all, avoiding any impediment to extension with new names. \verb+self+ and \verb+true+ are totally reserved. \verb+String+ and \verb+Set+ are restricted, that is they are reserved except when qualified as in \verb+mine::Set+.
+It is difficult to create a parser for the OCL grammar for a variety of reasons. One of these is the status of names. For instance, under what circumstances may \verb+String+, \verb+Set+, \verb+collect+, \verb+self+ or \verb+true+ be used as ordinary names as in: \verb+java::lang::String+, \verb+values.collect+ or \verb+myTest.true+? The OCL 2.2 specification is not clear and so implementers are forced to use intuition. The resolution of Issue 14583\cite{OCL2.3} for the OCL 2.3 specification is influenced by experience extending the Eclipse OCL implementation for re-use by QVT. Iterator names are not reserved at all, avoiding any impediment to extension with new names. \verb+self+ and \verb+true+ are totally reserved. \verb+String+ and \verb+Set+ are restricted, that is they are reserved except when qualified as in \verb+mine::Set+.
With iterator names unreserved, the parser must use lexical structure rather than a keyword to distinguish the iterator and operator call syntaxes. In simple cases such as \verb+any()+, this is impossible and so resolution must be deferred to the semantic analysis of \verb+any+.
@@ -318,22 +295,25 @@
At first sight it appears that the use of \verb+'context'+ as a keyword in the grammar precludes the use of \verb+context+ by the \verb+ID+ terminal, since the default lexer uses \verb+ID+ only when there is nothing more specific. However Xtext augments the traditional terminal and production rules with an intermediate datatype rule that can merge terminal rules. Thus in:
{\small\begin{verbatim}
-terminal ID: (('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*);
+terminal ID:('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
RestrictedKeyword: 'context' | 'package';
Identifier: ID | RestrictedKeyword;
\end{verbatim}}
\noindent
-\verb+ID+ is a terminal rule that defines the behavior of the auto-generated Lexer.
+\verb+ID+ is a terminal rule that defines the behavior of the auto-generated Lexer.
+
\verb+RestrictedKeyword+ is a datatype rule identifying a list of two grammar keywords.
+
\verb+Identifier+ is a further datatype rule merging the lexer terminal with the grammar list.
+
The remainder of the grammar can refer to \verb+Identifier+ without worrying about whether the name overlaps a distinct token.
This provides a very simple solution, but unfortunately has a very bad effect on the sizes of the generated grammar. The Complete OCL grammar has 14 keywords that need treatment in this fashion. Unfortunately only 9 can be defined this way before the generated ANTLR grammar hits the 64 kB Java method size limit. This occurs for Xtext 1.0.0. It is difficult to believe that this is a fundamental limitation of the ANTLR technology, so hopefully this problem will go away in a future release.
\subsection{Complex References}
-In real languages, the complexity of the reference to a type as in a declaration such as \verb+name : type+, may vary from a simple string such as \verb+Boolean+ to the more complex \verb+Tuple{name:String,values:Sequence(Integer)}+. The absence of a bound on the nesting depth of Tuples and Collections leads to potentially unlimited complexity. Supporting this diversity provides a dilemma to meta-model developers. On the one hand the common use case of a simple reference is efficiently satisfied by a shared reference, while on the other hand the complex construct mandates a tree of composed objects whose root requires an owner. Identifying a suitable owner is a further dilemma.
+In real languages, the type reference in a declaration such as \verb+name : type+ may be a simple name \verb+Boolean+ or constructed \verb+Tuple{name:String,values:Sequence(Real)}+. The absence of a bound on the nesting depth of Tuples and Collections leads to potentially unlimited complexity. Supporting this diversity provides a dilemma to meta-model developers. On the one hand the common use case of a simple reference is efficiently satisfied by a shared reference, while on the other hand the complex construct mandates a tree of composed objects whose root requires an owner. Identifying a suitable owner is a further dilemma.
\begin{figure}
\begin{center}
@@ -347,7 +327,7 @@
Equivalent usages in the OCL specification omit the composed reference avoiding the redundancy but the result is that complex types just magically exist without a clear specification as to how they are persisted.
-Since the meta-model representation is difficult, it is not surprising that the difficulty appears in an Xtext grammar as well. If a type is referenced in the grammar as \verb+type=[TypeCS|Identifier]+, a complex type cannot be accommodated. Therefore we could pursue the owned and not owned approach with \verb+(type=[TypeCS|Identifier] | ownedType=ComplexTypeCS)+, but this leaves the generated parser to resolve partial ambiguities between the two syntaxes. In practice with ANTLR technology, this means that one approach is attempted and if it fails backtracking is invoked and another alternative is attempted. At best this just costs parsing time through erroneous attempts. More of a concern arises when the first attempt succeeds because it is a prefix of the alternative; the parser then proceeds using the `wrong' parse and perhaps fails during a subsequent alternative. It is not obvious that a parser may not have a non-linear growth of backtracking alternatives to examine. With Xtext largely hiding the underlying ANTLR capabilities, it is not clear how an Xtext grammar should be written to obtain predictable and efficient results. Experience suggests that it is necessary to put more complex alternatives before simpler choices, since the complex can fail and back-track to the simple, but the converse of a false success of a simple choice does not backtrack.
+Since the meta-model representation is difficult, it is not surprising that the difficulty appears in an Xtext grammar as well. A type reference such as \verb+type=[TypeCS|Identifier]+ in a grammar cannot accommodate a complex type. We could pursue the owned and not owned approach with \verb+(type=[TypeCS|Identifier] | ownedType=ComplexTypeCS)+, but this leaves the generated parser to resolve partial ambiguities between the two syntaxes. In practice with ANTLR technology, this means that one approach is attempted and if it fails backtracking is invoked and another alternative is attempted. At best this just costs parsing time through erroneous attempts. More of a concern arises when the first attempt succeeds because it is a prefix of the alternative; the parser then proceeds using the `wrong' parse and perhaps fails during a subsequent alternative. It is not obvious that a parser may not have a non-linear growth of backtracking alternatives to examine. With Xtext largely hiding the underlying ANTLR capabilities, it is not clear how an Xtext grammar should be written to obtain predictable and efficient results. Experience suggests that it is necessary to put more complex alternatives before simpler choices, since the complex can fail and back-track to the simple, but the converse of a false success of a simple choice does not backtrack.
The UML-style double feature approach did not appear to work well and the OCL-style magical ownership has no corresponding Xtext magic. The solution was to omit the shared reference and so treat all references as complex using \verb+ownedType=TypeRefCS+ with TypeRefCS the abstract type of a family of type reference expressions.
@@ -357,7 +337,7 @@
SimpleTypeRefCS: type=[Type|Identifier];
ComplexTypeRefCS: type=[Type|Identifier]
- '<' ownedParams+=TypeRefCS (',' ownedParams+=TypeRefCS)* '>';
+ '<' ownedParams+=TypeRefCS (',' ownedParams+=TypeRefCS)* '>';
\end{verbatim}}
This approach endeavors to use an appropriate meta-model representation without redundant features. This is probably a mistake, since as shown in the simplified example above, the alternative types often share a common prefix. The parser is forced to distinguish between rather similar alternatives which may contribute to some of the adverse parsing speeds reported later. Since there is very little prospect of the CSG structure for diverse references doubling up as the ASG, it is inevitable that a slight restructuring transformation is needed between CSG and ASG. The minor aesthetic benefits of compact CSG objects is probably misguided; fewer alternatives would simplify the parser, so in the above example, \verb+SimpleTypeRefCS+ could be merged into \verb+ComplexTypeRefCS+ by making the \verb+'<' ... '>'+\footnote{Although OCL 2.2 does not support UML's templated types, OCL aspires to UML alignment. This example is part of work to achieve alignment.} terms optional in \verb+ComplexTypeRefCS+. An LALR parser would probably mandate this change in order to eliminate a shift-reduce conflict. The Xtext tooling needs stronger diagnostic capability to advise on unwise grammar formulations.
@@ -376,7 +356,7 @@
Comparison of the re-parse times is much fairer, since the re-parses use cached meta-models and grammars. During each re-parse, LPG and Xtext parsers read just the Complete OCL document. The eleven-fold speed degradation for Xtext is disappointing but not totally surprising. Both LPG and Xtext offer opportunities for improvement, but with Xtext 1.0.0 being a very new product there are hopefully a few simple improvements that can be made before Xtext considers switching to an LALR technology.
-Disclaimer: The above measurements were made using the Eclipse Helios release of MDT/OCL (3.0.0) and Xtext (1.0.0) projects. No thorough analysis of the performance differences has been made, so the above measurements do not distinguish whether it is the Xtext parser or the MDT/OCL configuration of the Xtext parser that is slow. Informal observations suggest that there are many opportunities for caches to avoid repeated work in both projects.
+Disclaimer: The above measurements were made using the Eclipse Helios release of Eclipse OCL (3.0.0) and Xtext (1.0.0) projects. No thorough analysis of the performance differences has been made, so the above measurements do not distinguish whether it is the Xtext parser or the MDT/OCL configuration of the Xtext parser that is slow. Informal observations suggest that there are many opportunities for caches to avoid repeated work in both projects.
The test code for these speed tests is available as an attachment to \url{https://bugs.eclipse.org/320703}.
@@ -417,7 +397,7 @@
Anyone who studies these OCL constraints soon realizes that the constraints have never been subjected to a tool that provides syntactic, let alone semantic, checking. With so many basic lexical errors, what prospect is there that the constraints actually express the required functionality?
-The MDT/OCL realization of these constraints is distributed throughout the LPG parser, analyzer and validator as hand-coded Java making it difficult to determine the correspondence with the specification, even if the specification was accurate.
+The Eclipse OCL realization of these constraints is distributed throughout the LPG parser, analyzer and validator as hand-coded Java making it difficult to determine the correspondence with the specification, even if the specification was accurate.
The Xtext re-engineering has hand-coded scoping classes that bear a superficial resemblance to the `Inherited Attributes' specifications and, as yet, no realization of the well-formedness rules at all.
@@ -444,19 +424,15 @@
\subsection{LPG Compatibility}
-Unless Xtext is able to come close to LPG speed, the Eclipse MDT/OCL project has no alternative but to support two parsers; an LPG parser for speed and an Xtext parser for use in interactive environments such as editors. The Eclipse MDT/OCL project also has a compatibility obligation to its consumers, so the LPG interface cannot easily be discontinued.
+Unless Xtext is able to come close to LPG speed, the Eclipse OCL project has no alternative but to support two parsers; an LPG parser for speed and an Xtext parser for use in interactive environments such as editors. The Eclipse OCL project also has a compatibility obligation to its consumers, so the LPG interface cannot easily be discontinued.
Maintenance of two independent parsers and analyzers is not an attractive prospect. Xtext uses Xtext to define its own editor and grammar, so it should be possible to perform a Model to Model and then a Model to Text transformation on the Xtext grammar for OCL and thereby auto-generate an LPG grammar with auto-generated action code to maintain a very similar CSG model.
This should give an Xtext-defined LPG grammar avoiding the adverse performance of the ANTLR tooling and preserving the general principles of the existing parser and analyzer interface. Re-expression of the Xtext grammar in LALR form may also provide the missing diagnostics of unwise parser constructs.
-\section{Acknowledgments}
-
-Many thanks to Sebastian Zarnekow, Adolfo S\'anchez-Barbudo Herrera and the anonymous reviewers for helpful comments on earlier versions of this paper.
-
\section{Conclusions}
-Re-engineering the MDT/OCL support to use Xtext 1.0.0 rather than LPG 2.0.17 has demonstrated many of the powerful benefits that Xtext offers. Subjectively Xtext is much better for common functionality and incomparably better because of the richer tooling and extra auto-generated functionality.
+Re-engineering the Eclipse OCL support to use Xtext 1.0.0 rather than LPG 2.0.17 has demonstrated many of the powerful benefits that Xtext offers. Subjectively Xtext is much better for common functionality and incomparably better because of the richer tooling and extra auto-generated functionality.
Objectively, the Xtext version of the OCL grammar is at least 5 times smaller, but the generated parser is 10 times larger and 11 times slower.
@@ -468,33 +444,16 @@
With the aid of Xtext and other modern tooling it may be practical to have OCL editor and parser tooling reusing the exposition of grammars and constraints in the OCL specification.
+%\subsection{Manual Assembly of Bibliographies}\label{bibman}
-\begin{thebibliography}{4}
+%\noindent\textbf{To Do}
-\bibitem{ANTLR} ANTLR, ANother Tool for Language Recognition, \url{http://www.antlr.org}
+\begin{acknowledge}
+Many thanks to Sebastian Zarnekow, Adolfo S\'anchez-Barbudo Herrera and the anonymous reviewers for helpful comments on earlier versions of this paper.
+\end{acknowledge}
-\bibitem{dragon} Aho, A., Sethi, R., Ullman, J.: Compilers: Principles, Techniques and Tools. Addison-Wesley(1988)
-
-\bibitem{Helios} Eclipse Helios release, \url{http://www.eclipse.org/downloads/}
-
-\bibitem{IMP} Eclipse IDE Meta-Tooling Platform Project, \url{http://www.eclipse.org/projects/project_summary.php?projectid=technology.imp}
-
-\bibitem{LPG} Sourceforge LALR Parser Project, \url{http://sourceforge.net/projects/lpg}
-
-\bibitem{MDT/OCL} Eclipse MDT/OCL Project, \url{http://www.eclipse.org/projects/project_summary.php?projectid=modeling.mdt.ocl}
-
-\bibitem{MOFM2T} MOF Model to Text Transformation Language. v1.0, OMG Document Number: formal/2008-01-16, Object Management Group (2010), \url{http://www.omg.org/spec/MOFM2T/1.0}
-
-\bibitem{OCL} Object Constraint Language. Version 2.2, OMG Document Number: formal/2010-02-01, Object Management Group (2010), \url{http://www.omg.org/spec/OCL/2.2}
-
-\bibitem{OCL2.3} First Ballot Resolutions for Object Constraint Language. Version 2.3, \url{http://www.omg.org/archives/ocl2-rtf/msg00331.html}
-
-\bibitem{QVT} Query/View/Transformation Specification. Version 1.1, OMG Document Number: ptc/09-12-05, Object Management Group (2009), \url{http://www.omg.org/spec/QVT/1.1/Beta2/PDF}
-
-\bibitem{TMF/Xtext} Eclipse TMF/Xtext Project, \url{http://www.eclipse.org/Xtext}
-
-\bibitem{UML} Unified Modeling Language, Superstructure. Version 2.3, OMG Document Number: formal/2010-05-05, Object Management Group (2010), \url{http://www.omg.org/spec/UML/2.3}
-
-\end{thebibliography}
+\nocite{*}
+\bibliographystyle{eceasst}
+\bibliography{oclxtext}
\end{document}